Документация HubRouter
Единый доступ к моделям ИИ через один ключ. Совместим с OpenAI, Anthropic и API генерации изображений.
Быстрый старт
Базовый адрес API:
https://hubrouter.ru/v1
Первый запрос:
curl https://hubrouter.ru/v1/chat/completions \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"messages": [{"role": "user", "content": "Привет"}]
}'
Если у вас уже есть код под OpenAI API — достаточно поменять базовый адрес и ключ, остальное менять не нужно.
Ключи и авторизация
Ключ создаётся в личном кабинете в разделе Токены. Он передаётся в заголовке:
Authorization: Bearer sk-...
Для запросов в формате Anthropic используется другой заголовок:
x-api-key: sk-...
anthropic-version: 2023-06-01
Модели
Актуальный список моделей и цены — на странице «Модели и цены». Она обновляется автоматически, поэтому здесь список не дублируется.
Список доступных вам моделей можно получить и запросом:
curl https://hubrouter.ru/v1/models \
-H "Authorization: Bearer ВАШ_КЛЮЧ"
Имя модели указывается в поле model ровно так, как оно записано в витрине.
Формат OpenAI
Эндпоинт: POST /v1/chat/completions
curl https://hubrouter.ru/v1/chat/completions \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [
{"role": "system", "content": "Отвечай кратко."},
{"role": "user", "content": "Что такое TCP?"}
],
"max_tokens": 500,
"temperature": 0.7
}'
Поддерживаются обычные параметры: temperature, top_p, max_tokens, stop, presence_penalty, frequency_penalty, response_format, tools, stream.
Ответ
{
"id": "...",
"model": "claude-sonnet-5",
"choices": [{
"index": 0,
"message": {"role": "assistant", "content": "..."},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 118,
"total_tokens": 142
}
}
Потоковый ответ
Добавьте "stream": true — ответ пойдёт событиями Server-Sent Events, по мере генерации.
curl -N https://hubrouter.ru/v1/chat/completions \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"messages": [{"role": "user", "content": "Посчитай от 1 до 10"}],
"stream": true
}'
Поток завершается строкой data: [DONE]. Статистика расхода приходит в последнем событии, в поле usage.
Вызов инструментов
Работает в обоих форматах. Пример в формате OpenAI:
{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "Какая погода в Москве?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Получить погоду в городе",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}]
}
Модель вернёт finish_reason: "tool_calls" и аргументы вызова в поле arguments — это строка с JSON.
Формат Anthropic
Эндпоинт: POST /v1/messages. Нужен для инструментов, которые умеют работать только с этим протоколом.
curl https://hubrouter.ru/v1/messages \
-H "x-api-key: ВАШ_КЛЮЧ" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 500,
"messages": [{"role": "user", "content": "Привет"}]
}'
Поле max_tokens здесь обязательное. Поддерживаются system, tools, stream и режим рассуждения.
Генерация изображений
Эндпоинт: POST /v1/images/generations
curl https://hubrouter.ru/v1/images/generations \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Красный куб на белом фоне",
"n": 1,
"size": "1024x1024"
}'
Изображение возвращается в поле b64_json. Модели генерации изображений не работают через /v1/chat/completions — только через этот эндпоинт.
SDK Python и Node.js
Python, библиотека openai
from openai import OpenAI
client = OpenAI(
api_key="ВАШ_КЛЮЧ",
base_url="https://hubrouter.ru/v1",
)
resp = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "Привет"}],
)
print(resp.choices[0].message.content)
Python, библиотека anthropic
from anthropic import Anthropic
client = Anthropic(
api_key="ВАШ_КЛЮЧ",
base_url="https://hubrouter.ru",
)
msg = client.messages.create(
model="claude-sonnet-5",
max_tokens=500,
messages=[{"role": "user", "content": "Привет"}],
)
print(msg.content[0].text)
Node.js
import OpenAI from 'openai'
const client = new OpenAI({
apiKey: 'ВАШ_КЛЮЧ',
baseURL: 'https://hubrouter.ru/v1',
})
const resp = await client.chat.completions.create({
model: 'claude-sonnet-5',
messages: [{ role: 'user', content: 'Привет' }],
})
console.log(resp.choices[0].message.content)
Claude Code
Задайте переменные окружения перед запуском:
export ANTHROPIC_BASE_URL=https://hubrouter.ru
export ANTHROPIC_AUTH_TOKEN=ВАШ_КЛЮЧ
claude
В Windows PowerShell:
$env:ANTHROPIC_BASE_URL = "https://hubrouter.ru"
$env:ANTHROPIC_AUTH_TOKEN = "ВАШ_КЛЮЧ"
claude
Обратите внимание: в базовом адресе здесь нет /v1 — клиент добавляет его сам.
Cline, Cursor, Roo
В настройках выберите тип провайдера OpenAI Compatible и укажите:
| Поле | Значение |
|---|---|
| Base URL | https://hubrouter.ru/v1 |
| API Key | ваш ключ |
| Model ID | имя модели из витрины |
Если инструмент умеет работать по протоколу Anthropic, укажите вместо этого базовый адрес https://hubrouter.ru — так вызовы инструментов работают надёжнее.
Настольные клиенты
Cherry Studio, Chatbox, Lobe Chat и другие подключаются одинаково: провайдер OpenAI, базовый адрес https://hubrouter.ru/v1, ваш ключ. Список моделей клиент подтянет сам, либо укажите имена вручную.
Тарификация
Списание идёт с предоплаченного баланса, помесячной подписки нет.
| Что тарифицируется | Как считается |
|---|---|
| Входные токены | по цене модели за входящие токены |
| Выходные токены | обычно дороже входных |
| Токены рассуждения | считаются как выходные |
| Чтение из кеша | дешевле обычных входных |
| Изображения | фиксированная цена за изображение |
max_tokens.
История запросов с моделью, количеством токенов, временем выполнения и точной стоимостью доступна в личном кабинете в разделе Журнал.
Ошибки
| Код | Что означает | Что делать |
|---|---|---|
| 401 | Ключ неверен, отозван или не передан | Проверьте заголовок и сам ключ |
| 402 | Недостаточно средств на балансе | Пополните баланс |
| 404 | Модель не найдена или недоступна вашей группе | Сверьте имя модели с витриной |
| 429 | Превышен лимит частоты запросов | Повторите с задержкой |
| 5xx | Временная проблема на стороне поставщика | Повторите запрос |
Временные сбои шлюз обрабатывает сам: запрос автоматически повторяется, и до клиента ошибка не доходит. Ошибку вы увидите только если проблема устойчивая.
Частые вопросы
Нужно ли менять код, если раньше работал с OpenAI?
Нет. Достаточно поменять базовый адрес и ключ.
Ключ один на все модели?
Да. Один ключ даёт доступ ко всем моделям из витрины.
Сгорает ли баланс?
Нет, деньги списываются только за фактические запросы.
Почему ответ пришёл пустым?
Чаще всего max_tokens слишком мал и весь бюджет ушёл на рассуждения модели. Увеличьте лимит.
Можно ли выдать ключи сотрудникам?
Да, создайте отдельный ключ на каждого и задайте лимит. Расход по каждому виден в журнале.