
# Einen Benutzer aktualisieren

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

Aktualisiert einen Benutzer mit einem JSON-Merge-Patch (`Content-Type: application/merge-patch+json`). Nur die übermittelten Felder werden geändert. Textfelder werden mit `null` oder einer leeren Zeichenkette geleert; `email_verified` und `phone_verified` können nicht geleert werden; `address` wird insgesamt ersetzt; `user_metadata` und `app_metadata` werden Schlüssel für Schlüssel zusammengeführt, und ein `null`-Wert löscht diesen Schlüssel. Wird `user_metadata` oder `app_metadata` selbst als `null` übermittelt, werden alle Daten gelöscht und `{}` bleibt zurück. Der Status kann hier nicht geändert werden; verwenden Sie dafür Sperren und Entsperren. Ein Benutzer, dessen Löschung ansteht, kann nicht aktualisiert werden. `If-Match` ist optional: Wenn es übermittelt wird, muss es mit dem aktuellen `ETag` des Benutzers übereinstimmen.

## Anfrage

| Parameter | In | Erforderlich | Beschreibung |
|---|---|---|---|
| `user_id` | Pfad | ja | Benutzer-ID mit dem Präfix `usr_`. |
| `If-Match` | Header | nein | Das `ETag` aus einem vorherigen Lesevorgang. |

Der Body akzeptiert dieselben Felder wie [Benutzer anlegen](/docs/api/management/users/create), alle optional, zuzüglich der unten beschriebenen Altersfelder. Unbekannte Felder werden mit `unknown_field` abgelehnt.

### Alter und elterliche Zustimmung

Wenn Ihr eigener Prozess zur Altersprüfung oder zur elterlichen Zustimmung abgeschlossen ist, speichern Sie dessen Ergebnis mit diesen Feldern am Benutzer. Sie werden außerdem bei jedem Benutzerobjekt zurückgegeben; `null` bedeutet, dass der Benutzer noch nicht bewertet wurde.

| Feld | Werte | Hinweise |
|---|---|---|
| `age_group` | `adult`, `minor`, `unknown` | Kann nicht geleert werden; senden Sie `unknown`, wenn das Alter nicht bekannt ist. |
| `parental_consent_status` | `not_required`, `pending`, `granted`, `denied`, `revoked` | `null` leert das Feld. Jeder andere Wert außer `not_required` wird nur akzeptiert, wenn das `age_group` des Benutzers `minor` ist. |
| `age_assurance_level` | `self_declared`, `birthdate_declared`, `third_party_verified` | `null` leert das Feld. Gibt an, wie belastbar Ihr Prozess das Alter festgestellt hat. |

Eine Änderung an `age_group` oder `parental_consent_status` löst ein `user.updated`-Ereignis aus. Tragen Sie in diese Felder oder in die Metadaten weder ein Geburtsdatum noch eine Nummer eines Ausweisdokuments ein; übermitteln Sie nur das Ergebnis.

## Antwort

`200 OK`. Der Body ist das Benutzerobjekt. Der `ETag`-Header enthält die Version des Benutzers.

Personenbezogene Daten werden maskiert, wenn der Schlüssel nicht über die Berechtigung `users:read_pii` verfügt: `email` wird zu `a***@e***.com`, `phone_number` behält nur die letzten 2 Ziffern (`+**********67`), `name`, `given_name`, `family_name`, `middle_name` und `nickname` werden zu Initialen (`A. L.`), `username` behält nur das erste Zeichen (`a***`), `birthdate` wird zu `****-**-**` und `address` wird zu `{"redacted": true}`. `user_metadata` und `app_metadata` werden nicht maskiert.

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

## Fehler

Jeder Fehler ist ein `application/problem+json`-Body mit einem stabilen `code`.

| HTTP | `code` | Wann |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | Der Patch ist kein JSON-Objekt oder ein Feld ist nicht im Schema enthalten; oder `If-Match` ist fehlerhaft. |
| 409 | `conflict` | Der Wert wird bereits verwendet, oder der Benutzer hat eine anstehende Löschung (`errors[].code` ist `user_pending_deletion`). |
| 412 | `precondition_failed` | `If-Match` stimmt nicht mit der aktuellen Version überein. |
| 415 | `unsupported_media_type` | `Content-Type` ist nicht `application/merge-patch+json`. |
| 422 | `validation_failed` | Ein Wert ist ungültig oder hat den falschen Typ; `errors[].pointer` nennt das Feld. |
| 404 | `not_found` | Der Benutzer existiert in dieser Umgebung nicht (oder die ID ist fehlerhaft). |
| 401 | `unauthenticated` | Der API-Schlüssel fehlt, ist ungültig oder wurde widerrufen. |
| 403 | `insufficient_permissions` | Der Schlüssel verfügt nicht über die Berechtigung `users:write`. |
| 429 | `rate_limited` | Das Ratenlimit wurde überschritten; beachten Sie `Retry-After`. |
| 503 | `service_unavailable` | Eine Abhängigkeit ist vorübergehend nicht verfügbar; versuchen Sie es später erneut. |

## Beispiel

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

Erfassen Sie eine erteilte elterliche Zustimmung für einen Minderjährigen:

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

## Personenbezogene Daten

Dieser Endpunkt verarbeitet personenbezogene Daten: das Profil des Endnutzers. [Personenbezogene Daten in den KeenAuth-APIs](/docs/policies/personal-data) beschreibt, was gespeichert wird, wie lange es aufbewahrt wird und wie es gelöscht wird. Übermitteln Sie in keinem Feld besondere Kategorien personenbezogener Daten (Gesundheit, biometrische Daten, Religion, politische Meinungen, sexuelle Orientierung).
