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: computeHMAC-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 any2xx 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.