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.

Request URL

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

Asynchronous Notification Request Parameters (Paylabs → Merchant)

Data Signing Rules

Field NameTypeValueRequired
Content-TypeString(30)Fixed value "application/json;charset=utf-8"Yes
X-TIMESTAMPString(29)Current time, format 2022-09-16T16:58:47.964+07:00Yes
X-SIGNATUREString(64)Signature. For details see Data Signing RulesYes
X-PARTNER-IDString(20)Merchant IDYes
X-REQUEST-IDString(64)Unique ID for each requestYes

Body

Error Code

ParameterTypeRequiredRemarks
requestIdString(64)YesUnique identifier on every request
errCodeString(32)Yes0 means success, otherwise see Error Code
errCodeDesString(128)NoError description
merchantIdString(20)YesMerchant ID
storeIdString(30)NoIf using branch store ID
paymentTypeString(20)YesPayment type, see Payment Type table
amountDecimal(12,2)YesAmount in IDR with 2 decimals
merchantTradeNoString(32)YesMerchant order number
platformTradeNoString(32)NoPaylabs order number
createTimeString(16)NoyyyyMMddHHmmss
successTimeString(16)NoyyyyMMddHHmmss
statusString(32)No01: Pending, 09: Failed, 02: Success
productNameString(100)NoProduct/service name
+productInfoArray<Object>(30)NoProduct/service details
a?OidString(10)YesProduct ID
a?OnameString(32)YesProduct Name
a?Opricedecimal(12,2)YesAmount in IDR, supports two decimals
a?OtypeString(20)YesProduct Type
a?OurlString(200)NoProduct URL
a?OquantityNumber(4)YesProduct Quantity
+paymentMethodInfoObjectNoChannel-related info
transFeeRateDecimal(6,6)NoTransaction rate, six decimals
transFeeAmountDecimal(12,2)NoFee, two decimals
totalTransFeeDecimal(12,2)NoTotal fee rate (excl. vatFee), two decimals
vatFeeDecimal(12,2)NoVAT fee, two decimals

QRIS paymentMethodInfo

ParameterTypeRequiredRemarks
nmidString(32)YesNational Merchant ID
rrnString(32)NoSuccessful payment code
tidString(32)NoTerminal ID (QRIS)
payerString(60)NoActual payer name if supported; otherwise null
phoneNumberString(20)NoPayer phone number
issuerIdString(20)NoIssuer app ID
accountNoString(32)NoActual payer account number if supported; otherwise null

VA paymentMethodInfo

ParameterTypeRequiredRemarks
vaCodeString(32)YesVirtual Account number
payerString(60)NoActual payer name if supported; otherwise null
accountNoString(32)NoActual payer account number if supported; otherwise null

OTC paymentMethodInfo

ParameterTypeRequiredRemarks
paymentCodeString(32)YesPayment code number
payerString(60)NoActual payer name if supported; otherwise null
accountNoString(32)NoActual payer account number if supported; otherwise null

E-Money paymentMethodInfo

ParameterTypeRequiredRemarks
payerString(60)NoActual payer name if supported; otherwise null
accountNoString(32)NoActual payer account number if supported; otherwise null

Asynchronous Notification Response Parameters (Merchant → Paylabs)

Header

Data Signing Rules

Field NameTypeValueRequired
Content-TypeString(30)Fixed value "application/json;charset=utf-8"Yes
X-TIMESTAMPString(29)Current time, format 2022-09-16T16:58:47.964+07:00Yes
X-SIGNATUREString(64)Signature. For details see Data Signing RulesYes
X-PARTNER-IDString(20)Merchant IDYes
X-REQUEST-IDString(64)Unique ID for each requestYes

Body

Error Code

ParameterTypeRequiredRemarks
requestIdString(64)YesUnique identifier on every request
errCodeString(32)Yes0 means success, otherwise see Error Code
errCodeDesString(128)NoError description
merchantIdString(20)YesMerchant ID
storeIdString(30)NoIf using branch store ID

Example

Request

POST URL provided by Merchant
# HTTP Header
Content-Type: application/json;charset=utf-8
X-TIMESTAMP: 2022-09-16T16: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"
}

Response

POST URL provided by Merchant
# HTTP Header
Content-Type: application/json;charset=utf-8
X-TIMESTAMP: 2022-09-16T16:58:47.964+07:00
X-SIGNATURE: xxxxxxxxx
X-PARTNER-ID: 010001
X-REQUEST-ID: xxxxxxxxxxxxxxxxxxxxxxxx

# HTTP Body
{
  "merchantId":"010001",
  "requestId":"N01029020230619290000003911687350380290",
  "errCode":"0"
}