How to watch the Sume image model list for new and removed models
Image catalogs change. Snapshot GET /v1/images/models each night and diff the ids in Python, so a retired or new model reaches you before a request fails.

Save the list of model ids once a day and compare it with yesterday's. Sume's docs make GET /v1/images/models the place to read what the catalog serves and what each row accepts, and say a model takes only the values its catalog descriptors list. If a row's descriptors change under you, the first sign should be your own diff, not a production 400.
The check is about twenty lines and needs no database.
Snapshot and diff
The script stores each model's id and its supported_parameters as JSON. On the next run it prints ids that are new, ids that are gone, and rows whose parameter descriptors changed.
import json, os, pathlib, requests
key = os.environ.get("SUME_API_KEY")
if not key:
raise SystemExit("set SUME_API_KEY")
r = requests.get("https://api.sume.com/v1/images/models",
headers={"Authorization": f"Bearer {key}"}, timeout=30)
r.raise_for_status()
now = {m["id"]: m.get("supported_parameters", {}) for m in r.json()["data"]}
file = pathlib.Path("image-catalog.json")
old = json.loads(file.read_text()) if file.exists() else {}
print("new:", sorted(set(now) - set(old)))
print("gone:", sorted(set(old) - set(now)))
print("changed:", sorted(i for i in now if i in old and now[i] != old[i]))
file.write_text(json.dumps(now, indent=2, sort_keys=True))What to do with each result
| Diff result | Likely meaning | Action |
|---|---|---|
| New id | A model joined the catalog | Read its endpoints record for price and limits |
| Gone id | A row left the list | Move pinned work to a listed row before it fails |
| Changed descriptors | A range or enum moved | Re-check your clamps for n, references and sizes |
sume/auto missing | Expected, it is never listed | Ignore it |
Why vendors make this worth doing
Vendors reshuffle their lineups. Ideogram's API overview (read 2026-10-06) lists Ideogram 4.5 and 4.0 side by side with GPT Image and Nano Banana, and a page like that is a snapshot of one day. A diff on your side turns a lineup change into a line in a log.
Wire the output to a chat message or a ticket. A quiet diff that nobody reads is no protection.
Limits of the check
- It sees the catalog, not the price. Read the endpoints record for a model if its price matters.
- It will not tell you why a row changed. Compare with the docs.
- Run it from one place so the saved file is the single record.
Sources
Related posts
More in Developers
- Django webhook view for an AI video job: csrf_exempt and HMAC check
A Django view that verifies Sume's x-sume-webhook-signature over timestamp.raw_body, rejects an empty secret, and handles job.completed for a /v1/videos clip.
- Does a crossfade shorten a Short? Timeline start times explained
In Sume Timeline the declared start of each slot is authoritative, so a crossfade does not eat into the total length. How to keep a Short under its limit.
- Does my Short have audio? Check probe.has_audio before captions
Transcribing a silent clip returns inspect_source_has_no_audio. Probe has_audio first with a frames:false video inspect, then caption only clips with a voice.
- Envoy's 15 s route timeout vs a 30 s Sume sync call
Envoy's RouteAction timeout defaults to 15s. Sume sync mode can wait 30 s. Behind Envoy or Istio, use async, or raise the route timeout above the sync wait.
Written by Sume