NAV Navbar
php json

Langkah Awal

Selamat datang di laman Disbursement API Duitku. API ini hanya bisa digunakan apabila fitur disbursement telah diaktifkan untuk akun Anda. pada halaman ini Duitku menyediakan beberapa fitur diantaranya :

Transfer Online

Proses Transfer Online adalah fitur untuk membantu merchant mentransfer dana secara otomatis melalui API atau Dashboard Duitku. Dan sudah terhubung ke lebih dari 140 bank di Indonesia. Layanan ini tersedia 24 jam/7 hari, dan dapat dilakukan secara real time online. Transfer akan dibatasi dari 25 hingga 50 Juta per transaksi tergantung pada rekening bank penerima.

Clearing

Proses Clearing adalah fitur untuk membantu merchant melakukan Clearing dana secara otomatis melalui API atau Dashboard Duitku berdasarkan jenis integrasi yang disediakan.

Ada tiga jenis integrasi kliring:

  1. LLG (Lalu Lintas Giro) transfer LLG, transfer antar bank yang mencakup lebih dari 130 bank di Indonesia. Transaksi jumlah maksimal Rp 500 juta. Proses transfer mengikuti jadwal BI (Bank Indonesia), untuk jadwal transfer yaitu 8.00 – 15.00 pada hari kerja.

  2. RTGS (Penyelesaian Bruto Waktu Nyata) transfer RTGS, transfer antar bank yang mencakup lebih dari 130 bank di Indonesia. Transaksi jumlah minimal Rp 100 juta. Proses transfer mengikuti jadwal BI (Bank Indonesia), untuk jadwal transfer yaitu 8.00 – 15.00 pada hari kerja.

  3. H2H (Bank Host to Host) Duitku Host to Host koneksi ke bank, untuk memastikan koneksi langsung dan keandalan yang lebih baik. Saat ini hanya mendukung 4 Bank Besar di Indonesia (BNI, BRI, Mandiri, Permata), untuk jadwal transfer mengikuti waktu jadwal bank.

Cash Out

Proses Cash Out adalah fitur untuk membantu merchant melakukan penarikan dana secara otomatis melalui API atau Dashboard Duitku. Saat ini baru support 2 channel (Pos Indonesia, Indomaret).

Transfer Online

API ini menyediakan beberapa fungsi utama, antara lain:

Untuk memudahkan integrasi, kami menyediakan Postman Collection yang dapat merchant gunakan untuk mencoba dan melihat permintaan dan respon API kami.

Run in Postman

Alur Transaksi Transfer Online

Proses pencairan terdiri dari dua langkah utama: inquiry (disbursement inquiry API) dan transfer (disbursement transfer API). Sebelum melakukan transfer, pastikan saldo merchant mencukupi, API kami akan melakukan validasi ketersedian sebelum menjalankan proses. Dua API tambahan lainnya adalah checkBalance API yang membantu memeriksa saldo merchant saat ini dan inquiryStatus API untuk memeriksa status transaksi saat ini (misalnya, berhasil atau gagal). image info

Transfer Online Inquiry Request

Langkah pertama pada proses disbursement diawali dengan melakukan inquiry ke sistem Duitku. Anda dapat membuat permintaan disbursement dengan membuat inquiry menggunakan API ini.

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 Parameters

