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"
}
}Verbrauch abrufen
Analytics zum Credit- oder ACU-Verbrauch mit flexibler Filterung, Gruppierung und Paginierung abfragen.
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"
}
}Authentifizierung
Dieser Endpunkt verwendet die Bearer-Token-Authentifizierung. Geben Sie Ihr Token imAuthorization-Header an:
Authorization: Bearer <your_token>
Abrechnungsstrategie
Die Antwortstruktur hängt von der Abrechnungsstrategie Ihres Teams ab:| Strategie | Befüllte Felder | Beschreibung |
|---|---|---|
CREDITS | prompt_credits, flex_credits | Standard-Teams in Enterprise SaaS |
ACU | billed_acus | Teams, die nach Agent Compute Units abgerechnet werden |
message_count und user_message_count (innerhalb von consumption) werden unabhängig von der
Abrechnungsstrategie zurückgegeben. user_message_count zählt nur Nachrichten, die ein Nutzer an den Agent gesendet hat – unabhängig davon, über welchen Client (Devin
Desktop, das JetBrains-Plugin oder die CLI); der Wert entspricht der Anzahl „gesendeter Nachrichten“ in der Analytics-UI.
message_count zählt jedes Abrechnungsereignis, einschließlich der Folgeanfragen an Modelle und Tools innerhalb jeder Eingabe. user_message_count ist null für Zeilen ohne
Zuordnung zu Nutzernachrichten (Nutzung vor dem 11.04.2026).
Gruppierung und Granularität
Verwenden Siegranularity und group_by, um die Struktur der zurückgegebenen Daten zu steuern:
- Keine Granularität oder Gruppierung — gibt eine einzelne aggregierte Zeile für den gesamten Datumsbereich zurück
granularity=daily— jede Zeile enthält einentimestampim FormatYYYY-MM-DDgranularity=monthly— jede Zeile enthält einentimestampim FormatYYYY-MMgroup_by=user— jede Zeile enthält eineuser_idunduser_emailgroup_by=user,model_uid— jede Zeile enthältuser_id,user_emailundmodel_uidgroup_by=ide— jede Zeile enthält einidegroup_by=ide,ide_version— jede Zeile enthältideundide_version(für die Gruppierung nachide_versionmuss auchideenthalten sein)group_by=os— jede Zeile enthält einos, wie z. B.darwin(macOS),windowsoderlinux
metric=loc_inserted,loc_deleted). Dieser Endpunkt gibt
akzeptierte Codezeilen mit denselben Filtern und Gruppierungsdimensionen zurück.Paginierung
Die Ergebnisse sind paginiert, mit einer Standardseitengröße von 1.000 Zeilen (max. 10.000). Wenn weitere Ergebnisse verfügbar sind, enthält die Antwort im Objektpagination einen next_page_cursor. Übergeben Sie ihn als page_cursor-Abfrageparameter,
um die nächste Seite abzurufen.
Page-Cursor laufen nach 24 Stunden ab. Eine nachfolgende Seitenanfrage zählt nicht als neue Abfrage für Ihr Rate-Limit.
Anfragelimits
Dieser Endpunkt ist auf 10 Anfragen pro Stunde pro Team begrenzt. Wenn dieses Limit überschritten wird, gibt der Server429 Too Many Requests mit einem Retry-After-Header zurück.
Die Paginierung einer früheren Abfrage (über einen next_page_cursor) wird nicht auf dieses Limit angerechnet —
nur die erste Abfrage für jeden Bericht. Das niedrige Limit spiegelt wider, dass dieser Endpunkt für
periodische Berichte gedacht ist, nicht für die Nutzungsüberwachung in Echtzeit.Autorisierungen
Ein Service-Schlüssel mit der Berechtigung Analytics Read, übergeben als Bearer-Token im Header Authorization.
Erstellen Sie einen Service-Schlüssel in Ihren Team Settings im Abschnitt „Service Keys“.
Abfrageparameter
Beginn des Datumsbereichs (einschließlich) im Format YYYY-MM-DD.
Ende des Datumsbereichs (einschließlich) im Format YYYY-MM-DD. Der Bereich darf 90 Tage nicht überschreiten.
Produkt, für das Verbrauchsdaten abgefragt werden sollen.
agent Zeitgranularität für die Gruppierung der Ergebnisse. Wenn angegeben, enthält jede Zeile ein Feld timestamp.
Wenn nicht angegeben, werden die Ergebnisse über den gesamten Datumsbereich aggregiert.
daily, monthly Kommagetrennte Liste der Dimensionen, nach denen die Ergebnisse gruppiert werden. Unterstützte Dimensionen:
user— enthältuser_idunduser_emailin jeder Zeilemodel_uid— enthältmodel_uidin jeder Zeileide— enthältidein jeder Zeileide_version— enthältide_versionin jeder Zeile; setzt voraus, dass auchideenthalten istos— enthältosin jeder Zeile
Kommagetrennte Liste von Modell-UIDs, auf die die Ergebnisse gefiltert werden sollen.
Filtert die Ergebnisse auf Nutzer in einer bestimmten Gruppe. Der Service-Schlüssel muss Zugriff auf diese Gruppe haben.
Filtert die Ergebnisse auf einen bestimmten Nutzer (Auth-UID).
Maximale Anzahl von Zeilen, die pro Seite zurückgegeben werden.
1 <= x <= 10000Opaker Cursor aus pagination.next_page_cursor einer vorherigen Antwort, um die nächste Seite abzurufen.

