Das sind keine Aliase. Aus dem einen wird `x-api-key`, aus dem anderen `Authorization: Bearer` — und wenn beide gesetzt sind, kann der Wert gewinnen, den Sie gar nicht verwenden wollten. Die meisten Meldungen „Mein Schlüssel ist korrekt, aber die Authentifizierung schlägt fehl“ bei einer benutzerdefinierten Basis-URL haben genau diese Ursache.
Der Fehler
# 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"Ursachen und Lösungen im Überblick
| Ursache | Lösung |
|---|---|
| Das Gateway erwartet ein Bearer-Token; Sie haben die API-Key-Variable gesetzt | Die meisten OpenAI-kompatiblen Gateways authentifizieren über `Authorization: Bearer`. Legen Sie den Gateway-Schlüssel in ANTHROPIC_AUTH_TOKEN ab. |
| Beide Variablen gesetzt, von unterschiedlichen Anbietern | Ein veraltetes ANTHROPIC_API_KEY in Ihrem Shell-Profil kann zusammen mit dem Token gesendet werden. Entfernen Sie die Variable, die Sie nicht verwenden. |
| Basis-URL gesetzt, Zugangsdaten nicht geändert | Das Verweisen auf einen neuen Host macht den Schlüssel eines alten Anbieters dort nicht gültig. Mit dem Host müssen auch die Zugangsdaten geändert werden. |
| Die Variable wurde in einer anderen Shell gesetzt als in der, die das Tool startet | Ein Export in einer interaktiven Shell erreicht keinen Prozess, der über eine grafische Oberfläche gestartet wurde. Prüfen Sie die Variable in derselben Umgebung. |
Prüfen Sie, was Ihre Umgebung tatsächlich enthält
Prüfen Sie beide Variablen in der Shell, die das Tool startet, bevor Sie etwas ändern. In überraschend vielen dieser Sitzungen sind beide gesetzt — oft stammt eine davon aus einer Monate zurückliegenden Profiländerung, an die sich niemand erinnert.
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- KunavoSetzen Sie das zu Ihrem Host passende Paar und entfernen Sie das andere
Behandeln Sie Host und Zugangsdaten als eine Einheit. Bei einer Drittanbieter-Basis-URL sind das normalerweise Bearer-Token plus Basis-URL; der direkte API-Schlüssel sollte ausdrücklich entfernt werden, damit er nicht versehentlich verwendet wird.
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"
claudeBestätigen Sie es über die tatsächliche Übertragung, nicht in Gedanken
Wenn die Authentifizierung weiterhin fehlschlägt, nehmen Sie die Umgebung aus der Gleichung: Senden Sie die Anfrage manuell mit dem Header, der Ihrer Meinung nach gesendet wird. Liefert dies 200, das Tool aber weiterhin einen Fehler, liest das Tool die von Ihnen gesetzte Variable nicht — meistens wegen einer anderen Shell oder einer überschreibenden Konfigurationsdatei.
curl -s -o /dev/null -w '%{http_code}\n' \
"$ANTHROPIC_BASE_URL/v1/models" \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"Wenn Sie Kunavo verwenden
Kunavo liest den Schlüssel entweder aus `Authorization: Bearer` oder aus `x-api-key`; der Header ist daher nicht entscheidend. Bei Claude Code funktioniert weiterhin das Paar ANTHROPIC_AUTH_TOKEN plus ANTHROPIC_BASE_URL — der Token wird ohne die einmalige Genehmigung wirksam, die ANTHROPIC_API_KEY benötigt — und ANTHROPIC_API_KEY sollte entfernt werden, statt als Restwert bestehen zu bleiben, da ein veralteter Wert dort die häufigste Ursache für eine scheinbar konfigurierte, aber dennoch verweigerte Sitzung ist. Derselbe `sk-kn-`-Schlüssel funktioniert unverändert als OpenAI-ähnlicher Bearer-Token gegenüber /v1/chat/completions, sodass ein Zugang beide Formen abdeckt. Die vollständige Einrichtung einschließlich der zu verwendenden Modellnamen finden Sie in unserem Leitfaden zu Claude Code und dem Fehler 401.
Häufig gestellte Fragen
Welcher Wert gewinnt, wenn beide gesetzt sind?
Verlassen Sie sich nicht darauf — es handelt sich um eine Vorrangregel, die sich zwischen Versionen geändert hat und je nach SDK unterschiedlich ist. Setzen Sie genau eine Variable und entfernen Sie die andere; nur diese Konfiguration verhält sich überall gleich.
Kann ich ANTHROPIC_AUTH_TOKEN direkt mit Anthropic verwenden?
Die eigene API von Anthropic authentifiziert über x-api-key; ein direkter Anthropic-Schlüssel gehört daher in ANTHROPIC_API_KEY. Die Token-Variable ist für Hosts vorgesehen, die eine Bearer-Zugangsdaten erwarten.
Verwendet das SDK dieselben Variablen?
Die Python- und TypeScript-SDKs lesen ANTHROPIC_API_KEY und senden x-api-key. Wenn Sie ein SDK auf ein Bearer-authentifiziertes Gateway richten, übergeben Sie die Zugangsdaten ausdrücklich, statt sich auf die Umgebung zu verlassen.
Verwandte Anleitungen
- Claude Code „API Error: 401 authentication_error“ mit einer benutzerdefinierten Base-URL — alle Ursachen
- Claude API 401 authentication_error / ungültiger x-api-key — alle Ursachen
- OpenAI-kompatible API liefert 401/403 — Fallstricke bei base_url und Headern
- „Ihre Organisation hat den Claude-Abonnementzugang für Claude Code deaktiviert“ – die drei Ursachen und was funktioniert
Weitere Informationen zur Fehlersemantik finden Sie unter Fehlerreferenz; einen Schlüssel erhalten Sie in einer Minute über Registrierung und die Authentifizierungsanleitung.