Mettre à jour une adhésion
PATCH /v1/organizations/{org_id}/memberships/{membership_id} · autorisation organizations:write
Modifie les role_ids de l'adhésion (l'ensemble complet des rôles attribués manuellement) ou expires_at à l'aide d'un JSON merge patch (Content-Type: application/merge-patch+json). Les deux champs peuvent changer dans la même requête ; ils sont appliqués dans une seule transaction, de sorte que soit les deux sont écrits, soit aucun ne l'est, et un enregistrement d'audit organization_membership.updated est écrit. expires_at doit être dans le futur et au plus 365 jours après la création de l'adhésion ; null supprime la date de fin. role_ids: null n'a aucun effet. Les règles relatives aux rôles sont celles de PUT …/roles. Un champ égal à sa valeur actuelle n'est pas écrit. L'écriture est auditée sous le nom organization_membership.updated.
Requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
org_id |
chemin | oui | Identifiant de l'organisation (org_…). |
membership_id |
chemin | oui | Identifiant de l'adhésion (mem_…). |
If-Match |
en-tête | non | ETag actuel ; s'il est fourni, il doit correspondre (412) et verrouille l'écriture sur cette version. |
role_ids |
string[] | non | Ensemble complet des identifiants de rôles attribués manuellement (rol_…), 50 au maximum. |
expires_at |
string | null | non | Fin de l'adhésion (RFC 3339) ; null la supprime. |
Réponse
200 OK avec l'adhésion mise à jour et son ETag.
{
"id": "mem_01j9xn5p9s0t4v6w8x0y2z4a6c",
"organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
"user_id": "usr_01j9xh2k6p7q1r3s5t7v9w1x3y",
"status": "active",
"source": "admin_api",
"reason": null,
"roles": [
{
"role_id": "rol_01j9xr7s1t2w6x8y0z2a4b6c8e",
"source": "admin_api",
"assigned_at": "2026-10-12T09:31:00.123456Z"
}
],
"expires_at": "2027-01-01T00:00:00Z",
"created_at": "2026-10-12T09:31:00.123456Z",
"activated_at": "2026-10-12T09:31:00.123456Z",
"suspended_at": null,
"removed_at": null,
"updated_at": "2026-10-12T10:00:00Z",
"version": 2
}
Erreurs
| HTTP | code | Quand |
|---|---|---|
| 404 | not_found |
L'adhésion n'existe pas dans cette organisation. |
| 403 | role_not_assignable |
Un rôle n'est ni un rôle de l'environnement ni un rôle de cette organisation. |
| 409 | last_org_admin |
La modification laisserait l'organisation sans administrateur actif. |
| 412 | precondition_failed |
If-Match ne correspond pas à la version actuelle. |
| 415 | unsupported_media_type |
Le corps n'est pas de type application/merge-patch+json. |
| 422 | validation_failed |
expires_at est hors plage ou l'adhésion est supprimée (invalid_state), ou une valeur est invalide. |
| 401 | unauthenticated |
L'identifiant d'authentification est absent, invalide ou révoqué. |
| 403 | insufficient_permissions |
L'identifiant d'authentification ne dispose pas de l'autorisation requise. Attribuer un rôle privilégié (is_privileged) requiert aussi roles:write ; sans cette autorisation, rien n'est écrit et required_permissions liste les deux autorisations. |
| 429 | rate_limited |
La limite de débit a été dépassée ; réessayez après la durée indiquée par Retry-After. |
| 503 | service_unavailable |
Une dépendance est temporairement indisponible ; réessayez après la durée indiquée par Retry-After. |
Exemple
curl -i -X PATCH "https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/memberships/mem_01j9xn5p9s0t4v6w8x0y2z4a6c" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/merge-patch+json" \
-d '{"expires_at":"2027-01-01T00:00:00Z"}'
Données personnelles
Cet endpoint traite des données personnelles : adhésions et invitations à une organisation. Données personnelles dans les API KeenAuth décrit les données stockées, leur durée de conservation et leur mode de 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.