HTTP Notification Sample

After setting up your Notification URL, we will send the notification for certain events such as when the Virtual Account has been paid by your customers, Credit Card has been charged, Credit Card failed, and etc. Here are the sample for the notifications:

Virtual Account

Once the customers finish the payment, Jokul will send the notification to your defined Notification URL. Here is the sample notification that Jokul will send to merchant's server:

TypeValue
HTTP MethodPOST

Here is the sample of notification request header:

Client-Id: MCH-0001-10791114622547
Request-Id: 479b663f-5c9d-400d-8e80-3e548a8f7639
Request-Timestamp: 2020-08-11T08:45:42Z
Signature: HMACSHA256=vl9DBTX5KhEiXmnpOD0TSm8PYQknuHPdyHSTSc3W6Ps=
Request Header Explanation
ParameterDescription
Client-IdClient ID you retrieved from Jokul Back Office
Request-IdUnique random string (max 128 characters) that generated by Jokul to make sure no duplicate notification
Request-TimestampTime Stamp request on UTC time in ISO8601 format
SignatureVerify the Signature to ensure the Notification Authenticity coming from Jokul. Please refer to this section

Here is the sample of notification request body:

{
"service": {
"id": "VIRTUAL_ACCOUNT"
},
"acquirer": {
"id": "BANK_MANDIRI"
},
"channel": {
"id": "VIRTUAL_ACCOUNT_BANK_MANDIRI"
},
"transaction": {
"status": "SUCCESS",
"date": "2021-01-27T07:24:50Z",
"original_request_id": "cc682442-6c22-493e-8121-b9ef6b3fa728"
},
"order": {
"invoice_number": "INV-20210124-0001",
"amount": 150000
},
"virtual_account_info": {
"virtual_account_number": "8889940000000213"
},
"virtual_account_payment": {
"identifier": [
{
"name": "TRANSACTION_ID",
"value": "8341422"
},
{
"name": "CHANNEL_ID",
"value": "001"
}
]
}
}
Mandiri VA Notification Explanation
ParameterTypeMandatoryDescription
service.idstringOptionalThe service that is used for the transaction
acquirer.idstringOptionalThe acquirer that processed the transaction
channel.idstringOptionalThe channel of the transaction
transaction.statusstringMandatoryThe transaction status to be use to update the status on merchant side
Possible value: SUCCESS since VA only notify when payment is success
transaction.datestringOptionalThe date when the transaction is completed by the customer in ISO 8601 format (UTC + 0)
transaction.original_request_idstringOptionalThe request ID that sent when initiate the payment
order.invoice_numberstringMandatoryThe invoice number that sent when initate the payment
order.amountstringMandatoryThe amount of the transaction
virtual_account_info.
virtual_account_number
stringOptionalThe virtual account number that used for the transaction
virtual_account_payment.identifierarrayOptionalList of transaction identifier that coming from the acquiring. Merchant can save these data for reference

Credit Card

Once the payment process is finished, Jokul will send notify to defined Notification URL. Here is the sample notification that Jokul will send to merchant's server:

TypeValue
HTTP MethodPOST

Here is the sample of notification request header:

Client-Id: MCH-0001-10791114622547
Request-Id: 370c993c-e5ee-4dfc-9e47-0474b55c7b4b
Request-Timestamp: 2020-08-11T08:45:42Z
Signature: HMACSHA256=vl9DBTX5KhEiXmnpOD0TSm8PYQknuHPdyHSTSc3W6Ps=
Request Header Explanation
ParameterDescription
Client-IdClient ID you retrieved from Jokul Back Office
Request-IdUnique random string (max 128 characters) that generated by Jokul to make sure no duplicate notification
Request-TimestampTime Stamp request on UTC time in ISO8601 format
SignatureVerify the Signature to ensure the Notification Authenticity coming from Jokul. Please refer to this section

Here is the sample of notification request body:

{
"order": {
"invoice_number": "INV-20201109-002",
"amount": 500000
},
"transaction": {
"status": "SUCCESS",
"date": "2020-08-11T08:45:42Z",
"original_request_id": "b266c265-3d61-4708-9860-c0d5b9a98f8c"
},
"service": {
"id": "CREDIT_CARD"
},
"acquirer": {
"id": "BANK_MANDIRI"
},
"channel": {
"id": "CREDIT_CARD"
},
"card_payment": {
"masked_card_number": "1232*********656",
"approval_code": "0001",
"response_code": "0023",
"response_message": "Sukses Transaction"
}
}
Credit Card Notification Explanation
ParameterTypeMandatoryDescription
order.invoice_numberstringMandatorySame as the request that merchant sent on the payment initiation
order.amountnumberMandatorySame as the request that merchant sent on the payment initiation
transaction.statusstringMandatoryUse this status to set transaction status on your side
Possible value: SUCCESS, FAILED
transaction.datestringMandatoryThe transaction date in UTC + 0
transaction.original_request_idstringOptionalThe request ID that merchant sent on the payment initiation
service.idstringOptionalThe service ID from Jokul
acquirer.idstringOptionalThe acquirer that processed the transaction
channel.idstringOptionalThe payment channel from Jokul
card_payment.masked_card_numberstringOptionalThe masked card number that charged for this transaction
card_payment.approval_codestringOptionalAcquirer approval code for this transaction
card_payment.response_codestringOptionalJokul / Acquirer response code
Possible value: see here
card_payment.response_messagestringOptionalJokul / Acquirer response code
Possible value: see here

Online to Offline (O2O)

Once the customers finish the payment, Jokul will send the notification to your defined Notification URL. Here is the sample notification that Jokul will send to merchant's server:

TypeValue
HTTP MethodPOST

Here is the sample of notification request header:

