Create VA
Create VA Availability
Currently Create VA API only available for these Acquirer's Virtual Accounts:
BNC
BNI
BTN
Process Flow
There are 2 main flow in SNAP Format Virtual Account:
- VA API from acquirer. Merchant could hit create VA API (service code 27) to create their virtual account number by acquirer. The number created then will be inquired by acquirer, merchant can get the payment notification. Currently the VA that use this API service are BNC and BNI
Virtual Account - Register Flow Process

- Inquiry and Payment Merchant can create their own virtual account number or get help from DOKU to create the number, and then DOKU will process the inquiry and payment. These virtual account within DOKU that use the inquiry and payment flow are: BNI, BTN, Danamon, Mandiri, Maybank, Permata
Virtual Account - Inquiry and Payment Flow Process

Integration Details
1. BNC VA
Here is the endpoint of BNC Virtual Account :
API Request
Type | Value |
---|---|
Service Code | 27 |
HTTP Method | POST |
Path | /bi-snap-va/bnc/v1/transfe-va/create-va |
Here is the sample of request header to generate payment code:
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-SIGNATURE: ieNOENDdN4MnectGytx5UvmOfASZ2oGWMCJ8gVqkw3tB98ofgY9cbxSeY4IYoYeoKs+0QP4h8BTBhemlfeXp1w==
X-PARTNER-ID: 82150823919040624621823174737537
X-EXTERNAL-ID: 41807553358950093184162180797837
CHANNEL-ID: VA008
Request Header Explanation
Parameter | Data Type | Type | Description |
---|---|---|---|
X-TIMESTAMP | string | Mandatory | Client's current local time with format : YYYY-MM-DDTHH:mm:ssZD |
X-SIGNATURE | string | Mandatory | Represents signature of a request. Identify Signature Type used Value: 1. Symmetric Signature with Get Token (Default) HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +β:β+ EndpointUrl +":"+ AccessToken +":β+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":β + TimeStamp Notes : 1. The full URL endpoint includes all parameters in the associated URL 2. For the minify(Request Body) parameter, if there is no Request Body then an empty string is used. |
X-PARTNER-ID | string | Mandatory | Client Id for merchant that generated by DOKU |
X-EXTERNAL-ID | string | Mandatory | Numeric String. Reference number that should be unique in the same day (Request Id) |
CHANNEL-ID | string(5) | Mandatory | VA008 |
Here is the sample of request body:
{
"partnerServiceId":"99341537",
"customerNo":"00000000000000000000",
"virtualAccountNo":"0000000000000000000000000000",
"virtualAccountName":"Jessica Tessalonika",
"virtualAccountEmail":"jessica@email.com",
"virtualAccountPhone":"6281828384858",
"trxId":"INV-20220916-0002",
"totalAmount":{
"value":"11000.00",
"currency":"IDR"
},
"billDetails":[
{
"billCode":"01",
"billNo":"123456789012345601",
"billName":"Bill A for Jan",
"billShortName":"Bill A",
"billDescription":{
"english":"Maintenance",
"indonesia":"Pemeliharaan"
},
"billSubCompany":"00001",
"billAmount":{
"value":"10000.00",
"currency":"IDR"
},
"additionalInfo":{
}
}
],
"freeTexts":[
{
"english":"Free text",
"indonesia":"Tulisan bebas"
}
],
"virtualAccountTrxType":"1",
"feeAmount":{
"value":"1000.00",
"currency":"IDR"
},
"expiredDate":"2023-01-01T10:55:00+07:00"
}
API Response
After hitting the above API request, DOKU will give the response.
Here is the sample of response header :
X-TIMESTAMP: 2020-12-21T14:36:19+07:00
Response Header Explanation
Parameter | Data Type | Type | Description |
---|---|---|---|
X-Timestamp | string | Mandatory | Client's current local time with format YYYY-MM-DDTHH:mm:ssZ |
Type | Value |
---|---|
HTTP Status | 200 |
Result | SUCCESS |
Here is the sample of response body:
{
"responseCode":"2002700",
"responseMessage":"Successful",
"virtualAccountData":{
"partnerServiceId":"90341537",
"customerNo":"0000000000112",
"virtualAccountNo":"903415370000000000112",
"virtualAccountName":"Jessica Tessalonika",
"virtualAccountEmail":"jessica@email.com",
"virtualAccountPhone":"6281828384858",
"trxId":"INV-20220916-0002",
"totalAmount":{
"value":"11000.00",
"currency":"IDR"
},
"billDetails":[
{
"billCode":"01",
"billNo":"123456789012345601",
"billName":"Bill A for Jan",
"billShortName":"Bill A",
"billDescription":{
"english":"Maintenance",
"indonesia":"Pemeliharaan"
},
"billSubCompany":"00001",
"billAmount":{
"value":"10000.00",
"currency":"IDR"
},
"additionalInfo":{
}
}
],
"freeTexts":[
{
"english":"Free text",
"indonesia":"Tulisan bebas"
}
],
"virtualAccountTrxType":"1",
"feeAmount":{
"value":"1000.00",
"currency":"IDR"
},
"expiredDate":"2023-01-01T10:55:00+07:00",
"additionalInfo":{
},
"howToPayInfo":{
"howToPayPage":"https://sandbox.doku.com/bca-virtual-acccount/v1/how-to-pay-page/0008889912345678901234567890",
"howToPayApi":"https://api-sandbox.doku.com/bca-virtual-acccount/v1/how-to-pay-api/0008889912345678901234567890"
}
}
}
Another response, for failed scenario
Type | Value |
---|---|
HTTP Status | 404 |
Result | FAILED |
Here is response sample for failed scenario
{
"responseCode":"4042716",
"responseMessage":"Partner Not Found",
"virtualAccountData":{
"partnerServiceId":"90341537",
"customerNo":"0000000000112",
"virtualAccountNo":"903415370000000000112",
"virtualAccountName":"Jokul Doe 003",
"virtualAccountEmail":"jokul@email.com",
"virtualAccountPhone":"6281828384858",
"trxId":"INV-20220916-0002",
"totalAmount":{
"value":"11000.00",
"currency":"IDR"
},
"billDetails":[
{
"billCode":"01",
"billNo":"123456789012345601",
"billName":"Bill A for Jan",
"billShortName":"Bill A",
"billDescription":{
"english":"Maintenance",
"indonesia":"Pemeliharaan"
},
"billSubCompany":"00001",
"billAmount":{
"value":"10000.00",
"currency":"IDR"
},
"additionalInfo":{
}
}
],
"freeTexts":[
{
"english":"Free text",
"indonesia":"Tulisan bebas"
}
],
"virtualAccountTrxType":"1",
"feeAmount":{
"value":"1000.00",
"currency":"IDR"
},
"expiredDate":"2023-01-01T10:55:00+07:00"
"additionalInfo":{
"settlement":[
{
"bank_account_settlement_id":"SBA-0001-123123123",
"value":10,
"type":"PERCENTAGE"
},{
"bank_account_settlement_id":"SBS-0002-321321321",
"value":90,
"type":"PERCENTAGE"
}
]
}
}
}
Response Body Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
responseCode | string(7) | Mandatory | Response Code : HTTP status code + service code + case code |
responseMessage | string(150) | Mandatory | Response Description |
virtualAccountData.partnerServiceId | string(8) | Mandatory | similar to company code, 8 digit left padding space |
virtualAccountData.customerNo | String (20) | Optional | Unique number (up to 20 digits). partnerServiceId + customerNo = virtualAccountNo |
virtualAccountData.virtualAccountNo | String (28) | Optional | partnerServiceId (8 digit left padding 0) + customerNo up to 20 digits). |
virtualAccountData.virtualAccountName | string(255) | Mandatory | Customer Name |
virtualAccountData.virtualAccountEmail | string(255) | Optional | Customer Email |
virtualAccountData.virtualAccountPhone | string(30) | Optional | Customer Phone, Format: 62xxxxxxxxx xxxx |
virtualAccountData.trxId | string(64) | Mandatory | Transaction ID in Partner system |
virtualAccountData.totalAmount.value | string(8) | Optional | Transaction Amount. Total Amount with 2 decimal, format ISO 4217 |
virtualAccountData.totalAmount.Currency | string(3) | Optional | Currency. Example: IDR |
virtualAccountData.howToPayInfo.howToPayPage | ANS(256) | Optional | Step by step that will be used by customer for how to doing a payment |
virtualAccountData.howToPayInfo.howToPayApi | ANS(256) | Optional | Step by step that will be used by customer for how to doing a payment |
billDetails.billCode | string(2) | Optional | Bill code for Customer choose. Example : 01 |
billDetails.billNo | string(18) | Optional | Bill number from Partner |
billDetails.billName | string(20) | Optional | Bill Name |
billDetails.billShortName | string(10) | Optional | Bill Name to shown to |
billDetails.billDescription.english | string(18) | Optional | Bill Description in English |
billDetails.billDescription.indonesia | string(18) | Optional | Bill Description in Bahasa Indonesia |
billDetails.billSubCompany | string(5) | Optional | Partnerβs product code |
billDetails.billAmount.value | String (16.2)(ISO 4217) | Optional | Transaction Amount. Nominal inputted by Customer with 2 decimal |
billDetails.billAmount.currency | string(3) | Optional | Currency |
billDetails.additionalInfo | Object(Unlimited) | Optional | Additional Information for custom use for each bill |
freeTexts.english | string(32) | Optional | This parameter will be shown in Channel |
freeTexts.indonesia | string(32) | Optional | This parameter will be shown in Channel |
virtualAccountTrxType | string(1) | Optional | Type of Virtual Account : C : closed paymentO : open payment |
feeAmount.value | String (16.2) | Optional | Format ISO 4217 |
feeAmount.currency | string(3) | Optional | Example : IDR |
expiredDate | string(25) | Optional | Expiration date for Virtual Account. ISO-8601. Example: 2020-12- 31T23:59:59-07:00 |
additionalInfo | Object | Optional | Additional Information for custom use |
2. BNI VA
Here is the endpoint of BNI Virtual Account :
API Request
Type | Value |
---|---|
Service Code | 27 |
HTTP Method | POST |
Path | /bi-snap-va/bni/v1/transfer-va/create-va |
Here is the sample of request header to generate payment code:
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-SIGNATURE: ieNOENDdN4MnectGytx5UvmOfASZ2oGWMCJ8gVqkw3tB98ofgY9cbxSeY4IYoYeoKs+0QP4h8BTBhemlfeXp1w==
X-PARTNER-ID: 82150823919040624621823174737537
X-EXTERNAL-ID: 41807553358950093184162180797837
CHANNEL-ID: VA004
Request Header Explanation
Parameter | Data Type | Type | Description |
---|---|---|---|
X-TIMESTAMP | string | Mandatory | Client's current local time with format : YYYY-MM-DDTHH:mm:ssZD |
X-SIGNATURE | string | Mandatory | Represents signature of a request. Identify Signature Type used Value: 1. Symmetric Signature with Get Token (Default) HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +β:β+ EndpointUrl +":"+ AccessToken +":β+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":β + TimeStamp Notes : 1. The full URL endpoint includes all parameters in the associated URL 2. For the minify(Request Body) parameter, if there is no Request Body then an empty string is used. |
X-PARTNER-ID | string | Mandatory | Client Id for merchant that generated by DOKU |
X-EXTERNAL-ID | string | Mandatory | Numeric String. Reference number that should be unique in the same day (Request Id) |
CHANNEL-ID | string(5) | Mandatory | VA004 |
Here is the sample of request body:
{
"partnerServiceId": " 8412",
"customerNo": "000000000001",
"virtualAccountNo": " 8412000000000001",
"virtualAccountName": "Jessica Tessalonika",
"virtualAccountEmail": "jessica@email.com",
"virtualAccountPhone": "6281828384700",
"trxId": "QA-001",
"totalAmount": {
"value" : "100000.00",
"currency": "IDR"
},
"additionalInfo": {
},
"virtualAccountTrxType": "c",
"expiredDate": "2022-01-01T23:59:59-07:00"
}
Request Body Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
partnerServiceId | string(8) | Mandatory | This parameter is similar to company code/BIN, 8 digit left padding space. |
customerNo | string(20) | Mandatory | Unique number (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo |
virtualAccountNo | string(28) | Mandatory | partnerServiceId (8 digit left padding 0) + customerNo (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo |
virtualAccountName | string(255) | Mandatory | Customer Name |
virtualAccountEmail | string(255) | Optional | Customer Email |
virtualAccountPhone | string(30) | Optional | Customer Phone, Format: 62xxxxxxxxx xxxx |
trxId | string(64) | Mandatory | Transaction ID in Partner system |
totalAmount.value | string(8) | Optional | Transaction Amount. Total Amount with 2 decimal, format ISO 4217 |
totalAmount.Currency | string(3) | Optional | Currency. Example: IDR |
virtualAccountTrxType | string(1) | Optional | Type of Virtual Account : C : closed paymentO : open payment |
expiredDate | string(25) | Optional | Expiration date for Virtual Account. ISO-8601. Example: 2020-12- 31T23:59:59-07:00 |
additionalInfo | Object | Optional | Additional Information for custom use |
API Response
After hitting the above API request, DOKU will give the response.
Here is the sample of response header :
X-TIMESTAMP: 2020-12-21T14:36:19+07:00
Response Header Explanation
Parameter | Data Type | Type | Description |
---|---|---|---|
X-Timestamp | string | Mandatory | Client's current local time with format YYYY-MM-DDTHH:mm:ssZ |
Type | Value |
---|---|
HTTP Status | 200 |
Result | SUCCESS |
Here is the sample of response body for success scenario :
{
"responseCode":"2002700",
"responseMessage":"Successful",
"virtualAccountData":{
"partnerServiceId":" 8412",
"customerNo":"000000000001",
"virtualAccountNo":" 8412000000000001",
"virtualAccountName":"Jessica Tessalonika",
"virtualAccountEmail":"jessica@email.com",
"virtualAccountPhone":"6281828384858",
"trxId":"INV-20220916-0002",
"totalAmount":{
"value":"11000.00",
"currency":"IDR"
},
"virtualAccountTrxType":"1",
"expiredDate":"2023-01-01T10:55:00+07:00",
"additionalInfo":{
},
"howToPayInfo":{
"howToPayPage":"https://sandbox.doku.com/bni-virtual-acccount/v1/how-to-pay-page/0008889912345678901234567890",
"howToPayApi":"https://api-sandbox.doku.com/bni-virtual-acccount/v1/how-to-pay-api/0008889912345678901234567890"
}
}
}
Type | Value |
---|---|
HTTP Status | 404 |
Result | FAILED |
Here is the sample of response body for failed scenario :
{
"responseCode":"4042716",
"responseMessage":"Partner Not Found",
"virtualAccountData":{
"partnerServiceId":" 8412",
"customerNo":"000000000001",
"virtualAccountNo":" 8412000000000001",
"virtualAccountName":"Jessica Tessalonika",
"virtualAccountEmail":"jessica@email.com",
"virtualAccountPhone":"6281828384858",
"trxId":"INV-20220916-0002",
"totalAmount":{
"value":"11000.00",
"currency":"IDR"
},
"virtualAccountTrxType":"1",
"expiredDate":"2023-01-01T10:55:00+07:00"
"additionalInfo":{
"settlement":[
{
"bank_account_settlement_id":"SBA-0001-123123123",
"value":10,
"type":"PERCENTAGE"
},{
"bank_account_settlement_id":"SBS-0002-321321321",
"value":90,
"type":"PERCENTAGE"
}
]
}
}
}
Response Body Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
responseCode | string(7) | Mandatory | Response Code : HTTP status code + service code + case code |
responseMessage | string(150) | Mandatory | Response Description |
virtualAccountData.partnerServiceId | string(8) | Mandatory | similar to company code, 8 digit left padding space |
virtualAccountData.customerNo | String (20) | Optional | Unique number (up to 20 digits). partnerServiceId + customerNo = virtualAccountNo |
virtualAccountData.virtualAccountNo | String (28) | Optional | partnerServiceId (8 digit left padding 0) + customerNo up to 20 digits). |
virtualAccountData.virtualAccountName | string(255) | Mandatory | Customer Name |
virtualAccountData.virtualAccountEmail | string(255) | Optional | Customer Email |
virtualAccountData.virtualAccountPhone | string(30) | Optional | Customer Phone, Format: 62xxxxxxxxx xxxx |
virtualAccountData.trxId | string(64) | Mandatory | Transaction ID in Partner system |
virtualAccountData.totalAmount.value | string(8) | Optional | Transaction Amount. Total Amount with 2 decimal, format ISO 4217 |
virtualAccountData.totalAmount.Currency | string(3) | Optional | Currency. Example: IDR |
virtualAccountData.howToPayInfo.howToPayPage | ANS(256) | Optional | Step by step that will be used by customer for how to doing a payment |
virtualAccountData.howToPayInfo.howToPayApi | ANS(256) | Optional | Step by step that will be used by customer for how to doing a payment |
virtualAccountTrxType | string(1) | Optional | Type of Virtual Account : C : closed paymentO : open payment |
expiredDate | string(25) | Optional | Expiration date for Virtual Account. ISO-8601. Example: 2020-12- 31T23:59:59-07:00 |
additionalInfo | Object | Optional | Additional Information for custom use |
3. BTN VA
info
For BTN, virtualAccountTrxType is defined based on the BIN/ partnerServiceId.
Each partnerServiceId will be defined whether it will be number for closed or open payment.
Here is the endpoint of BTN Virtual Account :
API Request
BTN
Type | Value |
---|---|
Service Code | 27 |
HTTP Method | POST |
Path | /bi-snap-va/btn/v1/transfer-va/create-va |
Here is the sample of request header to generate payment code:
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-SIGNATURE: ieNOENDdN4MnectGytx5UvmOfASZ2oGWMCJ8gVqkw3tB98ofgY9cbxSeY4IYoYeoKs+0QP4h8BTBhemlfeXp1w==
X-PARTNER-ID: 82150823919040624621823174737537
X-EXTERNAL-ID: 41807553358950093184162180797837
Authorization: bearer DUMMY
Content type: application/ json
CHANNEL-ID: VA009
Request Header Explanation
Parameter | Data Type | Type | Description |
---|---|---|---|
X-TIMESTAMP | string | Mandatory | Client's current local time with format : YYYY-MM-DDTHH:mm:ssZD |
X-SIGNATURE | string | Mandatory | Represents signature of a request. Identify Signature Type used Value: 1. Symmetric Signature with Get Token (Default) HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +β:β+ EndpointUrl +":"+ AccessToken +":β+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":β + TimeStamp Notes : 1. The full URL endpoint includes all parameters in the associated URL 2. For the minify(Request Body) parameter, if there is no Request Body then an empty string is used. |
X-PARTNER-ID | string | Mandatory | Client Id for merchant that generated by DOKU |
X-EXTERNAL-ID | string | Mandatory | Numeric String. Reference number that should be unique in the same day (Request Id) |
Authorization | string | Mandatory | Represents access_token of a request; String starts with keyword βBearer β followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY) |
Content type | string | Mandatory | String represents indicate the media type of the resource (e.g. application/json) |
CHANNEL-ID | string(5) | Mandatory | VA009 |
Here is the sample of request body:
- DGPC - Fix Bill / Closed Payment
- DGPC - No Bill / Open Payment
{
"partnerServiceId":"95962001",
"customerNo":"00000000001",
"virtualAccountNo":"95962001000000001",
"virtualAccountName":"Jessica Tessalonika",
"virtualAccountEmail":"jessica@email.com",
"virtualAccountPhone":"6281828384858",
"trxId":"INV-20220916-0002",
"totalAmount":{
"value":"11000.00",
"currency":"IDR"
},
"billDetails":[
{
"billCode":"01",
"billNo":"123456789012345601",
"billName":"Bill A for Jan",
"billShortName":"Bill A",
"billDescription":{
"english":"Maintenance",
"indonesia":"Pemeliharaan"
},
"billSubCompany":"00001",
"billAmount":{
"value":"10000.00",
"currency":"IDR"
},
"additionalInfo":{
}
}
],
"freeTexts":[
{
"english":"Free text",
"indonesia":"Tulisan bebas"
}
],
"virtualAccountTrxType":"1",
"feeAmount":{
"value":"1000.00",
"currency":"IDR"
},
"expiredDate":"2023-01-01T10:55:00+07:00"
}
{
"partnerServiceId":"95962002",
"customerNo":"00000000001",
"virtualAccountNo":"959620020000000001",
"virtualAccountName":"Jessica Tessalonika",
"virtualAccountEmail":"jessica@email.com",
"virtualAccountPhone":"6281828384858",
"trxId":"INV-20220916-0002",
"totalAmount":{
"value":"0.00",
"currency":"IDR"
},
"billDetails":[
{
"billCode":"01",
"billNo":"123456789012345601",
"billName":"Bill A for Jan",
"billShortName":"Bill A",
"billDescription":{
"english":"Maintenance",
"indonesia":"Pemeliharaan"
},
"billSubCompany":"00001",
"billAmount":{
"value":"10000.00",
"currency":"IDR"
},
"additionalInfo":{
}
}
],
"freeTexts":[
{
"english":"Free text",
"indonesia":"Tulisan bebas"
}
],
"virtualAccountTrxType":"1",
"feeAmount":{
"value":"1000.00",
"currency":"IDR"
},
"expiredDate":"2023-01-01T10:55:00+07:00"
}
Request Body Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
partnerServiceId | string(8) | Mandatory | This parameter is similar to company code/BIN, 8 digit left padding space. |
customerNo | string(20) | Mandatory | Unique number (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo |
virtualAccountNo | string(28) | Mandatory | partnerServiceId (8 digit left padding 0) + customerNo (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo |
virtualAccountName | string(255) | Mandatory | Customer Name |
virtualAccountEmail | string(255) | Optional | Customer Email |
virtualAccountPhone | string(30) | Optional | Customer Phone, Format: 62xxxxxxxxx xxxx |
trxId | string(64) | Mandatory | Transaction ID in Partner system |
totalAmount.value | string(8) | Optional | Transaction Amount. Total Amount with 2 decimal, format ISO 4217 |
totalAmount.Currency | string(3) | Optional | Currency. Example: IDR |
billDetails.billCode | string(2) | Optional | Bill code for Customer choose. Example : 01 |
billDetails.billNo | string(18) | Optional | Bill number from Partner |
billDetails.billName | string(20) | Optional | Bill Name |
billDetails.billShortName | string(10) | Optional | Bill Name to shown to |
billDetails.billDescription.english | string(18) | Optional | Bill Description in English |
billDetails.billDescription.indonesia | string(18) | Optional | Bill Description in Bahasa Indonesia |
billDetails.billSubCompany | string(5) | Optional | Partnerβs product code |
billDetails.billAmount.value | String (16.2)(ISO 4217) | Optional | Transaction Amount. Nominal inputted by Customer with 2 decimal |
billDetails.billAmount.currency | string(3) | Optional | Currency |
billDetails.additionalInfo | Object(Unlimited) | Optional | Additional Information for custom use for each bill |
freeTexts.english | string(32) | Optional | This parameter will be shown in Channel |
freeTexts.indonesia | string(32) | Optional | This parameter will be shown in Channel |
virtualAccountTrxType | string(1) | Conditional | Type of Virtual Account : 1 : closed payment2 : open payment. Default : Closed Payment, conditional if using Open Payment |
feeAmount.value | String (16.2) | Optional | Format ISO 4217 |
feeAmount.currency | string(3) | Optional | Example : IDR |
expiredDate | string(25) | Optional | Expiration date for Virtual Account. ISO-8601. Example: 2020-12- 31T23:59:59-07:00 |
additionalInfo | Object | Optional | Additional Information for custom use |
API Response
After hitting the above API request, DOKU will give the response.
Here is the sample of response header :
X-TIMESTAMP: 2020-12-21T14:36:19+07:00
Response Header Explanation
Parameter | Data Type | Type | Description |
---|---|---|---|
X-Timestamp | string | Mandatory | Client's current local time with format YYYY-MM-DDTHH:mm:ssZ |
Type | Value |
---|---|
HTTP Status | 200 |
Result | SUCCESS |
Here is the sample of response body for success scenario :
{
"responseCode":"2002700",
"responseMessage":"Successful",
"virtualAccountData":{
"partnerServiceId":"95962001",
"customerNo":"00000000001",
"virtualAccountNo":"9596200100000000001",
"virtualAccountName":"Jessica Tessalonka",
"virtualAccountEmail":"jessica@email.com",
"virtualAccountPhone":"6281828384858",
"trxId":"INV-20220916-0002",
"totalAmount":{
"value":"11000.00",
"currency":"IDR"
},
"billDetails":[
{
"billCode":"01",
"billNo":"123456789012345601",
"billName":"Bill A for Jan",
"billShortName":"Bill A",
"billDescription":{
"english":"Maintenance",
"indonesia":"Pemeliharaan"
},
"billSubCompany":"00001",
"billAmount":{
"value":"10000.00",
"currency":"IDR"
},
"additionalInfo":{
}
}
],
"freeTexts":[
{
"english":"Free text",
"indonesia":"Tulisan bebas"
}
],
"virtualAccountTrxType":"1",
"feeAmount":{
"value":"1000.00",
"currency":"IDR"
},
"expiredDate":"2023-01-01T10:55:00+07:00",
"additionalInfo":{
},
"howToPayInfo":{
"howToPayPage":"https://sandbox.doku.com/btn-virtual-acccount/v1/how-to-pay-page/0008889912345678901234567890",
"howToPayApi":"https://api-sandbox.doku.com/btn-virtual-acccount/v1/how-to-pay-api/0008889912345678901234567890"
}
}
}
{
"responseCode": "2002700",
"responseMessage": "Successful",
"virtualAccountData": {
"partnerServiceId": "95962002",
"customerNo": "00000000001",
"virtualAccountNo": "9596200200000000001",
"virtualAccountName": "Jokul Doe 003",
"virtualAccountEmail": "jokul@email.com",
"virtualAccountPhone": "6281828384858",
"trxId": "INV-20220916-0001",
"totalAmount": {
"value": "11000.00",
"currency": "IDR"
},
"billDetails": [
{
"billCode": "01",
"billNo": "123456789012345601",
"billName": "Bill A for Jan",
"billShortName": "Bill A",
"billDescription": {
"english": "Maintenance",
"indonesia": "Pemeliharaan"
},
"billSubCompany": "00001",
"billAmount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {}
}
],
"freeTexts": [
{
"english": "Free text",
"indonesia": "Tulisan bebas"
}
],
"virtualAccountTrxType": "1",
"feeAmount": {
"value": "1000.00",
"currency": "IDR"
},
"expiredDate": "2023-01-01T10:55:00+07:00"
},
"additionalInfo":{
},
"howToPayInfo":{
"howToPayPage":"https://sandbox.doku.com/btn-virtual-acccount/v1/how-to-pay-page/0008889912345678901234567890",
"howToPayApi":"https://api-sandbox.doku.com/btn-virtual-acccount/v1/how-to-pay-api/0008889912345678901234567890"
}
}
Type | Value |
---|---|
HTTP Status | 404 |
Result | FAILED |
Here is the sample of response body for failed scenario :
{
"responseCode":"4042716",
"responseMessage":"Partner Not Found",
"virtualAccountData":{
"partnerServiceId":"95962001",
"customerNo":"00000000001",
"virtualAccountNo":"9596200100000000001",
"virtualAccountName":"Jokul Doe 003",
"virtualAccountEmail":"jokul@email.com",
"virtualAccountPhone":"6281828384858",
"trxId":"INV-20220916-0002",
"totalAmount":{
"value":"11000.00",
"currency":"IDR"
},
"billDetails":[
{
"billCode":"01",
"billNo":"123456789012345601",
"billName":"Bill A for Jan",
"billShortName":"Bill A",
"billDescription":{
"english":"Maintenance",
"indonesia":"Pemeliharaan"
},
"billSubCompany":"00001",
"billAmount":{
"value":"10000.00",
"currency":"IDR"
},
"additionalInfo":{
}
}
],
"freeTexts":[
{
"english":"Free text",
"indonesia":"Tulisan bebas"
}
],
"virtualAccountTrxType":"1",
"feeAmount":{
"value":"1000.00",
"currency":"IDR"
},
"expiredDate":"2023-01-01T10:55:00+07:00"
"additionalInfo":{
"settlement":[
{
"bank_account_settlement_id":"SBA-0001-123123123",
"value":10,
"type":"PERCENTAGE"
},{
"bank_account_settlement_id":"SBS-0002-321321321",
"value":90,
"type":"PERCENTAGE"
}
]
}
}
}
Response Body Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
responseCode | string(7) | Mandatory | Response Code : HTTP status code + service code + case code |
responseMessage | string(150) | Mandatory | Response Description |
virtualAccountData.partnerServiceId | string(8) | Mandatory | similar to company code, 8 digit left padding space |
virtualAccountData.customerNo | String (20) | Optional | Unique number (up to 20 digits). partnerServiceId + customerNo = virtualAccountNo |
virtualAccountData.virtualAccountNo | String (28) | Optional | partnerServiceId (8 digit left padding 0) + customerNo up to 20 digits). |
virtualAccountData.virtualAccountName | string(255) | Mandatory | Customer Name |
virtualAccountData.virtualAccountEmail | string(255) | Optional | Customer Email |
virtualAccountData.virtualAccountPhone | string(30) | Optional | Customer Phone, Format: 62xxxxxxxxx xxxx |
virtualAccountData.trxId | string(64) | Mandatory | Transaction ID in Partner system |
virtualAccountData.totalAmount.value | string(8) | Optional | Transaction Amount. Total Amount with 2 decimal, format ISO 4217 |
virtualAccountData.totalAmount.Currency | string(3) | Optional | Currency. Example: IDR |
virtualAccountData.howToPayInfo.howToPayPage | ANS(256) | Optional | Step by step that will be used by customer for how to doing a payment |
virtualAccountData.howToPayInfo.howToPayApi | ANS(256) | Optional | Step by step that will be used by customer for how to doing a payment |
billDetails.billCode | string(2) | Optional | Bill code for Customer choose. Example : 01 |
billDetails.billNo | string(18) | Optional | Bill number from Partner |
billDetails.billName | string(20) | Optional | Bill Name |
billDetails.billShortName | string(10) | Optional | Bill Name to shown to |
billDetails.billDescription.english | string(18) | Optional | Bill Description in English |
billDetails.billDescription.indonesia | string(18) | Optional | Bill Description in Bahasa Indonesia |
billDetails.billSubCompany | string(5) | Optional | Partnerβs product code |
billDetails.billAmount.value | String (16.2)(ISO 4217) | Optional | Transaction Amount. Nominal inputted by Customer with 2 decimal |
billDetails.billAmount.currency | string(3) | Optional | Currency |
billDetails.additionalInfo | Object(Unlimited) | Optional | Additional Information for custom use for each bill |
freeTexts.english | string(32) | Optional | This parameter will be shown in Channel |
freeTexts.indonesia | string(32) | Optional | This parameter will be shown in Channel |
virtualAccountTrxType | string(1) | Optional | Type of Virtual Account : C : closed paymentO : open payment |
feeAmount.value | String (16.2) | Optional | Format ISO 4217 |
feeAmount.currency | string(3) | Optional | Example : IDR |
expiredDate | string(25) | Optional | Expiration date for Virtual Account. ISO-8601. Example: 2020-12- 31T23:59:59-07:00 |
additionalInfo | Object | Optional | Additional Information for custom use |
Pro Tips
You can also learn about generatin signature here https://apidevportal.bi.go.id/snap/api-services/keamanan
Pro Tips
You can also show payment instruction link to your customer by using virtual_account_info.how_to_pay_page
. If you wish to customize the UI for the payment instruction, you can use the virtual_account_info.how_to_pay_api
.
2. Display payment code (virtual account number)
You can display the payment code to your customer by using virtual_account_info.virtual_account_number
that you retrieved from the API response.
3. Acknowledge payment result
After the payment is being made by your customer, DOKU will send HTTP Notification to your defined Notification URL
. Learn how to handle the notification from DOKU: