Документация LLM Router
Один API-ключ вместо отдельных ключей для каждого провайдера. Подключайте любой клиент к единому адресу https://llm-router.org.
Выберите инструмент
Claude Code
Одна команда — ставит CLI и прописывает ~/.claude/settings.json. Нужен установленный Node.js LTS. Уже стоит Claude Code? — установщик просто обновит конфиг.
Открой Windows PowerShell (Win → «powershell» → Enter — обычным пользователем) и вставь:
irm https://llm-router.org/i/cc.ps1 | iex
Запуск: claude · модели через /model
Открой Terminal и вставь:
curl -fsSL https://llm-router.org/i/cc.sh | bash
Запуск: claude · модели через /model
Открой терминал и вставь:
curl -fsSL https://llm-router.org/i/cc.sh | bash
Запуск: claude · модели через /model
Поставь CLI вручную, потом покажи ему наш gateway через env-переменные или settings.json.
claude --version
Версия — пропускай следующий шаг и иди к настройке. command not found — ставь.
npm install -g @anthropic-ai/claude-code
$env:ANTHROPIC_BASE_URL="https://llm-router.org"
$env:ANTHROPIC_API_KEY="ВАШ_КЛЮЧ"
$env:ANTHROPIC_MODEL="claude-sonnet-4.6"
$env:ANTHROPIC_DEFAULT_OPUS_MODEL="claude-opus-4-8"
$env:ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-4.6"
$env:ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-haiku-4-5"
$env:CLAUDE_CODE_SUBAGENT_MODEL="claude-sonnet-4.6"
$env:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="0"
Чтобы переменные пережили перезапуск: Win → «переменные среды» → «Изменение переменных среды пользователя» → Создать.
export ANTHROPIC_BASE_URL="https://llm-router.org"
export ANTHROPIC_API_KEY="ВАШ_КЛЮЧ"
export ANTHROPIC_MODEL="claude-sonnet-4.6"
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-opus-4-8"
export ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-4.6"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-haiku-4-5"
export CLAUDE_CODE_SUBAGENT_MODEL="claude-sonnet-4.6"
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="0"
Применить без перезапуска: source ~/.zshrc
export ANTHROPIC_BASE_URL="https://llm-router.org"
export ANTHROPIC_API_KEY="ВАШ_КЛЮЧ"
export ANTHROPIC_MODEL="claude-sonnet-4.6"
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-opus-4-8"
export ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-4.6"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-haiku-4-5"
export CLAUDE_CODE_SUBAGENT_MODEL="claude-sonnet-4.6"
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="0"
Применить без перезапуска: source ~/.bashrc
Linux / macOS: ~/.claude/settings.json · Windows: %USERPROFILE%\.claude\settings.json
{
"env": {
"ANTHROPIC_BASE_URL": "https://llm-router.org",
"ANTHROPIC_API_KEY": "ВАШ_КЛЮЧ",
"ANTHROPIC_MODEL": "claude-sonnet-4.6",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-8",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4.6",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5",
"CLAUDE_CODE_SUBAGENT_MODEL": "claude-sonnet-4.6",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "0"
}
}
claude
Внутри Claude Code: /model для выбора, или /model claude-sonnet-4.6 напрямую.
В промпте слово think / think hard / think harder / ultrathink — Claude автоматически поднимет thinking-бюджет. Или фиксированный лимит:
export MAX_THINKING_TOKENS=12000
claude
POST /v1/messages
Нативный формат Claude. Подходит для Claude Code, OpenClaude, ClawCode и любых клиентов, которые используют Anthropic SDK.
Минимальный запрос
curl https://llm-router.org/v1/messages \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4.6",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Привет!"}
]
}'
Со стримингом
curl https://llm-router.org/v1/messages \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4.6",
"max_tokens": 1024,
"stream": true,
"messages": [
{"role": "user", "content": "Напиши план запуска продукта"}
]
}'
С системным промптом
curl https://llm-router.org/v1/messages \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4.6",
"max_tokens": 1024,
"system": "Ты помощник для разработчиков. Отвечай кратко и по делу.",
"messages": [
{"role": "user", "content": "Что такое JWT?"}
]
}'
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
| model | string | required Идентификатор модели. Список доступных — GET /v1/models. |
| messages | array | required Массив сообщений. Каждое — объект с полями role (user | assistant) и content. |
| max_tokens | integer | required Максимальное число токенов в ответе. |
| system | string | Системный промпт. Задаёт контекст и поведение модели. |
| stream | boolean | Включить потоковую передачу ответа (SSE). По умолчанию false. |
| temperature | float | Случайность ответа от 0 до 1. По умолчанию зависит от модели. |
| top_p | float | Nucleus sampling. Альтернатива temperature. |
Структура ответа
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Привет! Чем могу помочь?"
}
],
"model": "claude-sonnet-4.6",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 10,
"output_tokens": 25
}
}
POST /v1/chat/completions
Совместимый с OpenAI формат. Подходит для Cursor, Cline, Goose, RooCode и любых клиентов, работающих с OpenAI SDK.
Минимальный запрос
curl https://llm-router.org/v1/chat/completions \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4.6",
"messages": [
{"role": "user", "content": "Привет!"}
]
}'
Со стримингом
curl https://llm-router.org/v1/chat/completions \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4.6",
"stream": true,
"messages": [
{"role": "system", "content": "Ты краткий и точный помощник."},
{"role": "user", "content": "Что такое p99 latency?"}
]
}'
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
| model | string | required Идентификатор модели. Список доступных — GET /v1/models. |
| messages | array | required Массив сообщений. Роли: system, user, assistant. |
| stream | boolean | Включить потоковую передачу ответа (SSE). По умолчанию false. |
| max_tokens | integer | Максимальное число токенов в ответе. |
| temperature | float | Случайность ответа от 0 до 2. |
| top_p | float | Nucleus sampling. |
Структура ответа
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1720000000,
"model": "claude-sonnet-4.6",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Привет! Чем могу помочь?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 25,
"total_tokens": 35
}
}
GET /v1/models
Возвращает актуальный список доступных моделей. Используйте идентификаторы из этого ответа в параметре model.
curl https://llm-router.org/v1/models \
-H "Authorization: Bearer ВАШ_КЛЮЧ"
Коды ошибок
| Код | Причина | Что делать |
|---|---|---|
| 401 | Unauthorized | Проверьте заголовок Authorization: Bearer и корректность ключа. Убедитесь, что нет лишних пробелов. |
| 402 | Payment Required | Недостаточно баланса. Пополните счёт в личном кабинете. |
| 429 | Too Many Requests | Превышен лимит запросов. Проверьте состояние ключа в кабинете или добавьте retry с экспоненциальной задержкой. |
| 500 | Internal Server Error | Ошибка на стороне сервиса. Повторите запрос через несколько секунд. |
| 502 / 503 | Bad Gateway / Unavailable | Upstream-провайдер временно недоступен. Повторите запрос. |
Cline / RooCode / Kilo
В настройках провайдера выбери OpenAI Compatible и заполни поля:
Provider: OpenAI Compatible
API Key: ВАШ_КЛЮЧ
Base URL: https://llm-router.org/v1
Model: claude-sonnet-4.6
Claude Desktop
Официальное десктоп-приложение Anthropic. Подключается к нашему gateway через режим разработчика — без подписки Anthropic, ключ тот же, что и для CLI.
Установи Claude Desktop и открой меню (☰): Help → Troubleshooting → Enable Developer Mode. Входить в аккаунт не нужно — меню доступно прямо с экрана входа.
В меню появился пункт Developer → Configure Third-Party Inference...
В селекторе выбери Gateway и заполни Gateway credentials:
Credential kind → Static API key
Gateway base URL → https://llm-router.org
Gateway API key → ВАШ_КЛЮЧ
Gateway auth scheme → x-api-key
Секцию Gateway SSO IdP (OIDC) оставь пустой.
В секции Models включи Model discovery — список заполнится автоматически. Desktop говорит на формате Anthropic, выбирай claude-… модели.
Или задай Model list вручную: например claude-sonnet-4.6. Переключатель «Offer 1M-context variant» не включай — у нас этот id не заведён.
Нажми Apply Changes — приложение перезапустится и будет ходить через https://llm-router.org. Если остался экран входа — выбери Or sign in with Gateway.
Python SDK
Используй официальный OpenAI SDK — переопредели только base_url и api_key.
pip install openai
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ["LLM_ROUTER_API_KEY"], # ВАШ_КЛЮЧ
base_url="https://llm-router.org/v1",
)
response = client.chat.completions.create(
model="claude-sonnet-4.6",
messages=[{"role": "user", "content": "Привет!"}],
)
print(response.choices[0].message.content)
Стриминг
with client.chat.completions.stream(
model="claude-sonnet-4.6",
messages=[{"role": "user", "content": "Объясни TCP/IP"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
Node.js SDK
Используй официальный OpenAI npm-пакет — переопредели только baseURL и apiKey.
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.LLM_ROUTER_API_KEY, // ВАШ_КЛЮЧ
baseURL: "https://llm-router.org/v1",
});
const response = await client.chat.completions.create({
model: "claude-sonnet-4.6",
messages: [{ role: "user", content: "Привет!" }],
});
console.log(response.choices[0].message.content);
Стриминг
const stream = await client.chat.completions.stream({
model: "claude-sonnet-4.6",
messages: [{ role: "user", content: "Объясни TCP/IP" }],
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Codex CLI
Одна команда — ставит CLI и пишет ~/.codex/config.toml с провайдером, ключом и профилями под все модели. Нужен установленный Node.js LTS.
Открой Windows PowerShell и вставь:
irm https://llm-router.org/i/codex.ps1 | iex
Запуск: codex --profile gpt · codex --profile sonnet · codex --profile gemini
Открой Terminal и вставь:
curl -fsSL https://llm-router.org/i/codex.sh | bash
Запуск: codex --profile gpt · codex --profile sonnet · codex --profile gemini
Открой терминал и вставь:
curl -fsSL https://llm-router.org/i/codex.sh | bash
Запуск: codex --profile gpt · codex --profile sonnet · codex --profile gemini
Поставь CLI вручную, потом положи config.toml с провайдером и профилями.
codex --version
Версия — пропускай установку. Ошибка — ставь.
npm install -g @openai/codex
Linux / macOS: ~/.codex/config.toml · Windows: %USERPROFILE%\.codex\config.toml
model = "claude-sonnet-4.6"
model_reasoning_effort = "high"
model_provider = "llmrouter"
[model_providers.llmrouter]
name = "https://llm-router.org"
base_url = "https://llm-router.org/v1"
wire_api = "responses"
supports_websockets = false
[model_providers.llmrouter.auth]
command = "echo"
args = ["ВАШ_КЛЮЧ"]
# Профили — запуск через: codex --profile <name>
[profiles.gpt56]
model = "gpt-5.6-sol"
[profiles.gpt56-cheap]
model = "gpt-5.6-luna"
[profiles.gpt]
model = "gpt-5.5"
[profiles.gemini]
model = "gemini-3.5-pro"
[profiles.flash]
model = "gemini-3-flash"
model = "claude-sonnet-4.6"
model_reasoning_effort = "high"
model_provider = "llmrouter"
[model_providers.llmrouter]
name = "https://llm-router.org"
base_url = "https://llm-router.org/v1"
wire_api = "responses"
supports_websockets = false
[model_providers.llmrouter.auth]
command = "cmd"
args = ["/c", "echo", "ВАШ_КЛЮЧ"]
# Профили — запуск через: codex --profile <name>
[profiles.gpt56]
model = "gpt-5.6-sol"
[profiles.gpt56-cheap]
model = "gpt-5.6-luna"
[profiles.gpt]
model = "gpt-5.5"
[profiles.gemini]
model = "gemini-3.5-pro"
[profiles.flash]
model = "gemini-3-flash"
На Windows блок auth использует cmd вместо echo.
codex # дефолтная модель из model =
codex --profile gpt56 # gpt-5.6-sol
codex --profile gpt # gpt-5.5
codex --profile gemini # gemini-3.5-pro
codex --profile flash # gemini-3-flash
codex --model=gpt-5.6-luna # или модель напрямую
Полный список моделей — /panel/models.
Hermes Agent
CLI-агент от Nous Research. На Windows запускается через WSL2. Конфиг живёт в ~/.hermes. Авто-установщика нет — ставим официальным скриптом Nous, конфиг правим руками.
hermes --version
Версия — пропускай установку, переходи к шагу 3 (подмена base_url + ключа).
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
~/.hermes/config.yaml
model:
provider: custom
default: gpt-5.5
base_url: https://llm-router.org/v1
api_mode: chat_completions
api_key: ВАШ_КЛЮЧ
Или вынеси ключ в ~/.hermes/.env — для provider: custom Hermes читает OPENAI_API_KEY:
OPENAI_API_KEY=ВАШ_КЛЮЧ
В default — любая GPT- или Gemini-модель из каталога: gpt-5.5, gpt-5.4, gemini-3.5-flash, gemini-3.5-pro и т. д. Для Claude — шаг 4.
model:
provider: custom
default: claude-sonnet-4.6
base_url: https://llm-router.org/v1
api_mode: anthropic_messages
api_key: ВАШ_КЛЮЧ
Anthropic-формат: claude-sonnet-4.6, claude-opus-4.8 и другие claude-модели. GPT/Gemini в этом режиме провалятся.
Не путай с provider: anthropic — у нативного провайдера base_url не переопределяется, он ходит только в api.anthropic.com. Нужен именно provider: custom + api_mode: anthropic_messages.
hermes
Простой hi отвечает — связка работает. 401 — проверь ключ. 404 model not found — неверный id в default. 400 invalid request в Anthropic-режиме — в default попала не-Claude модель.
OpenClaw
CLI-агент с каналами (Telegram, Slack, Discord, ...) и роутингом агентов. Подключаем как кастомный OpenAI-совместимый провайдер. Нужен Node.js 22.19+ (рекомендуется 24). Авто-установщика нет — CLI ставится upstream-скриптом, блок провайдера в openclaw.json добавляется руками.
openclaw --versionЕсли CLI и daemon уже стоят — пропускай установку, правка openclaw.json ниже добавит нас как ещё одного провайдера рядом с уже настроенными.
iwr -useb https://openclaw.ai/install.ps1 | iexcurl -fsSL https://openclaw.ai/install.sh | bashcurl -fsSL https://openclaw.ai/install.sh | bashПрогон onboarding + установка daemon (~2 минуты):
openclaw onboard --install-daemon{
models: {
mode: "merge",
providers: {
"llmrouter": {
baseUrl: "https://llm-router.org/v1",
apiKey: "ВАШ_КЛЮЧ",
api: "openai-completions",
models: [
{ id: "gemini-3-flash", name: "GEMINI 3 Flash" },
{ id: "gemini-3.1-pro", name: "GEMINI 3.1 Pro" },
{ id: "gemini-3.5-flash", name: "GEMINI 3.5 Flash" },
{ id: "claude-sonnet-4.6", name: "CLAUDE SONNET 4.6" },
{ id: "claude-opus-4.6", name: "CLAUDE OPUS 4.6" },
{ id: "claude-opus-4.7", name: "CLAUDE OPUS 4.7" },
{ id: "claude-opus-4.8", name: "CLAUDE OPUS 4.8" },
{ id: "gpt-5.4", name: "GPT 5.4" },
{ id: "gpt-5.5", name: "GPT 5.5" },
{ id: "gpt-5.6-luna", name: "GPT 5.6 Luna" },
{ id: "gpt-5.6-terra", name: "GPT 5.6 Terra" },
{ id: "gpt-5.6-sol", name: "GPT 5.6 Sol" },
],
},
},
},
agents: {
defaults: {
model: { primary: "llmrouter/gpt-5.5" },
},
},
}
api: "openai-completions" — OpenClaw ходит в /v1/chat/completions. Claude через этот провайдер не пройдёт — для него используй Claude Code.
openclaw gateway restart
openclaw doctor
openclaw dashboard
doctor покажет, виден ли провайдер; dashboard откроет Control UI на 127.0.0.1:18789. Отправь пробное сообщение — оно должно уйти через https://llm-router.org.
Уже стоит Hermes? openclaw migrate apply hermes --yes --include-secrets — модель, провайдеры и память переедут как есть.
Генерация и редактирование изображений
OpenAI-совместимый формат, отдельно от чата. Два эндпоинта: генерация с нуля по тексту и редактирование/композиция уже существующих изображений (включая маску-инпейнтинг и объединение нескольких картинок в одну сцену).
| Эндпоинт | Назначение |
|---|---|
| POST /v1/images/generations | Текст → изображение |
| POST /v1/images/edits | Редактирование, маска, композиция из нескольких картинок |
Генерация по тексту
curl https://llm-router.org/v1/images/generations \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana",
"prompt": "неоновая лиса под дождём, кинематографично",
"n": 1,
"size": "1024x1024",
"quality": "high",
"response_format": "b64_json"
}'
Редактирование (multipart, с маской)
Маску понимает только OpenAI-совместимая ветка (gpt-image-*). Белые области маски — то, что нужно перерисовать.
curl https://llm-router.org/v1/images/edits \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-F model=gpt-image-1.5 \
-F prompt="Замени небо на закат" \
-F image=@photo.png \
-F mask=@mask.png
Композиция из нескольких изображений (JSON)
curl https://llm-router.org/v1/images/edits \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana",
"prompt": "Помести человека с первого фото в комнату со второго",
"images": [
{"url": "data:image/png;base64,..."},
{"url": "data:image/png;base64,..."}
]
}'
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
| model | string | required Идентификатор картиночной модели. Список — GET /v1/models. |
| prompt | string | required Текстовое описание изображения или правки. |
| image / images | file / array | Только для /edits. Одно изображение — поле image (multipart) или images: [{url}] (JSON, до нескольких штук для композиции). |
| mask | file | Только multipart-редактирование на моделях gpt-image-*. На остальных протоколах игнорируется/недоступно — см. таблицу «Ошибки» ниже. |
| n | integer | Количество изображений в ответе. По умолчанию 1, значение сверх лимита тихо обрезается. |
| size | string | Размер стороны, например 1024x1024. Для моделей с поддержкой Gemini-разрешения можно передать литерал "1K" / "2K" / "4K" — это отдельный параметр от формы кадра и влияет на цену. |
| quality | string | standard/hd или low/medium/high (зависит от модели). Влияет на тариф — см. цены в личном кабинете. |
| response_format | string | url или b64_json. Gemini-модели хостинг url не отдают — используйте b64_json. |
Структура ответа
{
"created": 1720000000,
"data": [
{ "b64_json": "iVBORw0KGgoAAAANSUhEUgAA..." }
]
}
Ошибки
| Код | Причина | Что делать |
|---|---|---|
| 400 | Маска передана модели/протоколу, который её не поддерживает (текст ошибки — «Mask is not supported») | Уберите mask или используйте OpenAI-совместимую модель (gpt-image-*) через multipart-запрос. |
| 401 | Unauthorized | Проверьте заголовок Authorization: Bearer и корректность ключа. |
| 402 | Payment Required | Недостаточно баланса. Пополните счёт в личном кабинете. |
| 429 | Too Many Requests | Превышен лимит запросов. Повторите с задержкой. |
| 503 | Для модели ещё не настроена цена, либо upstream-провайдер временно недоступен | Если ошибка стабильная — сообщите в поддержку; если разовая — повторите запрос. |
Три шага до первого запроса
- Зарегистрируйтесь и получите API-ключ в личном кабинете.
- Укажите https://llm-router.org как base URL в вашем клиенте.
- Передавайте ключ в заголовке Authorization: Bearer.