
# 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](#périmètre-de-lorganisation). Requiert `organizations:read`. |

## Réponse

`200 OK`. Les champs vides valent `null`.

```json
{
  "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

```bash
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](/docs/policies/personal-data) 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.
