← ブログに戻る
コラム

invalid_api_key(401)の原因と直し方:Incorrect API key provided

FastMetal

六角形の持ち手の金属の鍵と、光っていない六角形の錠のイラスト。invalid_api_keyを表しています

この記事の要点

  • invalid_api_key は、送ったAPIキーをOpenAIが認証できないときのHTTP 401です。メッセージは Incorrect API key provided で始まります。
  • Anthropicでは401の authentication_error で、メッセージは invalid x-api-key です。
  • 原因の多くは、キーの余分な空白や改行、環境変数の読み込み漏れ、別のサービスのキーの取り違えです。
  • まず curl でキーだけを確かめると、キーの問題かコードの問題かを切り分けられます。

コードを変えていないのに急に401が出た場合は、キーの失効も疑います。

invalid_api_key のエラー本文

実際に無効なキーでOpenAI APIを呼ぶと、HTTP 401で次の本文が返ります(2026年11月10日に確認)。キーは途中が伏せられて表示されます。

{
  "error": {
    "message": "Incorrect API key provided: sk-doc-c****************-000. You can find your API key at https://platform.openai.com/account/api-keys.",
    "type": "invalid_request_error",
    "param": null,
    "code": "invalid_api_key"
  }
}

ヘッダー自体がない場合は、同じ401でも You didn't provide an API key. から始まるメッセージになり、code は null です。

Anthropicの authentication_error

Anthropic APIに無効なキーを送ると、HTTP 401で次の本文が返ります(同日に確認。request_id は一例です)。

{
  "type": "error",
  "error": {
    "type": "authentication_error",
    "message": "invalid x-api-key"
  },
  "request_id": "req_011CgvQYVzMW2xSesgpXWSRA"
}

Anthropicのドキュメントでは、キーの形式の誤り、失効、期限切れなどが原因に挙げられています。

よくある原因

OpenAIのエラーコードのガイドと、現場で起きやすいものを合わせると、次のとおりです。

原因確かめ方
キーの前後の空白や改行長さを確かめる、コード側で strip() する
環境変数が読み込まれていない同じシェルで長さを表示する
削除または無効にしたキーが残っている新しいキーを作って差し替える
別の組織やプロジェクトのキーキーの発行元を確かめる
OpenAIのキーを別のサービスへ送っているbase_url とキーの組み合わせを確かめる
ヘッダーの種類の違いAuthorization か x-api-key かを確かめる

curlで切り分ける

キーそのものを画面に出さず、長さと末尾の改行を確かめます。

echo "${#FASTMETAL_API_KEY}"
printf '%s' "$FASTMETAL_API_KEY" | tail -c 1 | od -c

次にモデル一覧を取得します。200 が返ればキーは有効で、問題はコードの側にあります。

curl -s -o /dev/null -w "%{http_code}\n" \
  https://api.fastmetal.ai/v1/models \
  -H "Authorization: Bearer $FASTMETAL_API_KEY"

Pythonでは、読み込んだ時点で空白を落としておきます。

import os

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["FASTMETAL_API_KEY"].strip(),
    base_url="https://api.fastmetal.ai/v1",
)
print(len(client.models.list().data))

FastMetalのAPIキーの設定

FastMetalのAPIキーは sk- で始まり、作成時に一度だけ表示されます。ヘッダーは Authorization: Bearer です。キーをなくしたら、新しいキーを作り直します。

Claude Codeで使うときは、環境変数の名前に注意します。ANTHROPIC_API_KEY は x-api-key ヘッダーとして送られ、FastMetalでは拒否されます。ANTHROPIC_AUTH_TOKEN を使います。

export ANTHROPIC_AUTH_TOKEN="$FASTMETAL_API_KEY"
export ANTHROPIC_BASE_URL="https://api.fastmetal.ai"

ANTHROPIC_BASE_URL に /v1 は付けません。付けると /v1/v1/messages になり、404になります。詳しくはClaude Codeのガイドにあります。

FastMetalは、OpenAI互換とAnthropic互換のAPIを1つのキーで使える日本のAIゲートウェイです。料金は料金ページで確認できます。

よくある質問

作ったばかりのキーで401になります

コピーのときに端が欠けていないか、前後に空白が入っていないかを確かめます。環境変数を変えた後は、シェルやサーバーの再起動も必要です。

invalid_request_error なのに401なのはなぜですか

OpenAIの本文では type が invalid_request_error のまま、code が invalid_api_key になります。判定には code かHTTPステータスを使います。

APIキーをコードに書いても大丈夫ですか

避けます。環境変数やシークレットの管理機能から読み込み、リポジトリには入れません。漏れた可能性があるキーは、すぐに無効にして作り直します。

OpenAIのキーをFastMetalで使えますか

使えません。FastMetalで発行したキーを使い、base_url を https://api.fastmetal.ai/v1 に変えます。

まとめ

401が出たら、キーの空白と環境変数、接続先との組み合わせの順に確かめます。curl でモデル一覧を取得すれば、キーの問題かどうかはすぐに分かります。

FastMetalのキーは、無料でアカウントを作成すると発行できます。

最新のAIモデルを今すぐ試す

最新のAIモデルはFastMetalのAPIキー1つで利用できます。ブラウザですぐに試す、またはOpenAI SDKからそのまま呼び出せます。