Flow
Registration Account Binding
API ini digunakan oleh merchant untuk melakukan binding akun pengguna ke sistem penyelenggara pembayaran, seperti DANA. Merchant perlu mengirimkan nomor telepon pengguna dan metadata channel pembayaran yang digunakan. API ini akan mengembalikan referenceNo dan URL otorisasi untuk proses lanjutan.
- Method:
POST
- Type:
application/json
- Path:
/api/v1.0/registration-account-binding
- Service Code:
07
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| Content-Type | string | ✓ | Jenis konten permintaan | application/json |
| X-TIMESTAMP | string | ✓ | Timestamp dalam format ISO-8601 | 2025-05-05T13:57:57+07:00 |
| X-SIGNATURE | string | ✓ | Signature terenkripsi, lihat bagian Authentication | WDcJOiayTD1St7bhI+6... |
| X-PARTNER-ID | string | ✓ | ID partner Doitpay | 01J20VM8TNRK9VBMGJAQDBSF8X |
| X-EXTERNAL-ID | string(64) | ✓ | ID permintaan unik dari merchant | 804346 |
| CHANNEL-ID | string | ✓ | Nilai tetap DOITPAY | DOITPAY |
| Authorization | string | ✓ | Token akses menggunakan format Bearer token | Bearer eyJhbGc... |
Request Body Registration Account Binding
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| partnerReferenceNo | string | ✓ | ID unik referensi transaksi dari merchant | 01JTFKSCPE94ERTKVVCBHK3PKG |
| phoneNo | string | ✓ | Nomor telepon pelanggan | +6287722728028 |
| additionalInfo | object | ✓ | Metadata channel pembayaran, lihat tabel di bawah | |
additionalInfo
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| paymentChannel | string | ✓ | Channel pembayaran, misalnya DANA, OVO, dll | DANA |
| paymentMethod | string | ✓ | Jenis metode pembayaran, misalnya EWALLET, VA | EWALLET |
Example Request
{
"additionalInfo": {
"paymentChannel": "DANA",
"paymentMethod": "EWALLET"
},
"partnerReferenceNo": "01JTFKSCPE94ERTKVVCBHK3PKG",
"phoneNo": "+6287722728028"
}
Response Body
{
"responseCode": "2000700",
"responseMessage": "Successful",
"referenceNo": "01JTFKSD339DJJ9WDWNDFFNC63",
"partnerReferenceNo": "01JTFKSCPE94ERTKVVCBHK3PKG",
"redirectUrl": "https://m.sandbox.dana.id/...",
"additionalInfo": {
"paymentMethod": "EWALLET",
"paymentChannel": "DANA",
"status": "PENDING",
"accountNo": "+6287722728028"
}
}
Response Code Table
| Kode | Keterangan |
|---|
| 2000700 | Berhasil membuat binding akun |
| 4090700 | PartnerReferenceNo sudah digunakan |
| 4000701 | Field tidak valid |
| 4010700 | Signature tidak valid |
Registration Account Inquiry
API ini digunakan untuk melakukan pengecekan status hasil dari proses account binding. Endpoint ini menggunakan partnerReferenceNo sebagai identifikasi unik terhadap request binding yang telah dikirim sebelumnya.
- Method:
POST
- Type:
application/json
- Path:
/api/v1.0/registration-account-inquiry
- Service Code:
08
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| Content-Type | string | ✓ | Jenis konten permintaan | application/json |
| X-TIMESTAMP | string | ✓ | Timestamp dalam format ISO-8601 | 2025-05-05T14:06:20+07:00 |
| X-SIGNATURE | string | ✓ | Signature terenkripsi, lihat bagian Authentication | EuMVu75OKfVcIQcy67k5wcqWAHMqniEc/... |
| X-PARTNER-ID | string | ✓ | ID partner Doitpay | 01J20VM8TNRK9VBMGJAQDBSF8X |
| X-EXTERNAL-ID | string(64) | ✓ | ID permintaan unik dari merchant | 166140 |
| CHANNEL-ID | string | ✓ | Nilai tetap DOITPAY | DOITPAY |
| Authorization | string | ✓ | Token akses menggunakan format Bearer token | Bearer eyJhbGc... |
Request Body Registration Account Inquiry
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| partnerReferenceNo | string | ✓ | ID unik referensi transaksi dari merchant saat proses binding | 01JTFM51FR3Y130R3G1AGMAE8E |
Example Request
{
"partnerReferenceNo": "01JTFM51FR3Y130R3G1AGMAE8E"
}
Response Body
{
"responseCode": "2000800",
"responseMessage": "Successful",
"referenceNo": "01JTFM51KRJJDCE6GDFZQ6JYZQ",
"partnerReferenceNo": "01JTFM51FR3Y130R3G1AGMAE8E",
"accountCurrency": "IDR",
"additionalInfo": {
"paymentMethod": "EWALLET",
"paymentChannel": "DANA",
"status": "NEED_APPLY_TOKEN",
"accountNo": "+6287722728028",
"authCode": "MBntChzFOrBtZSSsd7wpgJ8yF8QQiofJBLJB7700"
}
}
Response Code Table
| Kode | Keterangan |
|---|
| 2000800 | Inquiry berhasil |
| 4040800 | Data tidak ditemukan |
| 4000801 | Field tidak valid |
| 4010800 | Signature atau token tidak sah |
Access Token (B2B2C)
API ini digunakan untuk mendapatkan token akses (access token) dan token refresh untuk melakukan proses otorisasi transaksi Debit Card setelah pengguna melakukan binding dan mendapatkan authCode.
- Method:
POST
- Type:
application/json
- Path:
/auth/v1.0/access-token/b2b2c
- Service Code:
74
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| Content-Type | string | ✓ | Jenis konten permintaan | application/json |
| X-TIMESTAMP | string | ✓ | Timestamp dalam format ISO-8601 | 2025-05-05T14:08:31+07:00 |
| X-SIGNATURE | string | ✓ | Signature terenkripsi, lihat bagian Authentication | DhSIDkF6gHFkzbdx... |
| X-CLIENT-KEY | string | ✓ | Client key dari Doitpay | 01J20VM8W11EP9M6KBHHJZMHPW |
Request Body Access Token
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| authCode | string | ✓ | Kode otorisasi yang didapat dari proses binding account | MBntChzFOrBtZSSsd7wpgJ8yF8QQ... |
| grantType | string | ✓ | Jenis grant yang digunakan (authorization_code atau refresh_token) | authorization_code |
| refreshToken | string | ✗ | Token refresh jika grantType = refresh_token | |
| additionalInfo | object | ✗ | Tambahan informasi jika diperlukan | |
Example Request
{
"additionalInfo": {},
"authCode": "MBntChzFOrBtZSSsd7wpgJ8yF8QQiofJBLJB7700",
"grantType": "authorization_code",
"refreshToken": ""
}
Response Body
{
"responseCode": "2007400",
"responseMessage": "Successful",
"accessToken": "<access_token_jwt>",
"tokenType": "BearerToken",
"accessTokenExpiryTime": "1296000",
"refreshToken": "<refresh_token_jwt>",
"refreshTokenExpiryTime": "5184000",
"additionalInfo": null
}
Response Code Table
| Kode | Keterangan |
|---|
| 2007400 | Token berhasil dibuat |
| 4007401 | Format field salah |
| 4017400 | AuthCode tidak valid atau expired |
| 4017401 | Signature/token tidak valid |
| 5007400 | Error sistem internal |
Account Unbinding
API ini digunakan untuk melakukan unbinding akun pengguna ke sistem penyelenggara pembayaran, seperti DANA. Merchant perlu mengirimkan access token yang telah terdaftar saat binding sebelumnya.
- Method:
POST
- Type:
application/json
- Path:
/api/v1.0/registration-account-unbinding
- Service Code:
09
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| Content-Type | string | ✓ | Jenis konten permintaan | application/json |
| X-TIMESTAMP | string | ✓ | Timestamp dalam format ISO-8601 | 2025-05-05T14:06:20+07:00 |
| X-SIGNATURE | string | ✓ | Signature terenkripsi, lihat bagian Authentication | EuMVu75OKfVcIQcy67k5wcqWAHMqniEc/... |
| X-PARTNER-ID | string | ✓ | ID partner Doitpay | 01J20VM8TNRK9VBMGJAQDBSF8X |
| X-EXTERNAL-ID | string(64) | ✓ | ID permintaan unik dari merchant | 166140 |
| CHANNEL-ID | string | ✓ | Nilai tetap DOITPAY | DOITPAY |
| Authorization | string | ✓ | Token akses menggunakan format Bearer token | Bearer eyJhbGc... |
Request Body Account Unbinding
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| partnerReferenceNo | string | ✓ | ID unik referensi transaksi dari merchant saat proses binding | 01JTFM51FR3Y130R3G1AGMAE8E |
Example Request
{
"partnerReferenceNo": "01JTFM51FR3Y130R3G1AGMAE8E"
}
Response Body
{
"responseCode": "2000900",
"responseMessage": "Successful",
"referenceNo": "01JTFM51KRJJDCE6GDFZQ6JYZQ",
"partnerReferenceNo": "01JTFM51FR3Y130R3G1AGMAE8E",
"accountCurrency": "IDR",
"additionalInfo": {
"paymentMethod": "EWALLET",
"paymentChannel": "DANA",
"status": "UNBOUND",
"accountNo": "+6287722728028"
}
}
Response Code Table
| Kode | Keterangan |
|---|
| 2000900 | Unbinding berhasil |
| 4040900 | Data tidak ditemukan |
| 4000901 | Field tidak valid |
| 4010900 | Signature atau token tidak sah |
Balance Inquiry
API ini digunakan oleh merchant untuk mengetahui saldo terkini pengguna berdasarkan akun yang telah dibinding. Permintaan ini memerlukan access token pelanggan yang valid.
- Method:
POST
- Path:
/api/v1.0/debit/balance-inquiry
- Content-Type:
application/json
- Service Code:
11
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| Content-Type | string | ✓ | Jenis konten permintaan | application/json |
| X-TIMESTAMP | string | ✓ | Timestamp dalam format ISO-8601 | 2025-05-05T14:27:43+07:00 |
| X-SIGNATURE | string | ✓ | Signature terenkripsi, lihat bagian Authentication | i+4/6rjYpkBrq7Nh... |
| X-PARTNER-ID | string | ✓ | ID partner Doitpay | 01J20VM8TNRK9VBMGJAQDBSF8X |
| X-EXTERNAL-ID | string(64) | ✓ | ID permintaan unik dari merchant | 277049 |
| CHANNEL-ID | string | ✓ | Nilai tetap DOITPAY | DOITPAY |
| Authorization | string | ✓ | Bearer token milik merchant | Bearer eyJhbGc... |
| Authorization-Customer | string | ✓ | Bearer token milik customer (access token hasil binding) | Bearer eyJhbGc... |
Request Body Balance Inquiry
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| accessToken | string | ✓ | Token akses pelanggan (customer access token) | eyJh... |
| paymentChannel | string | ✓ | Channel pembayaran, misalnya DANA | DANA |
| paymentMethod | string | ✓ | Jenis metode pembayaran, misalnya EWALLET | EWALLET |
Example Request
{
"additionalInfo": {
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"paymentChannel": "DANA",
"paymentMethod": "EWALLET"
}
}
Response Body
{
"responseCode": "2001100",
"responseMessage": "Successful",
"balance": {
"amount": "977000.00",
"type": "Available Balance"
},
"additionalInfo": {
"accountNo": "+6287722728028",
"paymentMethod": "EWALLET",
"paymentChannel": "DANA"
}
}
Response Field Description
| Parameter | Tipe | Keterangan |
|---|
| responseCode | string | Kode hasil response dari sistem |
| responseMessage | string | Penjelasan dari responseCode |
| balance | object | Data saldo pengguna |
| additionalInfo | object | Metadata tambahan terkait akun |
balance
| Parameter | Tipe | Keterangan | Contoh |
|---|
| amount | string | Jumlah saldo dalam IDR | 977000.00 |
| type | string | Tipe saldo (misal: Available) | Available Balance |
additionalInfo
| Parameter | Tipe | Keterangan |
|---|
| accountNo | string | Nomor akun pelanggan |
| paymentMethod | string | Jenis metode pembayaran |
| paymentChannel | string | Channel pembayaran |
Response Code Table
| Kode | Keterangan |
|---|
| 2001100 | Balance inquiry berhasil |
| 4001101 | Format permintaan tidak valid |
| 4011100 | Token akses tidak sah |
| 4031100 | Akses ditolak, customer belum terdaftar |
| 5001100 | Kesalahan sistem internal |
Debit Payment Host-to-Host
API ini digunakan untuk melakukan permintaan pembayaran langsung dari merchant ke penyelenggara (contoh: DANA) secara host-to-host. Diperlukan access token pengguna dan informasi pembayaran.
- Method:
POST
- Path:
/api/v1.0/debit/payment-host-to-host
- Content-Type:
application/json
- Service Code:
54
| Parameter | Tipe | Mandatori | Keterangan |
|---|
| Content-Type | string | ✓ | application/json |
| X-TIMESTAMP | string | ✓ | Timestamp format ISO-8601 |
| X-SIGNATURE | string | ✓ | Signature terenkripsi |
| X-PARTNER-ID | string | ✓ | Partner ID dari dashboard Doitpay |
| X-EXTERNAL-ID | string | ✓ | ID unik permintaan |
| CHANNEL-ID | string | ✓ | DOITPAY |
| Authorization | string | ✓ | Bearer token merchant |
| Authorization-Customer | string | ✓ | Bearer token customer (hasil binding access token) |
Request Body Payment Host-to-Host
{
"additionalInfo": {
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"channel": "DANA",
"customerName": "Andika",
"customerPhone": "+6287722728028"
},
"amount": {
"currency": "IDR",
"value": "13000.00"
},
"partnerReferenceNo": "01JTFNSMTWYMTH49S90VM02WBP",
"urlParam": [
{
"isDeeplink": "N",
"type": "PAY_NOTIFY",
"url": "https://andikawhy.free.beeceptor.com/debit card"
},
{
"isDeeplink": "N",
"type": "PAY_RETURN",
"url": "https://doitpay.co"
}
],
"validUpTo": "2025-05-05T15:03:02+07:00"
}
Response Body
{
"responseCode": "2005400",
"responseMessage": "Successful",
"partnerReferenceNo": "01JTFNSMTWYMTH49S90VM02WBP",
"appRedirectUrl": "",
"webRedirectUrl": "https://m.sandbox.dana.id/n/cashier/new/checkout?...",
"additionalInfo": {
"originalReferenceNo": "01JTFNSMYWZFMMM10NB2F4PESG",
"channelCode": "DANA"
}
}
Response Field Description
| Parameter | Tipe | Keterangan |
|---|
| responseCode | string | Kode hasil response dari sistem |
| responseMessage | string | Pesan respon |
| partnerReferenceNo | string | ID transaksi yang dikirimkan merchant |
| appRedirectUrl | string | URL redirect ke aplikasi |
| webRedirectUrl | string | URL redirect ke halaman web pembayaran |
| additionalInfo | object | Metadata tambahan |
additionalInfo
| Parameter | Tipe | Keterangan |
|---|
| originalReferenceNo | string | Referensi transaksi sebelumnya |
| channelCode | string | Channel kode pembayaran |
Response Code Table
| Kode | Keterangan |
|---|
| 2005400 | Permintaan debit berhasil diproses |
| 4005401 | Format request tidak valid |
| 4015400 | Token akses tidak valid atau kadaluarsa |
| 5005400 | Kesalahan sistem internal |
Check Payment Status Debit Card
API Check Payment Status Debit Card adalah layanan API yang dapat digunakan oleh Merchant untuk mengetahui status pembayaran dari Debit Card menggunakan ID transaksi.
- Method:
POST
- Type:
application/json
- Path:
/api/v1.0/debit/status
- Service Code:
55
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| Content-Type | string | ✓ | string yang menunjukkan jenis media. | application/json |
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2022-09-16T13:00:00+07:00 |
| X-SIGNATURE | string | ✓ | Lihat bagian symmetric signature | |
| X-PARTNER-ID | string | ✓ | Merchant Ref dari dashboard Doitpay | 01JP4QP4R908GVK9X5KN7YCJEG |
| X-EXTERNAL-ID | string(64) | ✓ | Request ID yang unik. | |
| CHANNEL-ID | string | ✓ | Nilai seharusnya DOITPAY | |
| Authorization | string | ✓ | Otentikasi dengan bearer token ,Lihat pada bagian access token | Bearer ZGMyNDA3NWQtNmM4Ny00NGNiLTQ2NTAtMDhkYWMxNTAzNzY0 |
Request Body Check Payment
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| originalPartnerReferenceNo | string | ✓ | Referensi transaksi asli | ORDER12345678 9 |
| additionalInfo | object | ✓ | Informasi tambahan query | Lihat additionalInfo |
additionalInfo Check Payment
| Parameter | Tipe | Keterangan | Contoh |
|---|
| originalReferenceNo | string | Nomor referensi payment | EW123456789 |
| channelCode | string | Kode kanal payment | DANA |
Example Check Payment
{
"originalPartnerReferenceNo": "ORDER123456789",
"additionalInfo": {
"originalReferenceNo": "EW123456789",
"channelCode": "DANA"
}
}
Response Body Check Payment
| Parameter | Tipe | Keterangan | Contoh |
|---|
| responseCode | string | Kode respons API | 2005500 |
| responseMessage | string | Deskripsi respons | Successful |
| originalPartnerReferenceNo | string | Referensi transaksi asli | ORDER123456789 |
| serviceCode | string | Kode tipe layanan untuk service yang digunakan, untuk debit card diisi 54 | 54 |
| latestTransactionStatus | string | Status transaksi terkini | 00 |
| additionalInfo | object | Informasi tambahan respons | Lihat additionalInfo |
amount Response Body Check Payment
| Parameter | Tipe | Keterangan | Contoh |
|---|
| value | string | ISO4217 dengan 2 desimal | 1000.00 |
| currency | string | Kode mata uang, hanya menerima IDR. | IDR |
additionalInfo Response Body Check Payment
| Parameter | Tipe | Keterangan | Contoh |
|---|
| originalReferenceNo | string | Nomor referensi payment | EW123456789 |
Debit Card Payment Notification (callback)
- Method:
POST
- Type:
application/json
- Path:
https://yourdomain.com/v1.0/debit/notify
- Service Code:
56
Symmetric Signature Payment Notification
Saat menerima notifikasi pembayaran, API anda perlu melakukan validasi signature untuk menjamin proses keamanan data. Berikut penjelasannya:
Formula :
stringToSign = HttpMethod + “:” + Endpoint + “:” + MerchantRef + “:” +
LowerCase(HexEncode(SHA-256(Minify(RequestBody)))) + “:” + Timestamp
hash = HMAC_SHA512(stringToSign, secretKey)
Buatlah sebuah variabel stringToSign.
-
HttpMethod adalah string nama metode yang sedang digunakan. Bisa saja POST, PUT, atau DELETE.
-
Endpoint adalah relative URL atau full path URL yang mana tanpa host atau domainnya.
-
MerchantRef adalah nilai token yang Anda dapatkan dari Merchant Reference.
-
RequestBody adalah payload yang ingin Anda kirim.
-
Timestamp menggunakan ISO-8601.
-
secretKey adalah Merchant Reference.
Hash stringToSign menggunakan HMAC_SHA512 cryptographic dan secret key (nama lain saat ini adalah API key). Kemudian, encode dengan Base 64.
Masukkan nilainya ke X-SIGNATURE.
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2022-09-16T13:00:00+07:00 |
| X-SIGNATURE | string | ✓ | Lihat Symmetric Signature Payment Notification | |
| X-PARTNER-ID | string | ✓ | Merchant Ref dari dashboard Doitpay | 01JP4QP4R908GVK9X5KN7YCJEG |
| X-EXTERNAL-ID | string(64) | ✓ | Request ID yang unik. | |
| CHANNEL-ID | string | ✓ | | |
Request Body Payment Notification
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|
| originalPartnerReferenceNo | string | ✓ | Referensi transaksi asli | ORDER123456789 |
| originalReferenceNo | string | ✓ | Nomor referensi payment | EW123456789 |
| latestTransactionStatus | string | ✓ | Status akhir transaksi | 00 |
| amount | object | ✓ | Detail jumlah transaksi | Lihat amount |
| additionalInfo | object | ✓ | Informasi tambahan notifikasi | Lihat additionalInfo |
amount Request Body Payment Notification
| Parameter | Tipe | Keterangan | Contoh |
|---|
| value | string | ISO4217 dengan 2 desimal. Menunjukkan nominal pembayaran. | 1000.00 |
| currency | string | Kode mata uang, hanya menerima IDR. | IDR |
additionalInfo Request Body Payment Notification
| Parameter | Tipe | Keterangan | Contoh |
|---|
| channelCode | string | Kode kanal payment | DANA |
Response Body
| Parameter | Tipe | Keterangan | Contoh |
|---|
| responseCode | string | Kode response, lihat bagian daftar Response Code di bawah | 2005600 |
| responseMessage | string | Penjelasan terhadap response code yang diterima | Successful |
Response Code Payment Notification
| Kode | Keterangan |
|---|
| 200XX00 | Berhasil membuat request. Dimana XX adalah service code untuk setiap API Debit Card. |
| 409XX00 | Conflict external ID saat membuat debit card. Dimana XX adalah service code untuk setiap API Debit Card. |
| 400XX01 | Invalid field format. Dimana XX adalah service code untuk setiap API Debit Card. |
| 400XX02 | Missing mandatory field. Dimana XX adalah service code untuk setiap API Debit Card. |
| 401XX00 | Unauthorized Signature. Dimana XX adalah service code untuk setiap API Debit Card. |
| 401XX01 | Invalid Access Token. Dimana XX adalah service code untuk setiap API Debit Card. |
| 500XX00 | Terjadi kesalahan sistem di doitpay, mohon dibantu menghubungi doitpay untuk mendapatkan detail. Dimana XX adalah service code untuk setiap API Debit Card |