wait_timeout_seconds 30 is not a 30-second video
The 30 in wait_timeout_seconds is how long your HTTP request may block, not how long a clip may run. A 30-second video job still needs a poll or webhook.

The 30 in wait_timeout_seconds has nothing to do with clip length. It is a clamp of 0..30 on how long your submit request may block in sync or subscribe mode. A 30-second video is a different 30: the output duration you ask the model for. Sending mode: "sync" for a 30-second Seedance 2.5 clip will most likely return a job id and sync.timed_out: true, and you then poll that job.
Two limits that share a number
The docs name the confusion directly: 30 seconds is a wait budget, not a job duration. Video, avatar-video and face-swap jobs usually do not finish inside it, and Sume recommends async or webhook for any work that can last longer than 30 seconds, which includes most video.
| wait_timeout_seconds | duration | |
|---|---|---|
| What it limits | How long the submit HTTP request blocks | How many seconds of video the model makes |
| Where it lives | mode: "sync" / "subscribe" communication fields | Model field, for example seedance-2.5 accepts 4 to 30 |
| What happens at the limit | Response is still 2xx with a job id; poll next | The request is invalid if outside the model's range |
| Does it change the price | No | Yes, billing follows output seconds |
What a timed-out sync response means
A 2xx still carries the job id: the end of the wait budget is not an admission failure. The envelope has status_url, result_url, events_url, cancel_url and a sync object. sync.timed_out is true when the wait returned before a terminal state, and sync.capacity_exhausted is true when Sume skipped the wait because its waiter budget was full. Then follow next_poll_after_seconds if it is present.
You must not submit a new paid job for the same intent. If you want to retry the submit itself, send the same Idempotency-Key again so the retry returns the original job and does not bill a second one.
What to use instead
Submit with async, store the job id, and poll with backoff. The docs' client-side equivalent of subscribe() is a loop in your own code that can last minutes, because no HTTP request stays open. waitForJob in the TypeScript SDK is that loop. For a push, use mode: "webhook" and keep the status poll as a backup.
One more trap: subscribe is not a stream. It runs the same bounded waiter as sync, and there is no SSE or WebSocket transport on the Developer API today. If you want progress, submit async and read GET /v1/jobs/:id/events, which is a pull snapshot.
What to set instead
Set duration on the generate request, within the range the model's catalog entry lists. Set wait_timeout_seconds only if you want the HTTP call to hold for a terminal state, and understand that a 30-second render will almost never finish inside a 30-second wait once queueing and processing are counted.
The safe default is async: you get a 202 with the envelope and poll URLs at once, then poll status_url until terminal is true. If you use sync or subscribe, a non-terminal response is not a failure. The docs say to poll and not to resubmit, because a resubmit without the same key creates a second job and a second charge.
The mode changes how you learn the outcome. It never changes whether Sume creates a job, what the job costs or how long it takes.
durationsets the clip length.wait_timeout_secondsis clamped to 0..30.- Non-terminal after the wait: poll, do not resubmit.
Sources
Related posts
More in Developers
- waitForJob timeout in the Sume TypeScript SDK: keep the job id
waitForJob waits 20 minutes by default and throws SumeJobTimeoutError without cancelling the render. Catch it, store jobId, and resume later. Sume SDK 0.2.0.
- Wan 3.0 for 30 seconds in Node: submit, poll, save the MP4
A runnable Node 18+ script for Sume's /v1/videos: submit wan-3.0 at 30 seconds, poll with a deadline, stream the MP4 to disk. Price: $1.88 at 480p.
- Wan 3.0 on Alibaba: 300 requests a minute across all regions, planned
Alibaba caps Wan 3.0 at 300 requests per minute across all six regions, so a region switch does not add headroom. How to plan a batch of 30 s jobs.
- Wan 3.0 and Seedance 2.5 auto duration on fal: send seconds on Sume
fal lets Wan 3 pick its own length and Seedance 2.5 accepts auto. On Sume, send an integer duration so the price is known before you submit.
Written by Sume