Kembali ke panduan
Pemecahan masalah·28 Agustus 2026·Baca 6 menit

Claude Code “API Error: 401 authentication_error” dengan base URL khusus — semua penyebab

401 di sini berkaitan dengan kredensial atau base URL Anda, bukan model — masalah model menghasilkan 404 dengan pesan yang menyebut nama model. Perbedaan tunggal ini menyelesaikan sebagian besar kasus dengan satu curl.

Terakhir ditinjau pada .

401 di sini berkaitan dengan kredensial atau base URL Anda, bukan model — masalah model menghasilkan 404 dengan pesan yang menyebut nama model. Perbedaan tunggal ini menyelesaikan sebagian besar kasus dengan satu curl.

Error

terminal
API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"Missing or invalid API key"}}

Ringkasan penyebab dan perbaikan

PenyebabPerbaikan
ANTHROPIC_API_KEY ditetapkan saat seharusnya menggunakan ANTHROPIC_AUTH_TOKENGunakan AUTH_TOKEN untuk base URL pihak ketiga; API_KEY memicu prompt persetujuan satu kali.
Base URL membawa path /v1Tetapkan hanya origin — Claude Code sendiri menambahkan /v1/messages.
Kunci dicabut atau akun ditangguhkanKeduanya menghasilkan 401, bukan 403. Buat kunci baru dan periksa akun.
Model yang tidak dilayani endpoint MessagesIni menghasilkan 404 yang menyebut model, bukan 401 — jadi perbaikannya berbeda.

Cetak ketiga variabel dan pastikan base URL tidak memiliki path

Penyebab paling umum terlihat di sini. Base URL harus berupa origin — tanpa /v1 dan tanpa path akhir — karena klien menambahkan endpoint sendiri. Base URL yang berakhir dengan /v1 menghasilkan permintaan ke /v1/v1/messages.

check-env.sh
env | grep -E '^ANTHROPIC_(BASE_URL|AUTH_TOKEN|API_KEY|MODEL)='

# Right: https://api.kunavo.com
# Wrong: https://api.kunavo.com/v1

Panggil endpoint secara langsung, dengan kedua cara

/v1/messages Kunavo menerima kredensial melalui x-api-key maupun Authorization: Bearer, sehingga Claude Code tidak memerlukan plugin atau proxy. Jika curl berhasil tetapi CLI tidak, masalahnya ada di lingkungan shell Anda, bukan di server.

probe.sh
curl -s https://api.kunavo.com/v1/messages   -H "x-api-key: $ANTHROPIC_AUTH_TOKEN"   -H "anthropic-version: 2023-06-01"   -H "content-type: application/json"   -d '{"model":"claude-sonnet-5","max_tokens":8,
       "messages":[{"role":"user","content":"hi"}]}'

# Same call, other header style — both are accepted:
#   -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"

Hapus variabel yang tidak Anda gunakan

Jika ANTHROPIC_API_KEY dan ANTHROPIC_AUTH_TOKEN sama-sama ditetapkan, yang salah dapat dipilih. Hapus ANTHROPIC_API_KEY, mulai shell baru, lalu coba lagi — ekspor lama di profil shell bertahan lebih lama daripada perbaikan lain.

Jika statusnya 404, berhenti men-debug kunci

404 yang pesannya menyebut model berarti kredensial diterima, tetapi string model tidak diterima. Perbaiki ANTHROPIC_MODEL; tidak ada masalah dengan kuncinya. Pada penyiapan baru, penyebab yang umum adalah tidak ada yang menetapkan model: Claude Code kemudian mengirim default bawaannya, yaitu Opus terbaru, yang mungkin belum disediakan Kunavo; dan /model sonnet meminta Sonnet 5.5, yang tidak disediakan Kunavo — tetapkan ANTHROPIC_MODEL, ANTHROPIC_DEFAULT_OPUS_MODEL, dan ANTHROPIC_DEFAULT_SONNET_MODEL ke ID dari GET /v1/models.

Jika Anda melakukan panggilan melalui Kunavo

401 dari Kunavo mengarah pada lima penyebab: tidak ada kunci pada Authorization: Bearer atau x-api-key, kunci tidak memiliki awalan sk-kn-, kunci sk-kn- tersebut tidak pernah diterbitkan Kunavo, kunci dicabut, atau akun ditangguhkan. Tidak satu pun menghasilkan 403, sehingga kode status menunjukkan kelompok masalahnya — dan kunci valid yang diarahkan ke model yang tidak dilayani endpoint Messages menghasilkan 404 dengan nama model, bukan 401. Itulah keseluruhan pohon diagnosis.

Pertanyaan umum

Mengapa kunci saya bekerja di curl tetapi tidak di Claude Code?

Hampir selalu karena variabel kedua di profil shell atau base URL yang memiliki path. Endpoint menerima kedua gaya header, jadi perbedaannya bukan pada header.

ANTHROPIC_AUTH_TOKEN atau ANTHROPIC_API_KEY?

AUTH_TOKEN untuk base URL pihak ketiga — langsung digunakan. API_KEY memicu prompt persetujuan satu kali terlebih dahulu, yang sering disangka kegagalan.

Apakah langganan Claude mencakup base URL khusus?

Tidak. Langganan mengautentikasi ke endpoint milik vendor; jika CLI diarahkan ke tempat lain, gunakan kredensial endpoint tersebut dan penagihannya berasal dari endpoint itu.

Panduan terkait

Detail semantik error lainnya tersedia di referensi error; mendapatkan kunci hanya perlu satu menit melalui pendaftaran dan panduan autentikasi.