jq one-liners for the video model catalog: ids, durations, 1080p

Two jq filters over GET /v1/videos/models: a table of ids with min and max seconds, and a filter for models that take 20 s at 1080p. Tested on a local copy.

4 min readSume
All posts

Model pages go stale and blog posts go stale faster. The reliable answer to which video model takes a 20-second clip at 1080p is the catalog itself: GET /v1/videos/models returns { data: [VideoModel] }, and each entry lists supported_resolutions, supported_durations, supported_aspect_ratios, supported_frame_images, supported_input_references and generate_audio. The catalog also drives validation, so a value that is not in those lists gets a 400 instead of being silently dropped.

Both filters below run in a terminal with curl and jq and were tested against a local stand-in server that returns the documented catalog shape.

A table of ids and limits

This prints one tab-separated line per model: the id, the shortest and longest duration, and the resolutions. min and max work because supported_durations is an array of whole seconds.

curl -s https://api.sume.com/v1/videos/models -H "Authorization: Bearer $SUME_API_KEY" |
  jq -r '.data[] | [.id, (.supported_durations|min), (.supported_durations|max),
         (.supported_resolutions|join("/"))] | @tsv'

Which models take this clip

The second filter turns a requirement into a list of ids. It is a pipeline of two select calls: index($s) finds the duration and index("1080p") finds the resolution. Change the numbers, or add a third select on supported_input_references to find models that take video references.

# which ids accept a 20-second clip at 1080p?
curl -s https://api.sume.com/v1/videos/models -H "Authorization: Bearer $SUME_API_KEY" |
  jq -r --argjson s 20 '.data[]
    | select(.supported_durations|index($s))
    | select(.supported_resolutions|index("1080p")) | .id'

What the catalog says today

From the Sume model cards in the repository on 2026-10-05, these are the duration and resolution envelopes of the pass-through ids. Read the live catalog before you rely on them, because the point of the filters is that the catalog, not a table in a post, is the source.

Sume video model envelopes from the model cards (read 2026-10-05)
Model idSecondsResolutions
seedance-2.54 to 30480p, 720p, 1080p
wan-3.02 to 30480p, 720p, 1080p
kling-34 to 15720p, 1080p
minimax-h35 to 15480p, 768p
gemini-omni-flash-1.13 to 10360p, 720p, 1080p, 4K

Two traps in the output

The catalog is per model, and it describes what the model accepts, not what a particular input shape accepts. Seedance 2.5 lists 30 seconds, but a request that sends a reference video still follows the reference rules for that model. Prices are not in the filter above; the pricing_skus field carries them as decimal USD strings at the Sume rate, which is the provider list price times 1.25. Divide by seconds or by 1,000 video tokens depending on the SKU name before you compare two models.

Also remember that sume/auto is not in the catalog. It is a routing value, not a model, and it resolves to Gemini Omni Flash 1.1 with its own 3 to 10 second window, so do not search the list for it.

Using the answer

Run the second filter in CI and fail the build when your chosen model disappears from the result, which gives you an early warning for a retired id. OpenAI's own deprecations page lists the Videos API and the sora-2 ids with a removal date of September 24, 2026 and no replacement (https://developers.openai.com/api/docs/deprecations, read 2026-10-05); a catalog check in your pipeline is how you would have noticed a change like that before production did.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume