Skip to main content
GPT Image 2.5 is OpenAI’s image generation and editing model, available through Upmore API under two interchangeable model IDs: gpt-image-2.5-flare and gpt-image-2.5-sunburst. Both accept the same parameters, enforce the same limits, and return the same response shape. Use whichever you prefer. Two endpoints cover it:

How to pass parameters

Both endpoints take the same parameter set — only the endpoint and the request encoding change. The image-to-image endpoint has two interchangeable request shapes. Pick whichever fits what you already have:
  • You have the bytes (a local file, or a file from another API) → multipart/form-data with a file upload.
  • You have a URL (object storage such as TOS or R2, a CDN link, or an inline base64 payload) → application/json with images[].image_url.

Key capabilities

  • Text-to-Image — Generate images from a natural language prompt
  • Image-to-Image — Edit an existing image with a prompt, by file upload or by URL
  • Multiple input images — Up to 16 reference images per edit
  • Masked editing — Restrict the edit to a region by supplying a mask
  • Flexible resolution — Any size up to 4K, with the model choosing a resolution when you omit size
  • Transparent background — background: "transparent" for cut-out assets
  • Batch generation — Up to 10 images per request via n
  • Streaming previews — Receive partial images as they render

Output specifications

Text-to-image

Image-to-image

Upload the image as a file

POST to /v1/images/edits as multipart/form-data: the source image goes in the image file field, the instruction in the prompt form field, and every other parameter (size, quality, n, …) as an ordinary form field with a string value.
image in a multipart request must be an actual file. Sending a URL string there is rejected with Invalid type for 'image': expected one of an array of files or file, but got a string instead. To use a URL, send JSON instead (below).

Reference the image by URL

Send application/json instead, and put the image in images — an array of objects, each with an image_url. This is the form to use when your image already lives somewhere reachable: TOS, R2, a CDN, or an inline data: URL.
What image_url accepts:
The upstream schema also accepts a file_id alternative to image_url, but Upmore does not expose the Files upload API, so only image_url is usable.

Edit from multiple reference images

Up to 16 input images per request. Repeat the file field as image[] in multipart, or add more objects to images in JSON.
Each input image adds its own image tokens to usage.input_tokens_details.image_tokens, proportional to its resolution — roughly 1,024 tokens for a 1024×1024 image. A 16-image request is billed for all 16.

Masked editing

Supply a mask to confine the edit to one region. The mask must be a PNG with an alpha channel, the same pixel dimensions as the source image: transparent pixels mark the region the model may repaint, opaque pixels are preserved.
A mask that does not match the source dimensions fails with Invalid mask image format - mask size does not match image size, and a mask without an alpha channel fails with Invalid mask image format - mask image missing alpha channel.

Streaming

Set stream: true to receive server-sent events. The stream emits up to partial_images preview frames and always ends with a completed event carrying the final image. If you omit partial_images, or the image finishes before the previews are produced, you may receive only the completed event.

Parameters

Text-to-image (/v1/images/generations)

Image-to-image (/v1/images/edits)

All text-to-image parameters apply, plus:
response_format and input_fidelity are not supported. Image data is always returned as base64 in data[].b64_json, and webp is not an accepted output_format.

Response

For image edits, usage.input_tokens_details.image_tokens counts the source images, so the same size and quality cost more than a text-to-image call.

Limits and error codes

Requests that violate a constraint fail fast with HTTP 400 and a specific message:
The upstream also runs a safety system over the prompt/image combination. A rejected request returns Your request was rejected by the safety system… with an Azure request ID; retrying with different input usually resolves it, and the ID is what Azure support needs if it does not.

API Reference

View the interactive API playground.