Suspender a un miembro
POST /fapi/v1/organizations/{org_id}/memberships/{membership_id}:suspend · llamado desde el host de inicio de sesión del entorno
Suspende una membresía. El miembro conserva sus roles pero no puede actuar en la organización: sus sesiones y tokens en el contexto de esta organización quedan revocados, y no puede seleccionar la organización hasta que un miembro lo reactive. Suspender a un miembro que ya está suspendido devuelve la membresía sin cambios. El último administrador activo no puede ser suspendido (409 last_org_admin).
Requiere la cookie __Host-idp_session del usuario autenticado con un Origin exacto, o un token de acceso de la API frontal de una aplicación propia (Authorization: DPoP <token> con una prueba DPoP; consulte Token de acceso a la API frontal). El usuario debe ser un miembro activo de la organización con los permisos idp_members:update_roles e idp_members:remove. Un usuario que no es miembro recibe 404 not_found; un miembro sin ambos permisos recibe 403 insufficient_permissions. No puede cambiar su propia membresía aquí (403 insufficient_permissions), y solo un miembro que tenga el rol de administrador puede cambiar a un miembro que tenga un rol privilegiado (403 role_not_assignable).
Con @keenauth/js: await keenauth.organizations.suspendMember(orgId, membershipId, { expectedVersion: 3 }).
Solicitud
Encabezados:
| Encabezado | Obligatorio | Descripción |
|---|---|---|
Idp-Client |
sí | Identificador del SDK. |
Origin |
sí, con la cookie | https://<host de inicio de sesión>. |
If-Match |
no | Una versión, "<versión>", de la lista de miembros. Una versión que no coincide, o más de una versión, devuelve 412 precondition_failed. |
org_id: el identificador de la organización (org_…). membership_id: el identificador de la membresía (mem_…).
Sin cuerpo.
Respuesta
200 OK con la membresía (los mismos campos que un elemento de la lista de miembros) y ETag: "<versión>".
Errores
| Estado | Código | Cuándo |
|---|---|---|
| 400 | malformed_request |
If-Match está mal formado. |
| 401 | unauthenticated |
No hay cookie de sesión ni token válidos. |
| 403 | insufficient_permissions |
El usuario no tiene idp_members:update_roles o idp_members:remove, o la membresía es la del propio usuario. |
| 403 | role_not_assignable |
El miembro tiene un rol privilegiado y el usuario no tiene el rol de administrador. |
| 403 | origin_not_allowed |
El Origin no coincide. |
| 404 | not_found |
No existe la organización o la membresía para este usuario; un identificador desconocido, mal formado o ajeno recibe la misma respuesta. |
| 409 | last_org_admin |
El miembro es el último administrador activo de la organización. |
| 409 | organization_disabled |
La organización está deshabilitada o pendiente de eliminación (organization_pending_deletion). |
| 412 | precondition_failed |
If-Match no indica la versión actual de la membresía. |
| 422 | validation_failed |
La membresía ha sido eliminada. |
| 503 | service_unavailable |
No disponible temporalmente; reintente después de Retry-After. |
Ejemplo
curl -X POST "https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a/memberships/mem_01jbz6x8kq3m2n4p5r6s7t8v9b:suspend" \
-H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
-H "Origin: https://example.keenauth.app" \
-H 'If-Match: "3"' \
-b cookies.txt
{
"id": "mem_01jbz6x8kq3m2n4p5r6s7t8v9b",
"user_id": "usr_01jbz6x8kq3m2n4p5r6s7t8v9c",
"status": "suspended",
"roles": [{ "role_id": "rol_01jbz6x8kq3m2n4p5r6s7t8v9w", "source": "admin_api" }],
"created_at": "2026-11-03T09:00:00Z",
"activated_at": "2026-11-03T09:00:00Z",
"expires_at": null,
"updated_at": "2026-11-03T11:00:00Z",
"version": 4
}
Datos personales
Este endpoint contiene datos personales: membresías de organizaciones e invitaciones. 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.