API キー
API キーは、Brevo API で認証するための主要な方法です。アカウントにプログラムからアクセスするための、シンプルで安全な手段を提供します。
API キーとは
API キーは、Brevo API へリクエストを送るときにアプリケーションを認証する一意の識別子です。各キーは 64 文字の文字列で、識別子とパスワードの両方の役割を果たします。
Example API key: xkeysib-a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456-Ab1Cd2Ef3Gh4API キーを生成する
手順ガイド
- Brevo にログインする: Brevo ダッシュボードを開きます
- 設定へ移動する: プロフィール → 設定 の順にクリックします
- API キーを開く: 左メニューから「API Keys」を選択します
- 新しいキーを作成する: 「Generate a New API Key」をクリックします
- キーに名前を付ける: 用途が分かる名前を付けます(例:「Production App」「Development Testing」)
- 権限を設定する: 適切なアクセスレベルを選びます
- 生成する: 「Generate」をクリックし、表示されたキーをすぐにコピーします
API キーの命名規則
キーの用途が分かる名前を使ってください。
production-web-appstaging-environmentmobile-app-ioswebhook-listenerdata-sync-service
API キーの種類と権限
フルアクセスキー
Permissions: All API endpointsUse cases: Complete application integrationRisk level: High - protect carefully読み取り専用キー
Permissions: GET requests onlyUse cases: Analytics, reporting, dashboardsRisk level: Low - limited access送信専用キー
Permissions: Transactional email sendingUse cases: Application notifications, receiptsRisk level: Medium - can send emailsコンタクト管理キー
Permissions: Contact CRUD operationsUse cases: CRM integrations, form submissionsRisk level: Medium - data modificationAPI キーを使う
ヘッダーによる認証
api-key ヘッダーに API キーを含めます。
GET /v3/account HTTP/1.1Host: api.brevo.comAccept: application/jsonContent-Type: application/jsonapi-key: YOUR_API_KEYコード例
JavaScript/Node.js
const brevo = require('@getbrevo/brevo');
const apiInstance = new brevo.AccountApi();apiInstance.setApiKey(brevo.AccountApiApiKeys.apiKey, process.env.BREVO_API_KEY);
// Make authenticated requestapiInstance.getAccount() .then(data => console.log('Account info:', data)) .catch(error => console.error('Error:', error));Python
import sib_api_v3_sdkfrom sib_api_v3_sdk.rest import ApiException
# Configure API keyconfiguration = sib_api_v3_sdk.Configuration()configuration.api_key['api-key'] = 'YOUR_API_KEY'
# Create API instanceapi_instance = sib_api_v3_sdk.AccountApi(sib_api_v3_sdk.ApiClient(configuration))
try: # Get account info api_response = api_instance.get_account() print(api_response)except ApiException as e: print("Exception when calling AccountApi->get_account: %s\n" % e)PHP
<?phprequire_once(__DIR__ . '/vendor/autoload.php');
// Configure API key$config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'YOUR_API_KEY');
// Create API instance$apiInstance = new SendinBlue\Client\Api\AccountApi( new GuzzleHttp\Client(), $config);
try { $result = $apiInstance->getAccount(); print_r($result);} catch (Exception $e) { echo 'Exception when calling AccountApi->getAccount: ', $e->getMessage(), PHP_EOL;}?>Ruby
require 'sib-api-v3-sdk'
# Configure API keySibApiV3Sdk.configure do |config| config.api_key['api-key'] = 'YOUR_API_KEY'end
# Create API instanceapi_instance = SibApiV3Sdk::AccountApi.new
begin # Get account info result = api_instance.get_account puts resultrescue SibApiV3Sdk::ApiError => e puts "Exception when calling AccountApi->get_account: #{e}"endAPI キーのセキュリティ
安全な保管
環境変数(推奨)
# .env fileBREVO_API_KEY=xkeysib-your-api-key-here
# Usage in codeconst apiKey = process.env.BREVO_API_KEY;クラウドのシークレット管理サービス
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault
セキュリティのベストプラクティス
-
キーをハードコードしない
// ❌ Bad - hardcodedconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Good - environment variableconst apiKey = process.env.BREVO_API_KEY; -
環境ごとに別のキーを使う
Production: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDevelopment: BREVO_API_KEY_DEV -
キーを定期的にローテーションする
- 四半期ごとのローテーションをカレンダーでリマインドします
- キーのローテーションには自動化ツールを使います
- ロールバックの手順を用意しておきます
-
キーの利用状況を監視する
- 異常なアクティビティを検知するアラートを設定します
- キーの利用ログを毎月確認します
- アクセス元の地域の傾向を追跡します
キーの管理
有効なキーの監視
ダッシュボードで有効なキーを監視します。
Key Name: production-web-appCreated: 2024-01-15Last Used: 2024-01-20 14:30 UTCRequests Today: 1,247Status: Activeキーのローテーション手順
- 新しいキーを生成する: 置き換え用のキーを作成します
- 設定を更新する: 新しいキーでデプロイします
- 監視する: 新しいキーが正しく動作することを確認します
- 猶予期間を設ける: 古いキーを 24〜48 時間は有効なままにします
- 古いキーを失効させる: 以前のキーを削除します
緊急時のキー失効
キーが漏えいした場合の対応は次のとおりです。
- 直ちに失効させる: ダッシュボードからキーを削除します
- 代替キーを生成する: すぐに新しいキーを作成します
- アプリケーションを更新する: 新しいキーで可能な限り早くデプロイします
- アクティビティを監視する: 不正な利用がないか確認します
- インシデントを報告する: セキュリティインシデントとして記録します
レート制限と API キー
API キーごとに個別のレート制限があります。
- Free プラン: 1 日 300 リクエスト
- Starter プラン: 1 日 20,000 リクエスト
- Business プラン: 1 日 50,000 リクエスト
- Enterprise プラン: 個別の上限
レート制限のヘッダー
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200レート制限への対処
async function makeApiCall() { try { const response = await fetch(url, { headers });
if (response.status === 429) { const resetTime = response.headers.get('X-RateLimit-Reset'); const waitTime = resetTime - Math.floor(Date.now() / 1000);
console.log(`Rate limited. Waiting ${waitTime} seconds`); await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
// Retry the request return makeApiCall(); }
return response.json(); } catch (error) { console.error('API call failed:', error); throw error; }}API キーのトラブルシューティング
よくあるエラーメッセージ
無効な API キー (401)
{ "code": "unauthorized", "message": "Invalid API key provided"}権限不足 (403)
{ "code": "permission_denied", "message": "API key does not have required permissions"}レート制限の超過 (429)
{ "code": "too_many_requests", "message": "Rate limit exceeded for API key"}デバッグ用チェックリスト
- キーの形式が正しい(64 文字)
- 余分なスペースや不可視文字が入っていない
- キーに必要な権限がある
- キーが有効である(失効していない)
- レート制限の範囲内である
- 正しい API エンドポイントを使っている
- ヘッダーの形式が正しい
次のステップ
- OAuth 2.0 について学ぶ
- JWT トークンを理解する
- レート制限を調べる
- SDK を試す