Pindah dari OpenRouter cukup satu baris

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/.

Tiga hal yang perlu diperiksa

  1. Gunakan base URL yang tepat untuk SDK Anda — SDK OpenAI meminta https://api.orcarouter.ai/v1. Dua lainnya meminta https://api.orcarouter.ai — masing-masing menambahkan jalurnya sendiri.
  2. Ganti dengan kunci OrcaRouter Anda — Nilainya berubah — kunci OpenRouter tidak bisa diautentikasi di sini — tetapi tempatnya tidak: kami membaca header yang sama yang sudah dikirim SDK Anda.
  3. Pertahankan nama model Anda — 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.

Sebelum dan sesudah: baris yang berubah

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.

OpenAI — Python

  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/.

Anthropic — Python

  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.

Gemini — TypeScript

  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.

Contoh lengkap untuk setiap SDK

Impor, klien, dan satu panggilan sungguhan. Bisa dijalankan apa adanya, begitu ORCAROUTER_API_KEY sudah diatur di lingkungan Anda.

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

ID model: apa yang perlu diganti namanya

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 OpenRouterDi OrcaRouter
openrouter/autoorcarouter/auto
openrouter/freeorcarouter/free
Router openrouter/ lainnyaTidak ada padanannya — sebutkan modelnya langsung
Semua ID vendor/model, misalnya anthropic/claude-sonnet-4ID yang sama, tanpa perubahan

Perbedaan penagihan

Empat hal yang tidak kami lakukan

Lebih baik tahu sekarang daripada menemukannya saat sudah berjalan di produksi.

Pertanyaan yang sering diajukan

Apakah OrcaRouter bisa langsung menggantikan OpenRouter?

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.

Base URL apa yang dibutuhkan setiap SDK?

SDK OpenAI meminta https://api.orcarouter.ai/v1. Dua lainnya meminta https://api.orcarouter.ai — masing-masing menambahkan jalurnya sendiri.

Bisakah saya tetap memakai kunci API OpenRouter?

Nilainya berubah — kunci OpenRouter tidak bisa diautentikasi di sini — tetapi tempatnya tidak: kami membaca header yang sama yang sudah dikirim SDK Anda.

Apa pengganti openrouter/auto dan openrouter/free?

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.

Apakah perutean cadangan bekerja dengan cara yang sama?

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.

Bagaimana cara melihat biaya sebuah permintaan?

Baca X-Orca-Request-Id dari respons, lalu panggil /v1/generation. Kode 501 berarti pencarian biaya dimatikan pada penerapan ini.

Apakah X-Title dan HTTP-Referer masih mengidentifikasi aplikasi saya?

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.

Apa yang terjadi pada provider dan transforms di permintaan saya?

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.

Endpoint apa saja yang disediakan OrcaRouter?

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.

Apakah galat dikembalikan dalam format yang sama?

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.