Правка картинки

POST/v1/images/edits

Правка — это генерация с референсами: тот же обработчик, тело только JSON.

Запрос

modelstringbodyобязательно
id модели картинок — тот же каталог, что у генерации
promptstringbodyобязательно
что изменить; шлюз проверяет наличие, длину — модель (EMPTY_PROMPT)
imagestring|arraybody
картинка, которую правим: URL, data-URL или base64; массив — если их несколько

Ответы

200

{
  "created": 0,
  "cost_usd": "0.027",
  "data": [ { "b64_json": "iVBORw0KGgoAAAANSUhEUgAA…" } ]
}

202

{ "id": "img_9f2c1b7e…", "status": "processing", "estimated_cost_usd": "0.027" }

тело не JSON (в том числе multipart из SDK), нет prompt или референс > 80 МБ

FILE_DOWNLOAD_FAILED — сабмит отклонён: 4xx провайдера отдаём его статусом и кодом, резерв освобождаем

ключа нет в заголовке или он не наш

остатка не хватает на худшую цену этого запроса

провайдер взял джобу и провалил генерацию; его код — в error.code

сабмит упал по 5xx или сети: принята джоба или нет — неизвестно

Подробности

Нужен ключ в заголовке 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.codeFILE_TOO_LARGE по размеру, FILE_TYPE_NOT_ALLOWED по типу. Количество референсов шлюз не ограничивает; сколько из них учтёт модель — на её стороне. Значение, которое не разобралось ни как URL, ни как base64, молча отбрасывается: запрос уйдёт без этого референса и без ошибки.

Примеры кода
curl https://api.teamtoken.store/v1/images/edits \
  -H "Authorization: Bearer sk-…" \
  -H "Content-Type: application/json" \
  -d '{ "model": "nano-banana-pro",
        "prompt": "replace the background with a snowy street at night",
        "image": "data:image/png;base64,iVBORw0KGgo..." }'
Запрос
https://api.teamtoken.store/v1

Панель отправляет запрос с этого домена; в своём коде используйте адрес выше.

Ключ никуда не сохраняется: он живёт в этой вкладке до перезагрузки страницы.

id модели картинок — тот же каталог, что у генерации

что изменить; шлюз проверяет наличие, длину — модель (EMPTY_PROMPT)

картинка, которую правим: URL, data-URL или base64; массив — если их несколько

Запрос уйдёт по-настоящему. Генерация тарифицируется, и деньги резервируются сразу при постановке в очередь.

Ответ

Нажмите «Отправить запрос» выше — и здесь появится ответ.