In this section, you will find everything you need to manage the various entry points that your application will receive during and after an Axepta BNP Paribas Online payment.
You will learn:
Table of Contents
When initializing the payment, you must provide a URLs object:
urls{
"return":"https://myProcessingServer.net/myApi/success.php?transId=95330876-67ae-4949-a11c-b9a29257831b",
"cancel":"https://myProcessingServer.net/myApi/cancel.php?transId=95330876-67ae-4949-a11c-b9a29257831b",
"webhook":"https://myBackOfficeServer.net/webhook.php"
} |
|
One of these two URLs (return or cancel) will be called at the end of the transaction processing in order to:
When one of these URLs is called, Axepta BNP Paribas Online automatically appends the following parameter : PayId=<paymentId generated by Axepta> - see Integration recommendation
You should include your own identifier in the URLs to link the return call to your internal order. Example of a URL triggered after customer payment validation:
https://myProcessingServer.net/myApi/success.php?transId=95330876-67ae-4949-a11c-b9a29257831b&PayId=b6eae9b16e3343fa90da39d4ee7bf4ad |
When one of these URLs is triggered:
Retrieve the PayId parameter.
Call the API to get the actual transaction status: GET /payments/getByPayId/{payId} - Retrieve payment details by Payment ID
Key fields in the API Response
A successful transaction may return either "00000000" or "0" depending on the payment stage or method. You must check both values to determine success, "00000000" OR "0" |
Examples of summarized responses
{
"amount":{
"value":126,
"currency":"EUR",
"capturedValue":0,
"refundedValue":0
},
"payId":"91a6299a704147bf934aabd79fd1dc5d",
"merchantId":"MY_MERCHANT_ID",
"transId":"Trans361039",
"xId":"b55e68b7e4644a90836ae31effe1fc60",
"refNr":"refNb77254",
"status":"AUTHORIZED",
"responseCode":"00000000",
"responseDescription":"Transaction successful",
"paymentMethods":{
"type":"CARD"
}
} |
{
"amount":{
"value":1200,
"currency":"EUR",
"capturedValue":0,
"refundedValue":0
},
"payId":"09526745fa704e9c8584dbe893c31f99",
"merchantId":"MY_MERCHANT_ID",
"transId":"1230861007",
"xId":"2781d7d379e5449e9717c901ba6f9ff7",
"refNr":"Q1ovVxioaZ6n",
"status":"CAPTURE_REQUEST",
"responseCode":"0",
"responseDescription":"REQUEST",
"paymentMethods":{
"type":"CARD"
}
} |
At the end of transaction processing, Axepta BNP Paribas Online notifies the merchant website of the final transaction result.
The webhook notification is the only reliable way to be informed of transaction completion.
It is mandatory for the merchant system to process webhook calls.
It is sent via an HTTP REST call to the webhook URL provided during payment initialization.
It is sent even if the customer:
After each asynchronous payment processing completion
If the endpoint is unavailable, the notification is retried up to 8 times
Attempt | Delay | Time after 1st notification |
|---|---|---|
0 | Instantaneous | 0 |
1 | 00:01 h | 00:01 h |
2 | 00:08 h | 00:09 h |
3 | 00:27 h | 00:36 h |
4 | 01:04 h | 01:40 h |
5 | 02:05 h | 03:45 h |
6 | 03:36 h | 07:21 h |
7 | 05:43 h | 13:04 h |
8 | 08:32 h | 21:36 h |
Important: Never finalize an order based solely on the Return URL. Always rely on the webhook as the source of truth. |
Provided Fields
Example
{
"merchantId": "YOUR_MERCHANT_ID",
"payId": "91a6299a704147bf934aabd79fd1dc5d",
"transId": "Trans361039",
"xid": "b55e68b7e4644a90836ae31effe1fc60",
"refNr": "refNb77254",
"status": "AUTHORIZED",
"responseCode": "00000000",
"responseDescription": "Transaction successful",
"amount": {
"value": 126,
"currency": "EUR"
},
"paymentMethods": {
"type": "CARD"
},
"creationDate": "2025-10-30T11:27:57Z",
"channel": "ECOM"
}
|
To ensure the authenticity of webhook data, payloads are signed using HMAC-SHA256.
The signature is included in three HTTP headers within the webhook message.
| X-Paygate-Signature-Version | Version of the signature format (currently, v1) |
| X-Paygate-Timestamp | Unix epoch timestamp (seconds since 1970-01-01T00:00:00Z, UTC) |
| X-Paygate-Signature | Signature in the format |
signed_payload = timestamp + "." + raw_json_body
signature = HMAC_SHA256(secret, signed_payload)
secret – HMAC keySignature is encoded 'hex' and the header is set as follows:X-Paygate-Signature: v1=<hex-hmac>To verify the authenticity of the webhook message data:
Extract the data carried by the HTTP headers:
X-Paygate-TimestampX-Paygate-SignatureRetrieve the raw JSON payload (exact binary body)
Compute the HMAC using the extracted data
Merchant Id used : BNP_DEMO_MID
Merchant Id HMAC Key : see Sandbox & Test page
Transaction done the 19th of May, 2026, at 09h23m20sec Paris time (GMT+2)
Headers
{
"Accept-Encoding": "gzip",
"Content-Length": 381,
"Content-Type": "application/json",
"Expect": "100-continue",
"X-Forwarded-Host": "bin.webhookrelay.com",
"X-Forwarded-Proto": "https",
"X-Paygate-Signature": "v1=DF1F4AA6022460A9821832F9B89DF82D92D01B35C80DDDF596E97FF26E0ABB14",
"X-Paygate-Signature-Version": "v1",
"X-Paygate-Timestamp": "1779175402",
"X-Real-Ip": "213.155.65.68"
}
Body
{
"merchantId": "BNP_DEMO_MID",
"payId": "413cef3ff4fd4b08af2245d5a889dbaa",
"transId": "Trans293156",
"xid": "7919a1e81571466ca8f5737d5414f7a4",
"refNr": "refNb81210",
"status": "FAILED",
"responseCode": "22940040",
"responseDescription": "NO RESPONSE",
"amount": {
"value": 460,
"currency": "EUR"},
"paymentMethods": {
"type": "CARD"},
"creationDate": "2026-05-19T07:23:20Z",
"channel": "ECOM"
} |
Webhook Validation:
| Check | Parameter used | Value | Result |
|---|---|---|---|
| Is the signature version equal to v1 | X-Paygate-Signature-Version | v1 | CORRECT |
Is the Timestamp is within ±5 minutes of your local clock ? | X-Paygate-Timestamp | 1779175402 | CORRECT Unix epoch time: 1779175402 Converted to GMT = 07h23m22sec It's between 5 min of transaction date&time (2 sec exactly) |
| Are the signatures identical ? | X-Paygate-Signature | DF1F4AA6022460A9821832F9B89DF82D92D01B35C80DDDF596E97FF26E0ABB14 | CORRECT (see below) |
Signature verification:
Data used for signature: <epoch timestamp value>.<full webhook json body>
Value:
1779175402.{"merchantId": "BNP_DEMO_MID","payId": "413cef3ff4fd4b08af2245d5a889dbaa","transId": "Trans293156","xid": "7919a1e81571466ca8f5737d5414f7a4","refNr": "refNb81210","status": "FAILED","responseCode": "22940040","responseDescription": "NO RESPONSE","amount": {"value": 460,"currency": "EUR"},"paymentMethods": {"type": "CARD"},"creationDate": "2026-05-19T07:23:20Z","channel": "ECOM"}
Computed HMAC-SHA256 with previous value as input, using 6Gp_A!8f)3zZ9K]gb7S?2*tN(yH54[wB key:
df1f4aa6022460a9821832f9b89df82d92d01b35c80dddf596e97ff26e0abb14
Nota: signature verification should be done without case sensitivity
|