Документация
API за пять минут.
OpenAI-совместимый API ко всем популярным нейросетям. Если ты уже работал с openai-клиентом — просто замени base_url, и всё работает.
01
Quick start
Зарегистрируйся, пополни баланс на 50 ₽ и получи API-ключ в личном кабинете. Ключ показывается один раз при создании — сохрани сразу.
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-ключи и создай новый.
Authorization: Bearer sk-aiagg-XXXXXXXXXXXX
Content-Type: application/json03
Текстовые модели (/v1/chat/completions)
Полностью совместим с OpenAI chat.completions. Доступны модели Anthropic, OpenAI и других провайдеров — каталог в /models или через GET /v1/models.
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)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).
resp = client.images.generate(
model="google/gemini-2.5-flash-image",
prompt="Кот в космическом скафандре, неоновый закат",
n=1,
)
img_b64 = resp.data[0].b64_json05
Генерация видео (/v1/video/generations)
Видео генерируется асинхронно. Submit → получаешь job_id → опрашиваешь статус (GET .../{job_id}) → когда готово, скачиваешь по download_url (тоже требует Bearer). Veo обычно занимает 30–90 секунд.
# 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.mp406
Ошибки и коды ответа
Формат ошибки везде одинаковый — поле error с code и message:
{
"error": {
"code": "insufficient_quota",
"message": "Недостаточно средств на балансе",
"field": null
}
}| HTTP | Code | Когда |
|---|---|---|
| 401 | invalid_api_key | Ключ не найден или отозван |
| 402 | insufficient_quota | На балансе меньше минимума |
| 404 | model_not_found | Модель не существует или отключена |
| 409 | duplicate_request | Конфликт по Idempotency-Key |
| 422 | validation_error | Невалидный JSON / поля |
| 429 | rate_limited | Превышен rate-limit на ключ |
| 502 | provider_error | Upstream-провайдер вернул ошибку |
| 503 | provider_unavailable | Upstream временно недоступен |
Если запрос провалился на стороне провайдера (502/503) — деньги не списываются. Списание происходит только при успешном завершении.
07
OpenAI SDK
Любой OpenAI-совместимый SDK работает «из коробки». Меняется только две вещи: api_key и base_url (или их эквиваленты в твоём SDK).
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).