Подключение к API TeamoRouter
TeamoRouter поддерживает несколько совместимых форматов API, включая OpenAI, Google Gemini и Anthropic. Направьте base URL официального SDK на TeamoRouter, и код приложения менять не придётся. Через один шлюз можно вызывать Claude / Gemini / GPT и другие семейства моделей.
- Base URL:
https://api.teamorouter.ai - Аутентификация: API Key (
sk-teamo-...) - Протоколы: нативный формат Anthropic (
/v1/messages), OpenAI-совместимый формат (/v1/chat/completions), OpenAI Responses API (/v1/responses, только модели GPT), нативный формат Gemini (/v1beta/models/{model}:generateContent) и генерация изображений (/v1/images)
У нового аккаунта баланс $0 — пополните его до первого запроса. Пополнить можно от $5. Если запрос возвращает 402 (400 для формата OpenAI) с текстом «wallet balance is insufficient», значит, баланс пуст, а base URL и ключ настроены правильно. Пополните баланс и повторите запрос.
Замените sk-teamo-xxxxxx на свой ключ. Держите ключ в секрете и никогда не коммитьте его в репозиторий.
1. Аутентификация
Выберите совместимый формат в зависимости от модели:
Разные форматы используют разные заголовки аутентификации. Выберите заголовок по протоколу:
| Протокол | Заголовок |
|---|---|
| Anthropic | x-api-key: sk-teamo-xxxxxx + anthropic-version: 2023-06-01 |
| OpenAI | Authorization: Bearer sk-teamo-xxxxxx |
| Gemini | Authorization: Bearer sk-teamo-xxxxxx |
2. Доступные модели
Полный актуальный список моделей можно получить через GET /v1/models:
curl https://api.teamorouter.ai/v1/models \
-H "Authorization: Bearer sk-teamo-xxxxxx"
Доступные сейчас модели (примеры):
| Провайдер | ID модели |
|---|---|
| Anthropic | claude-opus-5-5, claude-sonnet-5-5, claude-haiku-5-5, claude-fable-5-1, claude-opus-5, claude-fable-5, claude-sonnet-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5 |
| OpenAI | gpt-6-astra, gpt-6.1-sol, gpt-6.1-terra, gpt-6-sol, gpt-6-luna, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-5.5, gpt-5.4, gpt-5.4-mini, gpt-image-2.5-sunburst, gpt-image-2.5-flare, gpt-image-2 |
gemini-4-argon, gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash, gemini-3.5-flash-lite, gemini-3.1-pro-preview, gemini-3-pro-image, gemini-3.1-flash-image, gemini-nano-banana-2.1 |
|
| DeepSeek | deepseek-flash (DeepSeek V4.1 Flash), deepseek-flash-free (бесплатная), deepseek-v4-flash-vision-exp, deepseek-v4-pro, deepseek-v4-flash, deepseek-v4-flash-free (бесплатная) |
| GLM | glm-5.3-flash, glm-5.3-flash-free (бесплатная), glm-5.3, glm-5.2 |
| Grok | grok-4.7, grok-4.6 |
| Другие | kimi-k3.1-pro, kimi-k3, qwen3.8-max, qwen3.8-flash, qwen3.7-max, qwen3.7-flash, MiniMax-M3, minimax-m3.1-flash, doubao-seed-2.1-pro, doubao-seed-2.1-lite, doubao-seed-2.0-lite |
Полный список моделей с актуальными ценами — в каталоге моделей.
3. Нативный формат Anthropic
Эндпоинт: POST /v1/messages
3.1 Базовый запрос
curl https://api.teamorouter.ai/v1/messages \
-H "x-api-key: sk-teamo-xxxxxx" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-fable-5-1",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Introduce yourself in one sentence"}
]
}'
Пример ответа:
{
"id": "msg_01KxDE...",
"type": "message",
"role": "assistant",
"model": "claude-fable-5-1",
"content": [{"type": "text", "text": "I am Claude..."}],
"stop_reason": "end_turn",
"usage": {"input_tokens": 159, "output_tokens": 34}
}
3.2 Потоковый ответ (streaming) через SSE
Добавьте "stream": true. Ответ придёт как text/event-stream:
curl https://api.teamorouter.ai/v1/messages \
-H "x-api-key: sk-teamo-xxxxxx" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-fable-5-1",
"max_tokens": 1024,
"stream": true,
"messages": [{"role": "user", "content": "Write a short poem"}]
}'
Последовательность событий: message_start -> content_block_start -> несколько content_block_delta -> content_block_stop -> message_delta -> message_stop.
3.3 Python SDK anthropic
from anthropic import Anthropic
client = Anthropic(
api_key="sk-teamo-xxxxxx",
base_url="https://api.teamorouter.ai",
)
resp = client.messages.create(
model="claude-fable-5-1",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.content[0].text)
4. OpenAI-совместимый формат
Эндпоинты: POST /v1/chat/completions (Chat Completions) и POST /v1/responses (Responses API, только модели GPT)
4.1 Базовый запрос Chat Completions
curl https://api.teamorouter.ai/v1/chat/completions \
-H "Authorization: Bearer sk-teamo-xxxxxx" \
-H "content-type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'
Ответ соответствует стандартной структуре OpenAI chat.completion:
{
"object": "chat.completion",
"model": "gpt-5.6-sol",
"choices": [
{"index": 0, "message": {"role": "assistant", "content": "Hello!"}, "finish_reason": "stop"}
],
"usage": {"prompt_tokens": 214, "completion_tokens": 3, "total_tokens": 217}
}
4.2 Python SDK openai
from openai import OpenAI
client = OpenAI(
api_key="sk-teamo-xxxxxx",
base_url="https://api.teamorouter.ai/v1",
)
resp = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
4.3 Потоковый ответ
Добавьте "stream": true. TeamoRouter возвращает стандартные SSE-чанки OpenAI в формате data: {...} и завершает поток data: [DONE].
4.4 Базовый запрос Responses API
Если приложение уже использует OpenAI Responses API, обращайтесь напрямую к /v1/responses:
curl https://api.teamorouter.ai/v1/responses \
-H "Authorization: Bearer sk-teamo-xxxxxx" \
-H "content-type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"input": "Introduce TeamoRouter in one sentence"
}'
/v1/responses поддерживает только модели GPT. Запросы к Claude / Gemini возвращают 400. Для Claude используйте /v1/messages, для Gemini — нативный формат Gemini.
4.5 Python SDK openai Responses
from openai import OpenAI
client = OpenAI(
api_key="sk-teamo-xxxxxx",
base_url="https://api.teamorouter.ai/v1",
)
resp = client.responses.create(
model="gpt-5.6-sol",
input="Introduce TeamoRouter in one sentence",
)
print(resp.output_text)
4.6 Потоковый ответ Responses API
Добавьте "stream": true, чтобы получать стандартные потоковые события OpenAI Responses API.
4.7 Fast Mode
OpenAI-совместимые эндпоинты TeamoRouter поддерживают Fast Mode (ранее — Priority processing). Добавьте в запрос Chat Completions или Responses API:
"service_tier": "fast"
Пример на Python:
from openai import OpenAI
client = OpenAI(
api_key="sk-teamo-xxxxxx",
base_url="https://api.teamorouter.ai/v1",
)
resp = client.responses.create(
model="gpt-5.6-sol",
input="Analyze this requirement for me",
service_tier="fast",
)
print(resp.output_text)
Пример на JavaScript:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-teamo-xxxxxx",
baseURL: "https://api.teamorouter.ai/v1",
});
const resp = await client.responses.create({
model: "gpt-5.6-sol",
input: "Analyze this requirement for me",
service_tier: "fast",
});
console.log(resp.output_text);
Старое значение по-прежнему работает:
"service_tier": "priority"
fast — актуальное рекомендуемое значение; старое значение priority продолжает работать и ведёт себя так же. Оба применяются ко всем моделям серии GPT с поддержкой Fast Mode. С включённым Fast Mode gpt-5.6-sol работает до 2,5× быстрее стандартного режима. Fast Mode тарифицируется в 2× от стандартной ставки. Для GPT-5.6 и более ранних моделей поле service_tier в объекте ответа может по-прежнему возвращать "priority" — это ожидаемо.
5. Нативный формат Gemini
Эндпоинт: POST /v1beta/models/{model}:generateContent
5.1 Базовый запрос
curl https://api.teamorouter.ai/v1beta/models/gemini-3.5-flash:generateContent \
-H "Authorization: Bearer sk-teamo-xxxxxx" \
-H "content-type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Introduce yourself in one sentence"}]}
]
}'
Пример ответа:
{
"candidates": [
{
"content": {"role": "model", "parts": [{"text": "I am Gemini..."}]},
"finishReason": "STOP"
}
],
"usageMetadata": {"promptTokenCount": 12, "candidatesTokenCount": 22, "totalTokenCount": 34}
}
5.2 Потоковый ответ через SSE
Используйте streamGenerateContent и добавьте alt=sse:
curl "https://api.teamorouter.ai/v1beta/models/gemini-3.5-flash:streamGenerateContent?alt=sse" \
-H "Authorization: Bearer sk-teamo-xxxxxx" \
-H "content-type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Write a short poem"}]}
]
}'
5.3 Переменные окружения
Если ваш инструмент или SDK поддерживает пользовательский Base URL Gemini, настройте так:
export GOOGLE_GEMINI_BASE_URL="https://api.teamorouter.ai"
export GEMINI_API_KEY="sk-teamo-xxxxxx"
export GEMINI_API_KEY_AUTH_MECHANISM="bearer"
Разные SDK Gemini могут называть поле для пользовательского эндпоинта по-разному: base_url, baseURL, apiEndpoint или переменные окружения. Главное правило: направьте Base URL на https://api.teamorouter.ai и используйте API Key TeamoRouter.
6. Генерация изображений (GPT Image 2)
Модель изображений gpt-image-2 использует отдельные эндпоинты /v1/images и аутентификацию Authorization: Bearer.
6.1 Генерация изображений
Эндпоинт: POST /v1/images/generations
curl https://api.teamorouter.ai/v1/images/generations \
-H "Authorization: Bearer sk-teamo-xxxxxx" \
-H "content-type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "An orange cat typing on a keyboard, illustration style"
}'
Пример ответа. data[0].b64_json — изображение в Base64:
{
"created": 1752345600,
"data": [
{"b64_json": "iVBORw0KGgo..."}
]
}
Установите таймаут 300 секунд. Модели генерации изображений отвечают дольше, и с коротким таймаутом запрос может не завершиться.
6.2 Редактирование изображений
Эндпоинт: POST /v1/images/edits
Загрузите исходное изображение как multipart/form-data и передайте инструкцию:
curl https://api.teamorouter.ai/v1/images/edits \
-H "Authorization: Bearer sk-teamo-xxxxxx" \
-F model="gpt-image-2" \
-F image="@photo.png" \
-F prompt="Replace the background with a starry sky"
Эндпоинт совместим с OpenAI Images API.
7. Подключение агентных инструментов
Claude Code использует протокол Anthropic, Codex — протокол OpenAI, Gemini CLI — протокол Gemini.
Достаточно направить переменные окружения Base URL и API Key на TeamoRouter. Сами инструменты менять не нужно.
Claude Code (протокол Anthropic):
export ANTHROPIC_BASE_URL="https://api.teamorouter.ai"
export ANTHROPIC_API_KEY="sk-teamo-xxxxxx"
Инструменты с протоколом OpenAI (Chat Completions / Responses API):
export OPENAI_BASE_URL="https://api.teamorouter.ai/v1"
export OPENAI_API_KEY="sk-teamo-xxxxxx"
Gemini CLI:
export GOOGLE_GEMINI_BASE_URL="https://api.teamorouter.ai"
export GEMINI_API_KEY="sk-teamo-xxxxxx"
export GEMINI_API_KEY_AUTH_MECHANISM="bearer"
8. FAQ
Получаете 401 / ошибку аутентификации?
Сначала проверьте соответствие протокола и заголовка: Anthropic использует x-api-key; OpenAI / Gemini — Authorization: Bearer; нативные эндпоинты Gemini также принимают x-goog-api-key. Затем убедитесь, что ключ полный, начинается с sk-teamo-, без лишних пробелов и не удалён в консоли. Проверьте и формат base_url: SDK OpenAI требуют /v1; SDK Anthropic — нет.
Вызов Claude через формат OpenAI даёт ошибки, стоит дороже или работает хуже?
Для моделей Claude по возможности используйте нативный протокол Anthropic (/v1/messages). Claude Code и другие агентные инструменты нужно настраивать на протокол Anthropic. Вызов Claude через OpenAI-совместимый формат может терять кэш промптов, режим рассуждений и другие возможности, что повышает стоимость и снижает качество. Он подходит только для простых чат-сценариев. /v1/responses не поддерживает Claude / Gemini и возвращает 400.
У запросов к Claude и чтение, и запись кэша равны 0?
Кэширование Claude нужно включать явно на стороне вызывающего. В нативном протоколе Anthropic (/v1/messages) добавьте "cache_control": {"type": "ephemeral"} в конец контента, который нужно переиспользовать, — обычно в последний блок system, последний инструмент и последнее сообщение. Без этого ничего не кэшируется, и чтение, и запись кэша равны 0. Вызов Claude через OpenAI-совместимый формат не включает кэширование автоматически, а контент короче минимальной длины, которую модель может кэшировать, тоже не кэшируется.
curl https://api.teamorouter.ai/v1/messages \
-H "x-api-key: sk-teamo-xxxxxx" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-fable-5-1",
"max_tokens": 1024,
"system": [
{"type": "text", "text": "Длинный неизменный системный промпт", "cache_control": {"type": "ephemeral"}}
],
"messages": [
{"role": "user", "content": [
{"type": "text", "text": "Представься одним предложением", "cache_control": {"type": "ephemeral"}}
]}
]
}'
После включения в возвращаемом usage поле cache_creation_input_tokens — это запись кэша, а cache_read_input_tokens — чтение кэша. Кэш сопоставляется по префиксу: всё, что стоит до метки cache_control (system, tools, предыдущие сообщения), должно совпадать от запроса к запросу. Любое изменение делает недействительным кэш после него.
Модель недоступна?
Сначала получите актуальный список через GET /v1/models. Проверьте написание ID модели: строчные буквы, не путайте - и .. Убедитесь, что эндпоинт соответствует модели.
Таймаут или медленный первый токен?
Крупные модели вроде Opus / Fable во время рассуждений могут отдавать первый токен через несколько секунд или десятки секунд. Это не значит, что запрос упал. В продакшене включайте "stream": true для лучшей воспринимаемой задержки и увеличивайте таймаут чтения у клиента. Сервер поддерживает ответы длительностью до 600 секунд.
Получаете 402 insufficient_balance?
API возвращает 402, когда баланса не хватает на запрос. Для запросов с длинным контекстом сначала резервируется максимально возможная стоимость, поэтому ошибка бывает и при остатке в несколько долларов. Пополните баланс в консоли любым способом из окна пополнения: в рублях (СБП, SberPay, Т-Банк, ЮMoney) или криптовалютой. Правила списания — в разделе Оплата.
Безопасность ключа:
Храните ключи в переменных окружения или менеджере секретов. Не записывайте ключи прямо в код, не добавляйте их в Git и не встраивайте во фронтенд / публичный клиент. Если подозреваете утечку, немедленно удалите ключ в консоли и создайте новый.