curl --request GET \
--url https://server.codeium.com/api/v2alpha/analytics/output \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/analytics/output"
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/output', 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/output",
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/output"
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/output")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/analytics/output")
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",
"source": "CASCADE_CLIENT",
"loc_inserted": 18420,
"loc_deleted": 3105
},
{
"timestamp": "2026-06-15T00:00:00.000Z",
"source": "CHISEL",
"loc_inserted": 92310,
"loc_deleted": 11874
}
],
"pagination": {
"next_page_cursor": null
},
"metadata": {
"data_freshness": "2026-06-16T03:00:00.000Z",
"query_time_ms": 1311,
"team_id": "team_abc123"
}
}Agent-Output abrufen (Codezeilen)
Fragen Sie die vom Agent eingefügten und gelöschten sowie die von Ihrem Team akzeptierten Codezeilen in Devin Desktop und der Devin CLI ab – mit Filterung, Gruppierung und Paginierung.
curl --request GET \
--url https://server.codeium.com/api/v2alpha/analytics/output \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/analytics/output"
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/output', 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/output",
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/output"
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/output")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/analytics/output")
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",
"source": "CASCADE_CLIENT",
"loc_inserted": 18420,
"loc_deleted": 3105
},
{
"timestamp": "2026-06-15T00:00:00.000Z",
"source": "CHISEL",
"loc_inserted": 92310,
"loc_deleted": 11874
}
],
"pagination": {
"next_page_cursor": null
},
"metadata": {
"data_freshness": "2026-06-16T03:00:00.000Z",
"query_time_ms": 1311,
"team_id": "team_abc123"
}
}Authentifizierung
Dieser Endpunkt verwendet Bearer-Token-Authentifizierung. Geben Sie Ihr Token imAuthorization-Header an:
Authorization: Bearer <your_token>
Metriken
Der Query-Parametermetric ist erforderlich und erwartet eine kommagetrennte Liste der zurückzugebenden Metriken.
Jede angeforderte Metrik erscheint in jeder Zeile als Ganzzahlfeld:
| Metrik | Beschreibung |
|---|---|
loc_inserted | Vom Agenten eingefügte Zeilen, die der Nutzer akzeptiert hat |
loc_deleted | Vom Agenten gelöschte Zeilen, die der Nutzer akzeptiert hat |
?metric=loc_inserted,loc_deleted beide Metriken; ?metric=loc_inserted liefert nur
loc_inserted. Anfragen ohne metric oder mit einer unbekannten Metrik schlagen mit 400 fehl.
Zeilen werden gezählt, wenn ein Nutzer eine Bearbeitung des Agenten in Devin Desktop oder in der
Devin CLI akzeptiert – unabhängig vom verwendeten Modell. Der Parameter product ist ebenfalls erforderlich und akzeptiert derzeit nur
agent.
Gruppierung und Granularität
Verwenden Siegranularity und group_by, um die Struktur der zurückgegebenen Daten zu steuern:
- Ohne 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_idund eineuser_emailgroup_by=session— jede Zeile enthält einesession_id(die Devin Desktop-Unterhaltung oder CLI-Sitzung, in der die Zeilen akzeptiert wurden)group_by=model_uid— jede Zeile enthält einemodel_uidgroup_by=ide— jede Zeile enthält eineidegroup_by=ide,ide_version— jede Zeile enthältideundide_version(für die Gruppierung nachide_versionmuss auchideangegeben werden)group_by=os— jede Zeile enthält einos, zum Beispieldarwin(macOS),windowsoderlinuxgroup_by=source— jede Zeile enthält einesource:CASCADE_CLIENTfür in Devin Desktop akzeptierte Zeilen,CHISELfür in der Devin CLI akzeptierte Zeilen (einschließlich der CLI, wenn sie als Agent in anderen Editoren läuft)
group_by=user,source,model_uid. Es gelten dieselben Filter models,
group_id und user_id wie bei Get Consumption.
Paginierung
Ergebnisse werden mit einer Standard-Seitengröße von 1.000 Zeilen (max. 10.000) paginiert. Wenn weitere Ergebnisse verfügbar sind, enthält die Antwort impagination-Objekt einen next_page_cursor. Übergeben Sie diesen als Query-Parameter page_cursor
zusammen mit derselben metric-Liste wie in der ursprünglichen Anfrage, um die nächste Seite abzurufen. Cursor sind an
den Endpunkt und die Metriken gebunden, für die sie ausgestellt wurden. Ein Cursor von /consumption oder ein Cursor, der für eine andere
metric-Liste ausgestellt wurde, wird mit 400 abgelehnt.
Seiten-Cursor laufen nach 24 Stunden ab. Anfragen für Folgeseiten werden nicht als neue Abfragen auf Ihr Ratenlimit angerechnet.
Ratenlimits
Für diesen Endpunkt gilt ein Ratenlimit von 10 Anfragen pro Stunde pro Team. Wenn Sie dieses Limit überschreiten, gibt der Server429 Too Many Requests mit einem Retry-After-Header zurück.
Das Paginieren einer vorherigen Abfrage (über einen next_page_cursor) wird nicht auf dieses Limit angerechnet –
es zählt nur die erste Abfrage pro Bericht. Das niedrige Limit ist darauf zurückzuführen, dass dieser Endpunkt für
regelmäßige Berichte gedacht ist und nicht für die Echtzeitüberwachung der Nutzung.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
Kommagetrennte Liste der zurückzugebenden Ausgabemetriken; jede Metrik erscheint als Feld in jeder Zeile. Unterstützte Metriken:
loc_inserted— vom Agenten eingefügte Zeilen, die der Nutzer akzeptiert hatloc_deleted— vom Agenten gelöschte Zeilen, deren Löschung der Nutzer akzeptiert hat
Beginn des Datumsbereichs (einschließlich) im Format YYYY-MM-DD.
Ende des Datumsbereichs (einschließlich) im Format YYYY-MM-DD. Der Datumsbereich darf höchstens 90 Tage umfassen.
Produkt, dessen Ausgabedaten abgefragt werden sollen.
agent Zeitliche Granularität für die Gruppierung der Ergebnisse. Bei Angabe enthält jede Zeile ein timestamp-Feld.
Ohne Angabe werden die Ergebnisse über den gesamten Datumsbereich aggregiert.
daily, monthly Kommagetrennte Liste der Dimensionen, nach denen die Ergebnisse gruppiert werden sollen. Unterstützte Dimensionen:
user— enthältuser_idunduser_emailin jeder Zeilesession— enthältsession_idin jeder Zeilemodel_uid— enthältmodel_uidin jeder Zeileide— enthältidein jeder Zeileide_version— enthältide_versionin jeder Zeile; setzt voraus, dass auchideangegeben wirdos— enthältosin jeder Zeilesource— enthältsourcein jeder Zeile (CASCADE_CLIENTfür Devin Desktop,CHISELfür die Devin CLI)
Kommagetrennte Liste der Modell-UIDs, auf die die Ergebnisse beschränkt werden sollen.
Ergebnisse auf Nutzer einer bestimmten Gruppe beschränken. Der Service-Schlüssel muss Zugriff auf diese Gruppe haben. Wird bei Verwendung von API-Schlüsseln für Devin-Service-Benutzer nicht unterstützt.
Ergebnisse auf einen bestimmten Nutzer (Authentifizierungs-UID) beschränken.
Maximale Anzahl der pro Seite zurückzugebenden Zeilen.
1 <= x <= 10000Opaker Cursor aus dem Feld pagination.next_page_cursor einer vorherigen Antwort zum Abrufen der nächsten Seite. Übergeben Sie dieselbe metric-Liste wie in der Anfrage, für die der Cursor ausgegeben wurde; Cursor von anderen Endpunkten oder für eine andere metric-Liste werden abgelehnt.

