# Endpoint OpenAI Image Generation API: какой выбрать

> Генерация — POST /v1/images/generations, правки — /v1/images/edits, модель gpt-image-2.5; ответ в base64. Endpoint для картинки ChatGPT по gen_id не существует.

- Source: https://www.aifreeapi.com/ru/posts/openai-image-generation-api-endpoint
- Language: ru
- Published: 2026-03-23
- Updated: 2026-10-09
- Publisher: AI Free API (https://www.aifreeapi.com)

У публичного API OpenAI для изображений по состоянию на 9 октября 2026 года ровно два живых endpoint: **`POST https://api.openai.com/v1/images/generations`** для генерации по текстовому запросу и **`POST https://api.openai.com/v1/images/edits`** для правок по одному или нескольким входным изображениям. Третий путь — инструмент `image_generation` в Responses API — нужен только тогда, когда картинка является одним шагом более длинного диалога или агентного процесса. В поле `model` сегодня ставят `gpt-image-2.5-sunburst` или `gpt-image-2.5-flare`; `gpt-image-1` отключается 23 октября 2026 года, `gpt-image-1.5` — 1 декабря.

Второй частый вопрос звучит иначе: «у меня есть `gen_id` (или `parent_gen_id`, `referenced_image_ids`, `asset_pointer`) из переписки с ChatGPT — какой endpoint отдаст мне картинку?» Ответ короткий: **такого endpoint нет**. Эти поля живут внутри продукта ChatGPT, ни один метод публичного API их не принимает, а модели GPT Image возвращают изображение только в теле ответа в base64 — повторно получить его по идентификатору нельзя. Где физически лежит изображение на каждой поверхности и какой поддерживаемый путь остаётся, разобрано в [разделе про gen_id](#gen_id-и-parent_gen_id-из-chatgpt-endpoint-для-скачивания-не-существует).

![Схема прямого Images API и инструмента image_generation в Responses](https://www.aifreeapi.com/posts/ru/openai-image-generation-api-endpoint/img/cover.webp)

## Какой endpoint выбрать: два пути Images API и инструмент в Responses

![Таблица маршрутов /v1/images/generations, /v1/images/edits и инструмента image_generation в Responses](https://www.aifreeapi.com/posts/ru/openai-image-generation-api-endpoint/img/route-choice-matrix.webp)

Правило выбора не изменилось со времён gpt-image-1, изменились только идентификаторы моделей. [Руководство по генерации изображений](https://developers.openai.com/api/docs/guides/image-generation) называет два основных способа: Image API, «если нужно сгенерировать или отредактировать одно изображение по одному запросу», и Responses API с инструментом `image_generation` для диалогов и многошаговых сценариев. Из моделей руководство называет только две актуальные: `gpt-image-2.5-sunburst` (когда важнее точность правок) и `gpt-image-2.5-flare` (быстрая повседневная генерация).

| Задача | Поверхность | Путь или вызов SDK | Что ставить в `model` | Когда начинать с этого | Типичная ошибка |
| --- | --- | --- | --- | --- | --- |
| Одна картинка по текстовому запросу | Images API | `POST /v1/images/generations`, `client.images.generate()` | `gpt-image-2.5-sunburst` или `gpt-image-2.5-flare` | нужен самый короткий путь до первого результата | идти в Responses только потому, что он кажется новее |
| Правка, расширение или композиция готовых изображений | Images API | `POST /v1/images/edits`, `client.images.edit()` | те же модели; без `model` на edits подставляется `gpt-image-2.5-sunburst` | уже есть входные файлы | считать, что для правок обязательно нужен Responses |
| Картинка — один шаг диалога или агента | Responses API + инструмент `image_generation` | `client.responses.create()` | в верхнем `model` — основная текстовая модель, image-модель задаётся внутри инструмента | нужны контекст диалога, цепочка правок и другие инструменты в одном запросе | ставить `gpt-image-2.5-*` в верхний `model` |

Третьего пути в Images API больше нет: `POST /v1/images/variations` отключён, в [справочнике Images API](https://developers.openai.com/api/reference/resources/images) он помечен «This endpoint is retired and no longer available». Вариации делают через edits с моделью GPT Image и текстовым запросом. Метода GET или «retrieve» для изображений в справочнике тоже нет — это ключевой факт для вопроса о `gen_id` ниже.

Если первый вопрос у вас не «какой endpoint», а «какой ID модели», короткий ответ есть в таблице выше, а про различия 2.5 и gpt-image-2 написано в статье [GPT Image 2 API и Codex: сначала выберите маршрут](/ru/posts/gpt-image-2-api).

## POST /v1/images/generations: первый запрос с gpt-image-2.5-sunburst

Первый запрос стоит сделать намеренно скучным: один запрос, квадратный размер, одна актуальная модель. Так проверяются сразу ключ, проект, доступ к модели и форма тела запроса, и ничего лишнего не мешает найти причину сбоя. Модель на generations указывается обязательно — значения по умолчанию у этого endpoint нет.

```bash
curl https://api.openai.com/v1/images/generations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2.5-sunburst",
    "prompt": "Чистая редакционная иллюстрация: робот-оператор с камерой в светлой студии",
    "size": "1024x1024",
    "quality": "medium"
  }'
```

В ответе для моделей GPT Image всегда приходит `data[0].b64_json`. Параметр `response_format` в справочнике помечен как устаревший и относится к уже отключённым моделям, а значение `url` для GPT Image «не поддерживается: эти модели всегда возвращают изображение в base64». Поэтому «успех» первого запроса — это не HTTP 200, а файл на диске:

```js
import fs from "node:fs";
import OpenAI from "openai";

const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const result = await client.images.generate({
  model: "gpt-image-2.5-sunburst",
  prompt: "Чистая редакционная иллюстрация: робот-оператор с камерой в светлой студии",
  size: "1024x1024",
  quality: "medium",
});

fs.writeFileSync("studio-robot.png", Buffer.from(result.data[0].b64_json, "base64"));
console.log(result.usage); // input_tokens, output_tokens, total_tokens
```

Кроме байтов ответ содержит `usage` (входные токены с разбивкой на `image_tokens` и `text_tokens`, выходные токены), `created`, а также фактические `size`, `quality`, `output_format` и `background`. Поля `revised_prompt` у моделей GPT Image нет. Следствие, которое меняет архитектуру: **изображение существует только в этом ответе**. Если вы его не декодировали и не положили в своё хранилище, запросить его повторно по какому-либо идентификатору из Images API невозможно.

Основные параметры по справочнику: `size` — `auto`, `1024x1024`, `1536x1024`, `1024x1536`, а для семейства gpt-image-2 — произвольное `WIDTHxHEIGHT`; `quality` — `low`, `medium`, `high`, `auto`, причём `xhigh` и `max` принимают только модели gpt-image-2.5; `output_format` — `png` (по умолчанию), `jpeg`, `webp`; `output_compression` 0–100 для jpeg и webp; `background` — `transparent`, `opaque`, `auto` (прозрачность требует png или webp); `n` от 1 до 10; `moderation` — `auto` или `low`; длина `prompt` до 32 000 символов; `stream` с `partial_images` от 0 до 3. Для свободного размера у gpt-image-2 действуют ограничения из руководства: длинная сторона не больше 3840 px, обе стороны кратны 16, соотношение сторон не больше 3:1, общее число пикселей от 655 360 до 8 294 400.

Готовые запросы для разных размеров, прозрачного фона и потоковой выдачи собраны в статье [OpenAI Image Generation API cURL: актуальные запросы для генерации и редактирования](/ru/posts/openai-image-generation-api-curl).

## POST /v1/images/edits: правки, маски и замена отключённого variations

![Шпаргалка параметров Images API для generations и edits: size, quality, output_format, background, input_fidelity и ограничения по моделям](https://www.aifreeapi.com/posts/ru/openai-image-generation-api-endpoint/img/output-controls-cheatsheet.webp)

Многие ищут «endpoint генерации», а на деле хотят изменить уже существующее изображение. Маршрут остаётся тем же — прямой Images API, только ветка `edits`. Endpoint принимает до 16 входных изображений для моделей GPT Image, необязательную маску (`mask` как `image_url` или `file_id`) и текстовый запрос; входные изображения передаются файлами, идентификаторами файлов или в base64. Это и есть замена отключённого `variations`.

```js
import fs from "node:fs";
import OpenAI from "openai";

const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const result = await client.images.edit({
  model: "gpt-image-2.5-sunburst",
  image: [fs.createReadStream("product-shot.png"), fs.createReadStream("shelf-reference.png")],
  prompt: "Сохрани форму товара и поставь его на чистую студийную полку с тёплым светом",
});

fs.writeFileSync("product-on-shelf.png", Buffer.from(result.data[0].b64_json, "base64"));
```

Два параметра зависят от модели. `input_fidelity` (`high` или `low`) задаёт, насколько точно сохраняются детали входных изображений: у `gpt-image-1-mini` доступен только `low`, а для `gpt-image-2` руководство просит параметр не указывать — модель всегда работает с высокой точностью, из-за чего правки по референсам могут потреблять больше входных токенов. `background: "transparent"` для `gpt-image-2` в справочнике помечен как предварительная возможность. Модель на edits можно не указывать — тогда подставляется `gpt-image-2.5-sunburst`, но явное значение избавит от сюрпризов при смене значения по умолчанию.

Если дальше вас интересуют маски, сохранение деталей и композиция из нескольких файлов, продолжение — [OpenAI Image Editing API: правка изображений через images.edit](/ru/posts/openai-image-editing-api). Для этой страницы достаточно правила: **правка — полноценный сценарий Images API, а не повод переходить в Responses**.

## Responses и image_generation: когда картинка — шаг большего процесса

Responses API выигрывает не потому, что он новее, а потому, что он держит контекст. Основная модель читает инструкции, вызывает другие инструменты, помнит предыдущие ходы и на одном из шагов генерирует изображение. По [руководству по инструменту image_generation](https://developers.openai.com/api/docs/guides/tools-image-generation) в `tools` добавляется объект `{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}`; внутри инструмента принимаются `gpt-image-2.5-sunburst`, `gpt-image-2.5-flare`, `gpt-image-2`, `gpt-image-1.5`, `gpt-image-1` и `gpt-image-1-mini`. В верхнем `model` стоит основная текстовая модель: руководство требует gpt-5 или новее, а страница инструмента приводит собственный список поддерживаемых моделей, поэтому перед выбором сверьтесь со страницей конкретной модели.

```js
import fs from "node:fs";
import OpenAI from "openai";

const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const response = await client.responses.create({
  model: "gpt-5.5",
  input: "Нарисуй иконку бумажного самолётика в стиле стикера для приложения о путешествиях",
  tools: [{ type: "image_generation", model: "gpt-image-2.5-sunburst" }],
});

const call = response.output.find((item) => item.type === "image_generation_call");
fs.writeFileSync("plane.png", Buffer.from(call.result, "base64"));
console.log(call.id, call.revised_prompt); // id вида ig_..., понадобится для следующей правки
```

Результат приходит элементом `image_generation_call`: в `result` лежит base64, рядом есть `id` и `revised_prompt`. Байты и здесь нужно сохранять самим. А вот продолжать правки проще, чем в Images API: в следующий запрос передаётся `previous_response_id` либо входной элемент `{"type": "image_generation_call", "id": "ig_..."}` вместе с новым сообщением пользователя.

```js
const edited = await client.responses.create({
  model: "gpt-5.5",
  previous_response_id: response.id,
  input: "Сделай самолётик синим и добавь тонкую белую обводку",
  tools: [{ type: "image_generation", model: "gpt-image-2.5-sunburst" }],
});
```

Полезные параметры инструмента: `action` со значениями `auto`, `generate`, `edit` (запрос `edit` без изображения в контексте вернёт ошибку), `partial_images` от 1 до 3 для потоковых событий `response.image_generation_call.partial_image` с полем `partial_image_b64`, а `tool_choice: {"type": "image_generation"}` заставляет модель вызвать инструмент обязательно.

Стоимость считается по токенам: у GPT Image 2.5 это $8 за миллион входных токенов изображения, $2 за миллион кешированных входных, $30 за миллион выходных токенов изображения, $5 за миллион входных текстовых токенов и $1,25 за миллион кешированных текстовых. Две оговорки влияют на выбор маршрута: кешированный тариф применяется только через инструмент в Responses, а не при прямом вызове `/v1/images/*`, и Responses дополнительно списывает токены основной модели. Каждое промежуточное изображение при потоковой выдаче добавляет 100 выходных токенов. Пересчёт в цену за картинку по качеству и размеру — в статье [Сколько стоит изображение в OpenAI API: GPT Image 2.5 и GPT Image 2](/ru/posts/openai-image-generation-api-pricing).

Когда ваша задача — «с какого endpoint начать», Responses добавляет лишние слои: основную модель, разбор вывода инструмента и более длинную цепочку отладки. Переходите на него, когда проблемой становится сама оркестрация, а не отдельная картинка.

## gen_id и parent_gen_id из ChatGPT: endpoint для скачивания не существует

В JSON диалога ChatGPT, в экспорте данных или в инструментах разработчика браузера видны поля `gen_id`, `parent_gen_id`, `referenced_image_ids`, `asset_pointer` вида `file-service://file-…` и имя инструмента `image_gen`. Отсюда естественная гипотеза: должен быть endpoint вида «дай картинку по gen_id». Проверка по документации даёт однозначный результат:

- в справочнике Images API есть только `generations`, `edits` и отключённый `variations`; ни один из них не принимает идентификатор ранее созданного изображения и ни один не возвращает изображение по id;
- в Responses единственные идентификаторы для продолжения — `id` элемента `image_generation_call` (вида `ig_…`) и `previous_response_id`; это идентификаторы API, с `gen_id` из ChatGPT они не совпадают и для скачивания чужой картинки не подходят;
- `gen_id` — внутреннее поле инструмента `image_gen` в продукте ChatGPT. В публичной документации OpenAI нет метода, который принимал бы его, и нет описания формата `file-service://`.

Адреса `backend-api`, которые видны в сетевых запросах веб-клиента ChatGPT, — внутренний интерфейс приложения, а не поддерживаемый API: он не задокументирован, меняется без предупреждения и не относится к `https://api.openai.com/v1`. По сторонним разборам сетевого трафика ChatGPT (лето 2026 года), ссылки `files.oaiusercontent.com` — временные подписанные URL: 404 означает истёкший срок, 422 — потерянные параметры запроса. Строить на них скачивание бессмысленно.

История полей объясняет, почему они всплывают до сих пор. В 2023–2024 годах, когда ChatGPT рисовал через DALL·E 3, пользователи просили модель назвать `gen_id` картинки и подставляли его в `referenced_image_ids` (в обсуждениях встречается и написание `reference_image_ids`), чтобы сохранить персонажа между запросами; `parent_gen_id` указывал на предыдущую генерацию в цепочке правок. Это были приёмы внутри чата, а не параметры API — и в API они не появились.

### Где лежит изображение на каждой поверхности

| Поверхность | Где байты | Какой идентификатор существует | Что можно сделать |
| --- | --- | --- | --- |
| Чат и библиотека ChatGPT | в хранилище ChatGPT; по сторонним разборам — за указателем `file-service://file-…` | `gen_id`, `parent_gen_id`, `asset_pointer` в JSON диалога | скачать кнопкой в чате или в библиотеке; запросить экспорт данных; публичного метода по идентификатору нет |
| Экспорт данных ChatGPT | ZIP-архив, по [справке OpenAI](https://help.openai.com/en/articles/7260999-exporting-your-chatgpt-history-and-data) — «история чатов и другие данные аккаунта»; по сторонним разборам в `conversations.json` есть записи `image_asset_pointer`, чьи `file-…` совпадают с файлами в архиве | те же поля | один раз сохранить архив у себя и разложить файлы по своему хранилищу |
| Images API | только в теле ответа, `data[].b64_json` | нет; в ответе лишь `usage`, `created` и фактические параметры | декодировать и сохранить сразу; повторный запрос по id невозможен |
| Responses + `image_generation` | в поле `result` элемента `image_generation_call` (base64) | `id` элемента (`ig_…`) и `id` ответа | продолжить правки через `previous_response_id`; байты сохранить самостоятельно |

### Поля ChatGPT и их аналоги в API

| Поле в ChatGPT | Что это | Чем заменяется в API |
| --- | --- | --- |
| `gen_id` | идентификатор генерации внутри инструмента `image_gen` | `id` элемента `image_generation_call` в Responses; в Images API идентификатора нет, есть только сохранённые вами байты |
| `parent_gen_id` | ссылка на предыдущую генерацию в цепочке правок | `previous_response_id` или входной элемент `{"type": "image_generation_call", "id": "ig_…"}` |
| `referenced_image_ids` (`reference_image_ids`) | изображения-референсы для следующей генерации | массив `image` в `/v1/images/edits` (до 16 файлов, `file_id` или base64) или изображение во входе Responses |
| `asset_pointer` `file-service://file-…` | указатель на файл в хранилище ChatGPT (по сторонним разборам) | аналога нет; байты приходят в `b64_json` или `result` и хранятся у вас |
| `image_gen` | имя инструмента в диалоге ChatGPT | инструмент `image_generation` в Responses |
| `backend-api` | внутренний интерфейс веб-клиента | публичная база `https://api.openai.com/v1` |

### Что делать, если остался только gen_id

1. **Картинка ещё видна в чате или библиотеке.** Скачайте её кнопкой в интерфейсе: в библиотеке изображение выбирается и сохраняется командой «Download image». Это единственный штатный путь получить именно те байты, которые сгенерировал ChatGPT.
2. **Нужны все изображения аккаунта.** Запросите экспорт: Settings → Data controls → Export data или через Privacy Portal. По справке OpenAI экспорт доступен на Free, Go, Plus, Pro и подходящих Edu-аккаунтах, но не в рабочих пространствах Business, Enterprise и Healthcare; подготовка занимает до 7 дней, ссылка на архив действует 24 часа после получения, удалённые чаты восстановить нельзя. Справка не перечисляет содержимое архива поимённо — что в нём есть файлы изображений, совпадающие с `image_asset_pointer`, известно из сторонних разборов, а не из документации.
3. **Нужна воспроизводимая картинка для продукта.** Сгенерируйте её через API — `/v1/images/generations` для одного запроса или Responses, если нужна цепочка правок, — и сохраните байты в своё хранилище с собственным идентификатором. Исходный `gen_id` при этом не используется: это не ключ к файлу, а запись о том, что генерация когда-то произошла в ChatGPT.

Если же проблема в самом ChatGPT — изображения не генерируются или не открываются — порядок проверки описан в статье [ChatGPT не генерирует изображения? Сначала проверьте статус, потом ветку сбоя](/ru/posts/chat-gpt-image-generator-not-working).

## Сроки отключения gpt-image-1 и gpt-image-1.5: на что переходить

Перечисление моделей в справочнике по-прежнему включает старые идентификаторы, но [страница отключений](https://developers.openai.com/api/docs/deprecations) даёт даты, после которых запросы с ними перестанут работать:

| Модель | Объявлено | Отключение | Рекомендованная замена |
| --- | --- | --- | --- |
| `gpt-image-1` | 22 апреля 2026 года | 23 октября 2026 года | `gpt-image-2.5-sunburst` или `gpt-image-2.5-flare` |
| `gpt-image-1.5`, `gpt-image-1-mini`, `chatgpt-image-latest` | 2 июня 2026 года | 1 декабря 2026 года | `gpt-image-2.5-sunburst` или `gpt-image-2.5-flare` |
| `dall-e-2`, `dall-e-3` | 14 ноября 2025 года | отключены 12 мая 2026 года | `gpt-image-2` (на момент объявления также `gpt-image-1` и `gpt-image-1-mini`) |
| `gpt-image-2` | — | в списке отключений нет | — |

Для миграции обычно достаточно заменить строку `model`: generations и edits у всех моделей GPT Image одни и те же, ответ — тот же `b64_json`. Отличия, которые стоит проверить: уровни `xhigh` и `max` появляются только у 2.5, у ранних моделей качество ограничено `high`; `input_fidelity` для gpt-image-2 не указывается; свободный размер `WIDTHxHEIGHT` относится к семейству gpt-image-2.

Отдельно о `chatgpt-image-latest`. По [странице модели](https://developers.openai.com/api/docs/models/chatgpt-image-latest) это «предыдущая модель изображений, использовавшаяся в ChatGPT», то есть снимок, который ранее стоял за генерацией в самом ChatGPT; для работы через API страница рекомендует GPT Image 2.5 Sunburst. Модель доступна только в `v1/images/generations`, `v1/images/edits` и `v1/batch`, а её страница публикует цены за изображение: качество `low` — $0,009 за 1024×1024 и $0,013 за 1024×1536 или 1536×1024, `medium` — $0,034 и $0,05, `high` — $0,133 и $0,20. Переходить на неё ради «того же, что в ChatGPT» нет смысла: 1 декабря 2026 года она отключается вместе с gpt-image-1.5.

Старые идентификаторы и даты стоит держать в голове ещё по одной причине: ошибка после отключения выглядит как «модель не найдена», а не как «неверный endpoint». Если endpoint правильный, а запрос всё равно отклоняется, проверьте по порядку: не отключена ли модель; не вернулась ли ошибка `moderation_blocked` (в `moderation_details` указаны `categories` и `moderation_stage` — `input` или `output`); не требует ли организация подтверждения — для этого случая есть разбор [GPT Image 2: что делать с ошибкой Your organization must be verified](/ru/posts/openai-image-generation-api-verification). И только затем переписывайте тело запроса.

## Короткие ответы: gen_id, Responses, chatgpt-image-latest и ошибки

**Можно ли получить картинку ChatGPT по gen_id через OpenAI API?**

Нет. Ни `/v1/images/generations`, ни `/v1/images/edits`, ни Responses не принимают `gen_id`; метода GET для изображений в Images API нет. Картинку скачивают из чата или библиотеки ChatGPT, забирают из экспорта данных либо генерируют заново через API и хранят у себя.

**Нужен ли Responses для обычного image editing?**

Нет. `POST /v1/images/edits` и `client.images.edit()` остаются основным путём для правок: до 16 входных изображений, маска, текстовый запрос, модель по умолчанию `gpt-image-2.5-sunburst`. Responses нужен, когда правка — часть диалога или агентного процесса.

**Что ставить в `model` на `/v1/images/generations` сегодня?**

`gpt-image-2.5-sunburst`, если важна точность правок и верхние уровни качества `xhigh` и `max`, или `gpt-image-2.5-flare` для быстрой повседневной генерации. `gpt-image-2` продолжает работать и даёт произвольный размер `WIDTHxHEIGHT`; `gpt-image-1` и `gpt-image-1.5` подходят только до дат отключения.

**Что такое chatgpt-image-latest и стоит ли на него переходить?**

Это снимок модели, которая раньше использовалась в ChatGPT, с фиксированными ценами за изображение (от $0,009 за 1024×1024 в качестве `low`). Отключается 1 декабря 2026 года; страница модели рекомендует для API GPT Image 2.5 Sunburst.

**Почему запрос может падать, даже если endpoint выбран правильно?**

Три частые причины: идентификатор модели уже отключён, запрос заблокирован модерацией (ошибка `moderation_blocked` с категориями и стадией в `moderation_details`) или организация должна пройти подтверждение. Endpoint в этих случаях менять не нужно — проверьте модель, текст запроса и статус организации.

**Чем заменить отключённый `/v1/images/variations`?**

Вызовом `/v1/images/edits` с моделью GPT Image и текстовым запросом, который описывает желаемое изменение; исходное изображение передаётся в `image`.
