
# プロフィールを更新

`PATCH /fapi/v1/me` · 環境のサインインホストから呼び出し

認証済みユーザーのプロフィール項目を変更します。ボディに含まれる項目は変更され、含まれない項目はそのまま残ります。空文字列または `null` を指定すると、その項目はクリアされます。`user_metadata` を指定すると、RFC 7396 のマージパッチとしてマージされます。フィールドのルールは管理 API と同じです。認証済みユーザーの `__Host-idp_session` Cookie が必要です。直近の再認証は不要です。別オリジンの自社アプリは、代わりにフロントAPIアクセストークン（DPoP 証明付きの `Authorization: DPoP <token>`。[フロントAPIアクセストークン](/docs/api/fapi/front-api-token) を参照）を送信できます。

フィールドのエラー（`422 validation_failed`、`errors[]` 内）：`invalid`（形式または長さ。`/locale` では、その言語が環境で有効でない場合も含む）、`too_large` と `too_many_keys`（`user_metadata` が 16 KiB を超える、深さが 5 を超える、またはトップレベルのキーが 100 を超える）、`identifier_type_disabled`（環境でユーザー名が無効）、`profile_field_disabled`（環境でその項目が無効。クリアは引き続き可能）、`profile_field_required`（環境でその項目が必須のため、クリアできない）。

## リクエスト

ヘッダー：

| ヘッダー | 必須 | 説明 |
| --- | --- | --- |
| `Idp-Client` | はい | SDK の識別子。 |
| `Origin` | はい | 正確に `https://<sign-in host>` である必要があります。 |
| `If-Match` | いいえ | 任意。以前のレスポンスの `ETag`（または `*`）。プロフィールが同じバージョンのままの場合にのみ変更されます。 |

ボディ（`application/json` または `application/merge-patch+json`）：

| フィールド | 型 | 説明 |
| --- | --- | --- |
| `given_name` | string または null | 名。 |
| `family_name` | string または null | 姓。 |
| `name` | string または null | 氏名。 |
| `picture` | string または null | 画像の URL（`https`）。 |
| `locale` | string または null | 言語（BCP 47 タグ）。 |
| `zoneinfo` | string または null | タイムゾーン（IANA 名）。 |
| `username` | string または null | ユーザー名。 |
| `user_metadata` | object | `user_metadata` に適用されるマージパッチ（RFC 7396）。 |

```json
{
  "given_name": "Ada",
  "zoneinfo": "",
  "user_metadata": {
    "theme": null
  }
}
```

## レスポンス

`200 OK` と、更新後のプロフィール（`GET /fapi/v1/me` と同じフィールド）および新しい `ETag` が返されます。

## エラー

| ステータス | コード | 条件 |
| --- | --- | --- |
| 400 | `malformed_request` | ボディまたは `If-Match` ヘッダーの形式が不正です。 |
| 400 | `unknown_field` | ここでは変更できないフィールド（例：`email` や `app_metadata`）がボディに含まれています。 |
| 401 | `unauthenticated` | 有効なセッション Cookie がありません。 |
| 403 | `origin_not_allowed` | `Origin` がないか、不正です。 |
| 404 | `not_found` | アカウントを読み取れません（例：ブロックされている、または削除処理中）。 |
| 409 | `username_unavailable` | ユーザー名が予約されているか、別のアカウントで使用されています（どちらも同じ応答になります）。 |
| 412 | `precondition_failed` | `If-Match` が現在のバージョンと一致しません。何も変更されていません。 |
| 413 | `payload_too_large` | ボディが 16 KiB を超えています。 |
| 415 | `unsupported_media_type` | サポートされていない `Content-Type` です。 |
| 422 | `validation_failed` | フィールドがルールに違反しています。`errors[]` にフィールド名と理由が示されます（上記を参照）。 |
| 503 | `service_unavailable` | ユーザーディレクトリが一時的に利用できません。`Retry-After` の秒数後に再試行してください。 |

## 例

```bash
curl -X PATCH https://example.keenauth.app/fapi/v1/me \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H 'If-Match: "7"' \
  -H "Content-Type: application/json" \
  -b cookies.txt \
  -d '{"given_name":"Ada","zoneinfo":""}'
```

## 個人データ

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