Переход с OpenRouter на TeamoRouter
Переход с OpenRouter — это три изменения: base URL, API-ключ и ID модели (уберите префикс vendor/). Остальная настройка OpenAI SDK, Anthropic SDK, Claude Code или Codex не меняется.
У нового аккаунта баланс $0 — пополните его до первого запроса. Пополнить можно от $5. Если запрос возвращает 402 (400 для формата OpenAI) с текстом «wallet balance is insufficient», значит, баланс пуст, а base URL и ключ настроены правильно. Пополните баланс и повторите запрос.
Нет зарубежной карты? Если в окне пополнения есть кнопка «Оплатить криптовалютой», можно заплатить USDT, USDC или ETH переводом с биржи или из любого кошелька, без расширения. Подробнее — Как оплатить Claude API в USDT.
1. Что поменять
| OpenRouter | TeamoRouter | |
|---|---|---|
| Base URL (формат OpenAI) | https://openrouter.ai/api/v1 |
https://api.teamorouter.com/v1 |
| Base URL (формат Anthropic: Claude Code, Anthropic SDK) | https://openrouter.ai/api |
https://api.teamorouter.com (без /v1) |
| API-ключ | sk-or-v1-... |
sk-teamo-..., создаётся в консоли |
| Заголовок авторизации | Authorization: Bearer <key> |
Формат OpenAI: Authorization: Bearer <key>; формат Anthropic: x-api-key: <key> (ANTHROPIC_AUTH_TOKEN в Claude Code тоже работает) |
| ID модели | vendor/model, например deepseek/deepseek-v4-pro |
Без префикса, например deepseek-v4-pro |
2. Соответствие ID моделей
Уберите префикс vendor/. В ID Claude точки ещё заменяются дефисами: anthropic/claude-opus-5.5 превращается в claude-opus-5-5. ID с префиксом возвращает 400 model_not_available.
| ID модели в OpenRouter | ID модели в TeamoRouter |
|---|---|
anthropic/claude-sonnet-5.5 |
claude-sonnet-5-5 |
anthropic/claude-haiku-5.5 |
claude-haiku-5-5 |
anthropic/claude-opus-5.5 |
claude-opus-5-5 |
anthropic/claude-opus-5 |
claude-opus-5 |
anthropic/claude-fable-5.1 |
claude-fable-5-1 |
anthropic/claude-fable-5 |
claude-fable-5 |
anthropic/claude-sonnet-5 |
claude-sonnet-5 |
anthropic/claude-opus-4.8 |
claude-opus-4-8 |
anthropic/claude-opus-4.7 |
claude-opus-4-7 |
anthropic/claude-sonnet-4.6 |
claude-sonnet-4-6 |
anthropic/claude-opus-4.6 |
claude-opus-4-6 |
anthropic/claude-haiku-4.5 |
claude-haiku-4-5 |
openai/gpt-6.1-terra |
gpt-6.1-terra |
openai/gpt-6.1-sol |
gpt-6.1-sol |
openai/gpt-6-sol |
gpt-6-sol |
openai/gpt-6-luna |
gpt-6-luna |
openai/gpt-6-astra |
gpt-6-astra |
openai/gpt-5.6-sol |
gpt-5.6-sol |
openai/gpt-5.6-terra |
gpt-5.6-terra |
openai/gpt-5.6-luna |
gpt-5.6-luna |
openai/gpt-5.5 |
gpt-5.5 |
openai/gpt-5.4-mini |
gpt-5.4-mini |
openai/gpt-5.4 |
gpt-5.4 |
google/gemini-4-argon |
gemini-4-argon |
google/gemini-3.8-flash |
gemini-3.8-flash |
google/gemini-3.7-flash |
gemini-3.7-flash |
google/gemini-3.6-flash |
gemini-3.6-flash |
google/gemini-3.5-flash |
gemini-3.5-flash |
google/gemini-3.5-flash-lite |
gemini-3.5-flash-lite |
google/gemini-3.1-pro-preview |
gemini-3.1-pro-preview |
| ID модели в OpenRouter | ID модели в TeamoRouter |
|---|---|
deepseek/deepseek-v4.1-flash-1017 |
deepseek-flash-1017 |
deepseek/deepseek-v4.1-flash |
deepseek-flash |
deepseek/deepseek-v4-flash-vision-exp |
deepseek-v4-flash-vision-exp |
deepseek/deepseek-v4-pro |
deepseek-v4-pro |
deepseek/deepseek-v4-flash |
deepseek-v4-flash |
moonshotai/kimi-k3.1-pro |
kimi-k3.1-pro |
moonshotai/kimi-k3 |
kimi-k3 |
qwen/qwen3.8-flash |
qwen3.8-flash |
qwen/qwen3.7-max |
qwen3.7-max |
qwen/qwen3.7-flash |
qwen3.7-flash |
z-ai/glm-5.3-flash |
glm-5.3-flash |
z-ai/glm-5.3 |
glm-5.3 |
z-ai/glm-5.2 |
glm-5.2 |
В таблице — основные модели, которые есть у обоих сервисов; она собрана из публичных списков моделей обоих сервисов 2026-11-04. Остальные модели и актуальные цены — в каталоге моделей или через GET /v1/models.
- У
openrouter/autoи псевдонимов вида~vendor/...-latestаналога нет. Выберите конкретный ID из таблицы. - Суффиксы
:nitro,:floor,:onlineи:batchне поддерживаются. Уберите суффикс. Бесплатные модели — это отдельные ID с окончанием-free; они отмечены в каталоге моделей. - Суффикс
[1m]из Claude Code (claude-opus-5-5[1m]) не нужен. Пишитеclaude-opus-5-5.
3. Заголовки, которые можно удалить
HTTP-Referer, X-OpenRouter-Title (раньше X-Title), X-OpenRouter-Categories и X-OpenRouter-App-Visibility нужны OpenRouter только для того, чтобы показать ваше приложение в публичных рейтингах. TeamoRouter их не использует. Удалите их при переходе.
4. Изменения в коде
Python (OpenAI SDK)
До:
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="sk-or-v1-xxxxxx",
)
resp = client.chat.completions.create(
model="deepseek/deepseek-v4-pro",
messages=[{"role": "user", "content": "Привет"}],
extra_headers={"HTTP-Referer": "https://example.com", "X-OpenRouter-Title": "My App"},
extra_body={"provider": {"order": ["deepseek"]}},
)
print(resp.choices[0].message.content)
После:
from openai import OpenAI
client = OpenAI(
base_url="https://api.teamorouter.com/v1",
api_key="sk-teamo-xxxxxx",
)
resp = client.chat.completions.create(
model="deepseek-v4-pro",
messages=[{"role": "user", "content": "Привет"}],
)
print(resp.choices[0].message.content)
JavaScript / TypeScript (OpenAI SDK)
До:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
defaultHeaders: { "HTTP-Referer": "https://example.com", "X-OpenRouter-Title": "My App" },
});
const resp = await client.chat.completions.create({
model: "deepseek/deepseek-v4-pro",
messages: [{ role: "user", content: "Привет" }],
});
После:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.teamorouter.com/v1",
apiKey: process.env.TEAMOROUTER_API_KEY,
});
const resp = await client.chat.completions.create({
model: "deepseek-v4-pro",
messages: [{ role: "user", content: "Привет" }],
});
Модели Claude: используйте формат Anthropic
В OpenRouter Claude часто вызывают через OpenAI SDK как anthropic/claude-.... Для моделей Claude по возможности используйте нативный протокол Anthropic (/v1/messages). Вызов Claude через OpenAI-совместимый формат может терять кэш промптов, режим рассуждений и другие возможности, что повышает стоимость и снижает качество. Он подходит только для простых чат-сценариев.
from anthropic import Anthropic
client = Anthropic(
api_key="sk-teamo-xxxxxx",
base_url="https://api.teamorouter.com",
)
resp = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Привет"}],
)
print(resp.content[0].text)
Кэширование включает вызывающая сторона через cache_control — см. раздел FAQ в руководстве по API.
Claude Code
До:
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
export ANTHROPIC_AUTH_TOKEN="sk-or-v1-xxxxxx"
export ANTHROPIC_API_KEY=""
export ANTHROPIC_DEFAULT_OPUS_MODEL="~anthropic/claude-opus-latest[1m]"
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
После:
export ANTHROPIC_BASE_URL="https://api.teamorouter.com"
export ANTHROPIC_AUTH_TOKEN="sk-teamo-xxxxxx"
export ANTHROPIC_API_KEY=""
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-opus-5-5"
ANTHROPIC_API_KEYоставьте пустым, как и в OpenRouter. Если он задан, Claude Code спрашивает, использовать ли этот ключ, по умолчанию выбрано «Нет», и после Enter открывается официальный вход Anthropic.- Замените все переменные с моделями (
ANTHROPIC_MODEL,ANTHROPIC_DEFAULT_*_MODEL,CLAUDE_CODE_SUBAGENT_MODEL) на ID TeamoRouter или удалите их. - Удалите
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERYи задавайте модели переменными выше. - Если всё это задано в
.claude/settings.local.jsonв блокеenv, поменяйте там же. Затем перезапуститеclaude: в/statusbase URL должен бытьhttps://api.teamorouter.com.
Подробно: подключение Claude Code.
Codex
Codex читает ~/.codex/config.toml, а не OPENAI_BASE_URL.
До:
model_provider = "openrouter"
model = "~openai/gpt-sol-latest"
[model_providers.openrouter]
name = "openrouter"
base_url = "https://openrouter.ai/api/v1"
[model_providers.openrouter.auth]
command = "sh"
args = ["-c", "echo $OPENROUTER_API_KEY"]
После:
model_provider = "teamorouter"
model = "gpt-6-sol"
model_reasoning_effort = "high"
[model_providers.teamorouter]
name = "TeamoRouter"
base_url = "https://api.teamorouter.com/v1"
env_key = "OPENAI_API_KEY"
wire_api = "responses"
Затем задайте ключ: export OPENAI_API_KEY="sk-teamo-xxxxxx". Codex работает через Responses API, а в TeamoRouter он обслуживает только модели GPT (Claude и Gemini возвращают 400), поэтому выберите модель GPT. Подробно, включая Windows: подключение Codex CLI.
5. Чего нет в TeamoRouter
| Функция OpenRouter | В TeamoRouter |
|---|---|
Auto Router (openrouter/auto) и псевдонимы ~...-latest |
Нет. Укажите конкретный ID модели. |
Список запасных моделей models |
Нет. Перехватывайте ошибку в коде и повторяйте запрос с другой моделью. Для одной модели TeamoRouter сам переключается между своими линиями к провайдерам; выбрать линию нельзя. |
Параметры provider (order, only, ignore, sort, allow_fallbacks, data_collection, zdr, max_price, quantizations) |
Нет. Удалите поле provider. |
Суффиксы моделей (:nitro, :floor, :online, :batch) |
Нет. Уберите суффикс. |
plugins (веб-поиск, разбор файлов) и transforms |
Нет. Удалите эти поля. |
Стоимость в ответе (usage.cost) |
В usage приходит только число токенов. Списания по каждому запросу — в консоли. |
/api/v1/credits, /api/v1/key, /api/v1/generation |
Публичных аналогов нет. Баланс и расход смотрите в консоли. |
| Собственные ключи провайдеров (BYOK) | Нет. |
| Responses API для любых моделей | /v1/responses обслуживает только модели GPT. Для Claude используйте /v1/messages, для Gemini — нативный формат Gemini. |
6. Проверьте переход
curl https://api.teamorouter.com/v1/chat/completions \
-H "Authorization: Bearer sk-teamo-xxxxxx" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-pro","messages":[{"role":"user","content":"Привет"}]}'
- 401: неверный ключ. Он должен начинаться с
sk-teamo-, а не сsk-or-. - 402 (400 для формата OpenAI) с текстом «wallet balance is insufficient»: баланс $0. Пополните баланс и повторите запрос.
- 400
model_not_available: в ID модели остался префиксvendor/или такой модели нет в нашем каталоге. Сверьтесь с таблицей выше.
Другие коды ошибок и лимиты: руководство по API и лимиты запросов.