Webhook send test vs redeliver: which one replays a real job?
Send test posts a dummy webhook.test payload to a URL you type. Redeliver re-sends a real terminal event and does not use one of the automatic 10 attempts.

Send test never replays real work: it posts a dummy signed webhook.test payload to a URL you type. Redeliver is the one that re-sends a real job or Format run, with a fresh timestamp and signature, and it does not consume one of the automatic 10 attempts.
What is the difference in one table?
Sume documents them as two different actions that you should not substitute for each other. The table lists what each one sends and what it needs.
| Send test | Redeliver | |
|---|---|---|
| Payload | Dummy webhook.test body, no job_id | The real terminal event of that job or run |
| Where you point it | A URL you type | The URL already on the job or run |
| Endpoint | POST /v1/webhooks/test-deliveries (account:write) | POST /v1/jobs/{job_id}/webhook/redeliver (jobs:write) or POST /v1/format-runs/{run_id}/webhook/redeliver (formats:write) |
| Signature | Signed | Fresh timestamp and signature |
| Uses an automatic attempt | Not a real delivery | No |
When should I use Send test?
Use it to prove that your endpoint is reachable, answers quickly and verifies the signature before any real job exists. The dummy body says Sume webhook test. Not a job or Format run., and it is not appended to Requests, so nothing in your job history changes. Because it has no job_id, it cannot exercise your dedupe or your handler for a real result.
When should I use Redeliver?
Use it after a real delivery failed or your receiver was down. Sume re-POSTs that job's real terminal event (job.completed, job.failed or job.canceled). It still works after the automatic attempts are exhausted, because a manual redeliver does not consume one of the automatic 10.
For a Format run, the endpoint re-POSTs the current format.run.terminal receipt and signs it with the same secret, so the fingerprint header is unchanged and your verifier needs no change.
What errors and limits should I expect?
Redeliver never changes the destination: a new URL is a new job. A Format run redeliver returns 409 webhook_not_configured if the run had no webhook_url, and 409 run_not_terminal if it is still running. Treat job_id as the idempotency key on jobs, and request_id or run_id on runs, so a redelivered event is not processed twice.
Delivery is an optimization, not the only recovery path: keep status_url polling available for events that never arrive.
How many automatic attempts come before a manual one?
A job delivery gets up to 10 attempts in total, spaced by a fixed delay (30 seconds by default) rather than exponential backoff, with a 10-second timeout per attempt. A slow endpoint burns that budget and is retried. Run webhooks use the same 10-attempt cap on a different schedule, and the run webhooks page is authoritative for *.run.terminal deliveries.
Delivery status, including the attempt count, is visible on the job object and in job events when available, so check there before deciding to redeliver.
What is a sensible order to try them?
Send test first, to a URL you type, until the endpoint answers 2xx and verifies the signature. Then let a real job deliver. If that delivery ends up failed, fix the cause and use Redeliver on that job or run instead of resubmitting paid work.
Sources
Related posts
More in Developers
- Webhook status OK but output null? Read outcome: degraded
A Sume run webhook can say status OK while output is null. The run completed and billed; outcome is degraded and output_error says why. How to branch on it.
- OpenAI Agents API vs a custom agent API for async runs
OpenAI's Agents API keeps durable sessions; Sume Agent Completions return a 202 receipt to poll or receive by webhook. Where each fits, and how they differ.
- Which MCP server lets Claude Code or Cursor generate video and images?
MCP servers that let Claude Code and Cursor make video and images: Sume, fal, Replicate, Runway, Higgsfield. Endpoints, sign-in, billing, setup.
- Idempotency keys for AI video APIs: retry without paying twice
An idempotency key makes a retried create return the original run or job instead of a second paid one. How Sume's Idempotency-Key works on each API.
Written by Sume