Retries and Replay

How Edesy retries failed webhook deliveries (30 s, 1 m, 2 m, 4 m, 8 m; 6 attempts), how to read the delivery log, and how to replay one or many deliveries.

2 min read

A subscription delivery succeeds when your endpoint returns any 2xx within 5 seconds. Anything else is retried with exponential backoff, 30 seconds, then 1, 2, 4 and 8 minutes, for 6 attempts in all. Every attempt is recorded in the subscription's delivery log, and you can replay a single delivery or every failed one in a time range once your endpoint is fixed.

Retry schedule#

Attempt Sent after the previous one fails by
1 Immediately
2 30 seconds
3 1 minute
4 2 minutes
5 4 minutes
6 8 minutes

After the sixth failure the delivery is marked failed and stays in the log for replay. The target URL is re-validated on every attempt, so an endpoint that now resolves to a private address is refused.

Status callbacks are also retried with backoff, a smaller number of times, and are never allowed to delay the call itself.

Delivery log#

GEThttps://voice-api.edesy.in/v1/webhooks/subscriptions/{id}/deliveries?limit=50
{
  "data": [
    {
      "id": "7c2a9e10-0000-4000-8000-000000000000",
      "subscription_id": "0b9f5d2c-0000-4000-8000-000000000000",
      "event_type": "call.completed",
      "call_sid": "CA_6f1c2d3e-0000-4000-8000-000000000000",
      "external_id": "crm-lead-77812",
      "status": "pending",
      "attempts": 2,
      "max_attempts": 6,
      "response_code": 503,
      "error": "webhook returned status 503",
      "next_retry_at": "2026-10-28T11:21:02Z",
      "created_at": "2026-10-28T11:19:02Z"
    }
  ]
}
status Meaning
pending Waiting for its next attempt
delivered Your endpoint returned 2xx
failed All attempts used

Replay one delivery#

curl -X POST https://voice-api.edesy.in/v1/webhooks/subscriptions/{id}/deliveries/{delivery_id}/replay \
  -H "Authorization: Bearer $EDESY_KEY"

Replay many#

curl -X POST https://voice-api.edesy.in/v1/webhooks/subscriptions/{id}/deliveries/replay \
  -H "Authorization: Bearer $EDESY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "failed", "since": "2026-10-28T00:00:00Z", "until": "2026-10-28T12:00:00Z" }'
Field Description
status Which deliveries to replay, for example failed
since, until RFC 3339 time range

One bulk replay re-queues up to 10,000 deliveries. Replayed events are identical to the originals, so make your handler idempotent: key on event plus data.call_sid.

Checklist when deliveries fail#

  1. Press Test on the subscription (or POST/v1/webhooks/subscriptions/{id}/test) and read the status code.
  2. Make sure the URL is public HTTPS with a valid certificate.
  3. Return 2xx before doing slow work.
  4. Check response_code and error in the delivery log.
  5. Replay the failed range once fixed.
Was this page helpful?