Seedance 2.5 clip finished but no webhook: 10 attempts, then redeliver
A seedance-2.5 job can complete while its callback fails. Sume retries 10 times, 30 s apart, 10 s timeout each; then you poll or call redeliver.

If a seedance-2.5 job reached completed but your endpoint never got the callback, the job is fine and the delivery failed. Sume tries up to 10 times, with a fixed 30-second delay and a 10-second timeout per attempt; after that, read the job with GET /v1/jobs/{id}/status or call POST /v1/jobs/{job_id}/webhook/redeliver to re-send the real terminal event with a fresh signature.
Behavior comes from Sume's Webhooks docs and Jobs and results docs, read 2026-10-02.
What are the delivery limits?
Network errors and non-2xx responses are retried until attempts run out. Spacing is fixed, not exponential. A slow endpoint burns the budget, because anything over 10 seconds counts as a failed attempt.
Ten refused attempts leave a failed delivery and a job that still reached its real terminal state.
| Setting | Value |
|---|---|
| Attempts | Up to 10 in total |
| Spacing | Fixed delay, 30 s by default |
| Timeout per attempt | 10 s |
| Delivery statuses | pending, delivering, delivered, retrying, failed, exhausted |
How do I find out what happened?
Read the job: the delivery status, including the attempt count, appears on the job object, and webhook.delivery is one of the events returned by GET /v1/jobs/{id}/events. If the status is failed or exhausted, your endpoint refused or timed out ten times.
Common causes are an endpoint that does slow work before answering, a signature check run against re-serialized JSON, or a URL that is not public HTTPS. Answer 2xx first, then process.
How do I get the callback again?
Call redeliver on the job with jobs:write. It re-POSTs that job's real terminal event with a new timestamp and signature, and it does not use up one of the automatic 10. Redeliver does not change the destination: a new URL means a new job.
Do not resubmit the paid job to get a callback; the original is complete and billed once. Key your receiver on job_id so a redelivery is harmless. The verifier is in Verify a Seedance 2.5 webhook in Python.
To make this routine, log every delivery your endpoint receives with the job_id and a received-at time, and run a periodic poll for jobs older than a few minutes with no logged delivery. That closes the gap without relying on a callback alone.
Sources
Related posts
More in Developers
- Seedance 2.5 first frame plus references in one request: 400
On Sume's Video Router, image_url plus reference_*_urls returns 400 for seedance-2.5. Pick image-to-video or reference-to-video; /v1/videos lets frames win.
- Seedance 2.5 on Sume's Free plan: 1 running, 5 queued, 6 accepted
On the Free plan one Seedance 2.5 job runs at a time and five more can wait. The seventh submit gets 429 queue_full. How to size a batch.
- Seedance 2.5 references: input_references or reference_image_urls?
POST /v1/videos takes frame_images and input_references for seedance-2.5; the Video Router takes image_url and reference_*_urls. The wrong shape gets 400.
- Seedance 2.5 reference audio alone returns 400: add an image
On Sume's Video Router, reference_audio_urls with no reference image or video returns 400. Pair the audio with an image or clip, within 3 audio and 12 total.
Written by Sume