Lewati ke konten
KodeOTP.id

Dokumentasi Seller API

Integrasikan pembelian OTP, pulsa, dan paket ke sistem Anda memakai REST API dan saldo dompet utama yang sama dengan website.

Autentikasi

Base URL: https://kodeotp.id/api/v1. Kirim API key pada header Authorization: Bearer ko_live_…. Key dibuat di Dashboard → Seller API dan hanya ditampilkan sekali. Akses Seller API terbuka permanen setelah satu top up berhasil minimal Rp100.000. Key nonaktif atau dicabut akan ditolak (401).

Batas request: 120 request/menit per key (429 RATE_LIMITED).

Idempotency

Endpoint pembelian wajib menyertakan header Idempotency-Key (8–120 karakter). Mengulang request dengan key dan body yang sama mengembalikan respons pertama tanpa membeli ulang (header Idempotent-Replayed: true). Key yang sama dengan body berbeda ditolak 422. Jika koneksi terputus, ulangi dengan key yang sama — jangan membuat key baru untuk transaksi yang sama.

Format error

{"success": false, "error": {"code": "INSUFFICIENT_BALANCE", "message": "Saldo tidak mencukupi."}}
KodeHTTPArti
API_KEY_INVALID / API_KEY_INACTIVE401Key salah, nonaktif, atau dicabut
INSUFFICIENT_BALANCE402Saldo dompet utama kurang
OUT_OF_STOCK409Stok nomor habis
PRICE_CHANGED409Harga melebihi max_price yang Anda kirim
ACTIVE_LIMIT409Kapasitas nomor aktif Seller API penuh
CANCEL_TOO_EARLY409Pembatalan belum diizinkan
PREVIOUS_PENDING409Transaksi pulsa sebelumnya ke nomor & produk sama belum final
API_DISABLED / OTP_DISABLED503Layanan dihentikan sementara

Akun

GET /me — saldo, diskon OTP API, sisa slot aktif, batas per order.

OTP

  • GET /otp/services — layanan tersedia + harga mulai (harga API).
  • GET /otp/countries?service=wa — negara, country_id, harga API, stok.
  • GET /otp/price?service=wa&country=1 — harga satu kombinasi.
  • POST /otp/orders — body {"service":"wa","country":1,"quantity":1,"max_price":2500}. Harga API = harga retail − 10%.
  • GET /otp/orders/{order_code} — status order dan setiap nomor.
  • GET /otp/activations/{id} — status nomor + kode SMS (memicu pengecekan ke provider).
  • POST /otp/activations/{id}/cancel — batalkan (setelah 2 menit); refund ke saldo per nomor setelah pembatalan dikonfirmasi provider (respons tidak pasti → status cancel_pending sampai terkonfirmasi).
  • POST /otp/activations/{id}/finish — selesaikan nomor yang sudah menerima kode.
curl -X POST https://kodeotp.id/api/v1/otp/orders \
  -H "Authorization: Bearer ko_live_xxx" \
  -H "Idempotency-Key: order-20261102-0001" \
  -H "Content-Type: application/json" \
  -d '{"service":"wa","country":1,"quantity":1}'

Pulsa & paket

Produk pulsa, paket data, paket bicara, dan masa aktif memakai harga normal tanpa diskon.

  • GET /iak/products?category=pulsa|data|bicara|masa_aktif&operator=telkomsel
  • POST /iak/orders — body {"product_code":"…","customer_no":"0812…","max_price":11000} + Idempotency-Key.
  • GET /iak/orders/{ref_id} — status transaksi.

Status

Nomor OTP: processing, waiting (menunggu SMS), received (kode masuk), cancel_pending, unknown (diverifikasi otomatis), completed, cancelled, expired, failed. Field refunded menunjukkan saldo sudah dikembalikan.

Pulsa & paket: processing, pending (menunggu provider — tidak direfund sampai status final), success, failed (direfund otomatis sekali).

Akses Seller API terbuka permanen setelah akun Anda menyelesaikan satu top up berhasil minimal Rp100.000; setelah itu API key dapat dibuat di menu Seller API pada dashboard. Diskon 10% hanya berlaku untuk pembelian OTP yang dilakukan melalui API key yang aktif dan valid, sedangkan pulsa, paket data, paket bicara, dan masa aktif lewat API memakai harga normal. Pembelian dari website dan Telegram Bot tetap memakai harga retail.

FAQ

Pertanyaan terkait

Lihat semua FAQ

Apa fungsi parameter max_price?
max_price adalah batas harga tertinggi yang Anda setujui per item. Jika harga saat diproses melebihi angka tersebut, pembelian ditolak dengan kode PRICE_CHANGED dan saldo tidak dipotong.
Apakah API key bisa dilihat lagi setelah dibuat?
Tidak. API key hanya ditampilkan sekali saat dibuat dan disimpan dalam bentuk hash. Jika hilang, cabut key lama lalu buat key baru di menu Seller API.
Bagaimana mengetahui kode OTP sudah masuk lewat API?
Panggil GET /otp/activations/{id} secara berkala. Endpoint ini memicu pengecekan ke provider dan mengembalikan status nomor beserta kode SMS bila sudah diterima.
Apakah ada batas jumlah request?
Ya, setiap API key memiliki batas request per menit seperti tercantum pada dokumentasi di atas. Request yang melewati batas mendapat respons 429 RATE_LIMITED.

Diperbarui 4 November 2026