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_body{
"data": [
{
"timestamp": "2026-06-15T00:00:00.000Z",
"user_id": "user_abc123",
"user_email": "alice@example.com",
"consumption": {
"prompt_credits": 1250,
"flex_credits": 340,
"message_count": 87,
"user_message_count": 31
}
},
{
"timestamp": "2026-06-15T00:00:00.000Z",
"user_id": "user_def456",
"user_email": "bob@example.com",
"consumption": {
"prompt_credits": 980,
"flex_credits": 150,
"message_count": 52,
"user_message_count": 19
}
}
],
"pagination": {
"next_page_cursor": null
},
"metadata": {
"billing_strategy": "CREDITS",
"data_freshness": "2026-06-16T03:00:00.000Z",
"query_time_ms": 1423,
"team_id": "team_abc123"
}
}Consultar consumo
Consulte análises de consumo de créditos ou ACU com filtragem, agrupamento e paginação flexíveis.
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_body{
"data": [
{
"timestamp": "2026-06-15T00:00:00.000Z",
"user_id": "user_abc123",
"user_email": "alice@example.com",
"consumption": {
"prompt_credits": 1250,
"flex_credits": 340,
"message_count": 87,
"user_message_count": 31
}
},
{
"timestamp": "2026-06-15T00:00:00.000Z",
"user_id": "user_def456",
"user_email": "bob@example.com",
"consumption": {
"prompt_credits": 980,
"flex_credits": 150,
"message_count": 52,
"user_message_count": 19
}
}
],
"pagination": {
"next_page_cursor": null
},
"metadata": {
"billing_strategy": "CREDITS",
"data_freshness": "2026-06-16T03:00:00.000Z",
"query_time_ms": 1423,
"team_id": "team_abc123"
}
}Autenticação
Este endpoint usa autenticação com token Bearer. Inclua seu token no cabeçalhoAuthorization:
Authorization: Bearer <your_token>
Estratégia de faturamento
A estrutura da resposta depende da estratégia de faturamento da sua equipe:| Estratégia | Campos preenchidos | Descrição |
|---|---|---|
CREDITS | prompt_credits, flex_credits | equipes Standard Enterprise SaaS |
ACU | billed_acus | equipes faturadas por ACUs |
message_count e user_message_count (dentro de consumption) são retornados independentemente da
estratégia de faturamento. user_message_count conta apenas as mensagens que um usuário enviou ao agente, de qualquer cliente (Devin
Desktop, o plugin do JetBrains ou a CLI); corresponde ao mesmo número exibido como “mensagens enviadas” na UI de análises.
message_count conta todos os eventos de faturamento, incluindo as requisições subsequentes de modelo e de ferramenta em cada turno. user_message_count é null em linhas sem
atribuição de mensagem de usuário (uso anterior a 2026-04-11).
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=user— cada linha incluiuser_ideuser_emailgroup_by=user,model_uid— cada linha incluiuser_id,user_emailemodel_uidgroup_by=ide— cada linha incluiidegroup_by=ide,ide_version— cada linha incluiideeide_version(o agrupamento poride_versionexige queidetambém seja incluído)group_by=os— cada linha inclui umos, comodarwin(macOS),windowsoulinux
metric=loc_inserted,loc_deleted), que retorna
as linhas de código aceitas com os mesmos filtros e dimensões de agrupamento.Paginação
Os resultados são paginados com um tamanho de página padrão de 1.000 linhas (máx. 10.000). Quando houver mais resultados disponíveis, a resposta incluirá umnext_page_cursor no objeto pagination. Passe-o como parâmetro de query page_cursor
para obter a próxima página.
Os cursores de página expiram após 24 horas. Uma requisição subsequente de página não conta como uma nova consulta para o seu limite de taxa.
Limites de taxa
Este endpoint tem um limite 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 (seguindo um next_page_cursor) não entra nesse limite —
apenas a consulta inicial de cada relatório entra. Esse limite baixo reflete o fato de que este endpoint é para
relatórios periódicos, não para 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
Início do intervalo de datas (inclusive), no formato YYYY-MM-DD.
Fim do intervalo de datas (inclusive), no formato YYYY-MM-DD. O intervalo não deve exceder 90 dias.
Produto para consultar o consumo.
agent Granularidade de tempo para agrupar os resultados. Quando especificada, cada linha inclui um campo timestamp.
Se omitida, os resultados são agregados em todo o intervalo de datas.
daily, monthly Lista de dimensões, separadas por vírgulas, usada para agrupar os resultados. Dimensões compatíveis:
user— incluiuser_ideuser_emailem cada linhamodel_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 modelo, separados por vírgulas, para filtrar os resultados.
Filtre os resultados para usuários de um grupo específico. A service key deve ter acesso a esse grupo.
Filtre os resultados para um usuário específico (UID de autenticação).
Número máximo de linhas a retornar por página.
1 <= x <= 10000Cursor opaco de pagination.next_page_cursor de uma resposta anterior para buscar a próxima página.

