
# Listar los conflictos de sujeto de una conexión

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

Lista los conflictos de sujeto SSO de una organización con conexión empresarial (SAML u OIDC), del más reciente al más antiguo.

Se registra un conflicto de sujeto cuando el proveedor de identidad envía un **sujeto nuevo** con la dirección de correo electrónico verificada de un usuario que ya está vinculado a la misma conexión con otro sujeto. Esto ocurre, por ejemplo, cuando el buzón de un antiguo empleado se asigna a un nuevo empleado. KeenAuth no vincula automáticamente el nuevo sujeto: el inicio de sesión se rechaza con `sso_subject_conflict` y se abre un registro para que un administrador lo [resuelva](resolve-subject-conflict.md).

- Mientras un registro esté abierto, los nuevos inicios de sesión con el mismo sujeto actualizan ese registro en lugar de abrir uno nuevo.
- Un registro abierto caduca 30 días después de abrirse.
- Los registros nunca contienen el sujeto externo ni la dirección de correo electrónico.

El permiso es `users:read` porque un registro afecta a una cuenta de usuario; para resolverlo se necesita `users:write`.

## Solicitud

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `connection_id` | path | sí | ID de la conexión (`conn_…`). |
| `limit` | query | no | Tamaño de página, 1–100 (por defecto 20). |
| `after` / `before` | query | no | Cursor de `list_metadata`. Un cursor solo funciona para la conexión que lo generó. |
| `order` | query | no | `desc` (por defecto) o `asc`, por fecha de creación. |

## Respuesta

`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 | Descripción |
|---|---|
| `user_id` | El usuario que es propietario de la dirección de correo electrónico verificada y ya está vinculado a esta conexión con otro sujeto. |
| `status` | `open` (a la espera de una decisión), `resolved` o `expired` (cerrado 30 días después de abrirse, sin decisión). |
| `resolution` | `same_person` o `different_person`; solo se establece cuando `status` es `resolved`. |
| `last_seen_at` | El intento de inicio de sesión más reciente con el nuevo sujeto. |
| `closed_at` | Cuándo se resolvió o caducó el registro; `null` mientras esté abierto. Un registro caducado también puede mostrar `null`. |

## Errores

| HTTP | código | Cuándo |
|---|---|---|
| 400 | `invalid_cursor` | El cursor está mal formado o pertenece a otra conexión o consulta. |
| 401 | `unauthenticated` | Falta la credencial, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La credencial no tiene `users:read`. |
| 404 | `not_found` | La conexión no existe en este entorno. |
| 422 | `validation_failed` | Un parámetro de consulta no es válido (por ejemplo, `limit` mayor que 100). |
| 429 | `rate_limited` | Se superó el límite de frecuencia; reintente después del periodo indicado en `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; reintente después del periodo indicado en `Retry-After`. |

## Ejemplo

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