Informe de miembros inactivos
GET /v1/reports/inactive-members · permiso reports:read
Lista los miembros activos de una organización que no han tenido ningún inicio de sesión correcto en esa organización durante los últimos days días. Úselo para encontrar cuentas que eliminar cuando una conexión no tiene aprovisionamiento SCIM: revise la lista y, después, suspenda las membresías seleccionadas con POST /v1/organizations/{org_id}/memberships/{membership_id}:suspend.
El entorno siempre procede de la clave de API; no existe un parámetro de entorno. Las filas contienen solo identificadores y marcas de tiempo, sin nombre, dirección de correo electrónico, dirección IP ni User-Agent. Como los identificadores de usuario son datos personales, el informe se limita a las claves con reports:read.
Qué cuenta como inicio de sesión
Una autenticación correcta cuenta cuando se completó en el contexto de esta organización. Un inicio de sesión sin organización seleccionada no cuenta. No se incluye una membresía cuya activación (activated_at, o su fecha de creación si nunca se activó) sea posterior al umbral; por eso, un miembro que se unió ayer nunca aparece en un informe de 30 días.
Solicitud
| Parámetro | En | Obligatorio | Descripción |
|---|---|---|---|
organization_id |
consulta | sí | La organización (org_…). |
days |
consulta | no | Umbral de inactividad en días, de 7 a 365. Predeterminado 30. |
limit |
consulta | no | Tamaño de página, de 1 a 100. Predeterminado 50. |
cursor |
consulta | no | next_cursor de la página anterior. Válido solo para el entorno, organization_id y days para los que se emitió. |
Las filas siguen el orden en que se actualizaron por última vez las membresías. El umbral (inactive_since) se calcula una sola vez, en la primera página, y se transporta en el cursor, de modo que todas las páginas de un mismo informe usan el mismo instante.
Una página analiza como máximo 500 membresías y puede devolver menos filas que limit, incluso ninguna. Siga usando next_cursor hasta que sea null.
Respuesta
200 OK.
| Campo | Descripción |
|---|---|
organization_id |
La organización del informe. |
days |
El umbral utilizado. |
inactive_since |
El instante del umbral (hora de la solicitud menos days, RFC 3339, UTC). Se incluyen los miembros sin inicio de sesión desde entonces. |
data_since |
Hora de la primera autenticación correcta registrada para el entorno; los inicios de sesión anteriores a ella se desconocen. null cuando el entorno aún no tiene ningún registro. |
complete |
true cuando data_since no es posterior a inactive_since, de modo que la lista cubre todo el período del umbral. |
data |
Las filas de esta página (véase más abajo). |
next_cursor |
Cursor para la página siguiente, null en la última página. |
Cada fila de data:
| Campo | Descripción |
|---|---|
membership_id |
mem_…. |
user_id |
usr_…. |
activated_at |
Cuándo se activó la membresía (su fecha de creación si nunca se activó). |
last_authenticated_at |
Última autenticación correcta en esta organización, o null si no se ha registrado ninguna desde data_since. |
Cuando complete es false, un miembro incluido en la lista puede haber iniciado sesión antes de data_since, así que no considere la lista como definitiva. Cuando data_since es null, todavía no se ha registrado ningún inicio de sesión para el entorno y se incluye a todos los miembros con antigüedad suficiente.
{
"organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4d",
"days": 30,
"inactive_since": "2027-02-03T09:30:00Z",
"data_since": "2026-12-01T08:00:00Z",
"complete": true,
"data": [
{
"membership_id": "mem_01j9xk3m7q8r2s4t6v8w0y2z4e",
"user_id": "usr_01j9xk3m7q8r2s4t6v8w0y2z4f",
"activated_at": "2026-12-10T10:00:00Z",
"last_authenticated_at": "2027-01-05T17:45:00Z"
}
],
"next_cursor": null
}
Errores
Todo error es un cuerpo application/problem+json con un code estable.
| HTTP | code |
Cuándo |
|---|---|---|
| 400 | invalid_cursor |
El cursor tiene un formato incorrecto o se emitió para otro entorno, organización o days. |
| 404 | not_found |
La organización no existe o pertenece a otro entorno. |
| 422 | validation_failed |
Falta organization_id o tiene un formato incorrecto, days o limit está fuera de rango, o un parámetro está repetido. |
| 401 | unauthenticated |
Falta la clave de API, no es válida o ha sido revocada. |
| 403 | insufficient_permissions |
La clave no tiene reports:read. |
| 429 | rate_limited |
Se superó el límite de frecuencia; respete Retry-After. |
| 503 | service_unavailable |
El servicio de informes no está disponible temporalmente; reintente más tarde. |
Ejemplo
curl "https://api.eu.keenauth.com/v1/reports/inactive-members?organization_id=org_01j9xk3m7q8r2s4t6v8w0y2z4d&days=60" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
keenauth reports inactive-members org_01j9xk3m7q8r2s4t6v8w0y2z4d --days 60
Datos personales
Este endpoint trata datos personales: membresías e invitaciones de organizaciones (identificadores de usuario y de membresía con horas de inicio de sesión). Datos personales en las API de KeenAuth describe qué se almacena, durante 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.