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.