NAV Navbar
php json

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:

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

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

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

  4. 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 :

To make integration easier, we provide a Postman Collection that merchants can use to test our request and response APIs.

Run in Postman

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

Flowtransferonline

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

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.
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 integration easier, we provide a Postman Collection that merchants can use to test our request and response APIs.

Run in Postman

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.

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, 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
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/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.
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, 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
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/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.
email 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 :

To make integration easier, we provide a Postman Collection that merchants can use to test our request and response APIs.

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]",
    "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.
email 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.
email 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.
email 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.
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 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.
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

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

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 Email 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
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

Jun 2023

Aug 2022

Jun 2022

May 2022

Jan 2022

Version 1.1

Nov 2018

Version 1.0