{ 
    "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 Tipe Required Deskripsi Contoh
userId int Y ID merchant, didapatkan setelah fitur disbursement diaktifkan oleh Duitku. 3551.
amountTransfer int Y Jumlah uang yang akan ditransfer (tanpa kode desimal dan tanpa digit desimal). 50000.
bankAccount string(255) Y Nomor rekening bank. Untuk testing bankAccount bisa dilihat disini.
bankCode string(3) Y Kode bank tujuan atau bank penerima. Daftar bankCode bisa dilihat disini.
email string(255) Y Email merchant yang dipakai untuk registrasi Duitku. [email protected]
purpose string(255) N Berita atau pesan dari transaksi. Test Transfer Online Inquiry with duitku.
timestamp double Y Unix Timestamp dalam miliseconds. 1506486841000.
senderId int N Customer Id dari merchant. 123456789.
senderName string(255) N Nama customer.
signature string(255) Y Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. 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 Tipe Deskripsi Contoh
email string Email yang dikirimkan saat proses inquiry. [email protected]
bankCode string Kode bank yang dikirimkan saat proses inquiry. 014 (contoh untuk BCA).
bankAccount string Nomor rekening bank yang dikirimkan saat proses inquiry. Untuk testing bankAccount bisa dilihat disini.
amountTransfer int Jumlah yang dikirimkan saat proses inquiry. 50000.
accountName string Nama pemilik rekening tujuan Test Account.
custRefNumber string 9 Digit Nomor referensi pelanggan yang akan dicetak ketika transaksi berhasil. 123456789.
disburseId string Disbursement ID dari duitku. Mohon untuk menyimpan nomor ini untuk keperluan pengecekan.
responseCode string Respon kode dari duitku. Detail dan deskripsi dapat dilihat disini.
responseDesc string Deskripsi dari responseCode.

Transfer Online Request Transfer

Setelah mendapat response sukses dari inquiry, maka langkah selanjutnya yaitu mengirimkan data yang diperlukan untuk disbursement transfer. Berikut data yang diperlukan API disbursement transfer.

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 Tipe Required Deskripsi Contoh
disburseId string(255) Y Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry. 12345.
userId int Y User Id yang dikirimkan ketika inquiry. 3551.
email string(255) Y Email yang dikirimkan saat proses inquiry. [email protected]
bankCode string(3) Y Kode bank yang dikirimkan saat proses inquiry. Daftar bankCode bisa dilihat disini.
bankAccount string(255) Y Nomor rekening bank yang dikirimkan saat proses inquiry. Untuk testing bankAccount bisa dilihat disini.
amountTransfer int Y Jumlah uang yang dikirimkan saat proses inquiry. 50000.
accountName string(255) Y Nama pemilik rekening tujuan, diperoleh setelah mendapat response dari proses inquiry. Test Account.
custRefNumber string(255) Y Nomor referensi pelanggan, diperoleh setelah mendapat response dari proses inquiry. 000000001278.
purpose string(255) Y Deskripsi dari tujuan transfer. Test Transfer online With Duitku.
timestamp double Y Unix Timestamp dalam miliseconds. 1507024378000.
signature string(255) Y Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256 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 Tipe Deskripsi Contoh
email string Email yang dikirimkan saat proses inquiry. [email protected]
bankCode string Kode bank yang dikirimkan saat proses inquiry. 014 (contoh untuk BCA).
bankAccount string Nomor rekening bank yang dikirimkan saat proses inquiry. Untuk testing bankAccount bisa dilihat disini.
amountTransfer int Jumlah yang dikirimkan saat proses inquiry. 50000.
accountName string Nama pemilik rekening tujuan, diperoleh setelah mendapat response dari proses inquiry. Test Account.
custRefNumber string 9 Digit Nomor referensi pelanggan yang akan dicetak ketika transaksi berhasil. 123456789.
responseCode string Respon kode dari duitku. Detail dan deskripsi dapat dilihat disini.
responseDesc string Deskripsi dari responseCode.

Clearing

API ini menyediakan beberapa fungsi utama, antara lain:

Untuk memudahkan integrasi, kami menyediakan Postman Collection yang dapat merchant gunakan untuk mencoba dan melihat permintaan dan respon API kami.

Run in Postman

Alur Transaksi Clearing

Proses clearing terdiri dari dua langkah utama: inquiry (clearing inquiry API) dan transfer (clearing transfer API). Sebelum melakukan transfer, pastikan saldo merchant mencukupi, API kami akan melakukan validasi ketersedian sebelum menjalankan proses. API tambahan lainnya adalah callback API yang membantu memeriksa status transaksi saat ini berupa respon callback. 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": 12345789,
    "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              = 'RTGS';
    $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 Tipe Required Deskripsi Contoh
userId int Y ID Merchant, didapatkan setelah fitur disbursement diaktifkan oleh Duitku. 3551.
email string(255) Y Email merchant yang digunakan saat registrasi Duitku. [email protected]
bankCode string(3) Y Kode bank tujuan. Daftar bankCode bisa dilihat disini.
bankAccount string(255) Y Nomor rekening bank tujuan. Untuk testing bankAccount bisa dilihat disini.
amountTransfer int Y Jumlah uang yang akan ditransfer (tanpa kode desimal dan tanpa digit desimal). 50000.
custRefNumber string(9) N 9 Digit Nomor Referensi untuk customer. 12345789.
senderName string(255) N Nama customer. John Doe
senderId int N Customer Id dari merchant. 12345789.
purpose string(255) N Deskripsi dari tujuan transaksi. Test Clearing Inquiry dengan duitku
type string Y LLG, RTGS atau H2H. RTGS.
timestamp double Y Unix Timestamp dalam miliseconds. 1506486841000.
signature string(255) Y Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. 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 Tipe Deskripsi Contoh
email string Email yang dikirimkan saat proses Inquiry. [email protected]
bankCode string Kode bank yang dikirimkan saat proses Inquiry. 014 (contoh untuk BCA).
bankAccount string Nomor rekening bank tujuan. Untuk testing bankAccount bisa dilihat disini.
amountTransfer int Jumlah yang dikirimkan saat proses Inquiry. 500000000.
custRefNumber string 9 Digit Nomor referensi pelanggan yang akan dicetak ketika transaksi berhasil. 12345789.
accountName string Nama akun tujuan. Test Account.
disburseId string Disbursement ID dari duitku. Mohon untuk menyimpan nomor ini untuk keperluan pengecekan.
type string Tipe yang dikirimkan saat proses Inquiry. RTGS/LLG/H2H.
responseCode string Respon kode dari duitku. Detail dan deskripsi dapat dilihat disini.
responseDesc string Deskripsi dari responseCode.

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" : 50000000,
    "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';
    $type           = 'RTGS';
    $timestamp      = round(microtime(true) * 1000);
    $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 Tipe Required Deskripsi Contoh
disburseId string(255) Y Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry. 12345.
userId int Y User Id yang dikirimkan saat proses inquiry. 3551.
email string(255) Y Email yang dikirimkan saat proses inquiry. [email protected]
bankCode string(3) Y Kode bank yang dikirimkan saat proses inquiry. Daftar bankCode bisa dilihat disini.
bankAccount string(255) Y Nomor rekening bank yang dikirimkan saat proses inquiry. Untuk testing bankAccount bisa dilihat disini.
amountTransfer int Y Jumlah uang yang dikirimkan saat proses inquiry. 500000000.
accountName string(255) Y Nama pemilik rekening tujuan yang dikirimkan saat proses inquiry. John Doe.
custRefNumber string(255) Y Nomor referensi pelanggan, diperoleh setelah mendapat response dari proses inquiry. 12345789.
purpose string(255) N Deskripsi dari tujuan transaksi. Test Clearing Inquiry with duitku.
type string Y LLG, RTGS atau H2H. RTGS.
timestamp double Y Unix Timestamp dalam miliseconds. 1506486841000.
signature string(255) Y Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. 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 Tipe Deskripsi Contoh
email string Email yang dikirimkan saat proses request. [email protected]
bankCode string Kode bank yang dikirimkan saat proses request. 014 (contoh untuk BCA).
bankAccount string Nomor rekening bank yang dikirimkan saat proses request. Untuk testing bankAccount bisa dilihat disini.
amountTransfer int Jumlah uang yang dikirimkan saat proses request. 50000000.
accountName string Nama pemilik rekening tujuann yang dikirimkan saat proses request. Test Account.
custRefNumber string 9 Digit nomor referensi pelanggan yang dikirimkan saat proses request. 000000001278.
type string Tipe yang dikirimkan saat proses request. RTGS/LLG/H2H
responseCode string Kode respon. Detail dan deskripsi dapat dilihat disini.
responseDesc string Deskripsi dari responseCode.

Clearing Callback

Duitku akan mengirimkan respon berupa return value berbentuk HTTP POST. Merchant diminta untuk menyediakan satu laman untuk menerima hasil dari respon callback dari Duitku.

<?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 hanya untuk type H2H.

Method : HTTP POST

Type : application/json

Parameter Tipe Deskripsi
disburseId String(255) Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry.
userId int ID merchant, didapatkan setelah fitur disbursement diaktifkan oleh Duitku.
email string(255) Email merchant yang dipakai untuk registrasi Duitku.
bankCode string(3) Kode bank tujuan : 014 (BCA).
Daftar bankCode bisa dilihat disini.
bankAccount string(255) Nomor rekening bank tujuan.
amountTransfer int Jumlah nominal transaksi. Tanpa kode desimal (.) dan tanpa digit desimal.
accountName string(255) Nama pemegang rekening tujuan.
custRefNumber string(255) Nomor referensi pelanggan.
statusCode string(255) Kode status 00 = Berhasil.
Detail list yang tersedia dapat dilihat disini.
statusDesc string(255) Deskripsi dari status code.
errorMessage string(255) Deskripsi Error jika Failed atau Pending.
signature string(255) Formula: SHA256(email + bankCode + bankAccount + accountName + custRefNumber + amountTransfer + disburseId + secretKey).

Cash Out

Inquiry cash out digunakan untuk melakukan penarikan dana pada sistem Duitku. API ini menyediakan beberapa fungsi utama, antara lain:

Untuk memudahkan integrasi, kami menyediakan Postman Collection yang dapat merchant gunakan untuk mencoba dan melihat permintaan dan respon API kami.

Run in Postman

Alur Transaksi Cash Out

  1. Proses Cash Out diawali dengan user melakukan proses request withdraw ke merchant.
  2. merchant kemudian melakukan inquiry dengan parameter yang telah disediakan oleh Duitku.
  3. Duitku akan menyesuaikan ketersediaan dan mengirimkan permintaan berupa request token kepada vendor.
  4. Server duitku kemudian memberikan respon berisikan informasi terkait token yang dikirimkan oleh vendor.
  5. Informasi terkait token yang akan digunakan dikirim berupa SMS untuk proses cash out.
  6. User kemudian bisa melakukan proses cash out ke Pos indonesia/Indomaret menggunakan token yang telah diterima.
  7. Merchant akan menerima respon berupa callback yang dikirimkan oleh vendor melalui server Duitku.

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   = '000000857846';
    $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);
        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" : "000000857846",
    "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" : 1627963118867,
    "callbackUrl":"http:\/\/example.com\/callback",
    "signature" : "c2d35814d6ab9f6b0e745201191736920a57c8bad2733c12eb5dc5adf0989abe"
}

