Быстрый старт
Заведите аккаунт, выпустите ключ и сделайте настоящий вызов — три шага между браузером и ответом модели.
Заведите аккаунт
Всё в этом разделе происходит в консоли. Аккаунт — это адрес почты и пароль; ничего ставить не нужно, и карту никто не спрашивает до того, как ключ окажется у вас в руках.
- Откройте консольэто отдельный хост продукта, и там живут все операции с аккаунтом.
- Создайте аккаунтадрес, пароль не короче двенадцати символов и два согласия, которых просит форма.
- Вы уже внутритот же ответ, что создаёт аккаунт, выпускает и сессию: консоль сама ставит себе куку и открывает обзор, входить отдельно не нужно и копировать нечего.
Письмо с подтверждением адреса обычно приходит своим чередом. Его ссылка удостоверяет, что адрес ваш, и сегодня этим всё и исчерпывается: ни ключ, ни первый вызов её не ждут — поэтому и не пришедшее письмо не тупик. Отправка делается по мере возможности: под нагрузкой её могут пропустить, а ошибку доставки — проглотить, и регистрация в любом случае состоится.
Выпустите ключ
Ключ создаётся на экране ключей в консоли. Секрет показывается один раз, на том экране, который его создаёт, и больше никогда: платформа хранит только его хэш вместе с префиксом и хвостом, которые называют ключ в списке. Скопируйте его в своё хранилище секретов, не уходя с этого экрана, — потом прочитать его вам не сможет никто, включая поддержку, а лекарство от потерянного ключа — новый ключ.
Открыть консоль → · Как пишется заголовок →
Сделайте вызов
Направьте любой OpenAI-совместимый клиент на https://api.kumorouter.com/v1 и дайте ему ключ. В этом вся миграция: меняются base URL и ключ, а остальной ваш код — нет.
Модель называется каноническим именем или псевдонимом, который несёт опубликованный каталог. <model> ниже стоит вместо такого имени — спросите список у шлюза командой curl https://api.kumorouter.com/v1/models или посмотрите ставки в прайс-листе.
Потолок вывода обязателен. max_tokens (или max_completion_tokens — это то же самое) позволяет платформе сделать резерв под вызов до того, как он уйдёт к провайдеру; запрос без него отвергается, а не остаётся неограниченным.
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": "Объясни токены одной строкой." }]
}'Ответ принадлежит самому этому протоколу, а не переведён из другого: 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": "Напиши хайку про задержку." }]
}'Каждая операция, поле за полем → · Как выглядит отказ →
Убедитесь, что ключ работает
Прежде чем вшивать ключ куда-либо, спросите у платформы, что она о нём думает. Эхо личности — единственная операция, которая отвечает личностью самого предъявленного ключа: его именем, тем, чем он оплачивается, и сроком, — поэтому она говорит «да, ключ живой, и вот что ему разрешено» без единой написанной вами строки.