Skip to main content

bni-virtual-account-create-va

Here is the endpoint of BNI Virtual Account :

API Request

TypeValue
Service Code27
HTTP MethodPOST
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
ParameterData TypeTypeDescription
X-TIMESTAMPstringMandatoryClient's current local time with format :
YYYY-MM-DDTHH:mm:ssZD
X-SIGNATUREstringMandatoryRepresents 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-IDstringMandatoryClient Id for merchant that generated by DOKU
X-EXTERNAL-IDstringMandatoryNumeric String. Reference number that should be unique in the same day (Request Id)
CHANNEL-IDstring(5)MandatoryVA004

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
ParameterTypeMandatoryDescription
partnerServiceIdstring(8)MandatoryThis parameter is similar to company code/BIN, 8 digit left padding space.
customerNostring(20)MandatoryUnique number (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo
virtualAccountNostring(28)MandatorypartnerServiceId (8 digit left padding 0) + customerNo (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo
virtualAccountNamestring(255)MandatoryCustomer Name
virtualAccountEmailstring(255)OptionalCustomer Email
virtualAccountPhonestring(30)OptionalCustomer Phone, Format: 62xxxxxxxxx xxxx
trxIdstring(64)MandatoryTransaction ID in Partner system
totalAmount.valuestring(8)OptionalTransaction Amount.
Total Amount with 2 decimal, format ISO 4217
totalAmount.Currencystring(3)OptionalCurrency. Example: IDR
virtualAccountTrxTypestring(1)OptionalType of Virtual Account :
C : closed payment
O : open payment
expiredDatestring(25)OptionalExpiration date for Virtual Account. ISO-8601. Example: 2020-12- 31T23:59:59-07:00
additionalInfoObjectOptionalAdditional 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
ParameterData TypeTypeDescription
X-TimestampstringMandatoryClient's current local time with format YYYY-MM-DDTHH:mm:ssZ
TypeValue
HTTP Status200
ResultSUCCESS

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"
}
}
}
TypeValue
HTTP Status404
ResultFAILED

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
ParameterTypeMandatoryDescription
responseCodestring(7)MandatoryResponse Code : HTTP status code + service code + case code
responseMessagestring(150)MandatoryResponse Description
virtualAccountData.partnerServiceIdstring(8)Mandatorysimilar to company code, 8 digit left padding space
virtualAccountData.customerNoString (20)OptionalUnique number (up to 20 digits).
partnerServiceId + customerNo = virtualAccountNo
virtualAccountData.virtualAccountNoString (28)OptionalpartnerServiceId (8 digit left padding 0) + customerNo up to 20 digits).
virtualAccountData.virtualAccountNamestring(255)MandatoryCustomer Name
virtualAccountData.virtualAccountEmailstring(255)OptionalCustomer Email
virtualAccountData.virtualAccountPhonestring(30)OptionalCustomer Phone, Format: 62xxxxxxxxx xxxx
virtualAccountData.trxIdstring(64)MandatoryTransaction ID in Partner system
virtualAccountData.totalAmount.valuestring(8)OptionalTransaction Amount.
Total Amount with 2 decimal, format ISO 4217
virtualAccountData.totalAmount.Currencystring(3)OptionalCurrency. Example: IDR
virtualAccountData.howToPayInfo.howToPayPageANS(256)OptionalStep by step that will be used by customer for how to doing a payment
virtualAccountData.howToPayInfo.howToPayApiANS(256)OptionalStep by step that will be used by customer for how to doing a payment
virtualAccountTrxTypestring(1)OptionalType of Virtual Account :
C : closed payment
O : open payment
expiredDatestring(25)OptionalExpiration date for Virtual Account. ISO-8601. Example: 2020-12- 31T23:59:59-07:00
additionalInfoObjectOptionalAdditional Information for custom use