СПРАВОЧНИК

API-референс

Полное описание всех эндпоинтов: параметры запроса, схемы ответов и примеры. Генерируется из той же спецификации, что и сам API.

i
Base URL - https://api.altrouter.ai/v1. Машиночитаемая спецификация: openapi.json - импортируйте в Postman, Insomnia или генератор клиентов.

Каждый ответ несёт заголовок x-request-id, а генерирующие эндпоинты - стоимость запроса в usage.cost (USD). По этому id стоимость можно запросить и позже - см. Стоимость запроса.

Создать chat completion

POST/v1/chat/completions

Текстовые и мультимодальные ответы, с опциональным стримингом и вызовом инструментов.

Параметры тела
modelstringrequired
ID модели из каталога, например "gpt-5.4". См. GET /v1/models.
messagesarrayrequired
Диалог: массив сообщений с ролями system / user / assistant / tool. Поддерживает мультимодальный content (текст + image_url).
streambooleandefault false
Если true - ответ приходит потоком server-sent events (SSE), совместимым с OpenAI. Поток завершается строкой data: [DONE].
max_tokensinteger
Максимум токенов в ответе. Псевдоним max_completion_tokens тоже принимается. По умолчанию - серверный лимит.
Claude строго проверяет значение против своего потолка вывода (8192) и отвечает 400, если оно больше; остальные модели молча ограничивают сверху.
temperaturenumber0–2default 1
Случайность генерации. Выше - креативнее, ниже - детерминированнее.
Модели Gemini. GPT-5 и Claude сэмплинг-параметры не принимают.
top_pnumber0–1default 1
Nucleus sampling - доля вероятностной массы, из которой выбираются токены.
Модели Gemini. GPT-5 и Claude сэмплинг-параметры не принимают.
stoparray
Строка или массив строк, на которых генерация останавливается.
toolsarray
Определения функций (function calling) в формате OpenAI.
Модели с возможностью «tools».
tool_choiceobject
Управление вызовом инструментов: auto / required / none / конкретная функция.
reasoning_effortstringlow | medium | high | xhigh
Бюджет «размышлений» для reasoning-моделей. Reasoning-контент возвращается в message.reasoning_content.
Reasoning-модели, но диапазон свой у каждого семейства: gpt-5.4/5.5 - low…xhigh, gpt-5.2 - low или high, Gemini - low/medium/high, Claude - бинарно (любое значение включает размышления). Актуальный набор значений - на странице модели.
response_formatobject
Структурированный вывод: { "type": "json_object" } или { "type": "json_schema", "json_schema": … }. См. раздел Structured outputs.
Модели Gemini и GPT. Не поддерживается моделями Claude.
web_searchbooleandefault false
Веб-поиск на стороне модели: ответы с учётом свежих данных из интернета.
Все модели GPT-5.x и большинство Gemini - там, где запрос идёт через kie. Claude не поддерживает. Точный список - на странице модели.
seedinteger
Seed для воспроизводимости, где модель это поддерживает.
Только модели Gemini. GPT-5.x и Claude сэмплинг-параметры не принимают.
frequency_penaltynumber−2–2
Штраф за повтор токенов по частоте.
Только модели Gemini. GPT-5.x и Claude сэмплинг-параметры не принимают.
presence_penaltynumber−2–2
Штраф за токены, которые уже встречались.
Только модели Gemini. GPT-5.x и Claude сэмплинг-параметры не принимают.
Ответ
idstring
Идентификатор ответа.
objectstring
Всегда "chat.completion".
createdinteger
Unix-время создания (сек).
modelstring
Модель, обработавшая запрос.
choicesarray
Варианты ответа. Каждый: index, message { role, content, reasoning_content, tool_calls }, finish_reason.
usageobject
Токены: prompt_tokens, completion_tokens, total_tokens - и cost: сколько списано с баланса за этот запрос, USD.
Пример
cURLJSON
curl https://api.altrouter.ai/v1/chat/completions \
  -H "Authorization: Bearer ar-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.4","messages":[{"role":"user","content":"Hi"}]}'
Ошибки
400Некорректный запрос.
401Нет или неверный API-ключ.
402Недостаточно кредитов или исчерпан потолок трат ключа.
403Поверхность вне скоупов ключа.
404Модель не найдена.
429Превышен лимит запросов.
500Внутренняя ошибка шлюза.
502Ошибка на стороне модели.
503Модель временно недоступна.
504Запрос превысил допустимое время.

