NAV Navbar
php json

First Step

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 process 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 25 to 50 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 three types of clearing integration:

  1. LLG (Lalu Lintas Giro) transfer llg, inter bank transfer that covers more than 130 banks in Indonesia. Transaction amount maximum 500 million IDR. Transfer process follows BI (Bank Indonesia) schedule, transfer schedule is 8.00 – 15.00 on business days.

  2. RTGS (Real Time Gross Settlement) transfer rtgs, inter bank transfer that covers more than 130 banks in Indonesia. Transaction amount minimum 100 million IDR. Transfer process follows BI (Bank Indonesia) schedule, transfer schedule is 8.00 – 15.00 on business days.

  3. H2H (Bank Host to Host) Duitku Host to Host connection to bank, to ensure direct connection and better reliability. Currently only support 4 Major banks in Indonesia ( BNI, BRI, Mandiri, Permata). The transfer schedule follows bank schedule time.

Cash Out

Cash Out process is a feature to help merchants creat a withdrawal automatically via API or Duitku Dashboard. Currently only support 2 channel (Pos Indonesia, Indomaret).

Transfer Online

This API provides several core functionalities, those functionalities are as follow :

To make it easier to familiarize yourself using our API, we included Postman Collection which you can use to try and see request and response parameters.

Run in Postman

Transaction Flow Transfer Online

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).

Flowtransferonline

Transfer Online 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.
email 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
email 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.

Transfer Online Request Transfer

Message transfer format 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.
email 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
email 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 :

To make it easier to familiarize yourself using our API, we included Postman Collection which you can use to try and see request and response parameters.

Run in Postman

Transaction Flow Clearing

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 additional APIs are, callback API, which helps to check the current status of the transaction to result callback response.

image info

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.
email 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 or H2H. 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
email 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
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.
email 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 or H2H. 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
email 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
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 call-back 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.
email string(255) Email registered on Duitku.
bankCode string(3) Destination Bank Code : 014 (BCA).
For list bankCode 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 00 = Success.
Detail list click 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 :

To make it easier to familiarize yourself using our API, we included Postman Collection which you can use to try and see request and response parameters.

Run in Postman

Transaction Flow CashOut

  1. The Cash Out process begins with the user creating a withdrawal request process to the merchant.
  2. the merchant then makes an inquiry with the parameters that have been provided by Duitku.
  3. Duitku will adjust the balance and send a request in the form of a token to the vendor.
  4. The Duitku server will provide a response containing information regarding the token sent by the vendor.
  5. Information regarding the token to be used is sent in the form of SMS for the cash out process.
  6. The user can then process the cash out to the Post Indonesia/Indomaret using the token that has been received.
  7. Merchants will receive a callback response sent by the vendor through the Duitku server.

Flowcashout

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]hnology.com",
    "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:
• Multiple dari 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.
email string(255) Y Email registered on Duitku.
phoneNumber string(50) Y Customer phoneNumber. For testing phoneNumber 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:
• Multiple 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.
email string Email registered on Duitku.
accountName string Destination account holder name.
phoneNumber string Customer phoneNumber. For testing phoneNumber 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 call-back 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.
email string(255) Email registered on Duitku.
amountTransfer int • No decimal code and no decimal digit.
For Indomaret:
• Multiple 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 phoneNumber.
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.
email 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 procces.
bankAccount string Bank account number sent from inquiry procces.
amountTransfer int Amount transfer sent from inquiry procces.
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 responseCode description.

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.
email 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
email 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

Take a list of banks 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.
email 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

ResponseCode 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
-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 )
-100 Other Error

Vendor Response Code

ResponseCode 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.

Error Code

ResponseCode 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 Email SeckretKey
3551 [email protected] de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d

Scenario Disbursement Online

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

BankAccount 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, -100 it means there is a problem in the transfer process, it is not recommended to do this process a second time.

BankAccount 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

Scenario Disbursement Clearing

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

BankAccount Response 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

BankAccount Response Description
8760673466 00 LLG/RTGS
8760673466 80 H2H
8760673451 LD
8760673452 NF
8760673453 TO
8760673454 -510
8760673455 90
8760673456 68
8760673457 91

Scenario Cash Out

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
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
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 Bukopin
472 Bank Jasa Jakarta
484 Bank KEB Hana
485 MNC Bank
490 Bank Neo Commerce
494 Bank BRI Agroniaga
498 Bank SBI
501 BANK ALADIN SYARIAH
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
564 Bank Mantap
566 Bank Victoria International
567 Allo Bank
600 BPR/LSB
688 BPR KS
699 BPR EKA
789 IMkas
911 LinkAja
945 Bank Agris
949 Bank Chinatrust Indonesia
950 Bank Commonwealth
1010 OVO
1012 DANA
1013 Shopeepay
1014 LinkAja Direct

Changelog

Version 1.2

Jun 2022

May 2022

Jan 2022

Version 1.1

Nov 2018

Version 1.0