768p on seedance-2.5 returns 400: use 720p, or pin a MiniMax id
Sume's resolution list is per model. seedance-2.5 takes 480p, 720p and 1080p; 768p exists on the MiniMax H3 ids and H3 Max Recast, and kling-3 has no 480p.

A resolution value the model does not list fails with HTTP 400 unsupported_capability and the text '<model> does not support resolution <value>.' on Sume. seedance-2.5 reports 480p, 720p and 1080p, so 768p is rejected; minimax-h3 reports 480p and 768p, so 720p is rejected; and kling-3 reports 720p and 1080p, so 480p is rejected. Nothing is billed for a rejected request.
This comes from the catalog in the Video Router docs and the Video generation docs, which say 768p is first-class on MiniMax H3 rather than a rounding of 720p. New vendor launches tend to publish their own resolution names, so expect to hit this when you port a request.
The ladder per id
The table lists the values each id reports today. The exact set is also in supported_resolutions on GET /v1/videos/models.
minimax-h3-max adds 1080p, described in the docs as a latent refinement from native 768p, and gemini-omni-flash-1.1 is the only one with 360p and 4K.
| Sume id | Resolutions |
|---|---|
| seedance-2.5, seedance-2, wan-3.0 | 480p, 720p, 1080p |
| minimax-h3 | 480p, 768p |
| minimax-h3-max | 480p, 768p, 1080p |
| kling-3 | 720p, 1080p |
| gemini-omni-flash-1.1 | 360p, 720p, 1080p, 4K |
| h3-max-recast | 768p, 1080p |
| higgsfield-genjutsu | 480p, 720p |
A safe request builder
Read the list and fall back to the nearest supported value instead of hard-coding. This snippet runs as written once you set a key.
``python
import asyncio, os
import httpx
ORDER = ["480p", "720p", "768p", "1080p"]
async def main():
h = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
async with httpx.AsyncClient() as c:
r = await c.get("https://api.sume.com/v1/videos/models", headers=h)
models = {m["id"]: m for m in r.json()["data"]}
want = "768p"
have = models["seedance-2.5"]["supported_resolutions"]
pick = want if want in have else min(have, key=lambda v: abs(ORDER.index(v) - ORDER.index(want)))
print(pick)
asyncio.run(main())
``
With seedance-2.5 and a wanted 768p the script prints 720p, because 720p and 1080p are equally close and min keeps the first. Decide whether rounding up (more cost) or down is right for your job and make that explicit.
Sources
Related posts
More in Developers
- Seedance 2.5 price calculator in Python: tokens to dollars
A 20-line Python function that turns Seedance 2.5 resolution, aspect ratio and seconds into the Sume billed price, checked against two known amounts.
- Sentry Vercel AI integration records inputs and outputs by default
Sentry's Vercel AI integration records inputs and outputs by default when genAI collection is on. Check what Sume tool calls and results put in spans.
- Shopper leaves mid try-on: cancel the Format run, mind the gap
Cancel a Sume Format run with POST /v1/format-runs/{id}/cancel when a shopper leaves a try-on. Canceled runs send no webhook, and finished work is billed.
- Short ends before the voice: timeline_gap_filled and last-frame hold
When Timeline clips cover less than the audio, you get a held last frame and a warning, not an error. The two codes, and how to fix them before upload.
Written by Sume