OpenRouter API: полное руководство по GPT, Claude и Gemini (2026)

Один sk-or-..., endpoint /api/v1/chat/completions, формат vendor/model — разбор routing layer, fallback chains, BYOK economics и деплоя agent gateway на выделенном Apple Silicon узле NUKCLOUD.

Три API key ring buffer'а (OpenAI, Anthropic, Google), три billing dashboard'а, три rate-limit policy — и agent падает на 429, потому что fallback написан на коленке в bash. OpenRouter — unified LLM gateway: https://openrouter.ai/api/v1/chat/completions, OpenAI-compatible wire format, naming openai/gpt-5.6-sol, anthropic/claude-sonnet-5, google/gemini-2.5-pro. Статья для инженеров, которые хотят (1) понять model vs provider routing, (2) скопировать working curl/Python/Node, (3) поднять persistent gateway на bare-metal Mac NUKCLOUD. Cross-read: CLI ranking, weekly token share, LLM trends июнь 2026.

00Архитектура OpenRouter

OpenRouter — aggregation proxy между вашим HTTP client и inference backends. Один account → one API key → 70+ providers, 400+ models, ~100T tokens/month platform throughput (июнь 2026). Wire protocol = OpenAI Chat Completions: messages[], optional stream: true (SSE), max_tokens, tool calls где backend поддерживает.

Model ID всегда vendor/model-slug. Discovery: GET /api/v1/models → JSON array с pricing per 1M tokens. Рекомендуемые headers: Authorization: Bearer sk-or-..., HTTP-Referer, X-Title (для app leaderboard attribution).

PainFailure modes multi-vendor setup

  • Key sprawl: rotation, quota, alert fatigue × N vendors; zombie cron job съедает Anthropic credits пока OpenAI key протухает.
  • Hand-rolled fallback: try/catch вокруг трёх SDK — нет unified 429/503 telemetry, нет cost attribution per route.
  • Proxy latency tax: extra hop добавляет типично 10–80 ms TTFT; для voice/realtime chat — dealbreaker; для batch agent — OK.
  • Compliance gap: данные через US aggregator при DPA только с одним vendor.
  • Host layer: Hermes gateway / Claude Code на shared macOS VPS — CPU steal, bandwidth jitter, SSE long-poll disconnect на multi-hour tool loops. Routing layer healthy, transport layer dead.

01Model Routing vs Provider Routing

ПараметрModel RoutingProvider Routing
Selection logicFixed model; OR picks cheapest/fastest backend for that slugFixed provider namespace; fallback within same vendor catalog
Typical useclaude-sonnet-5 with auto backend failover«All traffic via Anthropic contract» compliance
Fallback APImodels: ["a","b","c"] ordered listVendor-internal model chain on 429
Latency overhead+10–50 ms vs direct API+15–80 ms (region-dependent)
Token pricingListed price = provider rate, zero token markupSame; prepaid credits + 5.5% top-up fee

Free tier: 25+ models, 50 req/day без balance, 1000 req/day после $10 top-up. POC only — не для 7×24 agent fleet.

025 advantages + anti-patterns

  • Single SDK surface: swap base_url + model — zero client fork.
  • Native fallback chains: declarative multi-model без custom orchestrator.
  • BYOK economics: your direct keys, no token markup, 1M req/month platform quota free.
  • Market telemetry: apps board + model rankings — см. июнь 2026 model share.
  • Fast model A/B: Kimi K3, DeepSeek V4, Grok 4.5 — one-line switch без нового vendor account.
Не используйте OpenRouter если: sub-50ms p99 без proxy hop, enterprise volume tier pricing только direct, single-vendor DPA mandatory, нужны proprietary APIs (OpenAI Assistants v2, Vertex Grounding, Anthropic Citations). Direct API + dedicated host — correct stack.

03Quick start (3 steps)

  1. A
    Register на openrouter.ai, generate sk-or-..., optional BYOK для existing vendor keys.
  2. B
    Export OPENROUTER_API_KEY в shell profile на dev machine или cloud node.
  3. C
    Smoke test curl ниже → migrate SDK на https://openrouter.ai/api/v1.

04Code samples

curl — non-streaming completion:

bash
curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -H "HTTP-Referer: https://yourdomain.com" \
  -H "X-Title: Agent Gateway" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "messages": [{"role": "user", "content": "Explain OpenRouter routing in 3 sentences."}]
  }'

Python requests (minimal deps):

python
import os, requests
resp = requests.post(
    "https://openrouter.ai/api/v1/chat/completions",
    headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
    json={
        "model": "openai/gpt-5.6-sol",
        "messages": [{"role": "user", "content": "ping"}],
    },
    timeout=120,
)
print(resp.json()["choices"][0]["message"]["content"])

Python OpenAI SDK:

python
from openai import OpenAI
client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=os.environ["OPENROUTER_API_KEY"],
)
out = client.chat.completions.create(
    model="google/gemini-2.5-pro",
    messages=[{"role": "user", "content": "Summarize in Russian."}],
)
print(out.choices[0].message.content)

Node OpenAI SDK:

javascript
import OpenAI from "openai";
const or = new OpenAI({
  baseURL: "https://openrouter.ai/api/v1",
  apiKey: process.env.OPENROUTER_API_KEY,
});
const res = await or.chat.completions.create({
  model: "anthropic/claude-sonnet-5",
  messages: [{ role: "user", content: "test" }],
});
console.log(res.choices[0].message.content);

SSE streaming (Node):

