Obtener los diagnósticos de un miembro

GET /v1/organizations/{org_id}/memberships/{membership_id}/diagnostics · permisos organizations:read y users:read

Responde a la pregunta «¿por qué este miembro no puede iniciar sesión?» para un administrador de la organización en una sola respuesta: la membresía, un resumen de las políticas de la organización, una invitación pendiente, un resumen de los autenticadores del miembro, el estado de inicio de sesión en el contexto de la organización, los grupos de directorio del miembro y su acceso a las aplicaciones. Es de solo lectura: no cambia nada, y las acciones de escritura van a sus propios endpoints. La actividad de inicio de sesión se lee con Listar los registros de un usuario y org_id.

Solo se devuelven datos que pertenecen a la organización. Las etiquetas, los AAGUID, las direcciones IP, los user agents, las direcciones de correo electrónico, los rangos CIDR y los registros del contexto de otra organización nunca forman parte de la respuesta.

Solicitud

Campo Tipo Obligatorio Descripción
org_id path sí ID de la organización (org_…).
membership_id path sí ID de la membresía (mem_…).

Sin cuerpo de la solicitud.

Respuesta

200 OK con estos campos:

Campo Descripción
membership La membresía tal como la devuelve Obtener una membresía: estado, origen, roles y motivo de la suspensión.
policy Las políticas definidas en la organización: authentication_methods (clave de acceso y contraseña permitidas, número de conexiones permitidas), mfa (quién debe usar la MFA y los factores permitidos), phishing_resistant, sso_enforcement (modo, y bypass cuando el miembro está en la lista de acceso de emergencia) y ip_allowlist (presente, y a quién se aplica). null indica que la organización hereda el valor del entorno para esa política.
invitation Solo para una membresía invited: la invitación pendiente a la dirección de correo electrónico principal del usuario, con su entrega y su estado de entrega. null en caso contrario. La dirección de correo electrónico no se devuelve.
authenticators classes: los tipos de los autenticadores activos del miembro. mfa_enrolled: true cuando un autenticador activo tiene el rol second_factor o both.
sign_in locked y locked_until (un bloqueo detiene el inicio de sesión de la cuenta en todos los contextos), y el último inicio de sesión en el contexto de esta organización (last_sign_in_at, last_sign_in_amr). Los contadores de fallos no se muestran, porque no pertenecen a ninguna organización.
groups Los grupos del miembro en los directorios de la organización (data: id dsg_… y directory_id dir_…; como máximo 100, truncated cuando hay más). Solo cuentan las membresías de un usuario de directorio vinculado a este usuario y activo. Los nombres de grupo no se devuelven; léalos con GET /v1/directories/{directory_id}/groups/{directory_group_id}.
applications Acceso a las aplicaciones de esta organización. Las aplicaciones cuyo org_access_mode es all_organizations están abiertas a todos los miembros y solo se cuentan (open_count). Para las demás aplicaciones (data, por nombre, como máximo 100, truncated cuando hay más): application_id, name, access_mode, allowed, y reason cuando el acceso se rechaza (application_not_enabled: la aplicación no está habilitada para la organización; application_not_assigned: ni la membresía ni uno de sus grupos de directorio está asignado). La decisión sigue la misma regla que la comprobación al iniciar sesión.
{
  "membership": {
    "id": "mem_01j9xn5p9s0t4v6w8x0y2z4a6c",
    "organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
    "user_id": "usr_01j9xh2k6p7q1r3s5t7v9w1x3y",
    "status": "suspended",
    "source": "scim",
    "reason": "scim_deprovisioned",
    "roles": [],
    "expires_at": null,
    "created_at": "2026-10-12T09:31:00.123456Z",
    "activated_at": "2026-10-12T09:31:00.123456Z",
    "suspended_at": "2026-10-20T07:00:00Z",
    "removed_at": null,
    "updated_at": "2026-10-20T07:00:00Z",
    "version": 3
  },
  "policy": {
    "authentication_methods": null,
    "mfa": { "required_for": "all", "allowed_factors": ["totp", "webauthn"] },
    "phishing_resistant": null,
    "sso_enforcement": { "mode": "org_context", "bypass": false },
    "ip_allowlist": null
  },
  "invitation": null,
  "authenticators": { "mfa_enrolled": false, "classes": ["webauthn"] },
  "sign_in": {
    "locked": false,
    "locked_until": null,
    "last_sign_in_at": "2026-10-19T08:15:42Z",
    "last_sign_in_amr": ["fed"]
  },
  "groups": {
    "data": [{ "id": "dsg_01j9xp4r8s2t4v6w8x0y2z4a6b", "directory_id": "dir_01j9xm1n5p7q9r1s3t5v7w9x1y" }],
    "truncated": false
  },
  "applications": {
    "open_count": 2,
    "data": [
      {
        "application_id": "app_01j9xq6s0t2v4w6x8y0z2a4b6c",
        "name": "Finance portal",
        "access_mode": "assigned_only",
        "allowed": false,
        "reason": "application_not_assigned"
      }
    ],
    "truncated": false
  }
}

Errores

HTTP Código Cuándo
404 not_found La membresía no existe en esta organización, o está removed.
401 unauthenticated La credencial falta, no es válida o ha sido revocada.
403 insufficient_permissions La credencial carece de organizations:read o users:read.
429 rate_limited Se superó el límite de solicitudes; reintente después del período Retry-After.
503 service_unavailable Una dependencia no está disponible temporalmente; reintente después del período Retry-After.

Ejemplo

curl -i "https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/memberships/mem_01j9xn5p9s0t4v6w8x0y2z4a6c/diagnostics" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"

Datos personales

Este endpoint contiene datos personales: membresías e invitaciones de organizaciones, y credenciales. 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.