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

# Limites d’ACU au niveau de l’utilisateur

> Plafonnez la consommation mensuelle d’ACU de chaque utilisateur à l’aide de niveaux, de mappages de groupes IdP et de dérogations par utilisateur

<Note>
  Les limites au niveau de l’utilisateur sont en bêta et nécessitent l’activation de cette fonctionnalité pour votre Enterprise. Pour l’activer, contactez l’équipe en charge de votre compte.
</Note>

Une limite au niveau de l’utilisateur plafonne l’**utilisation locale et cloud** combinée des ACU d’un utilisateur : les sessions Devin cloud, ainsi que Devin Desktop, Windsurf JetBrains et Devin CLI, sont comptabilisés dans le même plafond. Lorsqu’un utilisateur atteint sa limite, il ne peut plus démarrer de nouvelles tâches sur ces interfaces tant que la limite n’est pas augmentée ou que l’utilisation n’est pas réinitialisée au cours de la prochaine période mensuelle.

Vous pouvez gérer les niveaux et les limites au niveau de l’utilisateur depuis l’application web, dans **Enterprise Settings**, sous **Politiques d’utilisation** (consultez le [guide des politiques d’utilisation](/fr/enterprise/features/usage-policies)), ou via les [endpoints usage-policies](#tier-endpoints) ci-dessous.

Les limites au niveau de l’utilisateur sont gérées au moyen de **niveaux**. Un niveau est une limite par défaut nommée, à l’échelle du compte, partagée par ses membres :

* Les utilisateurs sont affectés à un niveau de trois façons : un admin les **assigne explicitement**, un [**mappage de groupe IdP**](#idp-group-endpoints) les y affecte (un groupe est mappé à un niveau et ses membres héritent de ce niveau, sauf s’ils sont explicitement assignés ailleurs), ou ils sont affectés au **niveau par défaut**. Chaque compte peut désigner un niveau comme niveau par défaut ; chaque membre du compte qui n’est pas affecté à un autre niveau en fait partie. Il n’existe pas de « limite utilisateur par défaut » distincte : configurez plutôt le niveau par défaut.
* Les utilisateurs peuvent avoir une **dérogation**, soit **permanente** (sans expiration), soit **temporaire** (qui expire à la fin de la période de facturation mensuelle en cours). Les dérogations sont propres à chaque utilisateur : en définir une ne modifie jamais son affectation à un niveau.
* La **limite effective** d’un utilisateur est déterminée dans cet ordre : dérogation permanente, sinon dérogation temporaire active, sinon `cycle_acu_limit` de son niveau explicitement assigné, sinon la limite de son niveau mappé au groupe IdP le mieux classé, sinon la limite du niveau par défaut. Une limite `null` signifie qu’il n’y a pas de plafond.
* Les utilisateurs peuvent demander une limite plus élevée ; les admins examinent ces [**demandes d’augmentation de limite**](#limit-increase-request-endpoints), et la `politique` de chaque niveau détermine si les demandes sont automatiquement approuvées ou soumises à un examen manuel.

Les limites au niveau de l’utilisateur sont indépendantes des [limites au niveau de l’organisation](/fr/admin/billing/org-acu-limits) : une demande est bloquée si l’une ou l’autre est atteinte. Consultez [Limites d’ACU](/fr/admin/billing/acu-limits) pour connaître l’authentification, les autorisations et la sémantique de `PATCH` communes à tous les endpoints de cette page.

<Warning>
  Les endpoints de limite par utilisateur et de limite utilisateur par défaut antérieurs aux niveaux sont obsolètes ; consultez [Endpoints hérités de limite d’ACU par utilisateur](/fr/admin/billing/legacy-user-acu-limits).
</Warning>

<div id="tier-endpoints">
  ## Endpoints par niveau
</div>

<div id="list-tiers">
  ### Lister les niveaux
</div>

```http theme={null}
GET /v3beta1/enterprise/usage-policies/tiers
```

Renvoie une liste paginée de niveaux par ordre de priorité : `priority` la plus élevée en premier, puis, à priorité égale, le niveau le plus récent. Chaque niveau se présente comme suit :

```json theme={null}
{
  "tier_id": "tier-abc123",
  "name": "Engineers",
  "is_default": true,
  "cycle_acu_limit": 500,
  "policy": "manual",
  "max_limit": null,
  "priority": 0,
  "member_count": 42,
  "created_at": 1735689600
}
```

* `is_default` : indique s’il s’agit du niveau par défaut du compte.
* `cycle_acu_limit` : la limite ACU par cycle par défaut pour chaque membre ; `null` signifie qu’aucun plafond n’est appliqué.
* `policy` : définit le traitement des demandes d’augmentation de limite pour ce niveau — `unconditional` et `conditional` approuvent les demandes jusqu’à `max_limit`, tandis que `manual` nécessite l’examen d’un administrateur. La politique `conditional` (approbation automatique basée sur l’efficacité) doit être activée séparément ; contactez votre équipe en charge du compte.
* `max_limit` : la limite maximale jusqu’à laquelle les demandes d’augmentation sont approuvées ; `null` approuve les demandes sans plafond. Cette valeur est toujours `null` lorsque `cycle_acu_limit` est `null`.
* `priority` : classe ce niveau parmi les niveaux d’un utilisateur associés à des groupes IdP — la valeur la plus élevée l’emporte ; en cas d’égalité, le niveau le plus récent prévaut. Ce classement ne sert qu’à établir la préséance : un niveau de priorité supérieure peut avoir une `cycle_acu_limit` inférieure. Une attribution explicite à un utilisateur prévaut sur ce classement, et le niveau par défaut n’est jamais classé.
* `member_count` : le nombre d’utilisateurs actuellement dans ce niveau — utilisateurs explicitement attribués et utilisateurs ajoutés via un mappage de groupe IdP. Pour le niveau par défaut, ce nombre inclut tous les membres du compte qui ne figurent dans aucun autre niveau.

<Note>
  Configurez le niveau par défaut et la priorité des niveaux dans l’application web, sous **Politiques d’utilisation**.
</Note>

<div id="create-a-tier">
  ### Créer un niveau
</div>

```http theme={null}
POST /v3beta1/enterprise/usage-policies/tiers
```

**Corps de la requête**

```json theme={null}
{
  "name": "Engineers",
  "cycle_acu_limit": 500,
  "policy": "manual"
}
```

Le premier niveau du compte devient automatiquement le niveau par défaut. Renvoie le code HTTP `201` avec le niveau créé.

<div id="get-a-tier">
  ### Obtenir un niveau
</div>

```http theme={null}
GET /v3beta1/enterprise/usage-policies/tiers/{tier_id}
```

<div id="update-a-tier">
  ### Mettre à jour un niveau
</div>

```http theme={null}
PATCH /v3beta1/enterprise/usage-policies/tiers/{tier_id}
```

Mise à jour partielle : les champs omis restent inchangés. Pour modifier le niveau par défaut ou la priorité des niveaux, utilisez l’application web, dans **Politiques d’utilisation**.

```json theme={null}
{
  "name": "Engineering",
  "cycle_acu_limit": 750
}
```

<div id="delete-a-tier">
  ### Supprimer un niveau
</div>

```http theme={null}
DELETE /v3beta1/enterprise/usage-policies/tiers/{tier_id}
```

Renvoie HTTP `204` en cas de réussite. Le niveau par défaut ne peut pas être supprimé (promouvez d’abord un autre niveau). Les utilisateurs d’un niveau qui en compte encore doivent d’abord être déplacés, et tous les mappages de groupes IdP associés à ce niveau doivent d’abord être supprimés.

<div id="tier-user-endpoints">
  ## Endpoints utilisateur par niveau
</div>

<div id="list-a-tiers-users">
  ### Lister les utilisateurs d’un niveau
</div>

```http theme={null}
GET /v3beta1/enterprise/usage-policies/tiers/{tier_id}/users
```

Renvoie une liste paginée des utilisateurs du niveau, avec leurs limites résolues — les utilisateurs explicitement assignés et ceux ajoutés via un mappage de groupe IdP. Pour le niveau par défaut, il s’agit de tous les membres du compte n’appartenant à aucun autre niveau :

```json theme={null}
{
  "user_id": "user_abc123",
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "cycle_acu_limit_override": null,
  "temporary_cycle_acu_limit": 800,
  "effective_cycle_acu_limit": 800,
  "limit_source": "temporary_override",
  "membership": "explicit"
}
```

* `cycle_acu_limit_override` : la dérogation permanente de l’utilisateur, le cas échéant.
* `temporary_cycle_acu_limit` : la dérogation temporaire de l’utilisateur, présente uniquement lorsqu’elle est active au cours de la période de facturation mensuelle en cours.
* `effective_cycle_acu_limit` : la limite actuellement appliquée à l’utilisateur ; `null` signifie qu’aucun plafond ne s’applique.
* `limit_source` : l’origine de la limite effective — `override` (permanente), `temporary_override` ou `tier`.
* `membership` : la raison pour laquelle l’utilisateur appartient au niveau — `explicit` (attribué directement), `idp_group` (via le mappage de groupe IdP retenu) ou `default` (repli vers le niveau par défaut).

<div id="assign-a-user-to-a-tier">
  ### Affecter un utilisateur à un niveau
</div>

```http theme={null}
PUT /v3beta1/enterprise/usage-policies/tiers/{tier_id}/users/{user_id}
```

Idempotent. Renvoie le code HTTP `204` en cas de réussite. Le déplacement d’un utilisateur depuis un autre niveau supprime toute dérogation par utilisateur, de sorte qu’il hérite de la limite du niveau de destination.

<div id="remove-a-user-from-a-tier">
  ### Retirer un utilisateur d’un niveau
</div>

```http theme={null}
DELETE /v3beta1/enterprise/usage-policies/tiers/{tier_id}/users/{user_id}
```

Supprime l’attribution explicite du niveau de l’utilisateur (ainsi que toute dérogation) et le rétablit au niveau par défaut. Renvoie le code HTTP `204` en cas de réussite.

<div id="user-override-endpoint">
  ## Endpoint de dérogation utilisateur
</div>

<div id="set-or-clear-a-users-override">
  ### Définir ou supprimer la dérogation d’un utilisateur
</div>

```http theme={null}
PATCH /v3beta1/enterprise/usage-policies/users/{user_id}
```

Au niveau de l’utilisateur : la cible doit seulement être membre du compte — aucun niveau n’est concerné et l’affectation de niveau de l’utilisateur n’est jamais modifiée. Un utilisateur disposant uniquement d’une dérogation (sans affectation explicite de niveau) reste au niveau par défaut.

**Corps de la requête — définir une dérogation temporaire**

```json theme={null}
{
  "cycle_acu_limit": 800,
  "kind": "temporary"
}
```

`kind` est obligatoire lors de la définition d’une valeur : `permanent` n’expire jamais ; `temporary` expire à la fin de la période de facturation mensuelle en cours.

**Corps de la requête — effacer toutes les dérogations**

```json theme={null}
{
  "cycle_acu_limit": null
}
```

L’endpoint renvoie le code HTTP `204` en cas de réussite.

<div id="idp-group-endpoints">
  ## Endpoints des groupes IdP
</div>

Mappez un groupe IdP à un niveau afin que ses membres héritent automatiquement de ce niveau. Les mappages sont déterminés en temps réel en fonction de l'appartenance aux groupes et ne modifient jamais l'attribution explicite de niveau d'un utilisateur : une attribution explicite prévaut toujours. Pour un utilisateur appartenant à plusieurs groupes mappés, le niveau mappé le mieux classé est retenu (valeur `priority` la plus élevée ; en cas d'égalité, le niveau le plus récent).

<div id="list-idp-group-mappings">
  ### Lister les mappages de groupes IdP
</div>

```http theme={null}
GET /v3beta1/enterprise/usage-policies/idp-groups
```

Renvoie une liste paginée des mappages entre les groupes et les niveaux du compte, du plus ancien au plus récent. Utilisez le filtre `?tier_id=` pour lister uniquement les groupes mappés à un niveau :

```json theme={null}
{
  "idp_group_id": "grp_abc123",
  "idp_group_name": "Engineering",
  "tier_id": "tier-abc123"
}
```

<div id="get-an-idp-groups-mapping">
  ### Obtenir le mappage d’un groupe IdP
</div>

```http theme={null}
GET /v3beta1/enterprise/usage-policies/idp-groups/{idp_group_name}
```

Renvoie un code HTTP `404` si le groupe n’est associé à aucun mappage.

<div id="map-an-idp-group-to-a-tier">
  ### Mapper un groupe IdP à un niveau
</div>

```http theme={null}
PUT /v3beta1/enterprise/usage-policies/idp-groups/{idp_group_name}
```

**Corps de la requête**

```json theme={null}
{
  "tier_id": "tier-abc123"
}
```

Upsert idempotent. Un groupe ne peut être mappé qu’à un seul niveau. Mapper un groupe déjà mappé le déplace donc vers le niveau indiqué.

<div id="unmap-an-idp-group">
  ### Dissocier un groupe IdP
</div>

```http theme={null}
DELETE /v3beta1/enterprise/usage-policies/idp-groups/{idp_group_name}
```

Renvoie le code HTTP `204` en cas de réussite. Le niveau associé ne s’applique plus aux membres du groupe ; les utilisateurs sans attribution explicite ni autre niveau associé basculent vers le niveau par défaut.

<div id="limit-increase-request-endpoints">
  ## Endpoints de demande d’augmentation de limite
</div>

Les utilisateurs peuvent demander une limite plus élevée par cycle. La `politique` associée au niveau du demandeur détermine le traitement de la demande : `unconditional` et `conditional` l’approuvent automatiquement jusqu’à la `max_limit` du niveau, tandis que `manual` la soumet à l’examen d’un administrateur via ces endpoints (ou dans **Politiques d’utilisation** de l’application web).

<Note>
  Contrairement aux autres endpoints de cette page, la consultation des demandes d’augmentation de limite requiert l’autorisation **ManageBilling** : elles contiennent l’identité du membre et des messages en texte libre, qui constituent des données du workflow d’administration.
</Note>

<div id="list-limit-increase-requests">
  ### Lister les demandes d’augmentation des limites
</div>

```http theme={null}
GET /v3beta1/enterprise/usage-policies/requests
```

Renvoie une liste paginée, pouvant être filtrée avec `?status=` (`pending`, `approved`, `denied`) et `?user_id=` :

```json theme={null}
{
  "request_id": 42,
  "user_id": "user_abc123",
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "tier_id": "tier-abc123",
  "tier_name": "Engineers",
  "current_cycle_acu_limit": 500,
  "requested_cycle_acu_limit": 800,
  "message": "Wrapping up a large migration this month",
  "status": "pending",
  "created_at": 1735689600,
  "reviewed_at": null,
  "reviewer": null
}
```

* `tier_id` / `tier_name` : le niveau du demandeur (attribution explicite, mappage de groupe IdP ou niveau par défaut) ; `null` si le compte n’a aucun niveau.
* `current_cycle_acu_limit` : la limite actuellement appliquée au demandeur ; `null` indique l’absence de plafond.
* `reviewer` : l’admin qui a examiné la demande ; `null` tant que la demande est en attente.

<div id="get-a-limit-increase-request">
  ### Récupérer une demande d’augmentation de limite
</div>

```http theme={null}
GET /v3beta1/enterprise/usage-policies/requests/{request_id}
```

<div id="approve-a-limit-increase-request">
  ### Approuver une demande d’augmentation de limite
</div>

```http theme={null}
POST /v3beta1/enterprise/usage-policies/requests/{request_id}/approve
```

Accorde la limite demandée sous forme de **dérogation temporaire** qui expire à la fin de la période de facturation mensuelle en cours. Vous pouvez éventuellement accorder une limite différente :

```json theme={null}
{
  "cycle_acu_limit": 700
}
```

Renvoie la demande mise à jour. Renvoie le code HTTP `409` si la demande a déjà été examinée ou si le demandeur n’est plus membre du compte.

<div id="deny-a-limit-increase-request">
  ### Refuser une demande d’augmentation de limite
</div>

```http theme={null}
POST /v3beta1/enterprise/usage-policies/requests/{request_id}/deny
```

Renvoie la requête mise à jour, ou le code HTTP `409` si elle a déjà été examinée.

<div id="example-workflows">
  ## Exemples de workflows
</div>

<div id="set-up-tiers-with-a-default-limit">
  ### Configurer des niveaux avec une limite par défaut
</div>

Créez un niveau par défaut afin que chaque utilisateur dispose d’un plafond mensuel de 500 ACU :

```bash theme={null}
curl -X POST "https://api.devin.ai/v3beta1/enterprise/usage-policies/tiers" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"name": "Standard", "cycle_acu_limit": 500, "policy": "manual"}'
```

Créez un niveau avec une limite plus élevée et attribuez-y un utilisateur :

```bash theme={null}
curl -X POST "https://api.devin.ai/v3beta1/enterprise/usage-policies/tiers" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"name": "Power users", "cycle_acu_limit": 2000, "policy": "manual"}'

curl -X PUT "https://api.devin.ai/v3beta1/enterprise/usage-policies/tiers/tier-abc123/users/user_abc123" \
  -H "Authorization: Bearer <token>"
```

Accordez temporairement à un utilisateur une limite plus élevée pour le reste du mois :

```bash theme={null}
curl -X PATCH "https://api.devin.ai/v3beta1/enterprise/usage-policies/users/user_abc123" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"cycle_acu_limit": 800, "kind": "temporary"}'
```

Associez un groupe IdP au niveau de limite supérieure et examinez une demande d’augmentation de limite en attente :

```bash theme={null}
curl -X PUT "https://api.devin.ai/v3beta1/enterprise/usage-policies/idp-groups/Engineering" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"tier_id": "tier-abc123"}'

curl -X POST "https://api.devin.ai/v3beta1/enterprise/usage-policies/requests/42/approve" \
  -H "Authorization: Bearer <token>"
```

<div id="frequently-asked-questions">
  ## Questions fréquentes
</div>

<AccordionGroup>
  <Accordion title="À quels produits les limites au niveau de l’utilisateur s’appliquent-elles ?">
    L’utilisation locale et cloud est comptabilisée dans un plafond unique : les sessions Devin cloud et l’utilisation locale via la CLI et les IDE (Devin Desktop, Windsurf JetBrains et Devin CLI).
  </Accordion>

  <Accordion title="Comment la limite effective d’un utilisateur est-elle déterminée ?">
    Une dérogation permanente prévaut, suivie d’une dérogation temporaire active, puis de la limite du niveau explicitement attribué à l’utilisateur, de celle du niveau mappé au groupe IdP le mieux classé, puis de celle du niveau par défaut. Une limite `null` à tous les niveaux signifie que l’utilisateur n’est soumis à aucun plafond.
  </Accordion>

  <Accordion title="Les dérogations utilisateur s’ajoutent-elles à la limite du niveau ?">
    Non. Une dérogation remplace la limite du niveau pour cet utilisateur. Si la limite du niveau est de 500 ACU et qu’un utilisateur bénéficie d’une dérogation de 200 ACU, sa limite effective est de 200 ACU.
  </Accordion>

  <Accordion title="Quelle est la différence entre une dérogation permanente et une dérogation temporaire ?">
    Une dérogation permanente n’expire jamais. Une dérogation temporaire expire à la fin de la période de facturation mensuelle en cours, après quoi l’utilisateur revient à la limite de son niveau. L’approbation d’une demande d’augmentation de limite accorde une dérogation temporaire.
  </Accordion>

  <Accordion title="Existe-t-il toujours une limite utilisateur par défaut ?">
    Pas en tant que paramètre autonome. Configurez plutôt la limite du niveau par défaut : elle s’applique à tous les membres du compte qui ne sont attribués à aucun autre niveau. Les [anciens endpoints de limite utilisateur par défaut](/fr/admin/billing/legacy-user-acu-limits#default-user-limit-endpoints) lisent et écrivent désormais la limite du niveau par défaut.
  </Accordion>

  <Accordion title="Que se passe-t-il lorsqu’une personne atteint sa limite ?">
    Les nouveaux travaux sont bloqués sur les interfaces locales comme cloud. L’utilisateur peut contacter un administrateur Enterprise pour ajuster la limite ou attendre le début de la prochaine période mensuelle.
  </Accordion>
</AccordionGroup>
