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é. 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). 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) 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
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
{
"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 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.