Skip to main content

Get Token

Here is the overview of how to get token with Virtual Account :

Get Token

Get Access Token is an authentication method to ensure confidentiality, system and data integrity, availability of a system, and as a fraud detection method. It is a mandatory process that is regulated and set mandatory by Bank Indonesia.

Before starting any transaction process involving virtual account, one party need to do get access token activity before hitting the API to the other (e.g merchant want to hit create VA API to DOKU, then merchant need to hit the get access token API and granted the access token. The type of access token that is used in virtual account is B2B.

In the header request, there is an object called X-SIGNATURE that needs encryption of combination signature, to learn more about the usage, you can check here

API Endpoint

To get access token, you need to hit this API endpoint

TypeValue
Service Code73
HTTP MethodPOST
Path/authorization/v1/access-token/b2b

Here is the sample of request header to get token:

X-SIGNATURE: Pxlv2IIUVdlzdUnbSQqug8YeghmKXJ7Rw5P4xBOOB/tC457UsoZXkO4S1R3oszVcjZDSh38+==
X-TIMESTAMP: 2022-10-07T14:18:39+07:00
X-CLIENT-KEY: MCH-0008-1296507211683
Content-Type: application/json
Request Header Explanation
ParameterData TypeTypeDescription
X-SIGNATUREstringMandatoryNon-Repudiation & Integrity checking X-Signature : with asymmetric signature algorithm SHA256withRSA (Private_Key, stringToSign).
stringToSign = client_ID + “:” + X- TIMESTAMP
X-TIMESTAMPstringMandatoryTimestamp request on UTC time in ISO8601 UTC+0 format. It means to proceed transaction on UTC+7 (WIB), merchant need to subtract time with 7. Ex: to proceed transaction on September 22th 2020 at 08:51:00 WIB, the timestamp should be 2020-09-22T01:51:00Z
X-CLIENT-KEYstringMandatoryClient’s client_id (PJP Name) (given at completion registration process) Merchant to DOKU : client_id merchant.
DOKU to Acquirer : client_key given by acquirer.
Acquirer to DOKU : client_key given by DOKU
content-typestringMandatoryString represents indicate the media type of the resource (e.g. application/json, application/pdf)

Here is the sample of request body to get token :

{
"grantType":"client_credentials",
"additionalInfo":""
}
Request Body Explanation
ParameterTypeMandatoryDescription
grantTypestringMandatory“client_credentials” : The client can request an access token using only its client credentials (or other supported means of authentication) when the client is requesting access to the protected resources under its control (OAuth 2.0: RFC 6749 & 6750)
additionalInfoobjectOptionalAdditional Information

API Response

After hitting the above API request, DOKU will give the response.

TypeValue
HTTP Status200
ResultSUCCESS
X-CLIENT-KEY: "MCH-0008-1296507211683",
X-TIMESTAMP: "2022-10-07T14:26:50+07:00"
Response Header Explanation
ParameterData TypeTypeDescription
X-TIMESTAMPstringMandatoryClient's current local time in YYYY-MM-DDTHH:mm:ssZ format
X-CLIENT-KEYstringMandatoryClient’s client_id (PJP Name) (given at completion registration process)
Merchant to DOKU : client_id merchant.
DOKU to Acquirer : client_key given by acquirer.
Acquirer to DOKU : client_key given by DOKU

Here is the sample of response body:


{
"responseCode": "2007300",
"responseMessage": "Successful",
"accessToken": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE2NjUxMjc3OTEsIm5iZiI6MTY2NTEyNjg5MSwiaXNzIjoiRE9LVSIsImlhdCI6",
"tokenType": "Bearer",
"expiresIn": 900,
"additionalInfo": ""
}

Response Body Explanation
ParameterData TypeTypeDescription
responseCodestring(6)MandatoryResponse Code : HTTP status code + service code + case code
responseMessage.stringMandatoryResponse Description'
accessTokenstring(2048)MandatoryA string representing an authorization issued to the client that used to access protected resources.
tokenTypestringMandatoryThe access token type provides the client with the information required to successfully utilize the access token to make a protected resource request (along with type-specific attributes).

Token Type Value:
“Bearer”: includes the access token.

string in the request
“Mac”: issuing a Message.

Authentication Code (MAC) key together with the access token that is used to sign certain components of the HTTP requests.
Reference: OAuth2.0 RFC 6749 & 6750
expiresInstringMandatorySession expiry in seconds : 900 (15 minute )
additionalInfostringOptionalAdditional Information

Error Response Message

For several error cases, the response appear would be like below :

X-CLIENT- KEY not authorized

{
"responseCode": "4017300",
"responseMessage": "Unauthorized. Unknown Client"
}

X-TIMESTAMP format not valid

{
"responseCode": "4007301",
"responseMessage": "Invalid Field Format X-TIMESTAMP"
}

Signature not valid

{
"responseCode": "4017300",
"responseMessage": "Unauthorized. Signature"
}
Pro Tips

You can also learn about generatin signature here https://apidevportal.bi.go.id/snap/api-services/keamanan