Parameter Tipe Required Deskripsi
userId int Y merchant ID, didapatkan setelah fitur disbursement diaktifkan oleh Duitku.
amountTransfer int Y • Tanpa kode desimal dan tanpa digit desimal.
Untuk Indomaret:
• Kelipatan dari 50.000.
• Min 50.000.
• Maks 1.000.000.
Untuk Pos Indonesia:
• Min 50.000.
• Maks 2.000.000.
custRefNumber string(255) N Nomor referensi pelanggan.
bankCode string Y Kode bank tujuan atau bank penerima:
• bankCode 2010 untuk Indomaret.
• bankCode 2011 untuk Pos indonesia.
accountName string(255) Y Nama pelanggan.
accountAddress string(255) N Alamat pelanggan.
accountIdentity string(255) Y Nomor KTP pelanggan.
email string(255) Y Email merchant yang dipakai untuk registrasi Duitku.
phoneNumber string(50) Y Nomor telepon pelanggan. Untuk testing phoneNumber bisa dilihat disini.
timestamp double Y Unix Timestamp in miliseconds.
purpose string(255) N Deskripsi dari tujuan transaksi.
callbackUrl string(255) N Url untuk callback transaksi.
signature string(255) Y Formula: SHA256(email + timestamp + amountTransfer + purpose + secretKey).