Создать изображение

POST/v1/images/generations

Генерация или редактирование изображения. Результат рехостится на наш CDN и возвращается ссылкой.

Параметры тела
modelstringrequired
ID image-модели из каталога, например "nano-banana-pro".
promptstringrequired
Текстовое описание желаемого изображения.
imagearray
Референсные изображения (URL или base64) для редактирования. Роутер выбирает edit-вариант модели автоматически.
Модели с возможностью редактирования.
resolutionstring1K | 2K | 4K
Тир разрешения - выбирает вариант модели и цену (quality:"hd" ⇒ 4K).
Где модель предлагает несколько разрешений.
response_formatstringurl | b64_jsondefault url
Форма результата. По умолчанию url: изображение перекладывается на наш CDN, ссылка постоянна.
Ответ
createdinteger
Unix-время создания (сек).
dataarray
Изображения. Каждое: url (ссылка на наш CDN), b64_json, revised_prompt.
usageobject
{ cost } - сколько списано с баланса за запрос, USD.
Пример
cURLJSON
curl https://api.altrouter.ai/v1/images/generations \
  -H "Authorization: Bearer ar-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"nano-banana-pro","prompt":"a red fox"}'
Ошибки
400Некорректный запрос.
401Нет или неверный API-ключ.
402Недостаточно кредитов или исчерпан потолок трат ключа.
403Поверхность вне скоупов ключа.
404Модель не найдена.
429Превышен лимит запросов.
500Внутренняя ошибка шлюза.
502Ошибка на стороне модели.
503Модель временно недоступна.
504Запрос превысил допустимое время.

Создать видео

POST/v1/videos

Асинхронно: запрос возвращается сразу со статусом queued, готовность опрашивается через GET /v1/videos/{id}. Резерв ставится при создании, списание - только за удавшийся рендер.

Параметры тела
modelstringrequired
ID видео-модели из каталога, например "veo-3.1-fast".
promptstringrequired
Текстовое описание сцены.
secondsinteger
Длительность клипа в секундах. Допустимые значения задаёт модель (см. её страницу), значение вне диапазона обрезается. Синоним - duration.
imagearray
Референсный кадр (URL или base64): с ним запрос уходит на image-to-video вариант модели. Для одного кадра принимается и input_reference.
Модели с image-to-video (у Hailuo 2.3 кадр обязателен).
Ответ
idstring
Идентификатор рендера (vid_…) - его опрашивают.
objectstring
Всегда "video".
statusstring
queued · in_progress · completed · failed.
created_atinteger
Unix-время создания (сек).
completed_atinteger
Unix-время завершения (сек), у терминальных статусов.
secondsinteger
Длительность, по которой посчитана цена.
urlstring
Готовый mp4 на нашем CDN - появляется при status: completed.
errorobject
Причина отказа при status: failed: { code, message }.
costnumber
Сколько списано за рендер, USD - появляется при status: completed.
Пример
cURLJSON
curl https://api.altrouter.ai/v1/videos \
  -H "Authorization: Bearer ar-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"veo-3.1-fast","prompt":"a drone shot over a coastline","seconds":8}'

curl https://api.altrouter.ai/v1/videos/vid_... -H "Authorization: Bearer ar-..."

Опрос - GET /v1/videos/{id}, список последних рендеров - GET /v1/videos, редирект на готовый файл - GET /v1/videos/{id}/content.

Ошибки
400Некорректный запрос.
401Нет или неверный API-ключ.
402Недостаточно кредитов или исчерпан потолок трат ключа.
403Поверхность вне скоупов ключа.
404Модель не найдена.
429Превышен лимит запросов.
500Внутренняя ошибка шлюза.
502Ошибка на стороне модели.
503Модель временно недоступна.
504Запрос превысил допустимое время.

Список моделей

GET/v1/models

Каталог вызываемых моделей с ценами (USD) и параметрами каждой модели. Параметров запроса нет.

Ответ

Объект списка: { object: "list", data: Model[] }. Поля Model:

