The resolution enum has 8 values, but each Sume model takes 3 or 4
The /v1/videos resolution enum lists 360p to 4K. Wan, Seedance, H3, H3 Max and Omni each take a subset. Check supported_resolutions and what each extreme costs.

The resolution field on POST /v1/videos is an enum of eight values (360p, 480p, 720p, 768p, 1080p, 1K, 2K, 4K), but no video model takes more than four of them. Check your value against supported_resolutions from GET /v1/videos/models before you submit, or the answer is a 400.
Who takes what
The enum is shared across the API, which is why a valid enum value can still be wrong for the model. The sharpest case is MiniMax H3: its native sizes are 480p and 768p, so 720p is not on its list.
Totals below use each model's longest clip at the lowest and highest resolution.
| Model | Resolutions | Longest clip | Lowest total | Highest total |
|---|---|---|---|---|
| wan-3.0 | 480p, 720p, 1080p | 30 s | $1.875 (480p) | $7.50 (1080p) |
| seedance-2.5 (9:16) | 480p, 720p, 1080p | 30 s | $8.06 (480p) | $42.65 (1080p) |
| gemini-omni-flash-1.1 | 360p, 720p, 1080p, 4K | 10 s | $0.375 (360p) | $3.75 (4K) |
| minimax-h3 | 480p, 768p | 15 s | $0.9375 (480p) | $1.125 (768p) |
| minimax-h3-max | 480p, 768p, 1080p | 15 s | $0.9375 (480p) | $3.00 (1080p) |
Check before submit
One function covers resolution and length. It raises early with a message your user can read.
def check(model, res, seconds):
if res not in model["supported_resolutions"]:
raise ValueError(
f"{model['id']}: {res} not in {model['supported_resolutions']}"
)
if seconds not in model["supported_durations"]:
raise ValueError(f"{model['id']}: {seconds} s not supported")
# model = one entry of GET /v1/videos/models -> data[]Gotchas
The 4K spelling is uppercase in the enum and in the Omni pricing key. Image models use a different set (512, 1K, 2K, 4K), so do not share one validator between the two APIs.
Models change: read the live array and cache it for minutes, not months.
Sources
Related posts
More in Developers
- Sume /v1/videos says cancelled, /v1/jobs says canceled: a status map
Two spellings and two vocabularies for the same Sume job: pending to cancelled on /v1/videos, queued to canceled on /v1/jobs. A table and a TypeScript mapping.
- Vidu 24-hour and FLUX 3 signed result links: copy the file first
Vidu result URLs last 24 hours and FLUX 3 signed URLs about 2 hours, or about 10 minutes by another line. Stream the Sume clip to disk and keep the job id.
- Vidu 540p has no Sume value: map Vidu resolution names
Vidu Q4 Preview offers 540p, 720p, 1080p, 2K and 4K. Sume's documented values are 480p, 720p, 768p, 1080p, 1K, 2K and 4K, per model. A lookup that fails loudly.
- Vidu 'Authorization: Token' vs Sume 'Bearer': one HTTP client
Vidu wants 'Authorization: Token <key>'; Alibaba Model Studio and Sume want 'Bearer <key>'. A small header helper for a ported client.
Written by Sume