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_bodyRécupérer la consommation
Interrogez les données d’analyse de consommation des crédits ou des ACU avec des options flexibles de filtrage, de regroupement et de pagination.
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_bodyAuthentification
Cet endpoint utilise l’authentification par jeton Bearer. Incluez votre jeton dans l’en-têteAuthorization :
Authorization: Bearer <your_token>
Stratégie de facturation
La structure de la réponse dépend de la stratégie de facturation de votre Team :| Stratégie | Champs renseignés | Description |
|---|---|---|
CREDITS | prompt_credits, flex_credits | Teams Standard SaaS Enterprise |
ACU | billed_acus | Teams facturées en ACU |
message_count et user_message_count (dans consumption) sont renvoyés quelle que soit la
stratégie de facturation. user_message_count ne comptabilise que les messages envoyés par un utilisateur à l’agent, quel que soit le client utilisé (Devin
Desktop, le plugin JetBrains ou la CLI) ; il correspond au nombre de « messages envoyés » affiché dans l’interface d’analyse.
message_count comptabilise chaque événement de facturation, y compris les requêtes consécutives adressées au modèle et aux outils au sein de chaque tour. user_message_count vaut null pour les lignes sans
attribution à un message utilisateur (utilisation antérieure au 2026-04-11).
Regroupement et granularité
Utilisezgranularity et group_by pour contrôler la structure des données renvoyées :
- Aucune granularité ni aucun regroupement — renvoie une seule ligne agrégée pour l’ensemble de la plage de dates
granularity=daily— chaque ligne inclut untimestampau formatYYYY-MM-DDgranularity=monthly— chaque ligne inclut untimestampau formatYYYY-MMgroup_by=user— chaque ligne inclut unuser_idet unuser_emailgroup_by=user,model_uid— chaque ligne inclutuser_id,user_emailetmodel_uidgroup_by=ide— chaque ligne inclut unidegroup_by=ide,ide_version— chaque ligne inclutideetide_version(le regroupement paride_versionexige queidesoit également inclus)group_by=os— chaque ligne inclut unos, tel quedarwin(macOS),windowsoulinux
metric=loc_inserted,loc_deleted), qui renvoie
les lignes de code acceptées avec les mêmes filtres et les mêmes dimensions de regroupement.Pagination
Les résultats sont paginés, avec une taille de page par défaut de 1 000 lignes (max. 10 000). Lorsque d’autres résultats sont disponibles, la réponse inclut unnext_page_cursor dans l’objet pagination. Passez-le comme paramètre de requête page_cursor
pour récupérer la page suivante.
Les curseurs de page expirent au bout de 24 heures. Une requête pour une page suivante n’est pas comptabilisée comme une nouvelle requête dans votre limite de débit.
Limites de débit
Cet endpoint est soumis à une limite de 10 requêtes par heure par Team. Si vous dépassez cette limite, le serveur renvoie429 Too Many Requests avec un en-tête Retry-After.
La pagination d’une requête antérieure (en suivant un next_page_cursor) n’est pas décomptée de cette limite —
seule la requête initiale de chaque rapport l’est. Cette faible limite s’explique par le fait que cet endpoint est destiné à des
rapports périodiques, et non au suivi de l’utilisation en temps réel.Autorisations
Une clé de service disposant de l’autorisation Analytics Read, transmise comme jeton Bearer dans l’en-tête Authorization.
Créez une clé de service dans les paramètres de votre Team, à l’adresse team settings, dans la section "Service Keys".
Paramètres de requête
Début de la plage de dates (inclus) au format YYYY-MM-DD.
Fin de la plage de dates (incluse) au format YYYY-MM-DD. La plage ne doit pas dépasser 90 jours.
Produit pour lequel interroger la consommation.
agent Granularité temporelle pour regrouper les résultats. Lorsqu’elle est spécifiée, chaque ligne inclut un champ timestamp.
Si elle est omise, les résultats sont agrégés sur l’ensemble de la plage de dates.
daily, monthly Liste de dimensions, séparées par des virgules, permettant de regrouper les résultats. Dimensions prises en charge :
user— inclutuser_idetuser_emaildans chaque lignemodel_uid— inclutmodel_uiddans chaque ligneide— inclutidedans chaque ligneide_version— inclutide_versiondans chaque ligne ; nécessite queidesoit également inclusos— inclutosdans chaque ligne
Liste des UID de modèle, séparés par des virgules, auxquels filtrer les résultats.
Filtrez les résultats pour ne conserver que les users d’un groupe spécifique. La clé de service doit avoir accès à ce groupe.
Filtrez les résultats pour ne conserver qu’un user spécifique (UID d’authentification).
Nombre maximal de lignes à renvoyer par page.
1 <= x <= 10000Curseur opaque provenant de pagination.next_page_cursor dans une réponse précédente, permettant de récupérer la page suivante.

