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

# API d’analyse (SaaS Enterprise)

> Interrogez via l’API les données d’analyse de Devin Desktop, y compris les métriques d’autocomplétion, de chat, de Command, de Cascade et de PCW. Prend en charge des filtres, des agrégations et des regroupements personnalisés.

<div id="overview">
  ## Vue d’ensemble
</div>

Devin Desktop prend en charge une API d’analyse personnalisée. Elle permet d’interroger les données issues de l’autocomplétion, du chat et de Command, ainsi qu’un large éventail de filtres, de regroupements et d’agrégations.

Tous les exemples sont fournis en curl, puis peuvent être adaptés en requêtes HTTP dans d’autres langages.

<Note>L’API d’analyse est disponible avec les offres Enterprise</Note>

<div id="user-data-analytics-api-specification">
  ## Spécification de l’API d’analyse des données des utilisateurs
</div>

Les données de la table Users de la page Teams peuvent être obtenues à l’aide de la commande suivante :

```sh theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "<SERVICE_KEY>",
  "group_name": "<GROUP_NAME>",
  "start_timestamp": "<START_TIMESTAMP>",
  "end_timestamp": "<END_TIMESTAMP>"
}' \
https://server.codeium.com/api/v1/UserPageAnalytics
```

**SERVICE\_KEY**: La clé de service : un utilisateur admin peut en créer une depuis la section des clés de service de la page Settings. Le rôle de la clé de service doit disposer de l’autorisation "Teams Read-only".

**GROUP\_NAME**: Le nom d’un groupe sur lequel filtrer. Ce champ est facultatif.

**START\_TIMESTAMP/END\_TIMESTAMP**: Horodatages au format RFC 3339, par exemple 2023-01-01T00:00:00Z

<div id="example-output">
  #### **Exemple de sortie**
</div>

```json theme={null}
{
  "userTableStats": [
    {
      "name": "Alice",
      "email": "alice@cognition.ai",
      "lastUpdateTime": "2024-10-10T22:56:10.771591Z",
      "apiKey": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
      "activeDays": 178,
      "teamStatus": "USER_TEAM_STATUS_APPROVED"
    },
    {
      "name": "Bob",
      "email": "bob@cognition.ai",
      "lastUpdateTime": "2024-10-10T18:11:23.980237Z",
      "apiKey": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
      "activeDays": 462,
      "teamStatus": "USER_TEAM_STATUS_APPROVED"
    },
    {
      "name": "Charlie",
      "email": "charlie@cognition.ai",
      "lastUpdateTime": "2024-10-10T16:43:46.117870Z",
      "apiKey": "cccccccc-cccc-cccc-cccc-cccccccccccc",
      "activeDays": 237,
      "teamStatus": "USER_TEAM_STATUS_PENDING"
    }
  ]
}
```

<div id="cascade-analytics-api-specification">
  ## Spécification de l’API d’analyse de Cascade
</div>

