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.

5 min readSume
All posts

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.

How to read the create response when testing a model id, from Sume's Create a run and Errors docs, read 2026-10-04.
ResponseMeaning for your probeWhat to do
202 with data.model setThe id was admitted; the receipt shows the id that ranCancel the probe run, then enable the id
400 invalid_requestThe id is not in the Agents catalog, or the body is malformedCheck the body first, then wait for the catalog
401 or 403A key or scope problem, unrelated to the idFix 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

All Developers posts

Written by Sume