Bunlar birbirinin takma adı değildir. Biri `x-api-key`, diğeri `Authorization: Bearer` olur — ikisi de ayarlıysa kullanmak istemediğiniz değişken kazanabilir. Özel bir temel URL'ye karşı “anahtarım doğru ama kimlik doğrulama başarısız” raporlarının çoğu bundan kaynaklanır.
Hata
# Sent as: x-api-key: <value>
export ANTHROPIC_API_KEY="sk-ant-..."
# Sent as: Authorization: Bearer <value>
export ANTHROPIC_AUTH_TOKEN="sk-kn-..."
# Where those headers go:
export ANTHROPIC_BASE_URL="https://api.kunavo.com"Nedenler ve çözümler özeti
| Neden | Çözüm |
|---|---|
| Ağ geçidi bearer token bekliyor; siz API anahtarı değişkenini ayarladınız | OpenAI uyumlu ağ geçitlerinin çoğu `Authorization: Bearer` üzerinden kimlik doğrular. Ağ geçidi anahtarını ANTHROPIC_AUTH_TOKEN içine koyun. |
| Her iki değişken de farklı sağlayıcılardan ayarlanmış | Kabuk profilinizdeki eski bir ANTHROPIC_API_KEY token ile birlikte gönderilebilir. Kullanmadığınız değişkeni kaldırın. |
| Temel URL ayarlanmış, kimlik bilgileri değiştirilmemiş | Yeni bir host'a yönlendirmek, eski sağlayıcının anahtarını orada geçerli kılmaz. Kimlik bilgisi host ile birlikte değiştirilmelidir. |
| Değişken, aracı çalıştıran kabuktan farklı bir kabukta ayarlanmış | Etkileşimli bir kabuktaki export, grafik arayüzden başlatılan bir işleme ulaşmaz. Aynı ortamın içinde doğrulayın. |
Ortamınızın gerçekte ne tuttuğunu görün
Herhangi bir şeyi değiştirmeden önce, aracı başlatan kabukta ikisini de kontrol edin. Bu oturumların şaşırtıcı bir bölümü ikisini de ayarlı tutar — genellikle kimsenin hatırlamadığı, aylar önce düzenlenmiş bir profil nedeniyle.
for v in ANTHROPIC_API_KEY ANTHROPIC_AUTH_TOKEN ANTHROPIC_BASE_URL; do
printf '%-22s %s\n' "$v" "$(printenv "$v" | cut -c1-12)"
done
# Prefixes tell you the provider at a glance:
# sk-ant- Anthropic direct
# sk-kn- KunavoHost'unuzla eşleşen çifti ayarlayın ve diğerini kaldırın
Host ile kimlik bilgisini tek bir birim olarak ele alın. Üçüncü taraf bir temel URL'ye karşı bu genellikle bearer token ile temel URL'dir; doğrudan API anahtarı açıkça kaldırılmalıdır ki yanlışlıkla seçilmesin.
unset ANTHROPIC_API_KEY
export ANTHROPIC_AUTH_TOKEN="sk-kn-..."
export ANTHROPIC_BASE_URL="https://api.kunavo.com"
# On Kunavo, pin served models too: Claude Code's default and its opus and
# sonnet aliases follow Anthropic's newest models, and the sonnet alias asks
# for Sonnet 5.5, which Kunavo does not serve — unpinned, that request 404s.
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"
claudeZihninizde değil, ağ üzerinde doğrulayın
Kimlik doğrulama hâlâ başarısızsa ortamı denklemden çıkarın: isteği, gönderildiğine inandığınız üstbilgiyle elle gönderin. Burada 200 alırken araçta hata görüyorsanız araç ayarladığınız değişkeni okumuyordur — en yaygın neden farklı bir kabuk veya üzerine yazan bir yapılandırma dosyasıdır.
curl -s -o /dev/null -w '%{http_code}\n' \
"$ANTHROPIC_BASE_URL/v1/models" \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"Kunavo üzerinden çağrı yapıyorsanız
Kunavo anahtarı hem `Authorization: Bearer` hem de `x-api-key` üzerinden okur; dolayısıyla belirleyici olan üstbilgi değildir. Claude Code ile çalışan çift yine ANTHROPIC_AUTH_TOKEN ve ANTHROPIC_BASE_URL'dir — token, ANTHROPIC_API_KEY'in gerektirdiği tek seferlik onay olmadan devreye girer — ve ANTHROPIC_API_KEY kaldırılmalıdır; geride bırakılan eski bir değer, yapılandırılmış görünen ancak yine de reddedilen oturumların en yaygın tek nedenidir. Aynı `sk-kn-` anahtarı /v1/chat/completions karşısında OpenAI tarzı bearer token olarak değişiklik yapılmadan çalışır; böylece tek kimlik bilgisi her iki biçimi de kapsar. Kullanılacak model adları da dahil olmak üzere eksiksiz kurulum şu bölümde yer alır: Claude Code 401 kılavuzumuz.
Sık sorulan sorular
İkisi de ayarlıysa hangisi kazanır?
Buna güvenmeyin — sürümler arasında değişmiş ve SDK'lar arasında farklılık gösteren bir öncelik kuralıdır. Yalnızca birini ayarlayın ve diğerini kaldırın; her yerde aynı şekilde çalışan tek yapılandırma budur.
ANTHROPIC_AUTH_TOKEN'u doğrudan Anthropic ile kullanabilir miyim?
Anthropic'in kendi API'si x-api-key üzerinden kimlik doğrular; bu nedenle doğrudan Anthropic anahtarı ANTHROPIC_API_KEY içinde yer almalıdır. Token değişkeni, bearer kimlik bilgisi bekleyen barındırıcılar için vardır.
SDK aynı değişkenleri mi kullanıyor?
Python ve TypeScript SDK'ları ANTHROPIC_API_KEY'i okur ve x-api-key gönderir. Bir SDK'yı bearer kimlik doğrulamalı bir ağ geçidine yönlendiriyorsanız kimlik bilgisini ortama güvenmek yerine açıkça iletin.
İlgili kılavuzlar
- Özel temel URL ile Claude Code “API Error: 401 authentication_error” — tüm nedenler
- Claude API 401 authentication_error / geçersiz x-api-key — tüm nedenler
- 401/403 döndüren OpenAI uyumlu API — base_url ve başlık tuzakları
- “Kuruluşunuz Claude Code için Claude aboneliği erişimini devre dışı bıraktı” — üç neden ve işe yarayan çözümler
Hata anlamlarına ilişkin daha fazla bilgi hata referansı bölümünde; anahtar almak kayıt ve kimlik doğrulama kılavuzu üzerinden bir dakika sürer.