Перейти к содержимому
RouterNodul

POST /images/generations

Генерация изображений по текстовому описанию в формате OpenAI. Тело запроса, ответ, цена и ошибки.

Открыть .md
POST/api/v1/images/generationsAPI-ключ

Создает изображения по описанию — как client.images.generate в OpenAI SDK. Модели генерации изображений перечислены в каталоге и в GET /api/v1/models?output_modalities=image. Машиночитаемый контракт: openapi.yaml.

Тело запроса

ПолеТип
modelstringОбязательно. ID модели генерации изображений.
promptstringОбязательно. Что нарисовать. Если ключ маскирует данные, описание маскируется так же, как текст чата.
nintegerСколько изображений, по умолчанию 1. Не больше лимита модели (routes[].max_completion_tokens в GET /models), иначе 400.
response_formatstringТолько b64_json: изображения приходят в base64. url дает 400.
providerobjectonly, ignore, order, zdr, data_collection, как в chat completions.
size, quality, resolution, aspect_ratio, output_format, background, seedПередаются провайдеру; какие из них поддерживает модель, указано на ее странице в каталоге.

stream, input_references, image и mask (потоковая генерация и редактирование по изображению) не поддерживаются: 400.

Ответ

{
  "created": 1793641748,
  "data": [{ "b64_json": "iVBORw0KGgo…", "media_type": "image/jpeg" }],
  "usage": { "prompt_tokens": 3, "completion_tokens": 4175, "total_tokens": 4178, "cost": 0.0088 }
}
Поле
data[].b64_jsonИзображение в base64.
data[].media_typeimage/png, image/jpeg, image/webp или image/svg+xml.
usage.costСумма списания в PnP.

ID генерации — в заголовке ответа X-Generation-Id; по нему GET /generation возвращает стоимость и попытки.

Цена

Модели берут плату за изображение (часто в зависимости от разрешения), за мегапиксель или за токены изображения; цена указана на странице модели в каталоге. Списывается фактическая стоимость вызова. Перед запросом резервируется худший случай: n изображений по самой дорогой цене модели. В журнале кабинета у вызова указано число изображений.

Пример

curl https://router.nodul.ru/api/v1/images/generations \
  -H "Authorization: Bearer $NODUL_ROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "global-1/black-forest-labs/flux-3-image-klein", "prompt": "A red fox in the snow, watercolor"}' \
  | jq -r '.data[0].b64_json' | base64 --decode > image.png
import base64
import os

from openai import OpenAI

client = OpenAI(base_url="https://router.nodul.ru/api/v1", api_key=os.environ["NODUL_ROUTER_API_KEY"])
response = client.images.generate(
    model="global-1/black-forest-labs/flux-3-image-klein",
    prompt="A red fox in the snow, watercolor",
)
with open("image.png", "wb") as f:
    f.write(base64.b64decode(response.data[0].b64_json))

Ошибки

КодКогда
400Неверное тело, модель не генерирует изображения (Model … does not support this endpoint.), n больше лимита модели, response_format не b64_json, stream или изображения на входе.
402Баланса или лимита ключа не хватает на резерв.
403Модель недоступна ключу, пространство разрешает только модели в России.