Полное описание всех эндпоинтов: параметры запроса, схемы ответов и примеры. Генерируется из той же спецификации, что и сам 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 сэмплинг-параметры не принимают.
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.
Сколько списано за конкретный запрос. Параметр 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.
Запросы аккаунта от новых к старым, у каждого cost_usd - тот же журнал, что в разделе «Логи» кабинета. Параметры: limit (1-100, по умолчанию 50) и cursor - значение next_cursor с прошлой страницы.
Пополнять баланс можно без кабинета - например, из своего биллинга или бота. Подходит любой ключ аккаунта. Схема: создать счёт, отдать 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 со своего кошелька, баланс пополняется после подтверждения в сети. Открывать страницу оплаты не нужно.
Страница оплаты у платёжного провайдера - её открывает плательщик. 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.
Один платёж с текущим статусом. Опрашивайте раз в 10-30 секунд, пока статус не станет finished, expired, failed или refunded. Крипта обычно подтверждается за несколько минут, СБП - почти сразу.