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.

4 min readSume
All posts

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.

What a request returns for each duration on seedance-2.5, from Sume's request validation and docs (read 2026-10-02).
durationResultWhere it is decided
3400: at least 4 seconds on the Video Router; "does not support duration 3" on /v1/videosPer-model check against the catalog
4AcceptedLower bound
30AcceptedUpper bound
31400: above the 30-second ceilingSchema 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) == 12

Sources

Related posts

More in Models

All Models posts

Written by Sume