Virtual Account Direct Inquiry
Virtual Account Direct Inquiry adalah proses ketika bank melakukan permintaan informasi (inquiry) ke sistem merchant atau payment gateway secara real-time.
Hal ini terjadi saat nasabah bank memasukkan nomor Virtual Account di channel bank (ATM, mobile banking, internet banking). Sebelum menampilkan detail pembayaran, sistem bank akan melakukan Direct Inquiry ke host merchant/payment gateway untuk:
- Mengecek apakah Virtual Account tersebut valid dan masih aktif.
- Mengambil detail informasi seperti nama pemilik, deskripsi, dan nominal pembayaran (jika fixed amount).
- Mendapatkan status apakah VA tersebut bisa digunakan untuk transaksi.
Flow Diagram Virtual Account Direct Inquiry
Customer No Rule
| Bank Channel | Max Length Customer No |
|---|---|
| BNI_VA | 14 |
| CIMB_VA | 6 |
| PERMATA_VA | 6 |
| BRI_VA | 7 |
| MANDIRI_VA | 5 |
Signature
Asymmetric
Formula:
stringToSign = ClientKey + “|” + Timestamp
hash = SHA256withRSA(stringToSign, privateKey)
signature = Base64(hash)
Penjelasan formula stringToSign.
ClientKeyadalah client ID untuk doitpay yang digenerate-kan oleh merchant.Timestampmenggunakan ISO-8601.privateKeyadalah kunci RSA yang Anda buat. Untuk mekanisme direct VA inquiry, doitpay akan memberikan public key untuk digunakan merchant saat process validasi signature.
Hash stringToSign menggunakan SHA256withRSA cryptographic dan secret key. Kemudian, encode dengan Base 64.
Masukkan nilainya ke X-SIGNATURE.
Symmetric
Formula:
stringToSign = HttpMethod + “:” + Endpoint + “:” + AccessToken + “:” + LowerCase(HexEncode(SHA-256(Minify(RequestBody)))) + “:” + Timestamp
hash = HMAC_SHA512(stringToSign, secretKey)
signature = Base64(hash)
Penjelasan formula stringToSign.
-
HttpMethodadalah string nama metode yang sedang digunakan. Bisa sajaPOST,PUT, atauDELETE. -
Endpointadalah relative URL atau full path URL yang mana tanpa host atau domainnya. -
AccessTokenadalah nilai token yang didapatkan dari API Get Token. -
RequestBodyadalah payload yang ingin Anda kirim. -
Timestampmenggunakan ISO-8601. -
secretKeyakan digenerate-kan oleh merchant saat proses integrasi.
Hash stringToSign menggunakan HMAC_SHA512 cryptographic dan secret key. Kemudian, encode dengan Base 64.
Masukkan nilainya ke X-SIGNATURE.
Get Token API
- Method:
POST - Type:
application/json - Development:
https://yourdomain.com/v1.0/access-token/b2b - Service Code:
73
Header :
| 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 | ✓ | Pemeriksaan Non-Repudiasi & Integritas X-Signature dengan algoritma asimetris. | |
| X-CLIENT-KEY | string | ✓ | Client ID untuk doitpay yang digenerate-kan oleh merchant. | DXXXX |
body:
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| grantType | string | ✓ | The value is client_credentials | "client_credentials" |
response:
| Code | Message | Keterangan |
|---|---|---|
| 2007300 | Successful | Berhasil di proses dan mendapatkan accessToken. |
| 4007301 | Invalid Field Format {grantType} | Nilai value yang tidak tepat untuk parameter grantType. |
| 4007302 | Invalid Mandatori Field {grantType} | Parameter grantType tidak ada. |
| 4007302 | Invalid Client Key or Timestamp or Signature | Terjadi kesalahan di antara Client Key, Timestamp atau Signature. |
| 4017300 | Invalid Client Key | Kekeliruan pada Client Key. |
| 4017300 | Invalid Signature | Kekeliruan pada Signature. |
Inquiry Virtual Account
- Method:
POST - Type:
application/json - URL:
https://yourdomain.com/v1.0/transfer-va/inquiry - Service Code:
24
Header
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2025-09-03T16:23:58+07:00 |
| X-SIGNATURE | string | ✓ | Lihat Symmetric Signature Inquiry Request | dZuUi/OjZ21QrjRStx655lYdWtypdTK... |
| X-PARTNER-ID | string | ✓ | Partner ID yang digenerate-kan merchant untuk doitpay | 12345 |
| X-EXTERNAL-ID | string(64) | ✓ | Request ID yang unik. | 1756891439401023433 |
| CHANNEL-ID | string | ✓ | Channel transaksi | 12345 |
| AUTHORIZATION | string | ✓ | Bearer token | Bearer <token> |
Body
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| partnerServiceId | string | ✓ | Prefix dari DoitPay | 1899103003 |
| customerNo | string | ✓ | Nomor untuk VA | 1121123456722 |
| virtualAccountNo | string | ✓ | Nomor Virtual Account untuk dibayar | 18991121123456722 |
| inquiryRequestId | string | ✓ | ID Transaksi dari sisi merchant, unik setiap VA Number | 1756891438256771593 |
| trxDateInit | string | ✗ | Waktu transaksi dalam format ISO-8601 | 2025-09-03T16:23:58+07:00 |
| channelCode | string | ✗ | Kode channel | 6011 |
| additionalInfo | object | ✓ | Informasi tambahan | lihat tabel di bawah |
additionalInfo
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| channel | string | ✓ | Channel transaksi VA | VIRTUAL_ACCOUNT_BANK_CIMB |
Response
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| responseCode | string | ✓ | Kode response, lihat bagian daftar Response Code di bawah | 2003600 |
| responseMessage | string | ✓ | Penjelasan terhadap response code yang diterima | Inquiry successful |
| virtualAccountData | object | ✓ | Lihat tabel di bawah ini |
virtualAccountData
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| inquiryStatus | string | ✓ | Status dari VA number | 00 |
| • 00: Success | ||||
| • 01: Initiated | ||||
| • 02: Paying | ||||
| • 03: Pending | ||||
| • 04: Refunded | ||||
| • 05: Canceled | ||||
| • 06: Failed | ||||
| • 07: Not found | ||||
| inquiryReason | object | ✓ | Alasan status inquiry | lihat tabel bawah |
| partnerServiceId | string | ✓ | Prefix dari DoitPay | 1899 |
| customerNo | string | ✓ | Nomor untuk VA | 1121123456722 |
| virtualAccountNo | string | ✓ | Nomor Virtual Account untuk dibayar | 18991121123456722 |
| virtualAccountName | string | ✓ | Nama pemilik akun | John Doe |
| virtualAccountEmail | string | ✓ | Email pemilik akun | johndoe@example.com |
| virtualAccountPhone | string | ✓ | Nomor telepon pemilik akun | 6281234567890 |
| inquiryRequestId | string | ✓ | ID Inquiry | DIPCVA011T25... |
| totalAmount | object | ✓ | Nominal pembayaran VA | lihat tabel bawah |
| paymentFlagStatus | string | ✓ | Status pembayaran | 01 |
| virtualAccountTrxType | string | ✓ | Jenis transaksi (C/D) | C |
| expiredDate | string | ✓ | Tanggal kedaluwarsa | 2025-08-20T... |
inquiryReason
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| english | string | ✓ | Pesan dalam bahasa Inggris | Valid account |
| indonesia | string | ✓ | Pesan dalam bahasa Indonesia | Rekening valid |
totalAmount
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| value | string | ✓ | Nominal pembayaran dengan 2 desimal | 10000.00 |
| currency | string | ✓ | Kode mata uang, hanya IDR | IDR |
Example Request
{
"partnerServiceId": "1899103003",
"customerNo": "1121123456722",
"virtualAccountNo": " 18991121123456722",
"inquiryRequestId": "1756891438256771593",
"trxDateInit": "2025-09-03T16:23:58+07:00",
"channelCode": "6011",
"additionalInfo": {
"channel": "VIRTUAL_ACCOUNT_BANK_CIMB"
}
}
Example Response
{
"responseCode": "2003600",
"responseMessage": "Inquiry successful",
"virtualAccountData": {
"inquiryStatus": "00",
"inquiryReason": {
"english": "Valid account",
"indonesia": "Rekening valid"
},
"partnerServiceId": " 1899",
"customerNo": "1121123456722",
"virtualAccountNo": " 18991121123456722",
"virtualAccountName": "John Doe",
"virtualAccountEmail": "johndoe@example.com",
"virtualAccountPhone": "081234567890",
"inquiryRequestId": "DIPCVA011T250819131202268TcCS1PXfuBb",
"totalAmount": {
"value": "10000.00",
"currency": "IDR"
},
"paymentFlagStatus": "01",
"virtualAccountTrxType": "C",
"expiredDate": "2025-08-20T23:59:59+07:00"
}
}
Payment VA
- Method:
POST - Type:
application/json - URL:
https://yourdomain.com/v1.0/transfer-va/payment - Service Code:
25
Header
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2025-09-03T16:23:58+07:00 |
| X-SIGNATURE | string | ✓ | Lihat Symmetric Signature Inquiry Request | dZuUi/OjZ21QrjRStx655lYdWtypdTK... |
| X-PARTNER-ID | string | ✓ | Partner ID yang digenerate-kan merchant untuk doitpay | 12345 |
| X-EXTERNAL-ID | string(64) | ✓ | Request ID yang unik. | 1756891439401023433 |
| CHANNEL-ID | string | ✓ | Channel transaksi | 12345 |
| AUTHORIZATION | string | ✓ | Bearer token | Bearer <token> |
Body
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| partnerServiceId | string | ✓ | Prefix dari DoitPay | 1899103003 |
| customerNo | string | ✓ | Nomor untuk VA | 1121123456722 |
| virtualAccountNo | string | ✓ | Nomor Virtual Account untuk dibayar | 18991121123456722 |
| virtualAccountName | string | ✓ | Nama pemilik akun | John Doe |
| virtualAccountEmail | string | ✗ | Email pemilik akun | johndoe@example.com |
| virtualAccountPhone | string | ✗ | Nomor telepon pemilik akun | 081234567890 |
| trxId | string | ✓ | ID transaksi unik (dari bank / upstream) | abc123 |
| paymentRequestId | string | ✓ | ID unik setiap pembayaran | 1755583922855... |
| channelCode | string | ✗ | Kode channel | 6011 |
| hashedSourceAccountNo | string | ✗ | Nomor rekening sumber dalam bentuk hash | |
| sourceBankCode | string | ✗ | Kode bank sumber | |
| paidAmount | object | ✓ | Nominal yang dibayar | lihat tabel bawah |
| cumulativePaymentAmount | number | ✗ | Jumlah kumulatif pembayaran | null |
| paidBills | string | ✗ | Informasi tagihan yang dibayar | |
| totalAmount | object | ✓ | Total dari inquiry | lihat tabel bawah |
| trxDateTime | string | ✓ | Waktu transaksi dalam format ISO-8601 | 2025-09-04T09... |
| referenceNo | string | ✗ | Nomor referensi transaksi dari bank | 175558392285557 |
| journalNum | string | ✗ | Nomor jurnal | |
| paymentType | string | ✗ | Jenis pembayaran | |
| flagAdvise | string | ✗ | Flag notifikasi advise | N |
| subCompany | string | ✗ | Sub company | |
| billDetails | object | ✗ | Detail tagihan (opsional) | null |
| freeTexts | object | ✗ | Catatan tambahan | null |
| additionalInfo | object | ✓ | Informasi tambahan | lihat tabel bawah |
totalAmount
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| value | string | ✓ | Nominal pembayaran dengan 2 desimal | 10000.00 |
| currency | string | ✓ | Kode mata uang, hanya IDR | IDR |
additionalInfo
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| channel | string | ✗ | Channel transaksi VA | VIRTUAL_ACCOUNT_BANK_CIMB |
Response
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| responseCode | string | ✓ | Kode response, lihat bagian daftar Response Code di bawah | 2003600 |
| responseMessage | string | ✓ | Penjelasan terhadap response code yang diterima | Successful |
| virtualAccountData | object | ✓ | Lihat tabel di bawah ini |
virtualAccountData
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| partnerServiceId | string | ✓ | Prefix dari DoitPay | 12345 |
| customerNo | string | ✓ | Nomor untuk VA | 1111 |
| virtualAccountNo | string | ✓ | Nomor Virtual Account untuk dibayar | 123456567 |
| paymentRequestId | string | ✓ | ID unik setiap pembayaran | 123 |
| paidAmount | object | ✓ | Nominal pembayaran | lihat bawah |
| virtualAccountName | string | ✗ | Nama ditampilkan di sisi bank | Doitpay |
Example Request
{
"partnerServiceId": " 1899103003",
"customerNo": "1121123456722",
"virtualAccountNo": "18991121123456722",
"virtualAccountName": "John Doe",
"virtualAccountEmail": "johndoe@example.com",
"virtualAccountPhone": "081234567890",
"trxId": "",
"paymentRequestId": "1755583922855573699",
"channelCode": 6011,
"hashedSourceAccountNo": "",
"sourceBankCode": "",
"paidAmount": {
"value": "10000.00",
"currency": "IDR"
},
"cumulativePaymentAmount": null,
"paidBills": "",
"totalAmount": {
"value": "10000.00",
"currency": "IDR"
},
"trxDateTime": "2025-09-04T09:42:00+07:00",
"referenceNo": "175558392285557",
"journalNum": "",
"paymentType": "",
"flagAdvise": "N",
"subCompany": "",
"billDetails": null,
"freeTexts": null,
"additionalInfo": {
"channel": "VIRTUAL_ACCOUNT_BANK_CIMB"
}
}
Example Response
{
"responseCode": "2003600",
"responseMessage": "Successful",
"virtualAccountData": {
"partnerServiceId": "12345",
"customerNo": "1111",
"virtualAccountNo": "123456567",
"paymentRequestId": "123",
"paidAmount": {
"value": "10000.00",
"currency": "IDR"
},
"virtualAccountName": "Doitpay"
}
}