Lompat ke konten utama

Dokumentasi

Satu kontrak untuk
SMS, WhatsApp, dan OTP.

REST, JSON, dan bearer token. Halaman ini merangkum bagian yang paling sering dipakai. Kontrak lengkap, contoh respons, dan daftar field ada di dokumentasi aplikasi.

/api/v1Base path
Bearer tokenAuth
JSONFormat
120 / menitBatas laju

01 / Autentikasi

Token membawa izin, bukan hanya identitas.

Kirim token di header Authorization. Izin dibaca per endpoint, jadi token yang hanya punya sms:read tidak bisa membuat batch. Sebaiknya buat token per integrasi supaya bisa dicabut tanpa mengganggu yang lain.

Autentikasi
Authorization: Bearer notif.<64 karakter hex>Content-Type: application/jsonAccept: application/jsonIdempotency-Key: <unik per operasi tulis>

02 / OTP

Kirim, verifikasi, pantau.

Kanal SMS dan WhatsApp memakai bentuk request yang sama. Template maksimal 255 karakter dan wajib ada {otp} atau {code}. Masa berlakunya 60 sampai 900 detik.

  • POST/api/v1/otp/sms/send

    Membuat request OTP lewat SMS.

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

    Membuat request OTP lewat WhatsApp.

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

    Verifikasi kode untuk nomor dan kanal.

    otp-sms:verify | otp-whatsapp:verify
  • GET/api/v1/otp/{id}

    Lihat status satu request.

    otp-sms:read | otp-whatsapp:read
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","ttl":300}'

03 / SMS, RCS, MMS

Satu endpoint, tiga tipe pesan.

Header Idempotency-Key wajib untuk membuat batch. Isi type dengan SMS, RCS, atau MMS. RCS boleh memakai media, MMS wajib. Penerima per request 1 sampai 1.000 dan harus unik.

  • POST/api/v1/sms

    Membuat batch SMS, RCS, atau MMS.

    sms:create
  • GET/api/v1/sms

    Daftar batch, 20 per halaman.

    sms:read
  • GET/api/v1/sms/{id}

    Detail batch dan pesan di dalamnya.

    sms:read
  • GET/api/v1/sms/batches/{id}

    Daftar pesan dalam satu batch.

    sms:read

04 / WhatsApp

Satu penerima per request.

Endpoint WhatsApp membuat batch berisi satu penerima. Kalau daftarnya besar, pakai sesi blast di dashboard. Media dikirim sebagai URL HTTPS, bukan base64.

  • POST/api/v1/whatsapp

    Kirim satu pesan WhatsApp.

    whatsapp:create
  • GET/api/v1/whatsapp

    Daftar batch WhatsApp.

    whatsapp:read
  • GET/api/v1/whatsapp/{id}

    Detail satu batch.

    whatsapp:read
  • GET/api/v1/whatsapp/batches/{id}

    Daftar pesan dalam batch.

    whatsapp:read

05 / Nomor Virtual

Status order yang perlu dikenal.

Nomor virtual dikelola dari panel notif, bukan dari endpoint publik SMS atau WhatsApp. Status order dan kode OTP muncul di dashboard, lalu kode bisa diteruskan ke perangkat WhatsApp lewat integrasi.

Geser tabel ke samping untuk melihat kolom lain.

Status order nomor virtual
ItemNilaiCatatan
ACTIVEMenunggu SMSNomor siap. Pembatalan mengikuti jendela yang diizinkan mitra.
OTP_RECEIVEDKode masukKode tersedia. Order bisa diselesaikan atau diminta ulang kalau flag mengizinkan.
COMPLETEDSelesaiOrder ditutup setelah kodenya dipakai.
CANCELEDDibatalkanOrder dihentikan sebelum kode diterima.
EXPIREDKedaluwarsaMasa aktif habis tanpa kode.

06 / Webhook

Periksa tanda tangan sebelum memercayai payload.

Webhook batch mengirim event sms.batch.updated dan whatsapp.batch.updated ke URL HTTPS publik di port 443. Setiap request membawa X-Webhook-Id, X-Webhook-Timestamp, dan X-Webhook-Signature dengan format sha256=HMAC(timestamp.body, secret).

Webhook batch
{  "id": "9a51d6de-7f0c-4c1b-9f8a-2f7b5a6d8c31",  "event": "sms.batch.updated",  "created_at": "2026-11-07T09:30:00+00:00",  "data": {    "id": "01JBCDEFGHJKMNPQRSTVWXYZ",    "status": "running",    "lifecycle_status": "running"  }}

Verifikasi tanda tangan memakai raw body, bukan JSON yang sudah di-parse. Tolak request dengan timestamp lama dan jangan mengikuti redirect.

07 / Batas

Angka yang membentuk kontrak API.

Geser tabel ke samping untuk melihat kolom lain.

Batas API notif.
ItemNilaiCatatan
Batas request120 / menitPer token dan per akun. Respons 429 bawa Retry-After.
Penerima per batch SMS1 sampai 1.000Harus unik dalam satu request.
Panjang pesan5.000 karakterBerlaku untuk SMS, RCS, dan WhatsApp.
MediaURL HTTPSMaksimal 2.048 karakter. Batas file 25 MB berlaku untuk RCS dan MMS.
Masa berlaku OTP60 sampai 900 detikBawaan 300 detik.
Percobaan OTP5 kaliHabis itu request berstatus failed.
Jeda OTP60 detikMaksimal 5 request per jam untuk nomor dan kanal yang sama.
Halaman pesan1 sampai 1.000Bawaan 100 pesan per halaman di detail batch.

08 / Kode error

Tentukan tindakan dari kode error, bukan pesan.

Pesan error bisa berubah. Kode error adalah enum yang stabil dan dipakai untuk menentukan tindakan.

Geser tabel ke samping untuk melihat kolom lain.

Kode error API
ItemNilaiCatatan
UNAUTHORIZED401Token tidak dikirim, salah, dicabut, atau kedaluwarsa.
FORBIDDEN403Token tidak punya izin untuk endpoint ini.
NOT_FOUND404ID tidak ada atau bukan milik akun token.
IDEMPOTENCY_KEY_REUSED409Key yang sama dipakai dengan body berbeda.
VALIDATION_ERROR422Field wajib kosong, format salah, atau batas terlampaui.
RATE_LIMIT_EXCEEDED429Tunggu sesuai Retry-After sebelum mencoba lagi.
SERVICE_UNAVAILABLE503Layanan nonaktif atau perangkat WhatsApp tidak tersedia.
OTP_DISABLED503Layanan OTP sedang dinonaktifkan.
WHATSAPP_DISABLED503Layanan WhatsApp sedang dinonaktifkan.

Daftar lengkap termasuk kode khusus kanal ada di dokumentasi aplikasi.

Butuh contoh lain?

Dokumentasi aplikasi berisi contoh respons, field per endpoint, dan penjelasan setiap nilai enum. Mulai dari sana sebelum menulis integrasi baru.

Buka dokumentasi aplikasi

Mulai dari token yang tepat.

Buat token dengan izin yang sempit, lalu kirim request pertama dari server kamu.