שנו את ה-base URL שלכם והחליפו למפתח OrcaRouter. המודלים, ה-SDK ושאר הקוד נשארים בדיוק כפי שהם — השינוי היחיד הוא מזהי הנתבים openrouter/.
OrcaRouter מדבר באופן מובנה את ממשקי ה-API של OpenAI, Anthropic ו-Gemini, כך שאתם נשארים עם ה-SDK שכבר בשימוש. בכל קטע קוד, שורות שמתחילות ב-- הן אלה שמוחקים, ושורות שמתחילות ב-+ הן אלה שמוסיפים.
client = OpenAI(
- base_url="https://openrouter.ai/api/v1",
+ base_url="https://api.orcarouter.ai/v1",
api_key=ORCAROUTER_API_KEY,
)זה השינוי היחיד בקוד. בנוסף החליפו למפתח OrcaRouter — שמות הדגמים, ההודעות והסטרימינג נשארים אותו דבר, אלא אם אתם קוראים למזהה נתב openrouter/.
client = Anthropic(
+ base_url="https://api.orcarouter.ai",
api_key=ORCAROUTER_API_KEY,
)אנחנו תומכים ב-API של Anthropic באופן ישיר, מה ש-OpenRouter אינו מציע. אם קראתם ל-Claude דרך ה-SDK של OpenAI כדי להתאים ל-OpenRouter, אפשר להפסיק.
const ai = new GoogleGenAI({
apiKey: ORCAROUTER_API_KEY,
+ httpOptions: { baseUrl: "https://api.orcarouter.ai" },
});גם ב-API של Gemini אנחנו תומכים ישירות, כך שה-SDK של Google עובד ללא שינוי.
כולל ייבוא, יצירת הלקוח וקריאה אמיתית אחת. רץ בדיוק כך, ברגע ש-ORCAROUTER_API_KEY מוגדר בסביבה שלכם.
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"}]}]
}'אנחנו משתמשים באותם שמות בתבנית vendor/model, ולכן anthropic/claude-sonnet-4 עובד כמו שהוא. היוצא מן הכלל הוא מזהי הנתבים openrouter/ של OpenRouter עצמה: אותם משנים.
| ב-OpenRouter | ב-OrcaRouter |
|---|---|
openrouter/auto | orcarouter/auto |
openrouter/free | orcarouter/free |
| כל נתב openrouter/ אחר | אין מקבילה — ציינו מודל במקום זאת |
| כל מזהה בצורת vendor/model, למשל anthropic/claude-sonnet-4 | אותו מזהה, ללא שינוי |
עדיף לדעת עכשיו מאשר לגלות בסביבת הייצור.
ברוב האינטגרציות, כן. שנו את ה-base URL והחליפו למפתח OrcaRouter; ה-SDK, שמות המודלים, ההודעות וה-streaming נשארים כפי שהם. היוצאים מן הכלל הם מזהי הנתבים openrouter/ של OpenRouter עצמה, שמקבלים שם חדש, וארבעת הדברים ש-OrcaRouter במכוון לא עושה, המפורטים למעלה.
ה-SDK של OpenAI מצפה ל-https://api.orcarouter.ai/v1. השניים האחרים מצפים ל-https://api.orcarouter.ai — כל אחד מוסיף את הנתיב שלו בעצמו.
הערך משתנה — מפתח OpenRouter לא יאומת כאן — אבל המקום לא: אנחנו קוראים את אותה כותרת שה-SDK שלכם כבר שולח.
הנתבים של OrcaRouter הם אלה שמתחילים ב-orcarouter/. שניים מהם מקבילים ישירות לשלהם: השתמשו ב-orcarouter/auto במקום openrouter/auto, וב-orcarouter/free במקום openrouter/free — אותו רעיון בשני המקרים, אנחנו בוחרים עבורכם מודל ברגע הבקשה, והשני משאיר אתכם בשכבה ללא עלות. לשאר הנתבים שלהם אין מקבילה כאן, אז ציינו מודל מפורש.
העבירו את models ואת route אל תוך extra_body. כל השאר נשאר זהה: רשמו את המודלים לפי סדר העדפה ואנחנו ננסה אותם בזה אחר זה. לפחות 2 מודלים, לכל היותר 5. כדאי לעשות זאת כראוי. ברמה העליונה איננו קוראים אותם, ולכן הגיבויים שלכם מפסיקים לעבוד בשקט; ובהתקנות שמעבירות את גוף הבקשה כמות שהוא, המודל מקבל את השדות המיותרים ועלול לדחות את הקריאה כולה.
קראו את X-Orca-Request-Id מהתגובה, ואז קראו ל-/v1/generation. קוד 501 מעיד שבהתקנה הזו בירור עלויות מכובה.
שלחו X-Title והאפליקציה שלכם תשמור על שמה בנתונים האנליטיים ללא כל שינוי; אנחנו קוראים גם את שמות הכותרות של OpenRouter עצמו. HTTP-Referer לבדה תזהה את האפליקציה שלכם רק אם הדומיין שלה נמצא בין אלה שאנחנו כבר מזהים, ולכן שלחו כותרת כותרת אם ברצונכם לוודא. השורה הזו כאן כדי שלא תסירו אותן בטעות.
אנחנו לא משתמשים באף אחד מהם. בערוץ רגיל הם מושמטים לפני שהבקשה מגיעה למודל; בערוץ שמוגדר להעביר את גוף הבקשה כמות שהוא הם נשלחים הלאה, וספק קפדני עלול לדחות את הבקשה. להסיר אותם זה הצעד הבטוח בשני המקרים.
כל מה שאתם מצפים לו, ועוד כמה ש-OpenRouter אינו מציע. זמינות כאן ולא ב-OpenRouter: /v1/messages, /v1beta/models … generateContent, /v1/rerank ו-/v1/realtime. לא זמינות: /v1/fine-tunes, GET /v1/files ו-/v1/images/variations.
השגיאות חוזרות באותו מבנה שאתם כבר מטפלים בו. פעלו לפי סטטוס ה-HTTP: נסו שוב 429 כשאנחנו שולחים Retry-After, המתינו ונסו שוב 5xx למעט 501 — שמשמעו שאנחנו לא משרתים את הקריאה הזאת כלל — והתייחסו ל-4xx בקריאת ריליי כאל משהו לתקן בבקשה שלכם. היוצא מן הכלל הוא 404 מ-/v1/generation: ייתכן שפשוט טרם הסתיימה ההתחשבנות על הבקשה, אז נסו אותו שוב לזמן קצר. אל תקראו את error.type כמקור: orcarouter_api_error הוא תמיד שלנו, אך לחלק מהתקלות שלנו אנחנו שולחים בכוונה את אוצר המילים של הספק כדי שה-SDK שלכם ילך במסלול הרגיל שלו — הגבלת קצב שאנחנו הטלנו ואחת שהמודל הטיל נקראות שתיהן rate_limit_error. ציינו X-Orca-Request-Id כשצריך שנאתר קריאה מסוימת.