Listar las sesiones de un usuario
GET /v1/users/{user_id}/sessions · permiso sessions:read
Lista las sesiones del usuario en una sola página, primero las vistas más recientemente, con un máximo de 1,000. La lista no tiene limit, after, before ni order, y list_metadata siempre tiene valor null. Por defecto solo se devuelven las sesiones activas; con include_inactive=true también se devuelven las sesiones expiradas y revocadas (que aún estén dentro del período de retención). La dirección IP completa se muestra y cada consulta se registra en el registro de auditoría de administración. Las cookies, los tokens y las huellas digitales del dispositivo nunca se devuelven.
Ámbito de organización
Indique org_id para construir una vista de diagnóstico de miembros para un administrador de la organización. La clave también necesita entonces el permiso organizations:read; sin él, la solicitud falla con 403 insufficient_permissions antes de leer nada. Si el usuario no es miembro de esa organización (no tiene una membresía invited, active o suspended), la solicitud falla con 404 not_found, la misma respuesta que para un usuario desconocido. Si el usuario es miembro, solo se devuelven las sesiones abiertas bajo la política de esa organización (sesiones cuyo org_id es esa organización); las sesiones del usuario en el contexto de otra organización, o fuera de cualquier organización, nunca se devuelven. ip_address y user_agent son null en esta vista. Sin org_id, la respuesta no cambia.
Solicitud
| Parámetro | En | Obligatorio | Descripción |
|---|---|---|---|
user_id |
ruta | sí | ID del usuario, con el prefijo usr_. |
include_inactive |
consulta | no | true para devolver también las sesiones expiradas y revocadas. Por defecto es false. |
org_id |
consulta | no | ID de la organización, con el prefijo org_. Limita la vista a esa organización; consulte Ámbito de organización. Requiere organizations:read. |
Respuesta
200 OK. Los campos vacíos son 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: la organización de la sesión, si la tiene.
Errores
Cada error es un cuerpo application/problem+json con un code estable.
| HTTP | code |
Cuándo |
|---|---|---|
| 422 | validation_failed |
include_inactive no es true ni false. |
| 404 | not_found |
El usuario no existe en este entorno (o el ID está mal formado), o se indica org_id y el usuario no es miembro de esa organización. |
| 401 | unauthenticated |
La clave de API falta, no es válida o fue revocada. |
| 403 | insufficient_permissions |
La clave no tiene el permiso sessions:read, o se indica org_id y la clave no tiene organizations:read. |
| 429 | rate_limited |
Se superó el límite de frecuencia; respete Retry-After. |
| 503 | service_unavailable |
Una dependencia no está disponible temporalmente; reintente más tarde. |
Ejemplo
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
Datos personales
Este endpoint contiene datos personales: sesiones. Datos personales en las API de KeenAuth describe qué se almacena, cuánto tiempo se conserva y cómo se elimina. No envíe categorías especiales de datos personales (salud, datos biométricos, religión, opiniones políticas, orientación sexual) en ningún campo.