Sume webhook Send test vs Redeliver: only one replays a real job
Send test posts a dummy webhook.test payload to a URL you type. Redeliver re-sends the real terminal event for one job with a fresh signature. Do not swap them.

Use Redeliver to replay a real job and Send test to check that your endpoint verifies a signature. Sume's webhooks page says they are two different actions: Send test posts a dummy signed webhook.test payload to a URL you type and never replays a real job, while Redeliver re-posts the job's real terminal event with a fresh timestamp and signature.
Side by side
Both need a verifier that accepts only a valid signature, and a non-empty secret.
| Send test | Redeliver | |
|---|---|---|
| Endpoint | POST /v1/webhooks/test-deliveries (account:write) | POST /v1/jobs/{job_id}/webhook/redeliver (jobs:write) |
| Payload | Dummy webhook.test; no job_id | Real job.completed, job.failed or job.canceled |
| Target URL | One you type | The job's original destination; a new URL needs a new job |
| Signature | Signed | Fresh timestamp and signature |
| Counts toward 10 attempts | No | No; works after automatic attempts are used up |
How to use them
Deploy the receiver, press Send test, and confirm that your code returns 2xx for webhook.test without looking for a job_id. When a real delivery is missed, call Redeliver for that job. Treat job_id as the idempotency key on your side, so a second delivery of the same event does nothing.
Delivery is an optimization, not the only recovery path: after ten refused attempts the job still reached its real terminal state, and the status polls remain available. The webhooks page has the details, including the 10-second timeout per attempt.
A receiver that handles both
Your handler should accept both shapes. For webhook.test return 2xx and do nothing else. For job events, store the event durably, keyed by job_id, then return 2xx. If you see the same job_id and event again, return 2xx without repeating work.
Verify the signature before parsing: the timestamp must be inside your tolerance window, and the HMAC is computed over <timestamp>.<raw_body>. During secret rotation the header can carry several sume-v1= entries and any match is valid.
- Verify first, parse second.
- Refuse an empty secret.
- Dedupe on job_id.
Sources
Related posts
More in Developers
- Sume rejects localhost webhook URLs: test locally with a poll fallback
Sume only accepts public HTTPS webhook URLs and rejects localhost and private networks. For local work, poll the job and keep webhooks for a deployed endpoint.
- Tokio JoinSet and Semaphore: eight Sume clips, abort on a 402
Run Sume video jobs from Rust with reqwest, a Tokio Semaphore, and a JoinSet that collects clips as they finish and calls abort_all on a 402.
- TTS language en-US vs en-GB on Sume: regional tags compare by language
For the voice-language check, Sume compares regional tags by primary language, so en-GB on an en-US voice does not trigger the 409, and fil matches tl.
- Live commerce TTS rejects literal text: use transcript_source
Sume's live-commerce TTS takes only transcript_source (a script revision plus sentence IDs) and rejects literal transcript text, even if correct.
Written by Sume