Notifications

What are webhooks?

Webhooks are how our platform keeps your system in the loop.

Whenever something important happens in the payment flow (like a successful charge, a refund, a failure, etc.), we send a notification to your configured webhook endpoint. This allows your backend to react instantly and stay in sync with the latest transaction events.

Webhooks are essential for automation. Think of it as our way of giving your system a heads-up — the moment it matters.

How to accept webhooks?

To verify the notification, you need to :

  • Transform the json body into string.
  • Concatenate : string-body+xxx-timestamp
  • Hash the string using HMAC-SHA256 and Secret Key (coding = UTF8)
  • Ensure that the encoded hash in base16 = xxx-signature

Find your Secret Key

You can find your Secret Key needed for the notifications in the Backoffice.

  1. Log into your account.

  2. Navigate to API & Notifications.

  3. If you have more than one merchant account, select the one you are retrieving Secret Key for at the top.

  4. Go to Security and retrieve your key from the Secret Key section.


Example

  • Headers
ParameterValue
xxx-timestamp1639569054
xxx-signature5a938268e15a97a17f465a540ba0b7c05899b342b61e67aa1b3b1ba74d2f61a9
  • JSON notification body
{
  "request_id": "3456789876545678456789765",
  "order_id": "60509208505368000a3dfbd2",
  "transaction_id": "68HGVFT5RTGVU",
  "merchant_order_id": "9J3947DB29D",
  "merchant_contract_id": "489YGF68YGT545678YG",
  "status": "authorization_successful",
  "action_date": "2023-08-12T12:45:48+0000",
  "amount": 118.98,
  "payin_partner": "checkout",
  "payin_transaction_id": "pay_5689IHVFR43456789UYHGVGYU876545678UYG",
  "payin_transaction_description": "APPROVED",
  "authentication_partner": "checkout",
  "authentication_result": "success",
  "risk_assessment_partner": "checkout",
  "risk_assessment_result": "accepted",
  "payment_method": "VISA",
  "capture_total_amount": 0,
  "refund_total_amount": 0,
  "currency": "EUR",
  "is_capturable": true,
  "is_refundable": false,
  "is_cancellable": true,
  "link_interface": "",
  "card_6_digits": "424242",
  "card_4_digits": "4242",
  "card_validity_month": "02",
  "card_validity_year": "25",
  "card_issuer": "",
  "card_country": "GB",
  "merchant_account": "615f3066c67357000ad556e1",
  "token": "072bd9c0b63dde38e2d41e906273d1b59acfe6dea2c3d9a877c8ed7806c2b5eb",
  "is_order_last_transaction": true
}
  • Transforming JSON body intro string
{"request_id":"3456789876545678456789765","order_id":"60509208505368000a3dfbd2","transaction_id":"68HGVFT5RTGVU","merchant_order_id":"9J3947DB29D","merchant_contract_id":"489YGF68YGT545678YG","status":"authorization_successful","action_date":"2023-08-12T12:45:48+0000","amount":118.98,"payin_partner":"checkout","payin_transaction_id":"pay_5689IHVFR43456789UYHGVGYU876545678UYG","payin_transaction_description":"APPROVED","authentication_partner":"checkout","authentication_result":"success","risk_assessment_partner":"checkout","risk_assessment_result":"accepted","payment_method":"VISA","capture_total_amount":0,"refund_total_amount":0,"currency":"EUR","is_capturable":true,"is_refundable":false,"is_cancellable":true,"link_interface":"","card_6_digits":"424242","card_4_digits":"4242","card_validity_month":"02","card_validity_year":"25","card_issuer":"","card_country":"GB","merchant_account":"615f3066c67357000ad556e1","token":"072bd9c0b63dde38e2d41e906273d1b59acfe6dea2c3d9a877c8ed7806c2b5eb","is_order_last_transaction":true}
  • Concatenate string-body+xxx-timestamp
{"request_id":"3456789876545678456789765","order_id":"60509208505368000a3dfbd2","transaction_id":"68HGVFT5RTGVU","merchant_order_id":"9J3947DB29D","merchant_contract_id":"489YGF68YGT545678YG","status":"authorization_successful","action_date":"2023-08-12T12:45:48+0000","amount":118.98,"payin_partner":"checkout","payin_transaction_id":"pay_5689IHVFR43456789UYHGVGYU876545678UYG","payin_transaction_description":"APPROVED","authentication_partner":"checkout","authentication_result":"success","risk_assessment_partner":"checkout","risk_assessment_result":"accepted","payment_method":"VISA","capture_total_amount":0,"refund_total_amount":0,"currency":"EUR","is_capturable":true,"is_refundable":false,"is_cancellable":true,"link_interface":"","card_6_digits":"424242","card_4_digits":"4242","card_validity_month":"02","card_validity_year":"25","card_issuer":"","card_country":"GB","merchant_account":"615f3066c67357000ad556e1","token":"072bd9c0b63dde38e2d41e906273d1b59acfe6dea2c3d9a877c8ed7806c2b5eb","is_order_last_transaction":true}1639569054
  • Hash the previous string using HMAC-SHA256 with SecretKey

    If secret-key=3456789876543235TGY8 , hash= 5a938268e15a97a17f465a540ba0b7c05899b342b61e67aa1b3b1ba74d2f61a9

  • Ensure that xxx-signature value equals the encoded hash in the last step

