Which Sume image models accept quality, and which reject it with a 400
Only four Sume image families list a quality value: ChatGPT Image 2.5, ChatGPT Image 2, Ideogram V3 and Ideogram 4.5. On any other row quality is a 400.

Only ChatGPT Image 2.5, ChatGPT Image 2, Ideogram V3 and Ideogram 4.5 list a quality value in Sume's image catalog. On every other row the catalog's quality list is empty, and since Sume rejects parameters that a model does not list with 400 unsupported_parameter (it never drops them silently), a stray quality field fails the request.
The rows
| Row | Values | If omitted |
|---|---|---|
| ChatGPT Image 2.5 (Flare, Sunburst) | auto, low, medium, high, xhigh, max | high |
| ChatGPT Image 2 | low, medium, high | Check the row; the display rate is high |
| Ideogram V3 | Public low, medium, high, mapped to rendering speed | Check the row |
| Ideogram 4.5 | low, medium, high | medium |
| Every other row (Nano Banana, Seedream, Flux, Qwen, Imagen, Grok, Recraft, Soul) | None listed | Not applicable: do not send it |
Price effects
Quality is the main price lever where it exists. Ideogram 4.5 bills $0.0375, $0.075 or $0.275 for low, medium and high. ChatGPT Image 2.5 at 1024 square bills $0.007375 at low, $0.0165 at medium, $0.065875 at high, $0.1171 at xhigh and $0.2635 at max (output tokens only, list x 1.25). Setting auto on 2.5 reserves the max price before the job runs, so pin the value.
A client that cannot break
Do not hard-code which models take quality. Read the descriptor and only add the field when the row lists it:
import os
import requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
rows = requests.get("https://api.sume.com/v1/images/models", headers=H, timeout=30).json()["data"]
for row in rows:
quality = row["supported_parameters"].get("quality")
values = quality["values"] if quality else "none (do not send quality)"
print(row["id"], values)Choosing a value
For a first pass on rows with a quality knob, use the lowest tier that shows your text legibly, then raise it only where the output fails. On Ideogram 4.5 the steps are $0.0375, $0.075 and $0.275 billed; on ChatGPT Image 2.5 at 1024 they are $0.007375, $0.0165 and $0.065875 for low, medium and high, and higher still for xhigh and max.
For rows with no knob, the lever is the model and the prompt. A client that reads the descriptors can offer the right controls for each model without a hard-coded table, which is also what keeps it working when Sume adds a row.
Notes
- If you port a script that always sends
quality: "high", route it through the descriptor check above or it will 400 on Nano Banana, Seedream and Flux. - OpenAI says earlier GPT Image models only support up to
high(OpenAI guide, read 2026-10-07). - The Image API page explains the capability descriptors.
Sources
Related posts
More in Developers
- Which Sume image models take references and masks: a Python check
Read GET /v1/images/models and list each model max input_references and whether it exposes mask_url, instead of trusting a blog table. Runnable Python.
- Which Sume speech endpoint: TTS 1.0, TTS Router, STT or Music?
A decision table for Sume's four audio endpoints: TTS 1.0, TTS Router, STT 1.0 and Music Router. Inputs, limits, ids and what each does not do.
- Keep an AI-use ledger for every Short you upload (Python)
A small CSV ledger that records which Sume steps each Short used and what they cost, so a label decision never relies on memory. Code runs as is.
- Shorts voiceover: how many characters fill 15, 30, 45 and 60 s
Planning table from script length to seconds and TTS cost, with the 15 characters per second assumption labeled and a way to measure the real value.
Written by Sume