Codex 401 Unauthorized: Ursachen und Lösung
Stand 2026-10-07: Meldet die Codex CLI oder die IDE-Erweiterung 401 Unauthorized, lohnt laut offizieller Dokumentation der Blick auf drei Stellen: die aktive Anmeldemethode (codex login status), den Speicherort der Anmeldedaten (~/.codex/auth.json oder der Anmeldespeicher des Betriebssystems) und bei einem eigenen Provider das Zusammenspiel von model_provider, env_key und requires_openai_auth in der config.toml. Abhilfe schaffen ein erneutes codex login, der Wechsel auf einen API-Key mit printenv OPENAI_API_KEY | codex login --with-api-key oder ein Key an genau der Stelle, an der der Provider ihn liest. Diese Seite folgt dem Wortlaut der offiziellen Codex-Dokumentation und des Changelogs von OpenAI und zeigt die Einrichtung für QCode.
Aktualisiert 2026-10-08
Vier Punkte, die Sie zuerst klären sollten
Offizielle Anmeldemethoden
Die Anmeldung mit ChatGPT nutzt Ihr Abo, die Anmeldung per API-Key ist nutzungsbasiert; laut Dokumentation gelten bei API-Key-Anmeldung die Standardpreise der API statt der Credits Ihres ChatGPT-Plans. CLI, IDE-Erweiterung und Desktop-App unterstützen beides.
Zwischengespeicherte Anmeldedaten
Die Anmeldedaten liegen in ~/.codex/auth.json oder im Anmeldespeicher des Betriebssystems und werden von CLI und IDE-Erweiterung gemeinsam genutzt; wer sich in einem abmeldet, muss sich beim nächsten Start des anderen erneut anmelden.
Woher ein eigener Provider den Key nimmt
env_key benennt die Umgebungsvariable, aus der Codex den Key liest; laut Dokumentation ignoriert Codex env_key, wenn requires_openai_auth = true gesetzt ist, und nutzt dann die OpenAI-Authentifizierung.
So liest die QCode-Dokumentation sie
In der QCode-Dokumentation steht 401 für ein Key-Problem und 404 für ein falsches Pfadpräfix; eine Codex-base_url mit einem Segment zu viel oder zu wenig ergibt 404.
Was 401 bedeutet und was Sie zuerst prüfen
Stand 2026-10-07 bedeutet 401 Unauthorized in Codex, dass der Server die mitgeschickten Anmeldedaten nicht akzeptiert hat oder die Anfrage gar keine enthielt. Die offizielle Dokumentation nennt zwei Anmeldemethoden: Sign in with ChatGPT (Zugang über das Abo) und Sign in with an API key (nutzungsbasiert); Desktop-App, Codex CLI und IDE-Erweiterung unterstützen beide, Codex cloud setzt die Anmeldung mit ChatGPT voraus. Gibt es keine gültige Sitzung, ist codex login mit Anmeldung im Browser der Standardweg; codex login status zeigt die aktive Methode. Bei einem eigenen Provider zählt auch die config.toml: model_provider steht standardmäßig auf openai; ein Provider mit requires_openai_auth = true nutzt die OpenAI-Authentifizierung und ignoriert env_key; ein Provider nur mit env_key liest den Key aus dieser Variable; ist keins von beiden gesetzt, geht Codex laut Dokumentation davon aus, dass der Provider keine Authentifizierung braucht.
Neue Änderungen und Nutzerberichte
Der offizielle Changelog enthält mehrere Einträge rund um die Anmeldung (siehe Zeitleiste unten); mit 0.160.0 vom 2026-10-01 wurde in der Dokumentation präzisiert, wie Provider-Anmeldedaten den konfigurierten Speicher nutzen und wie env_key die Umgebungsvariable mit dem API-Key festlegt. Unabhängig davon wurde am 2026-09-25 auf GitHub in openai/codex ein Issue mit dem Titel „unexpected status 401 Unauthorized issue“ eröffnet, in dem Nutzer Incorrect API key provided auch bei Anmeldung mit ChatGPT melden (Nutzerberichte; eine Ursache hat OpenAI nicht dokumentiert). Diese Seite nimmt solche Issues nur als Hinweis, dass der Fehler häufig auftritt; die Schritte folgen der offiziellen Dokumentation.
Drei Anmelde-Einträge im offiziellen Changelog
Codex CLI 0.156.0: Die Anmeldung kann sich über System-Proxys erholen; derselbe Eintrag erneuert MCP-Anmeldedaten, wenn die OAuth-Discovery einen 503-Fehler liefert.
Codex CLI 0.159.0: Die lokale ChatGPT-Anmeldung öffnet den Browser zuverlässig, und das Onboarding bietet eine Abkürzung zum Kopieren des Anmeldelinks.
Codex CLI 0.160.0: Die Dokumentation präzisiert, wie Provider-Anmeldedaten den konfigurierten Speicher nutzen und wie env_key die Umgebungsvariable mit dem API-Key festlegt.
Bestätigt vs. nicht verifiziert
Bestätigt (wörtlich in der offiziellen Dokumentation)
Folgendes lässt sich wörtlich in der offiziellen Dokumentation nachprüfen: die zwei Anmeldemethoden und wo sie gelten; was codex login, printenv OPENAI_API_KEY | codex login --with-api-key, codex login --device-auth, codex login status und codex logout tun; dass Anmeldedaten in ~/.codex/auth.json oder im Anmeldespeicher des Betriebssystems zwischengespeichert werden (die offizielle Beispielkonfiguration nennt file, also auth.json, als Standard für cli_auth_credentials_store) und von CLI und IDE-Erweiterung geteilt werden, die auch dieselben Konfigurationsebenen nutzen; dass ChatGPT-Sitzungen Tokens vor dem Ablauf automatisch erneuern; dass model_provider standardmäßig openai ist; dass env_key bei requires_openai_auth = true ignoriert wird; dass model_provider, model_providers und openai_base_url in einer projektlokalen .codex/config.toml mit Startwarnung ignoriert werden; dass --profile seit 0.134.0 keine [profiles.name]-Tabellen aus der config.toml mehr liest; dass wire_api nur responses unterstützt; und dass [model_providers.openai] nicht erlaubt ist und stattdessen openai_base_url dient.
Nicht verifiziert oder nicht dokumentiert
Zwei Punkte konnte diese Seite nicht verifizieren, planen Sie nicht darauf: ① warum manche Nutzer 401 auch bei Anmeldung mit ChatGPT sehen, denn im GitHub-Issue stehen nur Vermutungen von Nutzern und die Dokumentation sagt dazu nichts; ② eine offizielle Übersicht aller 401-Fehlertexte von Codex haben wir nicht gefunden, daher stammen die zitierten Fehlertexte aus Nutzerberichten, außer wo ein Text ausdrücklich der Dokumentation zugeordnet ist.
Zwei Einstellungspaare, die oft verwechselt werden
ChatGPT-Anmeldung vs. API-Key
Die ChatGPT-Anmeldung nutzt Ihr Abo und den Browser (codex login); auf entfernten Rechnern oder ohne Browser nehmen Sie codex login --device-auth. Die API-Key-Anmeldung läuft zu den Standardpreisen der API: in der CLI mit printenv OPENAI_API_KEY | codex login --with-api-key, in der IDE-Erweiterung über Use API Key im abgemeldeten Zustand. Für Automatisierung empfiehlt die Dokumentation API-Keys, und einem nicht interaktiven Codex-Prozess lässt sich der Key über CODEX_API_KEY übergeben. Vor dem Wechsel löschen Sie mit codex logout die aktuellen Anmeldedaten.
env_key vs. requires_openai_auth
Das sind die zwei Authentifizierungsoptionen eines eigenen Providers. env_key = "NAME" lässt Codex den Key aus dieser Umgebungsvariable lesen; den Namen wählen Sie selbst, er muss aber zur tatsächlich exportierten Variable passen. requires_openai_auth = true stellt den Provider auf OpenAI-Authentifizierung um (ChatGPT oder API-Key), und laut Dokumentation ignoriert Codex dann env_key. Ist keins von beiden gesetzt, nimmt Codex an, dass keine Authentifizierung nötig ist. Außerdem gibt es experimental_bearer_token für ein direkt eingetragenes Token, das die Dokumentation aber nicht empfiehlt; sie rät zu env_key.
In dieser Reihenfolge prüfen
① Führen Sie codex login status aus und sehen Sie nach, ob Sie mit ChatGPT oder per API-Key angemeldet sind (bei aktiver Anmeldung endet der Befehl mit 0). ② Für den Dienst von OpenAI selbst: codex logout, danach je nach Bedarf codex login (ChatGPT im Browser), printenv OPENAI_API_KEY | codex login --with-api-key (Wechsel auf API-Key) oder codex login --device-auth (entfernte Rechner oder ohne Browser); die IDE-Erweiterung teilt sich den Anmelde-Cache mit der CLI und übernimmt die Korrektur. ③ Für einen eigenen Provider: Schreiben Sie model_provider und die Tabelle [model_providers.name] in ~/.codex/config.toml, denn in einer projektlokalen .codex/config.toml werden diese Schlüssel ignoriert; mit --profile gehören die Einstellungen in ~/.codex/name.config.toml. ④ Für QCode nennt die Dokumentation diese config.toml: model_provider = "crs", model = "gpt-6-sol", model_reasoning_effort = "high", preferred_auth_method = "apikey" und dazu eine Tabelle [model_providers.crs] mit name = "crs", base_url = "https://api.qcode.cc/openai", wire_api = "responses", requires_openai_auth = true, env_key = "CRS_OAI_KEY" (Provider- und Variablenname sind frei wählbar, das Beispiel der Dokumentation nutzt crs und CRS_OAI_KEY; da requires_openai_auth = true gesetzt ist, ignoriert Codex laut offizieller Dokumentation env_key, maßgeblich ist der Key in der auth.json unten). In ~/.codex/auth.json schreiben Sie {"OPENAI_API_KEY": "cr_xxxxxxxxxx"} mit Ihrem eigenen cr_-Key und setzen die Dateirechte auf 600. ⑤ Selbsttest: Fragen Sie https://api.qcode.cc/openai/v1/models mit Authorization: Bearer und Ihrem Key ab; kommt eine JSON-Liste zurück, stimmen Adresse und Key.
Auf QCode
Auf QCode nutzt Codex nur GPT-Modelle; Claude sowie die Familien DeepSeek, GLM, Kimi und Qwen laufen nicht über das OpenAI-Responses-Protokoll, das Codex verwendet. Setzen Sie in der config.toml base_url auf https://api.qcode.cc/openai mit wire_api = "responses"; der Key ist Ihr QCode-Key mit dem Präfix cr_ aus dem Dashboard und gehört laut Dokumentation in OPENAI_API_KEY in ~/.codex/auth.json. Die Dokumentation nennt auch eine optionale Alternative: nur die in env_key genannte Umgebungsvariable setzen und OPENAI_API_KEY in auth.json auf null stellen. Diese Konfiguration enthält aber requires_openai_auth = true, und laut offizieller Dokumentation ignoriert Codex dann env_key; sich allein auf die Umgebungsvariable zu verlassen, empfehlen wir daher nicht. Das Standardmodell der Dokumentation ist gpt-6-sol, Sie können auf gpt-6.1-sol oder gpt-5.6-terra wechseln. Bei 401 prüfen Sie die Punkte aus der Dokumentation: Beginnt der Key mit cr_, ist er in auth.json vollständig ohne überzählige Leerzeichen oder Zeilenumbrüche, und stimmen Key-Status und Restkontingent im Dashboard; ein falscher Key liefert Invalid API key. Eine base_url mit einem Segment zu viel oder zu wenig ergibt 404, nicht 401. Berechnet wird pro Token, die Preise je Modell stehen unter /models.
Häufig gestellte Fragen
Codex meldet 401 Unauthorized – was prüfe ich zuerst?
Zuerst codex login status. Laut offizieller Dokumentation zeigt der Befehl die aktive Authentifizierungsart und endet bei aktiver Anmeldung mit 0. Wissen Sie, ob ChatGPT oder ein API-Key aktiv ist, klären Sie, ob Codex mit OpenAI oder mit einem eigenen Provider spricht: bei OpenAI neu anmelden oder den Key wechseln; bei einem eigenen Provider prüfen, welche Authentifizierung der in model_provider genannte Provider nutzt (env_key oder requires_openai_auth) und ob der Key dort liegt, wo dieser Provider ihn liest.
Wie wechsle ich zwischen ChatGPT-Anmeldung und API-Key?
Mit codex logout die aktuellen Anmeldedaten löschen und sich dann auf die andere Art anmelden. Laut Dokumentation: für ChatGPT codex login ausführen und im Browser abschließen; einen API-Key per stdin mit printenv OPENAI_API_KEY | codex login --with-api-key übergeben; in der IDE-Erweiterung im abgemeldeten Zustand Sign in with ChatGPT oder Use API Key wählen. CLI und Erweiterung teilen sich den Anmelde-Cache. Hat ein Administrator forced_login_method gesetzt, meldet Codex Sie ab und beendet sich, wenn die Anmeldedaten nicht zur Vorgabe passen.
Es lief eine Weile, jetzt kommt 401 – ist das Token abgelaufen?
Bei ChatGPT-Anmeldung behandeln Sie es zuerst als veraltete Sitzung: codex logout, dann codex login. Laut Dokumentation erneuern ChatGPT-Sitzungen ihre Tokens während der Nutzung automatisch vor dem Ablauf, sodass aktive Sitzungen meist keinen neuen Login im Browser brauchen. Auf GitHub berichten Nutzer, dass bei ungültig gewordener Anmeldung Provided authentication token is expired. Please try signing in again. oder Your access token could not be refreshed because your refresh token was revoked. Please log out and sign in again. erscheint (beides Nutzerberichte). Auf entfernten Rechnern oder ohne Browser nutzen Sie codex login --device-auth.
Mein eigener Provider hat env_key, der Key ist exportiert – warum trotzdem 401?
Prüfen Sie zuerst, ob derselbe Provider requires_openai_auth = true enthält: Laut Dokumentation ignoriert Codex dann env_key und nutzt die OpenAI-Authentifizierung (ChatGPT oder API-Key). Falls nicht, muss der Wert von env_key exakt dem Namen der exportierten Variable entsprechen; die Dokumentation sagt, dass Codex die in der Konfiguration genannte Variable liest, der Name selbst ist also nicht festgelegt. Auf GitHub berichten Nutzer von 401 Unauthorized: Missing bearer or basic authentication in header, wenn keine Anmeldedaten konfiguriert sind (Nutzerbericht).
Ich habe die config.toml geändert, aber Codex scheint weiter OpenAI zu nutzen?
Prüfen Sie, ob die Provider-Einstellungen dort stehen, wo Codex sie liest. Die Dokumentation beschreibt drei Fallen: model_provider, model_providers und openai_base_url in einer projektlokalen .codex/config.toml werden mit Startwarnung ignoriert; seit Codex 0.134.0 liest --profile keine [profiles.name] mehr aus der config.toml, nutzen Sie stattdessen ~/.codex/name.config.toml; die eingebauten IDs openai, ollama und lmstudio kann ein eigener Provider nicht belegen, und um nur die OpenAI-Adresse zu ändern, nehmen Sie openai_base_url. Ohne model_provider gilt standardmäßig openai.
Wie finde ich die Ursache eines 401 mit QCode?
Folgen Sie der QCode-Dokumentation: Beginnt der Key mit cr_, ist der Key in ~/.codex/auth.json vollständig ohne überzählige Leerzeichen oder Zeilenumbrüche, und passen Key-Status und Restkontingent im Dashboard; auch ein abgelaufenes Abo nennt die Dokumentation als Ursache für 401. Nutzen Sie die optionale Alternative der Dokumentation (nur Umgebungsvariable, null in auth.json), tragen Sie den Key zuerst wieder in auth.json ein: Mit requires_openai_auth = true in der Konfiguration ignoriert Codex laut offizieller Dokumentation env_key. Alte Variablen in der Umgebung können die aktuelle Konfiguration überschreiben, führen Sie also env | grep -i openai aus und entfernen Sie, was Sie nicht mehr brauchen. Testen Sie dann mit Authorization: Bearer und Ihrem Key gegen https://api.qcode.cc/openai/v1/models: Eine JSON-Liste heißt, Adresse und Key stimmen. Die Dokumentation liest 401 als Key-Problem und 404 als falsches Pfadpräfix; die base_url für Codex ist https://api.qcode.cc/openai.
Quellen
OpenAI: die offiziellen Codex-Dokumentationsseiten Authentication, Config basics, Advanced Configuration, Configuration Reference, Environment variables, Kommandozeilenoptionen und Einstellungen der IDE-Erweiterung (dieselbe Dokumentation unter developers.openai.com/codex und learn.chatgpt.com) sowie der Codex-Changelog und die Release Notes zu 0.156.0, 0.159.0 und 0.160.0 auf GitHub openai/codex, alle abgerufen am 2026-10-07. QCode: die QCode-Dokumentationsseiten zum Codex-Tutorial (aktualisiert am 2026-09-30), zu Endpunkten und API-Formaten, Fehlercodes, Fehlerbehebung und zur Cursor-Einrichtung, am selben Tag abgerufen. Hintergrund: Issue 48237 auf GitHub openai/codex und weitere Issues zu 401, nur als Nutzerberichte zitiert.
Ein cr_-Key für Codex und Claude Code
Codex erreicht gpt-6-sol, gpt-6.1-sol und weitere GPT-Modelle über https://api.qcode.cc/openai, berechnet pro Token; die Preise je Modell stehen unter /models.
Weiterführende Lektüre
Codex CLI mit Drittanbieter-API: config.toml, base_url, Fehler
Die vollständige Einrichtung von config.toml und base_url samt häufiger Fehler.
Codex- & ChatGPT-Pro-Kontosperrungen erklärt
Warum Codex- und ChatGPT-Pro-Konten gesperrt werden und was Sie tun können.
Codex "Selected model is at capacity": nicht Kontingent, nicht 429
Wie Sie den Kapazitätsfehler erkennen und was zu tun ist.
Die Schritte und Zitate auf dieser Seite wurden am 2026-10-07 anhand der offiziellen Dokumentation und des Changelogs von OpenAI Codex sowie der QCode-Dokumentation geprüft; bei Abweichungen gelten die offiziellen Seiten, Änderungen bei den Anbietern sind ohne Vorankündigung möglich. Fehlertexte und Beschreibungen aus GitHub-Issues sind Nutzerberichte, keine offiziellen Befunde. Für die Modellverfügbarkeit gilt /models.