Что такое 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, иногда разные протоколы |
| Failover | Built-in provider switch + model fallback | Свой retry/failover код |
| Billing | Единый dashboard | N консолей, manual reconciliation |
| Token price | List price vendor без token markup (по FAQ) | Официальный тариф; enterprise discounts |
| Overhead | 5,5 % при покупке credits (min $0.80); crypto +5 % | Нет middleware fee |
| Latency | Extra hop ~10–80 ms | Shortest path |
| Vendor-specific features | Generic chat completions | Prompt 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 на основном ноуте.
- Регистрация: openrouter.ai, GitHub или email.
- API key: Dashboard → Keys → положить в
OPENROUTER_API_KEY, не коммитить. - Credits (optional): paid models требуют balance; fee 5,5 % при top-up. Без credits доступны 25+ free models с лимитами.
- Catalog lookup:
GET /api/v1/models— актуальные IDs и pricing. - First request: curl или SDK на
/v1/chat/completions. - Verify streaming + fallback: прогнать
stream: trueиmodelsarray до prod deploy.
curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $OPENROUTER_API_KEY"
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": "Объясни квантовые вычисления одним предложением." }
]
}'
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"])
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)
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);
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);
}
{
"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
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.