Les données spécifiques à Cascade affichées sur la [page d’analyse](https://windsurf.com/team/analytics) peuvent être récupérées via l’API.

```sh theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "<SERVICE_KEY>",
  "group_name": "<GROUP_NAME>",
  "start_timestamp": "<START_TIMESTAMP>",
  "end_timestamp": "<END_TIMESTAMP>",
  "emails": ["<EMAIL>","<EMAIL>,..."],
  "ide_types": ["<IDE_TYPE>","<IDE_TYPE>,..."],
  "query_requests": [
   {
    "<CASCADE_DATA_SOURCE>": {}
   }
  ]
}' \
https://server.codeium.com/api/v1/CascadeAnalytics
```

**SERVICE\_KEY**: La clé de service - un utilisateur admin peut en créer une nouvelle depuis [Team Settings](https://windsurf.com/team/settings)

**GROUP\_NAME**: Le nom d’un groupe à utiliser pour le filtrage. Ce champ est facultatif. Il ne peut pas être défini si `emails` est défini.

**START\_TIMESTAMP/END\_TIMESTAMP**: Horodatages au format RFC 3339, par ex. 2023-01-01T00:00:00Z

**EMAILS**: Une liste d’adresses e-mail à utiliser pour le filtrage. Ce champ est facultatif. Il ne peut pas être défini si `group&#95;name` est défini.

**IDE\_TYPES**: Une liste de types d’IDE à utiliser pour le filtrage. Ce champ est facultatif. Les valeurs possibles sont décrites ci-dessous.

**QUERY\_REQUESTS**: Une liste de requêtes à effectuer. Ce champ est obligatoire. Les valeurs possibles de CASCADE\_DATA\_SOURCE sont décrites ci-dessous.

<div id="example-query">
  #### Exemple de requête
</div>

```sh theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "my_random_test_key",
  "group_name": "my_group_name",
  "start_timestamp": "2025-01-01T00:00:00Z",
  "end_timestamp": "2025-01-02T00:00:00Z",
  "emails": ["my_email@cognition.ai", "my_email2@cognition.ai"],
  "ide_types": ["editor"],
  "query_requests": [
   {
    "cascade_lines": {}
   },
   {
    "cascade_runs": {}
   }
  ]
}' \
https://server.codeium.com/api/v1/CascadeAnalytics
```

<div id="ide-types">
  ### Types d’IDE
</div>

Nous répartissons les données Cascade en catégories selon le type d’IDE. Si vous excluez le champ ide\_types de la requête, les données pour tous les types sont renvoyées. Si vous souhaitez interroger les données pour un seul IDE, vous pouvez utiliser l’une des options suivantes :

* "editor" pour l’éditeur de bureau Devin
* "jetbrains" pour le plugin JetBrains
* "cli" pour Devin CLI

<Note>Lors du filtrage par Devin CLI (`"cli"`), seule la source `cascade_runs` renvoie des données. Les sources de données `cascade_lines` et `cascade_tool_usage` ne sont pas prises en charge pour Devin CLI et renverront des résultats vides.</Note>

<div id="cascade-data-sources">
  ### Sources de données de Cascade
</div>

Il existe trois valeurs possibles pour CASCADE\_DATA\_SOURCE

<div id="source-cascade_lines">
  #### Source : cascade\_lines
</div>

Utilisez cascade\_lines pour obtenir des données sur les lignes Cascade suggérées et acceptées chaque jour.

Exemple de sortie :

```json theme={null}
{
  "queryResults": [
    {
      "cascadeLines": {
        "cascadeLines": [
          {
            "day": "2025-05-01T00:00:00Z",
            "linesSuggested": "206",
            "linesAccepted": "157"
          },
          {
            "day": "2025-05-02T00:00:00Z",
            "linesSuggested": "16"
          },
          {
            "day": "2025-05-03T00:00:00Z",
            "linesSuggested": "169",
            "linesAccepted": "168"
          }
        ]
      }
    }
  ]
}
```

**linesSuggested**: Le nombre de lignes suggérées ce jour-là.
**linesAccepted**: Le nombre de lignes acceptées ce jour-là.

<div id="source-cascade_runs">
  #### Source : cascade\_runs
</div>

Utilisez cascade\_runs pour interroger les données relatives à l’utilisation du modèle, à la consommation de crédits et au mode.

Exemple de sortie :

```json theme={null}
{
  "queryResults": [
    {
      "cascadeRuns": {
        "cascadeRuns": [
          {
            "day": "2025-05-01T00:00:00Z",
            "model": "Claude 3.7 Sonnet (Thinking)",
            "mode": "CONVERSATIONAL_PLANNER_MODE_DEFAULT",
            "messagesSent": "1",
            "cascadeId": "0d35c1f7-0a85-41d0-ac96-a04cd2d64444"
          },
          {
            "day": "2025-05-01T00:00:00Z",
            "model": "SWE-1",
            "mode": "UNKNOWN",
            "promptsUsed": "125",
            "cascadeId": "0d35c1f7-0a85-41d0-ac96-a04cd2d64444"
          },
          {
            "day": "2025-05-01T00:00:00Z",
            "model": "GPT-4.1 (promo)",
            "mode": "CONVERSATIONAL_PLANNER_MODE_DEFAULT",
            "messagesSent": "5",
            "cascadeId": "1f450ba3-06aa-4ba5-9e12-d3b98c2d33d3"
          },
        ]
      }
    }
  ]
}
```

**day** : La date de l’exécution.

**model** : Le modèle utilisé pour le message.

**mode** : Le mode de l’exécution. L’une des valeurs suivantes : CONVERSATIONAL\_PLANNER\_MODE\_DEFAULT (pour le mode écriture), CONVERSATIONAL\_PLANNER\_MODE\_READ\_ONLY (pour le mode lecture), CONVERSATIONAL\_PLANNER\_MODE\_NO\_TOOL (pour l’ancien mode), ou UNKNOWN.

**messagesSent** : Le nombre de messages envoyés.

**cascadeId** : L’ID de l’exécution. Cet ID peut être utilisé pour déterminer combien de conversations distinctes ont été lancées (par opposition au nombre de fois où l’utilisateur envoie un message).

**promptsUsed** : Le nombre de crédits utilisés. Cette valeur est renvoyée en centièmes. Par exemple, 0,25 crédit est renvoyé sous la forme 25, et 1 crédit est renvoyé sous la forme 100.

Les données renvoyées par l’API sont au format brut, ce qui peut expliquer les éventuelles valeurs "UNKNOWN". Si vous utilisez cette source de données pour vos propres métriques, il est recommandé d’agréger selon les métriques spécifiques qui vous intéressent (par ex., additionner le champ promptsUsed pour comprendre les schémas d’utilisation des utilisateurs, messagesSent pour comprendre l’engagement des utilisateurs, etc.), car il est possible que les données de mode et de prompt soient réparties entre plusieurs entrées.

<div id="source-cascade_tool_usage">
  #### Source : cascade\_tool\_usage
</div>

Utilisez cascade\_tool\_usage pour obtenir des données sur l’utilisation des outils. Notez que cela renvoie un décompte agrégé des outils sur la période indiquée.

Exemple de sortie :

```json theme={null}
{
  "queryResults": [
    {
      "cascadeToolUsage": {
        "cascadeToolUsage": [
          {
            "tool": "CODE_ACTION",
            "count": "15"
          },
          {
            "tool": "LIST_DIRECTORY",
            "count": "20"
          },
          {
            "tool": "MCP_TOOL",
            "count": "12"
          },
          {
            "tool": "MEMORY",
            "count": "4"
          }
        ]
      }
    }
  ]
}
```

**tool** : L’outil utilisé pour ce message.

**count** : Le nombre de fois que l’outil a été utilisé.

Voici la correspondance entre les énumérations renvoyées et leur libellé lisible, tel qu’il est affiché dans l’interface utilisateur :

* CODE\_ACTION: 'Modification du code'
* VIEW\_FILE: 'Afficher le fichier'
* RUN\_COMMAND: 'Exécuter la commande'
* FIND: 'Outil de recherche'
* GREP\_SEARCH: 'Recherche grep'
* VIEW\_FILE\_OUTLINE: 'Afficher le plan du fichier'
* MQUERY: 'Riptide'
* LIST\_DIRECTORY: 'Lister le répertoire'
* MCP\_TOOL: 'Outil MCP'
* PROPOSE\_CODE: 'Proposer du code'
* SEARCH\_WEB: 'Recherche Web'
* MEMORY: 'Mémoire'
* PROXY\_WEB\_SERVER: 'Aperçu dans Browser'
* DEPLOY\_WEB\_APP: 'Déployer l’application Web'

<div id="custom-analytics-api-specification">
  ## Spécification de l’API d’analyse personnalisée
</div>

Certaines sources de données permettent d’effectuer des requêtes personnalisées via l’API d’analyse personnalisée.

**Les schémas complets des sélections, filtres, agrégations et ordres de tri figurent dans la section suivante, au format JSON. Des exemples de requêtes pour chacune des trois sources de données, ainsi que des conseils de débogage des requêtes, se trouvent à la fin du document.**

```sh theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "<SERVICE_KEY>",
  "group_name": "<GROUP_NAME>",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_<DATA_SOURCE>",
      "selections": [
        <LIST OF SELECTIONS>
      ],
      "filters": [
        <LIST OF FILTERS>
      ],
      "aggregations": [
        <LIST OF AGGREGATIONS>
      ],
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics
```

**DATA\_SOURCE** : sélectionnez USER\_DATA, CHAT\_DATA, COMMAND\_DATA, PCW\_DATA ou CASCADE\_DATA, selon que vous recherchez des données d’autocomplétion, de chat, de Command, de PCW ou de Cascade.

**SERVICE\_KEY** : La clé de service - un administrateur peut en créer une nouvelle depuis les [Team Settings](https://windsurf.com/team/settings). Le rôle de la clé de service doit disposer de l’autorisation "Analytics Read".

**GROUP\_NAME** : Le nom d’un groupe sur lequel filtrer. Ce champ est facultatif.

<div id="schemas">
  ## Schémas
</div>

<div id="selections">
  ### Sélections
</div>

Les sélections sont **obligatoires**. Chaque sélection correspond à une valeur sur laquelle effectuer une requête.

```json theme={null}
{
  "field": "<FIELD_NAME>",
  "name": "<NAME>",
  "aggregation_function": "QUERY_AGGREGATION_<AGGREGATION_FUNCTION>"
}
```

**FIELD\_NAME**: Le champ que vous souhaitez interroger. Voir la section Champs disponibles ci-dessous.

**NAME**: Un alias du champ. S'il n'est pas spécifié, il correspond à la version en minuscules de \<AGGREGATION\_FUNCTION>\_\<FIELD\_NAME>, p. ex. sum\_num\_acceptances. Il doit être distinct de tous les autres noms de champs et d'agrégations.

**AGGREGATION\_FUNCTION**: doit être l'une des valeurs suivantes : UNSPECIFIED, COUNT, SUM, AVG, MAX, MIN. Si "aggregation\_function" n'est pas renseigné, la valeur par défaut est UNSPECIFIED.

<div id="filters">
  ### Filtres
</div>

Les filtres permettent de limiter les données aux seuls éléments répondant à certains critères. Ils sont facultatifs.

```json theme={null}
{
  "name": "<NAME>",
  "value": "<VALUE>",
  "filter": "QUERY_FILTER_<FILTER>"
}
```

**NOM** : Le nom du champ à filtrer. Si l’élément filtré correspond à une Sélection/Agrégation, celui-ci doit être identique au nom du champ/de l’agrégation.

**VALEUR** : la valeur à comparer.

**FILTRE** : L’un des éléments suivants : EQUAL, NOT\_EQUAL, GREATER\_THAN, LESS\_THAN, GE (supérieur ou égal), LE (inférieur ou égal).

<div id="aggregations">
  ### Agrégations
</div>

Les agrégations servent à répartir les données en groupes sur la base d’un critère spécifié. Elles sont facultatives.

```json theme={null}
{
  "field": <FIELD_NAME>,
  "name": <NAME>
}
```

FIELD\_NAME: Le champ que vous souhaitez interroger. Voir la section Champs disponibles.

NAME: Un alias du champ. Il doit être distinct de tous les autres noms de champ et d’agrégation.

<div id="available-fields">
  ## Champs disponibles
</div>

<div id="user-data">
  ### Données utilisateur
</div>

Toutes les données de la source USER\_DATA sont agrégées par utilisateur et par heure.

Remarque : le PCW (pourcentage de code écrit) dispose désormais de sa propre table et ne dépend pas de la table user\_data.

| **Nom du champ**           | **Description**                                                                                                                                              | **Agrégations valides** |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- |
| api\_key                   | Le hachage de la clé API de l’utilisateur.                                                                                                                   | UNSPECIFIED, COUNT      |
| date                       | La date UTC de la ou des autocomplétions.                                                                                                                    | UNSPECIFIED, COUNT      |
| date UTC-x                 | La date de l’autocomplétion, avec un décalage de fuseau horaire. Par exemple, le fuseau PST correspondrait à « date UTC-8 ».                                 | UNSPECIFIED, COUNT      |
| hour                       | L’heure UTC de la ou des autocomplétions.                                                                                                                    | UNSPECIFIED, COUNT      |
| language                   | Le langage de programmation utilisé.                                                                                                                         | UNSPECIFIED, COUNT      |
| ide                        | L’IDE utilisé.                                                                                                                                               | UNSPECIFIED, COUNT      |
| version                    | Version de l’extension/du plugin (language-server), p. ex. `1.48.x`                                                                                          | UNSPECIFIED, COUNT      |
| num\_acceptances           | Le nombre de fois où l’utilisateur a accepté une autocomplétion. Cela se produit lorsque l’utilisateur écrit du code, voit du texte grisé et appuie sur Tab. | SUM, MAX, MIN, AVG      |
| num\_lines\_accepted       | Lignes de code acceptées via l’autocomplétion.                                                                                                               | SUM, MAX, MIN, AVG      |
| num\_bytes\_accepted       | Octets acceptés via l’autocomplétion.                                                                                                                        | SUM, MAX, MIN, AVG      |
| distinct\_users            | Utilisateurs distincts.                                                                                                                                      | UNSPECIFIED, COUNT      |
| distinct\_developer\_days  | Tuples distincts (utilisateurs, jour).                                                                                                                       | UNSPECIFIED, COUNT      |
| distinct\_developer\_hours | Tuples distincts (utilisateurs, heure de la journée).                                                                                                        | UNSPECIFIED, COUNT      |

<div id="chat-data">
  ### Données de chat
</div>

Notez que toutes les données fournies dans l'API de données de chat concernent les réponses du modèle de chat, et non les questions des utilisateurs.

| **Nom du champ**           | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | **Agrégations valides** |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| api\_key                   | Un hachage de la clé API de l'utilisateur                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | UNSPECIFIED, COUNT      |
| model\_id                  | L'ID du modèle de chat, défini au moment du déploiement.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | UNSPECIFIED, COUNT      |
| date                       | La date UTC de la réponse du chat.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | UNSPECIFIED, COUNT      |
| date UTC-x                 | La date de la réponse du chat, avec un décalage de fuseau horaire. Par exemple, le fuseau PST correspondrait à "date UTC-8".                                                                                                                                                                                                                                                                                                                                                                                                              | UNSPECIFIED, COUNT      |
| ide                        | L'IDE utilisé                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | UNSPECIFIED, COUNT      |
| version                    | Version de l'extension/du plugin (language-server), par ex. `1.48.x`                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | UNSPECIFIED, COUNT      |
| latest\_intent\_type       | Indique si la réponse du modèle est générée à partir d'un code lens ou d'un chat standard. Les chats standard correspondent à :<br /><br />CHAT\_INTENT\_GENERIC<br /><br />tandis que les code lenses correspondent à l'un des éléments suivants :<br /><br />CHAT\_INTENT\_FUNCTION\_EXPLAIN<br />CHAT\_INTENT\_FUNCTION\_DOCSTRING<br />CHAT\_INTENT\_FUNCTION\_REFACTOR<br />CHAT\_INTENT\_CODE\_BLOCK\_EXPLAIN<br />CHAT\_INTENT\_CODE\_BLOCK\_REFACTOR<br />CHAT\_INTENT\_PROBLEM\_EXPLAIN<br />CHAT\_INTENT\_FUNCTION\_UNIT\_TESTS | UNSPECIFIED, COUNT      |
| num\_chats\_received       | Nombre de messages de chat envoyés depuis Devin Desktop à l'utilisateur.                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | SUM, MAX, MIN, AVG      |
| chat\_accepted             | True si un bloc de code a été envoyé dans la réponse du chat de Devin Desktop et que le bouton Thumbs up est cliqué.                                                                                                                                                                                                                                                                                                                                                                                                                      | SUM, COUNT              |
| chat\_inserted\_at\_cursor | True si un bloc de code a été envoyé dans la réponse du chat de Devin Desktop et que le bouton "Insert" est cliqué.                                                                                                                                                                                                                                                                                                                                                                                                                       | SUM, COUNT              |
| chat\_applied              | True si un bloc de code a été envoyé dans la réponse du chat de Devin Desktop et que le bouton "Apply Diff" est cliqué.                                                                                                                                                                                                                                                                                                                                                                                                                   | SUM, COUNT              |
| chat\_loc\_used            | Lignes de code utilisées si un bloc de code a été envoyé dans le chat de Devin Desktop et que l'un des boutons "Insert", "Copy" ou "Apply Diff" est cliqué.                                                                                                                                                                                                                                                                                                                                                                               | SUM, MAX, MIN, AVG      |

<div id="command-data">
  ### Données de Command
</div>

Notez que la source de données Command contient **toutes** les commandes, y compris celles qui ont été refusées. Le champ "accepted" peut être utilisé pour filtrer uniquement les commandes acceptées.

| **Nom du champ** | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | **Agrégations valides** |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| api\_key         | Le hachage de la clé API de l'utilisateur.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | UNSPECIFIED, COUNT      |
| date             | La date UTC de la commande.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | UNSPECIFIED, COUNT      |
| timestamp        | L'horodatage UTC de la commande.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | UNSPECIFIED, COUNT      |
| language         | Le langage de programmation utilisé.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | UNSPECIFIED, COUNT      |
| ide              | L'IDE utilisé.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | UNSPECIFIED, COUNT      |
| version          | Version de l'extension/du plugin (language-server), p. ex. `1.48.x`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | UNSPECIFIED, COUNT      |
| command\_source  | La raison pour laquelle la commande a été déclenchée. Les valeurs valides sont :<br /><br />COMMAND\_REQUEST\_SOURCE\_LINE\_HINT\_CODE\_LENS<br />COMMAND\_REQUEST\_SOURCE\_DEFAULT<br />COMMAND\_REQUEST\_SOURCE\_RIGHT\_CLICK\_REFACTOR<br />COMMAND\_REQUEST\_SOURCE\_FUNCTION\_CODE\_LENS<br />COMMAND\_REQUEST\_SOURCE\_FOLLOWUP<br />COMMAND\_REQUEST\_SOURCE\_CLASS\_CODE\_LENS<br />COMMAND\_REQUEST\_SOURCE\_PLAN<br />COMMAND\_REQUEST\_SOURCE\_SELECTION\_HINT\_CODE\_LENS<br /><br />COMMAND\_REQUEST\_SOURCE\_DEFAULT correspond à l'utilisation standard de la commande. | UNSPECIFIED, COUNT      |
| provider\_source | Détermine si la commande a été déclenchée en mode génération ou modification. Les valeurs valides sont : PROVIDER\_SOURCE\_COMMAND\_GENERATE PROVIDER\_SOURCE\_COMMAND\_EDIT                                                                                                                                                                                                                                                                                                                                                                                                           | UNSPECIFIED, COUNT      |
| lines\_added     | Nombre de lignes de code ajoutées par la commande.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | SUM, MAX, MIN, AVG      |
| lines\_removed   | Nombre de lignes de code supprimées par la commande.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | SUM, MAX, MIN, AVG      |
| bytes\_added     | Nombre d'octets ajoutés par la commande.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | SUM, MAX, MIN, AVG      |
| bytes\_removed   | Nombre d'octets supprimés par la commande.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | SUM, MAX, MIN, AVG      |
| selection\_lines | Nombre de lignes de code sélectionnées par la commande. Cette valeur doit toujours être égale à zéro pour les générations.                                                                                                                                                                                                                                                                                                                                                                                                                                                             | SUM, MAX, MIN, AVG      |
| selection\_bytes | Nombre d'octets sélectionnés par la commande. Cette valeur doit toujours être égale à zéro pour les générations.                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | SUM, MAX, MIN, AVG      |
| accepted         | Indique si la commande a été acceptée.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | SUM, COUNT              |

<div id="pcw-data">
  ### Données PCW
</div>

<div id="valid-selections">
  #### Sélections valides
</div>

| **Nom du champ**                 | **Description**                                                                                                                                                                                                                                                                                                    | **Agrégations valides** |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- |
| percent\_code\_written           | Pourcentage de code écrit. Calculé comme suit : (nombre d’octets Codeium générés) / (nombre d’octets Codeium générés + nombre d’octets utilisateur générés). Cette métrique peut fortement varier à l’échelle d’une journée ou d’un utilisateur ; nous vous recommandons donc de l’agréger sur plusieurs semaines. | UNSPECIFIED             |
| codeium\_bytes                   | nombre total d’octets Codeium, égal à codeium\_bytes\_by\_autocomplete + codeium\_bytes\_by\_command                                                                                                                                                                                                               | UNSPECIFIED             |
| user\_bytes                      | nombre total d’octets utilisateur                                                                                                                                                                                                                                                                                  | UNSPECIFIED             |
| total\_bytes                     | codeium\_bytes + user\_bytes                                                                                                                                                                                                                                                                                       | UNSPECIFIED             |
| codeium\_bytes\_by\_autocomplete | nombre total d’octets Codeium générés via l’autocomplétion                                                                                                                                                                                                                                                         | UNSPECIFIED             |
| codeium\_bytes\_by\_command      | nombre total d’octets Codeium générés via Command                                                                                                                                                                                                                                                                  | UNSPECIFIED             |

<div id="cascade-data">
  ### Données Cascade
</div>

La source de données Cascade contient une entrée pour chaque message envoyé à Cascade.

<Note>Pour accéder à tous les champs listés ci-dessous, assurez-vous d'utiliser la version 1.11.2 ou une version ultérieure.</Note>

| **Nom du champ**    | **Description**                                                                                                                                                                                                                                 | **Agrégations valides**         |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
| api\_key            | Le hachage de la clé API de l'utilisateur.                                                                                                                                                                                                      | UNSPECIFIED, COUNT              |
| date                | La date UTC de la commande.                                                                                                                                                                                                                     | UNSPECIFIED, COUNT              |
| prompts\_used       | Le nombre de crédits de prompt utilisés dans un prompt envoyé à Cascade, renvoyé en centimes. Par exemple, 0.25 crédit est renvoyé sous la forme 25, et 1 crédit est renvoyé sous la forme 100.                                                 | UNSPECIFIED, SUM, AVG, MIN, MAX |
| flex\_credits\_used | Le nombre de crédits additionnels/mutualisés utilisés, parmi le total de prompts\_used, dans un prompt envoyé à Cascade, renvoyé en centimes. Par exemple, 0.25 crédit est renvoyé sous la forme 25, et 1 crédit est renvoyé sous la forme 100. | UNSPECIFIED, SUM, AVG, MIN, MAX |
| model               | Le modèle utilisé pour le message envoyé à Cascade.                                                                                                                                                                                             | UNSPECIFIED, COUNT              |
| metadata            | Un objet contenant des métadonnées liées à l'environnement de développement. Les champs actuellement renseignés incluent : ideVersion                                                                                                           | UNSPECIFIED, COUNT              |

<div id="valid-filters">
  #### Filtres valides
</div>

|                  |                                                                     |                       |
| ---------------- | ------------------------------------------------------------------- | --------------------- |
| **Nom du champ** | **Description**                                                     | **Quelques exemples** |
| api\_key         | Le hachage de la clé API de l’utilisateur.                          |                       |
| language         | Le langage de programmation utilisé.                                | KOTLIN, GO, JAVA      |
| ide              | L’IDE utilisé.                                                      | jetbrains, vscode     |
| version          | Version de l’extension/du plugin (language-server), p. ex. `1.48.x` | 1.28.0, 130.0         |

Pour filtrer par date, utilisez start\_timestamp et end\_timestamp, qui doivent être au format RFC 3339 (p. ex. 2023-01-01T00:00:00Z, voir l’exemple ci-dessous).

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

<div id="user-data">
  ### Données utilisateur
</div>

```sh theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": SERVICE_KEY,
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_USER_DATA",
      "selections": [
       {
          "field": "num_acceptances",
          "name": "num_acceptances",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "hour",
          "filter": "QUERY_FILTER_GE",
          "value": "2024-01-01"
        },
        {
          "name": "hour",
          "filter": "QUERY_FILTER_LE",
          "value": "2024-02-01"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics
```

Cette requête calcule le pourcentage global de code écrit pour le mois de janvier 2024. Exemple de réponse (JSON formaté pour une meilleure lisibilité) :

```json theme={null}
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "num_acceptances": "125",
            "num_lines_accepted": "863"
          }
        }
      ]
    }
  ]
}
```

<div id="chat-data">
  ### Données de chat
</div>

```sh theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": SERVICE_KEY,
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
      "selections": [
        {
          "field": "chat_loc_used",
          "name": "chat_loc_used",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "latest_intent_type",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "CHAT_INTENT_FUNCTION_DOCSTRING"
        }
      ],
      "aggregations": [
        {
          "field": "ide",
          "name": "ide"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics
```

Cette requête indique le nombre de lignes de code acceptées via le code lens "Generate Docstring", sur l’ensemble de la période, regroupées par IDE.

Exemple de réponse :

```json theme={null}
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "chat_loc_used": "74",
            "ide": "jetbrains"
          },
        },
        {
          "item": {
            "chat_loc_used":"41",
            "ide":"vscode"
          },
        }
      ]
    }
  ]
}
```

<div id="command-data">
  ### Données de Command
</div>

```sh theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
 "service_key": SERVICE_KEY,
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
     "selections": [
        {
          "field": "lines_added",
          "name": "lines_added",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "lines_removed",
          "name": "lines_removed",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "provider_source",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "PROVIDER_SOURCE_COMMAND_EDIT"
        },
        {
          "name": "accepted",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "true"
        }
      ],
      "aggregations": [
        {
          "field": "language",
          "name": "language"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics
```

Cette requête renvoie, par langage de programmation, le nombre de lignes ajoutées et supprimées par les commandes "edit".

Exemple de réponse :

```json theme={null}
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "language": "SHELL",
            "lines_added": "5",
            "lines_removed": "3"
          }
        },
        {
          "item": {
            "language": "GO",
            "lines_added": "31",
            "lines_removed": "27"
          }
        },
        {
          "item": {
            "language": "PYTHON",
            "lines_added": "21",
            "lines_removed": "5"
          }
        },
        {
          "item": {
            "language": "UNSPECIFIED",
            "lines_added": "91",
            "lines_removed": "71"
          }
        },
        {
          "item": {
            "language": "STARLARK",
            "lines_added": "13",
            "lines_removed": "1"
          }
        }
      ]
    }
  ]
}
```

<div id="pcw-data">
  ### Données PCW
</div>

```sh theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
    "service_key": SERVICE_KEY,
    "start_timestamp": "2024-01-01T00:00:00Z",
    "end_timestamp": "2024-12-22T00:00:00Z"
    "query_requests": [
    {
       "data_source": "QUERY_DATA_SOURCE_PCW_DATA",
       "selections": [
          {
             "field": "percent_code_written",
             "name": "percent_code_written"
          },
          {
             "field": "codeium_bytes",
             "name": "codeium_bytes"
          },
          {
             "field": "total_bytes",
             "name": "total_bytes"
          },
          {
             "field": "codeium_bytes_by_autocomplete",
            "name": "codeium_bytes_by_autocomplete"
          },
          {
             "field": "codeium_bytes_by_command",
             "name": "codeium_bytes_by_command"
          }
       ],
     "filters": [
         {
            "filter": "QUERY_FILTER_EQUAL",
            "name": "language",
            "value": "GO"
         }
      ]
    }
  ],
}' \
https: //server.codeium.com/api/v1/Analytics
```

Cette requête récupère les données PCW (pourcentage de code écrit), ainsi que les octets filtrés pour le langage Go.

Exemple de réponse :

```json theme={null}
{
  "queryResults": [
    {
      "responseItems": [
         {
            "item": {
               "codeium_bytes": "6018",
               "codeium_bytes_by_autocomplete": "4593",
               "codeium_bytes_by_command": "1425",
               "percent_code_written": "0.61",
               "total_bytes": "9900"
             }
         }
     ]
   }
  ]
}
```

<div id="query-debugging">
  ## Débogage des requêtes
</div>

À partir de la version 1.10.0, les requêtes non valides renverront un message d’erreur. Cette section présente quelques messages d’erreur courants, leur signification et comment déboguer les requêtes correspondantes.

<table>
  <thead>
    <tr>
      <th>Message d’erreur</th>
      <th>Explication</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>at least one field or aggregation is required</td>
      <td>Aucune sélection ni agrégation n’a été détectée ; assurez-vous que la requête en contient au moins une.</td>
    </tr>

    <tr>
      <td>invalid aggregation function for string type field ide: QUERY\_AGGREGATION\_SUM</td>
      <td>L’une des sélections utilise une fonction d’agrégation non valide. Dans ce cas, nous avons essayé d’utiliser SUM sur le champ "ide", mais il ne prend en charge que COUNT et UNSPECIFIED.</td>
    </tr>

    <tr>
      <td>invalid query table: QUERY\_DATA\_SOURCE\_UNSPECIFIED</td>
      <td>Il y a probablement une faute de frappe dans le champ data\_source ; vérifiez l’orthographe.</td>
    </tr>

    <tr>
      <td>all selection fields should have an aggregation function, or none of them should</td>

      <td>
        S’il y a plusieurs champs de sélection, soit ils doivent tous contenir une aggregation\_function, soit aucun ne doit en contenir. Par exemple, cette sélection est non valide, car num\_acceptances est additionné, mais num\_lines\_accepted ne l’est pas :

        ```json theme={null}
        "selections": [
          {
            "field": "num_acceptances",
            "name": "total_acceptances",
            "aggregation_function": "QUERY_AGGREGATION_SUM"
          },
          {
            "field": "num_lines_accepted",
            "name": "total_lines_accepted",
            "aggregation_function": "QUERY_AGGREGATION_UNSPECIFIED"
          }
        ]
        ```

        Remarque : PCW est toujours considéré comme agrégé. Si aucune aggregation\_function n’est explicitement choisie, elle est considérée comme non spécifiée. Si vous souhaitez obtenir des informations sur ces deux champs, utilisez deux requêtes distinctes.
      </td>
    </tr>

    <tr>
      <td>invalid aggregation function for string type field ide: QUERY\_AGGREGATION\_SUM</td>
      <td>Tous les champs ne prennent pas en charge toutes les fonctions d’agrégation ; consultez la section des champs disponibles pour connaître les correspondances. Dans ce cas, la requête utilise la fonction d’agrégation QUERY\_AGGREGATION\_SUM avec le champ "ide", ce qui n’est pas valide.</td>
    </tr>

    <tr>
      <td>tried to aggregate on a distinct field: distinct\_developer\_days. Consider aggregating on the non-distinct fields instead: \[api\_key date]</td>

      <td>
        Les champs correspondant au modèle "distinct\_\*" ne peuvent pas figurer dans la section aggregations ; l’erreur suggère un ou plusieurs champs alternatifs sur lesquels agréger à la place. Donc, au lieu de :

        ```json theme={null}
        "aggregations": [
          {
            "field": "distinct_developer_days",
            "name": "distinct_developer_days"
          }
        ]
        ```

        Essayez :

        ```json theme={null}
        "aggregations": [
          {
            "field": "api_key",
            "name": "api_key"
          },
          {
            "field": "date",
            "name": "date"
          }
        ]
        ```
      </td>
    </tr>

    <tr>
      <td>duplicate field alias for selection/aggregation: num\_acceptances</td>
      <td>Toutes les sélections et agrégations doivent avoir un nom différent. Gardez à l’esprit que si le nom n’est pas spécifié, il est défini par défaut sur \<AGGREGATION\_FUNCTION>\_\<FIELD\_NAME>.</td>
    </tr>

    <tr>
      <td>invalid group name: GroupName</td>
      <td>Le groupe portant le nom indiqué est introuvable ; vérifiez l’orthographe.</td>
    </tr>
  </tbody>
</table>
