Skip to content
API DocsDocs

Callback Retry Mechanism

How Exirom retries failed webhook callbacks

2 min readUpdated Sep 21, 2026

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

A failed callback is retried up to 11 times. The first retry runs about 5 seconds after the failed delivery; after that, each retry waits twice as long as the previous one, starting at 2 minutes.

AttemptDelay After PreviousCumulative Wait
1 (initial)Immediate0 minutes
Retry 1~5 seconds~5 seconds
Retry 22 minutes2 minutes
Retry 34 minutes6 minutes
Retry 48 minutes14 minutes
Retry 516 minutes30 minutes
Retry 632 minutes~1 hour
Retry 7~1 hour~2 hours
Retry 8~2 hours~4 hours
Retry 9~4.3 hours~8.5 hours
Retry 10~8.5 hours~17 hours
Retry 11~17 hours~1.4 days

Retries are sent by a job that runs every 2 minutes, so each retry can go out up to 2 minutes later than scheduled. If the 11th retry fails, the callback is not retried again — poll the transaction status instead.

#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 OK immediately — do heavy processing asynchronously after returning the response
  • Deduplicate card refunds on original-payment transactionId + signed requestId + transactionStatus; other callbacks use transaction ID + status
  • Implement a polling fallback via GET /v1/payments/card/info/{id} for critical transactions if your endpoint was unavailable (returns declineCode on failure)
  • Always verify the X-Checksum header before processing

For code examples covering each of these patterns, see Webhook Best Practices.

Was this helpful?