MeWrite Docs

API Key Invalid / Expired

APIキーが無効、期限切れ、または未設定の場合に発生するエラー

概要

API Key Invalid / API Key Expired は、APIへのリクエスト時に使用するAPIキーが無効、期限切れ、または未設定の場合に発生するエラーです。多くのサードパーティAPIやクラウドサービスで共通して見られます。

エラーメッセージ

Error: Invalid API key provided
1
2
3
4
5
6
7
{
  "error": {
    "code": 401,
    "message": "API key not valid. Please pass a valid API key.",
    "status": "UNAUTHENTICATED"
  }
}
openai.AuthenticationError: Incorrect API key provided: sk-xxxx...xxxx
Error 403: The API key is expired. Please renew your API key.

原因

  1. APIキーの期限切れ: キーの有効期限が過ぎている
  2. 環境変数の未設定: .env や環境変数にキーが設定されていない
  3. 誤ったキーの使用: テスト用キーを本番で使用、または逆
  4. キーの取り消し: 管理画面からキーが無効化されている
  5. レート制限の超過: リクエスト上限に達してキーが一時的に無効化
  6. キーのフォーマット不正: コピー時の空白や改行の混入

解決策

1. 環境変数の設定

1
2
3
4
5
6
7
8
9
# .env ファイル
API_KEY=sk-1234567890abcdef
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxx
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxx
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE

# 環境変数が正しく設定されているか確認
echo $API_KEY
printenv | grep API_KEY
1
2
# .env が読み込まれているか確認(Node.js)
node -e "require('dotenv').config(); console.log(process.env.API_KEY)"

2. Node.js での安全なAPIキー管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// dotenv で環境変数を読み込み
require('dotenv').config();

const apiKey = process.env.API_KEY;
if (!apiKey) {
  throw new Error('API_KEY environment variable is not set');
}

// OpenAI の例
const { OpenAI } = require('openai');
const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY // 未設定だとエラー
});

3. Python での安全なAPIキー管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import os
from dotenv import load_dotenv

load_dotenv()

api_key = os.getenv('API_KEY')
if not api_key:
    raise ValueError("API_KEY environment variable is not set")

# OpenAI の例
from openai import OpenAI
client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))

# リクエスト時のエラーハンドリング
import openai
try:
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": "Hello"}]
    )
except openai.AuthenticationError:
    print("APIキーが無効です。キーを確認してください。")
except openai.RateLimitError:
    print("レート制限に達しました。しばらく待ってから再試行してください。")

4. APIキーの検証

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# OpenAI APIキーの検証
curl -s -o /dev/null -w "%{http_code}" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  https://api.openai.com/v1/models

# Google API キーの検証
curl -s "https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=$GOOGLE_API_KEY"

# Stripe APIキーの検証
curl -s -u "$STRIPE_SECRET_KEY:" https://api.stripe.com/v1/charges?limit=1

5. レート制限への対処

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// エクスポネンシャルバックオフで再試行
async function apiRequestWithRetry(fn, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await fn();
    } catch (error) {
      if (error.status === 429) {
        const retryAfter = error.headers?.['retry-after'] || Math.pow(2, i);
        console.log(`Rate limited. Retrying after ${retryAfter}s...`);
        await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
        continue;
      }
      throw error;
    }
  }
  throw new Error('Max retries exceeded');
}

6. .gitignore でキーの漏洩を防止

# 環境変数ファイル
.env
.env.local
.env.production

# APIキーファイル
*credentials*
*secret*
*.key

関連エラー

Security の他のエラー

最終更新: 2026-02-03