Redeliver a missed video webhook after a bad deploy: one Sume call
Receiver down when the video finished? POST /v1/jobs/{job_id}/webhook/redeliver re-sends job.completed with a fresh signature. Scope, statuses, pitfalls.

If a Sume video job finished while your webhook receiver was broken, call POST /v1/jobs/{job_id}/webhook/redeliver with a key that has the jobs:write scope. Sume re-POSTs the real terminal event (job.completed, job.failed or job.canceled) with a fresh timestamp and a fresh signature, even after the automatic attempts are used up. It does not count against the automatic ten.
This is the repair step for the most likely migration accident: you shipped a new receiver to replace the one that served your old Sora integration, got the route wrong for an afternoon, and now have finished videos nobody was told about.
Redeliver is not Send test
The dashboard offers two buttons that look alike. **Send test** posts a dummy signed webhook.test payload to a URL you type, with no job_id; it never replays a real job. **Redeliver** works per job and replays the real event. Use Send test to check your signature code; use Redeliver to recover a job.
| Send test | Redeliver | |
|---|---|---|
| API | POST /v1/webhooks/test-deliveries (account:write) | POST /v1/jobs/{job_id}/webhook/redeliver (jobs:write) |
| Payload | Dummy webhook.test body | The job's real terminal event |
| Contains job_id | No | Yes |
| Changes destination URL | You type it | No; a new URL means a new job |
Find what you missed
A job's webhook_delivery status uses six values: pending, delivering, delivered, retrying, failed and exhausted. List your video jobs, keep the ones whose delivery is failed or exhausted, and redeliver each. Events also show a webhook.delivery entry in GET /v1/jobs/{id}/events, which is where to look when you need the attempt history.
Because redelivery can arrive more than once, the receiver must dedupe on job_id. The docs call it your idempotency key. A second delivery of a job you already downloaded should return 2xx and do nothing.
What redeliver cannot fix
The destination is fixed at submit. If the job was created with a wrong callback_url, redelivery goes to the same wrong place. The docs say a new URL is a new job; do not resubmit a paid video to change a callback. Poll the job through GET /v1/jobs/{id}/status and /result instead, and take the artifact from there.
If a signature will not verify on the redelivered event, compare x-sume-webhook-secret-fingerprint with the fingerprint shown next to the secret in the dashboard. Neither side has to send the secret. The fingerprint post walks through it.
A recovery order that avoids double work
- Fix and deploy the receiver first. Confirm it with Send test.
- Query jobs whose webhook delivery is
failedorexhausted. - Redeliver them one at a time and watch the receiver log for each
job_id. - For any job still missing after that, read
GET /v1/jobs/{id}/resultdirectly. - Never resubmit the paid generation just because a callback was lost.
Rate limits and the order of operations
Redelivering many jobs in one burst can run into the same request-volume limits as any other call. The docs say to use retry-after when a 429 carries it. Space the calls out, and let the receiver finish each delivery before sending the next so that a slow database does not turn recovery into a second outage.
Because a redelivered event carries a fresh timestamp, the replay-protection window passes. An event that was originally signed an hour ago arrives signed now. Do not widen your tolerance to make old events verify; ask for redelivery instead.
Sources
Related posts
More in Developers
- Restyle avatar clip captions with source_caption_id, no re-transcribe
To try a second caption look on an avatar video, send source_caption_id instead of the video URL. Sume reuses the word timings. Cost, errors and a worked flow.
- Retry a failed Format create with the same Idempotency-Key
After a 402 or 503 on a Format create, Sume releases the Idempotency-Key. Fix the cause, then retry with the same key instead of minting a new one.
- Rotate the Sume webhook signing secret without dropping a delivery
Upgrade the verifier first, rotate with POST /v1/webhooks/signing-secret/rotate, deploy the new secret inside the 24-hour two-signature window, then confirm it.
- Route Sume run webhooks by event: format, action and agent terminal
Run webhooks use one terminal event per family: action.run.terminal, format.run.terminal, agent.run.terminal. Route on event, then branch on outcome.
Written by Sume