
# Elenco dei consensi di un utente

`GET /v1/users/{user_id}/consents` · autorizzazione `users:read`

Elenca i consensi OAuth che l'utente ha concesso alle applicazioni, dal più recente al più vecchio. Vengono restituiti solo i consensi attivi: un consenso revocato, o sostituito da un consenso più recente della stessa applicazione, non compare nell'elenco. L'elenco è paginato solo in avanti e non restituisce un conteggio totale. La risposta non include il testo della schermata di consenso che l'utente ha visto.

## Richiesta

| Parametro | In | Obbligatorio | Descrizione |
|---|---|---|---|
| `user_id` | path | sì | ID utente, con prefisso `usr_`. |
| `limit` | query | no | Elementi per pagina, da 1 a 100 (predefinito 20). |
| `after` | query | no | Cursore da `list_metadata.after` della pagina precedente dello stesso utente. |

`before` e `order=asc` non sono supportati e restituiscono `422`.

## Risposta

`200 OK`. I campi vuoti sono `null`.

```json
{
  "data": [
    {
      "id": "cns_01jb2k8m5c3f6t9w2y4b7d0g3k",
      "user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "application_id": "app_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "api_id": "api_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "org_id": null,
      "scopes": ["openid", "profile", "orders:read"],
      "authorization_details_types": [],
      "granted_at": "2026-10-20T09:00:00Z",
      "consent_screen_version": "3",
      "locale": "en",
      "prompt_reason": "scope_expansion"
    }
  ],
  "list_metadata": {"before": null, "after": null}
}
```

| Campo | Descrizione |
|---|---|
| `id` | ID del consenso, con prefisso `cns_`. |
| `application_id` | L'applicazione a cui è stato concesso il consenso. |
| `api_id` | L'API a cui il consenso è associato, se presente. |
| `org_id` | Il contesto dell'organizzazione in cui è stato concesso il consenso, se presente. |
| `scopes` | Gli scope concessi, ordinati e senza duplicati. |
| `authorization_details_types` | Tipi di richiesta di autorizzazione ricca concessi; vuoto se non ce ne sono. |
| `consent_screen_version`, `locale` | La versione e la lingua della schermata di consenso accettata dall'utente. |
| `prompt_reason` | Motivo per cui è stato chiesto il consenso: `first`, `scope_expansion`, `prompt_consent` o `skip_consent` (applicazione first-party senza schermata di consenso). |

## Errori

Ogni errore è un corpo `application/problem+json` con un `code` stabile.

| HTTP | `code` | Quando |
|---|---|---|
| 400 | `invalid_cursor` | Il cursore è malformato o appartiene a un altro elenco. |
| 422 | `validation_failed` | `limit` è fuori intervallo, oppure è stato inviato `before` o un `order` ascendente. |
| 404 | `not_found` | L'utente non esiste in questo ambiente (o l'ID è malformato). |
| 401 | `unauthenticated` | La chiave API manca, non è valida o è stata revocata. |
| 403 | `insufficient_permissions` | La chiave non ha l'autorizzazione `users:read`. |
| 429 | `rate_limited` | È stato superato il limite di richieste; rispetta `Retry-After`. |
| 503 | `service_unavailable` | Una dipendenza non è temporaneamente disponibile; riprova più tardi. |

## Esempio

```bash
curl "https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/consents?limit=50" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

CLI: `keenauth users consents list usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --limit 50`

## Dati personali

Questo endpoint contiene dati personali: record di consenso. [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.
