Retry Policy
urelay automatically retries failed webhook deliveries to ensure your application receives every event.
What counts as a failure
A webhook delivery is considered failed if:
- Your endpoint returns a non-2xx HTTP status code (e.g., 500, 503)
- The connection times out (10 second timeout)
- DNS resolution fails
- The connection is refused
A 2xx response (200, 201, 202, 204) is considered successful, regardless of the response body.
Retry schedule
When a delivery fails, urelay retries with increasing delays:
| Attempt | Delay after previous |
|---|---|
| 1st retry | 30 seconds |
| 2nd retry | 2 minutes |
| 3rd retry | 10 minutes |
After 3 failed retries (4 total attempts), the delivery is marked as permanently failed.
Monitoring deliveries
You can view webhook delivery history in the urelay dashboard:
- Go to Webhooks > Delivery History
- See status, response code, latency, and retry count for each delivery
- Filter by webhook endpoint, event type, or status
Troubleshooting
Common failure causes
- Endpoint not reachable: Ensure your URL is publicly accessible and not behind a firewall
- Slow processing: Return
200immediately and process the payload asynchronously. The 10-second timeout is strict. - SSL errors: Ensure your endpoint has a valid SSL certificate if using HTTPS
Testing webhooks
Use the API sandbox in the dashboard to send test events to your webhook endpoint without triggering real messages.
Idempotency
Your webhook handler should be idempotent -- processing the same event twice should produce the same result. Use the message.id or message.guid fields to deduplicate.