> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Gestion des groupes

> Créez et gérez les groupes, les adhésions, la disponibilité des modèles et les plafonds d’ACU des groupes via l’API à clé de service.

<Info>
  Cette documentation concerne les déploiements fédéraux de Devin. [Retour à la documentation Devin](/fr/get-started/devin-intro)
</Info>

Gérez les [groupes](/fr/federal/groups) par programmation : créez, lisez, mettez à jour et supprimez des groupes, gérez leurs adhésions et configurez leur [disponibilité des modèles](/fr/federal/model-provisioning) ainsi que leurs [plafonds d’ACU](/fr/federal/acu-limits). Ces endpoints sont disponibles uniquement sur les déploiements fédéraux multi-tenant.

Tous les endpoints utilisent des requêtes JSON `POST`. Chaque corps de requête inclut `service_key` ; consultez la [vue d’ensemble de l’API](/fr/federal/api/overview) pour l’authentification, le périmètre, la pagination et les erreurs. Les endpoints de lecture nécessitent **Teams Read-Only** ; les endpoints d’écriture nécessitent **Teams Update**. Ces gestionnaires sont réservés aux déploiements self-hosted multi-tenant, mais n’appliquent pas la vérification distincte du niveau d’accès à l’analyse utilisée par `/Analytics`.

L’objet groupe renvoyé par les endpoints de lecture et d’écriture :

| Champ                        | Description                                                                                                                           |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `group_id`                   | L’ID du groupe.                                                                                                                       |
| `name`                       | Le nom du groupe.                                                                                                                     |
| `member_count`               | Nombre de Members actuels.                                                                                                            |
| `cascade_model_uids`         | UID des modèles autorisés pour Cascade. Une liste vide signifie que le groupe n’impose aucune restriction pour Cascade.               |
| `command_model_uids`         | UID des modèles autorisés pour Command. Une liste vide signifie que le groupe n’impose aucune restriction pour Command.               |
| `configured_cycle_acu_limit` | Plafond d’ACU par Member configuré pour le groupe. Omis lorsqu’aucun plafond n’est configuré. Toujours positif lorsqu’il est présent. |
| `effective_cycle_acu_limit`  | Plafond effectivement appliqué au groupe après prise en compte des limites de la Team. Omis lorsqu’aucune limite ne s’applique.       |

***

<div id="list-groups">
  ## Lister les groupes
</div>

```
POST /api/v1/ListGroups
```

Liste les groupes visibles par la clé de service. Les clés limitées au périmètre de la Team répertorient tous les groupes de la Team ; les clés limitées au périmètre d’un groupe répertorient uniquement le groupe qui leur est assigné. Nécessite **Teams Read-Only**. Prend en charge `page_size` / `page_token`.

```bash theme={null}
curl -X POST https://<your-server>/api/v1/ListGroups \
  -H "Content-Type: application/json" \
  -d '{"service_key": "your_service_key"}'
```

```json theme={null}
{
  "groups": [
    {"groupId": "group_a", "name": "Engineering", "memberCount": 24},
    {"groupId": "group_b", "name": "Data Science", "memberCount": 9}
  ],
  "nextPageToken": ""
}
```

<div id="get-group">
  ## Récupérer un groupe
</div>

```
POST /api/v1/GetGroup
```

Récupère un groupe, y compris ses listes d’autorisation de modèles, ainsi que son plafond d’ACU configuré et effectif. Nécessite l’autorisation **Teams Read-Only**. Les groupes inexistants, appartenant à une autre Team ou hors périmètre renvoient `not_found`.

```bash theme={null}
curl -X POST https://<your-server>/api/v1/GetGroup \
  -H "Content-Type: application/json" \
  -d '{"service_key": "your_service_key", "group_id": "group_a"}'
```

```json theme={null}
{
  "group": {
    "groupId": "group_a",
    "name": "Engineering",
    "memberCount": 24,
    "cascadeModelUids": ["model-uid-1", "model-uid-2"],
    "commandModelUids": [],
    "configuredCycleAcuLimit": 50,
    "effectiveCycleAcuLimit": 50
  }
}
```

<div id="create-group">
  ## Créer un groupe
</div>

```
POST /api/v1/CreateGroup
```

Crée un groupe avec le `name` spécifié dans la Team effective. Nécessite l’autorisation **Teams Update**. Les clés limitées à un groupe ne peuvent pas créer de groupes.

```bash theme={null}
curl -X POST https://<your-server>/api/v1/CreateGroup \
  -H "Content-Type: application/json" \
  -d '{"service_key": "your_service_key", "name": "Engineering"}'
```

La réponse contient l’objet `group` nouvellement créé.

<div id="update-group">
  ## Mettre à jour le groupe
</div>

```
POST /api/v1/UpdateGroup
```

