Dokumentasi API
Referensi lengkap REST API OTPZap untuk integrasi nomor virtual dan verifikasi OTP.
Informasi Koneksi
https://otpzap.com/api/v1Authorization: Bearer YOUR_API_KEYPanduan Singkat
OTPZap mendukung 3 server dengan cara kerja berbeda:
- Server 1 - Gunakan
product_iduntuk order. Stok dan harga terlihat di endpoint /products. - Server 2 - Gunakan
service_id+country_id+operator_id. Mendukung multiservice dan layanan spesial. - Server 3 - Email OTP. Gunakan
/s3/domains, lalu buat order dengan/order/email-create.
Akun & Saldo
/balanceCek saldo akun.
/topup/createBuat invoice deposit via QRIS (rupiah). Arahkan customer ke payment_url untuk menyelesaikan pembayaran. Saldo dikreditkan otomatis ketika pembayaran sukses. Invoice berlaku 30 menit.
/topup/check?order_id=APIDEP-3-xxxCek status deposit. Status: pending | success | expired | failed. Polling juga otomatis mendorong rekonsiliasi.
🪙 Pembayaran Crypto
Untuk saat ini, deposit crypto (BTC, USDT, ETH, USDC, dll) hanya tersedia melalui dashboard web - tidak tersedia melalui Public API. Customer bisa memilih metode pembayaran crypto langsung di halaman Deposit Saldo di dashboard. Window pembayaran crypto: 25 menit setelah invoice dibuat.
Server 1
Gunakan product_id dari endpoint /products. 1 product = 1 layanan + 1 negara + 1 tier harga. Catalog diambil fresh oleh OTPZap; fetch ulang sebelum create order dan hindari cache client yang terlalu lama.
/countriesDaftar negara tersedia (Server 1).
/services?country_id=7Daftar platform/layanan. Parameter opsional: country_id.
/products?platform_id=1&country_id=7Daftar produk + harga + stok. Parameter: platform_id, country_id, page, limit, sort.
Server 2
Gunakan service_id + country_id + operator_id. Mendukung multiservice dan layanan spesial. Data layanan juga fresh dari sistem OTPZap.
/s2/countriesDaftar negara tersedia (Server 2).
/s2/services?country_id=7Daftar layanan + harga per negara.
/s2/operators?country_id=7Daftar operator per negara.
/s2/specialDaftar layanan spesial (tanpa parameter country/operator). Layanan ini menggunakan nomor virtual yang sudah dialokasikan oleh sistem untuk platform tertentu.
Server 3 - Email OTP
Gunakan Server 3 untuk sewa inbox email. Pilih target site dan domain dulu, lalu buat order email. 20 menit pertama adalah window tunggu; setelah pesan masuk, masa aktif sesi mengikuti policy domain/service email.
/s3/sitesSaran target website. Ini hanya suggestion; domain site valid apa pun bisa dikirim ke endpoint create.
/s3/domains?site=openai.comDomain email tersedia, stok, harga, activation rate, dan estimasi biaya cancel.
/order/email-createBeli Email OTP. Field opsional: qty, subject, regex, atau domains[] untuk aggregator mode.
/order/email-check?ref=APIE-3-xxxPolling status dan pesan email. Response berisi inbox preview, OTP/headline yang diekstrak, timeline pesan, dan expires_at terbaru.
/order/email-reorderMinta pesan baru pada inbox email yang sama. Window tunggu reset ke 20 menit dan saldo OTPZap tidak dipotong lagi.
/order/email-cancelCancel sebelum pesan masuk. Refund bisa dipotong biaya cancel provider.
/order/email-finishSelesaikan order email setelah pesan masuk dan tutup aktivasi provider.
Order & Manajemen
Endpoint berikut berlaku untuk order SMS di Server 1 dan Server 2. Email OTP memakai endpoint khusus Server 3 di atas.
/order/createBeli nomor OTP. Header opsional Idempotency-Key untuk mencegah duplikasi pada retry. Ambil ID dari catalog terbaru. Field service_name opsional; jika dikirim harus cocok dengan nama layanan untuk ID yang dipilih.
/orders.php?limit=20&offset=0&status=success&server=1Daftar order milik API key ini, urutan terbaru. Filter opsional: status, server, limit (maks. 100), dan offset.
/orders/active.phpDaftar seluruh order aktif milik API key ini dengan status pending atau otp_received. Cocok untuk polling beberapa order sekaligus.
/order/check?order_id=65Cek status & ambil OTP. Poll endpoint ini setiap 5 detik. Status flow: pending → otp_received (S1, nomor masih aktif) → success. Order yang gagal otomatis di-refund.
Field penting: otp_code = OTP terbaru/final untuk integrasi otomatis. otps[] = timeline semua OTP yang masuk (oldest first), jadi jangan ambil item pertama sebagai OTP utama. Berguna saat resend menambah OTP baru - kamu bisa detect new entry by length perubahan. resend_count = berapa kali resend sudah dipakai. resend_locked_until = timestamp WIB sampai kapan resend di-lock (null kalau available).
/order/cancelBatalkan order pending. Cooldown 2 menit berlaku untuk semua order (single maupun multiservice). Saldo otomatis dikembalikan jika sistem mengonfirmasi pembatalan. Error codes: 409 jika status bukan pending, 429 jika cooldown belum habis (cek header Retry-After), 502 jika sistem menolak.
/order/finishTandai order selesai. Gunakan setelah OTP diterima dan nomor sudah tidak diperlukan.
/order/resendKirim ulang SMS. Per-OTP gating: setelah satu kali resend, panggilan berikutnya akan menerima HTTP 429 sampai OTP baru masuk via polling. Status dan OTP yang sudah ada tidak direset - OTP baru muncul sebagai entry tambahan di field otps[]. Tidak semua platform mendukung resend.
/order/replaceServer 1 saja. Cancel order lama dan buat order baru di harga produk yang sama secara atomik. Saldo lama di-refund, saldo baru dipotong dalam satu transaksi.
Webhook
OTPZap mengirim POST request ke URL webhook kamu saat event terjadi. Konfigurasi via dashboard atau API endpoint di bawah.
Events:
order.otp_received- OTP berhasil diterimaorder.cancelled- Order dibatalkan & saldo refundorder.finished- Order selesaiorder.replaced- Order Server 1 diganti dengan nomor barudeposit.success- Deposit berhasil*- Wildcard, subscribe ke semua event
Manajemen Webhook
/webhook/getAmbil konfigurasi webhook saat ini. secret tidak pernah di-return di endpoint ini (alasan keamanan, hanya ditampilkan sekali saat set/update).
/webhook/updateBuat atau update konfigurasi webhook. Method PATCH (bukan POST). URL wajib HTTPS dan resolve ke IP publik (private IP otomatis ditolak untuk anti-SSRF).
Field opsional: secret minimal 16 karakter (kalau gak provide atau kurang, OTPZap auto-generate 48-char hex). Simpan secret ini di tempat aman - tidak akan ditampilkan lagi di /webhook/get. is_active default true; bisa di-set false untuk pause sementara tanpa hapus config.
Error 422: URL bukan HTTPS, URL resolve ke IP private/loopback (anti-SSRF), atau ada event yang tidak valid (lihat list di atas).
Keamanan Webhook
Verifikasi Signature:
Butuh bantuan? Hubungi kami via Telegram.