Client-Id: MCH-0001-10791114622547
Request-Id: 354206b9-6770-4c36-9ad8-602d66207b07
Request-Timestamp: 2020-08-11T08:45:42Z
Signature: HMACSHA256=vl9DBTX5KhEiXmnpOD0TSm8PYQknuHPdyHSTSc3W6Ps=
Request Header Explanation
ParameterDescription
Client-IdClient ID you retrieved from Jokul Back Office
Request-IdUnique random string (max 128 characters) that generated by Jokul to make sure no duplicate notification
Request-TimestampTime Stamp request on UTC time in ISO8601 format
SignatureVerify the Signature to ensure the Notification Authenticity coming from Jokul. Please refer to this section

Here is the sample of notification request body:

{
"service": {
"id": "ONLINE_TO_OFFLINE"
},
"acquirer": {
"id": "ALFA"
},
"channel": {
"id": "ONLINE_TO_OFFLINE_ALFA"
},
"transaction": {
"status": "SUCCESS",
"date": "2021-08-12T07:06:28Z",
"original_request_id": "5b8e438f-fac1-4103-9e0e-ebfdc38b5acb"
},
"order": {
"invoice_number": "INV-20210125-0001",
"amount": 150000
},
"online_to_offline_info": {
"payment_code": "73"
},
"online_to_offline_payment": {
"identifier": [
{
"name": "AGENT_ID",
"value": "ALFAMART"
},
{
"name": "AGENT_STORE_ID",
"value": "store"
},
{
"name": "AGENT_TRX_ID",
"value": "1246"
}
]
}
}
Alfa O2O Notification Explanation
ParameterTypeMandatoryDescription
service.idstringOptionalThe service that is used for the transaction
acquirer.idstringOptionalThe acquirer that processed the transaction
channel.idstringOptionalThe channel of the transaction
transaction.statusstringMandatoryThe transaction status to be use to update the status on merchant side
Possible value: SUCCESS since O2O only notify when payment is success
transaction.datestringOptionalThe date when the transaction is completed by the customer in ISO 8601 format (UTC + 0)
transaction.original_request_idstringOptionalThe request ID that sent when initiate the payment
order.invoice_numberstringMandatoryThe invoice number that sent when initate the payment
order.amountstringMandatoryThe amount of the transaction
online_to_offline_info.
payment_code
stringOptionalThe payment code number that used for the transaction
online_to_offline_payment.identifierarrayOptionalList of transaction identifier that coming from the acquiring. Merchant can save these data for reference

Direct Debit

Once the payment process is finished, Jokul will send notify to defined Notification URL. Here is the sample notification that Jokul will send to merchant's server:

TypeValue
HTTP MethodPOST

Here is the sample of notification request header:

Client-Id: MCH-0001-10791114622547
Request-Id: af0fa6bf-5295-42ff-9291-8dfd51976bf0
Request-Timestamp: 2020-08-11T08:45:42Z
Signature: HMACSHA256=vl9DBTX5KhEiXmnpOD0TSm8PYQknuHPdyHSTSc3W6Ps=
Request Header Explanation
ParameterDescription
Client-IdClient ID you retrieved from Jokul Back Office
Request-IdUnique random string (max 128 characters) that generated by Jokul to make sure no duplicate notification
Request-TimestampTime Stamp request on UTC time in ISO8601 format
SignatureVerify the Signature to ensure the Notification Authenticity coming from Jokul. Please refer to this section

Here is the sample of notification request body:

{
"order": {
"invoice_number": "INV-20210118-0001",
"amount": 90000
},
"transaction": {
"status": "SUCCESS",
"date": "2021-02-17T16:33:26.362464",
"original_request_id": "b6a465ea-bb65-48b2-a22b-3e8fb51cf22e"
},
"service": {
"id": "DIRECT_DEBIT"
},
"acquirer": {
"id": "BRI"
},
"channel": {
"id": "DIRECT_DEBIT_BRI"
},
"card_payment": {
"masked_card_number": "************8232",
"response_code": "0000",
"response_message": "SUCCESS",
"payment_id": "510119432113"
}
}
Direct Debit Notification Explanation
ParameterTypeMandatoryDescription
order.invoice_numberstringMandatorySame as the request that merchant sent on the payment initiation
order.amountnumberMandatorySame as the request that merchant sent on the payment initiation
transaction.statusstringMandatoryUse this status to set transaction status on your side
Possible value: SUCCESS, FAILED
transaction.datestringMandatoryThe transaction date in UTC + 0
transaction.original_request_idstringOptionalThe request ID that merchant sent on the payment initiation
service.idstringOptionalThe service ID from Jokul
acquirer.idstringOptionalThe acquirer that processed the transaction
channel.idstringOptionalThe payment channel from Jokul
card_payment.masked_card_numberstringOptionalThe masked card number that charged for this transaction
card_payment.approval_codestringOptionalAcquirer approval code for this transaction
card_payment.response_codestringOptionalJokul / Acquirer response code
Possible value: see here
card_payment.response_messagestringOptionalJokul / Acquirer response code
Possible value: see here

Responding to HTTP Notification

Your Notification URL must response with HTTP status 2xx to confirm the transaction notification is received. The simplest one is to response with 200.

Retry Notification

In case your Notification URL didn't response our Notification with 2xx then we will attempt to deliver your HTTP Notification 6 times with exponential backoff between each interval and will stop retrying until we have received response from your server or there is still no response yet.

Retry NumberInterval (from previous attempts)Internal (from original attempts)
115 mins15 mins
245 mins1 hours
32 hours3 hours
43 hours6 hours
56 hours12 hours
612 hours24 hours

What's next?

Learn more about the best practice on how to handling the HTTP Notification on your side here.