QRIS
QRIS (Quick Response Code Indonesian Standard) is a QR code standard developed by Bank Indonesia and Indonesian Payment System Association (ASPI) for cashless payments in Indonesia.
Overview Steps
Overview of integration process with QRIS
1. Generate QRIS
After customer creates an order and choose QRIS as the payment method, merchant will hit this API to generate QRIS that will be shown to the customer. To generate QRIS, you need to hit this API through your Backend:
API Endpoint
HTTP Method
POST
API Sandbox
API Production
Path
/snap-adapter/b2b/v1.0/qr/qr-mpm-generate
Here is the sample request header, request body and response body for generate QRIS:
Client Id for merchant that generated by DOKU
BRN-0253-175853653...Numeric String. Reference number that should be unique in the same day (Request Id)
4180755335...Client's current local time with format YYYY-MM-DDTHH:mm:ssZD
2020-12-21T14:56:11+07:00Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp
ieNOENDdN4MnectGytx5UvmOfASZ2o...String starts with keyword “Bearer ” followed by token B2B (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)
Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...Channel ID for QRIS please fill with H2H (Host-To-Host)
H2HTransaction ID from partners
a98757c8dbc6434ab5dd4c55d9092d9aCredential mall ID provided by DOKU after your QRIS registration is approved.
2115 (This is an example value for reference only. Use the MerchantID provided by DOKU for your integration).Terminal Identification alphanumeric
k45Expired Time QRIS using ISO 8601 Format, if not sent will use Default value 30 days
2023-11-08T17:38:42+07:00OK
2004700Request has been processed successfullya98757c8dbc6434ab5dd4c55d9092d9aa98757c8dbc6434ab5dd4c55d9092d9a00020101021226530012COM.DOKU.WWW0118936008990000002997020429970303UMI51440014ID.CO.QRIS.WWW0215ID20200622029970303UMI52045411530336054071200.255502025606500.525802ID5911Green Pages6007Jakarta61051312062430703K455032a98757c8dbc6434ab5dd4c55d9092d9a6304F6EAK45POST /snap-adapter/b2b/v1.0/qr/qr-mpm-generate HTTP/1.1
Host: api-sandbox.doku.com
X-PARTNER-ID: BRN-0253-175853653...
X-EXTERNAL-ID: 4180755335...
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-SIGNATURE: ieNOENDdN4MnectGytx5UvmOfASZ2o...
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...
CHANNEL-ID: H2H
Content-Type: application/json
Accept: */*
Content-Length: 226
{
"partnerReferenceNo": "INV-Test02102025",
"amount": {
"value": "1000.00",
"currency": "IDR"
},
"merchantId": "xxxxx",
"terminalId": "A01",
"validityPeriod": "2025-11-30T19:27:15+07:00",
"additionalInfo": {
"postalCode": "12190",
"feeType": "1"
}
}OK
{
"responseCode": "2004700",
"responseMessage": "Request has been processed successfully",
"referenceNo": "INV-Test02102025",
"partnerReferenceNo": "INV-Test02102025",
"qrContent": "00020101021226540012COM.DOKU.WWW01189360089900000474350205xxxxx0303UMI51440014ID.CO.QRIS.WWW0215ID10243163058860303UMI52045812530336054071000.005802ID5911Tea Dynamic6008SEMARANG61051219062270703A015016INV-Test0210202563049E2E",
"terminalId": "A01",
"additionalInfo": {
"validityPeriod": "2025-11-30T19:27:15+07:00"
}
}Validate your Generate API implementation using the Payment Simulator before going live. Simulator QRIS
2. Query QRIS
To query QRIS, you need to hit this API through your Backend:
API Endpoint
HTTP Method
POST
API Sandbox
API Production
Path
/snap-adapter/b2b/v1.0/qr/qr-mpm-query
Here is the sample request header, request body and response body for query QRIS:
Client Id for merchant that generated by DOKU
BRN-0253-175853653...Client's current local time with format YYYY-MM-DDTHH:mm:ssZD
2020-12-21T14:56:11+07:00Numeric String. Reference number that should be unique in the same day (Request Id)
4180755335...Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp
ieNOENDdN4MnectGytx5UvmOfASZ2o...String starts with keyword “Bearer ” followed by token B2B (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)
Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...Channel ID for QRIS please fill with H2H (Host-To-Host)
H2HTransaction ID from DOKU when Generate QRIS
7d054649f9ba4c19ae5f95950c99be4dTransaction ID from partners when Generate QRIS
7d054649f9ba4c19ae5f95950c99be4dUnique service API “47”
47Merchant ID registered in DOKU
2997OK
2004700Request has been processed successfully7d054649f9ba4c19ae5f95950c99be4d7d054649f9ba4c19ae5f95950c99be4d4700Success2023-08-18T23:12:21+07:00POST /snap-adapter/b2b/v1.0/qr/qr-mpm-query HTTP/1.1
Host: api-sandbox.doku.com
X-PARTNER-ID: BRN-0253-175853653...
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-EXTERNAL-ID: 4180755335...
X-SIGNATURE: ieNOENDdN4MnectGytx5UvmOfASZ2o...
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...
CHANNEL-ID: H2H
Content-Type: application/json
Accept: */*
Content-Length: 130
{
"originalReferenceNo": "INV-Test02102025",
"originalPartnerReferenceNo": "INV-Test02102025",
"merchantId": "xxxxx",
"serviceCode": "47"
}OK
{
"responseCode": "2005100",
"responseMessage": "Request has been processed successfully",
"originalReferenceNo": "INV-Test02102025",
"originalPartnerReferenceNo": "INV-Test02102025",
"serviceCode": "47",
"latestTransactionStatus": "00",
"transactionStatusDesc": "Success",
"paidTime": "2025-10-02T17:44:19+07:00",
"amount": {
"value": 1000,
"currency": "IDR"
},
"additionalInfo": {
"issuerId": "93600501",
"approvalCode": "1hk9vlw79634",
"convenienceFee": "C00000000",
"issuerName": "BCAD",
"terminalId": "A01 ",
"customerName": "Customer Name "
}
}3. Refund QRIS
This endpoint is used to create refund request for previous successful payment, merchant can request a transaction refund to DOKU. To refund, you need to hit this API through your Backend:
API Endpoint
HTTP Method
POST
API Sandbox
API Production
Path
/snap-adapter/b2b/v1.0/qr/qr-mpm-refund
Here is the sample request header, request body and response body for refund QRIS:
Client Id for merchant that generated by DOKU
BRN-0253-175853653...Client's current local time with format YYYY-MM-DDTHH:mm:ssZD
2020-12-21T14:56:11+07:00Numeric String. Reference number that should be unique in the same day (Request Id)
4180755335...Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp
ieNOENDdN4MnectGytx5UvmOfASZ2o...String starts with keyword “Bearer ” followed by token B2B (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)
Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...Channel ID for QRIS please fill with H2H (Host-To-Host)
H2HTransaction ID from DOKU when Generate QRIS from SNAP (same as originalReferenceNo value from Generate QRIS Request)
originalPartnerReferenceNoOriginal Transaction ID from DOKU from response payment QRIS / Invoice from notify QRIS
7d054649f9ba4c19ae5f95950c99be4dpartnerRefundNoCredential mall ID provided by DOKU after your QRIS registration is approved.
2115 (This is an example value for reference only. Use the MerchantID provided by DOKU for your integration).refund reasonOK
2007800Request has been processed successfully82367e5283b94a47a920859bcb4af4d682367e5283b94a47a920859bcb4af4d6QRISR0001QRISR00012022-11-11T10:51:48+07:00POST /snap-adapter/b2b/v1.0/qr/qr-mpm-refund HTTP/1.1
Host: api-sandbox.doku.com
X-PARTNER-ID: BRN-0253-175853653...
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-EXTERNAL-ID: 4180755335...
X-SIGNATURE: ieNOENDdN4MnectGytx5UvmOfASZ2o...
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...
CHANNEL-ID: H2H
Content-Type: application/json
Accept: */*
Content-Length: 295
{
"originalPartnerReferenceNo": "INV-Test02102025",
"originalReferenceNo": "INV-Test02102025",
"partnerRefundNo": "INV-Test022022026",
"merchantId": "xxxxx",
"reason": "Refund for transacion INV-Test02102025",
"refundAmount": {
"value": 1000,
"currency": "IDR"
},
"additionalInfo": {
"approvalCode": "1hk9vlw79634"
}
}OK
{
"responseCode": "2007800",
"responseMessage": "Request has been processed successfully",
"originalPartnerReferenceNo": "INV-Test02102025",
"originalReferenceNo": "INV-Test02102025",
"refundNo": "R_74463aa1-6627-4064-a09a-e8c5cd06c1cd",
"partnerRefundNo": "INV-Test022022026",
"refundAmount": {
"value": 1000,
"currency": "IDR"
},
"refundTime": "2025-10-02T05:51:05+07:00"
}Please refer to the list of issuers that support refunds before initiating a refund request.
4. Decode QRIS
To decode QRIS, you need to hit this API through your Backend:
API Endpoint
HTTP Method
POST
API Sandbox
API Production
Path
/snap-adapter/b2b/v1.0/qr/qr-mpm-decode
Here is the sample request header, request body and response body for decode QRIS:
Client Id for merchant that generated by DOKU
BRN-0253-175853653...Client's current local time with format YYYY-MM-DDTHH:mm:ssZD
2020-12-21T14:56:11+07:00Numeric String. Reference number that should be unique in the same day (Request Id)
4180755335...Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp
ieNOENDdN4MnectGytx5UvmOfASZ2o...String starts with keyword “Bearer ” followed by token B2B (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)
Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...Channel ID for QRIS please fill with H2H (Host-To-Host)
H2HTransaction ID from partners
75a98757c8dbc6434ab5dd4c55d9092d9aQRIS content. QRIS generated by DOKU or other PJSP. Can be dynamic or static QRIS.
00020101021226530012COM.DOKU.WWW0118936008990000002997020429970303UMI51440014ID.CO.QRIS.WWW0215ID20200622029970303UMI52045411530336054071200.255502025606500.525802ID5911Green Pages6007Jakarta61051312062430703K455032a98757c8dbc6434ab5dd4c55d9092d9a6304F6EAThe time when the QRIS scanned by the User, ISO 8601 Format
2023-11-08T17:38:42+07:00OK
200480012190Request has been processed successfullys25571a62302c43a881c684cccc7ecbae25571a62302c43a881c684cccc7ecbaeGreen PagesPOST /snap-adapter/b2b/v1.0/qr/qr-mpm-decode HTTP/1.1
Host: api-sandbox.doku.com
X-PARTNER-ID: BRN-0253-175853653...
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-EXTERNAL-ID: 4180755335...
X-SIGNATURE: ieNOENDdN4MnectGytx5UvmOfASZ2o...
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...
CHANNEL-ID: H2H
Content-Type: application/json
Accept: */*
Content-Length: 335
{
"partnerReferenceNo": "INV-qris02102025",
"qrContent": "00020101021226540012COM.DOKU.WWW01189360089900000145820205145820303UKE51440014ID.CO.QRIS.WWW0215ID20250922540640303UKE520456615303360540810000.005802ID5910KZaV9TOvsR6015JAKARTA SELATAN61051219062270703A015016INV-QRIS0220251063043DD2",
"scanTime": "2025-10-02T18:00:51+07:00"
}OK
{
"responseCode": "2004800",
"responseMessage": "Request has been processed successfully",
"referenceNo": "INV-qris02102025",
"partnerReferenceNo": "INV-qris02102025",
"merchantName": "KZaV9TOvsR",
"merchantCategory": "5661",
"merchantLocation": "JAKARTA SELATAN",
"postalCode": "12190",
"mid": "14582",
"transactionAmount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {
"pointOfInitiationMethod": "12",
"pointOfInitiationMethodDescription": "DYNAMIC",
"feeTypeDescription": "NO_TIPS"
},
"merchantInfos": [
{
"merchantPAN": "936008990000014582",
"acquirerName": "DOKU"
}
]
}5. Payment QRIS
You need to hit this API through your Backend:
API Endpoint
HTTP Method
POST
API Sandbox
API Production
Path
/snap-adapter/b2b2c/v1.0/qr/qr-mpm-payment
Here is the sample request header, request body and response body for payment QRIS:
Client Id for merchant that generated by DOKU
BRN-0253-175853653...Client's current local time with format YYYY-MM-DDTHH:mm:ssZD
2020-12-21T14:56:11+07:00Numeric String. Reference number that should be unique in the same day (Request Id)
4180755335...Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp
ieNOENDdN4MnectGytx5UvmOfASZ2o...String starts with keyword “Bearer ” followed by token B2B (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)
Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...String starts with keyword “Bearer ” followed by token B2B2C (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)
Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...Channel ID for QRIS please fill with H2H (Host-To-Host)
H2H91cbe52caf27471482d3430c37d174fcOK
2005000Request has been processed successfully91cbe52caf27471482d3430c37d174fc91cbe52caf27471482d3430c37d174fcPOST /snap-adapter/b2b2c/v1.0/qr/qr-mpm-payment HTTP/1.1
Host: api-sandbox.doku.com
X-PARTNER-ID: BRN-0253-175853653...
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-EXTERNAL-ID: 4180755335...
X-SIGNATURE: ieNOENDdN4MnectGytx5UvmOfASZ2o...
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...
Authorization-Customer: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...
CHANNEL-ID: H2H
Content-Type: application/json
Accept: */*
Content-Length: 345
{
"partnerReferenceNo": "INV-QR22202511",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {
"qrContent": "00020101021226520012COM.DOKU.WWW011793600899000007373020473730303URE51440014ID.CO.QRIS.WWW0215ID10221466173730303URE520473735303360540810000.005802ID5913snapSandbox 16009Indonesia61051312062250703K455014INV-QR22202511630477F0"
}
}OK
{
"responseCode": "2005000",
"responseMessage": "Request has been processed successfully",
"referenceNo": "INV-QR22202511",
"partnerReferenceNo": "INV-QR22202511",
"transactionDate": "2025-10-03T09:45:20+07:00",
"amount": {
"value": 10000,
"currency": "IDR"
},
"feeAmount": {
"value": 0,
"currency": "IDR"
},
"additionalInfo": {
"approvalCode": "356038"
}
}6. Cancel QRIS
Cancel QR is the process of invalidating a previously generated QR code by updating its expiry date to the current date and time, ensuring that the QR code can no longer be used for payments. You need to hit this API through your Backend:
API Endpoint
HTTP Method
POST
API Sandbox
API Production
Path
/snap-adapter/b2b/v1.0/qr/qr-expire
Here is the sample request header, request body and response body for payment QRIS:
Client Id for merchant that generated by DOKU
BRN-0253-175853653...Client's current local time with format YYYY-MM-DDTHH:mm:ssZD
2020-12-21T14:56:11+07:00Numeric String. Reference number that should be unique in the same day (Request Id)
4180755335...Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp
ieNOENDdN4MnectGytx5UvmOfASZ2o...String starts with keyword “Bearer ” followed by token B2B (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)
Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...Channel ID for QRIS please fill with H2H (Host-To-Host)
H2H82367e5283b94a47a920859bcb4af4d682367e5283b94a47a920859bcb4af4d6Merchant ID registered in DOKU
xxxxxreason cancel QROK
2007700Request has been processed successfully82367e5283b94a47a920859bcb4af4d682367e5283b94a47a920859bcb4af4d62022-11-11T10:51:48+07:00POST /snap-adapter/b2b/v1.0/qr/qr-expire HTTP/1.1
Host: api-sandbox.doku.com
X-PARTNER-ID: BRN-0253-175853653...
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-EXTERNAL-ID: 4180755335...
X-SIGNATURE: ieNOENDdN4MnectGytx5UvmOfASZ2o...
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt...
CHANNEL-ID: H2H
Content-Type: application/json
Accept: */*
Content-Length: 155
{
"partnerReferenceNo": "82367e5283b94a47a920859bcb4af4d6",
"referenceNo": "82367e5283b94a47a920859bcb4af4d6",
"merchantId": "xxxxx",
"reason": "reason cancel QR"
}OK
{
"responseCode": "2007700",
"responseMessage": "Request has been processed successfully",
"partnerReferenceNo": "82367e5283b94a47a920859bcb4af4d6",
"referenceNo": "82367e5283b94a47a920859bcb4af4d6",
"expiredDate": "2022-11-11T10:51:48+07:00"
}Last updated