Eksekusi Transfer Dana
Mengeksekusi transfer dana ke rekening bank tujuan. Saldo deposit merchant akan dipotong.
URL: POST /api/v1/merchant/disbursement/payment
Lakukan Inquiry Rekening terlebih dahulu untuk memvalidasi rekening dan mendapatkan informasi fee sebelum menjalankan payment.
Request
Headers
| Header | Wajib | Keterangan |
|---|---|---|
X-API-Key | Ya | API Key merchant |
Content-Type | Ya | application/json |
X-Signature | Kondisional | Jika Signature Validation aktif |
X-Timestamp | Kondisional | Unix timestamp (jika Signature Validation aktif) |
Body
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
req_id | String | Ya | ID unik transaksi dari merchant — idempotency key |
product_id | String | Ya | Kode produk transfer (contoh: "DSTF") |
account_number | String | Ya | Nomor rekening tujuan (sama dengan inquiry) |
amount | String | Ya | Nominal transfer dalam IDR (sama dengan inquiry) |
bank_code | String | Tidak | Kode bank tujuan (opsional) |
Idempotency via req_id
req_id berfungsi sebagai idempotency key:
- Retry dengan
req_idyang sama → sistem mengembalikan hasil transaksi pertama, tanpa debit ganda. - Gunakan
req_idyang berbeda hanya untuk transaksi yang memang baru.
Contoh Request
{
"req_id": "PAY-20240430-001",
"product_id": "DSTF",
"account_number": "1380610457",
"amount": "10000",
"bank_code": "014"
}
curl --location 'https://api-sandbox.alfakios.com/api/v1/merchant/disbursement/payment' \
--header 'Content-Type: application/json' \
--header 'X-API-Key: apk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--data '{
"req_id": "PAY-20240430-001",
"product_id": "DSTF",
"account_number": "1380610457",
"amount": "10000",
"bank_code": "014"
}'
Response
Spesifikasi
| Field | Tipe | Keterangan |
|---|---|---|
trx_id | String | ID transaksi internal sistem |
req_id | String | req_id yang dikirim merchant |
ref_id | String | ID referensi dari biller |
account_number | String | Nomor rekening tujuan |
account_name | String | Nama pemilik rekening |
bank_code | String | Kode bank tujuan |
bank_name | String | Nama bank tujuan |
status | String | SUCCESS, FAILED, atau PENDING |
rc | String | Kode respon dari biller atau sistem |
description | String | Keterangan RC |
message | String | Keterangan detail |
amount | String | Nominal transfer |
fee | String | Biaya admin yang dipotong |
total_cost | String | Total yang dipotong (amount + fee) |
balance_used | String | Saldo yang benar-benar terpotong |
balance | String | Saldo deposit setelah transaksi |
serial_no | String | Nomor referensi transfer dari biller |
data | Object | Informasi tambahan |
details | String | String OtomaX-style — lihat Integrasi OtomaX |
Contoh Response Berhasil
{
"success": true,
"message": "Disbursement payment completed",
"rc": "000",
"data": {
"trx_id": "177794638960894000",
"req_id": "PAY-20240430-001",
"ref_id": "980173",
"account_number": "1380610457",
"account_name": "DUMMY NAME",
"bank_code": "014",
"bank_name": "",
"status": "SUCCESS",
"rc": "00",
"description": "Transaksi Sukses",
"message": "DISBURSEMENT DSTF KE 1380610457 SUKSES. SAL=268994,ID=177794638960894000",
"amount": "10000",
"fee": "3000",
"total_cost": "13000",
"balance_used": "13000",
"balance": "268994",
"serial_no": "980173",
"data": {},
"details": "REQID:PAY-20240430-001.REFID:980173.STATUS:SUCCESS.RC:00.NAMA:DUMMY NAME.REK:1380610457.KODEBANK:014.NOMINAL:10000.FEE:3000.TOTAL:13000.SALDO:268994.TERPAKAI:13000.SN:980173.KET:Transaksi Sukses"
}
}
Contoh Response Saldo Tidak Cukup
{
"success": true,
"message": "Disbursement payment completed",
"rc": "008",
"data": {
"req_id": "PAY-20240430-002",
"ref_id": "",
"account_number": "1380610457",
"account_name": "",
"status": "FAILED",
"rc": "008",
"description": "Insufficient Balance",
"message": "Saldo deposit tidak mencukupi",
"amount": "500000",
"fee": "6500",
"total_cost": "506500",
"balance_used": "0",
"balance": "100000",
"serial_no": "",
"data": {}
}
}
Contoh Response PENDING
{
"success": true,
"message": "Disbursement payment completed",
"rc": "021",
"data": {
"req_id": "PAY-20240430-003",
"ref_id": "980174",
"account_number": "1380610457",
"account_name": "BUDI SANTOSO",
"status": "PENDING",
"rc": "021",
"description": "Transaction Pending",
"message": "Transfer sedang diproses oleh bank tujuan",
"amount": "500000",
"fee": "6500",
"total_cost": "506500",
"balance_used": "506500",
"balance": "4493500",
"serial_no": "",
"data": {}
}
}
Jika status: "PENDING", gunakan endpoint Cek Status untuk polling hasil akhir.
Rekomendasi Retry Policy (PENDING)
Attempt 1 : tunggu 30 detik
Attempt 2 : tunggu 60 detik
Attempt 3 : tunggu 120 detik
Attempt 4 : tunggu 300 detik
Attempt 5+: eskalasi ke tim support dengan menyertakan req_id
JANGAN kirim payment baru sebelum mendapatkan status final. Transfer ganda dapat terjadi jika payment dikirim lebih dari sekali untuk transaksi yang sama.