Layanan 03 / OTP API
OTP lewat SMS
atau WhatsApp.
Satu alur untuk SMS dan WhatsApp. Kirim kode, verifikasi input pengguna, dan pantau status pengiriman tanpa menyimpan kode dalam bentuk teks biasa.
Alur verifikasi
Kirim, verifikasi, pantau.
Sistem membuat kode, menyimpan hash-nya, menahan saldo sementara, lalu memasukkan pengiriman ke antrean. Saat pengguna memasukkan kode, endpoint verifikasi memeriksa kode terbaru yang masih berlaku.
- 01
Kirim kode
Pilih SMS atau WhatsApp. Template boleh kosong, sistem memakai template bawaan.
- 02
Verifikasi
Kirim nomor dan kode. Setiap kode yang salah menambah jumlah percobaan.
- 03
Pantau
Pakai ID request untuk melihat status dan waktu kedaluwarsa.
curl -s -X POST "$NOTIF_API_URL/api/v1/otp/sms/send" \ -H "Authorization: Bearer $NOTIF_TOKEN" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: login-2026-11-07-001" \ -d '{ "recipient": "081234567890", "template": "Kode notif: {otp}. Berlaku 5 menit.", "ttl": 300 }'curl -s -X POST "$NOTIF_API_URL/api/v1/otp/verify" \ -H "Authorization: Bearer $NOTIF_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "recipient": "081234567890", "code": "123456", "channel": "sms" }'curl -s "$NOTIF_API_URL/api/v1/otp/01JBCDEFGHJKMNPQRSTVWXYZ" \ -H "Authorization: Bearer $NOTIF_TOKEN" \ -H "Accept: application/json"Cara kerja
Kode pendek, aturan ketat.
Keamanan OTP bukan hanya soal panjang kode. Masa berlaku, batas percobaan, dan cara menyimpan hash yang menentukan apakah kodenya masih layak dipercaya.
- Hash HMAC
- Kode disimpan sebagai hash dengan kunci aplikasi, bukan teks biasa.
- Masa berlaku
- 60 sampai 900 detik. Bawaan 300 detik.
- Percobaan
- Maksimal 5 kali. Habis itu request berstatus failed.
- Jeda
- 60 detik antar-request untuk nomor dan kanal yang sama.
- Nomor
- Respons menampilkan nomor yang sudah disamarkan.
- Idempotency
- Key yang sama mengembalikan request yang sudah dibuat.
Endpoint
Empat endpoint untuk satu alur.
Izin token dibaca per kanal. Token dengan otp-sms:create tidak otomatis bisa mengirim OTP WhatsApp. Pisahkan izin sesuai kebutuhan aplikasi.
- POST
/api/v1/otp/sms/sendMembuat request OTP baru untuk kanal SMS.
otp-sms:create - POST
/api/v1/otp/whatsapp/sendMembuat request OTP baru untuk kanal WhatsApp.
otp-whatsapp:create - POST
/api/v1/otp/verifyVerifikasi kode terbaru untuk nomor dan kanal.
otp-sms:verify | otp-whatsapp:verify - GET
/api/v1/otp/{id}Lihat status terkini satu request OTP.
otp-sms:read | otp-whatsapp:read
Batas dan biaya
Batas dan biaya yang membentuk alur verifikasi.
Geser tabel ke samping untuk melihat kolom lain.
| Item | Nilai | Catatan |
|---|---|---|
| Masa berlaku | 60 sampai 900 detik | Bawaan 300 detik. Di luar rentang ini ditolak. |
| Panjang template | 255 karakter | Wajib ada placeholder {otp} atau {code}. |
| Percobaan verifikasi | 5 kali | Setiap kode salah menambah percobaan. Setelah itu kodenya gagal. |
| Jeda request | 60 detik | Maksimal 5 request per jam untuk nomor dan kanal yang sama. |
| Batas laju API | 120 / menit | Dihitung per token dan per akun. |
| Biaya | Per request | Saldo ditahan saat request dibuat, lalu diselesaikan setelah gateway menerima pesan. |
Pertanyaan
Sebelum kirim kode pertama.
Pengguna bisa minta kode baru?
Bisa, setelah jeda 60 detik. Untuk nomor dan kanal yang sama, maksimal 5 request per jam. Pakai Idempotency-Key yang sama saat mencoba ulang request yang gagal karena koneksi.
Kodenya berlaku berapa lama?
Kamu yang menentukan, antara 60 dan 900 detik. Kalau kosong, sistem memakai 300 detik. Respons pembuatan menyertakan expires_at dalam format ISO 8601.
Bagaimana setelah 5 percobaan gagal?
Request OTP berstatus failed dan kodenya tidak bisa diverifikasi lagi. Pengguna perlu meminta kode baru setelah jeda berlaku.
Kode disimpan di database?
Disimpan sebagai hash HMAC dengan kunci aplikasi, bukan teks biasa. Kode aslinya hanya dikirim ke penerima.
Template pesan bisa diubah?
Bisa, maksimal 255 karakter, dan wajib ada {otp} atau {code}. Kalau template dikosongkan, sistem memakai template bawaan.
Ada simulator sebelum produksi?
Ada. Halaman OTP di dashboard punya tab sandbox untuk mencoba kirim dan verifikasi tanpa menulis integrasi dulu.
Layanan lain
Verifikasi OTP tanpa membangun layanan sendiri.
Buat token dengan izin OTP, kirim request pertama, lalu verifikasi kodenya dari aplikasi kamu.