POST
/
api
/
v1
/
Analytics
Consulta Personalizada de Analytics
curl --request POST \
  --url https://server.codeium.com/api/v1/Analytics \
  --header 'Content-Type: application/json' \
  --data '{
  "service_key": "<string>",
  "group_name": "<string>",
  "query_requests": [
    {}
  ],
  "data_source": "<string>",
  "selections": [
    {}
  ],
  "filters": [
    {}
  ],
  "aggregations": [
    {}
  ],
  "field": "<string>",
  "name": "<string>",
  "aggregation_function": "<string>",
  "value": "<string>",
  "filter": "<string>"
}'
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {}
        }
      ]
    }
  ]
}

Visão geral

A Analytics API personalizada oferece recursos flexíveis de consulta para dados de Autocomplete, Chat e Command, com selections, filtros, aggregations e ordenações personalizáveis.

Solicitação

service_key
string
required
Sua Service Key com permissões “Teams Read-only”
group_name
string
Filtre os resultados para usuários de um grupo específico (opcional)
query_requests
array
required
Array de objetos de solicitação de consulta que definem os dados a serem recuperados

Estrutura da solicitação de consulta

Cada objeto de solicitação de consulta contém:
data_source
string
required
Fonte de dados a consultar. Opções:
  • QUERY_DATA_SOURCE_USER_DATA - dados de Autocomplete
  • QUERY_DATA_SOURCE_CHAT_DATA - dados de Chat
  • QUERY_DATA_SOURCE_COMMAND_DATA - dados de Command
  • QUERY_DATA_SOURCE_PCW_DATA - dados de Percent Code Written
selections
array
required
Array de seleções de campos a recuperar (veja a seção Selections)
filters
array
Array de filtros a aplicar (veja a seção Filters)
aggregations
array
Array de aggregations para agrupamento (veja a seção Aggregations)

Selections

Selections definem quais campos recuperar e como agregá-los.
field
string
required
Nome do campo a selecionar (consulte a seção Available Fields)
name
string
Apelido (alias) para o campo. Se não for especificado, o padrão é {aggregation_function}_{field_name} (em minúsculas)
aggregation_function
string
Função de agregação a aplicar:
  • QUERY_AGGREGATION_UNSPECIFIED (padrão)
  • QUERY_AGGREGATION_COUNT
  • QUERY_AGGREGATION_SUM
  • QUERY_AGGREGATION_AVG
  • QUERY_AGGREGATION_MAX
  • QUERY_AGGREGATION_MIN

Exemplo de Seleção

{
  "field": "num_acceptances",
  "name": "total_acceptances",
  "aggregation_function": "QUERY_AGGREGATION_SUM"
}

Filtros

Os filtros reduzem os dados a elementos que atendem a critérios específicos.
name
string
required
Nome do campo a ser filtrado
value
string
required
Valor a ser comparado
filter
string
required
Operação de filtro:
  • QUERY_FILTER_EQUAL
  • QUERY_FILTER_NOT_EQUAL
  • QUERY_FILTER_GREATER_THAN
  • QUERY_FILTER_LESS_THAN
  • QUERY_FILTER_GE (maior ou igual)
  • QUERY_FILTER_LE (menor ou igual)

Exemplo de filtro

{
  "name": "language",
  "filter": "QUERY_FILTER_EQUAL",
  "value": "PYTHON"
}

Aggregations

Aggregations agrupam dados por critérios especificados.
field
string
required
Nome do campo pelo qual agrupar
name
string
required
Alias para o campo de aggregation

Exemplo de agregação

{
  "field": "ide",
  "name": "tipo_ide"
}

Campos disponíveis

Dados do usuário

