トラブルシューティング · 2026-10-07 時点

Codex 401 Unauthorized の原因と直し方

2026-10-07 時点で、Codex CLI や IDE 拡張が 401 Unauthorized を返したとき、公式ドキュメントに沿って確認するのは 3 か所です。現在の認証方式(codex login status)、資格情報の保存先(~/.codex/auth.json または OS の資格情報ストア)、そしてカスタムプロバイダーなら config.toml の model_provider・env_key・requires_openai_auth の組み合わせです。直し方は codex login のやり直し、printenv OPENAI_API_KEY | codex login --with-api-key での API キーへの切り替え、またはプロバイダーが実際に読む場所へのキーの配置です。本ページは OpenAI Codex の公式ドキュメントと changelog の原文に沿って整理し、QCode に接続する場合の書き方も示します。

更新日 2026-10-08

#codex login#auth.json#env_key#401 Unauthorized

最初に押さえる 4 点

2 種類

公式のサインイン方法

ChatGPT でのサインインはサブスクリプション枠、API キーでのサインインは従量課金です。公式には、API キーでサインインすると ChatGPT プランのクレジットではなく標準の API 料金になるとあります。CLI・IDE 拡張・デスクトップアプリはどちらにも対応します。

auth.json

資格情報のキャッシュ

ログイン情報は ~/.codex/auth.json か OS の資格情報ストアに保存され、CLI と IDE 拡張で共有されます。どちらかでログアウトすると、もう一方も次回起動時に再ログインが必要です。

env_key

カスタムプロバイダーのキーの出どころ

env_key は Codex がキーを読む環境変数の名前です。公式には、requires_openai_auth = true のとき Codex は env_key を無視して OpenAI 認証を使うとあります。

401 / 404

QCode ドキュメントでの見分け方

QCode のドキュメントでは、401 はキーの問題、404 はパスのプレフィックス違いです。Codex の base_url は 1 段多くても少なくても 404 になります。

401 の意味と最初に見る場所

2026-10-07 時点で、Codex の 401 Unauthorized は、リクエストに付いた資格情報をサーバーが受け付けなかったか、資格情報が付いていなかったことを意味します。公式ドキュメントのサインイン方法は 2 つで、Sign in with ChatGPT(サブスクリプション)と Sign in with an API key(従量課金)です。デスクトップアプリ、Codex CLI、IDE 拡張はどちらにも対応し、Codex cloud は ChatGPT でのサインインが必須です。有効なセッションがないときは codex login のブラウザーフローが既定の経路で、codex login status で現在の認証方式を確認できます。カスタムプロバイダーでは config.toml も関わります。model_provider の既定値は openai、requires_openai_auth = true のプロバイダーは OpenAI 認証を使って env_key を無視し、env_key だけを設定したプロバイダーはその環境変数からキーを読みます。どちらも設定しない場合、Codex はそのプロバイダーには認証が不要とみなすと公式に書かれています。

最近の変更とユーザー報告

公式 changelog にはサインイン関連の項目がいくつかあります(下のタイムライン参照)。2026-10-01 の 0.160.0 では、プロバイダーの資格情報が設定済みの保存先をどう使うか、env_key が API キーの環境変数をどう指定するかがドキュメントで明確化されました。別件として、GitHub の openai/codex で 2026-09-25 に 「unexpected status 401 Unauthorized issue」という題名の issue が立ち、ChatGPT サインインでも Incorrect API key provided が出るという報告が寄せられています(ユーザー報告で、原因は公式に説明されていません)。本ページはこうした issue を「多くの人が遭遇している」背景としてだけ扱い、手順は公式ドキュメントに従います。

公式 changelog のサインイン関連 3 項目

2026-09-22

Codex CLI 0.156.0:システムプロキシ経由でログインを回復できるようになり、同じ項目で OAuth ディスカバリーが 503 エラーを返したときの MCP 資格情報の更新も入りました。

2026-09-29

