Retry Policy
Loyalite retries failed webhook deliveries automatically with exponential backoff.
Retry schedule
A delivery is considered failed if:
- Your server returns a non-2xx HTTP status (e.g. 400, 500, 503)
- Your server doesn't respond within 10 seconds (HTTP client timeout)
- A connection error occurs (DNS failure, TLS error, connection refused)
Loyalite makes up to 6 total attempts per delivery:
| Attempt | Delay after previous failure |
|---|---|
| 1 (initial) | Immediate |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
| 5 | 2 hours |
| 6 | 6 hours |
After 6 failed attempts the delivery moves to exhausted status and is no longer retried automatically.
Total time window from first attempt to exhausted: approximately 8 hours 36 minutes.
Delivery statuses
| Status | Meaning |
|---|---|
pending | Waiting to be delivered (initial or after a failure, before next retry) |
success | Your server returned 2xx — delivery complete |
failed | Last attempt failed — waiting for next retry |
exhausted | All 6 attempts failed — no more automatic retries |
Viewing delivery history
In the merchant app, go to Settings → Integrations → Webhooks, tap an endpoint, then View Deliveries. Each delivery row shows:
- Event type
- Delivery timestamp
- HTTP status returned by your server
- Error message (if any)
- Number of attempts
Tap a delivery to see full details including error message and next retry time.
What to do when a delivery is exhausted
- Fix the underlying issue — check your server logs for what caused the failures.
- View the delivery in the merchant app to see the error message and HTTP status.
- The payload is stored in Loyalite's delivery log — you can inspect the event data even after exhaustion.
The merchant app UI does not currently expose manual re-delivery. However, re-delivery is available via the API: POST /merchant/webhooks/deliveries/{deliveryId}/redeliver. For critical integrations, implement idempotent event handling on your server so you can safely re-process any events.
Best practices
Respond quickly. Return 200 immediately and process the event asynchronously in a background job. Long-running handlers risk timing out — the HTTP client timeout is 10 seconds. The delivery worker polls for new deliveries every 10 seconds, so events are typically sent within 10 seconds of occurring.
Make your handler idempotent. Use the id field to detect duplicate deliveries — Loyalite may deliver the same event more than once if retries are in progress when a network error occurs.
Return 200 for events you don't care about. Don't return 400 or 422 for unknown event types — that will trigger retries. Return 200 to acknowledge and discard.
Monitor exhausted deliveries. Set up an alert or periodically check the delivery log for endpoints with high exhausted counts.