Asynchronous Notification
Asynchronous Notification Callback guideline for payment notifications from Paylabs to Merchant.
If status is 02 (Success) or 09 (Failed), the system sends a callback.
URL comes from notifyUrl provided when creating the order.
If the response is not successful, Paylabs retries up to 8 times at 1s, 5s, 10s, 30s, 60s, 300s, 900s, 1800s.
URL: value of notifyUrl when sending the request
HTTPMethod: POST
EndpointUrl: path part of the URL, e.g. URL=https://merchant-domain.com/v2/qris/notify → Path=/v2/qris/notify
Data Signing Rules
Field Name Type Value Required Content-Type String(30) Fixed value "application/json;charset=utf-8" Yes X-TIMESTAMP String(29) Current time, format 2022-09-16T16:58:47.964+07:00 Yes X-SIGNATURE String(64) Signature. For details see Data Signing Rules Yes X-PARTNER-ID String(20) Merchant ID Yes X-REQUEST-ID String(64) Unique ID for each request Yes
Error Code
Parameter Type Required Remarks requestId String(64) Yes Unique identifier on every request errCode String(32) Yes 0 means success, otherwise see Error Code errCodeDes String(128) No Error description merchantId String(20) Yes Merchant ID storeId String(30) No If using branch store ID paymentType String(20) Yes Payment type, see Payment Type table amount Decimal(12,2) Yes Amount in IDR with 2 decimals merchantTradeNo String(32) Yes Merchant order number platformTradeNo String(32) No Paylabs order number createTime String(16) No yyyyMMddHHmmss successTime String(16) No yyyyMMddHHmmss status String(32) No 01: Pending, 09: Failed, 02: Success productName String(100) No Product/service name +productInfo Array<Object>(30)No Product/service details a?Oid String(10) Yes Product ID a?Oname String(32) Yes Product Name a?Oprice decimal(12,2) Yes Amount in IDR, supports two decimals a?Otype String(20) Yes Product Type a?Ourl String(200) No Product URL a?Oquantity Number(4) Yes Product Quantity +paymentMethodInfo Object No Channel-related info transFeeRate Decimal(6,6) No Transaction rate, six decimals transFeeAmount Decimal(12,2) No Fee, two decimals totalTransFee Decimal(12,2) No Total fee rate (excl. vatFee), two decimals vatFee Decimal(12,2) No VAT fee, two decimals
Parameter Type Required Remarks nmid String(32) Yes National Merchant ID rrn String(32) No Successful payment code tid String(32) No Terminal ID (QRIS) payer String(60) No Actual payer name if supported; otherwise null phoneNumber String(20) No Payer phone number issuerId String(20) No Issuer app ID accountNo String(32) No Actual payer account number if supported; otherwise null
Parameter Type Required Remarks vaCode String(32) Yes Virtual Account number payer String(60) No Actual payer name if supported; otherwise null accountNo String(32) No Actual payer account number if supported; otherwise null
Parameter Type Required Remarks paymentCode String(32) Yes Payment code number payer String(60) No Actual payer name if supported; otherwise null accountNo String(32) No Actual payer account number if supported; otherwise null
Parameter Type Required Remarks payer String(60) No Actual payer name if supported; otherwise null accountNo String(32) No Actual payer account number if supported; otherwise null
Data Signing Rules
Field Name Type Value Required Content-Type String(30) Fixed value "application/json;charset=utf-8" Yes X-TIMESTAMP String(29) Current time, format 2022-09-16T16:58:47.964+07:00 Yes X-SIGNATURE String(64) Signature. For details see Data Signing Rules Yes X-PARTNER-ID String(20) Merchant ID Yes X-REQUEST-ID String(64) Unique ID for each request Yes
Error Code
Parameter Type Required Remarks requestId String(64) Yes Unique identifier on every request errCode String(32) Yes 0 means success, otherwise see Error Code errCodeDes String(128) No Error description merchantId String(20) Yes Merchant ID storeId String(30) No If using branch store ID
POST URL provided by Merchant
# HTTP Header
Content-Type: application/json;charset=utf -8
X-TIMESTAMP: 2022-09-16 T 16 : 58 : 47.964 + 07 : 00
X-SIGNATURE: xxxxxxxxx
X-PARTNER-ID: 010001
X-REQUEST-ID: xxxxxxxxxxxxxxxxxxxxxxxx
# HTTP Body
{
"merchantId" : "010001" ,
"requestId" : "N01029020230619290000003911687350380290" ,
"errCode" : "0" ,
"paymentType" : "MandiriVA" ,
"amount" : "150000.00" ,
"createTime" : "20230619221611" ,
"successTime" : "20230621094325" ,
"merchantTradeNo" : "673492076" ,
"platformTradeNo" : "2023061929000000001" ,
"status" : "02" ,
"vaCode" : "8959410619000001" ,
"transFeeRate" : "0" ,
"transFeeAmount" : "0" ,
"totalTransFee" : "0" ,
"vatFee" : "0"
}
POST URL provided by Merchant
# HTTP Header
Content-Type: application/json;charset=utf -8
X-TIMESTAMP: 2022-09-16 T 16 : 58 : 47.964 + 07 : 00
X-SIGNATURE: xxxxxxxxx
X-PARTNER-ID: 010001
X-REQUEST-ID: xxxxxxxxxxxxxxxxxxxxxxxx
# HTTP Body
{
"merchantId" : "010001" ,
"requestId" : "N01029020230619290000003911687350380290" ,
"errCode" : "0"
}