Met à jour un groupe de manière atomique. Seuls les champs présents dans la requête sont modifiés ; les champs omis restent inchangés. Une requête ne contenant aucun champ à modifier renvoie `invalid_argument`. Nécessite l’autorisation **Teams Update**.

<ParamField body="group_id" type="string" required>
  Le groupe à mettre à jour.
</ParamField>

<ParamField body="name" type="string">
  Nouveau nom du groupe.
</ParamField>

<ParamField body="cascade_models" type="object">
  `{"model_uids": [...]}` — remplace la liste d’autorisation des modèles Cascade du groupe. Transmettre une liste vide supprime la restriction Cascade du groupe. Consultez [Model Provisioning](/fr/federal/model-provisioning) pour savoir comment les listes d’autorisation des groupes se combinent.
</ParamField>

<ParamField body="command_models" type="object">
  `{"model_uids": [...]}` — remplace la liste d’autorisation des modèles Command du groupe. Transmettre une liste vide supprime la restriction Command du groupe.
</ParamField>

<ParamField body="set_cycle_acu_limit" type="number">
  Définit le plafond d’ACU par membre du groupe et par cycle de facturation. Doit être positif. Ne peut pas être utilisé avec `clear_cycle_acu_limit`.
</ParamField>

<ParamField body="clear_cycle_acu_limit" type="boolean">
  Supprime le plafond d’ACU du groupe et rétablit le comportement de la Team ou le comportement par défaut. Dans cette API à clé de service, `set_cycle_acu_limit` doit être fini et positif ; utilisez cette opération de suppression explicite pour retirer la dérogation du groupe. Le contrôle de la limite d’ACU du groupe dans le portail accepte `cycle_acu_limit: 0` comme demande de suppression.
</ParamField>

```bash theme={null}
curl -X POST https://<your-server>/api/v1/UpdateGroup \
  -H "Content-Type: application/json" \
  -d '{
    "service_key": "your_service_key",
    "group_id": "group_a",
    "cascade_models": {"model_uids": ["model-uid-1", "model-uid-2"]},
    "set_cycle_acu_limit": 50
  }'
```

La réponse contient l’objet `group` mis à jour.

<div id="delete-group">
  ## Supprimer le groupe
</div>

```
POST /api/v1/DeleteGroup
```

Supprime un groupe à l’aide de `group_id`. La suppression d’un groupe déjà absent du périmètre autorisé de la key réussit sans effet. Nécessite **Teams Update**.

```bash theme={null}
curl -X POST https://<your-server>/api/v1/DeleteGroup \
  -H "Content-Type: application/json" \
  -d '{"service_key": "your_service_key", "group_id": "group_a"}'
```

<div id="list-group-members">
  ## Lister les membres d’un groupe
</div>

```
POST /api/v1/ListGroupMembers
```

Répertorie les membres actuels d’un groupe. Nécessite l’autorisation **Teams Read-Only**. Prend en charge `page_size` / `page_token`.

```bash theme={null}
curl -X POST https://<your-server>/api/v1/ListGroupMembers \
  -H "Content-Type: application/json" \
  -d '{"service_key": "your_service_key", "group_id": "group_a"}'
```

```json theme={null}
{
  "members": [
    {"userId": "user_abc", "email": "dev@agency.gov"}
  ],
  "nextPageToken": ""
}
```

<div id="add-group-members">
  ## Ajouter des membres à un groupe
</div>

```
POST /api/v1/AddGroupMembers
```

Ajoute les utilisateurs de la Team actuelle à un groupe par e-mail (`user_emails`, de 1 à 1 000 entrées). Nécessite l’autorisation **Teams Update**.

* Idempotent : l’ajout d’un Member déjà existant réussit sans effet.
* Les e-mails sont supprimés des espaces superflus et dédupliqués sans tenir compte de la casse.
* Tout ou rien : si une adresse e-mail est inconnue ou appartient à une autre Team, l’intégralité de la requête est rejetée et aucune donnée n’est écrite.

```bash theme={null}
curl -X POST https://<your-server>/api/v1/AddGroupMembers \
  -H "Content-Type: application/json" \
  -d '{
    "service_key": "your_service_key",
    "group_id": "group_a",
    "user_emails": ["dev@agency.gov", "lead@agency.gov"]
  }'
```

<div id="remove-group-members">
  ## Supprimer des membres d’un groupe
</div>

```
POST /api/v1/RemoveGroupMembers
```

Supprime des utilisateurs d’un groupe par adresse e-mail (`user_emails`, de 1 à 1 000 entrées). Nécessite l’autorisation **Teams Update**. La validation est tout ou rien, comme pour Add group members ; supprimer un utilisateur valide qui n’est pas Member est une opération réussie sans effet.

```bash theme={null}
curl -X POST https://<your-server>/api/v1/RemoveGroupMembers \
  -H "Content-Type: application/json" \
  -d '{
    "service_key": "your_service_key",
    "group_id": "group_a",
    "user_emails": ["dev@agency.gov"]
  }'
```
