gpt-image-1 returns 404 model_not_found on Sume: which id to send
gpt-image-1, gpt-image-1.5 or gemini-2.5-flash-image sent to Sume /v1/images return 404 model_not_found. Ids to send instead, plus a lookup.

Sume does not list gpt-image-1, gpt-image-1-mini, gpt-image-1.5 or gemini-2.5-flash-image, so POST /v1/images returns 404 model_not_found for them. Send openai/gpt-image-2.5-sunburst or openai/gpt-image-2.5 for the OpenAI ones, which are the replacements OpenAI names on its deprecations page. For the Gemini id, Google names gemini-3.1-flash-image-preview, which is not a Sume id either; Sume's Google-family image ids are google/nano-banana-2 and google/nano-banana-pro.
The 404 is a fix-the-id signal. Retrying the same id never works.
Ids that return model_not_found and what to send
| Id you sent | Vendor date | Try on Sume |
|---|---|---|
| gpt-image-1 | 2026-10-23 | openai/gpt-image-2.5-sunburst |
| gpt-image-1-mini | 2026-12-01 | openai/gpt-image-2.5-sunburst |
| gpt-image-1.5 | 2026-12-01 | openai/gpt-image-2.5-sunburst |
| chatgpt-image-latest | 2026-12-01 | openai/gpt-image-2.5-sunburst |
| gemini-2.5-flash-image | 2026-10-02 | google/nano-banana-2 |
Catch it and name the replacement
Handle the 404 in one place and print the suggestion, so the first failed render in staging tells the developer what to change:
import json, urllib.error
SUGGEST = {
"gpt-image-1": "openai/gpt-image-2.5-sunburst",
"gpt-image-1-mini": "openai/gpt-image-2.5-sunburst",
"gpt-image-1.5": "openai/gpt-image-2.5-sunburst",
"chatgpt-image-latest": "openai/gpt-image-2.5-sunburst",
"gemini-2.5-flash-image": "google/nano-banana-2",
}
def explain(err: urllib.error.HTTPError, model: str) -> str:
detail = err.read().decode("utf-8", "replace")[:200]
if err.code == 404 and model in SUGGEST:
return f"{model} is not a Sume id; try {SUGGEST[model]} ({detail})"
return f"HTTP {err.code}: {detail}"
if __name__ == "__main__":
e = urllib.error.HTTPError("u", 404, "nf", {}, None)
e.read = lambda: json.dumps({"error": "model_not_found"}).encode()
print(explain(e, "gpt-image-1"))List what Sume does serve
GET /v1/images/models returns every id with its parameters. Check an id there before you store it, as in the catalog diff post. The longer date story is in the shutdown calendar.
Sources
Related posts
More in Developers
- GPT Image 2.5 custom size: the pixel rules and the 1024x1536 call
GPT Image 2.5 on Sume takes custom pixels via image_size: multiples of 16, edge up to 3840, aspect up to 3:1. Check your size, then call it with Python.
- GPT Image 2.5 mask_url on Sume: build the PNG mask with Pillow
mask_url works only on the GPT Image 2.5 rows and must be a public HTTPS link. OpenAI wants an alpha channel and a matching size. A Pillow script builds one.
- GPT Image 2.5 on Sume: no quality means high, auto reserves max
Skipping quality on GPT Image 2.5 means high ($0.0355 at 1280x720). Sending auto reserves max ($0.1420). What that does to a budget.
- Sume MCP consent: granting write always includes read
Sume's MCP consent offers mcp:read (required) and mcp:write (opt-in). A write grant always includes read, and there is no paid scope.
Written by Sume