Response Parameters

{ 
    "disburseId" : 682069,
    "amountTransfer": 50000,
    "custRefNumber" : "000000857846",
    "accountName" : "Test Account",
    "email" : "[email protected]",
    "phoneNumber" : "085718159196",
    "token" : 230426073103,
    "pin" : "902607",
    "responseCode" : "00",
    "responseDesc" : "Success"
}


Parameter Tipe Deskripsi
disburseId int Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry.
amountTransfer int • Tanpa kode desimal dan tanpa digit desimal.
Untuk Indomaret:
• Kelipatan dari 50.000.
• Min 50.000.
• Maks 1.000.000.
Untuk Pos Indonesia:
• Min 50.000.
• Maks 2.000.000.
custRefNumber string Nomor referensi pelanggan.
email string Email merchant yang dipakai untuk registrasi Duitku.
accountName string Nama rekening tujuan.
phoneNumber string Nomor telepon pelanggan. Untuk testing phoneNumber bisa dilihat disini.
token double Token yang didapatkan dari Duitku.
pin string Khusus untuk pembayaran Pos Indonesia.
responseCode string Kode status 00 = Berhasil.
Detail list yang tersedia dapat dilihat disini.
responseMessage string Deskripsi Response code.

Cash Out Callback

Duitku akan mengirimkan respon berupa return value berbentuk HTTP POST. Merchant diminta untuk menyediakan satu laman untuk menerima hasil dari respon callback dari Duitku.

