Sume run webhook retries: ten attempts span about 3 hours
Ten delivery attempts with 30-second doubling backoff capped at one hour add up to 11,010 seconds before jitter. The timeline, and what to do after exhaustion.

Sume retries a run webhook up to 10 attempts in total. Using the documented backoff of 30 seconds doubling per attempt and capped at one hour, the nine waits between attempts add up to 11,010 seconds, about 3 hours 3 minutes, before jitter, any Retry-After header, and the 10-second timeout of each attempt.
The documented delivery behavior
The run webhooks page gives the delivery table. Success is any 2xx. Each attempt times out after 10 seconds. Redirects are not followed, so a 3xx counts as a failed attempt. After 10 attempts, webhook_delivery.status is exhausted. The backoff is min(max(30s x 2^(attempt-1) with jitter, Retry-After), 1h).
The arithmetic
Ignoring jitter and Retry-After, the wait after each failed attempt is 30 seconds times 2 to the power of the attempt number minus one, capped at 3,600 seconds.
| After attempt | Formula | Wait (s) | Running total (s) |
|---|---|---|---|
| 1 | 30 x 2^0 | 30 | 30 |
| 2 | 30 x 2^1 | 60 | 90 |
| 3 | 30 x 2^2 | 120 | 210 |
| 4 | 30 x 2^3 | 240 | 450 |
| 5 | 30 x 2^4 | 480 | 930 |
| 6 | 30 x 2^5 | 960 | 1,890 |
| 7 | 30 x 2^6 | 1,920 | 3,810 |
| 8 | 30 x 2^7 = 3,840, capped | 3,600 | 7,410 |
| 9 | 30 x 2^8 = 7,680, capped | 3,600 | 11,010 |
What this means for an outage
If your receiver is down for longer than about 3 hours, the delivery can be exhausted even though the run is fine. The docs are explicit that a delivery outcome does not change the run: you have a failed delivery and a run that is still completed. Fetch the receipt from result_url.
A slow endpoint is the quieter risk. Each attempt has a 10-second budget, so a handler that does heavy work before returning a 2xx burns attempts. Record the event, return 2xx, then process.
After exhaustion
For Format runs, Sume documents a redeliver call, POST /v1/format-runs/{run_id}/webhook/redeliver, that needs the formats:write scope and does not use one of the automatic 10. The Redeliver control on the dashboard row works the same way. The page documents this for Format runs specifically, so for an Agent Completion or schedule run, poll status_url or result_url as your backup. A canceled run never delivers a webhook, and a skipped run does not either.
Checklist
The points that matter here, in the order you will hit them:
- Keep
status_urlpolling as a backup for runs that matter. - Dedupe on
request_id; it is stable across retries. - Alert when
webhook_delivery.statusisexhausted. - Do not follow redirects in your own router; Sume will not.
Worst-case time in flight
The 11,010 seconds above counts only the waits. Each attempt can also run for up to 10 seconds before it times out, and there are ten of them, adding at most 100 seconds. The worst case is therefore about 11,110 seconds, or 3 hours 5 minutes 10 seconds, before jitter and any Retry-After value. Retry-After can only lengthen a wait, because the formula takes the maximum of the backoff and the header, and the result is still capped at one hour.
Sources
Related posts
More in Developers
- Sume submit: request_id is the job id you poll (curl, jq)
After an async submit, data.request_id is the id for GET /v1/jobs/:id. error.request_id is for support tickets. A curl and jq check.
- Sume TTS word timestamps to caption cues for a narrated 60-second clip
Ask Sume TTS for timestamps.words, group them into cues and send them to video-captions so no recognition runs. About 25 cents for a 60-second narration.
- Sume TypeScript SDK waitForJob: 20-minute timeout, job keeps billing
How @sume-com/sdk waitForJob polls a generation job, what SumeJobTimeoutError means, and why a client timeout does not cancel or refund the job.
- Webhook endpoint down: redeliver a Sume video job after the retries
Sume retries a job webhook 10 times, 30 seconds apart. If your receiver was down longer, POST /v1/jobs/{id}/webhook/redeliver re-sends the terminal payload.
Written by Sume