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

# Consommation d’ACU

> Consultez la consommation d’ACU de l’équipe, des groupes et de chaque utilisateur sur une période historique ou pendant le cycle de facturation en cours.

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

Consultez la consommation d’ACU en envoyant une requête typée à l’endpoint Analytics. La réponse peut inclure un total pour l’ensemble de l’équipe, des totaux pour un maximum de 100 groupes sélectionnés et des lignes paginées par utilisateur pour l’ensemble de l’équipe ou pour un groupe.

```
POST https://<your-server>/api/v1/Analytics
```

Nécessite l’autorisation **Analytics Read** et un niveau Team donnant accès à l’API d’analyse. Consultez la [vue d’ensemble de l’API](/fr/federal/api/overview) pour plus d’informations sur l’authentification, la pagination et les erreurs, ainsi que les [limites d’ACU](/fr/federal/acu-limits) pour comprendre le lien entre la consommation et l’application des règles.

<Note>
  Une requête peut contenir soit la requête typée `acu_consumption_query` décrite ici, soit l’ancienne requête personnalisée `query_requests`, mais pas les deux.
</Note>

***

<div id="request">
  ## Requête
</div>

<ParamField body="service_key" type="string" required>
  Votre clé de service disposant de l’autorisation Analytics Read.
</ParamField>

<ParamField body="start_timestamp" type="string">
  Début d’une période historique au format RFC 3339 (par exemple `2025-01-01T00:00:00Z`). Obligatoire pour les requêtes `historical` ; doit être omis pour les requêtes `current_cycle`.
</ParamField>

<ParamField body="end_timestamp" type="string">
  Fin d’une période historique au format RFC 3339. La période est inclusive et ne peut pas dépasser 90 jours.
</ParamField>

<ParamField body="acu_consumption_query" type="object" required>
  Requête typée de consommation d’ACU.

  <Expandable title="Objet de requête de consommation d’ACU">
    <ParamField body="historical" type="object">
      Interroge une période historique définie par les champs `start_timestamp` et `end_timestamp` de premier niveau. Transmettez un objet vide : `"historical": {}`. Un seul des champs `historical` ou `current_cycle` est obligatoire.
    </ParamField>

    <ParamField body="current_cycle" type="object">
      Interroge l’utilisation en quasi temps réel pour le cycle de facturation en cours. Transmettez un objet vide : `"current_cycle": {}`. Les horodatages de premier niveau doivent être omis.
    </ParamField>

    <ParamField body="include_team_total" type="boolean">
      Inclut le total d’ACU de toute la Team. Non disponible pour les clés limitées à un groupe.
    </ParamField>

    <ParamField body="group_ids" type="array">
      Jusqu’à 100 ID de groupes à inclure comme totaux par groupe. Les groupes inconnus, appartenant à une autre Team ou hors périmètre renvoient `not_found`. Une clé de service limitée à un groupe ne peut demander que le groupe qui lui est attribué.
    </ParamField>

    <ParamField body="user_scope" type="object">
      Demande des lignes d’ACU par utilisateur pour un périmètre donné.

      <Expandable title="Objet de périmètre utilisateur">
        <ParamField body="team" type="object">
          Lignes par utilisateur pour l’ensemble de la Team. Transmettez un objet vide : `"team": {}`. Non disponible pour les clés limitées à un groupe.
        </ParamField>

        <ParamField body="group_id" type="string">
          Lignes par utilisateur pour un groupe. Le groupe doit également figurer dans `group_ids`.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="page_size" type="integer">
      Lignes d’utilisateurs par page, de 1 à 1 000. La valeur par défaut est 100.
    </ParamField>

    <ParamField body="page_token" type="string">
      Jeton issu du champ `next_page_token` d’une réponse précédente. Tous les autres champs de la requête doivent rester inchangés.
    </ParamField>
  </Expandable>
</ParamField>

<div id="response">
  ## Réponse
</div>

<ResponseField name="acu_consumption" type="object">
  <Expandable title="Résultat de la consommation d’ACU">
    <ResponseField name="team" type="object">
      Résultats pour l’ensemble de la Team. `total_acus` est présent lorsque `include_team_total` a été défini ; `user_rows` est renseigné lorsque `user_scope.team` a été demandé.
    </ResponseField>

    <ResponseField name="groups" type="array">
      Une entrée par groupe demandé : `group_id`, `group_name`, `total_acus` et `user_rows` (renseigné pour le groupe sélectionné dans `user_scope.group_id`).
    </ResponseField>

    <ResponseField name="next_page_token" type="string">
      Présent lorsqu’il existe d’autres lignes utilisateur. Valide pendant 24 heures.
    </ResponseField>

    <ResponseField name="metadata" type="object">
      `period_start`, `period_end`, `generated_at`, `team_id`, les `group_ids` demandés et le `billing_mode` de la Team.
    </ResponseField>
  </Expandable>