How to configure webhooks in your account?

You can create webhooks directly in your account as follows:

  1. Log into your merchant account.
  2. On the left-handed sidebar navigate to Integration section.
  3. Select API & notifications
  4. If you have more than one merchant account, select the one you are configuring notifications for at the top.
  5. SelectNotifications.
  6. Click on Add notification to open a configuration section of your webhook.
  7. In this section you can configure your webhook with the following details:
    • Name of your webhook. Useful if you want to create more than one webhook as it will help you to identify it.
    • URL to receive your notification.
    • Triggers. You can select as many triggers as you want within one webhook, although depending on your situation, it could be more useful to have more webhooks, categorized by trigger type.
    • Notify last transaction only. Boolean.
    • Status. Active or Inactive. In case you want to temporarily stop using your webhook(s), you can deactivate instead of removing.

Full list of available webhooks and recommendation

WebhookDescriptionRecommended
Authorization successfulPayment authorization was approved by the issuer.
Capture declinedThe attempt to capture an authorized payment was declined.
Refund declinedThe request to refund a payment was declined.
Route not foundThe request failed because no routing path was found.
Capture successfulFunds were successfully captured from a previously authorized transaction.
Authentication attemptedAn authentication process was initiated by the user.
Authentication declinedThe user's authentication attempt was declined.
Authentication request expiredThe authentication request expired without completion.
Authentication request failedThe authentication request could not be processed due to an error.
Authentication requestedAn authentication request was generated and sent to the user.
Authentication successfulThe user successfully completed authentication.
Authorization cancel declinedThe attempt to cancel an authorization was declined.
Authorization cancel request failedA technical failure occurred while trying to cancel an authorization.
Authorization cancel requestedA request to cancel an authorization was initiated.
Authorization cancel successfulThe authorization was successfully canceled.
Authorization declinedThe authorization attempt was declined by the issuer.
Authorization expiredThe authorization expired before capture.
Authorization failedThe authorization process failed due to a system or network error.
Authorization renewedAn expired or expiring authorization was successfully renewed.
Authorization request expiredThe authorization request expired before being completed.
Authorization request failedA technical failure occurred during the authorization request.
Authorization requestedA payment authorization request was initiated.
Blocked by routerThe transaction was blocked by internal routing or business logic.
Capture request failedThe request to capture funds failed due to a technical issue.
Capture requestedA request to capture previously authorized funds was initiated.
Charged backThe transaction was reversed due to a chargeback by the cardholder.
CreatedA new transaction or object was successfully created.
Credit declinedThe credit (payout) attempt was declined by the recipient’s bank.
Credit request failedA technical issue occurred during the credit request.
Credit requestedA request to credit (send funds) was initiated.
Credit successfulFunds were successfully credited to the recipient.
PaidThe transaction was successfully paid and settled.
Refund request failedA technical error prevented the refund request from being processed.
Refund requestedA refund was requested for a previously settled payment.
Refund successfulThe refund was successfully processed and funds returned to the payer.
Risk assessment approvedThe transaction passed the risk assessment and was approved.
Risk assessment declinedThe transaction failed the risk assessment and was declined.
Risk assessment manual reviewThe transaction was flagged for manual review during risk assessment.
Risk assessment request failedA technical issue occurred during the risk assessment request.
Risk assessment requestedA risk assessment was initiated for the transaction.

