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_bodyOttenere l'output dell'agente (righe di codice)
Recupera le righe di codice inserite ed eliminate dall’agente e accettate dal tuo team in Devin Desktop e nella Devin CLI, con filtri, raggruppamento e paginazione.
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_bodyAuthentication
Questo endpoint utilizza l’authentication con token Bearer. Includi il tuo token nell’headerAuthorization:
Authorization: Bearer <your_token>
Metriche
Il parametro di querymetric è obbligatorio e accetta un elenco, separato da virgole, delle metriche da restituire.
Ogni metrica richiesta compare come campo di tipo intero in ogni riga:
| Metrica | Descrizione |
|---|---|
loc_inserted | Righe inserite dall’agente e accettate dall’utente |
loc_deleted | Righe eliminate dall’agente e accettate dall’utente |
?metric=loc_inserted,loc_deleted restituisce entrambe le metriche, mentre ?metric=loc_inserted restituisce solo
loc_inserted. Le richieste prive di metric o che specificano una metrica sconosciuta non vanno a buon fine e restituiscono 400.
Le righe vengono conteggiate quando un utente accetta una modifica dell’agente in Devin Desktop o nella
Devin CLI, indipendentemente dal modello utilizzato. Anche il parametro product è obbligatorio e al momento accetta solo
agent.
Raggruppamento e granularità
Usagranularity e group_by per controllare la struttura dei dati restituiti:
- Nessuna granularità o raggruppamento — restituisce un’unica riga aggregata per l’intero intervallo di date
granularity=daily— ogni riga include untimestampin formatoYYYY-MM-DDgranularity=monthly— ogni riga include untimestampin formatoYYYY-MMgroup_by=user— ogni riga includeuser_ideuser_emailgroup_by=session— ogni riga include unsession_id(la conversazione di Devin Desktop o la sessione della CLI in cui sono state accettate le righe)group_by=model_uid— ogni riga include unmodel_uidgroup_by=ide— ogni riga include unidegroup_by=ide,ide_version— ogni riga includeideeide_version(per raggruppare peride_versionè necessario includere ancheide)group_by=os— ogni riga include unos, ad esempiodarwin(macOS),windowsolinuxgroup_by=source— ogni riga include un camposource:CASCADE_CLIENTper le righe accettate in Devin Desktop,CHISELper le righe accettate nella Devin CLI (inclusa la CLI eseguita come agente all’interno di altri editor)
group_by=user,source,model_uid. Si applicano gli stessi filtri models,
group_id e user_id di Get Consumption.
Paginazione
I risultati sono paginati con una dimensione di pagina predefinita di 1.000 righe (massimo 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, insieme allo stesso elenco metric della richiesta originale. I cursori sono legati
all’endpoint e alle metriche che li hanno generati: un cursore proveniente da /consumption, o generato per un elenco metric
diverso, viene rifiutato con 400.
I cursori di pagina scadono dopo 24 ore. Le richieste delle pagine successive non vengono conteggiate come nuove query ai fini del limite di frequenza.
Limiti di frequenza
Questo endpoint ha un limite di frequenza di 10 richieste all’ora per team. Se superi questo limite, il server restituisce429 Too Many Requests con un header Retry-After.
La paginazione di una query precedente (tramite un next_page_cursor) non viene conteggiata ai fini di questo limite:
conta solo la query iniziale di ciascun report. Il limite così basso si spiega con il fatto che questo endpoint è pensato per
la reportistica periodica, 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
Elenco delle metriche di output da restituire, separate da virgole; ciascuna compare come campo in ogni riga. Metriche supportate:
loc_inserted— righe inserite dall'agente e accettate dall'utenteloc_deleted— righe eliminate dall'agente e accettate dall'utente
Data iniziale dell'intervallo (inclusa) nel formato YYYY-MM-DD.
Data finale dell'intervallo (inclusa) nel formato YYYY-MM-DD. L'intervallo non deve superare 90 giorni.
Prodotto per cui recuperare l'output.
agent Granularità temporale per raggruppare i risultati. Se specificata, ogni riga include un campo timestamp.
Se omessa, i risultati vengono aggregati sull'intero intervallo di date.
daily, monthly Elenco delle dimensioni in base alle quali raggruppare i risultati, separate da virgole. Dimensioni supportate:
user— includeuser_ideuser_emailin ogni rigasession— includesession_idin ogni rigamodel_uid— includemodel_uidin ogni rigaide— includeidein ogni rigaide_version— includeide_versionin ogni riga; richiede che sia incluso ancheideos— includeosin ogni rigasource— includesourcein ogni riga (CASCADE_CLIENTper Devin Desktop,CHISELper Devin CLI)
Elenco degli UID dei modelli a cui limitare i risultati, separati da virgole.
Limita i risultati agli utenti di un gruppo specifico. La chiave di servizio deve avere accesso a questo gruppo. Non supportato con le API key dell'utente di servizio Devin.
Limita i risultati a un utente specifico (UID auth).
Numero massimo di righe da restituire per pagina.
1 <= x <= 10000Cursore opaco ottenuto da pagination.next_page_cursor di una risposta precedente per recuperare la pagina successiva. Passare lo stesso elenco metric usato nella richiesta che ha generato il cursore; i cursori generati da altri endpoint o per un elenco metric diverso vengono rifiutati.

