
# Listar los miembros de una organización

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

Lista las membresías de una organización, ordenadas por último cambio, para una pantalla de perfil de organización. Las invitaciones pendientes nunca aparecen aquí. Cada fila identifica al usuario solo mediante su identificador `usr_…`; este endpoint no devuelve nombres ni direcciones de correo electrónico. Requiere la cookie `__Host-idp_session` del usuario autenticado; si la cookie falta, ha caducado o ha sido revocada, devuelve `401 unauthenticated`. Una aplicación propia en otro origen puede enviar, en su lugar, su token de acceso a la API frontal (`Authorization: DPoP <token>` con una prueba DPoP; consulte [Token de acceso a la API frontal](/docs/api/fapi/front-api-token)). El usuario debe ser miembro activo de la organización con el permiso `idp_members:read`. Un usuario que no es miembro recibe `404 not_found`; un miembro sin el permiso recibe `403 insufficient_permissions`.

Con `@keenauth/js`: `await keenauth.organizations.members(orgId, { status: "active" })`.

## Solicitud

Encabezados:

| Encabezado | Obligatorio | Descripción |
| --- | --- | --- |
| `Idp-Client` | sí | Identificador del SDK. |

`org_id`: el identificador de la organización (`org_…`).

Parámetros de consulta:

| Parámetro | Obligatorio | Descripción |
| --- | --- | --- |
| `status` | no | `active`, `suspended` o `removed`; los tres cuando se omite. |
| `role_id` | no | Solo las membresías que tienen este rol (`rol_…`). |
| `after` | no | El valor `next_after` de la página anterior (opaco). |
| `limit` | no | De 1 a 100, por defecto 20. |

Sin cuerpo.

## Respuesta

`200 OK` con `{"data": [...], "next_after": "..."}`; `next_after` no aparece en la última página.

Cada elemento: `id` (`mem_…`), `user_id` (`usr_…`), `status`, `roles` (cada uno con `role_id` y `source`, es decir, el origen de la asignación, como `admin_api` o `default`), `created_at`, `activated_at` (o `null`), `expires_at` (o `null`), `updated_at`, `version`.

## Errores

| Estado | Código | Cuándo |
| --- | --- | --- |
| 400 | `invalid_cursor` | `after` está mal formado. |
| 401 | `unauthenticated` | No hay una cookie de sesión válida. |
| 403 | `insufficient_permissions` | El usuario no tiene `idp_members:read` en la organización. |
| 404 | `not_found` | No existe tal organización para este usuario; un identificador desconocido, mal formado o ajeno recibe la misma respuesta. |
| 422 | `validation_failed` | `status`, `role_id` o `limit` no es válido. |
| 503 | `service_unavailable` | Servicio temporalmente no disponible; vuelva a intentarlo después de `Retry-After`. |

## Ejemplo

```bash
curl "https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a/memberships?status=active&limit=2" \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -b cookies.txt
```

```json
{
  "data": [
    {
      "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-03T09:00:00Z",
      "version": 1
    }
  ],
  "next_after": "AAAYQ3dAgGUBmgAAAABwAIAAAAAAAADh"
}
```

## Datos personales

Este endpoint maneja datos personales: membresías e invitaciones de organizaciones. [Datos personales en las API de KeenAuth](/docs/policies/personal-data) 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.