<?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": "22851",
  "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 Tipe Deskripsi
disburseId string(255) Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry.
email string(255) Email merchant yang dipakai untuk registrasi Duitku.
amountTransfer int • Tanpa kode desimal dan tanpa digit desimal.
Untuk Indomaret:
• Kelipatan dari 50.000.
• Min 50.000.
• Maks 1.000.000.
Untuk Pos Indonesia:
• Min 50.000.
• Maks 2.000.000.
custRefNumber string(255) Nomor referensi pelanggan.
accountName string(255) Nama pelanggan.
bankCode string Kode bank tujuan:
• bankCode 2010 untuk Indomaret.
• bankCode 2011 untuk Pos indonesia.
phoneNumber string(255) Nomor telepon pelanggan.
statusCode string(255) Kode status 00 = Berhasil.
Detail list yang tersedia dapat dilihat disini.
statusDesc string(255) Deskripsi dari status code.
errorMessage string(255) Pesan Error yang dikirimkan oleh Duitku.
signature string(255) Formula: SHA256(email + disburseId + custRefNumber + secretKey).

Inquiry Status

Inquiry status digunakan untuk melakukan pengecekan pada sistem Duitku apakah transaksi yang dilakukan sukses atau gagal.

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]ology.com';
    $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 Tipe Required Deskripsi Contoh
disburseId string(255) Y Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry. 12345.
userId int Y User Id yang dikirimkan ketika inquiry. 3551.
email string(255) Y Email yang dikirimkan saat proses inquiry. [email protected]
timestamp double Y Unix Timestamp dalam miliseconds. 1507024378000.
signature string(255) Y Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. 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 Tipe Deskripsi
bankCode string Kode bank yang dikirimkan saat proses inquiry.
bankAccount string Nomor rekening bank tujuan saat proses inquiry.
amountTransfer int Jumlah yang dikirimkan saat proses inquiry.
accountName string Nama pemilik rekening tujuan, diperoleh setelah mendapat response dari proses inquiry.
custRefNumber string 9 Digit Nomor referensi pelanggan yang akan dicetak ketika transaksi berhasil.
responseCode string Respon kode dari duitku. Detail dan deskripsi dapat dilihat disini.
responseDesc string Deskripsi dari responseCode.

