Skip to Content
Справочник APIПротокол совместимости с OpenAIImages

Images API

Два эндпоинта: генерация (текст → изображение) и редактирование (изображение + текст → изображение). Ответ в обоих случаях имеет стандартную структуру OpenAI — data[0].b64_json.

Что нужно сделатьЭндпоинтПоддерживаемые модели
Сгенерировать изображение по текстуPOST /v1/images/generationsСемейства GPT Image, Nano Banana (Gemini), Seedream, Qwen-Image, MAI Image
Загрузить изображение и изменить его по инструкцииPOST /v1/images/editsGPT Image, Nano Banana (Gemini), MAI Image

Seedream и Qwen-Image не поддерживают /v1/images/edits: режим «изображение → изображение» работает через эндпоинт generations, но поля для референсных изображений у них разные — Seedream использует image, Qwen — input_images; не перепутайте их. Если для Gemini нужно управлять разрешением (от 512 до 4K), используйте нативный протокол Gemini. Различия в параметрах описаны на странице каждого семейства.

Быстрый старт

Минимальный рабочий запрос: сгенерировать одно изображение 1024×1024, декодировать его и сохранить как output.png.

base_urlhttps://api.ofox.io/v1
Эндпоинт генерацииhttps://api.ofox.io/v1/images/generations
Эндпоинт редактированияhttps://api.ofox.io/v1/images/edits
ID моделиopenai/gpt-image-2.5-flare
gen.py
import base64 from openai import OpenAI client = OpenAI( api_key="YOUR_OFOX_API_KEY", base_url="https://api.ofox.io/v1", timeout=600, # Images API отвечает синхронно и может работать долго ) resp = client.images.generate( model="openai/gpt-image-2.5-flare", prompt="Красное яблоко на белом столе", size="1024x1024", quality="low", ) with open("output.png", "wb") as f: f.write(base64.b64decode(resp.data[0].b64_json))

API отвечает синхронно — установите таймаут клиента на 600 секунд. Запросы с высоким качеством, большим размером и запросы на редактирование могут выполняться несколько минут; см. замеры задержки.

Все семейства вызываются одинаково — меняется только model. Допустимые значения и параметры, специфичные для семейства, различаются; см. описание каждого параметра ниже.

Генерация изображений

POST https://api.ofox.io/v1/images/generations

Параметры запроса

Значения и значения по умолчанию ниже относятся к семейству GPT Image (gpt-image-2.5-flare, gpt-image-2.5-sunburst, gpt-image-2). Отличия других семейств указаны отдельно. Подробности замеров: семейство GPT Image.

Обязательные
modelобязательныйstring

ID модели; регистр учитывается — при ошибке в ID возвращается 404 model_not_found.

▸ Подробнее

Поддерживаемые модели перечислены в таблице в начале страницы. Указывайте полный ID с префиксом поставщика, например openai/gpt-image-2.5-flare.

promptобязательныйstring

Описание изображения, которое нужно сгенерировать.

Основные
sizestring· по умолчанию auto· значенияШИРИНАxВЫСОТАauto

Размер результата. Можно задать произвольные ширину и высоту, но они должны соответствовать четырём правилам, иначе возвращается 400 Invalid size.

▸ Подробнее

Четыре правила:

  • Ширина и высота делятся на 16
  • Длинная сторона ≤ 3840
  • Соотношение сторон от 1:3 до 3:1
  • Общее число пикселей ≥ 655,360 (768x768 недопустимо, 1024x768 допустимо)

Если параметр не указан или равен auto, размер выбирает модель — по нашим замерам, 1254×1254. Если нужен фиксированный размер, укажите его явно. У других семейств правила размеров другие — см. страницу соответствующего семейства. Подробнее: GPT Image · размер.

qualitystring· значенияlowmediumhighxhighmaxauto

Уровень качества; напрямую определяет цену. У gpt-image-2 нет xhigh / max.

▸ Подробнее
  • У gpt-image-2 нет xhigh / max — они возвращают 400.
  • Значения эпохи DALL·E standard / hd не принимаются — они возвращают 400.
  • Отсутствие параметра не равнозначно medium: уровень выбирает модель (по нашим замерам — low). Для стабильного качества и стоимости задавайте его явно.

У большинства других семейств уровней качества нет — см. страницу соответствующего семейства. Подробнее: GPT Image · качество.

ninteger· по умолчанию 1· значения1–10

Количество изображений; каждое оплачивается отдельно. Модели Gemini не поддерживают этот параметр — не передавайте его.

output_formatstring· по умолчанию png· значенияpngjpegwebp

Формат выходного файла.

▶Дополнительные · 7output_compression · background · moderation · stream · partial_images · input_images · extra_body.provider.typeExpand
output_compressioninteger· значения0–100

Уровень сжатия; только для jpeg / webp.

backgroundstring· по умолчанию opaque· значенияopaquetransparentauto

Фон. Для transparent нужен формат с альфа-каналом (png / webp).

moderationstring· значенияautolow

Строгость модерации контента.

streamboolean· значенияtruefalse

Потоковая передача ответа. Вместе с partial_images позволяет получать промежуточные изображения в процессе генерации.

partial_imagesinteger· значения0–3

Количество промежуточных изображений в потоке; требует stream: true. Согласно документации OpenAI, каждое промежуточное изображение добавляет 100 выходных токенов.

input_imagesstring[]· значения1–3 шт.

Массив референсных изображений (URL или base64), только для семейства Qwen, от 1 до 3 штук.

▸ Подробнее

Другие семейства принимают его без ошибки, но он не действует; у Seedream поле для референсных изображений называется image.

extra_body.provider.typestring· значенияazure_foundryopenai

Выбор провайдера. Необязателен и обычно не нужен — шлюз маршрутизирует запросы автоматически. Имеет смысл, если у вас есть требования к модерации контента; после выбора провайдера запросы не переключаются на другого провайдера, если выбранный недоступен.

▸ Подробнее

Эквивалентен заголовку X-OfoxAI-Provider-Type. См. Дополнительно: закрепление провайдера.

Ответ

200 OK (b64_json сокращён)
{ "created": 1777385517, "data": [ { "b64_json": "iVBORw0KGgoAAAANSUhEUgAA…", "index": 0 } ], "model": "openai/gpt-image-2.5-flare", "size": "1024x1024", "quality": "low", "usage": { "input_tokens": 13, "input_tokens_details": { "text_tokens": 13 }, "output_tokens": 196, "output_tokens_details": { "image_tokens": 196 }, "total_tokens": 209 } }

Изображение в base64, без префикса data:image/png;base64,.

▸ Подробнее

Декодируйте и запишите в файл; для отображения в браузере добавьте префикс самостоятельно. Поля url в ответе нет.

Индекс изображения; различает изображения при n > 1.

sizestring

Фактический размер результата. Если size не был указан или был равен auto, фактический размер можно узнать здесь.

qualitystring

Фактически использованный уровень качества. Если quality не был указан, здесь видно, какой уровень применён.

Фактически использованные фон и формат. Возвращаются не всегда — не полагайтесь на эти два поля.

usageobject

Расход для тарификации. output_tokens — токены выходного изображения; input_tokens_details.text_tokens — токены промпта.

▸ Подробнее

По этим значениям рассчитывается стоимость вызова.

Редактирование изображений

POST https://api.ofox.io/v1/images/edits

Этот эндпоинт поддерживает GPT Image, Nano Banana (Gemini) и MAI Image. Для Seedream и Qwen-Image он возвращает 400 endpoint_not_supported — используйте поле референсных изображений эндпоинта генерации; см. Seedream и Qwen-Image.

Параметры запроса

Передаются как поля формы multipart/form-data вместе с загружаемым файлом изображения. Значения и значения по умолчанию также относятся к семейству GPT Image.

Обязательные
modelобязательныйstringform

ID модели; правила те же, что для генерации. Поддерживаемые модели перечислены в таблице в начале страницы.

imageобязательныйfileform· значенияPNGJPEG

Референсное изображение в виде локального файла (в cURL — с префиксом @), а не URL.

▸ Подробнее

Для нескольких изображений повторите поле как image[]. Не более 15 МБ на файл и не более 50 МБ на тело запроса; шлюз не ограничивает количество изображений, рекомендуется не более 16.

promptобязательныйstringform

Инструкция для редактирования.

Основные
maskfileform· значенияPNG с альфа-каналом

Маска для инпейнтинга: PNG с альфа-каналом того же размера, что и image; прозрачная область — то, что перерисовывается.

▸ Подробнее

Действует только на этом эндпоинте — при генерации молча игнорируется. Как подготовить маску и результаты замеров: GPT Image · инпейнтинг по маске.

sizestringform· по умолчанию auto· значенияШИРИНАxВЫСОТАauto

Размер результата; правила те же, что для генерации.

▸ Подробнее

Если параметр не указан или равен auto, размер выбирает модель — совпадение с исходным не гарантируется. Чтобы сохранить исходный размер, укажите его явно.

qualitystringform· значенияlowmediumhighxhighmaxauto

Уровень качества; правила те же, что для генерации — у gpt-image-2 нет xhigh / max.

nintegerform· по умолчанию 1· значения1–10

Количество изображений; каждое оплачивается отдельно.

▶Дополнительные · 1X-OfoxAI-Provider-TypeExpand
X-OfoxAI-Provider-Typestringheader· значенияazure_foundryopenai

Выбор провайдера. Необязателен и обычно не нужен — шлюз маршрутизирует запросы автоматически. Имеет смысл, если у вас есть требования к модерации контента; после выбора провайдера запросы не переключаются на другого провайдера, если выбранный недоступен.

▸ Подробнее

Этот эндпоинт принимает multipart-загрузку, поэтому закрепить провайдера можно только заголовком — поле формы extra_body молча игнорируется. См. Дополнительно: закрепление провайдера.

Ответ

Структура та же, что при генерации; в usage добавляются входные токены референсных изображений:

200 OK (b64_json сокращён)
{ "created": 1777385669, "data": [ { "b64_json": "iVBORw0KGgoAAAANSUhEUgAA…", "index": 0 } ], "model": "openai/gpt-image-2", "size": "auto", "quality": "low", "usage": { "input_tokens": 1041, "input_tokens_details": { "image_tokens": 1024, "text_tokens": 17 }, "num_input_images": 1, "output_tokens": 358, "total_tokens": 1399 } }

Входные токены, начисленные за референсные изображения. По нашим замерам, одно референсное изображение 1024×1024 даёт 1,024 токена. Именно из-за этого редактирование стоит дороже, чем генерация изображения того же размера по тексту.

Количество референсных изображений. Позволяет убедиться, что модель действительно их прочитала.

Остальные поля такие же, как в ответе генерации.

Поддерживаемые модели и цены см. в Каталоге моделей .

Вызов

edit.py
import base64 from openai import OpenAI client = OpenAI(api_key="YOUR_OFOX_API_KEY", base_url="https://api.ofox.io/v1", timeout=600) with open("apple.png", "rb") as f: resp = client.images.edit( model="openai/gpt-image-2", image=f, prompt="Сделай яблоко зелёным, остальное оставь без изменений", size="auto", quality="low", ) with open("apple_edited.png", "wb") as out: out.write(base64.b64decode(resp.data[0].b64_json))

В поле image передавайте локальный путь к файлу (в cURL — с префиксом @), а не URL.

Сравнение по замерам:

ОригиналПосле редактирования
Исходное красное яблокоЗелёное яблоко после редактирования

Ошибки

При ошибке возвращается HTTP-статус ошибки и следующее тело (по замерам):

400 Bad Request
{ "error": { "code": null, "message": "The model 'gpt-image-2' does not support quality 'xhigh'.", "param": null, "request_id": "fbe4f24c-779d-41a0-8b3a-c62886cdd1ae", "type": "image_generation_user_error" } }

code может быть null. Ориентируйтесь на HTTP-статус и message.

СтатусОшибкаПричинаРешение
400Invalid size '…'Размер нарушает одно из четырёх правилИсправьте согласно size
400does not support quality '…' или недопустимое значениеxhigh / max переданы для gpt-image-2, либо передано standard / hdИспользуйте значение из списка quality
400Unknown parameter: '…'Неподдерживаемое поле, например style из DALL·EУдалите это поле
400Invalid image file or mode for image 1Референсное изображение не в формате PNG / JPEG, либо маска не является PNG с альфа-каналом или не совпадает по размеру с изображениемПроверьте image и mask
400provider_type_unavailableУказанный провайдер не обслуживает эту модельУберите параметр провайдера, чтобы шлюз маршрутизировал запрос автоматически
404model_not_foundID модели написан с ошибкой или в неверном регистреСкопируйте полный ID из таблицы на этой странице
429rate_limit_exceededПревышено 100 RPM на команду; дополнительные ключи лимит не увеличиваютСнизьте параллельность, повторите запрос с задержкой

Обращаясь в поддержку, приложите request_id и сведения об ошибке (HTTP-статус и error.message) из ответа. Рекомендуем записывать их в свои логи.

Дополнительно: закрепление провайдера

Необязательно и обычно не нужно. Все три модели GPT Image (gpt-image-2.5-flare, gpt-image-2.5-sunburst, gpt-image-2) обслуживаются провайдерами azure_foundry и openai — как для генерации, так и для редактирования. Без закрепления шлюз маршрутизирует запросы автоматически.

Выбирайте провайдера, если у вас есть требования к модерации контента. В этом случае запросы отправляются только этому провайдеру; если он недоступен, автоматического переключения на другого провайдера не происходит.

Указание провайдера, который не обслуживает модель, возвращает 400 provider_type_unavailable.

ПровайдерОписаниеМодерация (gpt-image-2)
azure_foundryРазмещено в Microsoft AzureСтроже
openaiОфициальный API OpenAIМягче

Два провайдера openai/gpt-image-2 модерируют по разным стандартам. Если промпт раз за разом отклоняется, можно явно указать openai. Без указания провайдера запросы распределяются по весам и могут попасть в azure_foundry.

Текст в изображение — /v1/images/generations

Тело запроса в формате JSON, поэтому работают оба способа: поле тела extra_body.provider.type и заголовок X-OfoxAI-Provider-Type.

gen_pinned.py
resp = client.images.generate( model="openai/gpt-image-2", prompt="A simple red apple on a white table", size="1024x1024", extra_body={"extra_body": {"provider": {"type": "openai"}}}, )

В официальных SDK OpenAI extra_body должен присутствовать в теле запроса как буквальный ключ. В TypeScript SDK достаточно записать extra_body прямо в объекте параметров. Аргумент extra_body= в Python SDK сливает своё содержимое с верхним уровнем тела, поэтому вложите ключ на уровень глубже либо используйте заголовок.

Изображение в изображение — /v1/images/edits

У multipart-загрузки нет JSON-тела, в которое можно вложить extra_body, поэтому здесь работает только заголовок.

Terminal
curl https://api.ofox.io/v1/images/edits \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "X-OfoxAI-Provider-Type: openai" \ -F "model=openai/gpt-image-2" \ -F "prompt=..." \ -F "image=@input.png"

В SDK: в Python передайте extra_headers={"X-OfoxAI-Provider-Type": "openai"}; в TypeScript передайте { headers: { 'X-OfoxAI-Provider-Type': 'openai' } } вторым аргументом.

В /v1/images/edits переданный полем формы extra_body молча игнорируется: изображение создаётся как обычно, но ограничение не действует. Используйте X-OfoxAI-Provider-Type.

Полный справочник: API · Маршрутизация провайдеров.

Официальная документация и дополнительные материалы

Официальная документация описывает поведение при прямом обращении к OpenAI. Если она расходится с замерами OfoxAI, приоритет имеют замеры на этом сайте.

Официальная документация OpenAI

Страницы семейств OfoxAI

Обновлено