Définir la date de fin d'une adhésion
PATCH /fapi/v1/organizations/{org_id}/memberships/{membership_id} · appelé depuis l'hôte de connexion de l'environnement
Définit ou supprime la date à laquelle une adhésion prend fin (expires_at), pour un écran de profil d'organisation. Lorsque cette date est dépassée, l'adhésion est supprimée et les sessions et jetons du membre dans le contexte de cette organisation sont révoqués. Un événement membership_expiry_warned est publié sept jours avant. Les rôles se modifient via Définir les rôles d'un membre ; ce point de terminaison ne modifie que la date de fin.
Nécessite le cookie __Host-idp_session de l'utilisateur authentifié avec un Origin exact, ou un jeton d'accès API front d'une application de première partie (Authorization: DPoP <token> avec une preuve DPoP ; voir Jeton d'accès API front). L'utilisateur doit être un membre actif de l'organisation disposant 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 votre propre adhésion ici (403 insufficient_permissions), et seul un membre détenant le rôle d'administrateur peut modifier un membre qui détient un rôle privilégié (403 role_not_assignable).
Avec @keenauth/js : await keenauth.organizations.setMemberExpiry(orgId, membershipId, "2027-03-31T00:00:00Z", { expectedVersion: 3 }) ; passez null pour supprimer la date.
Requête
En-têtes :
| En-tête | Requis | Description |
|---|---|---|
Idp-Client |
oui | Identifiant du SDK. |
Origin |
oui, avec le cookie | https://<sign-in host>. |
If-Match |
non | Une version, "<version>", issue de la liste des membres. Une version qui ne correspond pas, ou plusieurs versions, renvoie 412 precondition_failed. |
org_id : l'identifiant de l'organisation (org_…). membership_id : l'identifiant de l'adhésion (mem_…).
Corps : {"expires_at": "<RFC 3339 time>"} ou {"expires_at": null} pour supprimer la date. expires_at est obligatoire. L'heure doit être future et au plus 365 jours après la création de l'adhésion.
Réponse
200 OK avec l'adhésion (mêmes champs qu'un élément de la liste des membres) et ETag: "<version>".
Erreurs
| Statut | Code | Quand |
|---|---|---|
| 400 | unknown_field |
Le corps contient un champ autre que expires_at. |
| 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 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 |
Le 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 reçoit la même réponse. |
| 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 |
expires_at est absent, n'est pas une heure RFC 3339, est passé, ou dépasse de plus de 365 jours la création de l'adhésion. |
| 503 | service_unavailable |
Service temporairement indisponible ; réessayez après Retry-After. |
Exemple
curl -X PATCH "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" \
-H 'If-Match: "3"' \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{"expires_at": "2027-03-31T00:00:00Z"}'
{
"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",
"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 aux organisations. Données personnelles dans les API KeenAuth décrit les données conservées, leur durée de conservation et leur suppression. N'envoyez pas de catégories particulières de données personnelles (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.