Zurück zu den Leitfäden
Fehlerbehebung·17. Juli 2026·6 Min. Lesezeit

OpenAI-kompatible API liefert 401/403 — Fallstricke bei base_url und Headern

Der eigentliche Zweck OpenAI-kompatibler APIs ist, dass das SDK einfach funktioniert — wenn es also 401 liefert, liegt der Fehler fast immer in den zwei geänderten Zeilen: base_url und api_key. Hier sind die Fehlerbilder in der Reihenfolge, in der sie tatsächlich auftreten.

Zuletzt überprüft am .

Der eigentliche Zweck OpenAI-kompatibler APIs ist, dass das SDK einfach funktioniert — wenn es also 401 liefert, liegt der Fehler fast immer in den zwei geänderten Zeilen: base_url und api_key. Hier sind die Fehlerbilder in der Reihenfolge, in der sie tatsächlich auftreten.

Der Fehler

response (HTTP 401)
{
  "error": {
    "type": "invalid_api_key",
    "message": "Invalid or missing API key.",
    "code": "invalid_api_key"
  }
}

Ursachen und Lösungen im Überblick

UrsacheLösung
base_url ohne Suffix /v1 (oder mit doppeltem Suffix)Die meisten Gateways erwarten exakt https://host/v1 — das SDK hängt /chat/completions selbst an.
Schlüssel von einem anderen Hostsk-…-Schlüssel authentifizieren nur gegenüber dem Dienst, der sie ausgestellt hat; prüfen Sie Präfix ↔ Host.
Unternehmensproxy / WAF entfernt den Authorization-HeaderTesten Sie aus einem sauberen Netzwerk und konfigurieren Sie den Proxy so, dass Authorization weitergeleitet wird.
Die Umgebungsvariable OPENAI_API_KEY überschreibt Ihren expliziten SchlüsselDas SDK liest standardmäßig Umgebungsvariablen — in manchen Setups gewinnt eine veraltete Variable unbemerkt; übergeben Sie api_key explizit.

Prüfen Sie die genaue URL, die das SDK aufruft

Geben Sie client.base_url aus und rufen Sie GET /v1/models auf — den günstigsten authentifizierten Endpunkt. Wenn /models funktioniert, ist die Authentifizierung in Ordnung und der Fehler liegt an anderer Stelle:

check.py
from openai import OpenAI

client = OpenAI(
    base_url="https://api.kunavo.com/v1",   # exactly one /v1
    api_key="sk-kn-...",                 # explicit beats env vars
)
print(client.base_url)
print([m.id for m in client.models.list().data][:5])

Rufen Sie denselben Host mit Curl auf, um das SDK auszuschließen

Wenn Curl mit Authorization: Bearer funktioniert und das SDK nicht, vergleichen Sie die tatsächliche SDK-Anfrage (setzen Sie OPENAI_LOG=debug) — in neun von zehn Fällen hat ein Proxy oder eine Umgebungsvariable etwas umgeschrieben.

Wenn Sie Kunavo verwenden

Kunavos Endpunkt hat unter https://api.kunavo.com/v1 strikt die Form von OpenAI und verwendet Bearer-Authentifizierung; GET /v1/models dient als Authentifizierungstest. Wenn Ihr Code gegen api.openai.com läuft, ist das Ändern von base_url zu Kunavo die einzige Änderung — dasselbe SDK, dasselbe Wire-Format, ein Schlüssel für Claude, GPT und Medienmodelle.

Häufig gestellte Fragen

401 oder 403 bei einem Gateway — worin besteht der Unterschied?

401 = Die Zugangsdaten selbst wurden nicht akzeptiert (fehlender oder ungültiger Schlüssel). 403 = Der Schlüssel ist gültig, darf diese Aktion aber nicht ausführen (deaktivierter Schlüssel, gesperrtes Konto, Modell nicht erlaubt). Lesen Sie den Fehlertext — kompatible APIs geben den Grund in error.message an.

Warum funktioniert mein Code lokal, liefert aber in CI 401?

CI ist eine andere Umgebung: Das Secret fehlt, gehört zu einem anderen Dienst oder ein Proxy entfernt den Header. Protokollieren Sie repr(key[:12]) und base_url innerhalb von CI, um zu sehen, was tatsächlich gesendet wird.

Verwandte Anleitungen

Weitere Informationen zur Fehlersemantik finden Sie unter Fehlerreferenz; einen Schlüssel erhalten Sie in einer Minute über Registrierung und die Authentifizierungsanleitung.