# Organisations et membres

Une organisation réunit des personnes, des projets et une facturation. Cette page explique les rangs et ce que chacun permet, comment inviter, changer un rôle ou retirer un membre, ce que voient les agences qui gèrent plusieurs clients, et comment un compte passe d'une organisation à l'autre.

## Les notions

- **Organisation** : le conteneur de vos projets. Elle naît avec votre compte, à l'ouverture (voir [Votre compte](account.md)), et vous en êtes la **Propriétaire**. Les sièges ne sont pas facturés : invitez autant de personnes que nécessaire.
- **Membre** : un compte qui tient au moins un rôle dans l'organisation ou sur l'un de ses projets.
- **Habilitation** : un rôle, posé sur une portée. La portée est soit toute l'organisation, soit un seul projet. Une habilitation sur un projet peut porter une date de fin ; une habilitation sur toute l'organisation, non.
- **Compte de service** : un jeton pour une machine, qui tient un rang sur des projets seulement. Il se gère sur le même écran, mais il a sa page : [Comptes de service](service-accounts.md).

## Les rangs

Cinq rangs forment une échelle : chacun reprend tous les droits du rang en dessous. Deux rôles transversaux, **Sécurité** et **Facturation**, s'ajoutent au rang sans entrer dans l'échelle.

| Rôle | Ce qu'il ouvre, en plus du rang inférieur |
| --- | --- |
| Lecteur | Lire les projets, les déploiements, les domaines, les journaux d'exécution, le journal d'audit du projet. |
| Développeur | Déployer, annuler et restaurer un déploiement ; lire et écrire les variables hors production ; lire la base en SQL ; gérer les prévisualisations, rejouer un webhook. |
| Mainteneur | Créer un projet ; variables de production ; écrire en SQL et migrer la base ; politiques, authentification et temps réel du backend ; ajouter un domaine ; réglages du projet. |
| Administrateur | Membres, invitations et rôles ; comptes de service ; clés du backend ; webhooks sortants ; retirer un domaine ; raccordements GitHub ; décider des accès de Glowsoft. |
| Propriétaire | Supprimer un projet ; obligation du second facteur et ses exemptions ; projets d'agent revendiqués d'office ; plafond de dépense et moyen de paiement. |
| Sécurité | Lire le journal d'audit, celui de l'organisation compris ; régler le second facteur obligatoire et ses exemptions ; lister et révoquer les comptes de service ; protéger les prévisualisations. |
| Facturation | Lire la facturation, les factures et la consommation ; changer le palier d'un projet ; moyen de paiement et réglages de facturation. |

Le rang exact de chaque opération figure dans sa fiche de référence (ligne « Rang minimal »), par exemple [member.manage](../reference/operations/member.manage.md).

Trois règles complètent le tableau :

