
# Kullanıcıyı güncelle

`PATCH /v1/users/{user_id}` · izin `users:write`

Kullanıcıyı bir JSON birleştirme yamasıyla (`Content-Type: application/merge-patch+json`) günceller. Yalnızca gönderdiğiniz alanlar değişir. Metin alanları `null` veya boş bir dizeyle temizlenir; `email_verified` ve `phone_verified` temizlenemez; `address` bütün olarak değiştirilir; `user_metadata` ve `app_metadata` anahtar anahtar birleştirilir ve `null` değeri o anahtarı siler; `user_metadata` veya `app_metadata` alanının kendisi `null` olarak gönderilirse tümü silinir ve `{}` kalır. Durum burada değiştirilemez; engelleme ve engeli kaldırma işlemlerini kullanın. Silinmeyi bekleyen bir kullanıcı güncellenemez. `If-Match` isteğe bağlıdır: gönderildiğinde kullanıcının mevcut `ETag` değeriyle eşleşmelidir.

## İstek

| Parametre | Konum | Zorunlu | Açıklama |
|---|---|---|---|
| `user_id` | yol | evet | Kullanıcı kimliği, `usr_` öneki ile. |
| `If-Match` | üstbilgi | hayır | Önceki bir okumadan gelen `ETag`. |

Gövde, [Kullanıcı oluştur](/docs/api/management/users/create) ile aynı alanları kabul eder; hepsi isteğe bağlıdır, ayrıca aşağıdaki yaş alanları da. Bilinmeyen alanlar `unknown_field` ile reddedilir.

### Yaş ve veli onayı

Kendi yaş doğrulama veya veli onayı süreciniz tamamlandığında, sonucunu bu alanlarla kullanıcıya kaydedin. Bunlar her kullanıcı nesnesinde de döndürülür; `null` değeri, kullanıcının değerlendirilmediği anlamına gelir.

| Alan | Değerler | Notlar |
|---|---|---|
| `age_group` | `adult`, `minor`, `unknown` | Temizlenemez; yaş bilinmiyorsa `unknown` gönderin. |
| `parental_consent_status` | `not_required`, `pending`, `granted`, `denied`, `revoked` | `null` değeri temizler. `not_required` dışındaki her değer yalnızca kullanıcının `age_group` değeri `minor` ise kabul edilir. |
| `age_assurance_level` | `self_declared`, `birthdate_declared`, `third_party_verified` | `null` değeri temizler. Sürecinizin yaşı ne kadar güçlü doğruladığını gösterir. |

`age_group` veya `parental_consent_status` değişikliği bir `user.updated` olayı yayımlar. Bu alanlar için ya da metinde doğum tarihini veya kimlik belgesi numarasını kullanmayın; yalnızca sonucu gönderin.

## Yanıt

`200 OK`. Gövde kullanıcı nesnesidir. `ETag` üstbilgisi kullanıcı sürümünü taşır.

Anahtarda `users:read_pii` izni yoksa kişisel veriler maskelenir: `email` değeri `a***@e***.com` olur, `phone_number` yalnızca son 2 rakamını tutar (`+**********67`), `name`, `given_name`, `family_name`, `middle_name` ve `nickname` baş harflere dönüşür (`A. L.`), `username` yalnızca ilk karakterini tutar (`a***`), `birthdate` `****-**-**` olur ve `address` `{"redacted": true}` olur. `user_metadata` ve `app_metadata` maskelenmez.

```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
}
```

## Hatalar

Her hata, kararlı bir `code` içeren bir `application/problem+json` gövdesidir.

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | Yama bir JSON nesnesi değil ya da bir alan şemada yok; veya `If-Match` hatalı biçimde. |
| 409 | `conflict` | Değer zaten kullanılıyor ya da kullanıcı silinmeyi bekliyor (`errors[].code` değeri `user_pending_deletion`). |
| 412 | `precondition_failed` | `If-Match` mevcut sürümle eşleşmiyor. |
| 415 | `unsupported_media_type` | `Content-Type` `application/merge-patch+json` değil. |
| 422 | `validation_failed` | Bir değer geçersiz ya da yanlış türde; `errors[].pointer` alanı belirtir. |
| 404 | `not_found` | Kullanıcı bu ortamda yok (ya da kimlik biçimi hatalı). |
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmiş. |
| 403 | `insufficient_permissions` | Anahtarda `users:write` izni yok. |
| 429 | `rate_limited` | Hız sınırı aşıldı; `Retry-After` değerine uyun. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyor; daha sonra tekrar deneyin. |

## Örnek

```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"}}'
```

Bir küçük için onaylanmış veli onayını kaydedin:

```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"}'
```

## Kişisel veriler

Bu uç nokta kişisel veri içerir: son kullanıcı profili. [KeenAuth API'lerinde kişisel veriler](/docs/policies/personal-data) hangi verilerin saklandığını, ne kadar süre tutulduğunu ve nasıl silindiğini açıklar. Hiçbir alanda özel nitelikli kişisel verileri (sağlık, biyometrik veriler, din, siyasi görüşler, cinsel yönelim) göndermeyin.
