Изображение генерируется тем же методом chat/completions. Отдельного эндпоинта нет намеренно: модель, которая рисует и разговаривает, не должна требовать двух разных клиентов.
POST /api/v1/chat/completions
{
"model": "google/gemini-3-image",
"messages": [
{"role": "user", "content": "Разворот журнала о космосе, 1970-е, печать в две краски"}
],
"modalities": ["image", "text"]
}Параметр modalities обязателен: без него модель, умеющая и то и другое, ответит текстом. Порядок значений не важен.
{
"choices": [{
"message": {
"role": "assistant",
"content": "Готово. Обратите внимание на растр — он имитирует офсет.",
"images": [{
"type": "image_url",
"image_url": {"url": "data:image/png;base64,iVBORw0KGgo…"},
"index": 0
}]
}
}],
"usage": {"prompt_tokens": 31, "completion_tokens": 0, "images": 1, "cost_rub": 4.90}
}Чтобы модель правила существующую картинку, положите её в тот же массив content обычным вложением — как во входных изображениях.
{
"model": "google/gemini-3-image",
"modalities": ["image"],
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Убери фон, оставь предмет на белом"},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBOR…"}}
]
}]
}Несколько входных изображений модель воспринимает как референсы: первое обычно основа, остальные — стиль и детали. Точное поведение зависит от модели и описано в её карточке.
| Модель тарификации | Как считается |
|---|---|
| За изображение | Фиксированная сумма за штуку, зависит от разрешения. Самый частый случай |
| За токены | Изображение переводится в токены по правилам площадки, дальше как обычный выход |
| Смешанная | Текстовая часть по токенам, картинка по штукам |
Итог всегда приходит в usage в рублях и попадает в лог активности отдельной строкой. Заранее посчитать бюджет можно на карточке модели в каталоге.
Резервные маршруты для генерации изображений работают, но подставлять другую модель здесь обычно бессмысленно: стиль у моделей разный, и «такая же картинка, только от другой площадки» не бывает. Для изображений мы рекомендуем allow_fallbacks: false и явную обработку 502 на вашей стороне.
Стриминг с modalities: ["image"] не поддерживается: картинка появляется целиком в конце, отдавать её по частям нечем. Запрос с stream: true вернёт 400.