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

# Obtenir les appels d’outils de l’Agent Devin

> Comptabilisez les appels d’outils effectués par l’agent, comme la recherche Web ou l’exécution de commandes, pour votre Team dans Devin Desktop et la Devin CLI, regroupés par outil, utilisateur, modèle, IDE ou système d’exploitation.

<Note>
  Il s’agit d’un **endpoint v2** qui utilise l’authentification par jeton Bearer et des paramètres de requête, contrairement à l’API d’analyse v1, qui utilise des clés de service dans le corps de la requête. Consultez la section [Authentification](#authentication) ci-dessous.
</Note>

<Warning>
  Cet endpoint n’est **pas** conçu pour la surveillance de l’utilisation en temps réel. Sa limite de débit est faible
  (10 requêtes par heure et par Team). Utilisez-le plutôt pour des rapports périodiques et des exportations en masse.
</Warning>

<h2 id="authentication">
  Authentification
</h2>

Cet endpoint utilise l'authentification par **jeton Bearer**. Incluez votre token dans l'en-tête `Authorization` :

```
Authorization: Bearer <your_token>
```

Utilisez soit une clé API d’utilisateur de service Devin disposant de l’autorisation **Utiliser l’API d’analyse locale**, soit une clé de service Windsurf
disposant de l’autorisation **Analytics Read**. Consultez la section
[Authentification](/fr/desktop/accounts/api-reference/analytics-v2-introduction#authentication) pour savoir comment
créer l’une ou l’autre.

Contrairement à la source de données v1 [`cascade_tool_usage`](/fr/desktop/accounts/api-reference/cascade-analytics#cascade_tool_usage),
cet endpoint accepte les clés API d’utilisateur de service Devin : les Teams de la plateforme Cognition peuvent donc
suivre l’utilisation des outils sans clé de service Windsurf.

<h2 id="metrics">
  Métriques
</h2>

Le paramètre de requête `metric` est obligatoire et n’accepte actuellement que `calls`, soit le nombre d’appels d’outils
effectués par l’agent. Il figure sous la forme d’un champ entier `calls` dans chaque ligne. Les requêtes sans `metric`, ou
qui spécifient une autre métrique, échouent avec une erreur `400`.

Les appels d’outils sont comptabilisés chaque fois que l’agent invoque un outil dans [Devin Desktop](/fr/desktop/introducing-devin-desktop)
ou dans la [Devin CLI](/fr/cli) (y compris lorsque la CLI s’exécute en tant qu’agent dans d’autres éditeurs), quel que soit le modèle utilisé.
Le paramètre `product` est également obligatoire et n’accepte actuellement que `agent`.

<h2 id="tools">
  Outils
</h2>

Regroupez par `tool` pour ventiler les appels par catégorie d'outil. Chaque ligne comporte alors un champ `tool` contenant l'une
des valeurs suivantes :

| Outil | Description |
| - | - |
| `SEARCH_WEB` | Recherche Web, récupération de pages Web et utilisation du navigateur |
| `RUN_COMMAND` | Commandes shell et interaction avec les processus en cours d'exécution |
| `VIEW_FILE` | Lecture de fichiers et de notebooks |
| `CODE_ACTION` | Modification, écriture et application de correctifs aux fichiers |
| `GREP_SEARCH` | Recherche dans le contenu des fichiers et dans le code |
| `FIND` | Recherche de fichiers par nom |
| `LIST_DIRECTORY` | Listage des répertoires |
| `MCP_TOOL` | Appel d'outils de serveurs MCP et listage des serveurs MCP, des outils ou des ressources |
| `SKILL` | Listage, recherche et invocation de skills |
| `ASK_USER_QUESTION` | Question posée à l'utilisateur |
| `MEMORY` | Lecture et écriture de mémoires |
| `PROPOSE_CODE` | Proposition de modifications du code |
| `PROXY_WEB_SERVER` | Aperçu dans le navigateur d'un serveur Web local |
| `DEPLOY_WEB_APP` | Déploiement d'une webapp |
| `MQUERY` | Recherche dans la base de code (Riptide) |
| `DEEPWIKI` | Requêtes DeepWiki |
| `CODEMAP_GENERATION`, `CODEMAP_SUGGESTIONS` | Requêtes Codemaps |
| `OTHER` | Outils Devin CLI ne relevant d'aucune des catégories ci-dessus |

Toutes les catégories ne s'appliquent pas à tous les clients : `LIST_DIRECTORY`, `MEMORY`, `PROPOSE_CODE`,
`PROXY_WEB_SERVER`, `DEPLOY_WEB_APP` et `MQUERY` sont enregistrés pour l'agent Devin Desktop, tandis que les nouveaux
outils Devin CLI auxquels aucune catégorie n'a encore été attribuée sont comptabilisés dans `OTHER`.

<h2 id="grouping-and-granularity">
  Regroupement et granularité
</h2>

Utilisez `granularity` et `group_by` pour contrôler la structure des données renvoyées :

* **Sans granularité ni regroupement** — renvoie une seule ligne agrégée pour l’ensemble de la plage de dates
* **`granularity=daily`** — chaque ligne inclut un `timestamp` au format `YYYY-MM-DD`
* **`granularity=monthly`** — chaque ligne inclut un `timestamp` au format `YYYY-MM`
* **`group_by=tool`** — chaque ligne inclut un `tool` (voir [Outils](#tools) ci-dessus)
* **`group_by=user`** — chaque ligne inclut un `user_id`, ainsi qu’un `user_email` lorsqu’une adresse est enregistrée pour cet utilisateur
* **`group_by=model_uid`** — chaque ligne inclut un `model_uid`
* **`group_by=ide`** — chaque ligne inclut un `ide`
* **`group_by=ide,ide_version`** — chaque ligne inclut `ide` et `ide_version` (le regroupement par `ide_version` nécessite d’inclure également `ide`)
* **`group_by=os`** — chaque ligne inclut un `os`, par exemple `darwin` (macOS), `windows` ou `linux`

Les dimensions peuvent être combinées : par exemple, `group_by=user,tool` indique combien de fois chaque utilisateur a invoqué chaque
outil. Les dimensions `session` et `source` de [Get Output](/fr/desktop/accounts/api-reference/get-output)
ne sont pas prises en charge ici. Les mêmes filtres `models`, `group_id` et `user_id` que pour
[Get Consumption](/fr/desktop/accounts/api-reference/get-consumption) s’appliquent, ainsi qu’un filtre `tool` qui
limite le décompte à une seule catégorie d’outil (par exemple `tool=SEARCH_WEB`). `tool` n’est accepté que par
cet endpoint ; le transmettre à un autre endpoint de l’API d’analyse v2 provoque une erreur `400`.

<h2 id="example">
  Exemple
</h2>

Compter les recherches Web par utilisateur sur une semaine :

```bash theme={null}
curl "https://server.codeium.com/api/v2alpha/analytics/tools?metric=calls&product=agent&start_date=2026-10-13&end_date=2026-10-19&group_by=user&tool=SEARCH_WEB" \
  -H "Authorization: Bearer $DEVIN_API_KEY"
```

Chaque ligne correspond au nombre de `SEARCH_WEB` d'un utilisateur. Pour afficher plutôt toutes les catégories par utilisateur, supprimez le filtre `tool` et ajoutez
`group_by=user,tool`.

<h2 id="pagination">
  Pagination
</h2>

Les résultats sont paginés, avec une taille de page par défaut de 1 000 lignes (10 000 au maximum). Lorsque d'autres résultats sont disponibles,
la réponse contient un `next_page_cursor` dans l'objet `pagination`. Transmettez-le dans le paramètre de requête `page_cursor`
d'une requête qui reprend, pour le reste, les paramètres de requête d'origine. Les curseurs sont liés à l'endpoint qui les a émis ; un curseur provenant de `/consumption` ou de `/output`
est rejeté avec une erreur `400`.

Les curseurs de pagination expirent au bout de 24 heures. La requête d'une page suivante n'est pas décomptée comme une nouvelle requête de votre limite de débit.

<h2 id="rate-limits">
  Limites de débit
</h2>

Cet endpoint est soumis à une limite de débit de **10 requêtes par heure** par Team. En cas de dépassement de cette limite, le
serveur renvoie `429 Too Many Requests` avec un en-tête `Retry-After`.

La pagination d'une requête antérieure (via un `next_page_cursor`) n'est **pas** décomptée de cette limite —
seule la requête initiale de chaque rapport l'est. Cette limite volontairement basse s'explique par le fait que cet endpoint est destiné aux
rapports périodiques, et non à la surveillance de l'utilisation en temps réel.


## OpenAPI

````yaml fr/desktop/accounts/api-reference/analytics-v2-openapi.yaml GET /api/v2alpha/analytics/tools
openapi: 3.1.0
info:
  title: Devin Desktop Analytics API v2
  version: 2.0.0
  description: >
    L’Analytics API v2 fournit des analyses de consommation de crédits et d’ACU,
    des utilisateurs actifs et de la production des agents

    (lignes de code acceptées), ainsi que des appels d’outils des agents pour
    les Teams Enterprise. Les données proviennent d’agrégats horaires et
    prennent en charge un filtrage flexible, le regroupement

    et la pagination par curseur.
servers:
  - url: https://server.codeium.com
security:
  - bearerAuth: []
paths:
  /api/v2alpha/analytics/tools:
    get:
      summary: Obtenir les analyses des appels d’outils des agents
      description: >
        Compter les appels d’outils des agents pour la Team authentifiée. Le
        paramètre obligatoire `metric` accepte uniquement

        `calls`, qui correspond au nombre d’appels d’outils effectués par
        l’agent dans Devin Desktop et Devin CLI. Ce nombre est renvoyé dans un

        champ de type entier sur chaque ligne. Les résultats peuvent être
        filtrés par plage de dates, produit, modèle, groupe et utilisateur,

        et regroupés selon les mêmes dimensions que la consommation (sauf
        `session`), ainsi que par `tool`, la catégorie d’outil,

        par exemple `SEARCH_WEB` ou `RUN_COMMAND`.


        Ces endpoints sont conçus pour la production de rapports périodiques et
        l’exportation en masse. Ils ne sont **pas** destinés à la surveillance
        de l’utilisation en temps réel : la limite de débit est faible (10
        requêtes par heure et par Team).
      operationId: getTools
      parameters:
        - name: metric
          in: query
          required: true
          schema:
            type: string
          description: >
            Métrique à renvoyer, présentée sous forme de champ sur chaque ligne.
            Métriques prises en charge :

            - `calls` — nombre d’appels d’outils effectués par l’agent
          example: calls
        - name: start_date
          in: query
          required: true
          schema:
            type: string
            format: date
          description: Début de la plage de dates (inclus) au format `YYYY-MM-DD`.
          example: '2026-10-01T00:00:00.000Z'
        - name: end_date
          in: query
          required: true
          schema:
            type: string
            format: date
          description: >-
            Fin de la plage de dates (incluse) au format `YYYY-MM-DD`. La plage
            ne doit pas dépasser 90 jours.
          example: '2026-10-31T00:00:00.000Z'
        - name: product
          in: query
          required: true
          schema:
            type: string
            enum:
              - agent
          description: Produit pour lequel récupérer les données d’appels d’outils.
          example: agent
        - name: granularity
          in: query
          required: false
          schema:
            type: string
            enum:
              - daily
              - monthly
          description: >
            Granularité temporelle du regroupement des résultats. Lorsqu’elle
            est spécifiée, chaque ligne inclut un champ `timestamp`.

            Si elle est omise, les résultats sont agrégés sur l’ensemble de la
            plage de dates.
        - name: group_by
          in: query
          required: false
          schema:
            type: string
          description: >
            Liste des dimensions selon lesquelles regrouper les résultats,
            séparées par des virgules. Dimensions prises en charge :

            - `tool` — inclut `tool` dans chaque ligne (la catégorie d’outil,
            comme `SEARCH_WEB` ou `RUN_COMMAND`)

            - `user` — inclut `user_id` dans chaque ligne, ainsi que
            `user_email` lorsqu’une adresse e-mail est enregistrée pour
            l’utilisateur

            - `model_uid` — inclut `model_uid` dans chaque ligne

            - `ide` — inclut `ide` dans chaque ligne

            - `ide_version` — inclut `ide_version` dans chaque ligne ; nécessite
            que `ide` soit également inclus

            - `os` — inclut `os` dans chaque ligne
          example: user,tool
        - name: models
          in: query
          required: false
          schema:
            type: string
          description: >-
            Liste d’UID de modèles, séparés par des virgules, auxquels limiter
            les résultats.
          example: swe-2-high,claude-4-sonnet
        - name: tool
          in: query
          required: false
          schema:
            type: string
          description: >
            Limiter le décompte à une seule catégorie d’outil, comme
            `SEARCH_WEB` ou `RUN_COMMAND` (correspondance exacte).

            Accepté uniquement par cet endpoint.
          example: SEARCH_WEB
        - name: group_id
          in: query
          required: false
          schema:
            type: string
          description: >-
            Limiter les résultats aux utilisateurs d’un groupe spécifique. La
            clé de service doit avoir accès à ce groupe. Non pris en charge avec
            les clés API d’utilisateur de service Devin.
        - name: user_id
          in: query
          required: false
          schema:
            type: string
          description: >-
            Limiter les résultats à un utilisateur spécifique (UID
            d’authentification).
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 10000
            default: 1000
          description: Nombre maximal de lignes à renvoyer par page.
        - name: page_cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            Curseur opaque issu du champ `pagination.next_page_cursor` d’une
            réponse précédente, permettant de récupérer la page suivante.
            Transmettez la même valeur pour `metric` que dans la requête ayant
            généré ce curseur ; les curseurs générés par d’autres endpoints sont
            rejetés.
      responses:
        '200':
          description: Données d’appels d’outils renvoyées avec succès.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolsResponse'
              examples:
                by_user_tool:
                  summary: Recherches Web et commandes par utilisateur
                  value:
                    data:
                      - user_id: user_abc123
                        user_email: alice@example.com
                        tool: RUN_COMMAND
                        calls: 1842
                      - user_id: user_abc123
                        user_email: alice@example.com
                        tool: SEARCH_WEB
                        calls: 57
                    pagination:
                      next_page_cursor: null
                    metadata:
                      data_freshness: '2026-10-20T02:00:00.000Z'
                      query_time_ms: 1104
                      team_id: team_abc123
                daily_total:
                  summary: granularity=daily sans regroupement
                  value:
                    data:
                      - timestamp: '2026-10-13T00:00:00.000Z'
                        calls: 48210
                      - timestamp: '2026-10-14T00:00:00.000Z'
                        calls: 51377
                    pagination:
                      next_page_cursor: null
                    metadata:
                      data_freshness: '2026-10-20T02:00:00.000Z'
                      query_time_ms: 870
                      team_id: team_abc123
        '400':
          description: Paramètres de requête non valides.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missing_metric:
                  value:
                    error: metric is required
                bad_metric:
                  value:
                    error: 'unsupported metric: loc_inserted (supported: calls)'
                missing_product:
                  value:
                    error: product is required
                bad_group_by:
                  value:
                    error: 'unsupported group_by dimension for tools: session'
        '401':
          description: Échec de l’authentification ou autorisations insuffisantes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missing_auth:
                  value:
                    error: missing Authorization header
                invalid_key:
                  value:
                    error: invalid service key
                insufficient_permissions:
                  value:
                    error: insufficient permissions
        '403':
          description: >-
            Le curseur de pagination fourni ne correspond pas à la Team
            authentifiée ou au groupe demandé.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                cursor_team_mismatch:
                  value:
                    error: page cursor does not belong to this team
        '405':
          description: >-
            Méthode HTTP non autorisée (seule la méthode `GET` est prise en
            charge).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: >-
            Limite de débit dépassée (10 requêtes par heure et par Team). Les
            requêtes de pagination d’une requête antérieure ne sont pas
            comptabilisées dans cette limite.
          headers:
            Retry-After:
              schema:
                type: string
              description: Délai d’attente recommandé avant de réessayer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                rate_limited:
                  value:
                    error: rate limit exceeded
        '503':
          description: >-
            Le service d’analyse n’est pas disponible (p. ex. dans les
            déploiements autohébergés).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    ToolsResponse:
      type: object
      required:
        - data
        - pagination
        - metadata
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ToolsRow'
          description: Tableau de lignes de données sur les appels d’outils.
        pagination:
          type: object
          properties:
            next_page_cursor:
              type:
                - string
                - 'null'
              description: >
                Curseur opaque permettant de récupérer la page suivante de
                résultats. Transmettez cette valeur dans le paramètre de requête
                `page_cursor`

                lors d’une requête ultérieure. Vaut `null` lorsqu’il n’y a plus
                de pages.

                Les curseurs de pagination expirent après 24 heures.
        metadata:
          type: object
          properties:
            data_freshness:
              type: string
              format: date-time
              description: >-
                Horodatage de la dernière actualisation des données
                sous-jacentes (tronqué à l’heure).
            query_time_ms:
              type: integer
              format: int64
              description: Temps d’exécution de la requête server-side en millisecondes.
            team_id:
              type: string
              description: >-
                L’ID de la Team déterminé à partir de la clé de service
                authentifiée.
            group_id:
              type: string
              description: >-
                L’ID du groupe auquel les résultats sont limités. Présent
                uniquement lorsque `group_id` a été fourni.
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Message d’erreur compréhensible par un humain.
    ToolsRow:
      type: object
      required:
        - calls
      properties:
        timestamp:
          type: string
          description: >
            Intervalle temporel de la ligne. Le format dépend de `granularity` :
            `YYYY-MM-DD` pour une granularité quotidienne, `YYYY-MM` pour une
            granularité mensuelle.

            Présent uniquement lorsque `granularity` est spécifié.
          examples:
            - '2026-10-15T00:00:00.000Z'
            - 2026-10
        user_id:
          type: string
          description: >-
            Identifiant de l’utilisateur (UID d’authentification). Présent
            uniquement lorsque `group_by` inclut `user`.
        user_email:
          type: string
          description: >-
            Adresse e-mail de l’utilisateur. Présente uniquement lorsque
            `group_by` inclut `user` et qu’une adresse e-mail est enregistrée
            pour l’utilisateur.
          examples:
            - alice@example.com
        model_uid:
          type: string
          description: >-
            Identifiant du modèle. Présent uniquement lorsque `group_by` inclut
            `model_uid`.
          examples:
            - swe-2-high
        ide:
          type: string
          description: Nom de l’IDE. Présent uniquement lorsque `group_by` inclut `ide`.
          examples:
            - windsurf
            - devin-cli
        ide_version:
          type: string
          description: >-
            Version de l’IDE. Présente uniquement lorsque `group_by` inclut
            `ide_version` (qui nécessite également `ide`).
          examples:
            - 3000.10.48
        os:
          type: string
          description: >-
            Système d’exploitation à l’origine de la requête. Présent uniquement
            lorsque `group_by` inclut `os`.
          examples:
            - darwin
            - windows
            - linux
        tool:
          type: string
          description: >
            Catégorie des outils appelés, par exemple `SEARCH_WEB`,
            `RUN_COMMAND`, `VIEW_FILE`,

            `CODE_ACTION`, `GREP_SEARCH`, `FIND`, `MCP_TOOL`, `SKILL` ou
            `ASK_USER_QUESTION`. Les outils de Devin CLI

            sans catégorie sont classés dans `OTHER`. Présente uniquement
            lorsque `group_by` inclut `tool`.
          examples:
            - SEARCH_WEB
            - RUN_COMMAND
        calls:
          type: integer
          format: int64
          description: Nombre d’appels d’outils effectués par l’agent dans cette ligne.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        Une clé de service disposant de l’autorisation **Analytics Read**,
        transmise comme jeton Bearer dans l’en-tête `Authorization`.


        Créez une clé de service dans les paramètres de votre Team, à l’adresse
        [team settings](https://windsurf.com/team/settings), dans la section
        "Service Keys".

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.