Skip to main content

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, DOKU will send the notification to your defined Notification URL. Here is the sample notification that DOKU 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 DOKU Back Office
Request-IdUnique random string (max 128 characters) that generated by DOKU 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 DOKU. Please refer to this section

Here is the sample of notification request body:

{
"service": {
"id": "VIRTUAL_ACCOUNT"
},
"acquirer": {
"id": "BCA"
},
"channel": {
"id": "VIRTUAL_ACCOUNT_BCA"
},
"transaction": {
"status": "SUCCESS",
"date": "2021-01-27T03:24:23Z",
"original_request_id": "15022aab-444f-4b04-afa8-ddfce89432ec"
},
"order": {
"invoice_number": "INV-20210124-0001",
"amount": 150000
},
"virtual_account_info": {
"virtual_account_number": "1900600000000046"
},
"virtual_account_payment": {
"identifer": [
{
"name": "REQUEST_ID",
"value": "7892931"
},
{
"name": "REFERENCE",
"value": "6769200"
},
{
"name": "CHANNEL_TYPE",
"value": "6010"
}
]
}
}
BCA VA Notification Explanation
ParameterTypeMandatoryDescription
service.idstringMandatoryThe service that is used for the transaction
acquirer.idstringMandatoryThe acquirer that processed the transaction
channel.idstringMandatoryThe 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.datestringMandatoryThe date when the transaction is completed by the customer in ISO 8601 format (UTC + 0)
transaction.original_request_idstringMandatoryThe request ID that sent when initiate the payment
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
virtual_account_info.
virtual_account_number
stringMandatoryThe 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, DOKU will send notify to defined Notification URL. Here is the sample notification that DOKU 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 DOKU Back Office
Request-IdUnique random string (max 128 characters) that generated by DOKU 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 DOKU. Please refer to this section

Here is the sample of notification request body:

{
"order": {
"invoice_number": "INV-1672986414",
"amount": 90000
},
"customer": {
"id": "W7rbKhPYh76VSHYwHRaGDIbBhgTebgAoWtX",
"name": "Anton Budiman",
"email": "anton@doku.com"
},
"transaction": {
"type": "SALE",
"status": "SUCCESS",
"date": "2023-01-06T06:27:14Z",
"original_request_id": "a438194b-ed79-421a-adb6-062496b08c7b"
},
"service": {
"id": "CREDIT_CARD"
},
"acquirer": {
"id": "BANK_MANDIRI"
},
"channel": {
"id": "CREDIT_CARD"
},
"card_payment": {
"masked_card_number": "557338******1101",
"approval_code": "448998",
"response_code": "00",
"response_message": "PAYMENT APPROVED",
"issuer": "PT. BANK MANDIRI (PERSERO), Tbk"
},
"authorize_id": "16920747459243358",
}
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
customer.idstringMandatorySame as the request that merchant sent on the payment initiation
customer.namestringOptionalSame as the request that merchant sent on the payment initiation
customer.emailstringOptionalSame as the request that merchant sent on the payment initiation
transaction.typestringMandatoryTransaction Type
Possible value: SALE, INSTALLMENT, AUTHORIZE, MOTO
transaction.statusstringMandatoryThe transaction status to be use to update the status on merchant side
Possible value: SUCCESS, FAILED
transaction.datestringMandatoryThe date when the transaction is completed by the customer in ISO 8601 format (UTC + 0)
transaction.original_request_idstringMandatoryThe request ID that sent when initiate the payment
service.idstringMandatoryThe service that is used for the transaction
acquirer.idstringMandatoryThe acquirer that processed the transaction
channel.idstringMandatoryThe channel of the transaction
authorize_idstringOptionalauthorize_id used to capture transaction in
Authorize Capture transaction
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_codestringOptionalDOKU / Acquirer response code
Possible value: see here
card_payment.response_messagestringOptionalDOKU / Acquirer response code
Possible value: see here
card_payment.issuerstringOptionalCard Issuer

Online to Offline (O2O)

Once the customers finish the payment, DOKU will send the notification to your defined Notification URL. Here is the sample notification that DOKU 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 DOKU Back Office
Request-IdUnique random string (max 128 characters) that generated by DOKU 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 DOKU. 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.idstringMandatoryThe service that is used for the transaction
acquirer.idstringMandatoryThe acquirer that processed the transaction
channel.idstringMandatoryThe 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.datestringMandatoryThe date when the transaction is completed by the customer in ISO 8601 format (UTC + 0)
transaction.original_request_idstringMandatoryThe 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
stringMandatoryThe 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

E-Money

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

TypeValue
HTTP MethodPOST

Here is the sample of notification request header:

