Подключение к 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:

bash
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
Google 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 Базовый запрос

bash
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"}
    ]
  }'

Пример ответа:

json
{
  "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:

bash
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

python
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

bash
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:

json
{
  "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

python
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:

bash
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

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="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:

json
"service_tier": "fast"

Пример на Python:

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:

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);

Старое значение по-прежнему работает:

json
"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 Базовый запрос

bash
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"}]}
    ]
  }'

Пример ответа:

json
{
  "candidates": [
    {
      "content": {"role": "model", "parts": [{"text": "I am Gemini..."}]},
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {"promptTokenCount": 12, "candidatesTokenCount": 22, "totalTokenCount": 34}
}

5.2 Потоковый ответ через SSE

Используйте streamGenerateContent и добавьте alt=sse:

bash
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, настройте так:

bash
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

bash
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:

json
{
  "created": 1752345600,
  "data": [
    {"b64_json": "iVBORw0KGgo..."}
  ]
}

Установите таймаут 300 секунд. Модели генерации изображений отвечают дольше, и с коротким таймаутом запрос может не завершиться.

6.2 Редактирование изображений

Эндпоинт: POST /v1/images/edits

Загрузите исходное изображение как multipart/form-data и передайте инструкцию:

bash
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):

bash
export ANTHROPIC_BASE_URL="https://api.teamorouter.ai"
export ANTHROPIC_API_KEY="sk-teamo-xxxxxx"

Инструменты с протоколом OpenAI (Chat Completions / Responses API):

bash
export OPENAI_BASE_URL="https://api.teamorouter.ai/v1"
export OPENAI_API_KEY="sk-teamo-xxxxxx"

Gemini CLI:

bash
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-совместимый формат не включает кэширование автоматически, а контент короче минимальной длины, которую модель может кэшировать, тоже не кэшируется.

bash
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 и не встраивайте во фронтенд / публичный клиент. Если подозреваете утечку, немедленно удалите ключ в консоли и создайте новый.

Готовы? Три шага, чтобы начатьВойдите в консоль · пополните баланс · создайте API Key
TelegramВопросы по подключению, оплате или маршрутизации? Мы в Telegram.