Правка картинки
/v1/images/editsПравка — это генерация с референсами: тот же обработчик, тело только JSON.
Запрос
modelstringbodyобязательноpromptstringbodyобязательноEMPTY_PROMPT)imagestring|arraybodyОтветы
200
{
"created": 0,
"cost_usd": "0.027",
"data": [ { "b64_json": "iVBORw0KGgoAAAANSUhEUgAA…" } ]
}Подробности
Нужен ключ в заголовке Authorization: Bearer или x-api-key.
Отдельного кода за этой ручкой нет: она делегирует в POST /v1/images/generations, потому что правка — это и есть генерация с приложенными референсами. Все параметры, ответы, коды ошибок и тарификация — оттуда же.
⚠️ Тело парсится **только как JSON**, поэтому референсы надо передавать JSON-полями (image / images / image_url), а сами байты — data-URL или base64-строкой в значении. Настоящий multipart-upload — а именно его отправляет images.edit в OpenAI SDK — падает с 400 «Invalid JSON». Это ограничение шлюза, а не провайдера: пока multipart здесь не разобран, совместимость с SDK на этом маршруте заявлять нельзя. Из requests/curl шлите JSON, а картинку — data-URL или base64-строкой.
Референс-картинки (image-to-image, тот же персонаж или стиль) передаются в теле как image — одна строка или массив; принимаются также images, image_url, image_urls, input_image, init_image, ref_images. Значением может быть публичный URL, data-URL или голый base64, и мешать формы в одном запросе можно: URL шлюз сам не скачивает и передаёт провайдеру ссылкой, а base64 декодирует и передаёт байтами. Байты шлюз узнаёт по сигнатуре (PNG, JPEG, GIF, WebP) и режет на 80 МБ на каждый вход — больше даёт 400 ещё до провайдера. Вход, который прошёл наш предел, может отклонить уже модель по своим правилам: тогда её код приходит в error.code — FILE_TOO_LARGE по размеру, FILE_TYPE_NOT_ALLOWED по типу. Количество референсов шлюз не ограничивает; сколько из них учтёт модель — на её стороне. Значение, которое не разобралось ни как URL, ни как base64, молча отбрасывается: запрос уйдёт без этого референса и без ошибки.