Inviter un membre

POST /fapi/v1/organizations/{org_id}/invitations · appelé depuis l'hôte de connexion de l'environnement

Invite une adresse e-mail à rejoindre l'organisation. KeenAuth envoie l'e-mail d'invitation ; le jeton d'invitation et le lien d'acceptation ne vous sont jamais renvoyés. Si une invitation en attente existe déjà pour la même adresse avec les mêmes rôles, elle est renvoyée et la réponse est 200 OK ; une nouvelle invitation donne 201 Created.

Le cookie __Host-idp_session de l'utilisateur authentifié est requis, avec un Origin exact, ou le jeton d'accès à l'API front d'une application de première partie (Authorization: DPoP <token> avec une preuve DPoP ; voir Jeton d'accès à l'API front). L'utilisateur doit être un membre actif de l'organisation disposant de l'autorisation idp_members:invite. Un utilisateur qui n'est pas membre reçoit 404 not_found ; un membre sans l'autorisation reçoit 403 insufficient_permissions. Seul un membre disposant du rôle d'administrateur peut inviter avec un rôle privilégié (403 role_not_assignable).

Avec @keenauth/js : const { invitation, resent } = await keenauth.organizations.invite(orgId, { email, roleIds: [roleId] }).

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>.

org_id : l'identifiant de l'organisation (org_…).

Corps :

Champ Obligatoire Description
email oui L'adresse à inviter, au maximum 254 caractères.
role_ids non Au maximum 10 rôles (rol_…) ; aucun signifie le rôle par défaut de l'organisation.
ttl_days non Durée de validité de l'invitation, de 1 à 30 jours ; la valeur par défaut de l'environnement si omise.

Réponse

201 Created avec Location et ETag, ou 200 OK lorsqu'une invitation en attente a été renvoyée. Le corps est l'invitation :

id (inv_…), email (uniquement tant qu'elle est en attente, sinon null), role_ids, delivery, delivery_status (queued, sent, bounced ou not_sent), status (pending, accepted, revoked ou expired), send_count, last_sent_at, expires_at, accepted_user_id, accepted_at, revoked_at, created_at, updated_at, version.

Erreurs

Statut Code Quand
400 unknown_field Le corps contient un champ non listé ci-dessus.
401 unauthenticated Aucun cookie de session ou jeton valide.
403 insufficient_permissions L'utilisateur ne dispose pas de idp_members:invite dans l'organisation.
403 role_not_assignable Un rôle est privilégié et l'utilisateur ne dispose pas du rôle d'administrateur.
403 origin_not_allowed Origin ne correspond pas.
404 not_found Aucune organisation ou aucun rôle de ce type pour cet utilisateur.
409 invitation_already_pending Une invitation en attente pour cette adresse comporte des rôles différents.
409 membership_already_exists L'adresse appartient à un membre de l'organisation.
409 organization_membership_limit_reached L'organisation a atteint sa limite de membres.
409 organization_disabled L'organisation est désactivée ou en attente de suppression (organization_pending_deletion).
422 validation_failed email, role_ids ou ttl_days est absent ou invalide.
429 invite_rate_limited Trop d'invitations ou de renvois ; réessayez après Retry-After.
501 not_implemented L'envoi d'e-mails d'invitation n'est pas configuré dans cet environnement.
503 service_unavailable Temporairement indisponible ; réessayez après Retry-After.

Exemple

curl -X POST "https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a/invitations" \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/json" \
  -b cookies.txt \
  -d '{"email":"new.member@example.com","role_ids":["rol_01jbz6x8kq3m2n4p5r6s7t8v9w"],"ttl_days":7}'
{
  "id": "inv_01jbz6x8kq3m2n4p5r6s7t8v9d",
  "email": "new.member@example.com",
  "role_ids": ["rol_01jbz6x8kq3m2n4p5r6s7t8v9w"],
  "delivery": "email",
  "delivery_status": "queued",
  "status": "pending",
  "send_count": 1,
  "last_sent_at": "2026-11-03T10:00:00Z",
  "expires_at": "2026-11-10T10:00:00Z",
  "accepted_user_id": null,
  "accepted_at": null,
  "revoked_at": null,
  "created_at": "2026-11-03T10:00:00Z",
  "updated_at": "2026-11-03T10:00:00Z",
  "version": 1
}

Données personnelles

Cet point de terminaison contient des données personnelles : appartenances à des organisations et invitations. Données personnelles dans les API KeenAuth décrit ce qui est stocké, la durée de conservation et la manière dont elles sont supprimées. N'envoyez aucune donnée personnelle sensible (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans un champ quel qu'il soit.