> ## 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 de Analytics (Enterprise SaaS)

> Consulta los datos analíticos de Devin Desktop a través de la API, incluidas las métricas de Autocomplete, chat, Command, Cascade y PCW. Admite filtros, agregaciones y agrupaciones personalizadas.

<div id="overview">
  ## Resumen
</div>

Devin Desktop incluye una API de analítica personalizada. Permite consultar datos de Autocomplete, chat y Command, además de aplicar diversos filtros, agrupaciones y agregaciones.

Incluimos todos los ejemplos en curl; luego pueden traducirse a solicitudes HTTP en otros lenguajes.

<Note>La API de Analytics está disponible para los planes Enterprise</Note>

<div id="user-data-analytics-api-specification">
  ## Especificación de la API de analítica de datos de usuarios
</div>

Los datos de la tabla Users de la página Teams se pueden obtener con el siguiente comando:

```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 clave de servicio: un usuario Admin puede crearla desde la sección de claves de servicio de la página de Settings. El rol de la clave de servicio debe tener permisos de "Teams de solo lectura".

**GROUP\_NAME**: El nombre de un grupo para filtrar. Este campo es opcional.

**START\_TIMESTAMP/END\_TIMESTAMP**: Marcas de tiempo en formato RFC 3339, por ejemplo, 2023-01-01T00:00:00Z

<div id="example-output">
  #### **Ejemplo de salida**
</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">
  ## Especificación de la API de Analytics de Cascade
</div>

Los datos específicos de Cascade que aparecen en la [página de analytics](https://windsurf.com/team/analytics) pueden consultarse a través de la 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 clave de servicio; un usuario Admin puede crear una nueva desde [Team Settings](https://windsurf.com/team/settings)

**GROUP\_NAME**: El nombre de un grupo por el que filtrar. Este campo es opcional. No se puede establecer si `emails` está establecido.

**START\_TIMESTAMP/END\_TIMESTAMP**: Marcas de tiempo en formato RFC 3339, por ejemplo, 2023-01-01T00:00:00Z

**EMAILS**: Una lista de correos electrónicos por los que filtrar. Este campo es opcional. No se puede establecer si `group&#95;name` está establecido.

**IDE\_TYPES**: Una lista de tipos de IDE por los que filtrar. Este campo es opcional. Los valores posibles se describen a continuación.

**QUERY\_REQUESTS**: Una lista de consultas que se deben realizar. Este campo es obligatorio. Los valores posibles de `CASCADE&#95;DATA&#95;SOURCE` se describen a continuación.

<div id="example-query">
  #### Consulta de ejemplo
</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">
  ### Tipos de IDE
</div>

Dividimos los datos de cascade en categorías según el tipo de IDE. Si se excluye el campo `ide_types` de la `query`, se devuelven datos de todos ellos. Si quieres consultar datos de solo uno de los IDE, puedes usar cualquiera de las siguientes opciones:

* "editor" para el editor de Devin Desktop
* "jetbrains" para el plugin de JetBrains
* "cli" para Devin CLI

<Note>Al filtrar por Devin CLI (`"cli"`), solo `cascade_runs` devuelve datos. Las fuentes de datos `cascade_lines` y `cascade_tool_usage` no son compatibles con Devin CLI y devolverán resultados vacíos.</Note>

<div id="cascade-data-sources">
  ### Fuentes de datos de Cascade
</div>

Hay tres valores posibles para `CASCADE_DATA_SOURCE`

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

Usa cascade\_lines para consultar datos sobre las líneas de Cascade sugeridas y aceptadas cada día.

Ejemplo de salida:

```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**: El número de líneas sugeridas ese día.
**linesAccepted**: El número de líneas aceptadas ese día.

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

Utiliza cascade\_runs para consultar datos sobre el uso del modelo, el consumo de créditos y el modo.

Resultado de ejemplo:

```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 fecha de la ejecución.

**model**: El modelo utilizado para el mensaje.

