Изображения: справочник

Проверка цены, ограничения файлов, статусы и получение результата.

Рассчитайте резерв

Подставьте модель, операцию, provider_option_id и поля input_schema из GET /media/models. Это пример структуры, а не универсальная схема операции.

curl
curl https://api.closerouter.dev/v1/media/quote \
  -H "Authorization: Bearer $CLOSEROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "YOUR_IMAGE_MODEL_ID",
  "operation": "YOUR_OPERATION",
  "input": {
    "prompt": "A minimal product photo"
  },
  "provider": {
    "option_id": "YOUR_PROVIDER_OPTION_ID"
  }
}'

Выбор операции и оценка

GET /media/models возвращает только включённые операции, input_schema, имена полей исходников, provider_option_id и наши ставки с единицами и условиями.

POST /media/quote принимает model, operation, input и provider.option_id. Он не запускает модель и не списывает деньги. reserved_usd — максимальный резерв; pending означает неопределённость итоговой суммы.

Отправьте те же поля на endpoint из метаданных и передайте reserved_usd из оценки как max_cost_usd. Если необходимый резерв вырос, сервер вернёт 409 до запуска.

Исходники и резерв

Для multipart передавайте input как JSON-строку, а файлы — под именами input_image_fields; повторяйте имя с [] для массивов. Один файл — до 20 МБ (20 000 000 байт), не более 16 исходников; схема операции может задавать меньший предел. Общий JSON ограничен 20 МиБ, для больших исходников используйте multipart.

Публичный HTTPS URL скачивается и проверяется до запуска. Предыдущий результат доступен только владельцу. Для операций без обязательного prompt текст не нужен.

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

Получение результата

Для генерации через асинхронный маршрут POST /images/generations ожидает готовую картинку до 120 секунд от получения запроса. Ответ 200 содержит URL или b64_json и usage.cost_usd. Отмена или истечение срока до фиксации списания исключает поздний платёж; принятый запрос поставщику автоматически не повторяется.

Для остальных путей и ранее принятых заданий ответ 202 с object=image.request означает незавершённую доставку. Читайте GET /media/requests/{id}; повторный POST создаст новую генерацию. При outcome_unknown автоматического повтора нет. Безвозвратно недоставленный результат не оплачивается клиентом.

Результаты сохраняют порядок и метки слоёв/масок. Для операций предел одного выходного файла — 64 МиБ, общий предел результатов — 256 МиБ. URL указывает только на наш ресурс; response_format=b64_json возвращает сохранённые байты.

Параметры изображения

GPT Image и Gemini image используют /images/generations и /images/edits. Gemini image недоступны на /chat/completions.

n, size, quality, style, background, moderation, output_compression и output_format принимаются на любом image-маршруте и переводятся в схему операции. size задаёт только пропорции и пишется лишь в поле, которое ничего не тарифицирует, поэтому резерв не растёт.

Значения конкретной операции передавайте напрямую или в input: они имеют приоритет. Разрешение Gemini Pro и Flash Preview — input.resolution 1K, 2K или 4K; google/gemini-3.1-flash-lite-image поддерживает только 1K.

Проверка ввода

Значение вне объявленных операцией заменяется её значением по умолчанию, кроме тарифицируемого или обязательного поля: там запрос отклоняется со списком допустимых значений. Поля, которого нет ни в схеме, ни в списке выше, тоже отклоняется, и metadata называет поле и принимаемые операцией поля.

Для edits используйте multipart image[] uploads или JSON images как inline data: URL.

Для обычных inference inputs отправляйте файлы как data URL или multipart. Объявленные ниже image-операции также принимают публичные HTTPS URL и ссылки на ваши предыдущие результаты.

Выдача и хранение

Внешние результаты изображений CloseRouter перезаливает перед ответом. Ссылка контролируется CloseRouter и никогда не перенаправляет на провайдера.

Такая ссылка доступна ровно 30 дней с момента создания; в момент истечения она становится недоступной.

У обычных image-маршрутов b64_json остаётся inline. Новые image-операции сначала сохраняют результат, а затем при необходимости возвращают его байты в b64_json.

Ограничения файлов

ДанныеПредел
MultipartДо 16 исходников, каждый до 20 000 000 байт. Схема может задавать меньший предел.
JSON20 МиБ; для больших исходников используйте multipart.
Результат64 МиБ на файл, 256 МиБ суммарно.
СсылкаДоступна 30 дней.

Проверить незавершённую задачу

Для ответа 202 с object: image.request подставьте полученный ID. При outcome_unknown не повторяйте POST автоматически: он может создать новую генерацию.

curl
curl https://api.closerouter.dev/v1/media/requests/REQUEST_ID \
  -H "Authorization: Bearer $CLOSEROUTER_API_KEY"