
# Suspendre un membre

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

Suspend une adhésion. Le membre conserve ses rôles mais ne peut plus agir dans l'organisation : ses sessions et jetons dans le contexte de cette organisation sont révoqués, et il ne peut pas sélectionner l'organisation tant qu'un membre ne l'a pas [réactivé](/docs/api/fapi/organizations/memberships/reactivate). Suspendre un membre déjà suspendu renvoie l'adhésion inchangée. Le dernier administrateur actif ne peut pas être suspendu (`409 last_org_admin`).

Exige le cookie `__Host-idp_session` de l'utilisateur authentifié avec un `Origin` exact, ou un jeton d'accès à l'API frontale d'une application de premier niveau (`Authorization: DPoP <token>` avec une preuve DPoP ; voir [Jeton d'accès à l'API frontale](/docs/api/fapi/front-api-token)). L'utilisateur doit être un membre actif de l'organisation disposant à la fois des autorisations `idp_members:update_roles` et `idp_members:remove`. Un utilisateur qui n'est pas membre reçoit `404 not_found` ; un membre qui ne dispose pas des deux autorisations reçoit `403 insufficient_permissions`. Vous ne pouvez pas modifier ici votre propre adhésion (`403 insufficient_permissions`), et seul un membre détenant le rôle d'administrateur peut modifier un membre détenant un rôle privilégié (`403 role_not_assignable`).

Avec `@keenauth/js` : `await keenauth.organizations.suspendMember(orgId, membershipId, { expectedVersion: 3 })`.

## Requête

En-têtes :

| En-tête | Obligatoire | Description |
| --- | --- | --- |
| `Idp-Client` | oui | Identifiant du SDK. |
| `Origin` | oui, avec le cookie | `https://<hôte de connexion>`. |
| `If-Match` | non | Une seule version, `"<version>"`, issue de la liste des membres. Une version qui ne correspond pas, ou plusieurs versions, renvoient `412 precondition_failed`. |

`org_id` : l'identifiant de l'organisation (`org_…`). `membership_id` : l'identifiant de l'adhésion (`mem_…`).

Pas de corps.

## Réponse

`200 OK` avec l'adhésion (les mêmes champs qu'un élément de [la liste des membres](/docs/api/fapi/organizations/memberships/list)) et `ETag: "<version>"`.

## Erreurs

| Statut | Code | Quand |
| --- | --- | --- |
| 400 | `malformed_request` | `If-Match` est mal formé. |
| 401 | `unauthenticated` | Aucun cookie de session ou jeton valide. |
| 403 | `insufficient_permissions` | L'utilisateur ne dispose pas de `idp_members:update_roles` ou de `idp_members:remove`, ou l'adhésion est la sienne. |
| 403 | `role_not_assignable` | Le membre détient un rôle privilégié et l'utilisateur ne détient pas le rôle d'administrateur. |
| 403 | `origin_not_allowed` | L'`Origin` ne correspond pas. |
| 404 | `not_found` | Aucune organisation ou adhésion de ce type pour cet utilisateur ; un identifiant inconnu, mal formé ou étranger donne la même réponse. |
| 409 | `last_org_admin` | Le membre est le dernier administrateur actif de l'organisation. |
| 409 | `organization_disabled` | L'organisation est désactivée ou en attente de suppression (`organization_pending_deletion`). |
| 412 | `precondition_failed` | `If-Match` ne correspond pas à la version actuelle de l'adhésion. |
| 422 | `validation_failed` | L'adhésion a été supprimée. |
| 503 | `service_unavailable` | Service temporairement indisponible ; réessayez après `Retry-After`. |

## Exemple

```bash
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
```

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

## Données personnelles

Ce point de terminaison traite des données personnelles : adhésions et invitations à une organisation. [Données personnelles dans les API KeenAuth](/docs/policies/personal-data) décrit ce qui est stocké, la durée de conservation et la suppression. Ne transmettez aucune donnée sensible (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.
