The Payments API runs card checkouts. It charges cards, Google Pay and Apple Pay through Azul, runs the 3D Secure flow, and tells your server about each payment with a signed webhook.

Base URLs

How a payment works

  1. Your server creates a checkout with POST /checkout and gets back its id.
  2. Your checkout page submits the payment details to POST /checkout/{id}.
  3. The page polls GET /checkout/{id}. While the status is method or challenged, it shows the 3D Secure form the status carries.
  4. The checkout ends as complete, failed or errored. On complete, 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 a GET
Sign the exact bytes you send. For a GET, build the query with URLSearchParams and sign params.toString().

Receive the webhook

After a successful charge, the API sends a POST to the checkout’s webhookURL.
The 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.