Establecer los roles de un miembro

PUT /fapi/v1/organizations/{org_id}/memberships/{membership_id}/roles · llamado desde el host de inicio de sesión del entorno

Reemplaza los roles de una membresía por un conjunto completo, para una pantalla de perfil de organización. El conjunto abarca solo los roles que usted puede ver en esta organización: sus propios roles y los roles del entorno abiertos a los administradores de la organización. Los demás roles del miembro se mantienen. Un conjunto vacío elimina todos los roles que usted puede ver; si el miembro se queda sin ninguno, se le asigna el rol predeterminado de la organización.

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 el permiso idp_members:update_roles. Un usuario que no es miembro recibe 404 not_found; un miembro sin el permiso recibe 403 insufficient_permissions.

Reglas de asignación:

Con @keenauth/js: await keenauth.organizations.setMemberRoles(orgId, membershipId, [roleId], { 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_…).

Cuerpo: {"role_ids": ["rol_…"]}, con un máximo de 50 roles. role_ids es obligatorio; [] es un conjunto válido.

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.
400 unknown_field El cuerpo tiene un campo distinto de role_ids.
401 unauthenticated No hay cookie de sesión ni token válidos.
403 insufficient_permissions El usuario no tiene idp_members:update_roles en la organización.
403 role_not_assignable Una regla de asignación anterior rechaza el cambio.
403 origin_not_allowed El Origin no coincide.
404 not_found No existe la organización, la membresía o el rol para este usuario; un identificador desconocido, mal formado o ajeno recibe la misma respuesta.
409 last_org_admin El cambio dejaría la organización sin un administrador activo.
409 role_limit_reached El miembro tendría más de 50 roles.
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 Falta role_ids, es demasiado largo o contiene un identificador mal formado.
503 service_unavailable No disponible temporalmente; reintente después de Retry-After.

Ejemplo

curl -X PUT "https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a/memberships/mem_01jbz6x8kq3m2n4p5r6s7t8v9b/roles" \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/json" \
  -H 'If-Match: "3"' \
  -b cookies.txt \
  -d '{"role_ids":["rol_01jbz6x8kq3m2n4p5r6s7t8v9w"]}'
{
  "id": "mem_01jbz6x8kq3m2n4p5r6s7t8v9b",
  "user_id": "usr_01jbz6x8kq3m2n4p5r6s7t8v9c",
  "status": "active",
  "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-03T10: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.