Lister les conflits de sujet d'une connexion
GET /v1/connections/{connection_id}/subject-conflicts · permission users:read
Liste les conflits de sujet SSO d'une connexion d'entreprise (SAML ou OIDC), du plus récent au plus ancien.
Un conflit de sujet est enregistré lorsque le fournisseur d'identité envoie un nouveau sujet avec l'adresse e-mail vérifiée d'un utilisateur déjà lié à la même connexion sous un autre sujet. Cela se produit, par exemple, lorsque la boîte e-mail d'un ancien employé est attribuée à un nouvel employé. KeenAuth ne lie pas automatiquement le nouveau sujet : la connexion est refusée avec sso_subject_conflict et un enregistrement est ouvert afin qu'un administrateur le résolve.
- Tant qu'un enregistrement est ouvert, les nouvelles connexions avec le même sujet mettent à jour cet enregistrement au lieu d'en ouvrir un nouveau.
- Un enregistrement ouvert expire 30 jours après son ouverture.
- Les enregistrements ne contiennent jamais le sujet externe ni l'adresse e-mail.
L'autorisation est users:read car un enregistrement concerne un compte utilisateur ; sa résolution nécessite users:write.
Requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
connection_id |
path | oui | Identifiant de la connexion (conn_…). |
limit |
query | non | Taille de page, de 1 à 100 (par défaut 20). |
after / before |
query | non | Curseur issu de list_metadata. Un curseur ne fonctionne que pour la connexion qui l'a produit. |
order |
query | non | desc (par défaut) ou asc, selon la date de création. |
Réponse
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 }
}
| Champ | Description |
|---|---|
user_id |
L'utilisateur qui possède l'adresse e-mail vérifiée et qui est déjà lié à cette connexion sous un autre sujet. |
status |
open (en attente d'une décision), resolved ou expired (fermé 30 jours après son ouverture, sans décision). |
resolution |
same_person ou different_person ; renseigné uniquement lorsque status vaut resolved. |
last_seen_at |
La dernière tentative de connexion avec le nouveau sujet. |
closed_at |
Date à laquelle l'enregistrement a été résolu ou expiré ; null tant qu'il est ouvert. Un enregistrement expiré peut aussi afficher null. |
Erreurs
| HTTP | code | Quand |
|---|---|---|
| 400 | invalid_cursor |
Le curseur est mal formé ou appartient à une autre connexion ou à une autre requête. |
| 401 | unauthenticated |
L'identifiant d'accès est absent, invalide ou révoqué. |
| 403 | insufficient_permissions |
L'identifiant d'accès ne dispose pas de users:read. |
| 404 | not_found |
La connexion n'existe pas dans cet environnement. |
| 422 | validation_failed |
Un paramètre de requête est invalide (par exemple limit supérieur à 100). |
| 429 | rate_limited |
La limite de débit a été dépassée ; réessayez après la période indiquée par Retry-After. |
| 503 | service_unavailable |
Un service dont dépend l'API est temporairement indisponible ; réessayez après la période indiquée par Retry-After. |
Exemple
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