curl --request GET \
--url https://server.codeium.com/api/v2alpha/analytics/active-users \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/analytics/active-users"
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/active-users', 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/active-users",
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/active-users"
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/active-users")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/analytics/active-users")
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": [
{
"active_users": 142
}
],
"pagination": {
"next_page_cursor": null
},
"metadata": {
"data_freshness": "2026-06-16T03:00:00.000Z",
"query_time_ms": 612,
"team_id": "team_abc123"
}
}Récupérer les utilisateurs actifs
Interrogez le nombre d’utilisateurs actifs distincts de votre Team, avec une granularité temporelle facultative et un regroupement par utilisateur.
curl --request GET \
--url https://server.codeium.com/api/v2alpha/analytics/active-users \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/analytics/active-users"
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/active-users', 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/active-users",
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/active-users"
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/active-users")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/analytics/active-users")
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": [
{
"active_users": 142
}
],
"pagination": {
"next_page_cursor": null
},
"metadata": {
"data_freshness": "2026-06-16T03:00:00.000Z",
"query_time_ms": 612,
"team_id": "team_abc123"
}
}Authentification
Cet endpoint utilise l’authentification par jeton Bearer. Incluez votre jeton dans l’en-têteAuthorization :
Authorization: Bearer <your_token>
Ce qui est considéré comme un utilisateur actif
Un utilisateur est considéré comme actif pour un intervalle de temps donné s’il y a un événement de facturation associé. Le champactive_users indique le nombre d’utilisateurs distincts.
Regroupement et granularité
Utilisezgranularity et group_by pour contrôler la structure des données renvoyées :
- Aucune granularité ni regroupement — renvoie une seule ligne avec le nombre total d’utilisateurs actifs sur toute la plage de dates
granularity=daily— chaque ligne inclut untimestampau formatYYYY-MM-DD(utilisateurs actifs quotidiens)granularity=monthly— chaque ligne inclut untimestampau formatYYYY-MM(utilisateurs actifs mensuels)group_by=user— renvoie une ligne par utilisateur actif avec unuser_id; la valeur deactive_usersest1pour chaque ligne
user pour group_by. Les autres dimensions (model_uid, ide, os) ne sont pas valides ici.Pagination
Les résultats sont paginés, avec une taille de page par défaut de 1 000 lignes (maximum : 10 000). Lorsque d’autres résultats sont disponibles, la réponse inclut unnext_page_cursor dans l’objet pagination. Transmettez-le comme paramètre de requête page_cursor
pour récupérer la page suivante.
Les curseurs de page expirent après 24 heures. Une requête de page suivante n’est pas comptabilisée comme une nouvelle requête au regard de 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 Retry-After en-tête.
La pagination d’une requête précédente (en suivant un next_page_cursor) n’est pas décomptée de cette limite —
seule la requête initiale de chaque rapport compte. 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 les users actifs.
agent Granularité temporelle pour regrouper les résultats. Lorsqu’elle est spécifiée, chaque ligne inclut un champ timestamp.
Si elle est omise, le nombre de users actifs est agrégé sur l’ensemble de la plage de dates.
daily, monthly Dimension selon laquelle regrouper les résultats. L'endpoint des utilisateurs actifs ne prend en charge que user, ce qui renvoie
une ligne par utilisateur actif (avec active_users = 1 pour chacun).
user Liste d'UID de modèle, séparés par des virgules, à utiliser pour filtrer les résultats.
Filtrer les résultats pour n'inclure que les utilisateurs d'un groupe spécifique. La clé de service doit avoir accès à ce groupe.
Filtrer les résultats pour un utilisateur spécifique (UID d'authentification).
Nombre maximal de lignes à renvoyer par page.
1 <= x <= 10000Curseur opaque provenant du champ pagination.next_page_cursor d'une réponse précédente, à utiliser pour récupérer la page suivante.

