v2

latestOpenAPI 3.1.0Proprietary2026-07-3191563.2 KB

Order status callback

When an order reaches a terminal status (delivered, failed, reversed, expired) we POST this event to your callback_url.

Verify authenticity with the X-Faas-Signature header — it's the hex HMAC-SHA256 of the exact raw request body under your webhook secret (the standard Stripe/GitHub signing scheme). Respond 2xx to acknowledge; non-2xx is retried with exponential backoff, then dead-lettered. The body (and signature) are stable across retries.

Delivery constraints. Your endpoint must respond within 5 seconds (connect + headers + body timeout each). HTTP redirects are not followed — the callback_url must be the final destination. A timeout or non-2xx response triggers the retry/dead-letter path exactly as a connection error would; it never blocks order processing.

Secret rotation (rollover). During the grace window after you rotate your webhook secret, this header may carry multiple comma-separated signatures (the new and the previous secret). Treat the header as a comma-separated list and accept the request if any entry matches your secret — so you can switch from the old secret to the new one at any point in the window without dropping a webhook. Outside a rotation it is a single signature, so naive single-value verification keeps working day to day.

postWebhookorderStatus

Headers

X-Faas-Signaturestring required

Hex HMAC-SHA256 of the raw body under your webhook secret. May be a comma-separated list of signatures during a secret-rotation rollover — accept if ANY matches your secret.

Payload

order_idstring uuid required
status'delivered' | 'failed' | 'reversed' | 'expired' required
failure_reasonstring nullable

Why a non-delivered order ended where it did — underpaid / overpaid (amount mismatch → failed, funds reversed), no_memo / wrong_memo (an unmatched payment with a missing / unrecognised memo → failed, funds reversed to the sender), undeliverable (reversed, funds reversed), or expired (no payment within the window). Null on delivered. See Reversals & delivery above for the full meaning of each.

purchase_txstring nullable
reversal_txstring nullable

Example payload

{
  "failure_reason": "undeliverable"
}

Response

Acknowledged. Any 2xx stops retries.