Callback Retry Mechanism
How Exirom retries failed webhook callbacks
Callback Retry Mechanism
Exirom uses webhook callbacks to notify your system of transaction status changes. If a callback delivery fails, the system automatically retries using exponential backoff.
#How It Works
When a transaction reaches a terminal status, Exirom sends an HTTP POST to your configured callback URL. If your endpoint returns a non-2xx response or the request times out, the callback is stored and scheduled for retry.
Only terminal transaction statuses trigger retry storage. Intermediate status updates that fail delivery are not retried.
#Retry Schedule
Retries follow an exponential backoff pattern: each subsequent retry waits twice as long as the previous one, calculated as 2^(attempt-1) x 120 seconds.
| Attempt | Delay After Previous | Cumulative Wait |
|---|---|---|
| 1 (initial) | Immediate | 0 minutes |
| Retry 1 | 2 minutes | 2 minutes |
| Retry 2 | 4 minutes | 6 minutes |
| Retry 3 | 8 minutes | 14 minutes |
| Retry 4 | 16 minutes | 30 minutes |
| Retry 5 | 32 minutes | 62 minutes |
#Scope
The callback retry mechanism applies to all webhook-enabled operations:
- Card payments
- Card payouts
- Card refunds
- APM payments
- APM payouts
#Best Practices
- Respond
200 OKimmediately — do heavy processing asynchronously after returning the response - Deduplicate on
transactionIdto handle callbacks delivered more than once - Implement a polling fallback via
GET /v1/payments/card/status/{id}for critical transactions if your endpoint was unavailable - Always verify the
X-Checksumheader before processing
For code examples covering each of these patterns, see Webhook Best Practices.