Dokumentasi

Dokumentasi

ANTHROPIC_BASE_URL

Variabel lingkungan yang mengarahkan Claude Code dan Anthropic SDK ke endpoint selain api.anthropic.com — mencakup referensi variabel lengkap, konfigurasi per klien, serta dua jebakan yang menyebabkan hampir semua kegagalan.

ANTHROPIC_BASE_URL memberi tahu Anthropic SDK dan Claude Code host tujuan pengiriman permintaan API, menggantikan https://api.anthropic.com default. Atur ke origin tanpa path — klien menambahkan /v1/messages sendiri — lalu pasangkan dengan ANTHROPIC_AUTH_TOKEN, yang menjadi header Authorization: Bearer.

~/.zshrc
# The origin only — no trailing /v1, no trailing slash.
export ANTHROPIC_BASE_URL=https://api.kunavo.com
export ANTHROPIC_AUTH_TOKEN=sk-kn-...

Buka terminal baru setelahnya: Claude Code dan SDK membaca variabel ini saat proses dimulai, sehingga sesi yang sudah berjalan tetap menggunakan endpoint lama.

Jangan sertakan /v1 dalam ANTHROPIC_BASE_URL. Klien Anthropic menambahkan path itu sendiri, sehingga https://api.kunavo.com/v1 menghasilkan permintaan ke /v1/v1/messages dan setiap panggilan mengembalikan 404. OpenAI SDK menggunakan konvensi sebaliknya dan memang memerlukan /v1 di base_url-nya — perbedaan ini adalah kesalahan konfigurasi yang paling umum di sini.

Setiap variabel dan fungsinya

Daftar lengkap variabel yang dibaca Claude Code tersedia di referensi variabel lingkungan Anthropic. Inilah variabel yang penting saat Anda mengalihkan endpoint.

VariabelNilaiFungsi
ANTHROPIC_BASE_URLhttps://api.kunavo.comOrigin tujuan semua permintaan. Tanpa path dan tanpa garis miring di akhir.
ANTHROPIC_AUTH_TOKENsk-kn-…Kredensial yang dikirim sebagai Authorization: Bearer. Inilah yang diperlukan gateway.
ANTHROPIC_API_KEYsk-ant-…Kredensial yang dikirim sebagai header x-api-key, format yang diharapkan api.anthropic.com. Tetapkan ini ATAU token di atas, jangan keduanya.
ANTHROPIC_MODELclaude-sonnet-5Model utama yang digunakan Claude Code untuk percakapan.
ANTHROPIC_DEFAULT_OPUS_MODELclaude-opus-5-5Model di balik alias opus (/model opus). Default Claude Code sendiri adalah Opus terbaru, jadi tetapkan ke model yang disediakan endpoint. Opus 5.5 memerlukan Claude Code v2.1.280 atau yang lebih baru.
ANTHROPIC_DEFAULT_SONNET_MODELclaude-sonnet-5Model di balik alias sonnet (/model sonnet). Alias ini secara default meminta Sonnet 5.5, jadi tetapkan ke Sonnet yang disediakan endpoint.
ANTHROPIC_DEFAULT_HAIKU_MODELclaude-haiku-4-5Model yang digunakan oleh alias haiku (/model haiku dan subagen yang ditetapkan ke haiku), serta model yang dipakai Claude Code untuk panggilan latar belakangnya sendiri. Sejak v2.1.293, alias tersebut meminta Haiku 5.5, jadi patok alias itu ke Haiku yang disediakan endpoint.
Nama model harus tersedia di endpoint yang digunakan. Mengarahkan ke gateway tetapi membiarkan ID model yang tidak disediakannya adalah kegagalan umum kedua, dan kesalahan yang muncul berupa 404 model_not_found, bukan kesalahan autentikasi. ID model Kunavo tercantum di halaman model dan juga dikembalikan secara langsung oleh GET /v1/models.

Konfigurasi per klien

Claude Code

Masukkan perintah ekspor ke profil shell yang digunakan untuk memulai Claude Code, lalu buka terminal baru. Instalasi dan alur kerja tidak berubah.

