Sume webhook retried 10 times and stopped: recover the job anyway
Sume tries a webhook up to 10 times, 30 seconds apart, 10s timeout each. After that the job is still terminal. Poll status_url or call redeliver to recover.

When your endpoint refuses ten deliveries, the Sume job is still finished. Only the delivery failed. Sume tries up to 10 times with a fixed 30-second gap and a 10-second timeout per attempt. To recover, read status_url and result_url for the job id you stored, or ask Sume to redeliver the event.
The retry budget
| Setting | Value |
|---|---|
| Attempts | Up to 10 in total |
| Spacing | Fixed, 30s by default (not exponential) |
| Timeout | 10s for each attempt |
| Counts as success | Any 2xx |
Why a slow handler fails
A handler that downloads the video before replying will exceed 10 seconds and be retried, so the same event arrives again while the first one is still running. Store the event, return 204, and do the work in a queue.
Recover without waiting
Delivery is an optimization, not the only way to learn the outcome. Keep a poll in place for jobs that have been open too long:
curl https://api.sume.com/v1/jobs/job_123/status \
-H "Authorization: Bearer $SUME_API_KEY"
curl https://api.sume.com/v1/jobs/job_123/result \
-H "Authorization: Bearer $SUME_API_KEY"Or replay the event
POST /v1/jobs/{job_id}/webhook/redeliver with the jobs:write scope sends the terminal event again with a fresh signature. The job events list also includes webhook.delivery entries, so you can see what Sume tried.
Dedupe on job_id on your side. Redelivery and retries both mean the same event can arrive twice.
A sweep for missed events
Run a small periodic job that lists jobs you submitted with a webhook and have not marked done after a reasonable time. For each one, read GET /v1/jobs/{id}/status. When terminal is true and result_ready is true, fetch the result and mark it done exactly as the webhook handler would.
This makes the webhook an accelerator. If it fails for an hour, the sweep catches up, and your handler stays idempotent by keying on the job id.
Related posts
More in Developers
- Sume webhook Redeliver vs Send test: which one replays a real job?
Send test posts a dummy webhook.test payload to a URL you type. Redeliver re-posts a real job's terminal event with a fresh signature. API routes for both.
- Sume webhook retries: 10 attempts 30 seconds apart, size your downtime
Sume retries a failing webhook up to 10 attempts at a default 30-second spacing, about 4.5 minutes. Past that, redeliver or poll after a publisher outage.
- Sume webhook signature fails? Verify the raw body before JSON.parse
Sume signs HMAC-SHA256 over timestamp.raw_body. Re-serialized JSON changes the bytes and the check fails. Read the raw body first; a Node verifier is included.
- Sume rejects localhost webhook_url: develop locally with polling
Sume webhook URLs must be public HTTPS. localhost, private-network and non-HTTPS URLs are rejected. Develop with polling and Send test, then switch the URL on.
Written by Sume