hubris
API Reference
API REFERENCE

POST /v1/images/generations

Генерация изображений в формате OpenAI Images API — FLUX.2, Recraft, Seedream, Riverflow, Grok Imagine. Фиксированная цена за изображение, image-to-image через input_references.

Классический Images API: текстовый промпт на входе, готовые изображения на выходе. OpenAI-совместимый формат — официальные openai SDK работают без переписывания, достаточно поменять base_url.

Через этот эндпоинт работают модели с оплатой за изображение: Black Forest Labs FLUX.2, Recraft V3–V4.1, ByteDance Seedream 4.5, Sourceful Riverflow, xAI Grok Imagine. Полный список — фильтр «Output: image» в каталоге. Гибридные модели с токенной тарификацией (Google Gemini *-image, OpenAI GPT-5 Image) сюда не ходят — они генерируют через chat completions с modalities: здесь такой model вернёт 404.

Эндпоинт

POSThttps://api.hubris.pw/v1/images/generations

Заголовки:

HeaderЗначение
AuthorizationBearer sk-gw-... (обязательно)
Content-Typeapplication/json

Тело запроса

ПолеТипПо умолчаниюОписание
modelstringID модели из каталога (только модели с ценой за изображение).
promptstringОписание изображения. FLUX лучше промптовать на английском — кириллицу рисует как текст на картинке.
ninteger1Сколько изображений, 1–10. Реальный потолок у каждой модели свой (Seedream до 10, Recraft до 6, FLUX и Grok — 1); списание — за фактически возвращённые.
sizestringРазмер, напр. "1024x1024". Большинство моделей задают размер сами — поле им передавать не нужно.
response_formatstringb64_jsonПока поддерживается только b64_json.

Провайдер-специфичные поля схема не отбрасывает и передаёт модели как есть: input_references (image-to-image, см. ниже), aspect_ratio и resolution у Grok Imagine, style / strength / text_layout у Recraft, font_inputs у Riverflow. Что понимает конкретная модель — на её карточке в каталоге; незнакомое поле провайдер игнорирует или отклоняет запрос с 400.

Тело запроса ограничено 36 МБ — хватает на максимальный заказ с base64-референсами; при больших исходниках сжимайте JPEG перед отправкой.

Минимальный пример

curl -s https://api.hubris.pw/v1/images/generations \-H "Authorization: Bearer sk-gw-..." \-H "Content-Type: application/json" \-d '{  "model": "black-forest-labs/flux.2-pro",  "prompt": "product photo of a ceramic mug on a linen tablecloth, soft window light"}'
import base64from openai import OpenAIclient = OpenAI(  base_url="https://api.hubris.pw/v1",  api_key="sk-gw-...",)resp = client.images.generate(  model="black-forest-labs/flux.2-pro",  prompt="product photo of a ceramic mug on a linen tablecloth, soft window light",)with open("mug.png", "wb") as f:  f.write(base64.b64decode(resp.data[0].b64_json))
import fs from "node:fs";import OpenAI from "openai";const client = new OpenAI({baseURL: "https://api.hubris.pw/v1",apiKey: "sk-gw-...",});const resp = await client.images.generate({model: "black-forest-labs/flux.2-pro",prompt: "product photo of a ceramic mug on a linen tablecloth, soft window light",});fs.writeFileSync("mug.png", Buffer.from(resp.data![0]!.b64_json!, "base64"));

Ответ

{
  "created": 1753789200,
  "data": [
    { "b64_json": "iVBORw0KGgoAAAANSUhEUg..." }
  ]
}
ПолеОписание
createdUnix-время (секунды).
data[]По одному элементу на изображение.
data[].b64_jsonБайты изображения в base64 — без префикса data:. Формат файла определяется по содержимому (обычно PNG или JPEG — как отдал провайдер).

Ссылок (url) в ответе нет — изображения приходят телом ответа. Поля usage тоже нет: стоимость запроса смотрите в журнале.

Редактирование (image-to-image)

Исходные изображения передаются полем input_references — data URL с base64 или публичная https-ссылка:

{
  "model": "bytedance-seed/seedream-4.5",
  "prompt": "Перенеси предмет с фото в интерьер лофта, мягкий дневной свет",
  "input_references": [
    { "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,/9j/4AAQ..." } }
  ]
}

В официальных SDK поле не объявлено — передавайте через extra_body (Python) или приведение типов (TypeScript). Сколько референсов принимает каждая модель и примеры целиком — в гайде Генерация изображений.

HTTP-коды

КодcodeКогда
200Успех, изображения в data[].
400invalid_requestТело не соответствует схеме (нет model/prompt) либо модель отклонила параметры.
401Ключ отсутствует / отозван / невалиден.
402insufficient_balanceБаланса не хватает на ожидаемую стоимость заказа (n × цена за изображение).
404model_not_foundМодели нет в каталоге, она выключена или тарифицируется токенами (Gemini/GPT-5 Image — те ходят через chat completions).
413request_too_largeТело запроса больше 36 МБ.
429daily_limit_exceededПревышен дневной лимит расходов ключа.
502no_images_returnedПровайдер ответил успехом, но без изображений. Списания нет, запрос стоит повторить.
502pricing_unavailableНе удалось определить стоимость генерации — запрос не выполняется, бесплатных генераций не бывает.
502 / 503 / 504Транзиентные сбои провайдера, курса ЦБ или таймаут генерации.

Формат тела ошибки и стратегия retry — Ошибки.

Биллинг

Тарификация — за изображение: цена в рублях за штуку видна на карточке модели в каталоге, за запрос спишется n × цена. Стоимость известна до запроса и не зависит от длины промпта.

Списание — после успешного ответа, одной транзакцией; сумма попадает в журнал запросов. За отклонённые запросы (model_not_found, невалидное тело), отказ провайдера и пустой ответ не списывается ничего.

Что дальше

  • Генерация изображений — гайд целиком: оба пути, редактирование, выбор модели, параметры.
  • Vision — картинка на входе для анализа, а не генерации.
  • Модели — как выбрать модель и прочитать её карточку.
  • Ошибки — что делать на 429/502.
  • Цены — как считается стоимость запроса.

Обновлено: