Lewati ke konten utama

Create Bank Disbursement

Transfer funds from your wallet to a bank account.

Endpoint

POST /api/disbursement/create

Authentication

RSA-SHA256 X-SIGNATURE header. See Authentication.

Request

Headers

HeaderRequiredDescription
X-SIGNATUREYesBase64-encoded RSA-SHA256 signature
Content-TypeYesapplication/json

Body

FieldTypeRequiredDescription
clientIdstringYesYour legacy_client_id
orderIdstringYesYour unique disbursement ID (idempotency key)
bankCodestringYesBank short code (e.g., BCA, MANDIRI)
accountNumberstringYesDestination account number
accountNamestringYesAccount holder name
requestAmountintegerYesTransfer amount in full IDR (NOT minor units)
notifyUrlstringNoCallback URL for disbursement status updates
Amount Units

requestAmount is in full IDR. IDR 500,000 = 500000. This is the opposite of the V1 API.

Example

PHP
$body = json_encode([
'clientId' => 'TEST_CLIENT_001',
'orderId' => 'DISB-2026-001',
'bankCode' => 'BCA',
'accountNumber' => '1234567890',
'accountName' => 'Budi Santoso',
'requestAmount' => 500000,
'notifyUrl' => 'https://your-site.com/callbacks/disbursement',
]);

$bodyHash = hash('sha256', $body);
$stringToSign = "TEST_CLIENT_001|TEST_SECRET_001|$bodyHash";
openssl_sign($stringToSign, $rawSig, $privateKey, OPENSSL_ALGO_SHA256);
$xSignature = base64_encode($rawSig);

$ch = curl_init('https://api.nusio-saka.com/api/disbursement/create');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-SIGNATURE: ' . $xSignature,
],
CURLOPT_POSTFIELDS => $body,
]);
$response = json_decode(curl_exec($ch), true);

Response

HTTP 200 OK

{
"code": 200,
"message": "Success",
"data": {
"refCode": "DSB-260601110000-C3D4",
"orderId": "DISB-2026-001",
"accountNumber": "1234567890",
"accountName": "Budi Santoso",
"bank": {
"name": "Bank Central Asia",
"code": "BCA"
},
"requestAmount": "500000.00",
"disbursementFee": "5000.00",
"disbursementAmount": "505000.00",
"status": "PENDING",
"requestAt": "2026-06-01 11:00:00"
}
}

Fields

FieldDescription
requestAmountDecimal string of the amount you requested (IDR)
disbursementFeeFlat fee deducted from your wallet (IDR)
disbursementAmountTotal debited from wallet = requestAmount + disbursementFee
statusInitial status: PENDING
requestAtWIB timestamp

Idempotency

Submitting the same orderId again returns the existing disbursement — no duplicate is created.

Error Responses

MessageDescription
Invalid Client IDclientId not found
Invalid X-SIGNATURESignature verification failed
Public Key is not setNo RSA public key uploaded
Bank Cannot be used for DisbursementbankCode not found or disabled
Invalid request parametersMissing required field
Insufficient BalanceWallet balance < (requestAmount + fee)
Maximum Request Amount ExceededExceeds per-transaction limit
Order ID already usedorderId conflict (non-retrievable state)