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.

4 min readSume
All posts

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.

Delivery behavior from Sume's Webhooks docs, read 2026-10-02.
SettingValue
AttemptsUp to 10 in total
SpacingFixed delay, 30 s by default
Timeout per attempt10 s
Delivery statusespending, 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

All Developers posts

Written by Sume