Inquiry Check Balance

Cek saldo digunakan untuk memeriksa saldo yang tersedia untuk 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)
    {
        header('Content-Type: application/json');
        $return = json_encode(json_decode($request), JSON_PRETTY_PRINT);
        echo $return;
    }
    else
        echo $httpCode;
?>
Parameter Tipe Required Deskripsi Contoh
userId int Y User Id yang dikirimkan ketika inquiry. 3551.
email string(255) Y Email yang dikirimkan saat proses inquiry. [email protected]
timestamp double Y Unix Timestamp in miliseconds. 1507024378000.
signature string(255) Y Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. Formula: SHA256(email + timestamp + secretKey).

Response Parameters

{
    "userId": 3551,
    "email": "[email protected]",
    "balance": 7177.00,
    "effectiveBalance": 7177.00,
    "responseCode": "00",
    "responseDesc": "Success"
}
Parameter Tipe Deskripsi
email string Nilainya sama dengan Check balance Request.
userId Int Nilainya sama dengan Check balance Request.
balance Decimal Saldo saat ini sebelum settlement.
effectiveBalance Decimal Saldo Efektif yang bisa digunakan untuk disbursement.
responseCode String Respon kode dari duitku. Detail dan deskripsi dapat dilihat disini.
responseDesc String Deskripsi Response code.

Inquiry List Bank

Mendapatkan daftar bank dengan 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 Tipe Required Deskripsi Contoh
userId int Y User Id yang dikirimkan ketika proses inquiry. 3551.
email string(255) Y Email yang dikirimkan saat proses inquiry. [email protected]
timestamp double Y Unix Timestamp dalam miliseconds. 1507024378000.
signature string(255) Y Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. 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 Deskripsi
responseCode String Kode status 00 = Berhasil.
responseDesc String Deskripsi Response code.
bankCode string Kode bank.
bankName string Nama bank.
maxAmountTransfer string Jumlah transfer maksimum.

Status Code

ResponseCode Deskripsi
00 Disetujui/Sukses
EE General Error
TO Response Time Out dari Jaringan ATM Bersama (Jangan diulang)
LD Masalah link antara Duitku dan jaringan ATM Bersama
NF Transaksi belum tercatat pada gateway Remittance
76 Nomor rekening tujuan tidak valid
80 Sedang menunggu callback
-120 User ID tidak ditemukan/ tidak memiliki akses ke API ini
-123 User telah diblokir
-141 Nominal transfer tidak valid
-142 Transaksi Sudah Selesai
-148 Bank tidak mendukung type H2H
-149 Bank Tidak Terdaftar
-161 URL callback tidak ditemukan
-191 Signature tidak valid
-192 Nomor rekening masuk blacklist
-213 Alamat email salah
-420 Transaksi tidak Ditemukan
-510 Dana Tidak Cukup
-920 Batas Terlampaui
-930 IP not whitelisted
-951 Waktu telah habis
-952 Parameter Tidak Valid
-960 Timestamp sudah tidak berlaku (5 menit)
-100 Other Error (Jangan di ulang)

Vendor Response Code

ResponseCode Deskripsi
00 Disetujui/Sukses
01 Refer to card issuer
05 Transaksi tidak diizinkan
12 Generic exception
14 Rekening tidak ditemukan
30 Format tidak valid
31 Kode bank tidak valid
51 Dana tidak mencukupi / melebihi batas kredit
66 Generic error
68 Respons diterima terlambat / Time out Saat mendapatkan respons ini, Anda harus menunggu konfirmasi bank. (Jangan diulang)
88 Tagihan sudah dibayar
90 Beneficiary atau Mata Uang Tidak Valid
91 Kesalahan Transportasi ke Back End

