Pas uw base URL aan en zet er een OrcaRouter-sleutel in. Uw modellen, uw SDK en de rest van uw code blijven precies zoals ze zijn — alleen de openrouter/-router-ids worden hernoemd.
OrcaRouter spreekt de API's van OpenAI, Anthropic en Gemini rechtstreeks, dus u houdt de SDK die u al gebruikt. In elk fragment zijn regels die met - beginnen te verwijderen en regels die met + beginnen toe te voegen.
client = OpenAI(
- base_url="https://openrouter.ai/api/v1",
+ base_url="https://api.orcarouter.ai/v1",
api_key=ORCAROUTER_API_KEY,
)Dat is de enige codewijziging. Zet er ook een OrcaRouter-sleutel in — uw modelnamen, berichten en streaming blijven hetzelfde, tenzij u een openrouter/-router-id aanroept.
client = Anthropic(
+ base_url="https://api.orcarouter.ai",
api_key=ORCAROUTER_API_KEY,
)Wij spreken de API van Anthropic rechtstreeks, OpenRouter niet. Riep u Claude tot nu toe aan via de OpenAI-SDK om bij OpenRouter te passen, dan hoeft dat niet meer.
const ai = new GoogleGenAI({
apiKey: ORCAROUTER_API_KEY,
+ httpOptions: { baseUrl: "https://api.orcarouter.ai" },
});Wij spreken ook de Gemini-API rechtstreeks, dus de Google-SDK werkt ongewijzigd.
Imports, client en één echte aanroep. Draait zoals het hier staat, zodra ORCAROUTER_API_KEY in uw omgeving is ingesteld.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.orcarouter.ai/v1",
api_key=os.environ["ORCAROUTER_API_KEY"],
)
response = client.chat.completions.create(
model="anthropic/claude-sonnet-4",
messages=[{"role": "user", "content": "Hello"}],
)
print(response.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.orcarouter.ai/v1",
apiKey: process.env.ORCAROUTER_API_KEY,
});
const response = await client.chat.completions.create({
model: "anthropic/claude-sonnet-4",
messages: [{ role: "user", content: "Hello" }],
});
console.log(response.choices[0].message.content);curl https://api.orcarouter.ai/v1/chat/completions \
-H "Authorization: Bearer $ORCAROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-4",
"messages": [{"role": "user", "content": "Hello"}]
}'import os
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.orcarouter.ai",
api_key=os.environ["ORCAROUTER_API_KEY"],
)
message = client.messages.create(
model="anthropic/claude-sonnet-4",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
)
print(message.content[0].text)import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://api.orcarouter.ai",
apiKey: process.env.ORCAROUTER_API_KEY,
});
const message = await client.messages.create({
model: "anthropic/claude-sonnet-4",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});
console.log(message.content[0].text);curl https://api.orcarouter.ai/v1/messages \
-H "x-api-key: $ORCAROUTER_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-4",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'import os
from google import genai
client = genai.Client(
api_key=os.environ["ORCAROUTER_API_KEY"],
http_options={"base_url": "https://api.orcarouter.ai"},
)
response = client.models.generate_content(
model="google/gemini-2.5-pro",
contents="Hello",
)
print(response.text)import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({
apiKey: process.env.ORCAROUTER_API_KEY,
httpOptions: { baseUrl: "https://api.orcarouter.ai" },
});
const response = await ai.models.generateContent({
model: "google/gemini-2.5-pro",
contents: "Hello",
});
console.log(response.text);curl "https://api.orcarouter.ai/v1beta/models/google/gemini-2.5-pro:generateContent" \
-H "x-goog-api-key: $ORCAROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "Hello"}]}]
}'Wij gebruiken dezelfde vendor/model-namen, dus anthropic/claude-sonnet-4 werkt zoals het is. De uitzondering zijn OpenRouters eigen openrouter/-router-ids: die worden hernoemd.
| Bij OpenRouter | Bij OrcaRouter |
|---|---|
openrouter/auto | orcarouter/auto |
openrouter/free | orcarouter/free |
| Elke andere openrouter/-router | Geen tegenhanger — noem in plaats daarvan een model |
| Elke vendor/model-ID, zoals anthropic/claude-sonnet-4 | Dezelfde ID, ongewijzigd |
Beter nu weten dan er in productie achter komen.
Voor de meeste integraties wel. Wijzig de base URL en zet een OrcaRouter-sleutel in; uw SDK, modelnamen, berichten en streaming blijven gelijk. De uitzonderingen zijn de eigen openrouter/-router-ID's van OpenRouter, die worden hernoemd, en de vier dingen die OrcaRouter bewust niet doet, hierboven opgesomd.
De OpenAI-SDK wil https://api.orcarouter.ai/v1. De andere twee willen https://api.orcarouter.ai — het pad zetten ze er zelf achter.
De waarde verandert — een OpenRouter-sleutel authenticeert hier niet — maar de plaats niet: we lezen dezelfde header die uw SDK al stuurt.
De routers van OrcaRouter zijn die met orcarouter/. Twee komen direct overeen met de hunne: gebruik orcarouter/auto in plaats van openrouter/auto, en orcarouter/free in plaats van openrouter/free — in beide gevallen dezelfde gedachte, wij kiezen op het moment van het verzoek een model voor u, en de tweede houdt u op het kosteloze niveau. Hun overige routers hebben hier geen tegenhanger, noem dus zelf een model.
Verplaats models en route naar binnen in extra_body. Verder is alles gelijk: zet uw modellen op volgorde van voorkeur en wij proberen ze één voor één. Minimaal 2 modellen, maximaal 5. Het loont om dit netjes te doen. Op het hoogste niveau lezen wij ze niet, dus uw fallbacks stoppen stilletjes met werken — en bij installaties die de body van het verzoek ongewijzigd doorsturen, ontvangt het model die extra velden en kan het de aanroep helemaal weigeren.
Lees X-Orca-Request-Id uit het antwoord en roep daarna /v1/generation aan. Een 501 betekent dat kostenopvragingen op deze deployment uit staan.
Stuur X-Title mee en uw toepassing houdt haar naam in uw statistieken, zonder enige wijziging; wij lezen ook de headernamen van OpenRouter zelf. HTTP-Referer alleen benoemt uw toepassing alleen als het domein er een is dat wij al herkennen, dus stuur een titelheader mee als u zeker wilt zijn. Deze regel staat er zodat u ze niet per ongeluk weghaalt.
We gebruiken geen van beide. Op een normaal kanaal worden ze verwijderd voordat het verzoek het model bereikt; op een kanaal dat de ruwe body doorstuurt gaan ze mee, en een strikte aanbieder kan het verzoek weigeren. Ze weghalen is in beide gevallen veilig.
Alles wat u verwacht, plus een paar die OpenRouter niet heeft. Hier beschikbaar en niet bij OpenRouter: /v1/messages, /v1beta/models … generateContent, /v1/rerank en /v1/realtime. Niet beschikbaar: /v1/fine-tunes, GET /v1/files en /v1/images/variations.
Fouten komen terug in dezelfde vorm die u al afhandelt. Handel op de HTTP-status: probeer een 429 opnieuw wanneer wij een Retry-After sturen, wacht af en probeer een 5xx opnieuw behalve 501 — dat betekent dat wij die aanroep helemaal niet bedienen — en behandel een 4xx op een relay-aanroep als iets dat u in uw verzoek moet verhelpen. De uitzondering is een 404 van /v1/generation: die kan simpelweg betekenen dat het verzoek nog niet is afgerekend, dus probeer die kort opnieuw. Lees error.type niet als de herkomst: orcarouter_api_error is altijd de onze, maar voor sommige van onze eigen storingen sturen wij bewust het vocabulaire van de aanbieder zodat uw SDK zijn gebruikelijke tak neemt — een snelheidslimiet die wij opleggen en een die het model oplegt zeggen allebei rate_limit_error. Noem X-Orca-Request-Id wanneer wij één aanroep moeten opzoeken.