Pick a Sume video model by script: filter /v1/videos/models
Instead of guessing, call GET /v1/videos/models and filter by ratio, resolution and last frame. A 15-line Python script lists the Sume video models that fit.

Call GET https://api.sume.com/v1/videos/models and filter the data array on supported_resolutions, supported_aspect_ratios and supported_frame_images: the models left are the ones that can run your job. The response also shows supported_durations, generate_audio, seed and pricing_skus.
Field names are from the Video Generation page, read 2026-10-05.
What each field tells you
| Field | What to filter on | Example value |
|---|---|---|
| supported_resolutions | Needs 1080p | ["480p", "720p", "1080p"] |
| supported_aspect_ratios | Needs 9:16 | ["16:9", "9:16"] |
| supported_frame_images | Needs an end frame | ["first_frame", "last_frame"] |
| supported_input_references | Needs reference clips | ["image_url", "video_url"] |
| generate_audio | Needs sound | true |
| pricing_skus | Compare cost | per-second or per-1000-video-tokens SKU |
Why filter instead of hard-coding
The catalog changes as models are added, and the endpoint is the one place that always matches what the API will accept. A hard-coded table of limits goes stale; a filter does not. Check it before each batch rather than once.
Seedance rows price per 1,000 video tokens while the rest price per second, so the pricing_skus keys differ between rows.
- Filter first, then compare
pricing_skusof what remains. - Fall back to
sume/autowhen nothing matches your filter exactly. - Log the chosen
idwith each job.
Script
Lists models that take 9:16, 1080p and a last frame.
import os, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
r = requests.get("https://api.sume.com/v1/videos/models", headers=H)
r.raise_for_status()
for m in r.json()["data"]:
ok = (
"1080p" in (m.get("supported_resolutions") or [])
and "9:16" in (m.get("supported_aspect_ratios") or [])
and "last_frame" in (m.get("supported_frame_images") or [])
)
if ok:
print(m["id"], m.get("pricing_skus"))Sources
Related posts
More in Developers
- Pick an image model by capability from the Sume catalog in Python
Filter GET /v1/images/models by reference count, ratio and resolution tier instead of hard-coding ids. A short Python function that runs as written.
- Pin the Sume CLI to a release tag in CI and check for updates
Install a fixed sume binary from GitHub Releases, verify checksums.txt, and run sume update --check to see a newer release without changing files.
- Pinterest reads IPTC metadata for AI labels: keep it before you pin
Pinterest says its AI detection follows the IPTC Photo Metadata Standard. If you tag a Sume image, keep that metadata; Sume's docs do not say it embeds any.
- Pinterest CSV: title 100, description 500 characters, pre-upload check
Pinterest's bulk CSV allows titles up to 100 characters and descriptions up to 500. Check every row in Python before you upload 200 Sume-rendered Pins.
Written by Sume