Client-Id: MCH-0001-10791114622547
Request-Id: 1999b670-4773-495d-9dbd-21cd567495f8
Request-Timestamp: 2021-07-09T02:06:14Z
Signature: HMACSHA256=vl9DBTX5KhEiXmnpOD0TSm8PYQknuHPdyHSTSc3W6Ps=
Request Header Explanation
ParameterDescription
Client-IdClient ID you retrieved from DOKU Back Office
Request-IdUnique random string (max 128 characters) that generated by DOKU 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 DOKU. Please refer to this section
{
"service":{
"id": "EMONEY"
},
"acquirer":{
"id": "SHOPEE_PAY"
},
"channel":{
"id": "EMONEY_SHOPEE_PAY"
},
"order":{
"invoice_number": "INV-20210124-0001",
"amount": 150000
},
"transaction":{
"status": "SUCCESS",
"date": "2021-07-09T02:06:14Z",
"original_request_id": "24bb5232-3fe6-47a5-b0b0-d0fc3c6b5fdb"
},
"shopeepay_configuration":{
"merchant_ext_id": "846609710695590",
"store_ext_id": "99012984"
},
"shopeepay_payment":{
"transaction_status": "3",
"transaction_message": "SUCCESS",
"identifier": [
{
"name": "PAYMENT_REFERENCE_ID",
"value": "INV-20210124-0001"
},
{
"name": "TRANSACTION_SN",
"value": "5928618974087420594542231456745334310931540501886465026193020656"
},
{
"name": "USER_ID_HASH",
"value": "1933182965027045219980555801600298133716162755914500208775934992"
}
]
}
}
ShopeePay E-Money Notification Explanation
ParameterTypeMandatoryDescription
service.idstringMandatoryThe service that is used for the transaction
acquirer.idstringMandatoryThe acquirer that processed the transaction
channel.idstringMandatoryThe channel of the transaction
order.invoice_numberstringMandatoryThe invoice number that sent when initate the payment
order.amountstringMandatoryThe amount of the transaction
transaction.statusstringMandatoryThe transaction status to be use to update the status on merchant side
Possible value: SUCCESS, FAILED
transaction.datestringMandatoryThe date when the transaction is completed by the customer in ISO 8601 format (UTC + 0)
transaction.original_request_idstringMandatoryThe request ID that sent when initiate the payment
shopeepay_configuration.
merchant_ext_id
stringOptionalThe credential from ShopeePay
shopeepay_configuration.
store_ext_id
stringOptionalThe credential from ShopeePay
shopeepay_payment.
transaction_status
stringOptionalThe status code from ShopeePay
Possible value: 3 for success, 4 for failed
shopeepay_payment.
transaction_message
stringOptionalThe status message from ShopeePay
Possible value: SUCCESS, FAILED
shopeepay_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, DOKU will send notification to defined Notification URL. Here is the sample notification that DOKU 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 DOKU Back Office
Request-IdUnique random string (max 128 characters) that generated by DOKU 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 DOKU. 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.statusstringMandatoryThe transaction status to be use to update the status on merchant side
Possible value: SUCCESS, FAILED
transaction.datestringMandatoryThe date when the transaction is completed by the customer in ISO 8601 format (UTC + 0)
transaction.original_request_idstringMandatoryThe request ID that sent when initiate the payment
service.idstringMandatoryThe service that is used for the transaction
acquirer.idstringMandatoryThe acquirer that processed the transaction
channel.idstringMandatoryThe channel of the transaction
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_codestringOptionalDOKU / Acquirer response code
Possible value: see here
card_payment.response_messagestringOptionalDOKU / Acquirer response code
Possible value: see here

Paylater

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

TypeValue
HTTP MethodPOST

Here is the sample of notification request header:

Client-Id: MCH-0001-10791114622547
Request-Id: 450ec2b0-5631-4876-a3ee-33a93ee39daa
Request-Timestamp: 2021-07-07T08:50:43Z
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": "PEER_TO_PEER"
},
"acquirer": {
"id": "AKULAKU"
},
"channel": {
"id": "PEER_TO_PEER_AKULAKU"
},
"order": {
"invoice_number": "INV-20210707-0001",
"amount": 90000
},
"transaction": {
"status": "SUCCESS",
"date": "2021-07-07T08:48:42Z",
"original_request_id": "baec7d95-f30a-4b78-b711-6ebe0ccdf50b"
},
"peer_to_peer_info": {
"virtual_account_number": "2900800000000003",
"created_date": "20200313095850",
"expired_date": "20200313155850",
"status": "SUCCESS",
"merchant_unique_reference": "60123",
"identifier": [
{
"name": "AKULAKU_UNIQUE_REFERENCE",
"value": "BRN-0288-1654748429432TEST-ABC-768"
},
{
"name": "ORDER_ID",
"value": "BRN-0288-1654748429432TEST-ABC-768"
}
]
},
"payment": {
"merchant_unique_reference": "MUR-20210707-0001"
}
}
Akulaku Notification Explanation
ParameterTypeMandatoryDescription
service.idstringMandatoryThe service that is used for the transaction
acquirer.idstringMandatoryThe acquirer that processed the transaction
channel.idstringMandatoryThe channel of the transaction
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.statusstringMandatoryThe transaction status to be use to update the status on merchant side
Possible value: SUCCESS, FAILED
transaction.datestringMandatoryThe date when the transaction is completed by the customer in ISO 8601 format (UTC + 0)
transaction.original_request_idstringMandatoryThe request ID that sent when initiate the payment
payment.
merchant_unique_reference
stringMandatoryThe merchant unique reference that sent when initiate the payment

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)Interval (from original attempts)
115 mins15 mins
245 mins1 hours
32 hours3 hours
43 hours6 hours
56 hours12 hours
612 hours24 hours
724 hours (1 day)48 hours (2 days)
848 hours (2 days)96 hours (4 days)
972 hours (3 days)168 hours (7 days)

Manual Retry

If you wish to do manual retry for the notification, follow the steps given below:

HTTP Notification List
  1. Login to DOKU Back Office
  2. Go to Tools > HTTP Notification
  3. Find the notification that you wish to retry
  4. Click the Plane icon to resend the notification

What's next?

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