Ubah base URL Anda dan pasang kunci OrcaRouter. Model, SDK, dan sisa kode Anda tetap persis seperti sekarang — yang perlu diganti nama hanyalah id router openrouter/.
OrcaRouter mendukung API OpenAI, Anthropic, dan Gemini secara native, jadi Anda tetap memakai SDK yang sudah Anda gunakan. Di setiap cuplikan, baris yang diawali - adalah yang dihapus dan baris yang diawali + adalah yang ditambahkan.
client = OpenAI(
- base_url="https://openrouter.ai/api/v1",
+ base_url="https://api.orcarouter.ai/v1",
api_key=ORCAROUTER_API_KEY,
)Itu satu-satunya perubahan kode. Pasang juga kunci OrcaRouter — nama model, pesan, dan streaming Anda tetap sama, kecuali Anda memanggil id router openrouter/.
client = Anthropic(
+ base_url="https://api.orcarouter.ai",
api_key=ORCAROUTER_API_KEY,
)Kami mendukung API Anthropic secara langsung, sementara OpenRouter tidak. Jika selama ini Anda memanggil Claude lewat SDK OpenAI agar cocok dengan OpenRouter, sekarang tidak perlu lagi.
const ai = new GoogleGenAI({
apiKey: ORCAROUTER_API_KEY,
+ httpOptions: { baseUrl: "https://api.orcarouter.ai" },
});Kami juga mendukung API Gemini secara langsung, jadi SDK Google berjalan tanpa perubahan.
Impor, klien, dan satu panggilan sungguhan. Bisa dijalankan apa adanya, begitu ORCAROUTER_API_KEY sudah diatur di lingkungan Anda.
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"}]}]
}'Kami memakai penamaan vendor/model yang sama, jadi anthropic/claude-sonnet-4 langsung bisa dipakai. Pengecualiannya adalah id router openrouter/ milik OpenRouter sendiri: yang itu diganti nama.
| Di OpenRouter | Di OrcaRouter |
|---|---|
openrouter/auto | orcarouter/auto |
openrouter/free | orcarouter/free |
| Router openrouter/ lainnya | Tidak ada padanannya — sebutkan modelnya langsung |
| Semua ID vendor/model, misalnya anthropic/claude-sonnet-4 | ID yang sama, tanpa perubahan |
Lebih baik tahu sekarang daripada menemukannya saat sudah berjalan di produksi.
Untuk sebagian besar integrasi, bisa. Ubah base URL dan ganti dengan kunci OrcaRouter; SDK, nama model, pesan, dan streaming Anda tetap sama. Pengecualiannya adalah ID router openrouter/ milik OpenRouter sendiri, yang harus diganti namanya, dan empat hal yang sengaja tidak dilakukan OrcaRouter, seperti tercantum di atas.
SDK OpenAI meminta https://api.orcarouter.ai/v1. Dua lainnya meminta https://api.orcarouter.ai — masing-masing menambahkan jalurnya sendiri.
Nilainya berubah — kunci OpenRouter tidak bisa diautentikasi di sini — tetapi tempatnya tidak: kami membaca header yang sama yang sudah dikirim SDK Anda.
Router OrcaRouter adalah yang orcarouter/. Dua di antaranya berpadanan langsung dengan milik mereka: pakai orcarouter/auto sebagai ganti openrouter/auto, dan orcarouter/free sebagai ganti openrouter/free — idenya sama di kedua kasus, kami memilihkan model untuk Anda pada saat permintaan dikirim, dan yang kedua menjaga Anda tetap di tingkat tanpa biaya. Router mereka yang lain tidak ada padanannya di sini, jadi sebutkan saja sebuah model.
Pindahkan models dan route ke dalam extra_body. Selebihnya sama saja: daftarkan model sesuai urutan preferensi dan kami mencobanya satu per satu. Minimal 2 model, maksimal 5. Layak dikerjakan dengan benar. Di tingkat teratas kami tidak membacanya, sehingga cadangan Anda diam-diam berhenti bekerja; dan pada penerapan yang meneruskan badan permintaan apa adanya, model menerima kolom tambahan itu dan bisa menolak panggilannya sama sekali.
Baca X-Orca-Request-Id dari respons, lalu panggil /v1/generation. Kode 501 berarti pencarian biaya dimatikan pada penerapan ini.
Kirim X-Title dan aplikasi Anda tetap memakai namanya di analitik tanpa perubahan apa pun; kami juga membaca nama header milik OpenRouter sendiri. HTTP-Referer saja hanya menyebut nama aplikasi Anda bila domainnya termasuk yang sudah kami kenali, jadi kirimkan header judul bila ingin pasti. Baris ini ada agar Anda tidak menghapusnya tanpa sengaja.
Kami tidak memakai keduanya. Pada kanal biasa, keduanya dibuang sebelum permintaan sampai ke model; pada kanal yang disetel meneruskan bodi mentah, keduanya diteruskan dan penyedia yang ketat bisa menolak permintaan. Menghapusnya aman dalam kedua kasus.
Semua yang Anda harapkan, ditambah beberapa yang tidak dimiliki OpenRouter. Tersedia di sini tetapi tidak di OpenRouter: /v1/messages, /v1beta/models … generateContent, /v1/rerank, dan /v1/realtime. Tidak tersedia: /v1/fine-tunes, GET /v1/files, dan /v1/images/variations.
Galat kembali dalam bentuk yang sudah Anda tangani. Bertindaklah berdasarkan status HTTP: ulangi 429 bila kami mengirim Retry-After, mundur lalu ulangi 5xx kecuali 501 — yang berarti panggilan itu memang tidak kami layani — dan perlakukan 4xx pada panggilan relay sebagai sesuatu yang harus diperbaiki di permintaan Anda. Pengecualiannya adalah 404 dari /v1/generation: itu bisa berarti permintaan belum selesai dihitung, jadi ulangi sebentar. Jangan membaca error.type sebagai asal: orcarouter_api_error selalu milik kami, tetapi untuk sebagian kegagalan kami sendiri kami sengaja mengirim kosakata penyedia agar SDK Anda mengambil cabang biasanya — batas laju yang kami terapkan dan yang diterapkan model sama-sama berbunyi rate_limit_error. Sebutkan X-Orca-Request-Id bila Anda perlu kami menelusuri satu panggilan.