curl --request GET \
--url https://server.codeium.com/api/v2alpha/analytics/tools \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/analytics/tools"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://server.codeium.com/api/v2alpha/analytics/tools', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v2alpha/analytics/tools",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v2alpha/analytics/tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.codeium.com/api/v2alpha/analytics/tools")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/analytics/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"user_id": "user_abc123",
"user_email": "alice@example.com",
"tool": "RUN_COMMAND",
"calls": 1842
},
{
"user_id": "user_abc123",
"user_email": "alice@example.com",
"tool": "SEARCH_WEB",
"calls": 57
}
],
"pagination": {
"next_page_cursor": null
},
"metadata": {
"data_freshness": "2026-10-20T02:00:00.000Z",
"query_time_ms": 1104,
"team_id": "team_abc123"
}
}Obter chamadas de ferramentas do agente Devin
Conte as chamadas de ferramentas do agente, como busca na web ou execução de comandos, feitas pela sua equipe no Devin Desktop e no Devin CLI, agrupadas por ferramenta, usuário, modelo, IDE ou sistema operacional.
curl --request GET \
--url https://server.codeium.com/api/v2alpha/analytics/tools \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/analytics/tools"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://server.codeium.com/api/v2alpha/analytics/tools', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v2alpha/analytics/tools",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v2alpha/analytics/tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.codeium.com/api/v2alpha/analytics/tools")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/analytics/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"user_id": "user_abc123",
"user_email": "alice@example.com",
"tool": "RUN_COMMAND",
"calls": 1842
},
{
"user_id": "user_abc123",
"user_email": "alice@example.com",
"tool": "SEARCH_WEB",
"calls": 57
}
],
"pagination": {
"next_page_cursor": null
},
"metadata": {
"data_freshness": "2026-10-20T02:00:00.000Z",
"query_time_ms": 1104,
"team_id": "team_abc123"
}
}Autenticação
Este endpoint usa autenticação via Token Bearer. Inclua seu token no cabeçalhoAuthorization:
Authorization: Bearer <your_token>
cascade_tool_usage
da v1, este endpoint aceita chaves de API de usuário de serviço do Devin. Assim, equipes na plataforma da Cognition
podem gerar relatórios de uso de ferramentas sem precisar de uma chave de serviço do Windsurf.
Métricas
O parâmetro de consultametric é obrigatório e, no momento, aceita apenas calls, o número de chamadas de ferramenta
feitas pelo agente. Ele aparece como um campo inteiro calls em todas as linhas. Requisições sem metric, ou
que especifiquem outra métrica, falham com 400.
As chamadas de ferramentas são contabilizadas quando o agente invoca uma ferramenta no Devin Desktop
ou na Devin CLI (incluindo a CLI executada como agente dentro de outros editores), com qualquer modelo.
O parâmetro product também é obrigatório e, no momento, aceita apenas agent.
Ferramentas
Agrupe portool para dividir as chamadas por categoria de ferramenta. Assim, cada linha inclui um campo tool com um dos
seguintes valores:
| Ferramenta | Descrição |
|---|---|
SEARCH_WEB | Busca na web, requisições à web (fetch) e uso do navegador |
RUN_COMMAND | Comandos de shell e interação com processos em execução |
VIEW_FILE | Leitura de arquivos e notebooks |
CODE_ACTION | Edição, escrita e aplicação de patches em arquivos |
GREP_SEARCH | Pesquisa no conteúdo de arquivos e no código |
FIND | Localização de arquivos pelo nome |
LIST_DIRECTORY | Listagem de diretórios |
MCP_TOOL | Chamada de ferramentas de servidores MCP e listagem de servidores MCP, ferramentas ou recursos |
SKILL | Listagem, pesquisa e invocação de habilidades |
ASK_USER_QUESTION | Envio de perguntas ao usuário |
MEMORY | Leitura e escrita de memórias |
PROPOSE_CODE | Proposta de alterações no código |
PROXY_WEB_SERVER | Prévia no navegador de um servidor web local |
DEPLOY_WEB_APP | Implantação de um web app |
MQUERY | Pesquisa na base de código (Riptide) |
DEEPWIKI | Requisições ao DeepWiki |
CODEMAP_GENERATION, CODEMAP_SUGGESTIONS | Requisições ao Codemaps |
OTHER | Ferramentas do Devin CLI que não se enquadram nas categorias acima |
LIST_DIRECTORY, MEMORY, PROPOSE_CODE,
PROXY_WEB_SERVER, DEPLOY_WEB_APP e MQUERY são registradas para o agente do Devin Desktop, enquanto as novas
ferramentas do Devin CLI que ainda não foram atribuídas a uma categoria são contabilizadas em OTHER.
Agrupamento e granularidade
Usegranularity e group_by para controlar o formato dos dados retornados:
- Sem granularidade nem agrupamento — retorna uma única linha agregada para todo o intervalo de datas
granularity=daily— cada linha inclui umtimestampno formatoYYYY-MM-DDgranularity=monthly— cada linha inclui umtimestampno formatoYYYY-MMgroup_by=tool— cada linha inclui umtool(consulte Ferramentas acima)group_by=user— cada linha inclui umuser_id, além de umuser_emailquando houver um registrado para esse usuáriogroup_by=model_uid— cada linha inclui ummodel_uidgroup_by=ide— cada linha inclui umidegroup_by=ide,ide_version— cada linha incluiideeide_version(agrupar poride_versionexige queidetambém seja incluído)group_by=os— cada linha inclui umos, comodarwin(macOS),windowsoulinux
group_by=user,tool mostra com que frequência cada usuário invocou cada
ferramenta. As dimensões session e source de Get Output
não são compatíveis aqui. Valem os mesmos filtros models, group_id e user_id de
Get Consumption, além de um filtro tool que
restringe a contagem a uma única categoria de ferramenta (por exemplo, tool=SEARCH_WEB). tool só é aceito por
este endpoint; enviá-lo a outro endpoint da Analytics API v2 resulta em erro 400.
Exemplo
Contar as buscas na web por usuário em uma semana:curl "https://server.codeium.com/api/v2alpha/analytics/tools?metric=calls&product=agent&start_date=2026-10-13&end_date=2026-10-19&group_by=user&tool=SEARCH_WEB" \
-H "Authorization: Bearer $DEVIN_API_KEY"
SEARCH_WEB de um usuário. Para ver todas as categorias de cada usuário, remova o filtro tool e adicione group_by=user,tool.
Paginação
Os resultados são paginados com um tamanho de página padrão de 1.000 linhas (máximo de 10.000). Quando houver mais resultados disponíveis, a resposta inclui umnext_page_cursor no objeto pagination. Passe-o como o parâmetro de consulta page_cursor
em uma requisição que repita os demais parâmetros de consulta originais. Os cursores ficam vinculados ao endpoint que os emitiu; um cursor de /consumption ou /output
é rejeitado com 400.
Os cursores de página expiram após 24 horas. Requisições das páginas seguintes não contam como novas consultas para o seu limite de taxa de requisições.
Limites de requisições
Este endpoint tem um limite de taxa de requisições de 10 requisições por hora por equipe. Se você exceder esse limite, o servidor retornará429 Too Many Requests com um cabeçalho Retry-After.
Paginar uma consulta anterior (usando um next_page_cursor) não conta para esse limite —
apenas a consulta inicial de cada relatório é contabilizada. O limite baixo se deve ao fato de que este endpoint é destinado a
relatórios periódicos, e não ao monitoramento de uso em tempo real.Autorizações
Uma service key com permissão Analytics Read, enviada como token Bearer no header Authorization.
Crie uma service key em Configurações da equipe, na seção "Service Keys".
Parâmetros de consulta
Métrica a ser retornada; aparece como um campo em cada linha. Métricas disponíveis:
calls— número de chamadas de ferramentas feitas pelo agente
Início do intervalo de datas (inclusivo) no formato YYYY-MM-DD.
Fim do intervalo de datas (inclusivo) no formato YYYY-MM-DD. O intervalo não deve exceder 90 dias.
Produto cujas chamadas de ferramentas serão consultadas.
agent Granularidade temporal para agrupar resultados. Quando especificada, cada linha inclui um campo timestamp.
Se omitida, os resultados são agregados para todo o intervalo de datas.
daily, monthly Lista de dimensões separadas por vírgulas para agrupar os resultados. Dimensões compatíveis:
tool— incluitoolem cada linha (a categoria de ferramenta, comoSEARCH_WEBouRUN_COMMAND)user— incluiuser_idem cada linha, além deuser_emailquando houver um e-mail registrado para o usuáriomodel_uid— incluimodel_uidem cada linhaide— incluiideem cada linhaide_version— incluiide_versionem cada linha; exige queidetambém seja incluídoos— incluiosem cada linha
Lista de UIDs de modelos, separados por vírgulas, para filtrar os resultados.
Restringe a contagem a uma única categoria de ferramenta, como SEARCH_WEB ou RUN_COMMAND (correspondência exata).
Aceito apenas por este endpoint.
Filtra os resultados para incluir apenas usuários de um grupo específico. A chave de serviço deve ter acesso a esse grupo. Não pode ser usado com chaves de API do usuário de serviço do Devin.
Filtra os resultados para incluir apenas um usuário específico (UID de autenticação).
Número máximo de linhas a retornar por página.
1 <= x <= 10000Cursor opaco obtido de pagination.next_page_cursor em uma resposta anterior, usado para buscar a próxima página. Envie o mesmo metric usado na requisição que gerou o cursor; cursores gerados por outros endpoints são rejeitados.

