Webhook エンドポイントの署名シークレットをローテーションする
POST /v1/webhook-endpoints/{endpoint_id}:rotate-secret · 権限 webhook-endpoints:write · すべてのプラン
新しい署名シークレットを発行し、一度だけ返します (Cache-Control: no-store)。previous_secret_ttl_hours (デフォルトは 24) の期間中、すべての配信には webhook-signature ヘッダーに 2 つの署名が含まれます。1 つは古いシークレット、もう 1 つは新しいシークレットによるものです。これにより、配信を失うことなく受信側を切り替えられます。0 を指定すると、古いシークレットはただちに無効になります (シークレットが漏えいした場合に使用してください)。同じ Idempotency-Key で同じリクエストを繰り返すと、シークレットを含まず secret_redacted: true を設定したエンドポイントが返されます。
リクエスト
| 項目 | 型 | 必須 | 説明 |
|---|---|---|---|
endpoint_id |
パス | はい | Webhook エンドポイント ID (whe_…)。 |
If-Match |
ヘッダー | いいえ | 指定する場合は、エンドポイントの現在の ETag と一致している必要があります。 |
previous_secret_ttl_hours |
整数 | いいえ | 古いシークレットで署名を続ける時間 (0〜168 時間)。デフォルトは 24 です。ボディは省略可能です。 |
Idempotency-Key |
ヘッダー | いいえ | 同じキーで繰り返されたリクエストに対して、(シークレットを除いた) レスポンスを再送します。 |
{
"previous_secret_ttl_hours": 24
}
レスポンス
200 OK で、エンドポイント、その新しい ETag、および新しいシークレットを返します。
{
"id": "whe_01k8a3m5q7t9v1w3x5y7z9b2c4",
"key": "crm-sync",
"url": "https://hooks.example.com/keenauth",
"description": "CRM sync",
"event_types": ["user.created", "user.updated"],
"event_schema_versions": {},
"payload_mode": "thin",
"status": "enabled",
"rate_limit_per_second": 50,
"previous_secret_expires_at": "2026-10-27T10:00:00Z",
"last_success_at": "2026-10-26T09:12:00Z",
"failing_since": null,
"version": 4,
"created_at": "2026-10-26T09:00:00Z",
"updated_at": "2026-10-26T10:00:00Z",
"signing_secret": "idp_whsec_<secret>"
}
エラー
| HTTP | code | 発生条件 |
|---|---|---|
| 400 | unknown_field |
ボディに、上記に記載されていないフィールドが含まれています。 |
| 404 | not_found |
この環境に該当するエンドポイントが存在しません。 |
| 412 | precondition_failed |
If-Match が現在のバージョンと一致しません。 |
| 422 | validation_failed |
/previous_secret_ttl_hours out_of_range: 値が 0〜168 の範囲外です。 |
| 422 | idempotency_key_reuse |
Idempotency-Key が、別のリクエストで使用されています。 |
| 401 | unauthenticated |
認証情報が存在しない、無効である、または取り消されています。 |
| 403 | insufficient_permissions |
認証情報に webhook-endpoints:write の権限がありません。 |
| 503 | service_unavailable |
Webhook の管理機能が一時的に利用できません。Retry-After の時間を置いてから再試行してください。 |
例
curl -X POST https://api.eu.keenauth.com/v1/webhook-endpoints/whe_01k8a3m5q7t9v1w3x5y7z9b2c4:rotate-secret \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4c6e8a0b-2d4f-4a6c-9e1b-3d5f7a9c1e3b" \
-d '{"previous_secret_ttl_hours":24}'
CLI: keenauth webhook-endpoints rotate-secret whe_01k8a3m5q7t9v1w3x5y7z9b2c4 --previous-secret-ttl-hours 24