curl --request GET \
--url https://server.codeium.com/api/v2alpha/analytics/consumption \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/analytics/consumption"
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/consumption', 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/consumption",
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/consumption"
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/consumption")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/analytics/consumption")
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_bodyObtener consumo
Consulta analíticas de consumo de créditos o ACU con filtrado, agrupación y paginación flexibles.
curl --request GET \
--url https://server.codeium.com/api/v2alpha/analytics/consumption \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/analytics/consumption"
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/consumption', 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/consumption",
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/consumption"
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/consumption")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/analytics/consumption")
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_bodyAutenticación
Este endpoint utiliza autenticación con token Bearer. Incluye tu token en el encabezadoAuthorization:
Authorization: Bearer <your_token>
Estrategia de facturación
La estructura de la respuesta depende de la estrategia de facturación de tu equipo:| Estrategia | Campos completados | Descripción |
|---|---|---|
CREDITS | prompt_credits, flex_credits | Equipos Standard de Enterprise SaaS |
ACU | billed_acus | Equipos facturados por unidades de cómputo del agente |
message_count y user_message_count (dentro de consumption) se devuelven independientemente de la
estrategia de facturación. user_message_count cuenta solo los mensajes que un usuario envió al agente desde cualquier cliente (Devin
Desktop, el plugin de JetBrains o la CLI); coincide con el valor de «mensajes enviados» en la UI de analíticas.
message_count cuenta cada evento de facturación, incluidas las solicitudes posteriores al modelo y a las herramientas dentro de cada turno. user_message_count es null en las filas sin
atribución de mensajes de usuario (uso anterior al 2026-04-11).
Agrupación y granularidad
Usagranularity y group_by para controlar la estructura 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 una marca de tiempo (timestamp) en formatoYYYY-MM-DDgranularity=monthly— cada fila incluye una marca de tiempo (timestamp) en formatoYYYY-MMgroup_by=user— cada fila incluye unuser_idyuser_emailgroup_by=user,model_uid— cada fila incluyeuser_id,user_emailymodel_uidgroup_by=ide— cada fila incluye unidegroup_by=ide,ide_version— cada fila incluyeideeide_version(agrupar poride_versionrequiere queidetambién se incluya)group_by=os— cada fila incluye unos, comodarwin(macOS),windowsolinux
metric=loc_inserted,loc_deleted), que devuelve
las líneas de código aceptadas con los mismos filtros y dimensiones de agrupación.Paginación
Los resultados se paginan con un tamaño de página predeterminado de 1.000 filas (máx. 10.000). Cuando hay más resultados, la respuesta incluye unnext_page_cursor en el objeto pagination. Pásalo como el parámetro de consulta page_cursor
para obtener la página siguiente.
Los cursores de página caducan al cabo de 24 horas. Una solicitud posterior para obtener otra página no cuenta como una nueva consulta para tu límite de tasa.
Límites de tasa
Este endpoint está sujeto a un límite de 10 solicitudes por hora por equipo. Si supera 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 bajo refleja que este endpoint está pensado para
informes periódicos, no para la supervisión del uso 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
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 cuyo consumo se consultará.
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 para agrupar los resultados. Dimensiones compatibles:
user— incluyeuser_idyuser_emailen cada filamodel_uid— incluyemodel_uiden cada filaide— incluyeideen cada filaide_version— incluyeide_versionen cada fila; requiere que también se incluyaideos— incluyeosen cada fila
Lista, separada por comas, de UID de modelos para filtrar los resultados.
Filtra los resultados para incluir solo usuarios de un grupo específico. La clave de servicio debe tener acceso a este grupo.
Filtra los resultados para 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 de pagination.next_page_cursor de una respuesta anterior para obtener la página siguiente.

