Daftar Error Codes
Semua error API IsiKuota dikembalikan dalam format:
{
"success": false,
"code": "INVALID_API_KEY",
"message": "API ID tidak ditemukan atau tidak aktif",
"data": null,
"errors": null,
"meta": null
}
Periksa field success dan code untuk menentukan tindakan yang tepat.
General
| HTTP | Code | Keterangan |
|---|---|---|
| 200 | SUCCESS | Request berhasil diproses |
| 201 | CREATED | Data baru berhasil dibuat |
| 200 | PENDING | Request masih dalam proses |
| 400 | FAILED | Kesalahan umum |
| 500 | SERVER_ERROR | Kesalahan internal server |
Autentikasi & Keamanan
| HTTP | Code | Keterangan |
|---|---|---|
| 401 | UNAUTHORIZED | Tidak terautentikasi |
| 401 | INVALID_SIGNATURE | Signature tidak valid |
| 401 | INVALID_API_KEY | API Key salah atau tidak valid |
| 401 | SESSION_EXPIRED | Sesi sudah kedaluwarsa |
| 401 | INVALID_CREDENTIALS | Kredensial tidak valid |
| 403 | FORBIDDEN | Tidak punya izin |
| 403 | IP_NOT_ALLOWED | IP tidak ada di whitelist |
| 403 | ACCESS_DENIED | Akses ditolak |
| 403 | ACCOUNT_SUSPENDED | Akun disuspend |
| 403 | ACCOUNT_LOCKED | Akun dikunci |
| 403 | LOGIN_BLOCKED | Login diblokir |
| 403 | BLACKLISTED_TARGET | Nomor tujuan diblokir |
| 403 | SUBSCRIPTION_REQUIRED | Butuh subscription aktif |
| 405 | METHOD_NOT_ALLOWED | HTTP method tidak diizinkan |
Validasi
| HTTP | Code | Keterangan |
|---|---|---|
| 400 | INVALID_PARAMETER | Parameter request kurang atau salah |
| 400 | INVALID_COMMAND | Nilai cmd tidak dikenal |
| 422 | VALIDATION_FAILED | Validasi data gagal |
| 400 | INVALID_PHONE_NUMBER | Nomor HP tidak valid |
| 400 | INVALID_PRODUCT | Kode produk tidak valid |
| 400 | INVALID_AMOUNT | Nominal tidak valid |
| 400 | INVALID_REF_ID | Format ref_id tidak valid |
| 409 | DUPLICATE_REF_ID | ref_id sudah digunakan sebelumnya |
| 400 | INVALID_CUSTOMER_ID | ID pelanggan tidak valid |
| 400 | INVALID_TARGET_NUMBER | Nomor tujuan tidak valid |
| 422 | INVALID_PIN | PIN salah |
| 422 | WRONG_PASSWORD | Password salah |
Saldo
| HTTP | Code | Keterangan |
|---|---|---|
| 400 | INSUFFICIENT_BALANCE | Saldo tidak mencukupi |
| 409 | BALANCE_LOCKED | Saldo sedang dikunci |
| 500 | BALANCE_OPERATION_FAILED | Operasi saldo gagal |
Produk & Kategori
| HTTP | Code | Keterangan |
|---|---|---|
| 404 | PRODUCT_NOT_FOUND | Kode produk tidak ditemukan |
| 503 | PRODUCT_OFFLINE | Produk sedang offline |
| 404 | PRODUCT_NOT_AVAILABLE | Produk tidak tersedia |
| 503 | PRODUCT_MAINTENANCE | Produk sedang maintenance |
| 404 | CATEGORY_NOT_FOUND | Kategori tidak ditemukan |
| 404 | CUSTOMER_NOT_FOUND | Nomor pelanggan tidak ditemukan di provider |
Inquiry Pascabayar
| HTTP | Code | Keterangan |
|---|---|---|
| 400 | INQUIRY_REQUIRED | Lakukan cek tagihan (inquiry) terlebih dahulu sebelum membayar |
| 400 | INQUIRY_EXPIRED | Sesi inquiry sudah habis (5 menit), ulangi cek tagihan |
Transaksi & Order
| HTTP | Code | Keterangan |
|---|---|---|
| 409 | DUPLICATE_TRANSACTION | Transaksi duplikat terdeteksi |
| 200 | ORDER_SUCCESS | Transaksi berhasil |
| 400 | ORDER_FAILED | Transaksi gagal |
| 200 | ORDER_PENDING | Transaksi menunggu konfirmasi |
| 200 | ORDER_PROCESSING | Transaksi sedang aktif diproses di provider |
| 409 | ORDER_ALREADY_PROCESSED | Transaksi sudah diproses sebelumnya |
| 200 | ORDER_REFUNDED | Transaksi telah direfund |
| 410 | ORDER_EXPIRED | Transaksi sudah kedaluwarsa |
| 404 | ORDER_NOT_FOUND | Transaksi tidak ditemukan |
Tagihan Pascabayar
| HTTP | Code | Keterangan |
|---|---|---|
| 200 | BILL_INQUIRY_SUCCESS | Cek tagihan berhasil |
| 400 | BILL_INQUIRY_FAILED | Cek tagihan gagal |
| 409 | BILL_ALREADY_PAID | Tagihan sudah dibayar |
| 200 | BILL_PAYMENT_SUCCESS | Pembayaran tagihan berhasil |
| 400 | BILL_PAYMENT_FAILED | Pembayaran tagihan gagal |
| 200 | BILL_PAYMENT_PENDING | Pembayaran tagihan pending |
| 404 | BILL_NOT_AVAILABLE | Tagihan tidak tersedia |
| 409 | BILL_AMOUNT_MISMATCH | Nominal tagihan tidak sesuai |
Provider
| HTTP | Code | Keterangan |
|---|---|---|
| 504 | PROVIDER_TIMEOUT | Provider tidak merespons (timeout) |
| 502 | PROVIDER_ERROR | Provider mengembalikan error |
| 503 | PROVIDER_MAINTENANCE | Provider sedang maintenance |
| 502 | PROVIDER_REJECTED | Provider menolak transaksi |
| 200 | PROVIDER_PENDING | Transaksi pending di sisi provider |
| 502 | PROVIDER_CONNECTION_FAILED | Tidak dapat terhubung ke provider |
Callback
| HTTP | Code | Keterangan |
|---|---|---|
| 200 | CALLBACK_SUCCESS | Callback berhasil diterima |
| 400 | CALLBACK_FAILED | Callback gagal divalidasi |
| 401 | CALLBACK_SIGNATURE_INVALID | Signature callback tidak valid |
| 403 | CALLBACK_NOT_ALLOWED | Sumber callback tidak diizinkan |
Refund
| HTTP | Code | Keterangan |
|---|---|---|
| 200 | REFUND_SUCCESS | Refund berhasil |
| 400 | REFUND_FAILED | Refund gagal |
| 409 | REFUND_NOT_ELIGIBLE | Transaksi tidak memenuhi syarat refund |
| 409 | REFUND_ALREADY_PROCESSED | Refund sudah diproses sebelumnya |
Rate Limit
| HTTP | Code | Keterangan |
|---|---|---|
| 429 | TOO_MANY_REQUESTS | Terlalu banyak request, coba lagi nanti |
Sistem & Database
| HTTP | Code | Keterangan |
|---|---|---|
| 404 | DATA_NOT_FOUND | Data tidak ditemukan |
| 500 | DATABASE_ERROR | Kesalahan database |
| 503 | SYSTEM_MAINTENANCE | Sistem sedang maintenance |
| 503 | SERVICE_UNAVAILABLE | Layanan tidak tersedia |
| 502 | NETWORK_ERROR | Jaringan bermasalah |
| 504 | CONNECTION_FAILED | Koneksi gagal |
Deposit
| HTTP | Code | Keterangan |
|---|---|---|
| 200 | DEPOSIT_SUCCESS | Deposit berhasil |
| 200 | DEPOSIT_PENDING | Deposit menunggu pembayaran |
| 400 | DEPOSIT_FAILED | Deposit gagal |
| 408 | DEPOSIT_EXPIRED | Deposit kedaluwarsa |
| 200 | DEPOSIT_REFUND | Deposit direfund |
| 409 | DEPOSIT_PENDING_EXISTS | Masih ada deposit pending yang belum selesai |
Aturan Bisnis
| HTTP | Code | Keterangan |
|---|---|---|
| 403 | OPERATION_NOT_ALLOWED | Operasi tidak diizinkan |
| 403 | FEATURE_DISABLED | Fitur dinonaktifkan |
| 400 | NOT_SUPPORTED | Operasi tidak didukung |
Contoh Penanganan Error
<?php
$response = json_decode($apiResponse, true);
if (!$response['success']) {
switch ($response['code']) {
case 'ORDER_PENDING':
case 'PROVIDER_PENDING':
// Simpan ref_id, tunggu callback
break;
case 'INSUFFICIENT_BALANCE':
// Notifikasi admin untuk top up
break;
case 'PROVIDER_TIMEOUT':
case 'PROVIDER_ERROR':
// Cek status via /status sebelum retry
break;
case 'INVALID_SIGNATURE':
case 'INVALID_API_KEY':
// Log dan periksa implementasi signature
break;
case 'DUPLICATE_REF_ID':
case 'ORDER_ALREADY_PROCESSED':
// Cek status transaksi yang sudah ada
break;
case 'INQUIRY_EXPIRED':
// Ulangi inquiry dari awal
break;
default:
// Log untuk investigasi
break;
}
}
Jangan selalu retry
Beberapa error seperti INSUFFICIENT_BALANCE, INVALID_PHONE_NUMBER, dan PRODUCT_NOT_FOUND tidak akan berhasil meskipun diretry. Tangani sesuai kode error-nya.
tip
Selalu log field code dan message dari setiap response untuk memudahkan debugging dan monitoring transaksi.