Todos os dados do usuário são agregados por usuário, por hora.
Nome do campoDescriçãoAgregações válidas
api_keyHash da chave de API do usuárioUNSPECIFIED, COUNT
dateData em UTC da autocompletaçãoUNSPECIFIED, COUNT
date UTC-xData com deslocamento de fuso horário (por exemplo, “date UTC-8” para PST)UNSPECIFIED, COUNT
hourHora em UTC da autocompletaçãoUNSPECIFIED, COUNT
languageLinguagem de programaçãoUNSPECIFIED, COUNT
ideIDE em usoUNSPECIFIED, COUNT
versionVersão do WindsurfUNSPECIFIED, COUNT
num_acceptancesNúmero de aceitações do AutocompleteSUM, MAX, MIN, AVG
num_lines_acceptedLinhas de código aceitasSUM, MAX, MIN, AVG
num_bytes_acceptedBytes aceitosSUM, MAX, MIN, AVG
distinct_usersUsuários distintosUNSPECIFIED, COUNT
distinct_developer_daysTuplas distintas (usuário, dia)UNSPECIFIED, COUNT
distinct_developer_hoursTuplas distintas (usuário, hora)UNSPECIFIED, COUNT

Dados de Chat

Todos os Dados de Chat representam respostas do modelo de chat, não perguntas do usuário.
Field NameDescriptionValid Aggregations
api_keyHash da chave de API do usuárioUNSPECIFIED, COUNT
model_idID do modelo de ChatUNSPECIFIED, COUNT
dateData em UTC da resposta do chatUNSPECIFIED, COUNT
date UTC-xData com offset de fuso horárioUNSPECIFIED, COUNT
ideIDE em usoUNSPECIFIED, COUNT
versionVersão do WindsurfUNSPECIFIED, COUNT
latest_intent_typeTipo de intenção do Chat (veja Tipos de Intenção abaixo)UNSPECIFIED, COUNT
num_chats_receivedNúmero de mensagens de chat recebidasSUM, MAX, MIN, AVG
chat_acceptedIndica se o chat foi aceito (polegar para cima)SUM, COUNT
chat_inserted_at_cursorIndica se o botão “Insert” foi clicadoSUM, COUNT
chat_appliedIndica se o botão “Apply Diff” foi clicadoSUM, COUNT
chat_loc_usedLinhas de código usadas pelo chatSUM, MAX, MIN, AVG

Tipos de intenção do Chat

  • CHAT_INTENT_GENERIC - Chat comum
  • CHAT_INTENT_FUNCTION_EXPLAIN - CodeLens de explicação de função
  • CHAT_INTENT_FUNCTION_DOCSTRING - CodeLens de docstring de função
  • CHAT_INTENT_FUNCTION_REFACTOR - CodeLens de refatoração de função
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - CodeLens de explicação de bloco de código
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - CodeLens de refatoração de bloco de código
  • CHAT_INTENT_PROBLEM_EXPLAIN - CodeLens de explicação de problema
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - CodeLens de testes unitários de função

Dados do Command

Os dados do Command incluem todos os comandos, inclusive os recusados. Use o campo accepted para filtrar apenas os comandos aceitos.
Field NameDescriptionValid Aggregations
api_keyHash da chave de API do usuárioUNSPECIFIED, COUNT
dateData UTC do comandoUNSPECIFIED, COUNT
timestampTimestamp (UTC) do comandoUNSPECIFIED, COUNT
languageLinguagem de programaçãoUNSPECIFIED, COUNT
ideIDE em usoUNSPECIFIED, COUNT
versionVersão do WindsurfUNSPECIFIED, COUNT
command_sourceOrigem do acionamento do Command (veja Command Sources abaixo)UNSPECIFIED, COUNT
provider_sourceModo de geração ou ediçãoUNSPECIFIED, COUNT
lines_addedLinhas de código adicionadasSUM, MAX, MIN, AVG
lines_removedLinhas de código removidasSUM, MAX, MIN, AVG
bytes_addedBytes adicionadosSUM, MAX, MIN, AVG
bytes_removedBytes removidosSUM, MAX, MIN, AVG
selection_linesLinhas selecionadas (zero para gerações)SUM, MAX, MIN, AVG
selection_bytesBytes selecionados (zero para gerações)SUM, MAX, MIN, AVG
acceptedIndica se o comando foi aceitoSUM, COUNT

Fontes do Command

  • COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
  • COMMAND_REQUEST_SOURCE_DEFAULT - Uso típico do Command
  • COMMAND_REQUEST_SOURCE_RIGHT_CLICK_REFACTOR
  • COMMAND_REQUEST_SOURCE_FUNCTION_CODE_LENS
  • COMMAND_REQUEST_SOURCE_FOLLOWUP
  • COMMAND_REQUEST_SOURCE_CLASS_CODE_LENS
  • COMMAND_REQUEST_SOURCE_PLAN
  • COMMAND_REQUEST_SOURCE_SELECTION_HINT_CODE_LENS

