Référence APIInviter un membre dans l'espace de travail
POST/v1/workspace/members

Inviter un membre dans l'espace de travail

Crée une invitation par e-mail dans l'espace de travail actif, avec rôle et capacités optionnelles, et envoie le lien d'acceptation.

2 min de lectureTélécharger en PDF

Requête exemple

{
"role": "member",
"email": "thomas.bernard@exemple.fr",
"invite_note": "Accès comptabilité Q2",
"can_view_analytics": true,
"can_create_requests": true
}

Réponse exemple

{
"member": {
"id": "wm_7b1d4e8f",
"role": "member",
"email": "thomas.bernard@exemple.fr",
"status": "pending",
"user_id": null,
"joined_at": "2026-06-05T10:30:00.000Z",
"invite_note": "Accès comptabilité Q2",
"last_seen_at": null,
"can_manage_coffres": false,
"can_view_analytics": false,
"can_create_requests": false,
"can_manage_api_keys": false
},
"invitation": {
"id": "inv_2c5e9a01",
"role": "member",
"email": "thomas.bernard@exemple.fr",
"created_at": "2026-06-05T10:30:00.000Z",
"expires_at": "2026-06-12T10:30:00.000Z"
}
}
POST/v1/workspace/membersInvite un membre par e-mail dans l'espace de travail actif.

Crée une invitation dans l'espace de travail actif pour l'e-mail fourni. L'endpoint inscrit l'invitation dans la table d'audit, ajoute une ligne de membre en statut pending, génère un jeton d'acceptation valable 7 jours, puis envoie l'e-mail d'invitation (avec lien d'acceptation) de façon asynchrone (best-effort, sans bloquer la réponse). En environnement hors production, le champ accept_url est renvoyé dans la réponse pour faciliter les tests ; en production il est omis.

L'invitation de membres est une fonctionnalité réservée aux plans Ultra et supérieurs (ultra, entreprise/enterprise). Si l'e-mail correspond déjà à un membre actif, la requête échoue.

Authentification

Cet endpoint requiert une session authentifiée (cookie de session Supabase), aucun scope de clé API spécifique. L'appelant doit avoir le rôle owner ou admin dans l'espace de travail actif, sinon il reçoit 403 Insufficient permissions. De plus, les capacités sensibles (can_manage_billing, can_delete_workspace) ne peuvent être accordées que par le compte propriétaire de l'espace : un admin qui tente de les attribuer reçoit un 403.

Corps de la requête

ChampTypeRequisDescription
emailstringOuiAdresse e-mail de l'invité. Normalisée (minuscules, sans espaces) et validée par regex.
rolestringNonRôle attribué. Valeurs autorisées : admin, member, auditor, viewer. Défaut : member.
invite_notestringNonNote libre jointe à l'invitation (espaces de début/fin retirés).
can_manage_billingbooleanNonAccorde la gestion de la facturation. Sensible : owner uniquement. Ignoré sauf si true.
can_delete_workspacebooleanNonAccorde la suppression de l'espace. Sensible : owner uniquement. Ignoré sauf si true.
can_manage_membersbooleanNonAccorde la gestion des membres. Pris en compte uniquement si true.
can_manage_settingsbooleanNonAccorde la gestion des paramètres. Pris en compte uniquement si true.
can_manage_coffresbooleanNonAccorde la gestion des coffres. Pris en compte uniquement si true.
can_create_requestsbooleanNonAccorde la création de demandes. Pris en compte uniquement si true.
can_view_analyticsbooleanNonAccorde la consultation des statistiques. Pris en compte uniquement si true.
can_manage_api_keysbooleanNonAccorde la gestion des clés API. Pris en compte uniquement si true.

Réponse

En cas de succès, l'endpoint renvoie 201 Created avec un objet member (la ligne d'adhésion en statut pending), un objet invitation (entrée d'audit avec expires_at), et accept_url uniquement hors production. Le member renvoyé a user_id: null et toutes les capacités à false dans la charge de réponse, quelles que soient les capacités effectivement accordées en base.

ChampTypeDescription
member.idstringIdentifiant de la ligne d'adhésion créée.
member.emailstringE-mail invité.
member.rolestringRôle attribué.
member.statusstringToujours pending à la création.
member.joined_atstring (ISO 8601)Date de création de la ligne.
member.invite_notestring | nullNote jointe à l'invitation.
invitationobject | nullEntrée d'audit : id, email, role, expires_at, created_at.
accept_urlstring | undefinedLien d'acceptation, renvoyé uniquement hors production.

Erreurs

CodeQuandRésolution
400JSON invalide, e-mail non valide, ou rôle hors liste (Invalid role: ...).Corrigez le corps : JSON valide, e-mail au bon format, rôle parmi admin/member/auditor/viewer.
401Aucune session authentifiée (Unauthorized).Authentifiez-vous avant d'appeler l'endpoint.
403Rôle insuffisant (Insufficient permissions), plan inférieur à Ultra, ou tentative d'accorder une capacité sensible sans être owner.Utilisez un compte owner/admin, passez sur un plan Ultra ou supérieur, et laissez l'owner accorder les capacités sensibles.
404Aucun espace de travail actif (No active workspace).Sélectionnez un espace de travail avant l'appel.
409L'e-mail est déjà un membre actif.Vérifiez la liste des membres ; n'invitez pas un membre déjà actif.
500Échec de l'insertion de la ligne de membre.Réessayez ; si l'erreur persiste, contactez le support.

Voir aussi

  • GET /v1/workspace/members — lister les membres et invitations en attente.
  • GET /v1/workspace — vérifier le plan et le propriétaire de l'espace de travail.
  • POST /v1/workspace/members/requests — flux de demande/approbation des capacités sensibles.