Image-to-image edit cost: what $8 per 1M image input tokens adds

OpenAI lists image input at $8.00 per 1M tokens for GPT Image 2.5, so every 1,000 input tokens adds $0.008 list ($0.010 on Sume) on top of the output price.

4 min readSume
All posts

An image-to-image edit on GPT Image 2.5 costs the output price of a new image plus the cost of the reference images you send as input. OpenAI lists image input at $8.00 per 1M tokens, so each 1,000 input tokens adds $0.008 at list, or $0.010 after Sume's 1.25 factor.

Sume's docs say input token counts are estimates and that admission includes them, so an edit is estimated higher than the same prompt as a plain text-to-image call.

Rates on OpenAI's page

gpt-image-2.5-flare, gpt-image-2.5-sunburst and gpt-image-2, per 1M tokens (read 2026-10-06)
Token typeStandardBatchCached
Text input$5.00$2.50$1.25
Image input$8.00$4.00$2.00
Image output$30.00$15.00not listed

What this means for a retouch

You pay for the reference at the image-input rate and for the result at the image-output rate. The output side depends on quality and size, as in the 1280x720 table. The input side depends on how many references you attach, up to 16 on GPT Image 2.5, and how large each one is.

The batch and cached columns above are OpenAI's rates; do not assume they apply to a Sume bill without checking the Sume docs.

How to find the number for your edit

Run one edit and read usage.cost; the response reports token counts as 0 and the amount in dollars. Subtract the same prompt run as text-to-image to see what the reference added. Use a low quality for the test so it costs under a cent.

For the request shape, see the edit API post.

Check it on your own account

Do not budget from a blog table alone. GET /v1/images/models lists every model with its descriptors, and GET /v1/images/models/{id}/endpoints shows the pricing line for one model. Then run one small request and read usage.cost on the response, which is the billed amount in USD; the token counts in usage are reported as 0 on this route.

Run the test at the quality and size you plan to ship, because both move the price. A single test at low quality costs under a cent for most sizes here, so it is a cheap way to confirm your assumptions before a batch.

Sync, async and failures

The /v1/images route waits up to 30 seconds for the image. If the job finishes in that window you get the result directly; otherwise you get a 202 and an async job to poll. Write your client to branch on the status code, since larger sizes and higher quality are the likely cases for a 202.

Requests are strict. A parameter the chosen model does not list returns 400 unsupported_parameter, stream returns a 400, and provider.only or provider.order accept only sume. Treat a 400 as a bug in the request, not a transient error, and do not retry it unchanged.

Sources

Related posts

More in Pricing

All Pricing posts

Written by Sume