Overstappen van OpenRouter kost één regel

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.

Drie dingen om te controleren

  1. Gebruik de juiste base URL voor uw SDK — De OpenAI-SDK wil https://api.orcarouter.ai/v1. De andere twee willen https://api.orcarouter.ai — het pad zetten ze er zelf achter.
  2. Vervang uw API-sleutel door uw OrcaRouter-sleutel — De waarde verandert — een OpenRouter-sleutel authenticeert hier niet — maar de plaats niet: we lezen dezelfde header die uw SDK al stuurt.
  3. Houd uw modelnamen aan — 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.

Voor en na: de regel die verandert

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.

OpenAI — Python

  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.

Anthropic — Python

  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.

Gemini — TypeScript

  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.

Volledige voorbeelden voor elke SDK

Imports, client en één echte aanroep. Draait zoals het hier staat, zodra ORCAROUTER_API_KEY in uw omgeving is ingesteld.

OpenAI — Python

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)

OpenAI — TypeScript

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

OpenAI — cURL

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

Anthropic — Python

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)

Anthropic — TypeScript

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

Anthropic — cURL

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

Gemini — Python

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)

Gemini — TypeScript

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

Gemini — cURL

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

Model-ID's: wat u hernoemt

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 OpenRouterBij OrcaRouter
openrouter/autoorcarouter/auto
openrouter/freeorcarouter/free
Elke andere openrouter/-routerGeen tegenhanger — noem in plaats daarvan een model
Elke vendor/model-ID, zoals anthropic/claude-sonnet-4Dezelfde ID, ongewijzigd

Verschillen in facturering

Vier dingen die wij niet doen

Beter nu weten dan er in productie achter komen.

Veelgestelde vragen

Kan OrcaRouter OpenRouter één op één vervangen?

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.

Welke base URL heeft elke SDK nodig?

De OpenAI-SDK wil https://api.orcarouter.ai/v1. De andere twee willen https://api.orcarouter.ai — het pad zetten ze er zelf achter.

Kan ik mijn OpenRouter-API-sleutel blijven gebruiken?

De waarde verandert — een OpenRouter-sleutel authenticeert hier niet — maar de plaats niet: we lezen dezelfde header die uw SDK al stuurt.

Wat vervangt openrouter/auto en openrouter/free?

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.

Werkt fallback-routering op dezelfde manier?

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.

Hoe zie ik wat een verzoek heeft gekost?

Lees X-Orca-Request-Id uit het antwoord en roep daarna /v1/generation aan. Een 501 betekent dat kostenopvragingen op deze deployment uit staan.

Identificeren X-Title en HTTP-Referer mijn app nog steeds?

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.

Wat gebeurt er met provider en transforms in mijn verzoeken?

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.

Welke endpoints biedt OrcaRouter?

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.

Komen fouten in dezelfde vorm terug?

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.