Base URLs
How a payment works
- Your server creates a checkout with
POST /checkoutand gets back itsid. - Your checkout page submits the payment details to
POST /checkout/{id}. - The page polls
GET /checkout/{id}. While the status ismethodorchallenged, it shows the 3D Secure form the status carries. - The checkout ends as
complete,failedorerrored. Oncomplete, your server has already received the webhook.
Sign your requests
POST /checkout, POST /customer and GET /payment/evidence require an x-hub-signature header. Its value is the hex HMAC-SHA256 digest, keyed with the shared secret, of
- the raw request body, for a
POST - the query string without the leading
?, for aGET
GET, build the query with URLSearchParams and sign params.toString().
Receive the webhook
After a successful charge, the API sends aPOST to the checkout’s webhookURL.
x-hub-signature header carries the HMAC-SHA256 hex digest of the raw body, keyed with the same shared secret. Verify it before you trust the payload.
Reply with any 2xx once the order is recorded. A failed delivery is retried for about two hours, so make your handler idempotent on paymentId. If the order can no longer be fulfilled, reply 409 with { "error": "ORDER_CANNOT_BE_FULFILLED" }. The checkout then ends as errored and the payment is flagged for review.