O Devin Desktop oferece suporte a uma API para análises personalizadas. Ela permite consultar dados de autocompletar, chat e comandos, com diversos filtros, agrupamentos e agregações.
Fornecemos todos os exemplos em curl; depois, eles podem ser convertidos em requisições HTTP em outras linguagens.
A API de Análises está disponível nos planos Enterprise
Especificação da API de análises de dados de usuários
Os dados da tabela Users na página Teams podem ser obtidos com o seguinte comando:
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: A chave de serviço — um usuário administrador pode criar uma na seção de chave de serviço da página de Configurações. A função da chave de serviço deve ter as permissões “Teams somente leitura”.
GROUP_NAME: O nome de um grupo pelo qual filtrar. Este campo é opcional.
START_TIMESTAMP/END_TIMESTAMP: Carimbos de data/hora no formato RFC 3339, por exemplo 2023-01-01T00:00:00Z
{
"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"
}
]
}
Especificação da API de análises do Cascade
Os dados específicos do Cascade exibidos na página de análises podem ser consultados pela API.
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: A chave de serviço — um usuário administrador pode criar uma nova em Configurações da equipe
GROUP_NAME: O nome de um grupo para filtrar. Este campo é opcional. Não pode ser definido se emails estiver definido.
START_TIMESTAMP/END_TIMESTAMP: Timestamps no formato RFC 3339, por exemplo, 2023-01-01T00:00:00Z
EMAILS: Uma lista de e-mails para filtrar. Este campo é opcional. Não pode ser definido se group_name estiver definido.
IDE_TYPES: Uma lista de tipos de IDE para filtrar. Este campo é opcional. Os valores possíveis estão descritos abaixo.
QUERY_REQUESTS: Uma lista de requisições de consulta a serem feitas. Este campo é obrigatório. Os valores possíveis de CASCADE_DATA_SOURCE estão descritos abaixo.
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
Dividimos os dados do Cascade em categorias por tipo de IDE. Se o campo ide_types for omitido da query, serão retornados dados de todos os tipos. Se você quiser consultar dados de apenas um dos IDEs, pode usar qualquer uma das seguintes opções:
- “editor” para o Devin Desktop Editor
- “jetbrains” para o plugin do JetBrains
- “cli” para o Devin CLI
Ao filtrar por Devin CLI ("cli"), apenas cascade_runs retorna dados. As fontes de dados cascade_lines e cascade_tool_usage não são compatíveis com o Devin CLI e retornarão resultados vazios.
Fontes de dados do Cascade
Há três valores possíveis para CASCADE_DATA_SOURCE
Use cascade_lines para consultar dados sobre as linhas do Cascade sugeridas e aceitas por dia.
Exemplo de saída:
{
"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: O número de linhas sugeridas no dia especificado.
linesAccepted: O número de linhas aceitas no dia especificado.
Use o cascade_runs para consultar dados sobre o uso do modelo, o consumo de créditos e o modo.
Exemplo de saída:
{
"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: A data da execução.
model: O modelo usado na mensagem.
mode: O modo da execução. Um entre CONVERSATIONAL_PLANNER_MODE_DEFAULT (no modo de escrita), CONVERSATIONAL_PLANNER_MODE_READ_ONLY (no modo somente leitura), CONVERSATIONAL_PLANNER_MODE_NO_TOOL (no modo legado) ou UNKNOWN.
messagesSent: O número de mensagens enviadas.
cascadeId: O ID da execução. Esse ID pode ser usado para entender quantas conversas distintas foram iniciadas (em vez de quantas vezes o usuário envia uma mensagem).
promptsUsed: O número de créditos usados. Esse valor é retornado em centavos. Por exemplo, 0,25 crédito é retornado como 25, e 1 crédito é retornado como 100.
Os dados retornados pela API estão em formato bruto, o que pode explicar eventuais valores “UNKNOWN”. Se você usar essa fonte de dados para suas próprias métricas, é recomendável agregar de acordo com as métricas específicas de seu interesse (por exemplo, somar o campo promptsUsed para entender os padrões de uso do usuário, messagesSent para entender o engajamento do usuário etc.), pois é possível que os dados de modo e prompts estejam divididos entre entradas.
Use cascade_tool_usage para consultar dados de uso de ferramentas. Observe que isso retorna uma contagem agregada do uso de ferramentas no período informado.
Exemplo de saída:
{
"queryResults": [
{
"cascadeToolUsage": {
"cascadeToolUsage": [
{
"tool": "CODE_ACTION",
"count": "15"
},
{
"tool": "LIST_DIRECTORY",
"count": "20"
},
{
"tool": "MCP_TOOL",
"count": "12"
},
{
"tool": "MEMORY",
"count": "4"
}
]
}
}
]
}
tool: A ferramenta usada na mensagem.
count: O número de vezes que a ferramenta foi usada.
Aqui está um mapa dos enums retornados e seus nomes legíveis, conforme exibidos na UI:
- CODE_ACTION: ‘Editar código’
- VIEW_FILE: ‘Visualizar arquivo’
- RUN_COMMAND: ‘Executar comando’
- FIND: ‘Ferramenta Find’
- GREP_SEARCH: ‘Busca grep’
- VIEW_FILE_OUTLINE: ‘Visualizar estrutura do arquivo’
- MQUERY: ‘Riptide’
- LIST_DIRECTORY: ‘Listar diretório’
- MCP_TOOL: ‘Ferramenta MCP’
- PROPOSE_CODE: ‘Propor código’
- SEARCH_WEB: ‘Pesquisar na web’
- MEMORY: ‘Memória’
- PROXY_WEB_SERVER: ‘Pré-visualização no navegador’
- DEPLOY_WEB_APP: ‘Implantar app web’
Especificação da API de Análises Personalizadas
Certas fontes de dados permitem consultas personalizadas por meio da API de Análises Personalizadas.
Os esquemas completos de seleções, filtros, agregações e ordenações estão na seção a seguir, em formato JSON. Consultas de exemplo para cada uma das três fontes de dados, assim como dicas de depuração de consultas, estarão no final do documento.
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: selecione USER_DATA, CHAT_DATA, COMMAND_DATA, PCW_DATA ou CASCADE_DATA, dependendo de você estar buscando dados de preenchimento automático, chat, Command, PCW ou Cascade.
SERVICE_KEY: A chave de serviço — um usuário administrador pode criar uma nova em Configurações da equipe. A função da chave de serviço deve ter a permissão “Analytics Read”.
GROUP_NAME: O nome de um grupo para usar como filtro. Este campo é opcional.
As seleções são obrigatórias. Cada seleção corresponde a um valor que será consultado.
{
"field": "<FIELD_NAME>",
"name": "<NAME>",
"aggregation_function": "QUERY_AGGREGATION_<AGGREGATION_FUNCTION>"
}
FIELD_NAME: O campo que você deseja consultar. Veja a seção Campos disponíveis abaixo.
NAME: Um nome alternativo para o campo. Se não for especificado, será a versão em minúsculas de <AGGREGATION_FUNCTION>_<FIELD_NAME>, por exemplo sum_num_acceptances. Deve ser diferente de todos os outros nomes de campo e agregação.
AGGREGATION_FUNCTION: deve ser um entre UNSPECIFIED, COUNT, SUM, AVG, MAX e MIN. Se “aggregation_function” não for informado, o valor padrão será UNSPECIFIED.
Os filtros são usados para restringir os dados, de modo que contenham apenas elementos que atendam a determinados critérios. Eles são opcionais.
{
"name": "<NAME>",
"value": "<VALUE>",
"filter": "QUERY_FILTER_<FILTER>"
}
NAME: O nome do campo que você deseja filtrar. Se o item filtrado for o mesmo que uma Seleção/Aggregação, ele deverá ser igual ao nome do campo/agregação.
VALUE: o valor que está sendo comparado.
FILTER: Um dos seguintes: EQUAL, NOT_EQUAL, GREATER_THAN, LESS_THAN, GE (maior que ou igual a), LE (menor que ou igual a).
As agregações servem para dividir os dados em grupos com base em um critério especificado. Elas são opcionais.
{
"field": <FIELD_NAME>,
"name": <NAME>
}
FIELD_NAME: O campo que você deseja consultar. Consulte a seção Campos disponíveis.
NAME: Um alias para o campo. Deve ser diferente de todos os outros nomes de campos e agregações.
Todos os dados da fonte USER_DATA são agregados por usuário, por hora.
Observação: PCW (percentual de código escrito) agora tem sua própria tabela e não depende da tabela user_data.
| Nome do campo | Descrição | Agregações válidas |
|---|
| api_key | Um hash da chave de API do usuário. | UNSPECIFIED, COUNT |
| date | A data em UTC das autocompletações. | UNSPECIFIED, COUNT |
| date UTC-x | A data da autocompletação, com um deslocamento de fuso horário. Por exemplo, PST seria “date UTC-8”. | UNSPECIFIED, COUNT |
| hour | A hora em UTC das autocompletações. | UNSPECIFIED, COUNT |
| language | A linguagem de programação em uso. | UNSPECIFIED, COUNT |
| ide | A IDE em uso. | UNSPECIFIED, COUNT |
| version | A versão do Devin Desktop usada. | UNSPECIFIED, COUNT |
| num_acceptances | O número de vezes que o usuário aceitou uma autocompletação. Isso ocorre quando o usuário escreve algum código, vê um texto em cinza e pressiona a tecla Tab. | SUM, MAX, MIN, AVG |
| num_lines_accepted | Linhas de código aceitas da autocompletação. | SUM, MAX, MIN, AVG |
| num_bytes_accepted | Bytes aceitos da autocompletação. | SUM, MAX, MIN, AVG |
| distinct_users | Usuários distintos. | UNSPECIFIED, COUNT |
| distinct_developer_days | Tuplas distintas de (usuários, dia). | UNSPECIFIED, COUNT |
| distinct_developer_hours | Tuplas distintas de (usuários, hora do dia). | UNSPECIFIED, COUNT |
Observe que todos os dados fornecidos na API de dados do chat se referem às respostas do modelo de chat, não às perguntas do usuário.
| Nome do campo | Descrição | Agregações válidas |
|---|
| api_key | Um hash da Chave de API do usuário | UNSPECIFIED, COUNT |
| model_id | O ID do modelo de chat, definido no momento da implantação. | UNSPECIFIED, COUNT |
| date | A data UTC da resposta do chat. | UNSPECIFIED, COUNT |
| date UTC-x | A data da resposta do chat, com um deslocamento de fuso horário. Por exemplo, PST seria “date UTC-8”. | UNSPECIFIED, COUNT |
| ide | A IDE que estava em uso | UNSPECIFIED, COUNT |
| version | A versão do Devin Desktop utilizada | UNSPECIFIED, COUNT |
| latest_intent_type | Indica se a resposta do modelo é gerada a partir de uma lente de código ou de um chat comum. Chats comuns corresponderão a:
CHAT_INTENT_GENERIC
enquanto lentes de código corresponderão a um dos seguintes:
CHAT_INTENT_FUNCTION_EXPLAIN CHAT_INTENT_FUNCTION_DOCSTRING CHAT_INTENT_FUNCTION_REFACTOR CHAT_INTENT_CODE_BLOCK_EXPLAIN CHAT_INTENT_CODE_BLOCK_REFACTOR CHAT_INTENT_PROBLEM_EXPLAIN CHAT_INTENT_FUNCTION_UNIT_TESTS | UNSPECIFIED, COUNT |
| num_chats_received | Número de mensagens de chat enviadas do Devin Desktop para o usuário. | SUM, MAX, MIN, AVG |
| chat_accepted | True se um bloco de código foi enviado na resposta de chat do Devin Desktop e o botão de curtir foi clicado. | SUM, COUNT |
| chat_inserted_at_cursor | True se um bloco de código foi enviado na resposta de chat do Devin Desktop e o botão “Insert” foi clicado. | SUM, COUNT |
| chat_applied | True se um bloco de código foi enviado na resposta de chat do Devin Desktop e o botão “Apply Diff” foi clicado. | SUM, COUNT |
| chat_loc_used | Linhas de código usadas, se um bloco de código foi enviado no chat do Devin Desktop e qualquer um dos botões “Insert”, “Copy” ou “Apply Diff” tiver sido pressionado. | SUM, MAX, MIN, AVG |
Observe que a fonte Dados de Comando contém todos os comandos, inclusive os que foram recusados. O campo “accepted” pode ser usado para filtrar apenas os comandos aceitos.
| Nome do Campo | Descrição | Agregações válidas |
|---|
| api_key | Um hash da Chave de API do usuário. | UNSPECIFIED, COUNT |
| date | A data UTC do comando. | UNSPECIFIED, COUNT |
| timestamp | O carimbo de data/hora UTC do comando. | UNSPECIFIED, COUNT |
| language | A linguagem de programação em uso. | UNSPECIFIED, COUNT |
| ide | A IDE em uso. | UNSPECIFIED, COUNT |
| version | A versão do Devin Desktop usada. | UNSPECIFIED, COUNT |
| command_source | O motivo pelo qual o comando foi acionado. Os valores válidos são:
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS COMMAND_REQUEST_SOURCE_DEFAULT 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
COMMAND_REQUEST_SOURCE_DEFAULT corresponde ao uso típico do comando. | UNSPECIFIED, COUNT |
| provider_source | Determina se o comando foi acionado no modo de geração ou de edição. Os valores válidos são: PROVIDER_SOURCE_COMMAND_GENERATE PROVIDER_SOURCE_COMMAND_EDIT | UNSPECIFIED, COUNT |
| lines_added | Número de linhas de código adicionadas pelo comando. | SUM, MAX, MIN, AVG |
| lines_removed | Número de linhas de código removidas pelo comando. | SUM, MAX, MIN, AVG |
| bytes_added | Número de bytes adicionados pelo comando. | SUM, MAX, MIN, AVG |
| bytes_removed | Número de bytes removidos pelo comando. | SUM, MAX, MIN, AVG |
| selection_lines | Número de linhas de código selecionadas pelo comando. Deve ser sempre zero para gerações. | SUM, MAX, MIN, AVG |
| selection_bytes | Número de bytes selecionados pelo comando. Deve ser sempre zero para gerações. | SUM, MAX, MIN, AVG |
| accepted | Indica se o comando foi aceito. | SUM, COUNT |
| Nome do campo | Descrição | Agregações válidas |
|---|
| percent_code_written | Percentual de código escrito. Calculado como (número de bytes do codeium gerados) / (número de bytes do codeium gerados + número de bytes gerados pelo usuário). Essa métrica pode ter alta variabilidade em dias específicos ou entre usuários, por isso recomendamos agregá-la ao longo de semanas. | UNSPECIFIED |
| codeium_bytes | número total de bytes do codeium, que é igual a codeium_bytes_by_autocomplete + codeium_bytes_by_command | UNSPECIFIED |
| user_bytes | número total de bytes gerados pelo usuário | UNSPECIFIED |
| total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
| codeium_bytes_by_autocomplete | número total de bytes do codeium gerados por autocompletar | UNSPECIFIED |
| codeium_bytes_by_command | número total de bytes do codeium gerados por comando | UNSPECIFIED |
A fonte de dados do Cascade contém uma entrada para cada mensagem enviada ao Cascade.
Para acessar todos os campos listados abaixo, verifique se você está usando a versão 1.11.2 ou posterior.
| Nome do campo | Descrição | Agregações válidas |
|---|
| api_key | Um hash da chave de API do usuário. | UNSPECIFIED, COUNT |
| date | A data em UTC do comando. | UNSPECIFIED, COUNT |
| prompts_used | O número de créditos de prompt usados no prompt enviado ao Cascade, retornado em centavos. Por exemplo, 0.25 crédito é retornado como 25, e 1 crédito é retornado como 100. | UNSPECIFIED, SUM, AVG, MIN, MAX |
| flex_credits_used | O número de créditos adicionais/compartilhados usados do total de prompts_used em um prompt enviado ao Cascade, retornado em centavos. Por exemplo, 0.25 crédito é retornado como 25, e 1 crédito é retornado como 100. | UNSPECIFIED, SUM, AVG, MIN, MAX |
| model | O modelo usado na mensagem enviada ao Cascade. | UNSPECIFIED, COUNT |
| metadata | Um objeto que contém metadados relacionados ao ambiente de desenvolvimento. Os campos preenchidos atualmente incluem: ideVersion | UNSPECIFIED, COUNT |
| | |
|---|
| Nome do campo | Descrição | Alguns exemplos |
| api_key | Um hash da chave de API do usuário. | |
| language | A linguagem de programação em uso. | KOTLIN, GO, JAVA |
| ide | A IDE em uso. | jetbrains, vscode |
| version | A versão do Devin Desktop em uso | 1.28.0, 130.0 |
Para filtrar por data, use start_timestamp e end_timestamp, que devem estar no formato RFC 3339 (por exemplo, 2023-01-01T00:00:00Z; consulte o exemplo abaixo).
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 o percentual geral de código escrito ao longo do mês de janeiro de 2024. Exemplo de resposta (JSON formatado para facilitar a leitura):
{
"queryResults": [
{
"responseItems": [
{
"item": {
"num_acceptances": "125",
"num_lines_accepted": "863"
}
}
]
}
]
}
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 mostra o número de linhas de código aceitas a partir da lente de código “Generate Docstring” ao longo de todo o período, agrupadas por IDE.
Resposta de exemplo:
{
"queryResults": [
{
"responseItems": [
{
"item": {
"chat_loc_used": "74",
"ide": "jetbrains"
},
},
{
"item": {
"chat_loc_used":"41",
"ide":"vscode"
},
}
]
}
]
}
Dados do comando
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 retorna o número de linhas adicionadas e removidas em comandos “edit”, agrupado por linguagem de programação.
Resposta de exemplo:
{
"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"
}
}
]
}
]
}
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 retorna os dados de PCW (percentual de código escrito), além dos bytes filtrados para a linguagem Go.
Resposta de exemplo:
{
"queryResults": [
{
"responseItems": [
{
"item": {
"codeium_bytes": "6018",
"codeium_bytes_by_autocomplete": "4593",
"codeium_bytes_by_command": "1425",
"percent_code_written": "0.61",
"total_bytes": "9900"
}
}
]
}
]
}
A partir da versão 1.10.0, consultas inválidas retornam uma mensagem de erro. Esta seção apresenta algumas mensagens de erro comuns, o que elas significam e como depurar as consultas correspondentes.
| Mensagem de erro | Explicação |
|---|
| at least one field or aggregation is required | Nenhuma seleção ou agregação foi detectada — verifique se a requisição de consulta contém pelo menos uma. |
| invalid aggregation function for string type field ide: QUERY_AGGREGATION_SUM | Uma das seleções usou uma função de agregação inválida. Neste caso, tentamos usar SUM no campo “ide”, mas ele só oferece suporte a COUNT e UNSPECIFIED. |
| invalid query table: QUERY_DATA_SOURCE_UNSPECIFIED | Provavelmente há um erro de digitação no campo data_source; verifique a grafia. |
| all selection fields should have an aggregation function, or none of them should | Se houver vários campos de seleção, todos deverão conter um aggregation_function, ou nenhum deles deverá conter. Por exemplo, esta seleção é inválida porque num_acceptances está sendo somado, mas num_lines_accepted não está:"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 é sempre considerado agregado. Se nenhum aggregation_function for escolhido explicitamente, ele será considerado unspecified. Se você quiser informações sobre esses dois campos, use duas consultas separadas. |
| invalid aggregation function for string type field ide: QUERY_AGGREGATION_SUM | Nem todo campo oferece suporte a todas as funções de agregação; consulte a seção de campos disponíveis para ver quais combinações são válidas. Neste caso, a consulta usou a função de agregação QUERY_AGGREGATION_SUM com o campo “ide”, o que é inválido. |
| tried to aggregate on a distinct field: distinct_developer_days. Consider aggregating on the non-distinct fields instead: [api_key date] | Campos com o padrão “distinct_*” não podem estar na seção aggregations; a mensagem de erro sugere campos alternativos para agregar no lugar. Então, em vez de:"aggregations": [
{
"field": "distinct_developer_days",
"name": "distinct_developer_days"
}
]
Tente:"aggregations": [
{
"field": "api_key",
"name": "api_key"
},
{
"field": "date",
"name": "date"
}
]
|
| duplicate field alias for selection/aggregation: num_acceptances | Todas as seleções e agregações devem ter nomes diferentes. Lembre-se de que, se o nome não for especificado, por padrão ele será definido como <AGGREGATION_FUNCTION>_<FIELD_NAME>. |
| invalid group name: GroupName | O grupo com o nome especificado não foi encontrado; verifique a grafia. |