Fontes do provedor

  • PROVIDER_SOURCE_COMMAND_GENERATE - Modo de geração
  • PROVIDER_SOURCE_COMMAND_EDIT - Modo de edição

Dados de PCW

Dados de Percent Code Written com rastreamento separado para contribuições de Autocomplete e Command.
Field NameDescriptionValid Aggregations
percent_code_writtenCalculado como codeium_bytes / (codeium_bytes + user_bytes)UNSPECIFIED
codeium_bytesTotal de bytes gerados pelo CodeiumUNSPECIFIED
user_bytesTotal de bytes escritos pelo usuárioUNSPECIFIED
total_bytescodeium_bytes + user_bytesUNSPECIFIED
codeium_bytes_by_autocompleteBytes do Codeium provenientes de AutocompleteUNSPECIFIED
codeium_bytes_by_commandBytes do Codeium provenientes de CommandUNSPECIFIED

Filtros do PCW

Nome do campoDescriçãoExemplos
languageLinguagem de programaçãoKOTLIN, GO, JAVA
ideIDE em usojetbrains, vscode
versionVersão do Windsurf1.28.0, 130.0
Para filtrar por data em consultas do PCW, use start_timestamp e end_timestamp no corpo principal da requisição.

Exemplos de solicitações

Exemplo de dados do usuário

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "sua_chave_de_servico_aqui",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_USER_DATA",
      "selections": [
        {
          "field": "num_acceptances",
          "name": "total_acceptances",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "num_lines_accepted",
          "name": "total_lines",
          "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

Exemplo de dados do Chat

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

Exemplo de dados do Command

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

Exemplo de dados do PCW

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "sua_chave_de_servico_aqui",
  "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": "pcw"
        },
        {
          "field": "codeium_bytes",
          "name": "ai_bytes"
        },
        {
          "field": "total_bytes",
          "name": "total"
        },
        {
          "field": "codeium_bytes_by_autocomplete",
          "name": "autocomplete_bytes"
        },
        {
          "field": "codeium_bytes_by_command",
          "name": "command_bytes"
        }
      ],
      "filters": [
        {
          "filter": "QUERY_FILTER_EQUAL",
          "name": "language",
          "value": "GO"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Resposta

queryResults
array
Array de resultados de consulta, um para cada solicitação de consulta
responseItems
array
Array de itens de resultado
item
object
Objeto contendo os campos selecionados e seus valores

Exemplos de respostas

Resposta de Dados do Usuário

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "total_acceptances": "125",
            "total_lines": "863"
          }
        }
      ]
    }
  ]
}

Resposta de dados do Chat

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "lines_used": "74",
            "ide_type": "jetbrains"
          }
        },
        {
          "item": {
            "lines_used": "41",
            "ide_type": "vscode"
          }
        }
      ]
    }
  ]
}

Resposta de dados do Command

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "programming_language": "PYTHON",
            "total_lines_added": "21",
            "total_lines_removed": "5"
          }
        },
        {
          "item": {
            "programming_language": "GO",
            "total_lines_added": "31",
            "total_lines_removed": "27"
          }
        }
      ]
    }
  ]
}

Resposta de dados do PCW

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "ai_bytes": "6018",
            "autocomplete_bytes": "4593",
            "command_bytes": "1425",
            "pcw": "0.61",
            "total": "9900"
          }
        }
      ]
    }
  ]
}

Notas importantes

  • PCW (Percent Code Written) pode variar bastante ao longo de um mesmo dia ou entre usuários — agregue por semanas para obter insights melhores
  • Todos os campos de seleção devem ou ter funções de agregação, ou nenhum deve (não é possível misturar)
  • Campos com o padrão “distinct_*” não podem ser usados em aggregations
  • Os aliases de campos devem ser exclusivos em todas as selections e aggregations
  • Se nenhuma função de agregação for especificada, o padrão será UNSPECIFIED