
# Retirer un membre

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

Retire un membre de l'organisation. L'adhésion passe à `removed`, et les sessions et jetons de l'utilisateur pour cette organisation sont révoqués ; son compte et ses autres organisations ne sont pas modifiés.

Nécessite le cookie `__Host-idp_session` de l'utilisateur authentifié avec un `Origin` exact, ou le jeton d'accès à l'API front d'une application de première partie (`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:remove`. Un utilisateur qui n'est pas membre reçoit `404 not_found` ; un membre sans cette autorisation reçoit `403 insufficient_permissions`.

Retirer un membre est une action sensible : l'utilisateur doit s'être connecté au cours des 5 dernières minutes. Sinon, la réponse est `401 step_up_required` avec un `WWW-Authenticate` indiquant `max_age=300` ; faites-le se connecter à nouveau avec `maxAge: 300` puis renouvelez la requête. Cette vérification intervient avant toute lecture d'informations sur l'organisation.

- Vous ne pouvez pas retirer votre propre adhésion ici (`403 insufficient_permissions`).
- Seul un membre détenant le rôle d'administrateur peut retirer un membre détenant un rôle privilégié (`403 role_not_assignable`).
- Le dernier administrateur actif ne peut pas être retiré (`409 last_org_admin`).

Avec `@keenauth/js` : `await keenauth.organizations.removeMember(orgId, membershipId)`.

## 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_…`).

Aucun corps.

## Réponse

`204 No Content`.

## Erreurs

| Statut | Code | Cas |
| --- | --- | --- |
| 400 | `malformed_request` | `If-Match` est mal formé. |
| 401 | `unauthenticated` | Aucun cookie de session ou jeton valide. |
| 401 | `step_up_required` | L'utilisateur s'est connecté il y a plus de 5 minutes. |
| 403 | `insufficient_permissions` | L'utilisateur ne dispose pas 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 ni adhésion de ce type pour cet utilisateur ; un identifiant inconnu, mal formé ou étranger reçoit 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 désigne pas la version actuelle de l'adhésion. |
| 503 | `service_unavailable` | Temporairement indisponible ; réessayez après `Retry-After`. |

## Exemple

```bash
curl -X DELETE "https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a/memberships/mem_01jbz6x8kq3m2n4p5r6s7t8v9b" \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -b cookies.txt
```

## 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.
