OTP tidak masuk, bagaimana?
Batalkan pesanan di menu Pesanan. Saldo dikembalikan otomatis jika OTP belum masuk.
Cara isi saldo?
Buka Deposit, pilih nominal, lalu bayar lewat QRIS. Saldo bertambah otomatis setelah pembayaran terkonfirmasi.
Berapa lama nomor aktif?
Nomor aktif 20 menit sejak dibeli.
Apakah nomor bisa dipakai berkali-kali?
Satu nomor dipakai untuk satu kali verifikasi.
Bagaimana cara pakai API?
Buat API key di Lainnya → API Key, lalu baca Dokumentasi API.
{"success":true,"data":...}. Gagal: {"success":false,"error":{"code","message"}}POST/auth/register
Buat akun. Mengembalikan session token untuk dashboard.
{ "username": "budi", "email": "[email protected]", "password": "min8karakter", "ref": "KODE" } // ref opsional
{ "success": true, "data": { "token": "ses_...", "username": "budi" } }POST/auth/login
Masuk. Tidak mengubah API key.
{ "username": "budi", "password": "..." }
{ "success": true, "data": { "token": "ses_...", "username": "budi" } }POST/account/api-key
Buat / ganti API key untuk integrasi (hanya via login). Key tampil sekali, key lama nonaktif.
{ "success": true, "data": { "apiKey": "knk_..." } }GET/countries
Daftar negara (publik).
{ "success": true, "data": [ { "id": 6, "code": "ID", "name": "Indonesia", "emoji": "🇮🇩" } ] }GET/services?country_id=6
Layanan dan harga satu negara (publik).
{ "success": true, "data": [
{ "catalog_product_id": 87, "platform_id": 3, "name": "WhatsApp", "code": "wa", "price": 3700, "stock": 89594 }
] }GET/operators?country_id=6&platform_id=3
Operator yang bisa dipilih (publik). operator_id: null = Any.
{ "success": true, "data": [ { "operator_id": 433, "name": "AXIS (XL Axiata)" } ] }GET/quote?country_id=6&platform_id=3&catalog_product_id=87
Harga pasti saat ini (opsional operator_id).
{ "success": true, "data": { "price": 3700, "stock": 42 } }GET/balance
Cek saldo akun.
{ "success": true, "data": { "balance": 25000 } }GET/transactions?limit=20
Mutasi saldo terbaru. Tipe: topup, order, refund, bonus, admin.
{ "success": true, "data": [ { "type": "order", "amount": -3700, "balance_after": 21300, "at": "2026-10-19T08:00:00.000Z" } ] }POST/deposits
Buat invoice QRIS. Saldo bertambah otomatis setelah dibayar.
{ "amount": 25000 }
{ "success": true, "data": { "id": "66f1...", "amount": 25000, "fee": 60, "total_payment": 25060,
"qr_string": "0002...", "expires_at": "2026-10-19T08:10:00.000Z", "status": "PENDING" } }GET/deposits/:id
Status deposit: PENDING, PAID, EXPIRED.
{ "success": true, "data": { "id": "66f1...", "status": "PAID", "amount": 25000 } }POST/orders
Beli nomor. Saldo dipotong saat order dibuat. operator_id dan expected_price opsional; jika harga naik di atas expected_price, order ditolak (PRICE_CHANGED).
{ "country_id": 6, "platform_id": 3, "catalog_product_id": 87, "operator_id": 433, "expected_price": 3700 }
{ "success": true, "data": {
"id": "66f1c2...", "service": "WhatsApp Indonesia", "status": "ACTIVE",
"phone_number": "+6281234567890", "otp_code": null,
"amount": 3700, "expires_at": "2026-10-19T08:30:00.000Z"
} }GET/orders/:id
Status order. Polling tiap 3–5 detik sampai otp_code terisi. Status: ACTIVE, COMPLETED, CANCELED, EXPIRED.
{ "success": true, "data": { "id": "66f1c2...", "status": "COMPLETED", "otp_code": "482913" } }GET/orders?status=ACTIVE&limit=20
Riwayat order (maks 100 per request).
{ "success": true, "data": [ { "id": "66f1c2...", "service": "WhatsApp Indonesia", "status": "ACTIVE" } ] }POST/orders/:id/resend
Minta kirim ulang SMS untuk order yang masih ACTIVE.
{ "success": true, "data": {} }POST/orders/:id/cancel
Batalkan order, saldo dikembalikan. Baru bisa setelah 2 menit.
{ "success": true, "data": { "status": "CANCELED", "refunded": 3700 } }POST/account/password
Ganti password (hanya via login). Sesi perangkat lain keluar.
{ "old_password": "...", "new_password": "..." }
{ "success": true, "data": {} }GET/referral
Statistik referral akun.
{ "success": true, "data": { "count": 3, "bonus": 15000 } }curl -X POST /api/v1/orders \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{"country_id":6,"platform_id":3,"catalog_product_id":87}'
const H = { Authorization: 'Bearer ' + KEY, 'Content-Type': 'application/json' };
const o = (await (await fetch(BASE + '/orders', {
method: 'POST', headers: H, body: JSON.stringify({ country_id: 6, platform_id: 3, catalog_product_id: 87 })
})).json()).data;
let otp = null;
while (!otp) {
await new Promise(r => setTimeout(r, 4000));
otp = (await (await fetch(BASE + '/orders/' + o.id, { headers: H })).json()).data.otp_code;
}
console.log(otp);
401 UNAUTHORIZED sesi / API key / password salah 402 INSUFFICIENT_BALANCE saldo kurang 403 FORBIDDEN aksi hanya lewat login (bukan API key) 403 EMAIL_NOT_VERIFIED verifikasi email dulu 404 NOT_FOUND data tidak ditemukan 409 PRICE_CHANGED harga naik dari expected_price 409 INVALID_STATE aksi tidak valid untuk status order 409 CANCEL_TOO_EARLY belum 2 menit sejak order 409 CONFLICT data sudah ada (username / email) 422 VALIDATION_ERROR parameter tidak valid 429 RATE_LIMITED terlalu banyak request 503 OUT_OF_STOCK stok layanan habis 503 SERVICE_UNAVAILABLE layanan sementara tidak tersedia