idstring
Идентификатор модели.
objectstring
Всегда "model".
createdinteger
Unix-время (сек).
owned_bystring
Всегда "altrouter".
surfacestring
"chat", "image" или "video".
context_lengthinteger
Размер контекста в токенах (для chat).
pricingobject
Наша цена в USD. Chat: prompt_per_1m_usd, completion_per_1m_usd. Image: per_image_usd. Video: per_second_usd или per_video_usd. Флаг approximate - цена предварительная.
paramsarray
Настраиваемые параметры модели: key, type, min/max/step или options.
Пример
cURLJSON
curl https://api.altrouter.ai/v1/models -H "Authorization: Bearer ar-..."
Ошибки
401Нет или неверный API-ключ.

Баланс кредитов

GET/v1/credits

Остаток на балансе аккаунта, которому принадлежит ключ. Параметров запроса нет.

Ответ
objectstring
Всегда "credits".
available_usdnumber
Доступно к трате (баланс за вычетом холдов), USD.
balance_usdnumber
Полный баланс, USD.
held_usdnumber
Зарезервировано незавершёнными запросами, USD.
Пример
cURLJSON
curl https://api.altrouter.ai/v1/credits -H "Authorization: Bearer ar-..."

Стоимость запроса

GET/v1/generation

Сколько списано за конкретный запрос. Параметр id - заголовок x-request-id из ответа (для видео подходит и его vid_…). Видны запросы аккаунта, которому принадлежит ключ. Стрим записывается в момент после [DONE] - если запросить сразу, можно получить 404 на долю секунды.

Ответ
objectstring
"generation" для GET /v1/generation, "usage_event" в списке.
request_idstring
x-request-id запроса (у видео - его vid_…).
created_atstring
Время запроса, ISO 8601.
surfacestring
"chat", "image" или "video".
modelstring
Запрошенная модель.
outcomestring
success · error · canceled. Неудачные и отменённые запросы не списываются: cost_usd = 0.
error_codestring
Код ошибки при outcome: error, иначе null.
key_idstring
Ключ, которым сделан запрос.
prompt_tokensinteger
Токены входа (chat), completion_tokens и total_tokens - аналогично.
cost_usdnumber
Сколько списано с баланса, USD.
image_urlsarray
Ссылки на сгенерированные файлы (image, video), иначе null.
Пример
cURLJSON
curl "https://api.altrouter.ai/v1/generation?id=req_mupm4nfkhzua0y8j" \
  -H "Authorization: Bearer ar-..."
Ошибки
400Некорректный запрос.
401Нет или неверный API-ключ.
404Модель не найдена.

Журнал списаний

GET/v1/usage

Запросы аккаунта от новых к старым, у каждого cost_usd - тот же журнал, что в разделе «Логи» кабинета. Параметры: limit (1-100, по умолчанию 50) и cursor - значение next_cursor с прошлой страницы.

Пример
cURLJSON
curl "https://api.altrouter.ai/v1/usage?limit=50" -H "Authorization: Bearer ar-..."
Ошибки
400Некорректный запрос.
401Нет или неверный API-ключ.

Пополнение баланса

Пополнять баланс можно без кабинета - например, из своего биллинга или бота. Подходит любой ключ аккаунта. Схема: создать счёт, отдать invoice_url плательщику, опрашивать платёж до status: finished. Кредиты зачисляются на аккаунт ключа автоматически, как при оплате из кабинета.

i
Передавайте заголовок Idempotency-Key (любая уникальная строка до 255 символов, например id заказа в вашей системе). Повтор запроса с тем же ключом и той же суммой вернёт тот же счёт, а не откроет второй - ретраи по таймауту безопасны. Ключ живёт 24 часа и привязан к API-ключу. Повтор возвращает ответ на момент создания; текущий статус - в GET /v1/billing/payments/{id}.
i
Python: стандартный urllib с User-Agent по умолчанию (Python-urllib) отсекается защитой от ботов - 403, код 1010. Передайте свой заголовок, например User-Agent: my-app/1.0, или используйте requests, httpx, aiohttp, OpenAI SDK - с ними всё работает.
POST/v1/billing/checkout

Создаёт счёт и возвращает ссылку на оплату. Ответ - 201.

