New model id on a Sume Format run: probe for a 400 before launch day
When Gemini 4 Argon or any new model opens up, test whether a Format run accepts its id. A 400 invalid_request means it is not in the catalog yet.

To find out whether a Sume Format run accepts a new model id, send a real create call with that id in model and read the status: 202 means the run was accepted, and 400 invalid_request means the id is outside the Agents catalog. Sume's Create a run page states the rule directly: an id outside the catalog is a 400, and the receipt echoes the id that ran.
That makes the check cheap to automate for a launch like Gemini 4 Argon, which Google announced on September 30 but has not opened to general API use (read 2026-10-04).
Why probe instead of assuming?
A model being announced does not mean it is selectable. The create call is the one place Sume tells you, and it tells you before you have built anything on the id. Do not probe against a Format that would spend money on acceptance: use a small spend cap and a cheap instruction, and cancel the run if it is accepted.
| Response | Meaning for your probe | What to do |
|---|---|---|
202 with data.model set | The id was admitted; the receipt shows the id that ran | Cancel the probe run, then enable the id |
400 invalid_request | The id is not in the Agents catalog, or the body is malformed | Check the body first, then wait for the catalog |
401 or 403 | A key or scope problem, unrelated to the id | Fix the key; it needs formats:write |
What does a probe script look like?
This Python script reads the key and the Format address from the environment and prints the status. It needs pip install requests.
import os
import requests
def main() -> None:
handle = os.environ["SUME_FORMAT_HANDLE"]
slug = os.environ["SUME_FORMAT_SLUG"]
model = os.environ["PROBE_MODEL_ID"]
resp = requests.post(
f"https://api.sume.com/v1/formats/{handle}/{slug}/runs",
headers={
"Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
"Idempotency-Key": f"model-probe-{model}-v1",
},
json={
"instruction": "Probe only. Make nothing.",
"model": model,
"generation_spend_cap_usd": 1,
},
timeout=30,
)
print(resp.status_code, resp.json().get("error", {}).get("code"))
main()
What should I do with a 202?
Cancel it. Sume's Runs and results page says cancel is idempotent and that generation completed before the cancel is billed, so cancel promptly. The receipt's cancel_url is the address to call. A canceled run never delivers a webhook, so use the receipt the cancel returns.
Where should the id live in my code?
In configuration, not in the Format. Send model per run from an environment variable, and store the echoed model with every run id. Then adopting a new id is a deploy-free change, and rolling back is the same.
Sources
Related posts
More in Developers
- Gemini video understanding 88% fewer tokens vs Sume Video inspect
Gemini reports up to 88% fewer tokens on long video. Sume Video inspect and Reference ingest take another route: stills, transcript and a manifest.
- Gemini API paid vs unpaid data use: Omni prompts and uploaded clips
Gemini API terms: unpaid content may improve Google products and reach human reviewers; paid content does not. What that means for Omni edit uploads.
- Gemini API's $10 per 10 minutes limit: how many Omni clips fit
Gemini API spend limits are $10, $50 or $200 per rolling 10 minutes by tier. At about $0.10 a second that is roughly 9 to 197 ten-second Omni clips per window.
- Gemini CLI 0.62 MCP titles: reading Sume's tool names
Gemini CLI v0.62.0 formats MCP tool call titles as structured signatures. Sume tool ids are underscore names such as generate_image; dotted aliases map to them.
Written by Sume