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.

5 min readSume
All posts

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

SettingValue
AttemptsUp to 10 in total
SpacingFixed, 30s by default (not exponential)
Timeout10s for each attempt
Counts as successAny 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

All Developers posts

Written by Sume