Документация

API за пять минут.

OpenAI-совместимый API ко всем популярным нейросетям. Если ты уже работал с openai-клиентом — просто замени base_url, и всё работает.

01

Quick start

Зарегистрируйся, пополни баланс на 50 ₽ и получи API-ключ в личном кабинете. Ключ показывается один раз при создании — сохрани сразу.

bashПервый запрос
curl https://nanobonano.ru/v1/chat/completions \
  -H "Authorization: Bearer $YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-haiku-4.5",
    "messages": [
      { "role": "user", "content": "Привет!" }
    ]
  }'

В ответ — стандартный OpenAI-совместимый JSON со списанием стоимости в рублях с баланса.

02

Аутентификация

Все запросы к /v1/* требуют API-ключа в заголовке Authorization: Bearer .... Ключ имеет префикс sk-aiagg- и привязан к твоему аккаунту.

Ключ — это секрет. Не коммить в git, не клади в URL, не светите в логах фронта. Если скомпрометирован — отзови в ЛК → API-ключи и создай новый.

httpHTTP-заголовки
Authorization: Bearer sk-aiagg-XXXXXXXXXXXX
Content-Type: application/json

03

Текстовые модели (/v1/chat/completions)

Полностью совместим с OpenAI chat.completions. Доступны модели Anthropic, OpenAI и других провайдеров — каталог в /models или через GET /v1/models.

pythonPython
from openai import OpenAI

client = OpenAI(
    api_key="sk-aiagg-XXXXXXXXXXXX",
    base_url="https://nanobonano.ru/v1",
)

resp = client.chat.completions.create(
    model="anthropic/claude-opus-4.7",
    messages=[
        {"role": "system", "content": "Ты — полезный ассистент."},
        {"role": "user", "content": "Объясни квантовую запутанность."},
    ],
)
print(resp.choices[0].message.content)
print("Списано:", resp.usage)
javascriptJavaScript / Node
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-aiagg-XXXXXXXXXXXX",
  baseURL: "https://nanobonano.ru/v1",
});

const resp = await client.chat.completions.create({
  model: "openai/gpt-5",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);

04

Генерация изображений (/v1/images/generations)

Совместим с OpenAI images.generate. Поддерживаются Gemini Nano Banana и другие image-модели. Некоторые умеют image-edit — передай исходное изображение в поле image (base64 или URL).

pythonPython — генерация
resp = client.images.generate(
    model="google/gemini-2.5-flash-image",
    prompt="Кот в космическом скафандре, неоновый закат",
    n=1,
)
img_b64 = resp.data[0].b64_json

05

Генерация видео (/v1/video/generations)

Видео генерируется асинхронно. Submit → получаешь job_id → опрашиваешь статус (GET .../{job_id}) → когда готово, скачиваешь по download_url (тоже требует Bearer). Veo обычно занимает 30–90 секунд.

bashcurl — submit и polling
# 1. Отправить задачу
JOB=$(curl -s https://nanobonano.ru/v1/video/generations \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"model":"google/veo-3-fast","prompt":"Морские волны","duration_seconds":5}' \
  | jq -r .id)

# 2. Опрашивать статус
while true; do
  STATUS=$(curl -s -H "Authorization: Bearer $KEY" \
    https://nanobonano.ru/v1/video/generations/$JOB | jq -r .status)
  [ "$STATUS" = "completed" ] && break
  sleep 5
done

# 3. Скачать
curl -L -H "Authorization: Bearer $KEY" \
  https://nanobonano.ru/v1/video/generations/$JOB/download -o out.mp4

06

Ошибки и коды ответа

Формат ошибки везде одинаковый — поле error с code и message:

jsonHTTP 4xx/5xx
{
  "error": {
    "code": "insufficient_quota",
    "message": "Недостаточно средств на балансе",
    "field": null
  }
}
HTTPCodeКогда
401invalid_api_keyКлюч не найден или отозван
402insufficient_quotaНа балансе меньше минимума
404model_not_foundМодель не существует или отключена
409duplicate_requestКонфликт по Idempotency-Key
422validation_errorНевалидный JSON / поля
429rate_limitedПревышен rate-limit на ключ
502provider_errorUpstream-провайдер вернул ошибку
503provider_unavailableUpstream временно недоступен

Если запрос провалился на стороне провайдера (502/503) — деньги не списываются. Списание происходит только при успешном завершении.

07

OpenAI SDK

Любой OpenAI-совместимый SDK работает «из коробки». Меняется только две вещи: api_key и base_url (или их эквиваленты в твоём SDK).

textМинимальный setup
api_key  = sk-aiagg-XXXXXXXXXXXX
base_url = https://nanobonano.ru/v1
model    = anthropic/claude-haiku-4.5  (или любая из /models)

Все стандартные параметры OpenAI (temperature, max_tokens, tool_choice и т.п.) поддерживаются и проксируются.

08

Биллинг и тарифы

Списания идут после завершения запроса — провайдер вернул токены, мы посчитали стоимость по тарифу модели, перевели в рубли по курсу и записали транзакцию. История списаний — в /account/usage.

Цены на все модели — /pricing. Мы не делаем наценку: продаём по той же цене, что платим upstream (это видно в открытом виде в config/providers.yaml).

Не хватает чего-то в документации? Напиши в feedback в личном кабинете.