Codex CLI 0.159.0:ローカルの ChatGPT サインインで確実にブラウザーが開くようになり、オンボーディングにログインリンクをコピーするショートカットが追加されました。

2026-10-01

Codex CLI 0.160.0:プロバイダーの資格情報が設定済みの保存先をどう使うか、env_key が API キーの環境変数をどう指定するかがドキュメントで明確化されました。

確認済み vs 未確認

確認済み(公式ドキュメントで原文確認可)

次の項目は公式ドキュメントで原文どおり確認できます。2 つのサインイン方法とその対象、codex login・printenv OPENAI_API_KEY | codex login --with-api-key・codex login --device-auth・codex login status・codex logout の働き、ログイン情報が ~/.codex/auth.json か OS の資格情報ストアにキャッシュされ(公式のサンプル設定では cli_auth_credentials_store の既定値は file、つまり auth.json への保存)、CLI と IDE 拡張で共有されること(両者は同じ設定レイヤーも共有)、ChatGPT セッションは期限切れ前にトークンを自動更新すること、model_provider の既定値が openai であること、requires_openai_auth = true のとき env_key が無視されること、プロジェクト内の .codex/config.toml にある model_provider・model_providers・openai_base_url は無視され起動時に警告が出ること、0.134.0 以降の --profile は config.toml の [profiles.名前] を読まないこと、wire_api は responses のみ対応であること、[model_providers.openai] は作れず openai_base_url を使うこと。

未確認・公式に説明がないもの

次の 2 点は確認できていないので、これを前提に判断しないでください。① ChatGPT サインインでも 401 が出る理由は、GitHub の issue にユーザーの推測があるだけで、公式ドキュメントに説明はありません。② Codex の 401 エラー文言を網羅した公式の対照表は見つかりませんでした。本ページで引用するエラー文字列は、ドキュメント由来と明記したもの以外はユーザー報告です。

混同しやすい 2 組の設定

ChatGPT サインイン vs API キー

ChatGPT サインインはサブスクリプション枠でブラウザーフロー(codex login)を使い、リモートやブラウザーのない環境では codex login --device-auth を使います。API キーでのサインインは標準の API 料金で課金され、CLI では printenv OPENAI_API_KEY | codex login --with-api-key、IDE 拡張では未サインイン画面で Use API Key を選びます。公式は自動化には API キーを推奨しており、非対話の Codex プロセスには CODEX_API_KEY でキーを渡せます。切り替えるときは先に codex logout で現在の資格情報を消してください。

env_key vs requires_openai_auth

カスタムプロバイダーの 2 つの認証方式です。env_key = "変数名" は Codex にその環境変数からキーを読ませます。名前は自分で決められますが、実際に export した変数名と一致させる必要があります。requires_openai_auth = true はプロバイダーに OpenAI 認証(ChatGPT または API キー)を使わせ、公式によるとこのとき Codex は env_key を無視します。どちらも設定しなければ Codex は認証不要とみなします。トークンを直接書く experimental_bearer_token もありますが、公式は非推奨とし env_key を勧めています。

この順番で確認する

