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 50 hingga 100 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 empat jenis integrasi clearing :

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

  2. RTGS (Real-Time Gross Settlement) Transfer RTGS, transfer antar bank yang mencakup lebih dari 130 bank di Indonesia. Jumlah minimum transaksi Rp 100.000.000. 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 5 Bank Besar di Indonesia (BNI, BRI, Mandiri, Permata, CIMB), untuk jadwal transfer mengikuti jadwal masing-masing bank.

  4. BI FAST (Bank Indonesia Fast Payment) Pembayaran ritel nasional yang dapat memfasilitasi pembayaran ritel secara real-time, aman, efisien, biaya layanan yang lebih terjangkau dan layanan setiap saat (24/7).

Cash Out

Proses Cash Out adalah fitur untuk membantu merchant melakukan penarikan dana secara otomatis melalui API atau Dashboard Duitku. Saat ini hanya didukung oleh 2 channel, yaitu POS Indonesia dan Indomaret.

Transfer Online

API ini menyediakan beberapa fungsi utama, antara lain:

Untuk memudahkan integrasi, kami menyediakan Postman Collection yang dapat merchant gunakan untuk melakukan uji coba request dan response 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 check balance API yang membantu memeriksa saldo merchant saat ini dan inquiry status 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 Wajib 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 Kode respons dari Duitku. Detail dan deskripsi kode respons dapat dilihat disini.
responseDesc string Deskripsi dari kode respons.

Transfer Online Transfer Request

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 Wajib 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 Kode respons dari Duitku. Detail dan deskripsi kode respons dapat dilihat disini.
responseDesc string Deskripsi dari kode respons.

Clearing

API ini menyediakan beberapa fungsi utama, antara lain:

Untuk memudahkan integrasi, kami menyediakan Postman Collection yang dapat merchant gunakan untuk melakukan uji coba request dan response 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 Wajib 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, H2H atau BIFAST. 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/BIFAST.
responseCode string Kode respons dari Duitku. Detail dan deskripsi kode respons dapat dilihat disini.
responseDesc string Deskripsi dari kode respons.

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 Wajib 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, H2H atau BIFAST. 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/BIFAST.
responseCode string Kode respons dari Duitku. Detail dan deskripsi kode respons dapat dilihat disini.
responseDesc string Deskripsi dari kode respons.

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 dan deskripsi kode respons 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 melakukan uji coba request dan response 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 Wajib 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 dalam 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]';
    $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 Wajib 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

Inquiry Check Balance 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 Wajib 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 Email yang dikirimkan saat proses inquiry.
userId Int User Id yang dikirimkan saat proses inquiry.
balance Decimal Saldo saat ini sebelum settlement.
effectiveBalance Decimal Saldo Efektif yang bisa digunakan untuk disbursement.
responseCode String Kode respons dari duitku. Detail dan deskripsi dapat dilihat disini.
responseDesc String Deskripsi dari kode respons.

Inquiry List Bank

API Inquiry List Bank digunakan untuk mendapatkan daftar bank yang tersedia.

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

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

-100

Kesalahan lainnya (Jangan di ulang).

-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 tipe 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 tidak terdaftar dalam whitelist.

-951

Waktu telah habis.

-952

Parameter tidak valid.

-960

Timestamp sudah tidak berlaku (5 menit).

Vendor Response Code

Kode Respons 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

Kode Status Deskripsi
00 Berhasil.
01 Gagal.
68 Pending (Jangan diulang).

Error Code

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

Pengujian

Berikut adalah daftar pengujian disbursement yang dapat digunakan di Sandbox Environment:

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

Disbursement Inquiry Test

Bank Account 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, atau -100, menandakan bahwa ada masalah ketika proses transfer. Tidak disarankan untuk melakukan proses ini untuk kedua kalinya.

Bank Account 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

Bank Account 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

Bank Account Response Code Deskripsi
8760673466 00 LLG/RTGS/BIFAST
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 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

Agu 2022

Jun 2022

Mei 2022

Jan 2022

Version 1.1

Nov 2018

Version 1.0