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:
Type | Value |
---|---|
HTTP Method | POST |
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
Parameter | Description |
---|---|
Client-Id | Client ID you retrieved from DOKU Back Office |
Request-Id | Unique random string (max 128 characters) that generated by DOKU to make sure no duplicate notification |
Request-Timestamp | Time Stamp request on UTC time in ISO8601 format |
Signature | Verify the Signature to ensure the Notification Authenticity coming from DOKU. Please refer to this section |
Here is the sample of notification request body:
- BCA VA
- Bank Mandiri VA
- BSI VA
- BRI VA
- BNI VA
- DOKU VA
- CIMB VA
- Permata VA
- Danamon VA
{
"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
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS since VA only notify when payment is success |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | Same as the request that merchant sent on the payment initiation |
order.amount | number | Mandatory | Same as the request that merchant sent on the payment initiation |
virtual_account_info. virtual_account_number | string | Mandatory | The virtual account number that used for the transaction |
virtual_account_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
{
"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"
}
]
}
}
Bank Mandiri VA Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS since VA only notify when payment is success |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | Same as the request that merchant sent on the payment initiation |
order.amount | number | Mandatory | Same as the request that merchant sent on the payment initiation |
virtual_account_info. virtual_account_number | string | Mandatory | The virtual account number that used for the transaction |
virtual_account_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
{
"service": {
"id": "VIRTUAL_ACCOUNT"
},
"acquirer": {
"id": "BANK_SYARIAH_MANDIRI"
},
"channel": {
"id": "VIRTUAL_ACCOUNT_BANK_SYARIAH_MANDIRI"
},
"transaction": {
"status": "SUCCESS",
"date": "2021-01-27T06:00:20Z",
"original_request_id": "d24a5644-6078-4249-8740-4a6dcd92df5a"
},
"order": {
"invoice_number": "INV-20210124-0001",
"amount": 150000
},
"virtual_account_info": {
"virtual_account_number": "6059000000000205"
},
"virtual_account_payment": {
"identifier": [
{
"name": "PAY_TERMINAL_ID",
"value": ""
},
{
"name": "BANK_REFERENCE",
"value": "1232990188"
},
{
"name": "PAY_CHANNEL",
"value": "6019"
}
]
}
}
BSM VA Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS since VA only notify when payment is success |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | Same as the request that merchant sent on the payment initiation |
order.amount | number | Mandatory | Same as the request that merchant sent on the payment initiation |
virtual_account_info. virtual_account_number | string | Mandatory | The virtual account number that used for the transaction |
virtual_account_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
{
"service": {
"id": "VIRTUAL_ACCOUNT"
},
"acquirer": {
"id": "BRI"
},
"channel": {
"id": "VIRTUAL_ACCOUNT_BRI"
},
"transaction": {
"status": "SUCCESS",
"date": "2020-08-11T09:06:18Z",
"original_request_id": "e5a8a8b8-7eab-4be3-91d8-5e2d7ab7cc25"
},
"order": {
"invoice_number": "INV-20210124-0001",
"amount": 150000
},
"virtual_account_info": {
"virtual_account_number": "1236260000000004"
},
"virtual_account_payment": {
"identifier": [
{
"name": "TRANSAKSI_ID",
"value": "127503812"
},
{
"name": "TERMINAL_ID",
"value": "1"
}
]
}
}
BRI VA Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS since VA only notify when payment is success |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | Same as the request that merchant sent on the payment initiation |
order.amount | number | Mandatory | Same as the request that merchant sent on the payment initiation |
virtual_account_info. virtual_account_number | string | Mandatory | The virtual account number that used for the transaction |
virtual_account_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
{
"service": {
"id": "VIRTUAL_ACCOUNT"
},
"acquirer": {
"id": "BNI"
},
"channel": {
"id": "VIRTUAL_ACCOUNT_BNI"
},
"order": {
"invoice_number": "INV-1640337742",
"amount": 20000
},
"virtual_account_info": {
"virtual_account_number": "8803300000000098",
"merchant_unique_reference": "UNIQUE_00003",
"billing_type": "FIXED",
"identifier":[
{
"name": "BILLING_NUMBER",
"value": "3280300000000001234"
}
]
},
"virtual_account_payment": {
"identifier": [
{
"name": "TRX_ID",
"value": "11901640337564039UNIQUE_00003"
},
{
"name": "PAYMENT_NTB",
"value": "228853"
}
]
},
"transaction": {
"status": "SUCCESS",
"date": "2021-12-24T16:23:39Z",
"original_request_id": "456b001e-adc8-4fb8-a976-95831fb61468"
}
}
BNI VA Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | The invoice number that sent when initate the payment |
order.amount | string | Mandatory | The amount of the transaction |
virtual_account_info. virtual_account_number | string | Optional | The virtual account number that used for the transaction |
virtual_account_info. merchant_unique_reference | string | Optional | The virtual account number that used for the transaction |
virtual_account_info. billing_type | string | Optional | The virtual account number that used for the transaction |
virtual_account_info.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference. BILLING_NUMBER (N(19)) : Sent by BNI as payment code (customer will use this and input to payment channel instead of VA Number). This will be sent to merchant in inquiry request as a part of virtual_account_info.identifier object. Only applies for direct inquiry feature |
virtual_account_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference. BILLING_NUMBER (N(19)) : Sent by BNI as payment code (customer will use this and input to payment channel instead of VA Number). This will be sent to merchant in inquiry request as a part of virtual_account_info.identifier object. Only applies for direct inquiry feature |
{
"service": {
"id": "VIRTUAL_ACCOUNT"
},
"acquirer": {
"id": "DOKU"
},
"channel": {
"id": "VIRTUAL_ACCOUNT_DOKU"
},
"transaction": {
"status": "SUCCESS",
"date": "2021-01-22T07:06:28Z",
"original_request_id": "09e0defe-a071-45b3-9feb-ac134374628c"
},
"order": {
"invoice_number": "INV-20210124-0001",
"amount": 150000
},
"virtual_account_info": {
"virtual_account_number": "8000100000000323"
},
"virtual_account_payment": {
"identifier": [
{
"name": "TRACE_NUMBER",
"value": "19832"
},
{
"name": "TRANSACTION_NUMBER",
"value": "d094700e379f0fb3b543e25c77f8e4b3e068f057"
},
{
"name": "HOST_REFERENCE_NUMBER",
"value": ""
}
]
}
}
DOKU VA Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS since VA only notify when payment is success |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | Same as the request that merchant sent on the payment initiation |
order.amount | number | Mandatory | Same as the request that merchant sent on the payment initiation |
virtual_account_info. virtual_account_number | string | Mandatory | The virtual account number that used for the transaction |
virtual_account_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
{
"service": {
"id": "VIRTUAL_ACCOUNT"
},
"acquirer": {
"id": "CIMB"
},
"channel": {
"id": "VIRTUAL_ACCOUNT_BANK_CIMB"
},
"transaction": {
"status": "SUCCESS",
"date": "2020-08-11T09:06:18Z",
"original_request_id": "e5a8a8b8-7eab-4be3-91d8-5e2d7ab7cc25"
},
"order": {
"invoice_number": "INV-20210124-0001",
"amount": 150000
},
"virtual_account_info": {
"virtual_account_number": "1236260000000004"
},
"virtual_account_payment": {
"identifier": [
{
"name": "TRANSAKSI_ID",
"value": "127503812"
},
{
"name": "TERMINAL_ID",
"value": "1"
}
]
}
}
CIMB VA Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: PENDING , SUCCESS , EXPIRED |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | The invoice number that sent when initate the payment |
order.amount | string | Mandatory | The amount of the transaction |
virtual_account_info. virtual_account_number | string | Optional | The virtual account number that used for the transaction |
virtual_account_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
{
"service": {
"id": "VIRTUAL_ACCOUNT"
},
"acquirer": {
"id": "BANK_PERMATA"
},
"channel": {
"id": "VIRTUAL_ACCOUNT_BANK_PERMATA"
},
"transaction": {
"status": "SUCCESS",
"date": "2020-08-11T09:06:18Z",
"original_request_id": "e5a8a8b8-7eab-4be3-91d8-5e2d7ab7cc25"
},
"order": {
"invoice_number": "INV-20210124-0001",
"amount": 150000
},
"virtual_account_info": {
"virtual_account_number": "1236260000000004"
},
"virtual_account_payment": {
"identifier": [
{
"name": "TRANSAKSI_ID",
"value": "127503812"
},
{
"name": "TERMINAL_ID",
"value": "1"
}
]
}
}
CIMB VA Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: PENDING , SUCCESS , EXPIRED |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | The invoice number that sent when initate the payment |
order.amount | string | Mandatory | The amount of the transaction |
virtual_account_info. virtual_account_number | string | Optional | The virtual account number that used for the transaction |
virtual_account_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
{
"acquirer": {
"id": "BANK_DANAMON",
"name": "Bank Danamon"
},
"service": {
"id": "VIRTUAL_ACCOUNT",
"name": "Virtual Account"
},
"channel": {
"id": "VIRTUAL_ACCOUNT_BANK_DANAMON",
"name": "Virtual Account Bank Danamon"
},
"order": {
"invoice_number": "INV-1635748123946513",
"amount": 20000
},
"virtual_account_info": {
"virtual_account_number": "8922600000000063"
},
"virtual_account_payment": {
"reference_number": "AFNGf6wAWrFe2LSmpfXviRXYv7nPK1LOsao9TtLC",
"date": "20211206152845",
"identifier": [
{
"name": "USER_REF_NO",
"value": "AFNGf6wAWrFe2LSmpfXviRXYv7nPK1LOsao9TtLC"
},
{
"name": "PAY_ACCOUNT",
"value": "706913838473"
},
{
"name": "PAY_BANK",
"value": "Danamon"
},
{
"name": "PAY_DESC",
"value": "Payment Simulator for 8922600000000063"
},
{
"name": "PAY_AMOUNT",
"value": "20000"
},
{
"name": "BILL_AMOUNT",
"value": "20000"
}
]
},
"transaction": {
"status": "SUCCESS",
"original_request_id": "b693d940-bd15-4b85-9d02-57844c4039e3",
"date": "2021-12-06T08:28:45Z"
}
}
DANAMON VA Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
service.name | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
acquirer.name | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
channel.name | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | The invoice number that sent when initate the payment |
order.amount | string | Mandatory | The amount of the transaction |
virtual_account_info. virtual_account_number | string | Optional | The virtual account number that used for the transaction |
virtual_account_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
virtual_account_payment.reference_number | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
virtual_account_payment.date | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
transaction.status | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
transaction.original_request_id | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
transaction.date | array | Optional | List 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:
Type | Value |
---|---|
HTTP Method | POST |
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
Parameter | Description |
---|---|
Client-Id | Client ID you retrieved from DOKU Back Office |
Request-Id | Unique random string (max 128 characters) that generated by DOKU to make sure no duplicate notification |
Request-Timestamp | Time Stamp request on UTC time in ISO8601 format |
Signature | Verify 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
Parameter | Type | Mandatory | Description |
---|---|---|---|
order.invoice_number | string | Mandatory | Same as the request that merchant sent on the payment initiation |
order.amount | number | Mandatory | Same as the request that merchant sent on the payment initiation |
customer.id | string | Mandatory | Same as the request that merchant sent on the payment initiation |
customer.name | string | Optional | Same as the request that merchant sent on the payment initiation |
customer.email | string | Optional | Same as the request that merchant sent on the payment initiation |
transaction.type | string | Mandatory | Transaction Type Possible value: SALE, INSTALLMENT, AUTHORIZE, MOTO |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS, FAILED |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
authorize_id | string | Optional | authorize_id used to capture transaction in Authorize Capture transaction |
card_payment.masked_card_number | string | Optional | The masked card number that charged for this transaction |
card_payment.approval_code | string | Optional | Acquirer approval code for this transaction |
card_payment.response_code | string | Optional | DOKU / Acquirer response code Possible value: see here |
card_payment.response_message | string | Optional | DOKU / Acquirer response code Possible value: see here |
card_payment.issuer | string | Optional | Card 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:
Type | Value |
---|---|
HTTP Method | POST |
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
Parameter | Description |
---|---|
Client-Id | Client ID you retrieved from DOKU Back Office |
Request-Id | Unique random string (max 128 characters) that generated by DOKU to make sure no duplicate notification |
Request-Timestamp | Time Stamp request on UTC time in ISO8601 format |
Signature | Verify the Signature to ensure the Notification Authenticity coming from DOKU. Please refer to this section |
Here is the sample of notification request body:
- Alfa Group
- Alfa Group for Insurance
- Indomaret
{
"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
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS since O2O only notify when payment is success |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | The invoice number that sent when initate the payment |
order.amount | string | Mandatory | The amount of the transaction |
online_to_offline_info. payment_code | string | Mandatory | The payment code number that used for the transaction |
online_to_offline_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
{
"service": {
"id": "ONLINE_TO_OFFLINE"
},
"acquirer": {
"id": "ALFA"
},
"channel": {
"id": "ONLINE_TO_OFFLINE_ALFA"
},
"order": {
"invoice_number": "INV-20210125-0001",
"amount": 150000
},
"transaction": {
"status": "SUCCESS",
"date": "2021-01-22T07:06:28Z",
"original_request_id": "2103"
},
"online_to_offline_info": {
"payment_code": "8896512345678123"
},
"online_to_offline_payment": {
"identifier": [
{
"name": "AGENT_ID",
"value": "100001"
},
{
"name": "AGENT_STORE_ID",
"value": "10000232"
},
{
"name": "AGENT_TRX_ID",
"value": "c1aa04bf421e5b38c3d18933e9994d3f289def65"
}
]
},
"additional_info": {
"insurance_info": {
"policy_type": "Dana Pendidikan",
"policy_number": "9090901234",
"policy_account_name": "Andreas",
"policy_status": "aktif",
"bill_due_date": "21 May 2021"
}
}
}
Alfa for Insurance Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS since O2O only notify when payment is success |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | The invoice number that sent when initate the payment |
order.amount | string | Mandatory | The amount of the transaction |
online_to_offline_info. payment_code | string | Mandatory | The payment code number that used for the transaction |
online_to_offline_payment.identifier | array | Optional | Same as the inquiry response |
additional_info | JSON | Optional | Same as the additional_info from the request |
{
"service": {
"id": "ONLINE_TO_OFFLINE"
},
"acquirer": {
"id": "INDOMARET"
},
"channel": {
"id": "ONLINE_TO_OFFLINE_INDOMARET"
},
"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": "INDOMARET"
},
{
"name": "AGENT_STORE_ID",
"value": "store"
},
{
"name": "AGENT_TRX_ID",
"value": "1246"
}
]
}
}
Alfa O2O Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS since O2O only notify when payment is success |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
order.invoice_number | string | Mandatory | The invoice number that sent when initate the payment |
order.amount | string | Mandatory | The amount of the transaction |
online_to_offline_info. payment_code | string | Mandatory | The payment code number that used for the transaction |
online_to_offline_payment.identifier | array | Optional | List 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:
Type | Value |
---|---|
HTTP Method | POST |
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
Parameter | Description |
---|---|
Client-Id | Client ID you retrieved from DOKU Back Office |
Request-Id | Unique random string (max 128 characters) that generated by DOKU to make sure no duplicate notification |
Request-Timestamp | Time Stamp request on UTC time in ISO8601 format |
Signature | Verify the Signature to ensure the Notification Authenticity coming from DOKU. Please refer to this section |
- ShopeePay
- OVO Open API
{
"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
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
order.invoice_number | string | Mandatory | The invoice number that sent when initate the payment |
order.amount | string | Mandatory | The amount of the transaction |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS, FAILED |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
shopeepay_configuration. merchant_ext_id | string | Optional | The credential from ShopeePay |
shopeepay_configuration. store_ext_id | string | Optional | The credential from ShopeePay |
shopeepay_payment. transaction_status | string | Optional | The status code from ShopeePay Possible value: 3 for success, 4 for failed |
shopeepay_payment. transaction_message | string | Optional | The status message from ShopeePay Possible value: SUCCESS, FAILED |
shopeepay_payment.identifier | array | Optional | List of transaction identifier that coming from the acquiring. Merchant can save these data for reference |
DOKU OVO Open API will publish 3 scenarios that are in the process before payment to after payment. Here are the cases that will be published :
- Binding
- Payment
- Refund
Binding
{
"service":{
"id":"EMONEY"
},
"acquirer":{
"id":"OVO"
},
"channel":{
"id":"EMONEY_OVO"
},
"customer":{
"id":"123123123",
"name":"Joko",
"email":"joko@gmail.com",
"phone":"081287458232",
"additional_info":"Test"
},
"wallet": {
"issuer": "OVO",
"token_id": "410d3bce942991550d81f20171234df3",
"masked_phone_number": "****0621",
"status":"SUCCESS"
}
}
OVO Open API - Binding E-Money Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | EMONEY Service |
acquirer.id | string | Mandatory | Partner that process this transaction |
channel.id | string | Mandatory | EMONEY OVO Channel |
customer.id | string | Mandatory | Merchant customer ID |
customer.name | string | Optional | Customer name that sent when initate the payment |
customer.email | string | Optional | Customer email that sent when initate the payment |
customer.phone | string | Optional | Customer phone that sent when initate the payment |
customer.additional_info | string | Mandatory | Customer additional_info that sent when initate the payment |
wallet.issuer | string | Mandatory | Wallet issuer that receive on API Get List Token OVO Response |
wallet.token_id | string | Mandatory | Wallet token ID that receive on API Get List Token OVO Response |
wallet.masked_phone_number | string | Mandatory | Wallet Masked Phone Number that receive on API Get List Token OVO Response |
wallet.status | string | Mandatory | Wallet Status |
Payment
{
"service":{
"id":"EMONEY"
},
"acquirer":{
"id":"OVO"
},
"channel":{
"id":"EMONEY_OVO"
},
"customer":{
"id":"123123123",
"name":"Joko",
"email":"joko@gmail.com",
"phone":"081287458232",
"additional_info":"Test"
},
"order":{
"invoice_number":"INV-20210124-0001",
"amount":200000
},
"transaction":{
"status":"SUCCESS",
"date":"2021-06-11T02:17:59Z",
"original_request_id":"4bb5232-3fe6-47a5-b0b0-d0fc3c6b5fdb"
},
"ovo_payment": {
"ovo_id":"08227631610000",
"cash_used": 19000,
"point_used": 1000,
"response_code":OVO123213,
"response_message":Blablabla
},
"additional_info":{
"message":"no additional info",
"test": "test"
}
}
OVO Open API - Payment E-Money Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | EMONEY Service |
acquirer.id | string | Mandatory | Partner that process this transaction |
channel.id | string | Mandatory | EMONEY OVO Channel |
customer.id | string | Mandatory | Merchant customer ID |
customer.name | string | Optional | Customer name that sent when initate the payment |
customer.email | string | Optional | Customer email that sent when initate the payment |
customer.phone | string | Optional | Customer phone that sent when initate the payment |
customer.additional_info | string | Optional | Customer additional_info that sent when initate the payment |
order.invoice_number | string | Mandatory | Merchant transaction id unique per client id |
order.amount | string | Mandatory | Total amount in IDR |
transaction.status | string | Mandatory | Status of transaction Possible value : SUCCESS, FAILED |
transaction.date | string | Mandatory | Transaction requested to Bank on UTC time in ISO8601 format |
transaction.original_request_id | string | Mandatory | Request ID to DOKU API when generate payment / refund |
transaction.message | string | Mandatory | Transaction message |
additional_info.message | string | Mandatory | Additional info message |
additional_info.test | string | Mandatory | Additional info test |
Refund
{
"service":{
"id":"EMONEY"
},
"acquirer":{
"id":"OVO"
},
"channel":{
"id":"EMONEY_OVO"
},
"customer":{
"id":"123123123"
},
"order":{
"invoice_number":"INV-20210124-0001"
},
"transaction":{
"status":"REFUNDED",
"date":"2021-06-11T02:17:59Z",
"original_request_id":"4bb5232-3fe6-47a5-b0b0-d0fc3c6b5fdb"
},
"ovo_payment": {
"ovo_id":"08227631610000"
},
"refund": {
"id": "864271549283077864271549287589",
"amount": 6000,
"ovo_cash": 5000,
"ovo_point": 1000,
"reason": "Cancel Order",
"response_code": OVO123213,
"response_message": Blablabla
},
"additional_info":{
"message":"no additional info",
"test":"test"
}
}
OVO Open API - Refund E-Money Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | EMONEY Service |
acquirer.id | string | Mandatory | Partner that process this transaction |
channel.id | string | Mandatory | EMONEY OVO Channel |
customer.id | string | Mandatory | Merchant customer ID |
order.invoice_number | string | Mandatory | Merchant transaction id unique per client id |
transaction.status | string | Mandatory | Status of transaction Possible value : REFUNDED, FAILED |
transaction.date | string | Mandatory | Transaction requested to Bank on UTC time in ISO8601 format |
transaction.original_request_id | string | Mandatory | Request ID to DOKU API when generate payment / refund |
ovo_payment.ovo_id | string | Mandatory | OVO account |
refund.id | string | Compulsory | Mandatory for refund |
refund.amount | string | Compulsory | Refund Amount |
refund.ovo_id | string | Compulsory | OVO account |
refund.ovo_cash | string | Compulsory | OVO cash refunded |
refund.reason | string | Compulsory | Refund reason |
refund.response_code | string | Optional | Failed response code |
refund.message | string | Optional | Failed response message |
additional_info.message | string | Optional | Return full additional info when request payment |
additional_info.test | string | Mandatory | Additional info test |
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:
Type | Value |
---|---|
HTTP Method | POST |
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
Parameter | Description |
---|---|
Client-Id | Client ID you retrieved from DOKU Back Office |
Request-Id | Unique random string (max 128 characters) that generated by DOKU to make sure no duplicate notification |
Request-Timestamp | Time Stamp request on UTC time in ISO8601 format |
Signature | Verify the Signature to ensure the Notification Authenticity coming from DOKU. Please refer to this section |
Here is the sample of notification request body:
- BRI
{
"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
Parameter | Type | Mandatory | Description |
---|---|---|---|
order.invoice_number | string | Mandatory | Same as the request that merchant sent on the payment initiation |
order.amount | number | Mandatory | Same as the request that merchant sent on the payment initiation |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS, FAILED |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
card_payment.masked_card_number | string | Optional | The masked card number that charged for this transaction |
card_payment.approval_code | string | Optional | Acquirer approval code for this transaction |
card_payment.response_code | string | Optional | DOKU / Acquirer response code Possible value: see here |
card_payment.response_message | string | Optional | DOKU / Acquirer response code Possible value: see here |
{
"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": "BANK_CIMB"
},
"channel": {
"id": "DIRECT_DEBIT_CIMB"
},
"card_payment": {
"masked_card_number": "************8232",
"response_code": "0000",
"response_message": "SUCCESS",
"payment_id": "510119432113"
}
}
Direct Debit Notification Explanation
Parameter | Type | Mandatory | Description |
---|---|---|---|
order.invoice_number | string | Mandatory | Same as the request that merchant sent on the payment initiation |
order.amount | number | Mandatory | Same as the request that merchant sent on the payment initiation |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS, FAILED |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
card_payment.masked_card_number | string | Optional | The masked card number that charged for this transaction |
card_payment.approval_code | string | Optional | Acquirer approval code for this transaction |
card_payment.response_code | string | Optional | DOKU / Acquirer response code Possible value: see here |
card_payment.response_message | string | Optional | DOKU / 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:
Type | Value |
---|---|
HTTP Method | POST |
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
Parameter | Description |
---|---|
Client-Id | Client ID you retrieved from Jokul Back Office |
Request-Id | Unique random string (max 128 characters) that generated by Jokul to make sure no duplicate notification |
Request-Timestamp | Time Stamp request on UTC time in ISO8601 format |
Signature | Verify the Signature to ensure the Notification Authenticity coming from Jokul. Please refer to this section |
Here is the sample of notification request body:
- Akulaku
{
"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
Parameter | Type | Mandatory | Description |
---|---|---|---|
service.id | string | Mandatory | The service that is used for the transaction |
acquirer.id | string | Mandatory | The acquirer that processed the transaction |
channel.id | string | Mandatory | The channel of the transaction |
order.invoice_number | string | Mandatory | Same as the request that merchant sent on the payment initiation |
order.amount | number | Mandatory | Same as the request that merchant sent on the payment initiation |
transaction.status | string | Mandatory | The transaction status to be use to update the status on merchant side Possible value: SUCCESS, FAILED |
transaction.date | string | Mandatory | The date when the transaction is completed by the customer in ISO 8601 format (UTC + 0) |
transaction.original_request_id | string | Mandatory | The request ID that sent when initiate the payment |
payment. merchant_unique_reference | string | Mandatory | The 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 Number | Interval (from previous attempts) | Interval (from original attempts) |
---|---|---|
1 | 15 mins | 15 mins |
2 | 45 mins | 1 hours |
3 | 2 hours | 3 hours |
4 | 3 hours | 6 hours |
5 | 6 hours | 12 hours |
6 | 12 hours | 24 hours |
7 | 24 hours (1 day) | 48 hours (2 days) |
8 | 48 hours (2 days) | 96 hours (4 days) |
9 | 72 hours (3 days) | 168 hours (7 days) |
Manual Retry
If you wish to do manual retry for the notification, follow the steps given below:
- Login to DOKU Back Office
- Go to Tools > HTTP Notification
- Find the notification that you wish to retry
- 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.