Документация 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.

Модели с рассуждением отвечают не сразу Они могут молчать десятки секунд, прежде чем отдать первый фрагмент — это нормально и не означает зависания. Ставьте таймаут клиента не меньше 600 секунд, иначе оборвёте нормальный запрос.

Вызов инструментов

Работает в обоих форматах. Пример в формате 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 URLhttps://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 слишком мал и весь бюджет ушёл на рассуждения модели. Увеличьте лимит.

Можно ли выдать ключи сотрудникам?

Да, создайте отдельный ключ на каждого и задайте лимит. Расход по каждому виден в журнале.