年齢ポリシーを置き換える
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"}'