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"
}
}Recupera il consumo
Interroga i dati di analisi del consumo di crediti o ACU con filtri, raggruppamenti e paginazione flessibili.
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"
}
}Autenticazione
Questo endpoint utilizza l’autenticazione tramite token Bearer. Includi il tuo token nell’headerAuthorization:
Authorization: Bearer <your_token>
Strategia di fatturazione
La struttura della risposta dipende dalla strategia di fatturazione del tuo team:| Strategia | Campi popolati | Descrizione |
|---|---|---|
CREDITS | prompt_credits, flex_credits | Team Enterprise SaaS standard |
ACU | billed_acus | Team fatturati in Agent Compute Units |
message_count e user_message_count (all’interno di consumption) vengono restituiti indipendentemente dalla
strategia di fatturazione. user_message_count conta solo i messaggi inviati da un utente all’agente, da qualsiasi client (Devin
Desktop, il plugin JetBrains o la CLI); corrisponde al valore “messaggi inviati” nella UI di analytics.
message_count conta ogni evento di fatturazione, incluse le successive richieste al modello e agli strumenti all’interno di ciascun turn. user_message_count è null per le righe prive di
attribuzione ai messaggi utente (utilizzo precedente all’11/04/2026).
Raggruppamento e granularità
Usagranularity e group_by per controllare la forma dei dati restituiti:
- Nessuna granularità o raggruppamento — restituisce una singola riga aggregata per l’intero intervallo di date
granularity=daily— ogni riga include untimestampnel formatoYYYY-MM-DDgranularity=monthly— ogni riga include untimestampnel formatoYYYY-MMgroup_by=user— ogni riga include unuser_ideuser_emailgroup_by=user,model_uid— ogni riga includeuser_id,user_emailemodel_uidgroup_by=ide— ogni riga include unidegroup_by=ide,ide_version— ogni riga includeideeide_version(il raggruppamento peride_versionrichiede che sia incluso ancheide)
group_by=os— ogni riga include unos, comedarwin(macOS),windowsolinux
metric=loc_inserted,loc_deleted), che restituisce
le righe di codice accettate con gli stessi filtri e le stesse dimensioni di raggruppamento.Paginazione
I risultati sono paginati con una dimensione predefinita della pagina di 1.000 righe (max 10.000). Quando sono disponibili altri risultati, la risposta include unnext_page_cursor nell’oggetto pagination. Passalo come parametro di query page_cursor
per recuperare la pagina successiva.
I cursori di pagina scadono dopo 24 ore. Una richiesta per la pagina successiva non viene conteggiata come una nuova query ai fini del rate limit.
Limiti di frequenza
Questo endpoint è soggetto a un limite di 10 richieste all’ora per team. Se questo limite viene superato, il server restituisce429 Too Many Requests con un header Retry-After.
La paginazione di una query precedente (seguendo un next_page_cursor) non viene conteggiata ai fini di questo limite —
viene conteggiata solo la query iniziale per ciascun report. Questo limite ridotto riflette il fatto che l’endpoint è pensato per
report periodici, non per il monitoraggio dell’utilizzo in tempo reale.Autorizzazioni
Una chiave di servizio con autorizzazione Analisi Read, passata come token Bearer nell'header Authorization.
Crea una chiave di servizio nelle impostazioni del team, nella sezione "Service Keys".
Parametri della query
Inizio dell'intervallo di date (incluso) nel formato YYYY-MM-DD.
Fine dell'intervallo di date (incluso) nel formato YYYY-MM-DD. L'intervallo non deve superare i 90 giorni.
Prodotto di cui recuperare i dati di consumo.
agent Granularità temporale per il raggruppamento dei risultati. Se specificata, ogni riga include un campo timestamp.
Se omessa, i risultati vengono aggregati sull'intero intervallo di date.
daily, monthly Elenco di dimensioni separate da virgole in base a cui raggruppare i risultati. Dimensioni supportate:
user— includeuser_ideuser_emailin ogni rigamodel_uid— includemodel_uidin ogni rigaide— includeidein ogni rigaide_version— includeide_versionin ogni riga; richiede che sia incluso ancheideos— includeosin ogni riga
Elenco separato da virgole degli UID dei modelli a cui limitare i risultati.
Filtra i risultati sugli utenti di un gruppo specifico. La chiave di servizio deve avere accesso a questo gruppo.
Filtra i risultati su un utente specifico (UID auth).
Numero massimo di righe da restituire per pagina.
1 <= x <= 10000Cursore opaco da pagination.next_page_cursor di una risposta precedente per recuperare la pagina successiva.

