HiAPI
ブログ

チュートリアル

OpenAI API キーが無効:401、環境変数とプロジェクト設定の調査

OpenAI の 401、403、429 を区別し、環境変数、組織とプロジェクトの設定を確認し、読み取り専用リクエストで認証情報を検証します。

Oct 25, 2026
OpenAI API キーが無効:401、環境変数とプロジェクト設定の調査

TL;DR

OpenAI が 401 を返し、キーが正しくないと表示された場合は、まず認証情報、実行時の変数、組織またはプロジェクトの設定を確認します。429 の場合はエラーコードに応じてレート、残高、利用上限を確認します。403 も具体的な理由を読む必要があります。

Python のサンプルを実行する前に、同じ Python 環境で python -m pip install requests を実行してください。

まずエラーの種類を区別する

レスポンス 確認する方向性
401、Incorrect API key の表示 キー全体、綴り、失効状態、および所属
401、その他の認証メッセージ 組織のメンバーシップ、権限、IP 制限などの具体的な理由
403 レスポンスの理由(地域やその他のアクセス制限など)を読む
429 レート制限、残高、組織またはプロジェクトの利用上限を区別する

sk- の接頭辞だけでキーが有効だと判断しないでください。キー全体、対象ドメイン、アカウント設定がすべて一致している必要があります。

5 ステップで実行環境を確認する

  1. OpenAI を呼び出しているのか、互換プラットフォームを呼び出しているのかを確認する。各プラットフォームでそれぞれのキーを使用する。
  2. 実際のプロセスの OPENAI_API_KEY を確認し、空値、プレースホルダー、誤コピーを排除する。
  3. 環境変数の読み込み優先順位を確認する。デプロイプラットフォームの値がローカルの .env を上書きしている可能性がある。
  4. キーが失効していないか、またそれが属する組織とプロジェクトを確認する。組織やプロジェクトのリクエストヘッダーを明示的に設定している場合は、それらの値が一致していることを確認する。むやみにヘッダーを追加しない。
  5. 実行環境を再読み込みした後に読み取り専用の確認を行う。エラーが続く場合はレスポンスのリクエスト ID を記録し、アカウント責任者に連絡する。

ローカル確認で認証情報を出力しない

import os

name = "OPENAI_API_KEY"
key = os.environ.get(name, "")
print({
    "variable": name,
    "present": bool(key),
    "length": len(key),
    "has_whitespace": any(c.isspace() for c in key),
    "wrapped_in_quotes": len(key) >= 2 and key[0] == key[-1] and key[0] in (chr(34), chr(39)),
})

リクエストヘッダー全体を出力するデバッグログを使用しないでください。また、キーを 16 進数に変換してチケットに貼り付けないでください。それは依然としてキー全体です。

読み取り専用の検証リクエスト

サーバー環境で以下のコードを実行します。これはモデル一覧を取得するもので、コンテンツ生成は送信しません。制限付きのキーは読み取り権限が不足しているため拒否される場合があります。200 以外のレスポンスをすべてキーの破損と判断してはいけません。

import os
import re
import requests

key = os.environ.get("OPENAI_API_KEY", "")
if not key or any(ord(c) < 33 or ord(c) > 126 for c in key) or any(c in key for c in (chr(34), chr(39))):
    raise SystemExit("Check the key environment variable: empty, whitespace, control characters, or quotes")
try:
    response = requests.get(
        "https://api.openai.com/v1/models",
        headers={"Authorization": f"Bearer {key}"},
        timeout=30,
    )
except requests.RequestException as exc:
    raise SystemExit("Request failed: " + type(exc).__name__) from None
print("HTTP", response.status_code)
if response.ok:
    print("Model list received")
else:
    try:
        body = response.json()
        error = body.get("error", {})
        message = str(error.get("message") or body.get("message") or "")
        message = message.replace(key, "[REDACTED]")
        message = re.sub(r"sk-[A-Za-z0-9_*.-]+", "[REDACTED]", message)
        print("code:", error.get("code") or body.get("error_code"))
        print("type:", error.get("type"))
        print("message:", message)
        print("request_id:", error.get("request_id") or response.headers.get("x-request-id"))
    except ValueError:
        print("Non-JSON response; check the base URL and network path")

HiAPI に切り替える際の確認事項

HiAPI を使用する場合は、キーを HIAPI_API_KEY に変更し、Base URL には HiAPI のアドレスを使用して、モデルページに従ってリクエストエンドポイントを選択します。まず HiAPI 認証の説明 と インターフェース選択ガイド をお読みください。

2 回のリクエストはそれぞれのプラットフォームの認証情報を独立して使用する必要があり、OpenAI のキーを HiAPI に送って「分離検証」を行うことはできません。

よくある質問

キーの接頭辞が正しければ、必ず使用できるのでしょうか?

接頭辞だけで判断することはできません。キー全体、失効状態、アカウント設定も確認する必要があります。

401 に遭遇したらすぐにチャージすべきでしょうか?

まずレスポンスが示す認証の理由に対処してください。残高や利用上限のエラーは対応するエラーコードに応じて個別に処理する必要があります。

すべてのリクエストに組織やプロジェクトのリクエストヘッダーを付ける必要がありますか?

むやみに追加しないでください。複数組織や旧式のユーザーキーなどの場合はコンテキストを正しく選択する必要があります。すでに設定したリクエストヘッダーは、使用する認証情報と一致していなければなりません。

HiAPI のキーで直接 OpenAI にリクエストできますか?

互換性はありません。HiAPI と OpenAI はそれぞれ認証情報を管理しており、ドメインとキーが対応している必要があります。

HiAPI キーエラーの調査を続ける。

永続的なAIアーティファクトで開発を始める

APIキーを取得して、タスクベースの1つのAPIで画像・動画・音声モデルを呼び出せます。

APIドキュメントを読む