How many Sume image rows list mask, background, quality, resolution

mask_url and background list on GPT Image 2.5 only, quality on three row types, resolution on a handful. A count of catalog rows by parameter, with a script.

5 min readSume
All posts

Image parameters on Sume are narrower than the request schema suggests. The schema of POST /v1/images has many fields, but each catalog row lists only the ones it takes, and a field outside the list returns 400 unsupported_parameter. Of the image rows, mask_url and background are documented for GPT Image 2.5 only, quality appears on three row types, resolution on a handful, and aspect_ratio and n on every row.

Count by parameter

The counts below follow the catalog code and the Image API page. Rows are public ids from GET /v1/images/models. Use the live endpoint if you need the exact count today, since rows are added and retired.

Parameter coverage across image rows, as of 2026-10-08
ParameterRows that list itWhere
prompt, aspect_ratio, n, input_references, output_formatevery rowText-only rows list input_references as 0 to 0
image_sizeGPT, Seedream, Flux, Qwen, Recraft rowsCustom-pixel families
qualityGPT Image 2.5, 2.5 Sunburst, GPT Image 2, Ideogram 4.5Enums differ
resolutionNano Banana 2.1, Nano Banana Pro, Imagen 4 Ultra, Soul, Ideogram 4.5Tiers such as 512, 1K, 2K, 4K
mask_url, backgroundGPT Image 2.5 rowsAs documented

What it means for a shared client

A client that serves many models should not send one fixed body. Build the body per row. Required fields go always. Optional ones go only when the descriptor lists them. When a user picks a mask on a row without mask_url, tell them to switch rows instead of dropping the mask.

Two other rules do not vary. The only provider.only value is sume, and stream, seed and output_compression are unsupported on every row.

Counting it yourself

This script counts, for each parameter, how many catalog rows list it.

import os, requests
from collections import Counter

H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
r = requests.get("https://api.sume.com/v1/images/models", headers=H, timeout=30)
r.raise_for_status()
rows = r.json()["data"]
c = Counter(p for m in rows for p in m["supported_parameters"])
print(len(rows), "rows")
for name, n in sorted(c.items()):
    print(f"{name:20} {n}")

Examples of per-row bodies

A GPT Image 2.5 edit can carry input_references, mask_url, background and quality. The same intent on Flux 2 Pro can carry input_references and image_size, and nothing else of those four. On Recraft V4 or Qwen Image Max the body has no references at all, because those rows list zero input slots.

  • GPT Image 2.5: up to 16 references, mask_url, background, quality auto to max.
  • Ideogram 4.5: up to 5 references, quality low to high, resolution tiers.
  • Seedream, Flux, Qwen Image: up to 10 references, image_size, no quality.
  • Recraft V4 and Qwen Image Max: no references, WebP only on Recraft.

Keep the check in one place

This is cheap to do and removes a whole class of 400 errors from production. Put the descriptor lookup in a single function and call it before each send. A cached copy of GET /v1/images/models is enough, since the catalog changes rarely, but refresh it on a 400 unsupported_parameter so a new release does not leave you stale.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume