Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Format Response

Semua endpoint Merchant API mengembalikan response dalam format JSON dengan struktur yang konsisten.

Envelope Response

{
  "success": true,
  "message": "Keterangan singkat hasil operasi",
  "rc": "000",
  "data": { ... }
}
FieldTipeKeterangan
successBooleantrue jika request diproses tanpa error HTTP-level
messageStringPesan singkat yang mendeskripsikan hasil
rcStringKode respon bisnis — "000" = sukses; kode lain lihat Kode Respon
dataObject/Array/nullPayload hasil operasi; struktur bervariasi per endpoint

Catatan: success: true berarti HTTP request berhasil diproses, bukan berarti transaksi bisnis berhasil. Selalu cek field rc dan data.status untuk status transaksi.

HTTP Status Codes

HTTP StatusKapan Terjadi
200 OKRequest berhasil diproses (termasuk transaksi FAILED/PENDING)
400 Bad RequestFormat body tidak valid
401 UnauthorizedAPI Key tidak valid atau signature gagal
403 ForbiddenAPI Key valid tapi tidak punya akses, atau merchant nonaktif
404 Not FoundResource tidak ditemukan (contoh: transaksi tidak ada)
422 Unprocessable EntityValidasi field gagal (contoh: field wajib kosong, format salah)
500 Internal Server ErrorError internal server

Response Validasi Error (422)

{
  "success": false,
  "message": "Validation failed",
  "errors": [
    {
      "field": "amount",
      "message": "amount must be a positive integer (digits only)"
    },
    {
      "field": "product_id",
      "message": "product_id is required"
    }
  ]
}

Response Transaksi Sukses

{
  "success": true,
  "message": "Transaction completed successfully",
  "rc": "000",
  "data": {
    "req_id": "TXN-20240501-001",
    "ref_id": "1777946295495371000",
    "product_id": "XL5",
    "cust_id": "08123456789",
    "status": "SUCCESS",
    "rc": "000",
    "description": "Transaksi Sukses",
    "message": "PULSA XL 5000 KE 08123456789 SUKSES",
    "amount": "5000",
    "unit_price": "5500",
    "balance_used": "5500",
    "balance": "494500",
    "serial_no": "REF123456789",
    "data": {}
  }
}

Response Transaksi Gagal

{
  "success": true,
  "message": "Transaction completed",
  "rc": "008",
  "data": {
    "req_id": "TXN-20240501-002",
    "ref_id": "1777946295495372000",
    "status": "FAILED",
    "rc": "008",
    "description": "Insufficient Balance",
    "message": "Saldo deposit tidak mencukupi",
    "balance": "1000",
    "data": {}
  }
}

Field data Umum

Hampir semua endpoint transaksi mengembalikan field berikut dalam data:

FieldTipeKeterangan
req_idStringID unik dari merchant (idempotency key)
ref_idStringID referensi internal sistem
product_idStringKode produk yang digunakan
cust_idStringID customer / nomor tujuan
statusStringSUCCESS, FAILED, atau PENDING
rcStringKode respon biller atau sistem
descriptionStringKeterangan RC
messageStringPesan detail dari biller/sistem
amountStringNominal transaksi dalam IDR
unit_priceStringHarga satuan produk
balance_usedStringSaldo yang dipotong
balanceStringSaldo merchant setelah transaksi
serial_noStringNomor seri / token dari biller
dataObjectData tambahan dari biller (bervariasi)

Idempotency

Semua endpoint transaksi berbayar mendukung idempotency via field req_id:

  • Jika request gagal karena timeout atau error jaringan, kirim ulang dengan req_id yang sama — sistem mengembalikan hasil transaksi pertama tanpa debit ganda.
  • Gunakan req_id berbeda untuk setiap transaksi baru.
  • Format req_id yang disarankan: {PREFIX}-{YYYYMMDD}-{SEQUENCE} — contoh: TXN-20240501-001.

Strict JSON

Semua endpoint menggunakan strict JSON parsing:

  • Field yang tidak dikenal dalam request body akan ditolak dengan 422 Unprocessable Entity.
  • Kirim hanya field yang didokumentasikan.