~/.zshrc
# ~/.zshrc (or ~/.bashrc) — applies to every Claude Code session.
export ANTHROPIC_BASE_URL=https://api.kunavo.com
export ANTHROPIC_AUTH_TOKEN=sk-kn-...

# Pin models this endpoint serves. Claude Code's default and its opus/sonnet
# aliases follow Anthropic's newest models, which may not be served here —
# unpinned, those calls 404.
export ANTHROPIC_MODEL=claude-sonnet-5
export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5
export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5
export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5

Jalankan /status di Claude Code untuk memastikan endpoint yang digunakan sesi saat ini. Panduan langkah demi langkah, termasuk cara membuat kunci: tetapkan kunci API di Claude Code.

Anthropic SDK (Python / TypeScript)

SDK membaca variabel lingkungan yang sama, dan kedua pengaturan juga dapat diteruskan ke konstruktor — berguna jika satu proses berkomunikasi dengan lebih dari satu endpoint.

anthropic_sdk.py
from anthropic import Anthropic

# The Anthropic SDK appends /v1/messages, so pass the origin — not .../v1.
client = Anthropic(
    base_url="https://api.kunavo.com",
    auth_token="sk-kn-...",          # sets the Authorization: Bearer header
)

msg = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=512,
    messages=[{"role": "user", "content": "Say hi"}],
)
print(msg.content[0].text)

OpenAI SDK — konvensi yang berbeda

Jika kode Anda sudah menggunakan OpenAI, Anda sama sekali tidak memerlukan ANTHROPIC_BASE_URL. Arahkan base_url ke path yang kompatibel dengan OpenAI — kali ini dengan /v1 — lalu panggil model Claude yang sama melalui /v1/chat/completions.

openai_sdk.py
from openai import OpenAI

# The OpenAI SDK is the other convention: it wants the /v1 in the base_url.
client = OpenAI(
    api_key="sk-kn-...",
    base_url="https://api.kunavo.com/v1",
)

r = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": "Say hi"}],
)
print(r.choices[0].message.content)

Cline, Roo Code, Kilo Code, Cursor

Sebagian besar agen editor menyediakan dua pengaturan yang sama melalui UI masing-masing, bukan melalui lingkungan: kolom "base URL" atau "custom endpoint" dan kolom kunci API. Aturannya tetap sama — origin tanpa /v1 untuk penyedia bergaya Anthropic, dan kunci di kolom kunci API. Panduan per klien: Cline, Roo Code, Kilo Code.

Pastikan konfigurasi berhasil

Satu perintah curl menguji URL dasar dan kredensial sekaligus. Respons 200 dengan isi JSON berarti keduanya sudah benar.

# 200 and a JSON body means the base URL and the token are both right.
curl -sS https://api.kunavo.com/v1/messages \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "content-type: application/json" \
  -d '{"model":"claude-haiku-4-5","max_tokens":16,
       "messages":[{"role":"user","content":"ping"}]}'

# In Claude Code, /status shows the endpoint the session is actually using.

Jika tidak berfungsi

GejalaPenyebabPerbaikan
404 pada setiap permintaan/v1 masih berada di akhir ANTHROPIC_BASE_URLTetapkan origin saja. Klien menambahkan /v1/messages.
401 / x-api-key tidak validKredensial ditetapkan sebagai ANTHROPIC_API_KEY padahal endpoint menggunakan autentikasi token bearerGunakan ANTHROPIC_AUTH_TOKEN sebagai gantinya — selengkapnya tentang perbedaannya
Masih mengarah ke api.anthropic.comVariabel diekspor setelah sesi dimulai, atau ditetapkan di profil yang tidak dibaca shellBuka terminal baru; konfirmasikan dengan echo $ANTHROPIC_BASE_URL di shell yang sama yang menjalankan klien.
404 model_not_foundID model tidak tersedia di endpointTetapkan ANTHROPIC_MODEL ke ID dari GET /v1/models
Claude Code menyatakan saldo kredit terlalu rendahPermintaan mencapai endpoint dan ditagihkan ke kunci, bukan ke langgananSesuai perkiraan — isi saldo, atau hapus token untuk kembali menggunakan paket. Lihat kredit tidak mencukupi

