GPT Image 2.5 quality auto reserves max: avoid the price surprise

On Sume, GPT Image 2.5 with quality auto reserves max, and an omitted quality means high. At 1024x1024 xhigh and max cost $0.09366 and $0.21072 before input.

4 min readSume
All posts

Do not send quality: "auto" if cost matters. Sume's Image API docs say auto quality reserves max on the GPT Image 2.5 rows, and that an omitted quality defaults to high. The provider output cost at 1024x1024 is $0.09366 for xhigh and $0.21072 for max, before input tokens and Sume pricing.

Those two numbers are the docs' figures, read 2026-10-06. Set quality to low or medium for drafts, and move up only for the image you will use.

What each setting does to the reservation

GPT Image 2.5 quality settings on Sume, from the Image API docs read 2026-10-06
quality valueWhat the docs sayOutput cost at 1024x1024
(omitted)Defaults to highNot stated in the docs
autoReserves maxReserves the max amount
low, medium, highCatalog-gated valuesNot stated in the docs
xhighCatalog-gated value$0.09366 before input and Sume pricing
maxCatalog-gated value$0.21072 before input and Sume pricing

The reservation matters on small balances

The same page says that auto size and named presets without a verified GPT-specific pixel mapping reserve the upper bound of output tokens. A wallet that is close to empty may be refused for a request that would have cost much less in the end.

The error table lists 402 insufficient_credits for that case. If you see it on a draft job, check what quality and size you sent before you top up.

A guard in front of the call

This wrapper refuses to send the risky values and fills in a cheap default, so a missing field never becomes the expensive one by accident.

import os, requests

RISKY = {None, "auto", "xhigh", "max"}

def generate(prompt: str, quality: str = "medium", allow_costly: bool = False) -> dict:
    if quality in RISKY and not allow_costly:
        raise ValueError(f"quality {quality!r} needs allow_costly=True")
    key = os.environ.get("SUME_API_KEY")
    if not key:
        raise SystemExit("set SUME_API_KEY")
    r = requests.post(
        "https://api.sume.com/v1/images",
        headers={"Authorization": f"Bearer {key}"},
        json={"model": "openai/gpt-image-2.5", "quality": quality, "prompt": prompt},
        timeout=90,
    )
    r.raise_for_status()
    return r.json()

if __name__ == "__main__":
    out = generate("A ceramic mug on a pale table")
    print(out.get("usage", {}))

Order of work

  • Draft at low and judge the composition.
  • Re-run the chosen prompt at medium or high for the version you share.
  • Use xhigh or max only when the image will be enlarged or printed.
  • Read usage.cost from the response and keep it with the file.

Sources

Related posts

More in Pricing

All Pricing posts

Written by Sume