Тело запроса
amount_usdnumber
Сумма пополнения в USD, с точностью до цента, от 5 до 10 000. Нужно это поле или package_usd; если переданы оба, берётся amount_usd.
package_usdinteger
Готовый пакет: 15, 50, 150, 500, 1500 или 3000.
methodstring
Способ оплаты: "crypto" (NOWPayments, много монет; по умолчанию), "crypto_platega" (USDT через Platega), "sbp" (СБП, в рублях). Доступные сейчас способы отдаёт GET /v1/billing/packages.
pay_currencystring
Только с method "crypto": вместо страницы оплаты получить адрес и точную сумму в этой монете и сети - для оплаты скриптом со своего кошелька. Примеры: usdttrc20, usdtbsc, usdtton, usdterc20, usdtsol, usdtmatic, usdtarb, usdcbase. Отправка в BSC, TON, Polygon стоит центы, в TRC20 - дороже. У каждой сети свой минимум (TRC20 - около $11); сумма ниже минимума или выключенная монета - 400 pay_currency_unavailable.

Для полной автоматизации передайте pay_currency: ответ сразу содержит адрес и сумму, ваш сервер отправляет USDT со своего кошелька, баланс пополняется после подтверждения в сети. Открывать страницу оплаты не нужно.

Ответ
objectstring
Всегда "payment".
idstring
Идентификатор платежа (uuid).
statusstring
waiting - ждёт оплаты · confirming - оплата в сети, ждём подтверждений · partially_paid - пришло меньше счёта · finished - зачислено · failed · expired - счёт истёк · refunded.
methodstring
Способ оплаты.
amount_usdnumber
Сколько кредитов будет зачислено, USD.
invoice_urlstring
Страница оплаты у платёжного провайдера - её открывает плательщик. null, если передан pay_currency.
depositobject
Только при pay_currency (иначе null): pay_address - куда отправить, pay_amount - сколько ровно, в монете pay_currency, network, extra_id - memo/тег, если сеть его требует (иначе null), expires_at - до какого времени ждём оплату (2 часа; если к этому времени оплата не пришла, заявка переходит в expired, а поздняя оплата всё равно зачисляется). Для USDT и USDC сумма ровная, 1:1 к долларам: за $50 - ровно 50 USDT (в charge - та же сумма в монете). Для остальных монет pay_amount считается по курсу. Отправьте ровно pay_amount одной транзакцией; меньше - платёж останется partially_paid и не зачислится автоматически.
chargeobject
Только в GET: сколько фактически выставлено к оплате ({ amount, currency }), например рубли для СБП; null - сумма в USD.
credited_usdnumber
Только в GET: сколько уже зачислено на баланс.
created_atstring
Только в GET: время создания (и updated_at - последнего изменения), ISO 8601.
Пример
cURLJSON
curl https://api.altrouter.ai/v1/billing/checkout \
  -H "Authorization: Bearer ar-..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042" \
  -d '{"amount_usd": 50, "method": "crypto_platega"}'
Пример: оплата на адрес
cURLJSON
curl https://api.altrouter.ai/v1/billing/checkout \
  -H "Authorization: Bearer ar-..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: topup-2026-11-08-01" \
  -d '{"amount_usd": 50, "pay_currency": "usdtbsc"}'
GET/v1/billing/payments/{id}

Один платёж с текущим статусом. Опрашивайте раз в 10-30 секунд, пока статус не станет finished, expired, failed или refunded. Крипта обычно подтверждается за несколько минут, СБП - почти сразу.

cURLJSON
curl https://api.altrouter.ai/v1/billing/payments/5c47e990-b3e2-454d-b307-671d89e4246a \
  -H "Authorization: Bearer ar-..."
GET/v1/billing/payments

Платежи аккаунта от новых к старым. Параметры: limit (1-100, по умолчанию 20) и cursor - значение next_cursor с прошлой страницы.

cURLJSON
curl "https://api.altrouter.ai/v1/billing/payments?limit=20" -H "Authorization: Bearer ar-..."
GET/v1/billing/packages

Без ключа: пакеты, доступные способы оплаты и цены в рублях для СБП. Для своей суммы - GET /v1/billing/quote?amount_usd=12.34.

Ошибки
400
Неверная сумма, пакет или способ оплаты (payment_method_unavailable - способ сейчас выключен, payment_method_limit - сумма выше лимита способа).
401
Нет или неверный API-ключ.
404
Платёж не найден (или принадлежит другому аккаунту).
409
idempotency_conflict: этот Idempotency-Key уже использован с другой суммой или способом, или такой же запрос ещё выполняется.
429
Больше 20 неоплаченных счетов сразу или больше 20 счетов в час на аккаунт.
ДалееПараметры →