Seedance 2.5 duration 3 seconds: 400 error, the minimum is 4
Seedance 2.5 on Sume takes 4 to 30 seconds. A 3-second request returns 400; a 31-second one is refused too. Here are the messages and the shorter-clip options.

A duration of 3 on seedance-2.5 returns a 400, because the model's range on Sume is 4 to 30 whole seconds. On the Video Router the message reads "model seedance-2.5 accepts a duration of at least 4 seconds."; on POST /v1/videos it reads "seedance-2.5 does not support duration 3." Nothing is submitted, so nothing is charged.
The range is stated in Video Router ("seedance-2.5 accepts 4-30s") and the OpenAPI description of duration in the API reference. ByteDance's launch post gives the upper figure as up to 30 seconds per generation (read 2026-10-02).
Which durations does seedance-2.5 accept?
Integers from 4 to 30. The catalog lists them one by one in supported_durations, so a non-integer such as 7.5 is not a valid value either. duration_seconds is an alias of duration on the Video Router; if you send both they must match.
| duration | Result | Where it is decided |
|---|---|---|
| 3 | 400: at least 4 seconds on the Video Router; "does not support duration 3" on /v1/videos | Per-model check against the catalog |
| 4 | Accepted | Lower bound |
| 30 | Accepted | Upper bound |
| 31 | 400: above the 30-second ceiling | Schema maximum on the Video Router; catalog check on /v1/videos |
How do I get a clip shorter than 4 seconds?
Not from Seedance 2.5 directly. The Video Router docs list wan-3.0 at 2 to 30 seconds, so it is the catalog option when you need 2 or 3 seconds. seedance-2-fast and seedance-2-mini also start at 4. The other way is to generate the 4-second minimum and use the first part of it, which costs the 4 seconds you request.
Check the field list before you hard-code: GET /v1/video-router/models returns capabilities for each row, and the docs tell you to read that rather than assume one envelope.
How should I handle the error in code?
Clamp before you submit. A short helper that clamps to the model's range turns a 400 into a deliberate choice, and an unattended pipeline stops paying attention to a retry that can never succeed.
Do not retry a 400 with the same body: it fails identically. Fix the value and send a new request; with an Idempotency-Key, a changed body under the same key returns a conflict, so change the key when you change the body.
def clamp_seedance_25_duration(seconds: float) -> int:
# seedance-2.5: whole seconds, 4 to 30 (Sume Video Router docs)
return max(4, min(30, round(seconds)))
assert clamp_seedance_25_duration(3) == 4
assert clamp_seedance_25_duration(45) == 30
assert clamp_seedance_25_duration(12.4) == 12Sources
Related posts
More in Models
- Seedance 2.5 on Jimeng or Doubao Pro: where the API fits
ByteDance launched Seedance 2.5 on Jimeng AI and Doubao Pro. If you need it from code, here is what Sume lists and what the vendor page says.
- Seedance 2.5 native 4K: the press claim and what Sume accepts
A June report said Seedance 2.5 makes native 4K. Sume lists 480p, 720p and 1080p for seedance-2.5 and returns 400 for a 4K request. What to send instead.
- Seedance 2.5 one-take prompt: one continuous shot, 30 seconds
Seed's Seedance 2.5 one-take prompts ask for a single continuous take with no cuts. Write the camera path in beats and send it to Sume as a 30-second job.
- Seedance 2.5 adds subtitles or music I did not ask for: fixes
Seed says Seedance 2.5 minimises stray subtitles and music. On Sume, generate_audio false drops the audio track; subtitles need prompt wording.
Written by Sume