
# Profil aktualisieren

`PATCH /fapi/v1/me` · aufgerufen vom Anmeldehost der Umgebung

Ändert die Profilfelder des authentifizierten Benutzers. Ein Feld, das im Body enthalten ist, wird geändert. Ein fehlendes Feld bleibt unverändert, und ein leerer String oder `null` löscht das Feld. `user_metadata` wird, sofern angegeben, als Merge-Patch nach RFC 7396 zusammengeführt. Es gelten dieselben Feldregeln wie in der Management-API. Erforderlich ist das Cookie `__Host-idp_session` des authentifizierten Benutzers; eine erneute Verifizierung ist nicht nötig. Eine First-Party-App auf einem anderen Origin kann stattdessen ihr Front-API-Zugriffstoken senden (`Authorization: DPoP <token>` mit einem DPoP-Proof; siehe [Front-API-Zugriffstoken](/docs/api/fapi/front-api-token)).

Feldfehler (`422 validation_failed`, in `errors[]`): `invalid` (Format oder Länge; `/locale` auch dann, wenn die Sprache für die Umgebung nicht aktiviert ist), `too_large` und `too_many_keys` (`user_metadata` über 16 KiB, Tiefe 5 oder 100 Schlüssel auf oberster Ebene), `identifier_type_disabled` (Benutzernamen sind in der Umgebung deaktiviert), `profile_field_disabled` (die Umgebung hat das Feld deaktiviert; das Leeren ist weiterhin erlaubt) und `profile_field_required` (die Umgebung verlangt das Feld, daher kann es nicht geleert werden).

## Anfrage

Header:

| Header | Erforderlich | Beschreibung |
| --- | --- | --- |
| `Idp-Client` | ja | SDK-Kennung. |
| `Origin` | ja | Muss exakt `https://<Anmeldehost>` sein. |
| `If-Match` | nein | Optional. Der `ETag` einer früheren Antwort (oder `*`); die Änderung erfolgt nur, wenn das Profil noch in dieser Version vorliegt. |

Body (`application/json` oder `application/merge-patch+json`):

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `given_name` | string oder null | Vorname. |
| `family_name` | string oder null | Nachname. |
| `name` | string oder null | Vollständiger Name. |
| `picture` | string oder null | URL des Profilbilds (`https`). |
| `locale` | string oder null | Sprache (BCP-47-Tag). |
| `zoneinfo` | string oder null | Zeitzone (IANA-Name). |
| `username` | string oder null | Benutzername. |
| `user_metadata` | object | Merge-Patch, der auf `user_metadata` angewendet wird (RFC 7396). |

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

## Antwort

`200 OK` mit dem aktualisierten Profil (dieselben Felder wie bei `GET /fapi/v1/me`) und einem neuen `ETag`.

## Fehler

| Status | Code | Wann |
| --- | --- | --- |
| 400 | `malformed_request` | Der Body oder der `If-Match`-Header ist fehlerhaft. |
| 400 | `unknown_field` | Der Body enthält ein Feld, das hier nicht geändert werden kann (zum Beispiel `email` oder `app_metadata`). |
| 401 | `unauthenticated` | Kein gültiges Sitzungs-Cookie. |
| 403 | `origin_not_allowed` | `Origin` fehlt oder ist falsch. |
| 404 | `not_found` | Das Konto kann nicht gelesen werden (zum Beispiel gesperrt oder in der Löschung). |
| 409 | `username_unavailable` | Der Benutzername ist reserviert oder wird bereits von einem anderen Konto verwendet (beide Fälle führen zu derselben Antwort). |
| 412 | `precondition_failed` | `If-Match` stimmt nicht mit der aktuellen Version überein; es wurde nichts geändert. |
| 413 | `payload_too_large` | Der Body überschreitet 16 KiB. |
| 415 | `unsupported_media_type` | Nicht unterstützter `Content-Type`. |
| 422 | `validation_failed` | Ein Feld verletzt eine Regel; `errors[]` nennt das Feld und den Grund (siehe oben). |
| 503 | `service_unavailable` | Das Benutzerverzeichnis ist vorübergehend nicht verfügbar; wiederholen Sie die Anfrage nach `Retry-After` Sekunden. |

## Beispiel

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

## Personenbezogene Daten

Dieser Endpunkt verarbeitet personenbezogene Daten: das Endbenutzerprofil. [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. Senden Sie in keinem Feld besondere Kategorien personenbezogener Daten (Gesundheit, biometrische Daten, Religion, politische Meinungen, sexuelle Orientierung).
