APIリクエストで X-API-Key ヘッダーを渡す方法 (2026年版)
ヘッダーによる API キー認証の実践的なガイド
Hyperealで構築を始めよう
Kling、Flux、Sora、Veoなどに単一のAPIでアクセス。無料クレジットで開始、数百万規模まで拡張可能。
クレジットカード不要 • 10万人以上の開発者 • エンタープライズ対応
APIリクエストで X-API-Key ヘッダーを渡す方法 (2026年版)
X-API-Key ヘッダーは、REST APIにおける最も一般的な認証方法の一つです。シンプルで広くサポートされており、あらゆるプログラミング言語で簡単に実装できます。このガイドでは、主要な言語やツールで X-API-Key ヘッダーを渡す具体的な方法と、セキュリティのベストプラクティスについて解説します。
X-API-Key ヘッダーとは?
X-API-Key ヘッダーは、リクエストと一緒に API キーを送信するために使用されるカスタム HTTP ヘッダーです。API サーバーはこのキーを確認し、呼び出し元の認証と認可を行います。
一般的なリクエストは以下のようになります。
GET /api/v1/users HTTP/1.1
Host: api.example.com
X-API-Key: sk_live_abc123def456
Content-Type: application/json
歴史的に X- プレフィックスは非標準のヘッダーであることを示していましたが、この慣習は RFC 6648 によって廃止(非推奨)されました。それにもかかわらず、X-API-Key は現在でも API キー用ヘッダーとして最も広く使われている名称です。
X-API-Key と他の認証方法の比較
| 認証方法 | ヘッダー | ユースケース | セキュリティレベル |
|---|---|---|---|
| X-API-Key | X-API-Key: <key> |
サービス間連携、公開 API | 中 |
| Bearer Token | Authorization: Bearer <token> |
ユーザー認証、OAuth | 高 |
| Basic Auth | Authorization: Basic <base64> |
シンプルなユーザー名/パスワード | 低 |
| Query Parameter | ?api_key=<key> |
レガシー API (非推奨) | 低 |
cURL で X-API-Key を渡す方法
cURL は、コマンドラインから API キー認証をテストする最も素早い方法です。
# X-API-Key を使用した GET リクエスト
curl -H "X-API-Key: sk_live_abc123def456" \
https://api.example.com/v1/users
# X-API-Key と JSON ボディを使用した POST リクエスト
curl -X POST \
-H "X-API-Key: sk_live_abc123def456" \
-H "Content-Type: application/json" \
-d '{"name": "John", "email": "john@example.com"}' \
https://api.example.com/v1/users
# 環境変数を使用する方法 (推奨)
export API_KEY="sk_live_abc123def456"
curl -H "X-API-Key: $API_KEY" \
https://api.example.com/v1/users
Python で X-API-Key を渡す方法
`requests` ライブラリを使用する場合
import os
import requests
api_key = os.environ["API_KEY"]
# GET リクエスト
response = requests.get(
"https://api.example.com/v1/users",
headers={"X-API-Key": api_key}
)
print(response.json())
# POST リクエスト
response = requests.post(
"https://api.example.com/v1/users",
headers={"X-API-Key": api_key},
json={"name": "John", "email": "john@example.com"}
)
print(response.status_code)
複数のリクエストに Session を使用する場合
同じ API に対して複数のリクエストを行う場合は、ヘッダーの繰り返しを避けるためにセッションを使用します。
import os
import requests
session = requests.Session()
session.headers.update({
"X-API-Key": os.environ["API_KEY"],
"Content-Type": "application/json"
})
# このセッション内のすべてのリクエストに API キーが含まれる
users = session.get("https://api.example.com/v1/users").json()
posts = session.get("https://api.example.com/v1/posts").json()
`httpx` (非同期) を使用する場合
import os
import httpx
async def fetch_users():
async with httpx.AsyncClient(
headers={"X-API-Key": os.environ["API_KEY"]}
) as client:
response = await client.get("https://api.example.com/v1/users")
return response.json()
JavaScript で X-API-Key を渡す方法
Fetch API を使用する場合 (ブラウザ & Node.js)
const apiKey = process.env.API_KEY;
// GET リクエスト
const response = await fetch("https://api.example.com/v1/users", {
headers: {
"X-API-Key": apiKey,
},
});
const data = await response.json();
// POST リクエスト
const postResponse = await fetch("https://api.example.com/v1/users", {
method: "POST",
headers: {
"X-API-Key": apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "John",
email: "john@example.com",
}),
});
Axios を使用する場合
import axios from "axios";
// デフォルトヘッダーを設定した axios インスタンスを作成
const api = axios.create({
baseURL: "https://api.example.com/v1",
headers: {
"X-API-Key": process.env.API_KEY,
},
});
// すべてのリクエストに自動的に API キーが含まれる
const users = await api.get("/users");
const newUser = await api.post("/users", {
name: "John",
email: "john@example.com",
});
Go で X-API-Key を渡す方法
package main
import (
"fmt"
"net/http"
"os"
"io"
)
func main() {
apiKey := os.Getenv("API_KEY")
req, err := http.NewRequest("GET", "https://api.example.com/v1/users", nil)
if err != nil {
panic(err)
}
req.Header.Set("X-API-Key", apiKey)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
PHP で X-API-Key を渡す方法
<?php
$apiKey = getenv('API_KEY');
// cURL を使用する場合
$ch = curl_init('https://api.example.com/v1/users');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-Key: $apiKey",
"Content-Type: application/json",
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
// Guzzle を使用する場合
$client = new \GuzzleHttp\Client([
'base_uri' => 'https://api.example.com/v1/',
'headers' => [
'X-API-Key' => $apiKey,
],
]);
$response = $client->get('users');
$data = json_decode($response->getBody(), true);
API テストツールで X-API-Key を渡す方法
Postman
- Postman でリクエストを開きます
- Headers タブをクリックします
- 新しいヘッダーを追加します:
- Key:
X-API-Key - Value:
{{api_key}}(Postman 変数を使用)
- Key:
- 再利用できるように、Postman 環境(Environment)に変数を設定します
HTTPie
# HTTPie はクリーンなヘッダー構文を使用します
http GET https://api.example.com/v1/users \
X-API-Key:sk_live_abc123def456
# JSON ボディを使用した POST
http POST https://api.example.com/v1/users \
X-API-Key:sk_live_abc123def456 \
name=John email=john@example.com
セキュリティのベストプラクティス
1. API キーをハードコードしない
# 低品質 - キーがソースコード内に含まれている
headers = {"X-API-Key": "sk_live_abc123def456"}
# 高品質 - キーを環境変数から取得している
headers = {"X-API-Key": os.environ["API_KEY"]}
2. 環境変数やシークレットマネージャーを使用する
# .env ファイル (これをコミットしてはいけません)
API_KEY=sk_live_abc123def456
# アプリケーションで dotenv 等を使用してロードします
.gitignore に .env を追加してください:
# .gitignore
.env
.env.local
.env.production
3. 常に HTTPS を使用する
HTTP 経由で送信される API キーは、平文で公開されてしまいます。必ず HTTPS エンドポイントを使用してください。
# 低品質 - ネットワーク上の誰にでもキーが見えてしまう
curl -H "X-API-Key: sk_live_abc123" http://api.example.com/v1/users
# 高品質 - TLS で暗号化されている
curl -H "X-API-Key: sk_live_abc123" https://api.example.com/v1/users
4. キーを定期的にローテーションする
ほとんどの API プロバイダーでは、複数のキーを作成できます。開発用と本番用で別々のキーを使用し、定期的に更新(ローテーション)してください。
5. キーの権限を制限する
API プロバイダーがサポートしている場合は、キーのスコープを特定の操作に限定します。
| キー | 権限 | 環境 |
|---|---|---|
sk_dev_xxx |
読み取り専用 | 開発 |
sk_staging_xxx |
読み取り/書き込み | ステージング |
sk_prod_xxx |
読み取り/書き込み (IP制限あり) | 本番 |
エラーハンドリング
API キー認証に失敗した際の一般的な HTTP レスポンス:
| ステータスコード | 意味 | 主な原因 |
|---|---|---|
| 401 Unauthorized | キーの欠落または無効 | キーのタイポ、期限切れ |
| 403 Forbidden | キーは有効だが権限不足 | 必要なスコープがキーに付与されていない |
| 429 Too Many Requests | レート制限超過 | 短時間にリクエストを送りすぎている |
response = requests.get(url, headers={"X-API-Key": api_key})
if response.status_code == 401:
print("APIキーが無効です。認証情報を確認してください。")
elif response.status_code == 403:
print("このエンドポイントにアクセスする権限がありません。")
elif response.status_code == 429:
retry_after = response.headers.get("Retry-After", 60)
print(f"レート制限に達しました。{retry_after}秒後に再試行してください。")
まとめ
X-API-Key ヘッダーの受け渡しは、どの言語やツールでも非常にシンプルです。最も重要なポイントは、API キーを絶対にハードコードせず、常に HTTPS を使い、環境変数やシークレットマネージャーに保存することです。
もし X-API-Key 認証を採用しているメディア生成 API をお探しなら、Hypereal AI がおすすめです。AI 画像生成やビデオ作成などへのシンプルな API キーベースのアクセスを提供しており、本ガイドで示したパターンをそのまま活用できます。