</ResponseField>

Chaque ligne utilisateur contient :

| Champ            | Description                                                                                                                                                                                                                               |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `user_id`        | ID utilisateur stable et non sensible.                                                                                                                                                                                                    |
| `email`          | L’adresse e-mail de l’utilisateur, lorsqu’elle peut être déterminée.                                                                                                                                                                      |
| `current_member` | Indique si l’utilisateur est actuellement un membre actif de la Team. Les lignes limitées à un groupe sont sélectionnées en fonction de l’appartenance actuelle au groupe, mais cet indicateur reflète toujours l’appartenance à la Team. |
| `total_acus`     | ACU consommés par l’utilisateur au cours de la période.                                                                                                                                                                                   |

<div id="behavior">
  ## Comportement
</div>

* **L’attribution aux groupes repose sur l’appartenance actuelle.** Les totaux des groupes et les lignes d’utilisateurs par groupe reflètent les personnes qui font actuellement partie du groupe, et non celles qui en faisaient partie pendant la période. Les utilisateurs appartenant à plusieurs groupes demandés sont comptabilisés dans chacun d’eux.
* **Les lignes Team conservent les anciens utilisateurs.** Les lignes d’utilisateurs limitées à une Team incluent les utilisateurs qui ont depuis quitté la Team ou qui n’ont pas pu être résolus ; leur indicateur `current_member` est défini sur `false`.
* **Seuls les utilisateurs ayant utilisé des ACU apparaissent.** Les utilisateurs n’ayant consommé aucun ACU pendant la période sont omis des lignes d’utilisateurs.
* **Historique ou cycle actuel.** Les fenêtres historiques couvrent jusqu’à 90 jours d’utilisation enregistrée, inclus. `current_cycle` renvoie l’utilisation en quasi temps réel pour le cycle de facturation actif ; si la Team n’a pas de bornes de cycle actif, les champs de période des métadonnées l’indiquent.
* **Cohérence.** Les totaux et la page de lignes d’utilisateurs d’une même réponse sont calculés à partir d’un unique snapshot cohérent.

<div id="examples">
  ## Exemples
</div>

<div id="team-total-and-per-user-rows-for-the-current-cycle">
  ### Lignes du total de la Team et du détail par utilisateur pour le cycle en cours
</div>

```bash theme={null}
curl -X POST https://<your-server>/api/v1/Analytics \
  -H "Content-Type: application/json" \
  -d '{
    "service_key": "your_service_key",
    "acu_consumption_query": {
      "current_cycle": {},
      "include_team_total": true,
      "user_scope": {"team": {}}
    }
  }'
```

```json theme={null}
{
  "acuConsumption": {
    "team": {
      "totalAcus": 1240.5,
      "userRows": [
        {"userId": "user_abc", "email": "dev@agency.gov", "currentMember": true, "totalAcus": 310.2}
      ]
    },
    "nextPageToken": "…",
    "metadata": {
      "periodStart": "2025-03-01T00:00:00Z",
      "periodEnd": "2025-03-14T18:22:05Z",
      "generatedAt": "2025-03-14T18:22:05Z",
      "teamId": "team_123",
      "billingMode": "ACU_CREDIT"
    }
  }
}
```

<div id="historical-per-group-breakdown">
  ### Répartition historique par groupe
</div>

```bash theme={null}
curl -X POST https://<your-server>/api/v1/Analytics \
  -H "Content-Type: application/json" \
  -d '{
    "service_key": "your_service_key",
    "start_timestamp": "2025-01-01T00:00:00Z",
    "end_timestamp": "2025-03-31T23:59:59Z",
    "acu_consumption_query": {
      "historical": {},
      "group_ids": ["group_a", "group_b"],
      "user_scope": {"group_id": "group_a"}
    }
  }'
```

```json theme={null}
{
  "acuConsumption": {
    "groups": [
      {
        "groupId": "group_a",
        "groupName": "Engineering",
        "totalAcus": 512.0,
        "userRows": [
          {"userId": "user_abc", "email": "dev@agency.gov", "currentMember": true, "totalAcus": 96.4}
        ]
      },
      {"groupId": "group_b", "groupName": "Data Science", "totalAcus": 288.7}
    ],
    "metadata": {
      "periodStart": "2025-01-01T00:00:00Z",
      "periodEnd": "2025-03-31T23:59:59Z",
      "generatedAt": "2025-04-02T10:15:00Z",
      "teamId": "team_123",
      "groupIds": ["group_a", "group_b"],
      "billingMode": "ACU_CREDIT"
    }
  }
}
```
