---
title: "Generate images with GPT Image 2, from a text prompt or by editing source images"
method: POST
path: "/v2/image/generate/gpt-image-2"
tags: ["images-generate"]
---

# Generate images with GPT Image 2, from a text prompt or by editing source images

`POST /v2/image/generate/gpt-image-2`

Generate one or more images with GPT Image 2. The prompt is consumed
by the model directly, without rewriting.

Supplying source images turns the request into an edit: the model
applies the prompt to the sources. Provide them either as
`image_asset_identifiers` references (images already stored with
Ideogram) or as raw `images` bytes (multipart requests only) — if both
are supplied, the references win and the bytes are ignored. Without
source images the prompt alone drives the generation.

The output size follows `resolution` when provided, otherwise the
closest size the model supports for `aspect_ratio`.

By default the request blocks until the images are ready and returns
them in `data`. Set `async` to true to return immediately after the
request is accepted, then poll for completion and results with
`GET /v1/generations/{generation_id}` using the returned
`generation_id`.

Supplying a `webhook_url` makes the request asynchronous whatever
`async` says: the response returns as soon as the request is accepted,
and the finished result is POSTed to that URL.

## Query parameters

- `dry_run` boolean

## Request body

- GenerateImageGptImage2Request — Source images are optional. When supplied (as `image_asset_identifiers` references, or as raw `images` bytes in multipart requests), the prompt is applied to the sources as an edit; if both forms are given, the references are used and the bytes are ignored. Without source images the prompt alone drives the generation.
  - `prompt` string, required — The prompt to generate images from, or the edit instruction to apply when source images are supplied. The model consumes it directly, without rewriting.
  - `image_asset_identifiers` AssetIdentifier[] — Existing upload or generated image assets to edit, by reference. Takes priority over `images` if both are supplied.
    - `asset_type` 'ASSET' | 'CANVAS_ASSET' | 'LAYERED_ASSET' | 'RESPONSE' | 'UPLOAD', required
    - `asset_id` string, required
  - `images` string[] — The source images to edit (max 16, max size 25MB per image), as raw bytes; only JPEG, PNG, and WEBP formats are supported. Multipart requests only; ignored if `image_asset_identifiers` is also supplied.
  - `num_images` integer — The number of images to generate.
  - `seed` integer — Random seed. Set for reproducible generation.
  - `aspect_ratio` string — The requested output aspect ratio, for example "1:1", "16:9", or "9:16". Ignored when `resolution` is provided. Defaults to "1:1".
  - `resolution` string — Exact output resolution, formatted as "WIDTHxHEIGHT", for example "2048x2048" or "1920x1088". When provided, this takes precedence over `aspect_ratio`. The dimensions must satisfy GPT Image 2 constraints: each side is a multiple of 16, the largest side is at most 3840px, the long:short ratio is at most 3:1, and total pixels are between 655360 and 8294400 inclusive.
  - `async` boolean — When false (the default), the request blocks until the images are ready and returns them in `data`. When true, the request returns as soon as it is accepted; poll for completion and results with `GET /v1/generations/{generation_id}` using the returned `generation_id`.
  - `webhook_url` string, uri — HTTPS URL that Ideogram delivers the generated result to. Ideogram sends a JSON POST to this URL once all images for the request have finished generating. The body mirrors the synchronous generate response: `request_id`, `created`, and a `data` array containing every generated image (`url`, `prompt`, `resolution`, `seed`, `is_image_safe`). Each delivery is signed with Ed25519 and verifiable against the public keys at `https://api.ideogram.ai/v1/.well-known/jwks.json`. Must be HTTPS; private and loopback hosts and the cloud metadata service are rejected.
  - `private` boolean, nullable — When true or omitted, the output is kept private to your account. Set to false to publish the output to the public feed. Enterprise accounts always generate privately.
  - `target_collection_id` string — A collection you can write to, by its URL-safe base64 collection id. The output images are added to it when the request completes.

## Response `200`

The generated images (synchronous requests), or an acknowledgement to poll with `GET /v1/generations/{generation_id}` (`async` requests).

- GenerateImageGptImage2Response — Response returned by `POST /v2/image/generate/gpt-image-2`. Synchronous requests (the default) include the generated images in `data`. Requests with `async` set to true omit `data`; poll for completion and results with `GET /v1/generations/{generation_id}` using the returned `generation_id`. The seed reports the value the request resolved to when the caller left it unset.
  - `generation_id` string, required — URL-safe base64 ID of the accepted generation. Accepted by the `GET /v1/generations/{generation_id}` polling endpoint.
  - `data` GeneratedImageObject[] — The generated images, in generation order. Present only for synchronous requests (`async` omitted or false).
    - `url` string, uri, nullable — The direct link to the generated image. Empty when the image did not pass safety checks.
    - `prompt` string, required — The final prompt the image was generated from.
    - `resolution` string, required — The resolution of the generated image, formatted as "WIDTHxHEIGHT".
    - `is_image_safe` boolean, required — Whether the image passed safety checks. If false, `url` is empty.
    - `seed` integer, required — Random seed. Set for reproducible generation.
  - `seed` integer, required — Random seed. Set for reproducible generation.

## Other responses

- `400` — Invalid input provided.
- `401` — Unauthorized.
- `402` — Insufficient credits or quota.
- `422` — The prompt did not pass safety checks.
- `429` — Too many requests.
- `500` — Internal server error.
- `503` — The endpoint is temporarily unavailable.

## Changes

- **2026-09-16** `a235a15c0235` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/ideogram/apis/ideogram-openapi-3-0/changes/v2/image/generate/gpt-image-2/post.md)

---

[API](https://skmtc.dev/ideogram/apis/ideogram-openapi-3-0.md) · [All operations](https://skmtc.dev/ideogram/apis/ideogram-openapi-3-0/llms.txt) · [OpenAPI document](https://skmtc.dev/ideogram/apis/ideogram-openapi-3-0/revisions/cdaa218128ba?raw)
