Sertakan di setiap request. Jangan bagikan ke siapapun.
Login untuk melihat API Key Anda
Base URL
https://yourdomain.com/api/v1
/api/v1. Semua response JSON dengan field success: true/false.
Autentikasi
Semua endpoint memerlukan header X-API-Key. API key didapat dari halaman dashboard.
curl -X GET "https://yourdomain.com/api/v1/countries" \
-H "X-API-Key: vn_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Rate Limit
Katalog
Mengambil daftar semua negara yang tersedia. Gunakan id sebagai country_id di endpoint lain.
curl "https://yourdomain.com/api/v1/countries" \
-H "X-API-Key: vn_xxxx"
{
"success": true,
"data": [
{ "id": 6, "code": "ID", "name": "Indonesia", "dial_code": "+62", "emoji": "๐ฎ๐ฉ" },
{ "id": 1, "code": "US", "name": "United States", "dial_code": "+1", "emoji": "๐บ๐ธ" }
]
}
Platform/aplikasi tersedia untuk negara tertentu (WhatsApp, Telegram, dll).
curl "https://yourdomain.com/api/v1/services?country_id=6" \
-H "X-API-Key: vn_xxxx"
{
"success": true,
"data": [
{ "id": 1, "name": "WhatsApp", "icon": "https://..." },
{ "id": 2, "name": "Telegram", "icon": "https://..." },
{ "id": 3, "name": "Instagram", "icon": "https://..." }
]
}
Produk nomor virtual tersedia beserta stok dan harga. Gunakan id saat membuat order.
curl "https://yourdomain.com/api/v1/products?country_id=6&platform_id=1" \
-H "X-API-Key: vn_xxxx"
{
"success": true,
"data": [
{
"id": 142,
"name": "WhatsApp Indonesia",
"available": 42,
"price": 16500
}
],
"meta": { "page": 1, "limit": 50, "total": 1 }
}
Order
Membuat order nomor virtual baru. Saldo dipotong otomatis. Setelah dibuat, polling /orders/:id untuk menunggu OTP.
curl -X POST "https://yourdomain.com/api/v1/orders" \
-H "X-API-Key: vn_xxxx" \
-H "Content-Type: application/json" \
-d '{"product_id": 142}'
{
"success": true,
"data": {
"id": "ord-abc123",
"phoneNumber": "+628123456789",
"productName": "WhatsApp Indonesia",
"price": 16500,
"status": "ACTIVE",
"otpCode": null,
"expiresAt": "2024-01-15T10:30:00.000Z",
"createdAt": "2024-01-15T10:00:00.000Z"
}
}
curl "https://yourdomain.com/api/v1/orders?status=ACTIVE" \
-H "X-API-Key: vn_xxxx"
{
"success": true,
"data": [
{
"id": "ord-abc123",
"status": "ACTIVE",
"phoneNumber": "+628123456789",
"productName": "WhatsApp Indonesia",
"price": 16500,
"otpCode": null,
"createdAt": "2024-01-15T10:00:00.000Z"
}
],
"meta": { "page": 1, "limit": 20, "total": 3 }
}
status = "OTP_RECEIVED" โ baca otpCode.
curl "https://yourdomain.com/api/v1/orders/ord-abc123" \
-H "X-API-Key: vn_xxxx"
{
"success": true,
"data": {
"id": "ord-abc123",
"status": "ACTIVE",
"phoneNumber": "+628123456789",
"otpCode": null,
"expiresAt": "2024-01-15T10:30:00.000Z"
}
}
{
"success": true,
"data": {
"id": "ord-abc123",
"status": "OTP_RECEIVED",
"phoneNumber": "+628123456789",
"otpCode": "123456",
"expiresAt": "2024-01-15T10:30:00.000Z"
}
}
Batalkan order berstatus ACTIVE. Tidak ada request body.
curl -X POST "https://yourdomain.com/api/v1/orders/ord-abc123/cancel" \
-H "X-API-Key: vn_xxxx"
{ "success": true, "data": { "id": "ord-abc123", "status": "CANCELED" } }
Deposit
Buat transaksi deposit baru, mendapat QRIS untuk dibayar. Poll /deposit/:id/check untuk cek status.
curl -X POST "https://yourdomain.com/api/v1/deposit" \
-H "X-API-Key: vn_xxxx" \
-H "Content-Type: application/json" \
-d '{"amount": 50000}'
{
"success": true,
"data": {
"id": "dep-xyz789",
"amount": 50000,
"totalAmount": 51500,
"qrisImage": "https://payqris.web.id/qr/...",
"status": "PENDING",
"expiredAt": "2024-01-15T10:15:00.000Z"
}
}
Poll tiap 5 detik. Status SUCCESS โ saldo otomatis ditambahkan.
curl "https://yourdomain.com/api/v1/deposit/dep-xyz789/check" \
-H "X-API-Key: vn_xxxx"
{
"success": true,
"data": {
"id": "dep-xyz789",
"status": "SUCCESS",
"amount": 50000,
"paidAt": "2024-01-15T10:05:23.000Z"
}
}
Batalkan deposit berstatus PENDING. Tidak ada body.
curl -X POST "https://yourdomain.com/api/v1/deposit/dep-xyz789/cancel" \
-H "X-API-Key: vn_xxxx"
{ "success": true }
Status
Error
{
"success": false,
"error": "INSUFFICIENT_BALANCE",
"message": "Saldo tidak mencukupi"
}