
# Lister les membres d'une organisation

`GET /fapi/v1/organizations/{org_id}/memberships` · appelé depuis l'hôte de connexion de l'environnement

Liste les adhésions d'une organisation, triées par date de dernière modification, pour un écran de profil d'organisation. Les invitations en attente n'apparaissent jamais ici. Chaque ligne désigne l'utilisateur uniquement par son identifiant `usr_…` ; ce point de terminaison ne renvoie ni noms ni adresses e-mail. Nécessite le cookie `__Host-idp_session` de l'utilisateur authentifié ; si le cookie est absent, expiré ou révoqué, renvoie `401 unauthenticated`. Une application de première partie sur une autre origine peut à la place envoyer son jeton d'accès à l'API front (`Authorization: DPoP <token>` avec une preuve DPoP ; voir [Jeton d'accès à l'API front](/docs/api/fapi/front-api-token)). L'utilisateur doit être un membre actif de l'organisation disposant de l'autorisation `idp_members:read`. Un utilisateur qui n'est pas membre reçoit `404 not_found` ; un membre sans cette autorisation reçoit `403 insufficient_permissions`.

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

## Requête

En-têtes :

| En-tête | Obligatoire | Description |
| --- | --- | --- |
| `Idp-Client` | oui | Identifiant du SDK. |

`org_id` : l'identifiant de l'organisation (`org_…`).

Paramètres de requête :

| Paramètre | Obligatoire | Description |
| --- | --- | --- |
| `status` | non | `active`, `suspended` ou `removed` ; les trois lorsqu'il est omis. |
| `role_id` | non | Uniquement les adhésions détenant ce rôle (`rol_…`). |
| `after` | non | La valeur `next_after` de la page précédente (opaque). |
| `limit` | non | 1 à 100, 20 par défaut. |

Aucun corps.

## Réponse

`200 OK` avec `{"data": [...], "next_after": "..."}` ; `next_after` est absent de la dernière page.

Chaque élément : `id` (`mem_…`), `user_id` (`usr_…`), `status`, `roles` (chacun avec `role_id` et `source`, c'est-à-dire l'origine de l'attribution, comme `admin_api` ou `default`), `created_at`, `activated_at` (ou `null`), `expires_at` (ou `null`), `updated_at`, `version`.

## Erreurs

| Statut | Code | Cas |
| --- | --- | --- |
| 400 | `invalid_cursor` | `after` est mal formé. |
| 401 | `unauthenticated` | Aucun cookie de session valide. |
| 403 | `insufficient_permissions` | L'utilisateur ne dispose pas de `idp_members:read` dans l'organisation. |
| 404 | `not_found` | Aucune organisation de ce type pour cet utilisateur ; un identifiant inconnu, mal formé ou étranger reçoit la même réponse. |
| 422 | `validation_failed` | `status`, `role_id` ou `limit` est invalide. |
| 503 | `service_unavailable` | Temporairement indisponible ; réessayez après `Retry-After`. |

## Exemple

```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"
}
```

## Données personnelles

Ce point de terminaison traite des données personnelles : adhésions aux organisations et invitations. [Données personnelles dans les API KeenAuth](/docs/policies/personal-data) décrit ce qui est stocké, pendant combien de temps et comment elles sont supprimées. Ne transmettez pas de catégories particulières de données personnelles (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.