- **Le rang le plus précis l'emporte.** Un Administrateur de l'organisation ramené à Lecteur sur un projet y est Lecteur.
- **Le second facteur est exigé pour les rôles qui écrivent en SQL ou gèrent les clés.** Mainteneur, Administrateur et Propriétaire ne s'attribuent qu'à un compte qui tient un second facteur confirmé, quelle que soit l'organisation. Sinon la plateforme refuse avec `second_factor_required`, et rien n'est écrit. Voir [Sécurité du compte et de l'organisation](security.md).
- **Personne ne donne plus que son rang.** On ne donne, ne change ni ne retire un rôle au-dessus du sien : un Administrateur ne fait ni ne défait un Propriétaire.

## Inviter une personne

Une invitation est nominative : une adresse, un rôle et une portée, tous trois obligatoires. Elle expire sept jours après son envoi et se révoque tant qu'elle n'est pas acceptée. Une seule invitation peut attendre par personne et par portée.

Depuis la console :

1. Ouvrez **Membres**, puis **+ Inviter**.
2. Saisissez l'adresse, choisissez le rôle (Administrateur, Développeur ou Lecteur) et l'endroit : toute l'organisation ou un projet.
3. Envoyez. L'invitation apparaît dans la carte « Invitations en attente », avec son échéance ; le bouton de la ligne la révoque.

La personne reçoit un courriel avec un lien vers `/rejoindre`. Sans compte, elle y choisit son mot de passe : le compte s'ouvre et l'habilitation naît d'un seul geste. Avec un compte, elle se connecte d'abord, puis accepte sous sa session ; l'adresse du compte doit être celle de l'invitation.

> **Note.** Un rôle qui exige un second facteur (Mainteneur et au-dessus) ne s'accepte qu'une fois un facteur enrôlé. Le compte s'ouvre quand même ; l'invitation reste valable, et la personne l'accepte après avoir ajouté son second facteur sur l'écran **Compte**.

Par la ligne de commande ou l'API, l'invitation accepte tous les rôles, Mainteneur, Propriétaire, Sécurité et Facturation compris :

```sh
bastide organization invitation create --organization-id org_01JQ8ZK4M7NP2RSTVWXYZ34567 \
  --email camille@exemple.fr --role developer --project-id prj_01JQ8ZK4M7NP2RSTVWXYZ34567
```

```sh
curl -X POST https://api.bastide.app/v1/organizations/org_01JQ8ZK4M7NP2RSTVWXYZ34567/invitations \
  -H "Authorization: Bearer $BASTIDE_TOKEN" -H "Content-Type: application/json" \
  -d '{ "email": "camille@exemple.fr", "role": "reader" }'
```

Les invitations ne passent pas par le serveur MCP : un agent ne fait entrer personne dans votre organisation. Références : [organization.invitation.create](../reference/operations/organization.invitation.create.md), [organization.invitation.list](../reference/operations/organization.invitation.list.md), [organization.invitation.revoke](../reference/operations/organization.invitation.revoke.md), [account.invitation.accept](../reference/operations/account.invitation.accept.md).

## Changer ou retirer un rôle

L'écran **Membres** liste chaque membre avec ses habilitations, l'état de son second facteur et sa dernière venue. Il est réservé au rang Administrateur, parce qu'il montre des adresses. Choisissez un membre : la carte « Rôle d'un membre » s'ouvre sur ce qu'il tient.

- Un rôle de l'échelle **remplace** celui que le membre tient au même endroit.
- **Sécurité** et **Facturation** **s'ajoutent**.
- « Retirer ce qu'il y tient » enlève tout ce que le membre tient à cet endroit.
- « Jusqu'au » date une habilitation, seulement sur un projet.

La carte n'agit que sur un membre existant : un compte extérieur entre par invitation. Si un agent a touché aux rôles d'un membre, la ligne le dit.

Un agent peut changer un rôle par l'outil `member_manage`, dans le rang de la personne qui l'a autorisé. L'opération est de classe E : une personne valide l'appel avant qu'il parte. La liste se lit par `member_list`.

```json
{
  "organizationId": "org_01JQ8ZK4M7NP2RSTVWXYZ34567",
  "accountId": "acc_01JQ8ZK4M7NP2RSTVWXYZ34567",
  "role": "developer",
  "projectId": "prj_01JQ8ZK4M7NP2RSTVWXYZ34567",
  "expiresAt": "2026-12-31T23:59:59Z"
}
```

Un `role` à `null` retire l'habilitation. Un changement de rôle ferme toutes les sessions de console du membre : il se reconnecte avec ses nouveaux droits.

## Transférer la propriété, quitter l'organisation

L'organisation garde toujours au moins un Propriétaire. Tout geste qui retirerait le dernier est refusé avec `dernier_proprietaire`.

Pour transférer la propriété :

1. Assurez-vous que la personne qui reprend est membre et tient un second facteur.
2. Donnez-lui le rôle Propriétaire sur toute l'organisation (seul un Propriétaire le peut).
3. Elle, ou vous, retire ensuite votre rôle Propriétaire, ou le ramène au rang voulu.

Il n'existe pas de bouton « Quitter ». Retirer un rôle demande le rang Administrateur : un membre de rang inférieur demande à un Administrateur de le retirer. Une organisation entière ne se supprime pas encore (`organization.delete` est déclarée, pas servie) ; un projet, si : voir [Quitter Bastide](leave.md).

## Les réglages de l'organisation

L'écran **Réglages** de l'organisation regroupe ce qui vaut pour toute l'organisation :

- **Organisation** : le nom, l'identifiant court, l'identifiant `org_…` et vos rôles. Le nom ne se change pas encore : aucune opération ne renomme une organisation.
- **Second facteur** : l'obligation et les exemptions des comptes de service (voir [Sécurité](security.md)).
- **GitHub** : les comptes GitHub raccordés par l'application de Glowsoft, pour les dépôts privés (voir [Git](git.md)).
- **Agents** : décider si un projet créé par un agent naît revendiqué par le compte qui l'a autorisé (voir [Sécurité des agents](agent-safety.md)).

## Plusieurs organisations par compte

Un même compte peut tenir des rôles dans plusieurs organisations, par invitation. À la connexion, s'il n'en a qu'une, la console y entre ; s'il en a plusieurs, elle les propose par leur nom, la dernière choisie sur ce poste en premier. L'en-tête de chaque écran permet d'en changer. Un compte sans aucun rôle n'a rien à ouvrir : un administrateur doit l'inviter.

Par l'API ou la ligne de commande, `bastide account organization list` rend les organisations du compte, avec leur identifiant, leur identifiant court et vos rôles ([account.organization.list](../reference/operations/account.organization.list.md)).

## Agences et clients

Une agence qui gère plusieurs clients se fait inviter dans l'organisation de chacun. L'écran **Clients** rassemble alors toutes les organisations du compte : leurs projets, et ce qui demande l'attention (un dernier déploiement en échec, un projet suspendu, un projet en cours de suppression). Il ne lit que de l'exploitation, jamais une donnée applicative, et ce qu'il montre de chaque client dépend du rôle que ce client vous a donné.

La grille tarifaire prévoit une remise de volume (20 % de 5 à 99 projets actifs, 25 % dès 100 sur devis) et une option de marque blanche ; voir [Facturation](billing.md). La console sait s'afficher sous le nom d'un revendeur quand elle est servie sur son domaine, mais aucun écran ni aucune opération ne permet encore de régler cette marque soi-même. La consommation par client n'est pas encore affichée.

## Erreurs fréquentes

| Code | Ce qui se passe | Que faire |
| --- | --- | --- |
| `insufficient_rank` | Votre rang sur cette portée est trop bas. | Demandez le rang à un Administrateur. |
| `habilitation_au_dela_du_rang` | Le rôle visé, ou celui que le membre tient, dépasse le vôtre. | Faites faire le geste par un rang au moins égal. |
| `dernier_proprietaire` | Le geste retirerait le dernier Propriétaire. | Nommez d'abord un autre Propriétaire. |
| `second_factor_required` | Le compte visé n'a pas de second facteur pour ce rôle. | Il enrôle un facteur sur **Compte**, puis on recommence. |
| `invitation_invalide` | Le lien est inconnu, échu, révoqué ou déjà servi. | Demandez une nouvelle invitation. |
| `invitation_d_une_autre_adresse` | Vous êtes connecté avec une autre adresse que celle invitée. | Connectez-vous avec l'adresse invitée. |

Voir aussi : [Authentification unique](sso.md), [Sécurité](security.md), [Journal d'audit](audit.md), [Comptes de service](service-accounts.md), [Facturation](billing.md).
