Pular para o conteúdo principal
POST
/
api
/
v1
/
Analytics
Consulta personalizada de Custom Analytics
curl --request POST \
  --url https://server.codeium.com/api/v1/Analytics \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "service_key": "<string>",
  "group_name": "<string>",
  "query_requests": [
    {
      "data_source": "<string>",
      "selections": [
        {
          "field": "<string>",
          "name": "<string>",
          "aggregation_function": "<string>"
        }
      ],
      "filters": [
        {
          "name": "<string>",
          "filter": "<string>",
          "value": "<string>"
        }
      ],
      "aggregations": [
        {
          "field": "<string>",
          "name": "<string>"
        }
      ]
    }
  ]
}
'
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {}
        }
      ]
    }
  ]
}

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.

Visão geral

A API Custom Analytics permite consultas flexíveis em dados de preenchimento automático, chat e comandos, com seleções, filtros, agregações e ordenações personalizáveis.

Requisição

service_key
string
obrigatório
Sua chave de serviço com permissão “Analytics Read”
group_name
string
Filtra os resultados para usuários em um grupo específico (opcional)
query_requests
array
obrigatório
Array de objetos de requisição de consulta que definem os dados a recuperar

Estrutura da requisição de consulta

Cada objeto de requisição de consulta contém:
  • data_source (obrigatório): Fonte de dados a consultar
  • selections (obrigatório): Array de campos selecionados para recuperar
  • filters (opcional): Array de filtros a aplicar
  • aggregations (opcional): Array de agregações para agrupamento

Seleções

As seleções definem quais campos recuperar e como agregá-los.
  • field (obrigatório): Nome do campo a ser selecionado
  • name (opcional): Alias do campo
  • aggregation_function (opcional): Função de agregação a ser aplicada

Exemplo de seleção

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

Filtros

Os filtros restringem os dados aos elementos que atendem a critérios específicos.
  • name (obrigatório): Nome do campo usado para filtrar
  • filter (obrigatório): Operação de filtro
  • value (obrigatório): Valor de comparação

Exemplo de filtro

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

Agregações

As agregações agrupam os dados com base nos critérios especificados.
  • field (obrigatório): Nome do campo pelo qual agrupar
  • name (obrigatório): Alias do campo de agregação

Exemplo de agregação

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

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 UTC da autocompletaçãoUNSPECIFIED, COUNT
date UTC-xData com deslocamento de fuso horário (e.g., “date UTC-8” para PST)UNSPECIFIED, COUNT
hourHora UTC da autocompletaçãoUNSPECIFIED, COUNT
languageLinguagem de programaçãoUNSPECIFIED, COUNT
ideIDE em usoUNSPECIFIED, COUNT
versionVersão do Devin DesktopUNSPECIFIED, COUNT
num_acceptancesNúmero de sugestões de autocompletar aceitasSUM, 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 de (usuário, dia)UNSPECIFIED, COUNT
distinct_developer_hoursTuplas distintas de (usuário, hora)UNSPECIFIED, COUNT

Dados de chat

Os dados de chat são separados dos dados do Cascade e representam o uso dos nossos plugins legados, sem agentes
Todos os Dados de chat representam respostas do modelo de chat, não perguntas do usuário.
Nome do campoDescriçãoAgregações válidas
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 deslocamento de fuso horárioUNSPECIFIED, COUNT
ideIDE em usoUNSPECIFIED, COUNT
versionVersão do Devin DesktopUNSPECIFIED, COUNT
latest_intent_typeTipo de intenção do chat (consulte Tipos de intenção abaixo)UNSPECIFIED, COUNT
num_chats_receivedNúmero de mensagens de chat recebidasSUM, MAX, MIN, AVG
chat_acceptedSe o chat foi aceito (curtida)SUM, COUNT
chat_inserted_at_cursorSe o botão “Insert” foi clicadoSUM, COUNT
chat_appliedSe o botão “Apply Diff” foi clicadoSUM, COUNT
chat_loc_usedLinhas de código aproveitadas do chatSUM, MAX, MIN, AVG

Tipos de intenção de chat

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

Dados de comandos

Os Dados de comandos incluem todos os comandos, inclusive os recusados. Use o campo accepted para filtrar apenas os comandos aceitos.
Nome do campoDescriçãoAgregações válidas
api_keyHash da Chave de API do usuárioUNSPECIFIED, COUNT
dateData UTC do comandoUNSPECIFIED, COUNT
timestampCarimbo de data/hora UTC do comandoUNSPECIFIED, COUNT
languageLinguagem de programaçãoUNSPECIFIED, COUNT
ideIDE em usoUNSPECIFIED, COUNT
versionVersão do Devin DesktopUNSPECIFIED, COUNT
command_sourceOrigem do acionamento do comando (consulte Fontes de comando 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

Origens do comando

  • COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
  • COMMAND_REQUEST_SOURCE_DEFAULT - Uso comum do comando
  • 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

Origens do provedor

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

Dados de PCW

Dados de Percentual de Código Escrito com rastreamento separado para contribuições de preenchimento automático e de comando.
Nome do campoDescriçãoAgregações válidas
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 do preenchimento automáticoUNSPECIFIED
codeium_bytes_by_commandBytes do Codeium provenientes de comandosUNSPECIFIED

Filtros de PCW

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

Exemplos de requisições

Exemplo de dados do usuário

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "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": "date",
          "filter": "QUERY_FILTER_GE",
          "value": "2024-01-01"
        },
        {
          "name": "date",
          "filter": "QUERY_FILTER_LE",
          "value": "2024-02-01"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Exemplo de dados de chat

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
      "selections": [
        {
          "field": "chat_loc_used",
          "name": "lines_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_type"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Exemplo de dados de comando

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
      "selections": [
        {
          "field": "lines_added",
          "name": "total_lines_added",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "lines_removed",
          "name": "total_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": "programming_language"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Exemplo de dados de PCW

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "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 da consulta, um para cada requisição de consulta
responseItems
array
Array de itens de resultado
item
object
Objeto que contém os campos selecionados e seus valores

Exemplos de resposta

Resposta de dados do usuário

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

Resposta de dados de chat

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

Resposta de dados de comando

{
  "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 de PCW

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

Notas importantes

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