
# Aggiorna il tuo profilo

`PATCH /fapi/v1/me` · chiamato dall'host di accesso dell'ambiente

Modifica i campi del profilo dell'utente autenticato. Un campo presente nel corpo viene modificato, un campo assente resta invariato, e una stringa vuota o `null` cancella il campo. `user_metadata`, se fornito, viene unito come RFC 7396 merge patch. Si applicano le stesse regole sui campi dell'API di gestione. Richiede il cookie `__Host-idp_session` dell'utente autenticato; non è necessaria una verifica recente. Un'app first-party su un'altra origine può invece inviare il proprio access token dell'API front (`Authorization: DPoP <token>` con una prova DPoP; vedi [Access token dell'API front](/docs/api/fapi/front-api-token)).

Errori sui campi (`422 validation_failed`, in `errors[]`): `invalid` (formato o lunghezza; `/locale` anche quando la lingua non è abilitata per l'ambiente), `too_large` e `too_many_keys` (`user_metadata` oltre 16 KiB, profondità 5 o 100 chiavi di primo livello), `identifier_type_disabled` (i nomi utente sono disattivati nell'ambiente), `profile_field_disabled` (l'ambiente ha disattivato il campo; cancellarlo resta consentito) e `profile_field_required` (l'ambiente richiede il campo, quindi non può essere cancellato).

## Richiesta

Header:

| Header | Obbligatorio | Descrizione |
| --- | --- | --- |
| `Idp-Client` | sì | Identificativo dell'SDK. |
| `Origin` | sì | Deve essere esattamente `https://<sign-in host>`. |
| `If-Match` | no | Facoltativo. Il `ETag` di una risposta precedente (o `*`); la modifica viene eseguita solo se il profilo è ancora a quella versione. |

Corpo (`application/json` o `application/merge-patch+json`):

| Campo | Tipo | Descrizione |
| --- | --- | --- |
| `given_name` | stringa o null | Nome. |
| `family_name` | stringa o null | Cognome. |
| `name` | stringa o null | Nome completo. |
| `picture` | stringa o null | URL dell'immagine (`https`). |
| `locale` | stringa o null | Lingua (tag BCP 47). |
| `zoneinfo` | stringa o null | Fuso orario (nome IANA). |
| `username` | stringa o null | Nome utente. |
| `user_metadata` | oggetto | Merge patch applicata a `user_metadata` (RFC 7396). |

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

## Risposta

`200 OK` con il profilo aggiornato (stessi campi di `GET /fapi/v1/me`) e un nuovo `ETag`.

## Errori

| Stato | Codice | Quando |
| --- | --- | --- |
| 400 | `malformed_request` | Il corpo o l'header `If-Match` è malformato. |
| 400 | `unknown_field` | Il corpo contiene un campo che non può essere modificato qui (ad esempio `email` o `app_metadata`). |
| 401 | `unauthenticated` | Cookie di sessione assente o non valido. |
| 403 | `origin_not_allowed` | `Origin` manca o è errato. |
| 404 | `not_found` | L'account non può essere letto (ad esempio bloccato o in cancellazione). |
| 409 | `username_unavailable` | Il nome utente è riservato o già usato da un altro account (entrambi ricevono la stessa risposta). |
| 412 | `precondition_failed` | `If-Match` non corrisponde alla versione attuale; non è cambiato nulla. |
| 413 | `payload_too_large` | Il corpo supera 16 KiB. |
| 415 | `unsupported_media_type` | `Content-Type` non supportato. |
| 422 | `validation_failed` | Un campo viola una regola; `errors[]` indica il campo e il motivo (vedi sopra). |
| 503 | `service_unavailable` | La directory utenti è temporaneamente non disponibile; riprova dopo i secondi indicati in `Retry-After`. |

## Esempio

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

## Dati personali

Questo endpoint tratta dati personali: profilo dell'utente finale. [Dati personali nelle API di KeenAuth](/docs/policies/personal-data) descrive cosa viene memorizzato, per quanto tempo viene conservato e come viene cancellato. Non inviare categorie particolari di dati personali (salute, dati biometrici, religione, opinioni politiche, orientamento sessuale) in nessun campo.