Examples

Below you will find some Webhooks samples for the following events: authorization_successful, capture_declined, refund_declined, route_not_found.


{
  "status": "authorization_successful",
  "amount": 35,
  "currency": "USD",
  "merchant_account": "615371bef73714000bc978c5",
  "authentication_partner": "partnername",
  "authentication_result": "accepted",
  "payin_partner": "partnername",
  "risk_assessment_partner": "partnername",
  "risk_assessment_result": null,
  "order_id": "687368f051cc140fa87ed132",
  "customer_zip_code": null,
  "token": "a54c0064c83d35d588a4dbdcd0db386bf86f83940f34b05501149f06bfd7ed2f",
  "is_order_last_transaction": true,
  "card_6_digits": "411111",
  "card_4_digits": "1111",
  "card_issuer": "CONOTOXIA SP. Z O.O",
  "card_country": "PL",
  "card_validity_month": "03",
  "card_validity_year": "29",
  "request_id": "687368f951cc140fa87ed162",
  "transaction_id": "687368f051cc140fa87ed133",
  "merchant_order_id": "b4912b7f-8223-4bdf-80fd-cd292857e8c8:",
  "merchant_contract_id": "662a3d2ec23528a64c1677fb",
  "action_date": "2025-07-13T08:06:17.972Z",
  "payin_transaction_id": "XZZ02e2c592882f594D3FTZFTITW5H63",
  "payin_transaction_description": "Approved or completed successfully",
  "payment_method": "visa",
  "capture_total_amount": 0,
  "refund_total_amount": 0,
  "is_capturable": true,
  "is_refundable": false,
  "is_cancellable": true,
  "link_interface": "https://merchant-sandbox.abcompany.com/brainpower/orders/687368f051cc140fa87ed132"
}
{
  "request_id": "672cc6fe149e8e04ad2baa8a",
  "order_id": "672cc6e1149e8e04ad2ba606",
  "transaction_id": "672cc6e1149e8e04ad2ba608",
  "merchant_order_id": "583b9ed0-c463-4d25-a5d2-c98f0ed3b57c",
  "merchant_contract_id": "66c8a0eafe3f34c573bfa7a4",
  "status": "capture_declined",
  "action_date": "2024-11-07T13:56:14.709Z",
  "amount": 100,
  "payin_partner": "partnername",
  "payin_transaction_id": "993C4FC90B6A4D22B1D4E6F9B8B82FA3",
  "payin_transaction_description": "Validation failure: No primary action specified. Please specify 1 primary action., No valid subscription found for service 'payconiq'.",
  "authentication_partner": null,
  "authentication_result": null,
  "risk_assessment_partner": "partnername",
  "risk_assessment_result": null,
  "payment_method": "payconiq",
  "capture_total_amount": 0,
  "refund_total_amount": 0,
  "currency": "EUR",
  "is_capturable": false,
  "is_refundable": false,
  "is_cancellable": false,
  "link_interface": "https://merchant-sandbox.abcompany.com/brainpower/orders/672cc6e1149e8e04ad2ba606",
  "card_6_digits": null,
  "card_4_digits": null,
  "card_validity_month": null,
  "card_validity_year": null,
  "card_issuer": null,
  "card_country": null,
  "merchant_account": "64abc8a3d2b7f2007e7c30bb",
  "token": null,
  "is_order_last_transaction": true
}
{
  "request_id": "662b74ed9087b43160e6606b",
  "order_id": "662b74d39087b43160e66005",
  "transaction_id": "662b74d39087b43160e66007",
  "merchant_order_id": "560027e8-5429-44bf-abd1-702113435370",
  "merchant_contract_id": "655624f3a89ee731f832ae3a",
  "status": "refund_declined",
  "action_date": "2024-04-26T09:33:34.822Z",
  "amount": 16,
  "payin_partner": "partnername",
  "payin_transaction_id": "pi_3P9l9UD1ZswKcVpZ041WiG4U",
  "payin_transaction_description": null,
  "authentication_partner": "partnername",
  "authentication_result": "attempted",
  "risk_assessment_partner": "partnername",
  "risk_assessment_result": "accepted",
  "payment_method": "cb",
  "capture_total_amount": 16,
  "refund_total_amount": 0,
  "currency": "EUR",
  "is_capturable": false,
  "is_refundable": true,
  "is_cancellable": false,
  "link_interface": "https://merchant-sandbox.abcompany.com/brainpower/orders/662b74d39087b43160e66005",
  "card_6_digits": "400000",
  "card_4_digits": "7726",
  "card_validity_month": "12",
  "card_validity_year": "25",
  "card_issuer": "issuername",
  "card_country": "US",
  "merchant_account": "64abc8a3d2b7f2007e7c30bb",
  "token": "4c341adb52ff58d87fc6f74a9677a83c3abbc2d94c44debaedc246c3a3d5f08a",
  "is_order_last_transaction": true
}
{
  "status": "route_not_found",
  "amount": 13.13,
  "currency": "EUR",
  "merchant_account": "65d700586d4a8d7e7f26d039",
  "authentication_partner": null,
  "authentication_result": null,
  "payin_partner": "partnername",
  "risk_assessment_partner": null,
  "risk_assessment_result": null,
  "order_id": "686689ecdb942acb6dc16b9c",
  "token": "1c75d1abb377c6e94e6ad75eb91b8c622cdb3d4ff1456375a7ea3411224ae189",
  "is_order_last_transaction": true,
  "card_6_digits": "406742",
  "card_4_digits": "9265",
  "card_issuer": "issuername",
  "card_country": "FI",
  "company_result_code": "404000",
  "company_result_description": "route does not exist",
  "card_validity_month": "12",
  "card_validity_year": "34",
  "transaction_id": "686689ecdb942acb6dc16b9d",
  "merchant_order_id": "72c6dccd-9f57-4c23-b23e-0beb0991d455",
  "merchant_contract_id": "65e86095ca5a2f03064b3c0d",
  "action_date": "2025-07-03T13:47:24.615Z",
  "payin_transaction_id": null,
  "payin_transaction_description": null,
  "payment_method": "visa",
  "capture_total_amount": 0,
  "refund_total_amount": 0,
  "is_capturable": false,
  "is_refundable": false,
  "is_cancellable": false,
  "link_interface": "https://merchant-sandbox.abcompany.com/brainpower/orders/686689ecdb942acb6dc16b9c"
}

The headers will contain the xxx-signature parameter and the xxx-timestamp.

Webhook workflow

On the flowchart below you can see the webhook subscription - receive notification workflow with both successful and unsuccessful scenario included.

Notification failure

Sometimes webhooks don’t reach your system. Network hiccups, downtime, or endpoint misconfigurations can all cause delivery failures. To ensure your system doesn’t miss a useful information, we automatically retry sending webhook notifications when delivery fails.

Retry Mechanism

When a notification failure happens, rest assured - we got you covered! After the first failure, the retry mechanism will make another 9 attempts over a period of 12 hours with a descending frequency.


Resending notifications

If all attempts are not successful, you will still be able to resend the notification manually. This will be possibly only after the last retry takes place. The notifications status will remain on Pending until the last retry is done. After that, when unsuccessful, it will reach Failure status and that is when you will be able to resend the notification.


To resend a notification, either right-click on it and select Resend or add a SEND AGAIN column to your view.

Additional information in the webhook

Above, you could see some example webhooks that you receive from us. Those examples present out default webhook setup - default fields that we send. If you need some additional fields being passed in the webhook(s), please reach out to Support.