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"
}
}Obtener llamadas a herramientas del agente de Devin
Cuenta las llamadas a herramientas del agente, como la búsqueda web o la ejecución de comandos, realizadas por tu equipo en Devin Desktop y Devin CLI, agrupadas por herramienta, usuario, modelo, IDE o sistema operativo.
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"
}
}Autenticación
Este endpoint usa autenticación mediante Token Bearer. Incluye tu token en el encabezadoAuthorization:
Authorization: Bearer <your_token>
cascade_tool_usage
de la v1, este endpoint acepta claves de API de usuario de servicio de Devin, por lo que los equipos de la plataforma de Cognition pueden
obtener informes sobre el uso de herramientas sin necesidad de una clave de servicio de Windsurf.
Métricas
El parámetro de consultametric es obligatorio y actualmente solo acepta calls, el número de llamadas a herramientas
que ha realizado el agente. Aparece como un campo entero calls en cada fila. Las solicitudes que omiten metric o
especifican otra métrica fallan con un error 400.
Las llamadas a herramientas se contabilizan cuando el agente invoca una herramienta en Devin Desktop
o en la Devin CLI (incluida la CLI cuando se ejecuta como agente dentro de otros editores), con cualquier modelo.
El parámetro product también es obligatorio y actualmente solo acepta agent.
Herramientas
Agrupa portool para desglosar las llamadas por categoría de herramienta. Así, cada fila incluye un campo tool con uno de
los siguientes valores:
| Herramienta | Descripción |
|---|---|
SEARCH_WEB | Búsqueda web, obtención de contenido web y uso del navegador |
RUN_COMMAND | Comandos de shell e interacción con procesos en ejecución |
VIEW_FILE | Lectura de archivos y cuadernos |
CODE_ACTION | Edición, escritura y aplicación de parches a archivos |
GREP_SEARCH | Búsqueda en el contenido de archivos y en el código |
FIND | Búsqueda de archivos por nombre |
LIST_DIRECTORY | Listado de directorios |
MCP_TOOL | Llamadas a herramientas de servidores MCP y listado de servidores MCP, herramientas o recursos |
SKILL | Listado, búsqueda e invocación de skills |
ASK_USER_QUESTION | Preguntas al usuario |
MEMORY | Lectura y escritura de memorias |
PROPOSE_CODE | Propuesta de cambios en el código |
PROXY_WEB_SERVER | Vista previa en el navegador de un servidor web local |
DEPLOY_WEB_APP | Despliegue de una web app |
MQUERY | Búsqueda en la base de código (Riptide) |
DEEPWIKI | Solicitudes a DeepWiki |
CODEMAP_GENERATION, CODEMAP_SUGGESTIONS | Solicitudes a Codemaps |
OTHER | Herramientas de Devin CLI que no encajan en las categorías anteriores |
LIST_DIRECTORY, MEMORY, PROPOSE_CODE,
PROXY_WEB_SERVER, DEPLOY_WEB_APP y MQUERY se registran para el agente de Devin Desktop, mientras que las nuevas
herramientas de Devin CLI que aún no tienen una categoría asignada se contabilizan en OTHER.
Agrupación y granularidad
Usagranularity y group_by para controlar la forma de los datos devueltos:
- Sin granularidad ni agrupación: devuelve una única fila agregada para todo el intervalo de fechas
granularity=daily: cada fila incluye untimestampen formatoYYYY-MM-DDgranularity=monthly: cada fila incluye untimestampen formatoYYYY-MMgroup_by=tool: cada fila incluye untool(consulta Herramientas más arriba)group_by=user: cada fila incluye unuser_id, además de unuser_emailsi hay uno registrado para ese usuariogroup_by=model_uid: cada fila incluye unmodel_uidgroup_by=ide: cada fila incluye unidegroup_by=ide,ide_version: cada fila incluyeideeide_version(para agrupar poride_versiontambién hay que incluiride)group_by=os: cada fila incluye unos, comodarwin(macOS),windowsolinux
group_by=user,tool muestra con qué frecuencia cada usuario ha invocado cada
herramienta. Las dimensiones session y source de Get Output
no se admiten aquí. Se aplican los mismos filtros models, group_id y user_id que en
Get Consumption, además de un filtro tool que
limita el recuento a una sola categoría de herramienta (por ejemplo, tool=SEARCH_WEB). Solo este endpoint acepta
tool; si se pasa a cualquier otro endpoint de la API de analítica v2, se devuelve un error 400.
Ejemplo
Contar las búsquedas web por usuario durante una 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 un usuario. Si prefieres ver todas las categorías por usuario, quita el filtro tool y agrega group_by=user,tool.
Paginación
Los resultados se paginan con un tamaño de página predeterminado de 1000 filas (máximo 10 000). Cuando hay más resultados disponibles, la respuesta incluye unnext_page_cursor en el objeto pagination. Pásalo como parámetro de consulta page_cursor
en una solicitud que repita los mismos parámetros de consulta originales. Los cursores están vinculados al endpoint que los emitió; un cursor de /consumption o /output
se rechaza con un 400.
Los cursores de paginación caducan a las 24 horas. Las solicitudes de páginas posteriores no cuentan como nuevas consultas para tu límite de solicitudes.
Límites de solicitudes
Este endpoint tiene un límite de solicitudes de 10 solicitudes por hora por equipo. Si superas este límite, el servidor devuelve429 Too Many Requests con un encabezado Retry-After.
Paginar una consulta anterior (siguiendo un next_page_cursor) no cuenta para este límite;
solo cuenta la consulta inicial de cada informe. El límite es bajo porque este endpoint está pensado para
informes periódicos, no para la monitorización del consumo en tiempo real.Autorizaciones
Una clave de servicio con el permiso Analytics Read, pasada como token Bearer en el encabezado Authorization.
Crea una clave de servicio en tu configuración del equipo, en la sección "Service Keys".
Parámetros de consulta
Métrica que se devolverá; aparece como un campo en cada fila. Métricas admitidas:
calls— número de llamadas a herramientas realizadas por el agente
Inicio del rango de fechas (incluido) en formato YYYY-MM-DD.
Fin del rango de fechas (incluido) en formato YYYY-MM-DD. El rango no debe superar los 90 días.
Producto cuyas llamadas a herramientas se consultarán.
agent Granularidad temporal para agrupar los resultados. Cuando se especifica, cada fila incluye un campo timestamp.
Si se omite, los resultados se agregan para todo el rango de fechas.
daily, monthly Lista de dimensiones separadas por comas por las que agrupar los resultados. Dimensiones admitidas:
tool— incluyetoolen cada fila (la categoría de herramienta, comoSEARCH_WEBoRUN_COMMAND)user— incluyeuser_iden cada fila, además deuser_emailsi el usuario tiene un correo electrónico registradomodel_uid— incluyemodel_uiden cada filaide— incluyeideen cada filaide_version— incluyeide_versionen cada fila; requiere que también se incluyaideos— incluyeosen cada fila
Lista de UID de modelos separados por comas por los que filtrar los resultados.
Restringe el recuento a una categoría de herramienta, como SEARCH_WEB o RUN_COMMAND (coincidencia exacta).
Solo se admite en este endpoint.
Filtra los resultados para incluir solo a los usuarios de un grupo específico. La clave de servicio debe tener acceso a este grupo. No se admite con claves de API de usuario de servicio de Devin.
Filtra los resultados por un usuario específico (UID de autenticación).
Número máximo de filas que se devolverán por página.
1 <= x <= 10000Cursor opaco obtenido de pagination.next_page_cursor en una respuesta anterior para obtener la página siguiente. Envía el mismo valor de metric que en la solicitud que generó el cursor; se rechazan los cursores generados por otros endpoints.

