# APIキー

APIキーにより、サーバーがDailyPlay
APIで認証できます。キーはダッシュボードから作成し、API呼び出し時に`x-api-key`ヘッダーで使用します。

:::note[Businessティア以上が必要]
APIキーは**Businessティア**以上の組織でのみ利用可能です。
:::
## APIキーの作成

1. DailyPlayダッシュボードにログイン
2. サイドバーの**Connect → APIキー**に移動
3. **APIキーを作成**をクリック
4. 名前（例：「本番CRM」）と任意の説明を入力
5. AIエージェント用なら任意で**MCPスコープ**を有効化（下記参照）
6. 任意で有効期限を設定
7. **作成**をクリック

:::caution
生成されたキーは即座にコピーしてください — 一度しか表示されず、後から取得することはできません。
:::
キーの形式は`dpk_<40桁の16進文字>`です。例：

```
dpk_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
```

## キーのスコープ

APIキーはアクセスできるリソースを制限するようにスコープ設定できます：

| スコープ                       | 説明                                                      |
| ------------------------------ | --------------------------------------------------------- |
| **すべてのゲーム＆ストリーム** | デフォルト — 組織内のすべてのリソースにセッション作成可能 |
| **特定のゲーム**               | ゲームIDのリストに制限                                    |
| **特定のストリーム**           | ストリームIDのリストに制限                                |

キーのスコープ外のリソースにセッションを作成しようとすると、`403 Forbidden`エラーが返されます。

## MCPスコープ

ゲーム/ストリームの許可リストに加え、キーに**MCPスコープ**を付与するとリモートの[MCPサーバー](/ja/api/mcp/)にアクセスできます。スコープはデフォルト拒否です：

| スコープ | 許可内容 |
| --- | --- |
| _(なし)_ | セッショントークン発行のみ（従来 / REST） |
| `mcp:templates:read` | テンプレートの一覧・詳細 |
| `mcp:games:read` / `mcp:games:write` | ゲームと賞品の読み取りまたは作成/更新 |
| `mcp:streams:read` / `mcp:streams:write` | ストリームの読み取りまたは作成/更新 |
| `mcp:connections:read` / `mcp:connections:write` | 組織インテグレーションの管理 |
| `mcp:gallery:read` / `mcp:gallery:write` | ギャラリーメディアの一覧または未使用アセットの削除 |
| `mcp:vouchers:read` / `mcp:vouchers:write` | バウチャーセットとコードの読み取りまたは管理 |
| `mcp:reports:read` | 組織の分析・レポートの読み取り |
| `mcp:ai` | ブランド抽出、ファネルウィザード、画像生成 |
| `mcp:sessions:write` | MCP経由でのプレイセッション発行 |

キーをローテーションせずにAPIキー一覧からMCPスコープを後から編集できます。ツール一覧は[MCPツール](/ja/api/mcp-tools/)を参照してください。

## レート制限

各APIキーには設定可能なレート制限があります：

| 制限 | デフォルト | 説明                   |
| ---- | ---------- | ---------------------- |
| 毎分 | 60         | 毎分の最大リクエスト数 |
| 毎日 | 10,000     | 毎日の最大リクエスト数 |

レート制限を超えると、APIは`429 Too Many Requests`レスポンスを返します。

## キーの取り消し

ダッシュボードからいつでもAPIキーを取り消せます：

1. **Connect → APIキー**に移動
2. リストでキーを見つける（`dpk_****`プレフィックスと名前で識別）
3. 取り消しアクションをクリック

取り消しの効果：

- そのキーを使用するすべてのAPI呼び出しを即座にブロック
- そのキーで既に作成されたセッショントークンは**無効化されない**
- 監査証跡を保持 — キーレコードは保持されるが非アクティブとしてマーク
- 必要に応じて再アクティブ化可能

## セキュリティ

- キーは保存前に**SHA-256でハッシュ化** — データベースから生のキーは復元不可
- 識別用に最初の8文字（`dpk_xxxx`）のみプレーンテキストで保存
- キーは特定の日付で**自動的に期限切れ**に設定可能
- すべてのキー使用は監査目的でログに記録

## APIによるキー管理

認証済みリクエスト（Clerkベアラートークン）を使用して、プログラム的にAPIキーを管理することもできます：

| メソッド | エンドポイント                          | 説明                        |
| -------- | --------------------------------------- | --------------------------- |
| `GET`    | `/api/org-api-keys?org_id=<id>`         | 組織のすべてのAPIキーを一覧 |
| `POST`   | `/api/org-api-keys`                     | 新しいAPIキーを作成         |
| `PATCH`  | `/api/org-api-keys`                     | APIキーを更新または取り消し |
| `DELETE` | `/api/org-api-keys?id=<id>&org_id=<id>` | APIキーを完全に削除         |

### キーの作成（API）

```bash
curl -X POST https://app.dailyplay.ai/api/org-api-keys \
  -H "Authorization: Bearer <clerk_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "org_id": 1,
    "name": "本番CRM",
    "description": "CRMがゲームリンクを発行するために使用",
    "allowed_game_ids": [42, 43],
    "rate_limit_per_minute": 60,
    "rate_limit_per_day": 10000,
    "expires_at": "2027-01-01T00:00:00Z"
  }'
```

レスポンスには生のキーが含まれます（一度だけ表示）：

```json
{
  "success": true,
  "data": {
    "id": 1,
    "name": "本番CRM",
    "key_prefix": "dpk_a1b2",
    "key": "dpk_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
  }
}
```