
# Elenca i conflitti di soggetto di una connessione

`GET /v1/connections/{connection_id}/subject-conflicts` · autorizzazione `users:read`

Elenca i conflitti di soggetto SSO di un'organizzazione con connessione enterprise (SAML o OIDC), dal più recente.

Un conflitto di soggetto viene registrato quando il provider di identità invia un **nuovo soggetto** con l'indirizzo email verificato di un utente già collegato alla stessa connessione con un soggetto diverso. Succede, per esempio, quando la casella di un ex dipendente viene assegnata a un nuovo dipendente. KeenAuth non collega automaticamente il nuovo soggetto: l'accesso viene rifiutato con `sso_subject_conflict` e viene aperto un record perché un amministratore lo [risolva](resolve-subject-conflict.md).

- Finché un record è aperto, altri accessi con lo stesso soggetto aggiornano quel record invece di aprirne uno nuovo.
- Un record aperto scade 30 giorni dopo l'apertura.
- I record non contengono mai il soggetto esterno né l'indirizzo email.

L'autorizzazione è `users:read` perché un record riguarda un account utente; per risolverlo serve `users:write`.

## Richiesta

| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| `connection_id` | path | sì | ID della connessione (`conn_…`). |
| `limit` | query | no | Dimensione della pagina, 1–100 (predefinito 20). |
| `after` / `before` | query | no | Cursore da `list_metadata`. Un cursore funziona solo per la connessione che l'ha prodotto. |
| `order` | query | no | `desc` (predefinito) o `asc`, per data di creazione. |

## Risposta

`200 OK`:

```json
{
  "data": [
    {
      "id": "sscf_01j9xr4a6b8c0d2e4f6g8h0j2k",
      "connection_id": "conn_01j9xp6q0r1s5t7v9w1x3y5z7b",
      "user_id": "usr_01j9xm2n4p6q8r0s2t4v6w8x0y",
      "status": "open",
      "resolution": null,
      "created_at": "2026-10-28T10:00:00Z",
      "last_seen_at": "2026-10-28T10:05:00Z",
      "expires_at": "2026-11-27T10:00:00Z",
      "closed_at": null
    }
  ],
  "list_metadata": { "before": null, "after": null }
}
```

| Campo | Descrizione |
|---|---|
| `user_id` | L'utente che possiede l'indirizzo email verificato ed è già collegato a questa connessione con un altro soggetto. |
| `status` | `open` (in attesa di una decisione), `resolved` o `expired` (chiuso 30 giorni dopo l'apertura, senza una decisione). |
| `resolution` | `same_person` o `different_person`; impostato solo quando `status` è `resolved`. |
| `last_seen_at` | Il tentativo di accesso più recente con il nuovo soggetto. |
| `closed_at` | Quando il record è stato risolto o è scaduto; `null` finché è aperto. Un record scaduto può mostrare anche `null`. |

## Errori

| HTTP | code | Quando |
|---|---|---|
| 400 | `invalid_cursor` | Il cursore è malformato o appartiene a un'altra connessione o query. |
| 401 | `unauthenticated` | La credenziale manca, non è valida o è stata revocata. |
| 403 | `insufficient_permissions` | La credenziale non ha `users:read`. |
| 404 | `not_found` | La connessione non esiste in questo ambiente. |
| 422 | `validation_failed` | Un parametro di query non è valido (per esempio `limit` superiore a 100). |
| 429 | `rate_limited` | È stato superato il limite di richieste; riprova dopo il periodo indicato in `Retry-After`. |
| 503 | `service_unavailable` | Una dipendenza non è disponibile temporaneamente; riprova dopo il periodo indicato in `Retry-After`. |

## Esempio

```bash
curl "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/subject-conflicts?limit=20" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth connections subject-conflicts list conn_01j9xp6q0r1s5t7v9w1x3y5z7b --limit 20
```
