A video model row missing from Sume's list: why, and how to check

Veo and Genjutsu list in the Sume catalog only where their provider route is configured. How listing works, plus a Python check that fails on a missing id.

4 min readSume
All posts

A video row can be missing from GET /v1/videos/models because Sume lists a row only where its provider route is configured. Rows served through fal always list; rows served elsewhere, such as the three Veo 3.1 rows on Google Cloud, list only when their own platform key and route exist in that runtime.

So a launch-week id that you saw in a blog post is a claim about a catalog, not about your environment. Read the list you will actually call.

What the code does

The Video Router's listing function keeps a row when it is a public model id and either its provider is fal or the model is configured for the runtime. Rows marked gated are omitted from public listings too. The docs say the same for one row: higgsfield-genjutsu is "in the catalog only when its provider is configured" (Video Generation).

The comment in the Veo catalog code adds that Google-only models have no fal route, so there is no silent fallback to fal for them.

Rows with their own route

These rows carry a route that other rows do not:

Rows whose listing depends on a route, from the Sume repo on 2026-10-10
RowRoute note
veo-3.1, veo-3.1-fast, veo-3.1-liteGoogle Cloud (Vertex) only, text-to-video, 720p
higgsfield-genjutsuIn the catalog only when its provider is configured
Rows whose provider is falListed without an extra platform-key check in the catalog code

A check that fails loudly

Run this at deploy time, not at request time, so a missing id stops a release instead of a user. It exits non-zero when a required id is absent.

import os, sys, requests

need = {"veo-3.1-lite", "seedance-2.5", "wan-3.0"}
r = requests.get("https://api.sume.com/v1/videos/models",
                 headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]})
r.raise_for_status()
have = {m["id"] for m in r.json()["data"]}
missing = sorted(need - have)
if missing:
    print("missing video rows:", ", ".join(missing))
    sys.exit(1)
print("all required rows listed")

What to do when a row is absent

Do not substitute silently. Pick a documented alternative with the same capabilities and record the id you ran, because a different row changes price, limits and look.

  • Need text-to-video at 4 to 8 seconds with sound: Omni Flash 1.1 (3 to 10 s) or Wan 3.0 (2 to 30 s).
  • Need a Veo-style 9:16 clip: any row listing 9:16 in supported_aspect_ratios.
  • Need to compare: sume/auto lets Sume pick the family and returns sume/auto in the poll, but does not tell you which family ran.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume