Что такое OpenRouter на уровне протокола

OpenRouter — агрегирующий LLM API gateway. Аутентификация: Authorization: Bearer $OPENROUTER_API_KEY. Точка входа: https://openrouter.ai/api/v1/chat/completions. Формат — OpenAI Chat Completions, так что migration path тривиален: меняете base_url и key, остальной клиентский код часто остаётся нетронутым.

  • Именование моделей: provider/model — например openai/gpt-4o, anthropic/claude-3.5-sonnet, google/gemini-2.5-pro, deepseek/deepseek-chat.
  • Боль без шлюза: разрозненные rate limits, heterogenous error codes, ручной failover, сверка счетов в четырёх консолях — OpenRouter снимает операционный overhead, не меняя качество underlying model.

Ключ к пониманию поведения — два независимых routing layer:

Слой Что решает Параметры
Model routingКакая модель обрабатывает запросmodel или openrouter/auto для auto-pick
Provider routingКакой backend обслуживает ту же model IDОбъект provider; дефолт — price-weighted selection в пользу дешёвых и стабильных нод

Primary provider упёрся в rate limit или вернул 5xx — gateway переключится на следующий backend или следующую модель из массива models. Circuit breaker в application layer не обязателен.

OpenRouter vs прямой API — таблица trade-offs

Шлюз не заменяет vendor SDK — он их унифицирует. Ниже — типичная матрица решений для prototyping и medium-volume prod.

Параметр OpenRouter Прямые API
Keys / accountsОдин OpenRouter key на все моделиОтдельная регистрация у каждого vendor
SDK migrationПоменять base_url + api_keyРазные SDK, иногда разные протоколы
FailoverBuilt-in provider switch + model fallbackСвой retry/failover код
BillingЕдиный dashboardN консолей, manual reconciliation
Token priceList price vendor без token markup (по FAQ)Официальный тариф; enterprise discounts
Overhead5,5 % при покупке credits (min $0.80); crypto +5 %Нет middleware fee
LatencyExtra hop ~10–80 msShortest path
Vendor-specific featuresGeneric chat completionsPrompt Caching, Batch API, Assistants, Vertex toolchain

Пять причин использовать — и когда не надо

1. Один key — весь model zoo: смена модели = одна строка в model, без adapter layer на каждого vendor.

2. Automatic failover: массив models + route: "fallback" — gateway сам перебирает цепочку.

3. Unified observability: cost, TTFT, throughput по всем моделям в одном dashboard.

4. No token markup: по FAQ OpenRouter не накидывает на token; margin сидит в 5,5 % fee при покупке credits (min $0.80).

5. Чёткий sweet spot: rapid prototyping, multi-model A/B, workloads до нескольких тысяч USD/мес, high-availability без dedicated routing team.

Когда bypass OpenRouter: single-vendor на десятки тысяч USD/мес (5,5 % на credits бьёт по экономике), нужны vendor-only фичи (Anthropic Prompt Caching, OpenAI Batch), latency-critical realtime, жёсткие data residency requirements — трафик через US gateway может быть неприемлем. Тогда direct API или BYOK с вашими keys и policy.

Шесть шагов: от регистрации до verified fallback

Рекомендуем чистую macOS-машину — без legacy Python/Node на основном ноуте.

  1. Регистрация: openrouter.ai, GitHub или email.
  2. API key: Dashboard → Keys → положить в OPENROUTER_API_KEY, не коммитить.
  3. Credits (optional): paid models требуют balance; fee 5,5 % при top-up. Без credits доступны 25+ free models с лимитами.
  4. Catalog lookup: GET /api/v1/models — актуальные IDs и pricing.
  5. First request: curl или SDK на /v1/chat/completions.
  6. Verify streaming + fallback: прогнать stream: true и models array до prod deploy.
GET /models
curl https://openrouter.ai/api/v1/models \
  -H "Authorization: Bearer $OPENROUTER_API_KEY"
cURL
curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-3.5-sonnet",
    "messages": [
      { "role": "user", "content": "Объясни квантовые вычисления одним предложением." }
    ]
  }'
Python — requests
import requests
import os

