Remplacer les rôles d'une appartenance

PUT /v1/organizations/{org_id}/memberships/{membership_id}/roles · autorisation organizations:write

Remplace les rôles attribués manuellement à l'appartenance par role_ids (un tableau vide les supprime). Les rôles accordés par les correspondances IdP ou les sources d'annuaire ne sont pas modifiés. Si role_version est fourni, il doit être égal à la version actuelle de l'appartenance, sinon 409 conflict. Le rôle d'administrateur du dernier administrateur ne peut pas être retiré. L'écriture est journalisée sous organization_membership.updated.

Requête

Champ Type Obligatoire Description
org_id path oui Identifiant de l'organisation (org_…).
membership_id path oui Identifiant de l'appartenance (mem_…).
role_ids string[] oui L'ensemble complet des identifiants de rôles (rol_…), 50 au maximum.
role_version integer non Valeur version attendue de l'appartenance (1 ou plus).
revoke_sessions boolean non Valeur par défaut true. Détermine si le retrait d'un rôle privilégié (is_privileged) révoque les familles de jetons d'actualisation de l'utilisateur dans ce contexte d'organisation (plan §17.4) ; false désactive cette révocation. Dans cette version, ce choix est seulement consigné dans les métadonnées revoke_sessions de l'enregistrement d'audit organization_membership.updated et aucune session n'est révoquée ; la révocation est prévue (planned) dans le service d'authentification.

Réponse

200 OK avec l'appartenance 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": null,
  "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-12T09:31:00.123456Z",
  "version": 2
}

Erreurs

HTTP code Quand
404 not_found L'appartenance 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 conflict role_version ne correspond pas à la version actuelle de l'appartenance.
409 last_org_admin La modification laisserait l'organisation sans administrateur actif.
422 validation_failed role_ids est absent ou invalide, ou role_version est inférieur à 1.
401 unauthenticated L'identifiant d'accès est absent, invalide ou révoqué.
403 insufficient_permissions L'identifiant d'accès ne dispose pas de l'autorisation requise. L'attribution d'un rôle privilégié (is_privileged) exige aussi roles:write ; sans elle, 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 PUT "https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/memberships/mem_01j9xn5p9s0t4v6w8x0y2z4a6c/roles" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"role_ids":["rol_01j9xr7s1t2w6x8y0z2a4b6c8e","rol_01j9xs8t2v3x7y9z1a3b5c7d9f"],"role_version":1}'

Données personnelles

Cet point de terminaison traite des données personnelles : appartenances aux organisations et invitations. Données personnelles dans les API KeenAuth décrit les données stockées, leur durée de conservation et leur suppression. N'envoyez de données personnelles sensibles (santé, données biométriques, convictions religieuses, opinions politiques, orientation sexuelle) dans aucun champ.