
# ユーザーを更新

`PATCH /v1/users/{user_id}` · 権限 `users:write`

JSON マージパッチ（`Content-Type: application/merge-patch+json`）でユーザーを更新します。送信したフィールドのみが変更されます。テキストフィールドは `null` または空文字列を送信するとクリアされます。`email_verified` と `phone_verified` はクリアできません。`address` は全体が置き換えられます。`user_metadata` と `app_metadata` はキーごとにマージされ、値が `null` のキーは削除されます。`user_metadata` または `app_metadata` 自体を `null` として送信すると、すべてが削除され `{}` になります。ステータスはここでは変更できません。ブロックとブロック解除を使用してください。削除保留中のユーザーは更新できません。`If-Match` は任意です。送信する場合、ユーザーの現在の `ETag` と一致する必要があります。

## リクエスト

| パラメーター | 場所 | 必須 | 説明 |
|---|---|---|---|
| `user_id` | path | はい | `usr_` で始まるユーザー ID。 |
| `If-Match` | header | いいえ | 以前の読み取りで取得した `ETag`。 |

リクエストボディには、[ユーザーを作成](/docs/api/management/users/create) と同じフィールドをすべて任意で指定できます。さらに、以下の年齢フィールドも指定できます。スキーマにないフィールドは `unknown_field` により拒否されます。

### 年齢と保護者の同意

お客様独自の年齢確認または保護者の同意プロセスが完了したら、その結果を以下のフィールドでユーザーに記録してください。これらのフィールドは、すべてのユーザーオブジェクトにも返されます。`null` は、ユーザーが評価されていないことを意味します。

| フィールド | 値 | 備考 |
|---|---|---|
| `age_group` | `adult`, `minor`, `unknown` | クリアできません。年齢が不明な場合は `unknown` を送信してください。 |
| `parental_consent_status` | `not_required`, `pending`, `granted`, `denied`, `revoked` | `null` でクリアされます。`not_required` 以外の値は、ユーザーの `age_group` が `minor` の場合にのみ受け付けられます。 |
| `age_assurance_level` | `self_declared`, `birthdate_declared`, `third_party_verified` | `null` でクリアされます。お客様のプロセスがどの程度強固に年齢を確認したかを示します。 |

`age_group` または `parental_consent_status` を変更すると、`user.updated` イベントが発行されます。これらのフィールドやメタデータに、これをサポートする目的で生年月日や身分証明書番号を入れないでください。結果のみを送信してください。

## レスポンス

`200 OK`。ボディはユーザーオブジェクトです。`ETag` ヘッダーにはユーザーのバージョンが含まれます。

キーが `users:read_pii` 権限を持たない場合、個人データはマスクされます。`email` は `a***@e***.com` になります。`phone_number` は末尾 2 桁のみを残します（`+**********67`）。`name`、`given_name`、`family_name`、`middle_name`、`nickname` はイニシャルになります（`A. L.`）。`username` は先頭 1 文字のみを残します（`a***`）。`birthdate` は `****-**-**` になり、`address` は `{"redacted": true}` になります。`user_metadata` と `app_metadata` はマスクされません。

```json
{
  "id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
  "kind": "regular",
  "status": "active",
  "external_id": null,
  "username": null,
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "email_verified": true,
  "phone_number": null,
  "phone_verified": false,
  "age_group": "adult",
  "parental_consent_status": null,
  "age_assurance_level": "self_declared",
  "user_metadata": {},
  "app_metadata": {},
  "created_via": "admin_api",
  "created_at": "2026-01-15T09:30:00Z",
  "updated_at": "2026-01-15T09:30:00Z",
  "last_sign_in_at": null,
  "deletion_requested_at": null,
  "deletion_due_at": null
}
```

## エラー

すべてのエラーは、安定した `code` を持つ `application/problem+json` ボディで返されます。

| HTTP | `code` | 発生条件 |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | パッチが JSON オブジェクトではない、またはフィールドがスキーマにない。または `If-Match` の形式が不正。 |
| 409 | `conflict` | 値がすでに使用されている、またはユーザーが削除保留中（`errors[].code` は `user_pending_deletion`）。 |
| 412 | `precondition_failed` | `If-Match` が現在のバージョンと一致しない。 |
| 415 | `unsupported_media_type` | `Content-Type` が `application/merge-patch+json` ではない。 |
| 422 | `validation_failed` | 値が無効、または型が誤っている。`errors[].pointer` がフィールドを示します。 |
| 404 | `not_found` | この環境にユーザーが存在しない（または ID の形式が不正）。 |
| 401 | `unauthenticated` | API キーが欠落している、無効、または取り消されている。 |
| 403 | `insufficient_permissions` | キーに `users:write` 権限がない。 |
| 429 | `rate_limited` | レート制限を超過した。`Retry-After` に従ってください。 |
| 503 | `service_unavailable` | 依存サービスが一時的に利用できない。後で再試行してください。 |

## 例

```bash
curl -X PATCH https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -d '{"name": "Ada King", "app_metadata": {"tier": "gold"}}'
```

未成年者について、承認された保護者の同意を記録する場合:

```bash
curl -X PATCH https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -d '{"age_group": "minor", "parental_consent_status": "granted", "age_assurance_level": "third_party_verified"}'
```

## 個人データ

このエンドポイントは個人データを扱います。対象は、エンドユーザーのプロフィールです。[KeenAuth API における個人データ](/docs/policies/personal-data) では、保存される内容、保存期間、削除方法について説明しています。いかなるフィールドにも、特別な種類の個人データ（健康、生体情報、宗教、政治的意見、性的指向）を送信しないでください。
