Lister les sessions d'un utilisateur

GET /v1/users/{user_id}/sessions · autorisation sessions:read

Liste les sessions de l'utilisateur sur une seule page, les plus récemment vues en premier, à raison de 1 000 au maximum. La liste n'accepte ni limit, ni after, ni before, ni order, et list_metadata vaut toujours null. Par défaut, seules les sessions actives sont renvoyées ; avec include_inactive=true, les sessions expirées et révoquées (encore dans la durée de conservation) le sont aussi. L'adresse IP complète est affichée et chaque consultation est enregistrée dans le journal d'audit de gestion. Les cookies, les jetons et les empreintes d'appareil ne sont jamais renvoyés.

Périmètre de l'organisation

Transmettez org_id pour construire une vue de diagnostic d'un membre à l'intention d'un administrateur d'organisation. La clé doit alors aussi disposer de l'autorisation organizations:read ; sans elle, la requête échoue avec 403 insufficient_permissions avant toute lecture. Si l'utilisateur n'est pas membre de cette organisation (aucune adhésion invited, active ou suspended), la requête échoue avec 404 not_found, la même réponse que pour un utilisateur inconnu. Si l'utilisateur est membre, seules les sessions ouvertes selon la politique de cette organisation (sessions dont org_id correspond à cette organisation) sont renvoyées ; les sessions de l'utilisateur dans le contexte d'une autre organisation, ou hors de toute organisation, ne le sont jamais. ip_address et user_agent valent null dans cette vue. Sans org_id, la réponse est inchangée.

Requête

Paramètre Dans Obligatoire Description
user_id chemin oui Identifiant de l'utilisateur, préfixé usr_.
include_inactive requête non true pour renvoyer aussi les sessions expirées et révoquées. Vaut false par défaut.
org_id requête non Identifiant de l'organisation, préfixé org_. Limite la vue à cette organisation ; voir Périmètre de l'organisation. Requiert organizations:read.

Réponse

200 OK. Les champs vides valent null.

{
  "data": [
    {
      "id": "ses_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "status": "active",
      "login_host": "login.example.com",
      "auth_time": "2026-02-01T08:00:00Z",
      "acr": "mfa",
      "amr": ["pwd", "otp"],
      "created_at": "2026-02-01T08:00:00Z",
      "last_seen_at": "2026-02-01T09:15:00Z",
      "idle_expires_at": "2026-02-08T09:15:00Z",
      "absolute_expires_at": "2026-03-03T08:00:00Z",
      "org_id": null,
      "ip_address": "203.0.113.10",
      "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0)",
      "revoked_at": null,
      "revoke_reason": null
    }
  ],
  "list_metadata": {
    "before": null,
    "after": null
  }
}

status : active, expired, revoked · acr : 1fa, mfa, phr · org_id : l'organisation de la session, le cas échéant.

Erreurs

Chaque erreur est un corps application/problem+json accompagné d'un code stable.

HTTP code Quand
422 validation_failed include_inactive n'est ni true ni false.
404 not_found L'utilisateur n'existe pas dans cet environnement (ou l'identifiant est mal formé), ou org_id est fourni et l'utilisateur n'est pas membre de cette organisation.
401 unauthenticated La clé d'API est absente, invalide ou révoquée.
403 insufficient_permissions La clé ne dispose pas de l'autorisation sessions:read, ou org_id est fourni et la clé ne dispose pas de organizations:read.
429 rate_limited La limite de débit a été dépassée ; respectez Retry-After.
503 service_unavailable Une dépendance est temporairement indisponible ; réessayez plus tard.

Exemple

curl "https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/sessions?include_inactive=true" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"

CLI : keenauth users sessions list usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --include-inactive

Données personnelles

Cet endpoint traite des données personnelles : des sessions. Données personnelles dans les API KeenAuth décrit les données stockées, leur durée de conservation et leur mode de suppression. N'envoyez pas de catégories particulières de données personnelles (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.