**mode**: El modo de la ejecución. Uno de CONVERSATIONAL\_PLANNER\_MODE\_DEFAULT (para el modo de escritura), CONVERSATIONAL\_PLANNER\_MODE\_READ\_ONLY (para el modo de solo lectura), CONVERSATIONAL\_PLANNER\_MODE\_NO\_TOOL (para el modo heredado) o UNKNOWN.

**messagesSent**: El número de mensajes enviados.

**cascadeId**: El ID de la ejecución. Este ID puede usarse para comprender cuántas conversaciones distintas se han iniciado (y no cuántas veces el usuario envía un mensaje).

**promptsUsed**: La cantidad de créditos utilizada. Este valor se devuelve en centavos. Por ejemplo, 0.25 créditos se devuelve como 25 y 1 crédito se devuelve como 100.

Los datos devueltos por la API están en formato sin procesar, lo que puede explicar cualquier valor "UNKNOWN". Si usas esta fuente de datos para tus propias métricas, se recomienda agregar según las métricas específicas que te interesen (p. ej., sumar el campo promptsUsed para comprender los patrones de uso del usuario, messagesSent para comprender la interacción del usuario, etc.), ya que es posible que los datos de mode y prompt estén divididos entre varias entradas.

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

Usa cascade\_tool\_usage para consultar datos sobre el uso de herramientas. Ten en cuenta que esto devuelve un recuento agregado del uso de herramientas durante el período proporcionado.

Resultado de ejemplo:

```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**: La herramienta utilizada en el mensaje.

**count**: El número de veces que se utilizó la herramienta.

A continuación se muestra una correspondencia entre los enums devueltos y el nombre legible, tal como aparece en la UI:

* CODE\_ACTION: 'Editar código'
* VIEW\_FILE: 'Ver archivo'
* RUN\_COMMAND: 'Ejecutar comando'
* FIND: 'Herramienta Find'
* GREP\_SEARCH: 'Búsqueda Grep'
* VIEW\_FILE\_OUTLINE: 'Ver esquema del archivo'
* MQUERY: 'Riptide'
* LIST\_DIRECTORY: 'Listar directorio'
* MCP\_TOOL: 'Herramienta MCP'
* PROPOSE\_CODE: 'Proponer código'
* SEARCH\_WEB: 'Buscar en la web'
* MEMORY: 'Memoria'
* PROXY\_WEB\_SERVER: 'Vista previa del navegador'
* DEPLOY\_WEB\_APP: 'Desplegar aplicación web'

<div id="custom-analytics-api-specification">
  ## Especificación de la Custom Analytics API
</div>

Ciertas fuentes de datos permiten realizar consultas personalizables mediante la Custom Analytics API.

**Los esquemas completos de selecciones, filtros, agregaciones y ordenaciones se encuentran en la siguiente sección, en formato JSON. Al final del documento se incluyen consultas de ejemplo para cada una de las tres fuentes de datos, así como consejos para depurar consultas.**

```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**: selecciona USER\_DATA, CHAT\_DATA, COMMAND\_DATA, PCW\_DATA o CASCADE\_DATA según busques datos de Autocomplete, chat, Command, PCW o Cascade.

