Lompat ke konten utama

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.

  1. 01

    Kirim kode

    Pilih SMS atau WhatsApp. Template boleh kosong, sistem memakai template bawaan.

  2. 02

    Verifikasi

    Kirim nomor dan kode. Setiap kode yang salah menambah jumlah percobaan.

  3. 03

    Pantau

    Pakai ID request untuk melihat status dan waktu kedaluwarsa.

Alur OTP
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  }'

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/send

    Membuat request OTP baru untuk kanal SMS.

    otp-sms:create
  • POST/api/v1/otp/whatsapp/send

    Membuat request OTP baru untuk kanal WhatsApp.

    otp-whatsapp:create
  • POST/api/v1/otp/verify

    Verifikasi 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.

Batas layanan OTP
ItemNilaiCatatan
Masa berlaku60 sampai 900 detikBawaan 300 detik. Di luar rentang ini ditolak.
Panjang template255 karakterWajib ada placeholder {otp} atau {code}.
Percobaan verifikasi5 kaliSetiap kode salah menambah percobaan. Setelah itu kodenya gagal.
Jeda request60 detikMaksimal 5 request per jam untuk nomor dan kanal yang sama.
Batas laju API120 / menitDihitung per token dan per akun.
BiayaPer requestSaldo 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.