javascript
const stream = await or.chat.completions.create({
  model: "openai/gpt-5.6-sol",
  messages: [{ role: "user", content: "stream me" }],
  stream: true,
});
for await (const ev of stream) {
  process.stdout.write(ev.choices[0]?.delta?.content ?? "");
}

Fallback payload:

json
{
  "models": [
    "anthropic/claude-sonnet-5",
    "openai/gpt-5.6-sol",
    "google/gemini-2.5-pro"
  ],
  "messages": [{"role": "user", "content": "critical path"}],
  "route": "fallback"
}

Model catalog introspection:

bash
curl -s https://openrouter.ai/api/v1/models \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  | jq '.data[] | {id, pricing}' | head -20

05BYOK, billing, observability

BYOK mode: platform relays your OpenAI/Anthropic/Google keys — zero token markup, 1M requests/month free on OpenRouter side. Prepaid credits: displayed token price = provider rate; 5.5% fee только при purchase credits, не per-token.

  • Metric 1: log model, provider, input/output tokens, wall time per request — correlate с generation ID из response headers.
  • Metric 2: budget alert at 80% threshold до запуска Hermes 7×24 loop.
  • Metric 3: IDE integration: OPENROUTER_API_KEY + base URL в Cursor/Claude Code — см. Agent Skills runbook.

06Low EN/RU traffic diagnostic

  • GSC: indexed pages per locale, query/impression mismatch, crawl errors on /ru/blog/.
  • CDN/WAF: geo block или aggressive bot filter режет crawler из EU/US.
  • hreflang: matrix только на blog index, не на detail pages (NUKCLOUD convention).
  • Machine translation: thin/duplicate content penalty — rewrite per locale, не Google Translate pipeline.
  • Backlinks: RU anchors с Habr, EN с Dev.to/HN — не zh-only link graph.

07SEO keyword matrix (zh vs EN/RU)

Signalzh marketEN / RU market
KeywordsOpenRouter 教程, 大模型 APIOpenRouter API guide, GPT Claude Gemini one key
Title pattern年份 + 保姆级 + model listHow to + models + (2026 Guide)
Meta length70–80 CJK chars120–160 Latin chars, runbook hook
Body density对比表 + 价格Short paragraphs, spec-first (RU), logic-first (EN)
LocalizationWeChat/docs CN contextGDPR, openrouter.ai/apps citations

Правило: localize search intent, не transliterate zh skeleton. Один slug, восемь независимых тел в blog-data.js.

08hreflang, canonical, schema

  • URL pattern: https://nukcloud.com/{lang}/blog/2026-openrouter-api-guide-gpt-claude-gemini-20260724.html
  • Canonical: self-referencing per detail page; no hreflang on articles.
  • Sitemap: regenerate project script post-publish; GSC per property.
  • Schema: BlogPosting + nested FAQPage в mainEntity.
  • IndexNow: push new slug для Bing/Yandex indexers.

09Distribution + metrics

ChannelPriorityAction
GitHub READMEP0curl snippet + canonical link
Habr / Dev.toP0RU/EN excerpt, link back
Product newsletterP1Dev vs procurement segments
Discord OpenRouter, r/LocalLLaMAP1Answer threads, no spam
Telegram dev channelsP2Routing diagram + pricing table
YouTube screencastP26 min: key → curl → SDK → Mac node

30-day KPIs: GSC impressions/CTR per locale, avg time on page > 4 min, clicks tseny / zakaz, console signups UTM ?utm_source=blog&utm_campaign=openrouter-api.

106-step production runbook

  1. 01
    Account + keys: OpenRouter signup, sk-or-..., BYOK if existing vendor credits, budget cap at 80% alert threshold.
  2. 02
    Local smoke: curl + OpenAI SDK; validate streaming SSE + 3-model fallback JSON.
  3. 03
    Provision node: NUKCLOUD console — Mac mini M4 32GB+ для parallel sub-agents; region co-located с Git/registry.
  4. 04
    SSH baseline: brew install node python@3.12, secrets in ~/.zshrc, RTT to openrouter.ai < 100ms from node.
  5. 05
    Agent gateway: launchd plist для Hermes/Claude Code/custom service; SKILL.md для recurring prompts — Hermes install.
  6. 06
    Bi-weekly review: OpenRouter $ vs node $, p95 latency, apps board; tune fallback chain + RAM tier на tseny.

Shared macOS VPS trade fast spin-up за bandwidth jitter, CPU oversubscription, SSE disconnect на thousand-tool-call sessions. Для OpenRouter-powered agent gateway 7×24 с auditable tenant boundary — multi-region bare-metal Mac cloud NUKCLOUD: unified memory, Seatbelt, launchd persistence. Hourly trial на zakaz, monthly commit после acceptance.

11FAQ

OpenRouter совместим с OpenAI SDK?
Да. base_url=https://openrouter.ai/api/v1, api_key=sk-or-.... Chat, streaming, /models — без rewrite client.
Markup на tokens?
Нет на displayed rate. Prepaid: ~5.5% при top-up. BYOK: до 1M req/month free platform-side.
Free models для POC?
25+ models, 50 req/day zero balance, 1000/day после $10 deposit. Production agent → credits или BYOK.
Когда не OpenRouter?
Sub-50ms SLA, enterprise direct discount, single-vendor DPA, proprietary vendor APIs.
Где host production gateway?
Выделенный Mac cloud NUKCLOUD — launchd, Seatbelt, no SSE drops. zakaz, specs: tseny.