**SERVICE\_KEY**: La clave de servicio; un usuario Admin puede crear una nueva desde [Team Settings](https://windsurf.com/team/settings). El rol de la clave de servicio debe tener el permiso "Analytics Read".

**GROUP\_NAME**: El nombre de un grupo para filtrar. Este campo es opcional.

<div id="schemas">
  ## Esquemas
</div>

<div id="selections">
  ### Selecciones
</div>

Las selecciones son **obligatorias**. Cada selección corresponde a un valor que se va a consultar.

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

**FIELD\_NAME**: El campo que desea consultar. Consulte la sección Campos disponibles a continuación.

**NAME**: Un alias para el campo. Si no se especifica, será la versión en minúsculas de \<AGGREGATION\_FUNCTION>\_\<FIELD\_NAME>, p. ej., sum\_num\_acceptances. Debe ser distinto de todos los demás nombres de campos y agregaciones.

**AGGREGATION\_FUNCTION**: Debe ser uno de UNSPECIFIED, COUNT, SUM, AVG, MAX, MIN. Si no se proporciona "aggregation\_function", el valor predeterminado es UNSPECIFIED.

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

Los filtros se utilizan para limitar los datos de modo que solo incluyan elementos que cumplan ciertos criterios. Son opcionales.

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

**NAME**: El nombre del campo que quieres filtrar. Si el elemento filtrado es el mismo que una Selección/Agregación, debe ser igual al nombre del campo o de la agregación.

**VALUE**: el valor que se compara.

**FILTER**: Uno de EQUAL, NOT\_EQUAL, GREATER\_THAN, LESS\_THAN, GE (mayor o igual), LE (menor o igual).

<div id="aggregations">
  ### Agregaciones
</div>

Las agregaciones se utilizan para dividir los datos en grupos según un criterio específico. Son opcionales.

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

FIELD\_NAME: El campo que quieres consultar. Consulta la sección Campos disponibles.

NAME: Un alias del campo. Debe ser distinto de todos los demás nombres de campos y agregaciones.

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

<div id="user-data">
  ### Datos de usuario
</div>

Todos los datos de la fuente USER\_DATA se agregan por usuario y por hora.

Nota: PCW (porcentaje de código escrito) ahora tiene su propia tabla y no depende de la tabla user\_data.

| **Nombre del campo**       | **Descripción**                                                                                                                                 | **Agregaciones válidas** |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| api\_key                   | El hash de la API key del usuario.                                                                                                              | UNSPECIFIED, COUNT       |
| date                       | La fecha en UTC del Autocomplete.                                                                                                               | UNSPECIFIED, COUNT       |
| date UTC-x                 | La fecha del Autocomplete, con un desfase de zona horaria. Por ejemplo, PST sería "date UTC-8".                                                 | UNSPECIFIED, COUNT       |
| hour                       | La hora en UTC de los Autocomplete.                                                                                                             | UNSPECIFIED, COUNT       |
| language                   | El lenguaje de programación utilizado.                                                                                                          | UNSPECIFIED, COUNT       |
| ide                        | El IDE utilizado.                                                                                                                               | UNSPECIFIED, COUNT       |
| version                    | Versión de la extensión/plugin (language-server), p. ej. `1.48.x`                                                                               | UNSPECIFIED, COUNT       |
| num\_acceptances           | La cantidad de veces que el usuario aceptó un Autocomplete. Esto ocurre cuando el usuario escribe algo de código, ve texto en gris y pulsa Tab. | SUM, MAX, MIN, AVG       |
| num\_lines\_accepted       | Líneas de código aceptadas de Autocomplete.                                                                                                     | SUM, MAX, MIN, AVG       |
| num\_bytes\_accepted       | Bytes aceptados de Autocomplete.                                                                                                                | SUM, MAX, MIN, AVG       |
| distinct\_users            | Usuarios únicos.                                                                                                                                | UNSPECIFIED, COUNT       |
| distinct\_developer\_days  | Tuplas únicas de (usuarios, día).                                                                                                               | UNSPECIFIED, COUNT       |
| distinct\_developer\_hours | Tuplas únicas de (usuarios, hora del día).                                                                                                      | UNSPECIFIED, COUNT       |

<div id="chat-data">
  ### Datos del chat
</div>

Ten en cuenta que todos los datos proporcionados en la API de datos del chat corresponden a las respuestas del modelo de chat, no a las preguntas del usuario.

| **Nombre del campo**       | **Descripción**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | **Agregaciones válidas** |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| api\_key                   | Un hash de la API key del usuario                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | UNSPECIFIED, COUNT       |
| model\_id                  | El ID del modelo de chat, establecido en el momento del despliegue.                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | UNSPECIFIED, COUNT       |
| date                       | La fecha UTC de la respuesta del chat.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | UNSPECIFIED, COUNT       |
| date UTC-x                 | La fecha de la respuesta del chat, con un desfase de zona horaria. Por ejemplo, PST sería "date UTC-8".                                                                                                                                                                                                                                                                                                                                                                                                                             | UNSPECIFIED, COUNT       |
| ide                        | El IDE que se estaba utilizando                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | UNSPECIFIED, COUNT       |
| version                    | Versión de la extensión/plugin (language-server), p. ej., `1.48.x`                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | UNSPECIFIED, COUNT       |
| latest\_intent\_type       | Indica si la respuesta del modelo se genera a partir de un code lens o de un chat normal. Los chats normales corresponderán a:<br /><br />CHAT\_INTENT\_GENERIC<br /><br />mientras que los code lens corresponderán a uno de los siguientes:<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       | Número de mensajes de chat enviados desde Devin Desktop al usuario.                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | SUM, MAX, MIN, AVG       |
| chat\_accepted             | True si se envió un bloque de código en la respuesta de chat de Devin Desktop y se hizo clic en el botón de pulgar hacia arriba.                                                                                                                                                                                                                                                                                                                                                                                                    | SUM, COUNT               |
| chat\_inserted\_at\_cursor | True si se envió un bloque de código en la respuesta de chat de Devin Desktop y se hizo clic en el botón "Insert".                                                                                                                                                                                                                                                                                                                                                                                                                  | SUM, COUNT               |
| chat\_applied              | True si se envió un bloque de código en la respuesta de chat de Devin Desktop y se hizo clic en el botón "Apply Diff".                                                                                                                                                                                                                                                                                                                                                                                                              | SUM, COUNT               |
| chat\_loc\_used            | Líneas de código utilizadas si se envió un bloque de código en el chat de Devin Desktop y se presionó cualquiera de los botones "Insert", "Copy" o "Apply Diff".                                                                                                                                                                                                                                                                                                                                                                    | SUM, MAX, MIN, AVG       |

<div id="command-data">
  ### Datos de Command
</div>

Ten en cuenta que la fuente de datos de Command contiene **todos** los comandos, incluidos los que se rechazaron. El campo "accepted" puede usarse para filtrar solo los comandos aceptados.

| **Nombre del campo** | **Descripción**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | **Agregaciones válidas** |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| api\_key             | Un hash de la API key del usuario.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | UNSPECIFIED, COUNT       |
| date                 | La fecha UTC del comando.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | UNSPECIFIED, COUNT       |
| timestamp            | La marca de tiempo UTC del comando.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | UNSPECIFIED, COUNT       |
| language             | El lenguaje de programación que se está usando.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | UNSPECIFIED, COUNT       |
| ide                  | El IDE que se estaba usando.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | UNSPECIFIED, COUNT       |
| version              | Versión de la extensión/plugin (language-server), p. ej. `1.48.x`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | UNSPECIFIED, COUNT       |
| command\_source      | El motivo por el que se activó el comando. Los valores válidos son:<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 corresponde al uso habitual de Command. | UNSPECIFIED, COUNT       |
| provider\_source     | Determina si el comando se activó en modo de generación o de edición. Los valores válidos son: PROVIDER\_SOURCE\_COMMAND\_GENERATE PROVIDER\_SOURCE\_COMMAND\_EDIT                                                                                                                                                                                                                                                                                                                                                                                            | UNSPECIFIED, COUNT       |
| lines\_added         | Número de líneas de código agregadas por el comando.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | SUM, MAX, MIN, AVG       |
| lines\_removed       | Número de líneas de código eliminadas por el comando.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | SUM, MAX, MIN, AVG       |
| bytes\_added         | Número de bytes agregados por el comando.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | SUM, MAX, MIN, AVG       |
| bytes\_removed       | Número de bytes eliminados por el comando.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | SUM, MAX, MIN, AVG       |
| selection\_lines     | Número de líneas de código seleccionadas por el comando. Siempre debe ser cero en las generaciones.                                                                                                                                                                                                                                                                                                                                                                                                                                                           | SUM, MAX, MIN, AVG       |
| selection\_bytes     | Número de bytes seleccionados por el comando. Siempre debe ser cero en las generaciones.                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | SUM, MAX, MIN, AVG       |
| accepted             | Indica si el comando fue aceptado.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | SUM, COUNT               |

<div id="pcw-data">
  ### Datos de PCW
</div>

<div id="valid-selections">
  #### Selecciones válidas
</div>

| **Nombre del campo**             | **Descripción**                                                                                                                                                                                                                                                                                          | **Agregaciones válidas** |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| percent\_code\_written           | Porcentaje de código escrito. Se calcula como (número de bytes de codeium generados) / (número de bytes de codeium generados + número de bytes generados por el usuario). Esta métrica puede tener una alta variabilidad en un solo día o entre usuarios, por lo que recomendamos agregarla por semanas. | UNSPECIFIED              |
| codeium\_bytes                   | número total de bytes de codeium, que equivale a codeium\_bytes\_by\_autocomplete + codeium\_bytes\_by\_command                                                                                                                                                                                          | UNSPECIFIED              |
| user\_bytes                      | número total de bytes generados por el usuario                                                                                                                                                                                                                                                           | UNSPECIFIED              |
| total\_bytes                     | codeium\_bytes + user\_bytes                                                                                                                                                                                                                                                                             | UNSPECIFIED              |
| codeium\_bytes\_by\_autocomplete | número total de bytes de codeium generados a partir de Autocomplete                                                                                                                                                                                                                                      | UNSPECIFIED              |
| codeium\_bytes\_by\_command      | número total de bytes de codeium generados a partir de Command                                                                                                                                                                                                                                           | UNSPECIFIED              |

<div id="cascade-data">
  ### Datos de Cascade
</div>

La fuente de datos de Cascade contiene una entrada por cada mensaje que se envía a Cascade.

<Note>Para acceder a todos los campos que se enumeran a continuación, asegúrate de usar la versión 1.11.2 o posterior.</Note>

| **Nombre del campo** | **Descripción**                                                                                                                                                                                                       | **Agregaciones válidas**        |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
| api\_key             | Un hash de la API key del usuario.                                                                                                                                                                                    | UNSPECIFIED, COUNT              |
| date                 | La fecha UTC del comando.                                                                                                                                                                                             | UNSPECIFIED, COUNT              |
| prompts\_used        | La cantidad de créditos de prompt usados en el prompt para Cascade, devuelta en centavos. Por ejemplo, 0.25 créditos se devuelve como 25 y 1 crédito se devuelve como 100.                                            | UNSPECIFIED, SUM, AVG, MIN, MAX |
| flex\_credits\_used  | La cantidad de créditos adicionales o compartidos usados del total de prompts\_used en un prompt para Cascade, devuelta en centavos. Por ejemplo, 0.25 créditos se devuelve como 25 y 1 crédito se devuelve como 100. | UNSPECIFIED, SUM, AVG, MIN, MAX |
| model                | El modelo usado para el mensaje enviado a Cascade.                                                                                                                                                                    | UNSPECIFIED, COUNT              |
| metadata             | Un objeto que contiene metadatos relacionados con el entorno de desarrollo. Los campos actualmente rellenados incluyen: ideVersion                                                                                    | UNSPECIFIED, COUNT              |

<div id="valid-filters">
  #### Filtros válidos
</div>

|                      |                                                                   |                      |
| -------------------- | ----------------------------------------------------------------- | -------------------- |
| **Nombre del campo** | **Descripción**                                                   | **Algunos ejemplos** |
| api\_key             | Un hash de la API key del usuario.                                |                      |
| language             | El lenguaje de programación utilizado.                            | KOTLIN, GO, JAVA     |
| ide                  | El IDE utilizado.                                                 | jetbrains, vscode    |
| version              | Versión de la extensión/plugin (language-server), p. ej. `1.48.x` | 1.28.0, 130.0        |

Para filtrar por fecha, usa start\_timestamp y end\_timestamp, que deben estar en formato RFC 3339 (p. ej., 2023-01-01T00:00:00Z; consulta el ejemplo a continuación).

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

<div id="user-data">
  ### Datos de usuario
</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
```

Esta consulta calcula el porcentaje total de código escrito durante el mes de enero de 2024. Respuesta de ejemplo (JSON formateado para facilitar la lectura):

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

<div id="chat-data">
  ### Datos del 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
```

Esta consulta muestra el número de líneas de código aceptadas mediante el code lens "Generate Docstring" a lo largo de todo el tiempo, agrupadas por IDE.

Respuesta de ejemplo:

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

<div id="command-data">
  ### Datos 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
```

Esta consulta devuelve la cantidad de líneas agregadas y eliminadas en los comandos "edit", agrupadas por lenguaje de programación.

Respuesta de ejemplo:

```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">
  ### Datos de 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
```

Esta consulta devuelve los datos de PCW (porcentaje de código escrito), junto con los bytes filtrados por el lenguaje Go.

Respuesta de ejemplo:

```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">
  ## Depuración de consultas
</div>

A partir de la versión 1.10.0, las consultas no válidas devolverán un mensaje de error. Esta sección incluye algunos mensajes de error comunes, qué significan y cómo depurar las consultas correspondientes.

<table>
  <thead>
    <tr>
      <th>Mensaje de error</th>
      <th>Explicación</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>at least one field or aggregation is required</td>
      <td>No se detectó ninguna selección ni agregación; asegúrate de que la solicitud de consulta contenga al menos una.</td>
    </tr>

    <tr>
      <td>invalid aggregation function for string type field ide: QUERY\_AGGREGATION\_SUM</td>
      <td>Una de las selecciones usó una función de agregación no válida. En este caso, se intentó usar SUM en el campo "ide", pero solo admite COUNT y UNSPECIFIED.</td>
    </tr>

    <tr>
      <td>invalid query table: QUERY\_DATA\_SOURCE\_UNSPECIFIED</td>
      <td>Probablemente haya un error tipográfico en el campo data\_source; vuelve a comprobar la ortografía.</td>
    </tr>

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

      <td>
        Si hay múltiples campos de selección, todos deben contener un aggregation\_function o ninguno debe contenerlo. Por ejemplo, esta selección no es válida porque num\_acceptances se suma, pero num\_lines\_accepted no:

        ```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"
          }
        ]
        ```

        Nota: PCW siempre se considera agregado. Si no se elige explícitamente ningún aggregation\_function, se considera no especificado. Si quieres información sobre ambos campos, usa dos consultas separadas.
      </td>
    </tr>

    <tr>
      <td>invalid aggregation function for string type field ide: QUERY\_AGGREGATION\_SUM</td>
      <td>No todos los campos admiten todas las funciones de agregación; consulta la sección de campos disponibles para ver cuáles corresponden. En este caso, la consulta usó la función de agregación QUERY\_AGGREGATION\_SUM con el campo "ide", lo cual no es válido.</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>
        Los campos con el patrón "distinct\_\*" no pueden estar en la sección aggregations; el error sugiere uno o varios campos alternativos sobre los que agregar. Así que, en lugar de:

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

        Prueba:

        ```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>Todas las selecciones y agregaciones deben tener un nombre distinto. Ten en cuenta que, si no se especifica el nombre, de forma predeterminada se establece como \<AGGREGATION\_FUNCTION>\_\<FIELD\_NAME>.</td>
    </tr>

    <tr>
      <td>invalid group name: GroupName</td>
      <td>No se encontró el grupo con el nombre especificado; vuelve a comprobar la ortografía.</td>
    </tr>
  </tbody>
</table>
