年齢ポリシーを置き換える

PUT /v1/age-policy · 権限 identity-settings:write

年齢ポリシー全体を書き込みます。If-Match が必要です(欠落時は 428、一致しない場合は 412)。一度も書き込まれていないポリシーのバージョンは "0" です。ルール: min_age および国別しきい値は 13〜21 です。国コードは ISO 3166-1 alpha-2(大文字)で、最大 250 件です。parental_consent_below は null または 1..min_age です。store_birthdate は、mode が birthdate の場合にのみ true にできます。ポリシーは以降のサインアップにのみ適用され、既存のユーザーは変更されません。

リクエスト

JSON ボディ(未知のフィールドは 400 unknown_field で拒否されます):

フィールド 型 必須 説明
If-Match ヘッダー はい ヘッダー: GET /v1/age-policy の ETag 値。
mode 文字列 はい off、attestation(生年と生月を尋ねる中立的な質問、値は保存されません)、または birthdate。
min_age 整数 はい 13〜21。
country_min_age オブジェクト はい 国コード → しきい値(13〜21)。未指定の国は min_age を使用します。
country_source 文字列 はい ip または declared。
under_age_action 文字列 はい block または create_minor。
parental_consent_below 整数 | null いいえ null(保護者の同意なし)または 1..min_age。
pending_consent_action 文字列 はい block_sign_in または issue_limited。
store_birthdate 真偽値 はい mode: birthdate の場合にのみ true。
applies_to 文字列 はい self_signup または all。

レスポンス

ポリシーと ETag ヘッダーを含む 200 OK。

{
  "mode": "attestation",
  "min_age": 16,
  "country_min_age": {"DE": 16, "FR": 15, "IT": 14},
  "country_source": "ip",
  "under_age_action": "block",
  "parental_consent_below": null,
  "pending_consent_action": "block_sign_in",
  "store_birthdate": false,
  "applies_to": "self_signup",
  "updated_at": "2026-10-05T09:30:00.123456Z"
}

トークン

mode が off でない間、要求されたスコープに関係なく、ID トークン、アクセストークン、UserInfo レスポンスにはユーザーの age_group(adult、minor、または unknown)が含まれます。値がある場合は parental_consent_status(not_required、pending、granted、denied、または revoked)も含まれます。mode: off の場合は、どちらのクレームも発行されません。どちらも KeenAuth だけが書き込みます(お客様のフックやクレームテンプレートでは設定できません)。変更は PATCH /v1/users/{user_id} で行ってください。

pending_consent_action: block_sign_in の下では、parental_consent_status が pending、denied、または revoked のユーザーにはトークンが発行されません。認可リクエストは access_denied で終了し、トークンエンドポイントは認可コード、デバイスコード、リフレッシュトークンのグラントに対して invalid_grant(Parental consent has not been granted.)で応答します。リフレッシュトークンは取り消されません。同意が granted になると再び機能します。issue_limited の下ではトークンが発行され、お客様のアプリケーションがクレームからそのユーザーを制限します。

エラー

HTTP コード 発生条件
400 unknown_field ボディに未知のフィールドが含まれています。
412 precondition_failed If-Match が現在のバージョンと一致しません。
415 unsupported_media_type コンテンツタイプが application/json ではありません。
422 validation_failed フィールドが欠落している(required)か、上記のルールに違反しています。ポインターはフィールドを示します(例: /country_min_age/DE)。
428 precondition_required If-Match ヘッダーがありません。
401 unauthenticated 資格情報が存在しない、無効、または取り消されています。
403 insufficient_permissions 資格情報に必要な権限がありません。
429 rate_limited レート制限を超えました。Retry-After の期間を置いて再試行してください。
503 service_unavailable 依存先が一時的に利用できません。Retry-After の期間を置いて再試行してください。

例

curl -X PUT https://api.eu.keenauth.com/v1/age-policy \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H 'If-Match: "0"' \
  -d '{"mode":"attestation","min_age":16,"country_min_age":{"DE":16,"FR":15},"country_source":"ip","under_age_action":"block","parental_consent_below":null,"pending_consent_action":"block_sign_in","store_birthdate":false,"applies_to":"self_signup"}'