Is Luma Ray3.2 on Sume? Check the video catalog ids in Python
Ray3.2 is not a Sume model. Rather than trust a blog, list GET /v1/video-router/models and test for an id. A short Python script that prints every id.

No: Luma Ray3.2 is not in Sume's video catalog, so a request for it will not route. Luma launched Ray3.2 on 2026-06-09 (its launch page, read 2026-10-05), but Sume's Video Router docs name a different set of catalog ids. The reliable check is the catalog itself, because docs pages go stale and catalogs change.
The ids the docs name
The pages read for this post name these Video Router ids: seedance-2.5, seedance-2, wan-3.0, minimax-h3, minimax-h3-max, h3-max-recast, higgsfield-genjutsu (only when its provider is configured) and gemini-omni-flash-1.1. None is a Luma model. The catalog returned by your key is the authority.
Read capabilities, not just ids
An id check answers whether a model exists. It does not tell you what the model accepts. For each id you care about, call GET /v1/video-router/models/{model_id}, which the docs list, and read its capabilities: resolutions, durations, aspect ratios and reference types. The docs say limits are different for each model, so never reuse one model's limits for another.
For example, the docs give minimax-h3 a 5 to 15 second range at native 480p or 768p, with 768p first class and not 720p. seedance-2.5 takes 4 to 30 seconds at 480p, 720p or 1080p. Those are two different envelopes in one catalog.
Why not trust a table in a blog
A table, including the ones on this site, is a snapshot. The catalog is live. When you wire a model into a product, the catalog call is the contract, and a failed check is a better alarm than a reader's email. Build the check into your deploy so that a missing id stops the release.
A script that lists them
The script prints every id string anywhere in the response, so it does not depend on the exact response shape, then tests for a Luma or Ray id.
import os, requests
r = requests.get(
"https://api.sume.com/v1/video-router/models",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
def ids(x):
if isinstance(x, dict):
if isinstance(x.get("id"), str):
yield x["id"]
for v in x.values():
yield from ids(v)
elif isinstance(x, list):
for v in x:
yield from ids(v)
found = sorted(set(ids(r.json())))
print("\n".join(found))
print("Luma or Ray id present:", any("ray" in i.lower() or "luma" in i.lower() for i in found))What to do if it says False
Plan around the gap. If you need what Ray3.2 does, the Ray3.2 matrix on this site lists which of its features have a Sume counterpart. If you only need a 1080p clip of 15 seconds or longer, the catalog may already hold a fit: ask the catalog for the capabilities of each model, since the docs say each model can have its own envelope.
Run the script on a schedule if you track new releases. When a new id appears, read its capabilities before you wire it into a product.
A few practical notes on the check itself. Treat a network error differently from a missing id: the first means you could not ask, the second means you asked and the answer was no. Print the full list of ids when the check fails so a person can see what the catalog does hold. Run the script on a schedule as well as at deploy time, since a catalog can change between releases. And keep the model name you search for in one config value, so a rename is a one-line change. Keep the scope of this advice in view. It rests on the Sume docs and the vendor pages named in the sources, read on 2026-10-05, and on nothing measured by Sume. Where a behavior depends on your own images, such as how a model redraws a certain typeface, run a small pilot at the low quality tier and judge the result yourself before you plan a batch. Write down the prompt, the model id and the quality tier you used, so the run can be repeated. When the catalog or the docs change, re-read them; the live catalog is the contract, and a post is only a snapshot of it.
Sources
Related posts
More in Developers
- Java 21: poll many Sume jobs with virtual threads and a Semaphore
Poll 50 Sume jobs from one Java 21 file using virtual threads, a Semaphore cap of 8, and java.net.http. No Maven, no dependencies, runs with java Poll.java.
- Java ImageIO.read returns null on a Sume WebP: request PNG
ImageIO.read gives null when no reader claims the stream. Check the reader list, then pin output_format to png or jpeg on a Sume /v1/images call.
- Start the trim step from a job.completed webhook: Python verifier
Let Sume's signed job.completed webhook trigger the next chain step. A stdlib Python verifier that refuses an empty secret, plus dedupe on job_id.
- Job id or run id: which Sume endpoint and helper do you poll?
A job_ id is polled at /v1/jobs/:id with waitForJob. An arun_ id is a Format, Action or Agent run, polled with waitForRun and a family argument.
Written by Sume