response = requests.post(
    url="https://openrouter.ai/api/v1/chat/completions",
    headers={
        "Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "google/gemini-2.5-pro",
        "messages": [
            {"role": "user", "content": "Напиши quicksort на Python."}
        ],
    },
)
print(response.json()["choices"][0]["message"]["content"])
Python — OpenAI SDK
from openai import OpenAI
import os

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=os.environ["OPENROUTER_API_KEY"],
)

completion = client.chat.completions.create(
    model="openai/gpt-4o",
    messages=[{"role": "user", "content": "Hello!"}],
    extra_headers={
        "HTTP-Referer": "https://your-app-domain.com",
        "X-Title": "My App",
    },
)
print(completion.choices[0].message.content)
Node.js — OpenAI SDK
import OpenAI from "openai";

const openai = new OpenAI({
  baseURL: "https://openrouter.ai/api/v1",
  apiKey: process.env.OPENROUTER_API_KEY,
});

const completion = await openai.chat.completions.create({
  model: "deepseek/deepseek-chat",
  messages: [{ role: "user", content: "Explain OpenRouter in one sentence" }],
});

console.log(completion.choices[0].message.content);
Streaming
const stream = await openai.chat.completions.create({
  model: "anthropic/claude-3.5-sonnet",
  messages: [{ role: "user", content: "Напиши короткое стихотворение об осени." }],
  stream: true,
});

for await (const chunk of stream) {
  const content = chunk.choices[0]?.delta?.content;
  if (content) process.stdout.write(content);
}
Fallback chain
{
  "model": "anthropic/claude-3.5-sonnet",
  "models": [
    "anthropic/claude-3.5-sonnet",
    "openai/gpt-4o",
    "google/gemini-2.5-pro"
  ],
  "route": "fallback",
  "messages": [{ "role": "user", "content": "Hello" }]
}

Free tier, BYOK и pricing — hard numbers

  • Free models: 25+ бесплатных моделей (Llama, Gemma, DeepSeek и др.). Без top-up: ~50 req/day; от $10 credits: ~1000/day, 20/min.
  • BYOK: свои vendor keys в dashboard — первый 1M requests/month без service fee OpenRouter, дальше 5 % на excess.
  • Token billing: vendor list price, no markup по FAQ; credit purchase fee 5,5 % (min $0.80), crypto +5 %.
  • Cost guardrails: dashboard показывает prompt/completion rate и фактический burn per model — must-have при parallel A/B.

Free tier limits, model list и fee schedule меняются — source of truth ниже, не этот пересказ.

OpenRouter — официальная документация

OpenRouter — FAQ по pricing и BYOK

OpenRouter — Provider Routing

FAQ

OpenRouter платный?

25+ free models с rate limits. Paid models — vendor token price; OpenRouter не делает token markup по FAQ, берёт 5,5 % при покупке credits (min $0.80).

Какие модели доступны?

70+ providers, 400+ models: GPT-4o, Claude 3.5 Sonnet, Gemini 2.5 Pro, DeepSeek, Llama, Qwen, Mistral. Live list: GET /api/v1/models.

OpenRouter или Claude direct?

Только Claude, min latency, Prompt Caching — Anthropic direct. Multi-model, unified billing, fallback — OpenRouter.

Безопасны ли данные?

Запрос идёт через US gateway OpenRouter, затем к target provider. Strict compliance или data residency — оцените direct API или BYOK с restricted keys.

Как вызвать из Python?

requests на chat completions endpoint или OpenAI SDK с другим base_url и OpenRouter key.

Зачем BYOK?

Свои enterprise keys: 1M req/month без OpenRouter fee, потом 5 % — имеет смысл при уже существующих vendor contracts и volume.

OpenRouter решает unified API access, но не local dev hygiene: конфликты venv, полуготовые agent frameworks и zombie processes быстро засоряют основную машину. Для multi-model экспериментов, Next.js prototype или long-running agent логичнее выделенный физический Apple Silicon Mac mini — аренда посуточно, reset в любой момент. Тот же подход мы разбирали в гайде по тестированию Kimi K3 и в настройке Xcode CI runner; OpenRouter integration slot'ится в эту же схему disposable hardware.

Multi-model stack на реальном Apple Silicon

Mac mini M4 на сутки, SSH, OpenRouter scripts и agent prototypes — без мусора на prod machine.

Mac Mini M4 · 16GB / 256GB
Сутки$19.3 /сутки
Неделя$52.2 /нед.
Месяц$96.7 /мес.
Квартал$263 /кв.