Изображения: справочник
Проверка цены, ограничения файлов, статусы и получение результата.
Рассчитайте резерв
Подставьте модель, операцию, provider_option_id и поля input_schema из GET /media/models. Это пример структуры, а не универсальная схема операции.
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 байт. Схема может задавать меньший предел. |
| JSON | 20 МиБ; для больших исходников используйте multipart. |
| Результат | 64 МиБ на файл, 256 МиБ суммарно. |
| Ссылка | Доступна 30 дней. |
Проверить незавершённую задачу
Для ответа 202 с object: image.request подставьте полученный ID. При outcome_unknown не повторяйте POST автоматически: он может создать новую генерацию.
curl https://api.closerouter.dev/v1/media/requests/REQUEST_ID \
-H "Authorization: Bearer $CLOSEROUTER_API_KEY"