Skip to main content
Instead of polling, register an HTTPS endpoint (public host, port 443). We POST an event whenever an order changes status. A webhook URL must be a public https URL on port 443 with a hostname (no IP addresses, no credentials in the URL).

Events and payload

Events: order.pending, order.success, order.error (one per status change, named after the new status). The data object is the order, including amount and currency.

Verify signatures

Verify every request: compute HMAC-SHA256(secret, timestamp + "." + rawBody) as lowercase hex, compare it to the value after v1= in constant time, and reject timestamps older than 5 minutes. Use the raw request body.

Delivery and retries

Respond with any 2xx within 8 seconds. Otherwise we retry with increasing delays (up to 6 attempts over roughly a day). Retries reuse the same event id, so deduplicate on it. Delivery order is not guaranteed; treat the status in the payload as the current state, or fetch the order to confirm.