Introduction
Welcome to Duitku Disbursement API page. This API can only be used if the disbursement feature has been activated for your account. On this page, Duitku provides several features including:
Transfer Online
Transfer Online is a feature to help merchants transfer fund automatically via API or Duitku Dashboard. Connected to more than 140 banks in Indonesia. The service is available 24 hours/7 days, and can be done in real time online. Transfer will be limited from 50 to 100 Million per transaction depending on the beneficiary bank account.
Clearing
Clearing process is a feature to help merchants Clearing fund automatically via API or Duitku Dashboard based on types of integration provided.
There are four types of clearing integration:
LLG (Lalu Lintas Giro) is interbank transfer that cover more than 130 bank in Indonesia. the maximal amount transfer is IDR 1.000.000.000,00. Transfer process follows the BI (Bank Indonesia) schedule, which is 8.00-15.00 on business days.
RTGS (Real Time Gross Settlement) is interbank transfer that cover more than 130 bank in Indonesia. The minimal amount transfer is IDR 100.000.000,00. Transfer process follows the BI (Bank Indonesia) schedule, which is 8.00-15.00 on business days.
H2H (Bank Host to Host) Duitku Host to Host connection to bank, to ensure direct connection and better reliability. Currently only support 5 Major banks in Indonesia (BNI, BRI, Mandiri, Permata, CIMB). Transfer schedule follows the schedule of each bank.
BI FAST (Bank Indonesia Fast Payment) National retail payments that can facilitate retail payments in real-time, safe, efficient, more affordable service fees and available at any time (24/7).
Cash Out
Cash our is a features for help merchants to automatically withdraw via API or Duitku Dashboard. Currently only support 2 channel, which is Pos Indonesia and Indomaret.
Transfer Online
This API provides several core functionalities, those functionalities are as follow :
- Inquiry Request
- Transfer Request
- Check Status Transfer
- Check Balance
- Bank List
To make integration easier, we provide a Postman Collection that merchants can use to test our request and response APIs.
Online Transfer Transaction Flow
The disbursement proses consists of two main steps: inquiry (disbursement inquiry API) and transfer (disbursement transfer API). Before create any transfer please ensures that merchant balance is enough, our API will do a balance validation before executing the process. Others two additional APIs are, checkBalance API, which helps to check the current merchant balance, and inquiryStatus API, to check the current status of the transaction (e.g., success or failed).
Online Transfer Inquiry Request
Inquiry process is used to get the information of the name of the account owner of the transfer destination. After getting this information, customers can determine whether the purpose of such a transfer is in accordance with the intended or not. If appropriate, the customer can proceed to the transfer process.
Method : HTTP POST
Type : application/json
Development : https://sandbox.duitku.com/webapi/api/disbursement/inquirysandbox
Production : https://passport.duitku.com/webapi/api/disbursement/inquiry
Request Parameter
{
"userId": 3551,
"amountTransfer" : 50000,
"bankAccount" : "8760673566",
"bankCode" : "014",
"email":"[email protected]",
"purpose" : "test inquiry disbursement",
"timestamp":1637304586325,
"senderId" : 1234567890,
"senderName" : "john doe",
"signature":"d69db71fa1188a0d484a658692421d61d343454bd41a5f52d6b0569ff2b53c34"
}
<?php
$userId = 3551;
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$amountTransfer = 50000;
$bankAccount = '8760673566';
$bankCode = '014';
$email = '[email protected]';
$purpose = 'Test Disbursement with duitku';
$timestamp = round(microtime(true) * 1000);
$senderId = 123456789;
$senderName = 'John Doe';
$paramSignature = $email . $timestamp . $bankCode . $bankAccount . $amountTransfer . $purpose . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'amountTransfer' => $amountTransfer,
'bankAccount' => $bankAccount,
'bankCode' => $bankCode,
'email' => $email,
'purpose' => $purpose,
'timestamp' => $timestamp,
'senderId' => $senderId,
'senderName' => $senderName,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/inquirysandbox'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/inquiry'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "disburseId :". $result['disburseId'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
userId | int | Y | Merchant Id, obtained after the disbursement feature is activated by Duitku. | 3551. |
amountTransfer | int | Y | Disbursement transfer amount (No decimal code and no decimal digit). | 50000. |
bankAccount | string(255) | Y | Destination account number. | For testing bankAccount can be found here. |
bankCode | string(3) | Y | Destination Bank Code. | For list bankCode can be found here. |
string(255) | Y | Email registered on Duitku. | [email protected]. | |
purpose | string(255) | N | Description of transfer purpose. | Test Transfer Online Inquiry with duitku. |
timestamp | double | Y | Unix Timestamp in miliseconds. | 1506486841000. |
senderId | int | N | Id provided by Partner. | 123456789. |
senderName | string(255) | N | customers Name. | |
signature | string(255) | Y | Transaction identification code. Contains transaction parameters which are hashed using the SHA256 hashing method. | Formula: SHA256(email + timestamp + bankCode + bankAccount + amountTransfer + purpose + secretKey). |
{
"email": "[email protected]",
"bankCode": "014",
"bankAccount": "8760673566",
"amountTransfer": 50000.0,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"disburseId": 12345,
"responseCode": "00",
"responseDesc": "Success"
}
Response Parameter
Parameter | Type | Description | Example |
---|---|---|---|
string | Email sent from inquiry process . | [email protected]. | |
bankCode | string | Bank code sent from inquiry process. | 014 (example for BCA). |
bankAccount | string | Bank account number sent from inquiry process. | For testing bankAccount can be found here. |
amountTransfer | int | Amount transfer sent from inquiry process. | 50000. |
accountName | string | Bank Account owner | Test Account. |
custRefNumber | string | 9 Digit Customer reference number that will be printed when the transaction is successful. | 123456789. |
disburseId | string | Disbursement ID from duitku. Please save it for checking purpose. | |
responseCode | string | Response code from duitku. Detail and description can be found here. | |
responseDesc | string | responseCode description. |
Online Transfer Transfer Request
Transfer Request is used to make the transfer process from the customer account to the account with the purpose of using data from the customer with the data obtained from the inquiry process which have been made previously.
Method : HTTP POST
Type : application/json
Development : https://sandbox.duitku.com/webapi/api/disbursement/transfersandbox
Production : https://passport.duitku.com/webapi/api/disbursement/transfer
Request Parameters
{
"disburseId": "12345",
"userId": 3551,
"email":"[email protected]",
"bankCode" : "014",
"bankAccount" : "8760673566",
"amountTransfer" : 50000,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"purpose" : "Test Disbursement with duitku",
"timestamp":1637307215965,
"signature":"318db51f8e92e9d5c0e3152c9087815e1098fcbfe1a52825ec12a4ce704df8a7"
}
<?php
$disburseId = '12345';
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$bankCode = '014';
$bankAccount = '8760673566';
$amountTransfer = 50000;
$accountName = 'Test Account';
$custRefNumber = '000000001278';
$purpose = 'Test Disbursement with duitku';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $bankCode . $bankAccount . $accountName . $custRefNumber . $amountTransfer . $purpose . $disburseId . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'disburseId' => $disburseId,
'userId' => $userId,
'email' => $email,
'bankCode' => $bankCode,
'bankAccount' => $bankAccount,
'amountTransfer' => $amountTransfer,
'accountName' => $accountName,
'custRefNumber' => $custRefNumber,
'purpose' => $purpose,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/transfersandbox'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/transfer'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
disburseId | string(255) | Y | Disbursement Id provided by Duitku, obtained after getting a response from the inquiry process. | 12345. |
userId | int | Y | Merchant Id sent when inquiry procces. | 3551. |
string(255) | Y | Email sent when inquiry procces. | [email protected]. | |
bankCode | string(3) | Y | Destination Bank Code sent when inquiry procces. | For list bankCode can be found here. |
bankAccount | string(255) | Y | Destination account number sent when inquiry procces. | For testing bankAccount can be found here. |
amountTransfer | int | Y | Disbursement transfer amount, sent when inquiry procces. | 50000. |
accountName | string(255) | Y | Bank Account owner, obtained after getting a response from the inquiry process. | Test Account. |
custRefNumber | string(255) | Y | Customer reference number, obtained after getting a response from the inquiry process. | 000000001278. |
purpose | string(255) | Y | Description of transfer purpose. | 123456789. |
timestamp | double | Y | Unix Timestamp in miliseconds. | 1507024378000. |
signature | string(255) | Y | Transaction identification code. Contains transaction parameters which are hashed using the SHA256 hashing method. | Formula: SHA256(email + timestamp + bankCode + bankAccount + accountName + custRefNumber + amountTransfer + purpose + disburseId + secretKey). |
Response Parameter
{
"email": "[email protected]",
"bankCode": "014",
"bankAccount": "8760673566",
"amountTransfer": 50000.0,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"responseCode": "00",
"responseDesc": "Success"
}
Parameter | Type | Description | Example |
---|---|---|---|
string | Email sent from inquiry procces. | [email protected]. | |
bankCode | string | Bank code sent from inquiry procces. | 014 (example for BCA). |
bankAccount | string | Bank account number sent from inquiry procces. | For testing bankAccount can be found here. |
amountTransfer | int | Amount transfer sent from inquiry procces. | 50000. |
accountName | string | Bank Account owner, response from inquiry process. | Test Account. |
custRefNumber | string | 9 Digit Customer reference number that will be printed when the transaction is successful. | 123456789. |
responseCode | string | Response code from duitku. Detail dan description can be found here. | |
responseDesc | string | responseCode description. |
Clearing
This API provides several core functionalities, those functionalities are as follow :
- Inquiry Request
- Transfer Request
- Clearing Callback
To make integration easier, we provide a Postman Collection that merchants can use to test our request and response APIs.
Clearing Transaction Flow
The disbursement proses consists of two main steps: inquiry (clearing inquiry API) and transfer (clearing transfer API). Before create any transfer please ensures that merchant balance is enough, our API will do a balance validation before executing the process. Others additional APIs are, callback API, which helps to check the current status of the transaction to result callback response.
Clearing Inquiry Request
Method : HTTP POST
Type : application/json
Development: https://sandbox.duitku.com/webapi/api/disbursement/inquiryclearingsandbox
Production : https://passport.duitku.com/webapi/api/disbursement/inquiryclearing
{
"userId": 3551,
"email":"[email protected]",
"bankCode": "014",
"bankAccount": "8760673466",
"amountTransfer": 500000000,
"custRefNumber": "000000001278",
"senderName": "john doe",
"senderId": 1234578,
"purpose" : "Test Clearing Inquiry with duitku",
"type": "RTGS",
"timestamp": 1637305389875,
"signature": "6e16c528fd9e4b9615aa4eb3487bdebd526efbcb974eff2e09ba5bf700c97efd"
}
<?php
$userId = 3551;
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$email = '[email protected]';
$bankCode = '014';
$bankAccount = '8760673466';
$amountTransfer = 500000000;
$custRefNumber = '12345789';
$senderName = 'John Doe';
$senderId = '12345789';
$purpose = 'Test Clearing Inquiry with duitku';
$type = 'LLG';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $bankCode . $type . $bankAccount . $amountTransfer . $purpose . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'email' => $email,
'bankCode' => $bankCode,
'bankAccount' => $bankAccount,
'amountTransfer' => $amountTransfer,
'custRefNumber' => $custRefNumber,
'senderId' => $senderId,
'senderName' => $senderName,
'purpose' => $purpose,
'type' => $type,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
//$url = 'https://passport.duitku.com/webapi/api/disbursement/inquiryclearing'
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/inquiryclearingsandbox'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "disburseId :". $result['disburseId'] . "<br />";
echo "type :". $result['type'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Request Parameter
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
userId | int | Y | ID Merchant, obtained after the disbursement feature is activated by Duitku. | 3551. |
string(255) | Y | Email merchant registered on Duitku. | [email protected]. | |
bankCode | string(3) | Y | Destination Bank Code. | For list bankCode can be found here. |
bankAccount | string(255) | Y | Destination account number. | For testing bankAccount can be found here. |
amountTransfer | int | Y | Amount of the transaction (No decimal code and no decimal digit). | 50000000. |
custRefNumber | string(9) | N | 9 Digit Customer Reference Number. | 12345789. |
senderName | string(255) | N | Customer Name. | John Doe. |
senderId | int | N | Customer Id provided by Merchant. | 12345789. |
purpose | string(255) | N | Description of transaction purpose. | Test Clearing Inquiry with duitku |
type | string | Y | LLG, RTGS, H2H or BIFAST | RTGS. |
timestamp | double | Y | Unix Timestamp in miliseconds for checking purpose. | 1506486841000. |
signature | string(255) | Y | Transaction identification code. Contains transaction parameters which are hashed using the SHA256 hashing method. | Formula: SHA256(email + timestamp + bankCode + type + bankAccount + amountTransfer + purpose + secretKey). |
{
"email": "[email protected]",
"bankCode": "014",
"bankAccount": "8760673466",
"amountTransfer": 500000000.0,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"disburseId": 125324342,
"type": "RTGS",
"responseCode": "00",
"responseDesc": "Success"
}
Response Parameter
Parameter | Type | Description | Example |
---|---|---|---|
string | Email sent from clearing inquiry process. | [email protected]. | |
bankCode | string | Bank code sent clearing from inquiry process. | 014 (example for BCA). |
bankAccount | string | Bank account number. | For testing bankAccount can be found here. |
amountTransfer | int | Amount transfer sent from clearing inquiry process. | 500000000. |
custRefNumber | string | 9 Digit customer reference number that will be printed when the transaction is successful. | 12345789. |
accountName | string | Destination account holder name. | Test Account. |
disburseId | string | Disbursement ID from duitku. Please save it for checking purpose. | |
type | string | Type transaction sent from clearing inquiry process. | RTGS/LLG/H2H/BIFAST. |
responseCode | string | Response code from duitku. Detail and description can be found here. | |
responseDesc | string | responseCode description. |
Clearing Transfer Request
Method : HTTP POST
Type : application/json
Development: https://sandbox.duitku.com/webapi/api/disbursement/transferclearingsandbox
Production : https://passport.duitku.com/webapi/api/disbursement/transferclearing
Request Parameters
{
"disburseId": "12345",
"userId": 3551,
"email":"[email protected]",
"bankCode" : "014",
"bankAccount" : "8760673466",
"amountTransfer" : 500000000,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"purpose" : "Test Clearing Inquiry with duitku",
"type": "RTGS",
"timestamp":1637304586325,
"signature":"d69db71fa1188a0d484a658692421d61d343454bd41a5f52d6b0569ff2b53c34"
}
<?php
$disburseId = '12345';
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$bankCode = '014';
$bankAccount = '8760673466';
$amountTransfer = 500000000;
$accountName = 'Test Account';
$custRefNumber = '000000001278';
$purpose = 'Test Clearing Inquiry with duitku';
$timestamp = round(microtime(true) * 1000);
$type = 'RTGS';
$paramSignature = $email . $timestamp . $bankCode . $type . $bankAccount . $accountName . $custRefNumber . $amountTransfer . $purpose . $disburseId . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'disburseId' => $disburseId,
'userId' => $userId,
'email' => $email,
'bankCode' => $bankCode,
'bankAccount' => $bankAccount,
'amountTransfer' => $amountTransfer,
'accountName' => $accountName,
'custRefNumber' => $custRefNumber,
'type' => $type,
'purpose' => $purpose,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = `https://sandbox.duitku.com/webapi/api/disbursement/transferclearingsandbox`
//$url = `https://passport.duitku.com/webapi/api/disbursement/transferclearing`
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "type :". $result['type'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
disburseId | string(255) | Y | Disbursement Id provided by Duitku, response from inquiry process. | 12345. |
userId | int | Y | Merchant Id, sent from inquiry process. | 3551. |
string(255) | Y | Email registered sent from inquiry process | [email protected]. | |
bankCode | string(3) | Y | Destination Bank Code sent from inquiry process. | For list bankCode can be found here. |
bankAccount | string(255) | Y | Destination account number sent from inquiry process. | For testing bankAccount can be found here. |
amountTransfer | int | Y | Disbursement transfer amount, sent from inquiry process. | 500000000. |
accountName | string(255) | Y | Bank Account owner sent from inquiry process. | John Doe. |
custRefNumber | string(255) | Y | Customer reference number, obtained after receiving a response from the inquiry process. | 000000001278. |
purpose | string(255) | Y | Description of transfer purpose. | Test Clearing Inquiry with duitku. |
type | string | Y | LLG, RTGS, H2H or BIFAST. | RTGS. |
timestamp | double | Y | Unix Timestamp in miliseconds. | 1507024378000. |
signature | string(255) | Y | Transaction identification code. Contains transaction parameters which are hashed using the SHA256 hashing method. | Formula: SHA256(email + timestamp + bankCode + type + bankAccount + accountName + custRefNumber + amountTransfer + purpose + disburseId + secretKey). |
Response Parameters
{
"email": "[email protected]",
"bankCode": "014",
"bankAccount": "8760673466",
"amountTransfer": 500000000.0,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"type": "RTGS",
"responseCode": "00",
"responseDesc": "Success"
}
Parameter | Type | Description | Example |
---|---|---|---|
string | Email sent from clearing inquiry request. | [email protected]. | |
bankCode | string | Bank code sent clearing from inquiry request. | 014 (example for BCA). |
bankAccount | string | Bank account number sent from clearing inquiry request. | For testing bankAccount can be found here. |
amountTransfer | int | Amount transfer sent from clearing inquiry request. | 50000000. |
accountName | string | Destination account holder name sent from clearing inquiry request. | Test Account. |
custRefNumber | string | 9 Digit customer reference number sent from clearing inquiry request. | 000000001278. |
type | string | Type transaction sent from clearing inquiry request. | RTGS/LLG/H2H/BIFAST. |
responseCode | string | Response code from duitku. Detail and description can be found here. | |
responseDesc | string | responseCode description. |
Clearing Callback
Return values are returned as HTTP POST, Merchant will need to provide a callback page to catch the result.
<?php
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$json = file_get_contents('php://input');
$result = json_decode(stripslashes($json),true);
$disburseId = $result['disburseId'];
$userId = $result['userId'];
$email = $result['email'];
$bankCode = $result['bankCode'];
$bankAccount = $result['bankAccount'];
$amountTransfer = $result['amountTransfer'];
$accountName = $result['accountName'];
$custRefNumber = $result['custRefNumber'];
$statusCode = $result['statusCode'];
$statusDesc = $result['statusDesc'] ;
$errorMessage = $result['errorMessage'];
$signature = $result['signature'];
if(!empty($email) && !empty($bankCode) && !empty($bankAccount) && !empty($accountName) && !empty($custRefNumber) && !empty($amountTransfer) && !empty($disburseId) && !empty($signature))
{
$params = $email . $bankCode . $bankAccount . $accountName . $custRefNumber . $amountTransfer . $disburseId . $secretKey;
$calcSignature = hash('sha256', $params);
if($signature == $calcSignature)
{
//Your code here
echo "SUCCESS"; // Please response with success
}
else
{
throw new Exception('Bad Signature');
}
}else
{
throw new Exception('Bad Parameter');
}
?>
Parameter
Callback for type H2H only.
Method : HTTP POST
Type : application/json
Parameter | Type | Description |
---|---|---|
disburseId | String(255) | Disbursement ID from Duitku, obtained after getting a response from the inquiry process. |
userId | int | Merchant Id, obtained after the disbursement feature is activated by Duitku. |
string(255) | Email registered on Duitku. | |
bankCode | string(3) | Destination Bank Code : 014 (BCA). |
For bank code list can be found here. | ||
bankAccount | string(255) | Bank account number. |
amountTransfer | int | No decimal code (.) and no decimal digit. |
accountName | string(255) | Destination account holder name. |
custRefNumber | string(255) | Customer reference number. |
statusCode | string(255) | Status code example: 00 = Success. For status code list can be found here. |
statusDesc | string(255) | Status description. |
errorMessage | string(255) | Description Error if Failed or Pending. |
signature | string(255) | Formula: SHA256(email + bankCode + bankAccount + accountName + custRefNumber + amountTransfer + disburseId + secretKey). |
Cash Out
Inquiry cash out is used to peform cash out on the Duitku system. This API provides several core functionalities, those functionalities are as follow :
- Inquiry Request
- Callback
To make integration easier, we provide a Postman Collection that merchants can use to test our request and response APIs.
Transaction Flow CashOut
- The Cash Out process begins with the user creating a withdrawal request process to the merchant.
- the merchant then makes an inquiry with the parameters that have been provided by Duitku.
- Duitku will adjust the balance and send a request in the form of a token to the vendor.
- The Duitku server will provide a response containing information regarding the token sent by the vendor.
- Information regarding the token to be used is sent in the form of SMS for the cash out process.
- The user can then process the cash out to the Post Indonesia/Indomaret using the token that has been received.
- Merchants will receive a callback response sent by the vendor through the Duitku server.
Cash Out Inquiry Request
Method : HTTP POST
Type : application/json
Development : https://disbursement-sandbox.duitku.com/api/cashout/inquiry
Production : https://disbursement.duitku.com/api/cashout/inquiry
Request Parameters
<?php
$userId = 3551;
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$amountTransfer = 50000;
$custRefNumber = '000000001278';
$bankCode = '2010';
$accountName = 'Test Account';
$accountAddress = 'Jl. Raya Perjuangan 1, RT.3/RW.7, Kb. Jeruk';
$accountIdentity = '1234567889';
$email = '[email protected]';
$phoneNumber = '082211789110';
$purpose = 'Test inquiry CashOut';
$timestamp = round(microtime(true) * 1000);
$callbackUrl = 'http://example.com/callback';
$paramSignature = $email . $timestamp . $amountTransfer . $purpose . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'amountTransfer' => $amountTransfer,
'custRefNumber' => $custRefNumber,
'bankCode' => $bankCode,
'accountName' => $accountName,
'accountAddress' => $accountAddress,
'accountIdentity' => $accountIdentity,
'email' => $email,
'phoneNumber' => $phoneNumber,
'purpose' => $purpose,
'timestamp' => $timestamp,
'callbackUrl' => $callbackUrl,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://disbursement-sandbox.duitku.com/api/cashout/inquiry'; // Sandbox
// $url = 'https://disbursement.duitku.com/api/cashout/inquiry'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
//header('location: '. $result['paymentUrl']);
echo "disburseId :". $result['disburseId'] . "<br />";
echo "amountTransfer:". $result['amountTransfer'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "email :". $result['email'] . "<br />";
echo "phoneNumber :". $result['phoneNumber'] . "<br />";
echo "token :". $result['token'] . "<br />";
echo "pin :". $result['pin'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
{
"userId" : 3551,
"amountTransfer" : 50000,
"custRefNumber" : "000000001278",
"bankCode" : "2010",
"accountName" : "Test Account",
"accountAddress" : "Jl. Raya Perjuangan 1, RT.3/RW.7, Kb. Jeruk",
"accountIdentity" : "1234567889",
"email" : "[email protected]",
"phoneNumber" : "082211789110",
"purpose" : "Test inquiry CashOut",
"timestamp" : 1637304586325,
"callbackUrl":"http:\/\/example.com\/callback",
"signature" : "d69db71fa1188a0d484a658692421d61d343454bd41a5f52d6b0569ff2b53c34"
}
Parameter | Type | Required | Description |
---|---|---|---|
userId | int | Y | Merchant Id, obtained after the disbursement feature is activated by Duitku. |
amountTransfer | int | Y | No decimal code and no decimal digit. |
For Indomaret: • Applies multiply of 50.000. • Min 50.000. • Max 1.000.000. |
|||
For Pos Indonesia: • Min 50.000. • Max 2.000.000. |
|||
custRefNumber | string(255) | N | Customer reference number. |
bankCode | string | Y | Destination Bank Code: |
• bankCode 2010 for Indomaret. • bankCode 2011 for Pos Indonesia. |
|||
accountName | string(255) | Y | Customer Name. |
accountAddress | string(255) | N | Customer Address. |
accountIdentity | string(255) | Y | KTP Number. |
string(255) | Y | Email registered on Duitku. | |
phoneNumber | string(50) | Y | Customer phone number. For testing phone number can be found here. |
timestamp | double | Y | Unix timestamp in miliseconds. |
purpose | string(255) | N | Description of inquiry purpose. |
callbackUrl | string(255) | N | Url for transaction Callback. |
signature | string(255) | Y | Formula: SHA256(email + timestamp + amountTransfer + purpose + secretKey). |
Response Parameters
{
"disburseId" : 23042,
"amountTransfer": 50000,
"custRefNumber" : "000000001278",
"accountName" : "Test Account",
"email" : "[email protected]",
"phoneNumber" : "082211789110",
"token" : 230426073103,
"pin" : "902607",
"responseCode" : "00",
"responseDesc" : "Success"
}
Parameter | Type | Description |
---|---|---|
disburseId | int | Disbursement ID from Duitku, obtained after getting a response from the inquiry process. |
amountTransfer | int | No decimal code and no decimal digit. |
For Indomaret: • Applies multiply of 50.000. • Min 50.000. • Max 1.000.000. |
||
For Pos Indonesia: • Min 50.000. • Max 2.000.000. |
||
custRefNumber | string | Customer reference number. |
string | Email registered on Duitku. | |
accountName | string | Destination account holder name. |
phoneNumber | string | Customer phone number. For testing phone number can be found here. |
token | double | Token generate by duitku. |
pin | string | Channel Pos Indonesia Only. |
responseCode | string | Status code 00 = Success. Detail list click here. |
responseMessage | string | Status message. |
Cash Out Callback
Return values are returned as HTTP POST, merchant will need to provide a callback page to catch the result.
<?php
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$json = file_get_contents('php://input');
$result = json_decode(stripslashes($json),true);
$disburseId = $result['disburseId'];
$email = $result['email'];
$amountTransfer = $result['amountTransfer'];
$custRefNumber = $result['custRefNumber'];
$accountName = $result['accountName'];
$bankCode = $result['bankCode'];
$phoneNumber = $result['phoneNumber'];
$statusCode = $result['statusCode'];
$statusDesc = $result['statusDesc'];
$errorMessage = $result['errorMessage'];
$signature = $result['signature'];
if(!empty($email) && !empty($phoneNumber) && !empty($accountName) && !empty($custRefNumber) && !empty($amountTransfer) && !empty($disburseId) && !empty($signature))
{
$params = $email . $disburseId . $custRefNumber . $secretKey;
$calcSignature = hash('sha256', $params);
if($signature == $calcSignature)
{
//Your code here
echo "SUCCESS"; // Please response with success
}
else
{
throw new Exception('Bad Signature');
}
}
else
{
throw new Exception('Bad Parameter');
}
?>
{
"disburseId": "23042",
"email": "[email protected]",
"amountTransfer": 50000,
"custRefNumber": "000000001278",
"accountName": "Test Account",
"bankCode": "2010",
"phoneNumber": "082211789110",
"statusCode": "00",
"statusDesc": "Success",
"errorMessage": "",
"signature": "103573f87d9a0743de3fc6e499dbf988f03775b39451f95b4bc18cd09fa0959c"
}
Parameter
Method : HTTP POST
Type : application/json
Parameter | Type | Description |
---|---|---|
disburseId | string(255) | Disbursement ID from Duitku, obtained after getting a response from the inquiry process. |
string(255) | Email registered on Duitku. | |
amountTransfer | int | No decimal code and no decimal digit. |
For Indomaret: • Applies multiply of 50.000. • Min 50.000. • Max 1.000.000. |
||
For Pos Indonesia: • Min 50.000. • Max 2.000.000. |
||
custRefNumber | string(255) | Customer reference number. |
accountName | string(255) | Customer Name. |
bankCode | string | Destination Bank Code: |
• bankCode 2010 for Indomaret. • bankCode 2011 for Pos Indonesia. |
||
phoneNumber | string(255) | Customer phone number. |
statusCode | string(255) | Status code 00 = Success. Detail list click here. |
statusDesc | string(255) | Status Code description. |
errorMessage | string(255) | Error message sent by Duitku. |
signature | string(255) | Formula: SHA256(email + disburseId + custRefNumber + secretKey). |
Inquiry Status
Inquiry Status message format is used to perform queries on the status of a transfer transaction that has been sent previously.
Inquiry Status Request
Method : HTTP POST
Type : application/json
development :https://sandbox.duitku.com/webapi/api/disbursement/inquirystatus
Production : https://passport.duitku.com/webapi/api/disbursement/inquirystatus
Request Parameters
{
"disburseId": "12345",
"userId": 3551,
"email":"[email protected]",
"timestamp":1637304586325,
"signature":"d69db71fa1188a0d484a658692421d61d343454bd41a5f52d6b0569ff2b53c34"
}
<?php
$disburseId = '12345';
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $disburseId . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'disburseId' => $disburseId,
'userId' => $userId,
'email' => $email,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/inquirystatus'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/inquirystatus'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
disburseId | string(255) | Y | Disbursement ID from Duitku, obtained after receiving a response from the inquiry process. | 12345. |
userId | int | Y | User Id sent when inquiry procces. | 3551. |
string(255) | Y | Email sent when inquiry procces. | [email protected]. | |
timestamp | double | Y | Unix Timestamp in miliseconds. | 1507024378000. |
signature | string(255) | Y | Transaction identification code. Contains transaction parameters which are hashed using the SHA256 hashing method. | Formula: SHA256(email + timestamp + disburseId + secretKey). |
Response Parameters
{
"bankCode": "014",
"bankAccount": "8760673566",
"amountTransfer": 50000.00,
"accountName": "Test Account",
"custRefNumber": "000000001664",
"responseCode": "00",
"responseDesc": "Success"
}
Parameter | Type | Description |
---|---|---|
bankCode | string | Bank code sent when inquiry process. |
bankAccount | string | Bank account number sent from inquiry process. |
amountTransfer | int | Amount transfer sent from inquiry process. |
accountName | string | Bank Account owner, response from inquiry process. |
custRefNumber | string | 9 Digit customer reference number sent from inquiry request. |
responseCode | string | Response code from duitku. Detail and description can be found here. |
responseDesc | string | Description of response code . |
Inquiry Check Balance
Check balance is used for checking balance available for disbursement.
Inquiry Check Balance Request
Method : HTTP POST
Type : application/json
Development : https://sandbox.duitku.com/webapi/api/disbursement/checkbalance
Production : https://passport.duitku.com/webapi/api/disbursement/checkbalance
Request Parameters
{
"userId": 3551,
"email":"[email protected]",
"timestamp":1637308830041,
"signature":"c6be90ef7159efb476c4940ca662ffd7e586d2a0d16568187e0dbe25a67ae1a4"
}
<?php
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'email' => $email,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/checkbalance'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/checkbalance'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
echo "userId :". $result['userId'] . "<br />";
echo "email :". $result['email'] . "<br />";
echo "balance :". $result['balance'] . "<br />";
echo "effectiveBalance :". $result['effectiveBalance'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
userId | int | Y | User ID sent when inquiry procces. | 3551. |
string(255) | Y | Email sent when inquiry procces. | [email protected]. | |
timestamp | double | Y | Unix Timestamp in miliseconds. | 1507024378000. |
signature | string(255) | Y | Transaction identification code. Contains transaction parameters which are hashed using the SHA256 hashing method. | Formula: SHA256(email + timestamp + secretKey). |
Response Parameter
{
"userId": 3551,
"email": "[email protected]",
"balance": 7177.00,
"effectiveBalance": 7177.00,
"responseCode": "00",
"responseDesc": "Success"
}
Parameter | Type | Description |
---|---|---|
string | The value is the same as Check Balance Request. | |
userId | Int | The value is the same as Check Balance Request. |
balance | Decimal | Current balance before settlement. |
effectiveBalance | Decimal | Effective Balance that can be used for disbursement. |
responseCode | String | Response code from duitku. Detail and description can be found here. |
responseDesc | String | Response code description. |
Inquiry List Bank
Get the bank list with API.
Inquiry List Bank Request
Method : HTTP POST
Type : application/json
Development : https://sandbox.duitku.com/webapi/api/disbursement/listBank
Production : https://passport.duitku.com/webapi/api/disbursement/listBank
Request Parameters
{
"userId": 3551,
"email":"[email protected]",
"timestamp":1637308830041,
"signature":"c6be90ef7159efb476c4940ca662ffd7e586d2a0d16568187e0dbe25a67ae1a4"
}
<?php
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'email' => $email,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/listBank'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/listBank'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
header('Content-Type: application/json');
$return = json_encode(json_decode($request), JSON_PRETTY_PRINT);
echo $return;
}
else
echo $httpCode;
?>
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
userId | int | Y | User ID sent when inquiry procces. | 3551. |
string(255) | Y | Email sent when inquiry procces. | [email protected]. | |
timestamp | double | Y | Unix Timestamp in miliseconds. | 1507024378000. |
signature | string(255) | Y | Transaction identification code. Contains transaction parameters which are hashed using the SHA256 hashing method. | Formula: SHA256(email + timestamp + secretKey). |
Response Parameters
{
"responseCode": "00",
"responseDesc": "Success",
"Banks": [
{
"bankCode": "014",
"bankName": "BANK CENTRAL ASIA",
"maxAmountTransfer": "50000000"
},
{
"bankCode": "002",
"bankName": "BANK BRI",
"maxAmountTransfer": "100000000"
},
{
"bankCode": "1010",
"bankName": "OVO",
"maxAmountTransfer": "25000000"
}
{
"bankCode": "119",
"bankName": "BANK RIAU KEPRI",
"maxAmountTransfer": "100000000"
},
{
"bankCode": "118",
"bankName": "BANK NAGARI",
"maxAmountTransfer": "100000000"
}
]
}
Parameter | Tipe | Description |
---|---|---|
responseCode | String | Status code 00 = Success. |
responseDesc | String | Response code description. |
bankCode | string | Bank Code. |
bankName | string | Bank Name. |
maxAmountTransfer | string | Maximum amount of transfers. |
Status Code
Response Code | Description |
---|---|
00 |
Approved or completed successfully. |
EE |
General Error. |
TO |
Response time out from ATM Bersama Network (Do not retry). |
LD |
Link problem between Duitku and ATM Bersama Network. |
NF |
Transaction has not recorded on Remittance gateway. |
76 |
Invalid destination account. |
80 |
Waiting for callback. |
-100 |
Other Error (Do not retry). |
-120 |
User not found. |
-123 |
User has been blocked. |
-141 |
Amount transfer Invalid. |
-142 |
Transaction Already Finished. |
-148 |
Bank not support H2H. |
-149 |
Bank not found. |
-161 |
Callback URL not found. |
-191 |
Wrong signature. |
-192 |
Account number is blacklisted. |
-213 |
Email is not valid. |
-420 |
Transfer not Found. |
-510 |
Insufficient Fund. |
-920 |
Limit Exceeded. |
-930 |
IP not whitelisted. |
-951 |
Time Out Vendor. |
-952 |
Invalid Parameter. |
-960 |
Timestamp is expired ( 5 minutes ). |
Vendor Response Code
Response Code | Description |
---|---|
00 |
Approved or completed successfully. |
01 |
Refer to card issuer. |
05 |
Disallowed transaction. |
12 |
Generic exception. |
14 |
Account not found. |
30 |
Invalid format. |
31 |
Invalid bank code. |
51 |
Insufficient funds / over credit limit. |
66 |
Generic error. |
68 |
Response received too late / Time out When getting this response you need to wait for bank confirmation (Do not retry). |
88 |
Bill already paid. |
90 |
Invalid Beneficiary or Currency. |
91 |
Transport Error to Back End. |
Callback Status Code
Status Code | Description |
---|---|
00 | Success. |
01 | Failed. |
68 | Pending (Do not retry). |
Error Code
Response Code | Description |
---|---|
00 |
Approved or completed successfully. |
01 |
Refer to card issuer. |
03 |
Invalid merchant. |
04 |
Pick-up / capture card. |
05 |
Do not honor. |
12 |
Invalid transaction. |
13 |
Invalid amount. |
14 |
Invalid card number (no such number). |
15 |
No such issuer. |
20 |
Invalid response. |
30 |
Format error. |
31 |
Bank not supported by switch. |
33 |
Expired card. |
36 |
Restricted card. |
38 |
Allowable PIN tries exceeded. |
39 |
No credit account. |
40 |
Requested function not supported. |
41 |
Lost card. |
43 |
Stolen card. |
51 |
Insufficient funds / over credit limit. |
52 |
No chequing account. |
68 |
Response received too late. / Time out When getting this response you need to wait for bank confirmation (Do not retry). |
91 |
Issuer, Destination or switch is inoperative. |
Testing
Here is a list of dummy disbursement credentials that can be used for transaction in the Sandbox Environment.
Merchant Test Disbursement
User Test
UserID | SeckretKey | |
---|---|---|
3551 | [email protected] | de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d |
Transfer Online Test Scenario
Here is a list of parameters BankAccount which must be set on the disbursement inquiry and disbursement transfer parameters in the Sandbox Environment.
Disbursement Inquiry Test
Bank Account | Response Code | Description |
---|---|---|
8760673566 | 00 | Success. |
8760673511 | TO | Time Out. |
8760673512 | -100 | Other Error. |
8760673513 | LD | Link Down. |
8760673514 | 91 | DB Problem. |
8760673515 | 89 | Link to host Down. |
Disbursement Transfer Test
If merchant get response code like TO, 68, or -100 it means there is a problem in the transfer process, it is not recommended to do this process a second time.
Bank Account | Response Code | Description |
---|---|---|
8760673566 | 00 | Success. |
8760673559 | LD | Link Down. |
8760673560 | 91 | DB Problem. |
8760673561 | TO | Time Out. |
8760673562 | -510 | Wallet not enough. |
8760673563 | 89 | Link to host Down. |
8760673564 | 68 | Time Out. |
8760673565 | -100 | Other Error. |
Clearing Test Scenario
Here is a list of parameters BankAccount which must be set on the disbursement clearing inquiry and disbursement clearing transfer parameters in the Sandbox Environment.
Clearing Inquiry Test
Bank Account | Response Code | Description |
---|---|---|
8760673466 | 00 | Success. |
8760673411 | EE | General Error. |
8760673412 | TO | Response time out from ATM Bersama Network. |
8760673413 | LD | Link problem between Duitku and ATM Bersama Network. |
8760673414 | NF | Transaction has not recorded on Remittance gateway. |
8760673415 | -100 | Other error. |
8760673416 | 66 | Generic Error. |
8760673417 | 68 | Time out. When getting this response you need to wait for bank confirmation. |
8760673418 | 88 | Bill Already Paid. |
8760673419 | 90 | Invalid Beneficiary or Currency. |
8760673420 | 91 | Transport Error to Back End. |
Clearing Transfer Test
Bank Account | Response Code | Description |
---|---|---|
8760673466 | 00 | LLG/RTGS/BIFAST. |
8760673466 | 80 | H2H. |
8760673451 | LD | |
8760673452 | NF | |
8760673453 | TO | |
8760673454 | -510 | |
8760673455 | 90 | |
8760673456 | 68 | |
8760673457 | 91 |
Cash Out Test Scenario
PhoneNumber | Description |
---|---|
08...100 to 200 | Inquiry ➟ Success ➟ Callback Success-00 |
08...201 to 300 | Inquiry ➟ Success ➟ Callback Failed-01 |
Bank List
List of supported banks in disbursement:
Supported Banks
Bank Code | Bank Name | BI FAST |
---|---|---|
002 | Bank BRI | ✓ |
008 | Bank Mandiri | ✓ |
009 | Bank BNI | ✓ |
011 | Bank Danamon | ✓ |
013 | Bank Permata | ✓ |
014 | Bank Central Asia | ✓ |
016 | Bank Maybank Indonesia | ✓ |
019 | Bank Panin | ✓ |
022 | CIMB Niaga | ✓ |
023 | Bank UOB Indonesia | ✓ |
028 | Bank OCBC NISP | ✓ |
031 | Citi Bank | ✓ |
036 | Bank CCB (Ex-Bank Windu Kentjana) | ✓ |
037 | Bank Artha Graha | ✓ |
042 | MUFG Bank | ✓ |
046 | Bank DBS | ✓ |
050 | Standard Chartered Bank | ✓ |
054 | Bank Capital | ✓ |
061 | ANZ Indonesia | ✓ |
069 | Bank Of China Indonesia | ✓ |
076 | Bank Bumi Arta | ✓ |
087 | Bank HSBC Indonesia | ✓ |
095 | Bank JTrust Indonesia | ✓ |
097 | Bank Mayapada | ✓ |
110 | Bank BJB | ✓ |
111 | Bank DKI | ✓ |
112 | Bank BPD DIY | ✓ |
113 | Bank Jateng | ✓ |
114 | Bank Jatim | ✓ |
115 | Bank Jambi | ✓ |
116 | Bank Aceh | ✓ |
117 | Bank Sumut | ✓ |
118 | Bank Nagari | ✓ |
119 | Bank Riau Kepri | ✓ |
120 | Bank Sumsel Babel | ✓ |
121 | Bank Lampung | ✓ |
122 | Bank Kalsel | ✓ |
123 | Bank Kalbar | ✓ |
124 | Bank Kaltimtara | ✓ |
125 | Bank Kalteng | ✓ |
126 | Bank Sulselbar | ✓ |
127 | Bank Sulut Go | ✓ |
128 | Bank NTB Syariah | ✓ |
129 | Bank BPD Bali | ✓ |
130 | Bank NTT | ✓ |
131 | Bank Maluku Malut | ✓ |
132 | Bank Papua | ✓ |
133 | Bank Bengkulu | ✓ |
134 | Bank Sulteng | ✓ |
135 | Bank Sultra | ✓ |
137 | Bank Banten | ✓ |
146 | Bank Of India Indonesia | ✗ |
147 | Bank Muamalat Indonesia | ✓ |
151 | Bank Mestika | ✓ |
152 | Bank Shinhan Indonesia | ✓ |
153 | Bank Sinarmas | ✓ |
157 | Bank Maspion Indonesia | ✓ |
161 | Bank Ganesha | ✓ |
164 | Bank ICBC Indonesia | ✓ |
167 | Bank QNB Indonesia | ✓ |
200 | Bank BTN | ✓ |
212 | Bank Woori Saudara | ✓ |
213 | Bank BTPN | ✓ |
405 | Bank Victoria Syariah | ✗ |
425 | Bank BJB Syariah | ✓ |
426 | Bank Mega | ✓ |
441 | Bank KB Bukopin | ✓ |
451 | Bank Syariah Indonesia | ✓ |
459 | Bank KROOM | ✗ |
472 | Bank Jasa Jakarta | ✓ |
484 | Bank KEB Hana | ✓ |
485 | MNC Bank | ✓ |
490 | Bank Neo Commerce | ✓ |
494 | Bank BRI Agroniaga | ✓ |
498 | Bank SBI | ✓ |
501 | Bank Digital BCA | ✓ |
503 | Bank Nobu | ✓ |
506 | Bank Mega Syariah | ✓ |
513 | Bank Ina Perdana | ✓ |
517 | Bank Panin Dubai Syariah | ✓ |
520 | Bank Prima Master | ✗ |
521 | Bank Syariah Bukopin | ✓ |
523 | Bank Sahabat Sampoerna | ✓ |
526 | Bank Oke Indonesia | ✓ |
531 | AMAR BANK | ✓ |
535 | SEA Bank | ✓ |
536 | Bank BCA Syariah | ✓ |
542 | Bank Jago | ✓ |
547 | Bank BTPN Syariah | ✓ |
548 | Bank Multiarta Sentosa | ✓ |
553 | Bank Mayora | ✓ |
555 | Bank Index Selindo | ✓ |
562 | Superbank (FAMA) | ✗ |
564 | Bank Mantap | ✓ |
566 | Bank Victoria International | ✓ |
567 | Allo Bank | ✓ |
600 | BPR SUPRA | ✗ |
688 | BPR KS | ✗ |
699 | BPR EKA | ✗ |
789 | IMkas | ✗ |
911 | LinkAja | ✗ |
945 | Bank Agris | ✗ |
947 | Bank Aladin Syariah | ✓ |
949 | Bank CTBC | ✓ |
950 | Bank Commonwealth | ✓ |
1010 | OVO | ✗ |
1011 | Gopay | ✗ |
1012 | DANA | ✗ |
1013 | Shopeepay | ✗ |
1014 | LinkAja Direct | ✗ |
Changelog
Version 1.2
Mar 2024
- Update Bank List Support BIFAST
Jun 2023
- Add of BIFAST Method for MUFG Bank
Aug 2022
- Add BIFAST Clearing Type
- Add Bank List Support BIFAST
Jun 2022
- Add Bank List Support Dana
May 2022
- Add Bank List Support OVO, Shopeepay, and Link Aja Direct
Jan 2022
- Add Flow Transaction Documentation
- Add Inquiry Cash Out Documentation
- Add Callback Cash Out Documentation
- Add Postman Collection Cash Out, Transfer Online, and Clearing.
- Add Callback Clearing Documentation
Version 1.1
Nov 2018
- Add Documentation Scenario
- Add Inquiry Check Balance Documentation
Version 1.0
- Create API Document