
# 메타데이터 업데이트

`PATCH /fapi/v1/me/metadata` · 환경의 로그인 호스트에서 호출

인증된 사용자의 `user_metadata`에 RFC 7396 병합 패치를 적용합니다. `app_metadata`는 이 엔드포인트에서 쓸 수 없습니다. 결과는 최대 16 KiB, 깊이 5, 최상위 키 100개까지 허용됩니다. 사용자의 `__Host-idp_session` 쿠키가 필요하며 최근 재인증은 필요하지 않습니다. 다른 출처의 자사 앱은 대신 프런트 API 액세스 토큰(DPoP 증명과 함께 `Authorization: DPoP <token>`)을 보낼 수 있습니다. [프런트 API 액세스 토큰](/docs/api/fapi/front-api-token)을 참조하세요.

## 요청

헤더:

| 헤더 | 필수 | 설명 |
| --- | --- | --- |
| `Idp-Client` | 예 | SDK 식별자입니다. |
| `Origin` | 예 | 정확히 `https://<sign-in host>`이어야 합니다. |
| `If-Match` | 아니요 | 선택 사항입니다. 이전 응답의 `ETag`(또는 `*`)이며, 프로필이 아직 해당 버전일 때만 변경됩니다. |

본문(`application/merge-patch+json` 또는 `application/json`): 병합 패치 자체이며 JSON 객체입니다. 값이 `null`인 키는 제거되며, 중첩 객체는 병합됩니다.

```json
{
  "theme": null,
  "preferences": {
    "newsletter": false
  }
}
```

## 응답

업데이트된 프로필(`GET /fapi/v1/me`와 같은 필드)과 새 `ETag`가 포함된 `200 OK`입니다.

## 오류

| 상태 | 코드 | 발생 조건 |
| --- | --- | --- |
| 400 | `malformed_request` | 본문이 JSON 객체가 아니거나 `If-Match` 헤더 형식이 잘못되었습니다. |
| 401 | `unauthenticated` | 유효한 세션 쿠키가 없습니다. |
| 403 | `origin_not_allowed` | `Origin`이 없거나 잘못되었습니다. |
| 404 | `not_found` | 계정을 읽을 수 없습니다(예: 차단되었거나 삭제 중인 경우). |
| 412 | `precondition_failed` | `If-Match`가 현재 버전과 일치하지 않습니다. 아무것도 변경되지 않았습니다. |
| 413 | `payload_too_large` | 본문이 16 KiB를 초과합니다. |
| 415 | `unsupported_media_type` | 지원하지 않는 `Content-Type`입니다. |
| 422 | `validation_failed` | 패치가 비어 있거나 결과가 한도(`too_large`, `too_many_keys`)를 초과합니다. 포인터는 본문 루트입니다. |
| 503 | `service_unavailable` | 사용자 디렉터리를 일시적으로 사용할 수 없습니다. `Retry-After`초 후에 다시 시도하세요. |

## 예제

```bash
curl -X PATCH https://example.keenauth.app/fapi/v1/me/metadata \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/merge-patch+json" \
  -b cookies.txt \
  -d '{"theme":null}'
```

## 개인정보

이 엔드포인트는 개인정보를 포함합니다: 최종 사용자 프로필. [KeenAuth API의 개인정보](/docs/policies/personal-data)에서 저장되는 항목, 보관 기간, 삭제 방법을 확인하세요. 어떤 필드에도 민감정보(건강, 생체 정보, 종교, 정치적 견해, 성적 지향)를 보내지 마세요.