Callback Status Code

Status Code Deskripsi
00 Berhasil.
01 Gagal.

Error Code

ResponseCode Deskripsi
00 Disetujui/Sukses
01 Lihat penerbit kartu
03 Merchant tidak valid
04 Pick-up / capture card
05 Do not honor
12 Transaksi tidak valid
13 Jumlah tidak valid
14 Nomor kartu tidak valid (tidak ada nomor tersebut)
15 Tidak ada penerbit seperti itu
20 Respon tidak valid
30 Kesalahan format
31 Bank tidak didukung switch
33 Kartu kedaluwarsa
36 Kartu terbatas
38 Percobaan PIN yang diizinkan terlampaui
39 Tidak ada akun kredit
40 Fungsi yang diminta tidak didukung
41 Kartu hilang
43 Kartu dicuri
51 Dana tidak mencukupi / melebihi batas kredit
52 Tidak ada rekening giro
68 Respons diterima terlambat / Time out Saat mendapatkan respons ini, Anda harus menunggu konfirmasi bank. (Jangan diulang)
91 Issuer, Destination or switch is inoperative

Testing

Berikut adalah daftar testing disbursement yang dapat digunakan di Sandbox Environtment:

Merchant Test Disbursement

User Test

UserID Email SeckretKey
3551 [email protected] de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d

Skenario Disbursement Online

Berikut adalah daftar parameter BankAccount yang harus di set pada parameter disbursement inquiry dan disbursement transfer di Sandbox Environtment.

Disbursement Inquiry Test

BankAccount Response Code Deskripsi
8760673566 00 Berhasil
8760673511 TO Waktu habis
8760673512 -100 Kesalahan lainnya
8760673513 LD Link Down
8760673514 91 DB bermasalah
8760673515 89 Link ke host Down

Disbursement Transfer Test

Jika mendapat response TO, 68, -100 berarti ada masalah dalam proses transfer, tidak disarankan untuk melakukan proses ini untuk kedua kalinya.

BankAccount Response Code Deskripsi
8760673566 00 Berhasil
8760673559 LD Link Down
8760673560 91 DB bermasalah
8760673561 TO Waktu habis
8760673562 -510 Wallet tidak mencukupi
8760673563 89 Link ke host Down
8760673564 68 Waktu habis
8760673565 -100 Kesalahan lainnya

Skenario Disbursement Clearing

Berikut adalah daftar parameter BankAccount yang harus di set pada parameter disbursement Clearing inquiry dan disbursement Clearing transfer di Sandbox Environtment.

Clearing Inquiry Test

BankAccount Response Code Deskripsi
8760673466 00 Berhasil
8760673411 EE Kesalahan Umum
8760673412 TO Response time out dari Jaringan ATM Bersama
8760673413 LD Link Bermasalah antara Duitku dan Jaringan ATM Bersama
8760673414 NF Transaksi belum tercatat di gateway Remittance
8760673415 -100 Kesalahan lainnya
8760673416 66 Generic Error
8760673417 68 Time out Saat mendapatkan respons ini, Anda harus menunggu konfirmasi bank.
8760673418 88 Tagihan sudah dibayar
8760673419 90 Beneficiary atau Mata Uang Tidak Valid
8760673420 91 Kesalahan Transportasi ke Back End

Clearing Transfer Test

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

Skenario Cash Out

phoneNumber Deskripsi
08...100 s.d. 200 Inquiry ➟ Berhasil ➟ Callback Berhasil-00
08...201 s.d. 300 Inquiry ➟ Berhasil ➟ Callback Gagal-01

Daftar Bank

Daftar bank yang didukung pada fitur 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

Mei 2022

Jan 2022

Version 1.1

Nov 2018

Version 1.0