① codex login status を実行し、ChatGPT と API キーのどちらでサインインしているかを確認します(ログイン中なら終了コード 0)。② OpenAI 本体を使う場合は、codex logout のあと、必要に応じて codex login(ブラウザーで ChatGPT)、printenv OPENAI_API_KEY | codex login --with-api-key(API キーに切り替え)、codex login --device-auth(リモートやブラウザーのない環境)を実行します。IDE 拡張は CLI とログインキャッシュを共有するので、CLI で直せば IDE 拡張にも反映されます。③ カスタムプロバイダーの場合は、model_provider と [model_providers.名前] を ~/.codex/config.toml に書きます。プロジェクト内の .codex/config.toml ではこの 2 つは無視されます。--profile を使うなら ~/.codex/名前.config.toml に置きます。④ QCode に接続する場合、ドキュメントの config.toml は model_provider = "crs"、model = "gpt-6-sol"、model_reasoning_effort = "high"、preferred_auth_method = "apikey" に、[model_providers.crs] テーブルとして name = "crs"、base_url = "https://api.qcode.cc/openai"、wire_api = "responses"、requires_openai_auth = true、env_key = "CRS_OAI_KEY" を加えたものです(プロバイダー名と変数名は自由に決められ、ドキュメントの例では crs と CRS_OAI_KEY。requires_openai_auth = true があるので、公式によると Codex は env_key を無視し、キーは下の auth.json のものが使われます)。~/.codex/auth.json には {"OPENAI_API_KEY": "cr_xxxxxxxxxx"} と書いて自分の cr_ キーに置き換え、ファイルの権限を 600 にします。⑤ 自己テスト:Authorization: Bearer と自分のキーを付けて https://api.qcode.cc/openai/v1/models にリクエストし、JSON の一覧が返ればアドレスとキーはどちらも正しいです。

QCode では

QCode では、Codex で使えるのは GPT 系モデルだけです。Claude や DeepSeek・GLM・Kimi・Qwen 系は、Codex が使う OpenAI Responses プロトコルでは提供されていません。config.toml の base_url は https://api.qcode.cc/openai、wire_api = "responses" とし、キーはコンソールで発行した cr_ で始まる QCode のキーを、ドキュメントどおり ~/.codex/auth.json の OPENAI_API_KEY に書きます。ドキュメントには、env_key が指す環境変数だけを設定し auth.json の OPENAI_API_KEY を null にする代替手段も載っていますが、この設定には requires_openai_auth = true があり、公式にはこのとき Codex は env_key を無視するとあるため、環境変数だけでキーを渡す方法はおすすめしません。ドキュメントの既定モデルは gpt-6-sol で、gpt-6.1-sol や gpt-5.6-terra に変更することもできます。401 が出たら、ドキュメントの項目どおり、キーが cr_ で始まるか、auth.json のキーが欠けておらず余分な空白や改行がないか、コンソールでキーの状態と残りのクォータを確認します。キーが間違っていると QCode は Invalid API key を返します。base_url が 1 段多い・少ない場合は 401 ではなく 404 です。課金はトークン単位で、各モデルの単価は /models を参照してください。

よくある質問

Codex で 401 Unauthorized が出たら、最初に何を確認する?

まず codex login status を実行します。公式ドキュメントによると、現在の認証方式を表示し、ログイン中なら 0 で終了します。ChatGPT と API キーのどちらかが分かったら、Codex の接続先が OpenAI かカスタムプロバイダーかを確認します。OpenAI ならサインインし直すかキーを切り替え、カスタムプロバイダーなら model_provider が指すプロバイダーの認証方式(env_key か requires_openai_auth か)と、キーがその読み取り先にあるかを確認します。

ChatGPT サインインと API キーはどう切り替える?

codex logout で現在の資格情報を消してから、もう一方の方法でサインインします。公式の手順では、ChatGPT は codex login を実行してブラウザーで完了し、API キーは printenv OPENAI_API_KEY | codex login --with-api-key で標準入力から渡します。IDE 拡張では未サインイン画面で Sign in with ChatGPT または Use API Key を選びます。CLI と IDE 拡張はログインキャッシュを共有します。管理者が forced_login_method を設定している場合、資格情報が制限に合わないと Codex はログアウトして終了します。

しばらく使えていたのに急に 401。トークンの期限切れ?

ChatGPT サインインなら、まずセッション切れとして扱い、codex logout のあと codex login をやり直してください。公式ドキュメントには、ChatGPT セッションは使用中に期限切れ前にトークンを自動更新するため、使用中のセッションは通常ブラウザーでの再ログインが不要とあります。GitHub では、ログイン状態が無効になったときに Provided authentication token is expired. Please try signing in again. や Your access token could not be refreshed because your refresh token was revoked. Please log out and sign in again. が出たという報告があります(いずれもユーザー報告)。リモートやブラウザーのない環境では codex login --device-auth を使います。

