У публичного 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.
Какой endpoint выбрать: два пути Images API и инструмент в Responses

Правило выбора не изменилось со времён gpt-image-1, изменились только идентификаторы моделей. Руководство по генерации изображений называет два основных способа: 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 он помечен «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: сначала выберите маршрут.
POST /v1/images/generations: первый запрос с gpt-image-2.5-sunburst
Первый запрос стоит сделать намеренно скучным: один запрос, квадратный размер, одна актуальная модель. Так проверяются сразу ключ, проект, доступ к модели и форма тела запроса, и ничего лишнего не мешает найти причину сбоя. Модель на generations указывается обязательно — значения по умолчанию у этого endpoint нет.
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, а файл на диске:
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: актуальные запросы для генерации и редактирования.
POST /v1/images/edits: правки, маски и замена отключённого variations

Многие ищут «endpoint генерации», а на деле хотят изменить уже существующее изображение. Маршрут остаётся тем же — прямой Images API, только ветка edits. Endpoint принимает до 16 входных изображений для моделей GPT Image, необязательную маску (mask как image_url или file_id) и текстовый запрос; входные изображения передаются файлами, идентификаторами файлов или в base64. Это и есть замена отключённого variations.
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. Для этой страницы достаточно правила: правка — полноценный сценарий Images API, а не повод переходить в Responses.
Responses и image_generation: когда картинка — шаг большего процесса
Responses API выигрывает не потому, что он новее, а потому, что он держит контекст. Основная модель читает инструкции, вызывает другие инструменты, помнит предыдущие ходы и на одном из шагов генерирует изображение. По руководству по инструменту 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 или новее, а страница инструмента приводит собственный список поддерживаемых моделей, поэтому перед выбором сверьтесь со страницей конкретной модели.
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_..."} вместе с новым сообщением пользователя.
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.
Когда ваша задача — «с какого 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 — «история чатов и другие данные аккаунта»; по сторонним разборам в 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
- Картинка ещё видна в чате или библиотеке. Скачайте её кнопкой в интерфейсе: в библиотеке изображение выбирается и сохраняется командой «Download image». Это единственный штатный путь получить именно те байты, которые сгенерировал ChatGPT.
- Нужны все изображения аккаунта. Запросите экспорт: Settings → Data controls → Export data или через Privacy Portal. По справке OpenAI экспорт доступен на Free, Go, Plus, Pro и подходящих Edu-аккаунтах, но не в рабочих пространствах Business, Enterprise и Healthcare; подготовка занимает до 7 дней, ссылка на архив действует 24 часа после получения, удалённые чаты восстановить нельзя. Справка не перечисляет содержимое архива поимённо — что в нём есть файлы изображений, совпадающие с
image_asset_pointer, известно из сторонних разборов, а не из документации. - Нужна воспроизводимая картинка для продукта. Сгенерируйте её через API —
/v1/images/generationsдля одного запроса или Responses, если нужна цепочка правок, — и сохраните байты в своё хранилище с собственным идентификатором. Исходныйgen_idпри этом не используется: это не ключ к файлу, а запись о том, что генерация когда-то произошла в ChatGPT.
Если же проблема в самом ChatGPT — изображения не генерируются или не открываются — порядок проверки описан в статье ChatGPT не генерирует изображения? Сначала проверьте статус, потом ветку сбоя.
Сроки отключения gpt-image-1 и gpt-image-1.5: на что переходить
Перечисление моделей в справочнике по-прежнему включает старые идентификаторы, но страница отключений даёт даты, после которых запросы с ними перестанут работать:
| Модель | Объявлено | Отключение | Рекомендованная замена |
|---|---|---|---|
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. По странице модели это «предыдущая модель изображений, использовавшаяся в 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. И только затем переписывайте тело запроса.
Короткие ответы: 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.



