Быстрый старт
Три минуты между браузером и ответом модели: ключ в консоли, base URL в клиенте, первый вызов. Ниже — то же самое подробно.
За три минуты
- Создайте ключВ консоли, на экране ключей. Секрет показывается один раз; скопируйте его сразу.
- Пополните кошелёкНовый кошелёк создаётся пустым; без пополнения первому вызову нечем платить.
- Укажите base URLНаправьте любой OpenAI-совместимый клиент на `https://api.kumorouter.com/v1` и отдайте ему ключ.
- Сделайте вызовНазовите модель и потолок вывода. Ответ придёт в той же форме, которую клиент уже разбирает.
Новый кошелёк пуст, и вызов, которому нечем платить, отвечает 402 — пополните баланс на странице оплаты →.
curl https://api.kumorouter.com/v1/chat/completions \
-H "Authorization: Bearer $KUMO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<model>",
"max_tokens": 128,
"messages": [{ "role": "user", "content": "Объясни токены одной строкой." }]
}'Выберите модель в списке над примерами — её идентификатор подставится во все примеры на этой странице, и код можно копировать как есть.
Каталог моделей → Как пишется заголовок →
Заведите аккаунт
Всё в этом разделе происходит в консоли. Аккаунт — это адрес почты и пароль; ничего ставить не нужно, и карту никто не спрашивает до того, как ключ окажется у вас в руках.
- Откройте консольЭто отдельный хост продукта, и там живут все операции с аккаунтом.
- Создайте аккаунтАдрес, пароль не короче **6 символов** (верхняя граница — 256 **байт** UTF-8) и два согласия, которых просит форма. Нижняя граница считает символы, поэтому шесть букв — это шесть букв в любом алфавите.
- Вы уже внутриТот же ответ, что создаёт аккаунт, выпускает и сессию: консоль сама ставит себе куку и открывает обзор, входить отдельно не нужно и копировать нечего.
Письмо с подтверждением адреса обычно приходит своим чередом. Его ссылка удостоверяет, что адрес ваш, и сегодня этим всё и исчерпывается: ни ключ, ни первый вызов её не ждут, поэтому отсутствие письма — не тупик. Отправка делается по мере возможности: под нагрузкой её могут пропустить, а ошибку доставки — проглотить, и регистрация в любом случае состоится.
Выпустите ключ
Ключ создаётся на экране ключей в консоли. Секрет показывается один раз, на том экране, который его создаёт, и больше никогда: платформа хранит только его хэш вместе с префиксом и хвостом, которые называют ключ в списке.
- Скопируйте секрет в своё хранилище, не уходя с экрана создания.
- Держите его в переменной окружения, а не в исходниках.
- Потерянный ключ не восстанавливают — вместо него выпускают новый.
Открыть консоль → Что помнит платформа о ключе →
Пополните кошелёк
Кошелёк создаётся вместе с организацией и на старте пуст. Пополнение делается из консоли — картой, СБП или криптовалютой, в зависимости от того, что предложит платёжная система; минимальной суммы нет.
Сделайте вызов
Направьте любой OpenAI-совместимый клиент на https://api.kumorouter.com/v1 и дайте ему ключ. В этом вся миграция: меняются base URL и ключ, а остальной ваш код — нет.
Модель называется каноническим идентификатором или псевдонимом, который несёт опубликованный каталог. <model> в примерах стоит вместо такого имени — спросите список у шлюза командой curl https://api.kumorouter.com/v1/models, посмотрите его на странице моделей или сверьте ставки в прайс-листе.
Потолок вывода обязателен. max_tokens (или max_completion_tokens — это то же самое) позволяет платформе сделать резерв под вызов до того, как он уйдёт к провайдеру; запрос без него отвергается, а не остаётся неограниченным.
Что приходит в ответ
Ответ принадлежит самому этому протоколу, а не переведён из другого: choices, причина завершения и счётчики токенов приходят в той форме, которую клиент уже разбирает.
{
"id": "chatcmpl-8f2b7e10c9",
"object": "chat.completion",
"model": "<model>",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Токены — это небольшие куски текста, которые модель читает и пишет."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 18,
"total_tokens": 30
}
}Все поля операции → Как выглядит отказ →
Включите поток
Добавьте "stream": true — и тот же вызов ответит как text/event-stream: события chat.completion.chunk в порядке прихода, затем завершающий кадр [DONE]. Попросите счётчики токенов через stream_options — и перед этим кадром придёт чанк с расходом.
Отказ, решённый до первого события, приходит обычной JSON-ошибкой — ровно так же, как в унарном вызове. Сбой после начала потока обрывает его без завершающего кадра: именно так клиент отличает законченный ответ от обрезанного, поэтому поток, остановившийся до [DONE], считайте неудачным вызовом, а не коротким.
curl -N https://api.kumorouter.com/v1/chat/completions \
-H "Authorization: Bearer $KUMO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<model>",
"max_tokens": 128,
"stream": true,
"stream_options": { "include_usage": true },
"messages": [{ "role": "user", "content": "Напиши хайку про задержку." }]
}'Поток целиком, событие за событием →
Убедитесь, что ключ работает
Прежде чем вшивать ключ куда-либо, спросите у платформы, что она о нём думает. Эхо личности — единственная операция, которая отвечает личностью самого предъявленного ключа: его именем, тем, чем он оплачивается, и сроком. Она говорит «да, ключ живой, и вот что ему разрешено» без единой написанной вами строки.
Отказ в предъявлении всегда один и тот же 401. Отсутствующий заголовок, искажённый ключ, неизвестный, отозванный и истёкший отвечаются одинаково, и ответ не говорит, что именно из этого случилось. Какой из ваших ключей жив, знает консоль, а не шлюз.