Check one video model first: GET /v1/video-router/models/{id}
Before you spend on a clip, read one model's limits with GET /v1/video-router/models/{model_id}. It returns capabilities and price, and 404s on an unknown id.

The cheapest failed video request is the one you never send. Sume's Video Router has a one-model endpoint for exactly this: GET /v1/video-router/models/{model_id}. It returns the same row as the catalog list, and answers 404 when the id is not in the catalog.
What the row tells you
The Video Router docs say the limits differ by model, so read capabilities and do not assume one envelope.
- Resolutions, durations and which of
first_frame,last_frame, image, video and audio references the model accepts. - Whether audio is a toggle or always on. MiniMax H3 and Gemini Omni Flash 1.1 have native audio with no toggle.
- Price: the row's per-model rate already includes Sume's 1.25 multiple, and
billable_formulais the per-model truth.
Examples that matter
| Model id | Resolutions | Durations | Notes |
|---|---|---|---|
| seedance-2.5 | 480p, 720p, 1080p | 4 to 30 s | No bitrate_mode |
| kling-3 | 720p, 1080p | 4 to 15 s | No reference URLs |
| minimax-h3 | 480p, 768p | 5 to 15 s | 768p is native, not 720p |
| gemini-omni-flash-1.1 | 360p to 4K | 3 to 10 s | 16:9 or 9:16 only |
A guard in Python
This helper fetches one model's row and raises when the id is not in the catalog. Print the row, then compare your length against the duration range it reports before you submit. The response envelope uses data; adapt to the row you receive.
import os
import requests
BASE = "https://api.sume.com/v1/video-router"
HEADERS = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
def model_row(model_id):
r = requests.get(BASE + "/models/" + model_id, headers=HEADERS, timeout=30)
if r.status_code == 404:
raise ValueError(model_id + " is not in the Sume catalog")
r.raise_for_status()
return r.json()
row = model_row("seedance-2.5")
print(row)
Try it with an id from a launch announcement. If it 404s, the model is not available through Sume yet, whatever its vendor page says.
Sources
Related posts
More in Developers
- Reference video job failed on download: check input URLs first
A Sume reference-to-video job fails when an input URL is not public. Python that HEAD-checks references before POST /v1/videos, and how to read the error.
- CI test: assert Seedance 2.5 and Wan 3.0 still list 30 seconds
Fail a build when your 30-second video code outlives the catalog. A short Python test reads supported_durations from GET /v1/videos/models and checks 30.
- Retry, fix or stop: classify every Sume /v1/videos error in code
One Python function that maps each documented /v1/videos error code (400, 402, 404, 409, 429, 502) to retry, fix or stop, plus the two 409s that look alike.
- Claude Agent SDK init message: check the Sume server status first
Read the init message's mcp_servers statuses before a paid Sume call. failed and needs-auth mean the tools are not usable. pending is not a failure on its own.
Written by Sume