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: failed and moderated videos use no credits. What Sume does
Vidu's pricing page says failed generations, moderation rejections included, use no credits. Sume reserves at submit and releases on failure. How to check each.
- Vidu task states mapped onto Sume job statuses in Python
Map Vidu task states (created, queueing, processing, success, failed) to Sume queued, processing, completed and failed so an old poller keeps working.
Written by Sume