カスタムプロバイダーで env_key を設定し、キーも export したのに 401 になるのは?

まず同じプロバイダーに requires_openai_auth = true がないか確認してください。公式ドキュメントによると、このとき Codex は env_key を無視し、OpenAI 認証(ChatGPT または API キー)を使います。ない場合は、env_key の値が export した変数名と完全に一致しているかを確認します。公式には、Codex はその設定が指す変数を読むので、変数名そのものは固定ではないとあります。GitHub では、資格情報を設定していないときに 401 Unauthorized: Missing bearer or basic authentication in header が出たという報告があります(ユーザー報告)。

config.toml を変えたのに、Codex がまだ OpenAI を使っているようです

プロバイダーの設定が Codex の読む場所にあるかを確認してください。公式ドキュメントには落とし穴が 3 つあります。プロジェクト内の .codex/config.toml にある model_provider・model_providers・openai_base_url は無視され起動時に警告が出ること、Codex 0.134.0 以降の --profile は config.toml の [profiles.名前] を読まないので ~/.codex/名前.config.toml を使うこと、組み込み ID の openai・ollama・lmstudio はカスタムプロバイダーに使えないので、OpenAI のアドレスだけ変えたいなら openai_base_url を使うことです。model_provider を書かなければ既定値は openai です。

QCode で 401 が出たときの確認手順は?

QCode のドキュメントに沿って、キーが cr_ で始まるか、~/.codex/auth.json のキーが欠けておらず余分な空白や改行がないか、コンソールでキーの状態と残りのクォータを確認します。ドキュメントはサブスクリプションの期限切れも 401 の原因に挙げています。ドキュメントの代替手段(環境変数だけを設定し auth.json は null)を使っているなら、まずキーを auth.json に戻してください。設定に requires_openai_auth = true があるとき、公式には Codex は env_key を無視するとあります。環境に残った古い変数が現在の設定を上書きすることがあるので、env | grep -i openai で不要なものを消してください。そのうえで Authorization: Bearer と自分のキーを付けて https://api.qcode.cc/openai/v1/models にリクエストし、JSON の一覧が返ればアドレスとキーは正しいです。ドキュメントの見分け方は 401 がキーの問題、404 がパスのプレフィックス違いで、Codex の base_url は https://api.qcode.cc/openai です。

情報源

OpenAI 側:Codex 公式ドキュメントの Authentication、Config basics、Advanced Configuration、Configuration Reference、Environment variables、コマンドラインオプション、IDE 拡張の設定ページ(developers.openai.com/codex と learn.chatgpt.com で同じ内容)、および Codex changelog と GitHub openai/codex の 0.156.0・0.159.0・0.160.0 のリリースノート。いずれも 2026-10-07 に取得。QCode 側:QCode ドキュメントの Codex 完全チュートリアル(2026-09-30 更新)、接続先と API 形式、エラーコード、トラブルシューティング、Cursor 接続の各ページを同日に取得。背景:GitHub openai/codex の issue 48237 と 401 関連の複数の issue を、ユーザー報告としてのみ引用。

1 本の cr_ キーで Codex も Claude Code も

Codex は https://api.qcode.cc/openai 経由で gpt-6-sol、gpt-6.1-sol などの GPT 系モデルを使えます。課金はトークン単位で、各モデルの単価は /models を参照してください。

関連記事

本ページの手順と引用は 2026-10-07 に OpenAI Codex の公式ドキュメント、changelog、QCode のドキュメントで照合したもので、食い違う場合は公式ページが優先です。上流の変更は予告なく行われることがあります。GitHub の issue にあるエラー文字列や説明はユーザー報告で、公式の見解ではありません。モデルの提供状況は /models が優先です。

まず試して、それから決める

どのプランか迷ったら、まずスターター($8.57/月)から。満足したらアップグレードし、旧プランの残り価値は按分で残高に戻ります。