Dampaknya terhadap langganan Pro atau Max

Selama variabel kredensial ditetapkan, Claude Code membebankan biaya ke kunci, bukan ke langganan yang sedang digunakan untuk masuk: batas paket tidak lagi berlaku dan penggunaan ditagihkan kepada pemilik kunci. Langganan itu sendiri tidak berubah — hapus variabel tersebut, buka terminal baru, dan Claude Code akan kembali menggunakan paket. Keduanya tidak pernah digabungkan, dan perhitungan biayanya dijelaskan di harga Claude Code.

Berikutnya

Pertanyaan umum

Apa itu ANTHROPIC_BASE_URL?

ANTHROPIC_BASE_URL adalah variabel lingkungan yang memberi tahu Anthropic SDK dan Claude Code host tujuan pengiriman permintaan API, sebagai pengganti https://api.anthropic.com. Atur ke origin tanpa path — klien menambahkan /v1/messages sendiri — lalu pasangkan dengan ANTHROPIC_AUTH_TOKEN, yang menjadi header Authorization: Bearer. Endpoint apa pun yang kompatibel dengan Anthropic dapat digunakan; di Kunavo, nilainya adalah https://api.kunavo.com.

Apakah ANTHROPIC_BASE_URL harus menyertakan /v1?

Tidak. ANTHROPIC_BASE_URL hanya menerima origin — https://api.kunavo.com, bukan https://api.kunavo.com/v1 — karena Anthropic SDK dan Claude Code menambahkan path /v1/messages sendiri. Menyertakan /v1 menghasilkan permintaan ke /v1/v1/messages, yang mengembalikan 404. OpenAI SDK menggunakan konvensi sebaliknya dan memang memerlukan /v1 di base_url-nya. Karena itu, gateway yang sama ditulis dengan dua cara berbeda, bergantung pada klien yang memanggilnya.

Apa perbedaan ANTHROPIC_AUTH_TOKEN dan ANTHROPIC_API_KEY?

ANTHROPIC_AUTH_TOKEN mengirim kredensial melalui header Authorization: Bearer, sedangkan ANTHROPIC_API_KEY mengirimkannya melalui header x-api-key yang diharapkan api.anthropic.com. Gateway yang menggunakan autentikasi token bearer memerlukan ANTHROPIC_AUTH_TOKEN; menetapkan ANTHROPIC_API_KEY sebagai gantinya adalah penyebab paling umum terjadinya 401 setelah ANTHROPIC_BASE_URL diubah. Tetapkan salah satunya saja, jangan keduanya — jika keduanya ada, perilakunya bergantung pada versi klien.

Bagaimana cara menetapkan URL dasar kustom di Claude Code?

Ekspor ANTHROPIC_BASE_URL dan ANTHROPIC_AUTH_TOKEN di profil shell yang digunakan untuk memulai Claude Code (~/.zshrc atau ~/.bashrc), lalu buka terminal baru agar variabel tersebut diwariskan. Claude Code membacanya saat dimulai, sehingga sesi yang sudah berjalan tetap menggunakan endpoint lama. Jalankan /status di Claude Code untuk memastikan endpoint yang digunakan sesi saat ini.

Apakah menetapkan ANTHROPIC_BASE_URL menonaktifkan langganan Claude Pro atau Max saya?

Selama variabel kredensial seperti ANTHROPIC_AUTH_TOKEN ditetapkan, Claude Code membebankan biaya ke kunci, bukan ke langganan yang sedang digunakan untuk masuk. Dengan demikian, batas paket Pro dan Max tidak lagi berlaku dan penggunaan ditagihkan kepada pemilik kunci. Langganan itu sendiri tidak terpengaruh dan tetap aktif — hapus variabel tersebut lalu buka terminal baru, dan Claude Code akan kembali menggunakan paket langganan.