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.
- 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:
{
"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
curl "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/subject-conflicts?limit=20" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
keenauth connections subject-conflicts list conn_01j9xp6q0r1s5t7v9w1x3y5z7b --limit 20