Récupérer les statistiques de la page utilisateur
curl --request POST \
--url https://server.codeium.com/api/v1/UserPageAnalytics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"service_key": "<string>",
"group_name": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>"
}
'import requests
url = "https://server.codeium.com/api/v1/UserPageAnalytics"
payload = {
"service_key": "<string>",
"group_name": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
service_key: '<string>',
group_name: '<string>',
start_timestamp: '<string>',
end_timestamp: '<string>'
})
};
fetch('https://server.codeium.com/api/v1/UserPageAnalytics', 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/v1/UserPageAnalytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'service_key' => '<string>',
'group_name' => '<string>',
'start_timestamp' => '<string>',
'end_timestamp' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v1/UserPageAnalytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://server.codeium.com/api/v1/UserPageAnalytics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/UserPageAnalytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"userTableStats": [
{
"name": "<string>",
"email": "<string>",
"lastUpdateTime": "<string>",
"apiKey": "<string>",
"activeDays": 123,
"disableCodeium": true,
"role": "<string>",
"signupTime": "<string>",
"lastAutocompleteUsageTime": "<string>",
"lastChatUsageTime": "<string>",
"lastCommandUsageTime": "<string>",
"promptCreditsUsed": 123,
"teamStatus": "<string>"
}
],
"billingCycleStart": "<string>",
"billingCycleEnd": "<string>",
"error": "<string>"
}API d’analyse
Récupérer les statistiques de la page utilisateur
Récupérer les statistiques d’activité des utilisateurs, notamment les noms, les e-mails, les dates de dernière activité, les jours d’activité et les crédits de prompt utilisés depuis la page Teams.
POST
/
api
/
v1
/
UserPageAnalytics
Récupérer les statistiques de la page utilisateur
curl --request POST \
--url https://server.codeium.com/api/v1/UserPageAnalytics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"service_key": "<string>",
"group_name": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>"
}
'import requests
url = "https://server.codeium.com/api/v1/UserPageAnalytics"
payload = {
"service_key": "<string>",
"group_name": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
service_key: '<string>',
group_name: '<string>',
start_timestamp: '<string>',
end_timestamp: '<string>'
})
};
fetch('https://server.codeium.com/api/v1/UserPageAnalytics', 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/v1/UserPageAnalytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'service_key' => '<string>',
'group_name' => '<string>',
'start_timestamp' => '<string>',
'end_timestamp' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v1/UserPageAnalytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://server.codeium.com/api/v1/UserPageAnalytics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/UserPageAnalytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"userTableStats": [
{
"name": "<string>",
"email": "<string>",
"lastUpdateTime": "<string>",
"apiKey": "<string>",
"activeDays": 123,
"disableCodeium": true,
"role": "<string>",
"signupTime": "<string>",
"lastAutocompleteUsageTime": "<string>",
"lastChatUsageTime": "<string>",
"lastCommandUsageTime": "<string>",
"promptCreditsUsed": 123,
"teamStatus": "<string>"
}
],
"billingCycleStart": "<string>",
"billingCycleEnd": "<string>",
"error": "<string>"
}Vue d’ensemble
Récupérez les statistiques d’activité des utilisateurs affichées sur la page Teams, notamment les noms des utilisateurs, leurs adresses e-mail, leurs dernières heures d’activité, leurs jours actifs et les crédits de prompt utilisés.Requête
string
requis
Votre clé de service avec les autorisations « Teams en lecture seule »
string
Limite les résultats aux utilisateurs d’un groupe spécifique (facultatif)
string
Heure de début au format RFC 3339 (p. ex.,
2023-01-01T00:00:00Z). Définit le début de la période prise en compte pour activeDays et promptCreditsUsed. S’il n’est pas fourni, la valeur par défaut est il y a un an.string
Heure de fin au format RFC 3339 (p. ex.,
2023-12-31T23:59:59Z). Définit la fin de la période prise en compte pour activeDays et promptCreditsUsed. S’il n’est pas fourni, l’heure actuelle est utilisée par défaut.Exemple de requête
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"group_name": "engineering_team",
"start_timestamp": "2024-01-01T00:00:00Z",
"end_timestamp": "2024-12-31T23:59:59Z"
}' \
https://server.codeium.com/api/v1/UserPageAnalytics
Réponse
Pour les Teams non-Devin,
apiKey contient une clé d’API utilisateur en clair, et non un hash. Traitez-la comme un secret : supprimez-la ou masquez-la avant toute journalisation, exportation ou partage d’analyses. Si vous devez conserver des réponses non masquées, restreignez-en l’accès et stockez-les de manière sécurisée.array
Tableau d’objets de statistiques des utilisateurs
Afficher Objet de statistiques utilisateur
Afficher Objet de statistiques utilisateur
string
Nom d’affichage de l’utilisateur
string
Adresse e-mail de l’utilisateur
string
Horodatage de la dernière activité de l’utilisateur au format RFC 3339
string
Pour les Teams non-Devin, la clé d’API en clair de l’utilisateur. Traitez cette valeur comme un secret, et non comme un identifiant d’analyse public. Pour les Teams Devin, ce champ contient à la place l’ID utilisateur Devin.
number
Nombre de jours pendant lesquels l’utilisateur a été actif dans la plage temporelle demandée (définie par
start_timestamp et end_timestamp). Un jour est compté comme actif si l’utilisateur a eu des acceptations d’autocomplétion, une utilisation de Cascade ou une utilisation de Command ce jour-là.boolean
Indique si l’accès à Devin Desktop a été désactivé pour l’utilisateur par un admin. Ce champ n’est présent que si l’accès a été explicitement désactivé, et il est alors toujours défini sur true.
string
Rôle de l’utilisateur au sein de la Team (p. ex. admin, member)
string
Horodatage de l’inscription de l’utilisateur, au format RFC 3339
string
Horodatage le plus récent d’utilisation du mode Tab/autocomplétion, au format RFC 3339
string
Horodatage le plus récent d’utilisation du mode Cascade, au format RFC 3339
string
Horodatage le plus récent d’utilisation du mode Command, au format RFC 3339
number
Nombre total de crédits de prompt utilisés par cet utilisateur au sein de cette Team dans la plage temporelle demandée (définie par
start_timestamp et end_timestamp), renvoyé en centimes (1 crédit = 100 centimes). Pour obtenir le nombre réel de crédits utilisés, divisez cette valeur par 100. L’utilisation est enregistrée par tranches horaires, et une tranche n’est comptabilisée que si le début de son heure se situe dans la plage. Par exemple, une plage de 10:30 à 11:30 inclut toute l’utilisation de 11:00 à 11:59 et aucune de celle de 10:00 à 10:59, tandis qu’une plage de 10:15 à 10:45 n’inclut aucune utilisation. Pour les utilisateurs sans utilisation sur la plage, la valeur renvoyée est 0. Cette valeur n’est pas liée au cycle de facturation en cours indiqué par billingCycleStart et billingCycleEnd.string
Le statut d’appartenance de l’utilisateur à la Team. Valeurs possibles :
USER_TEAM_STATUS_UNSPECIFIED, USER_TEAM_STATUS_PENDING, USER_TEAM_STATUS_APPROVED, USER_TEAM_STATUS_REJECTED. Notez que l’API renvoie tous les utilisateurs quel que soit leur statut dans la Team, tandis que l’UI Manage Members n’affiche que les utilisateurs approuvés.string
Début du cycle de facturation en cours de la Team au format RFC 3339. Ce champ est indépendant de la plage temporelle demandée et ne borne pas les valeurs
promptCreditsUsed de userTableStats.string
Fin du cycle de facturation en cours de la Team au format RFC 3339. Ce champ est indépendant de la plage temporelle demandée et ne borne pas les valeurs
promptCreditsUsed de userTableStats.Exemple de réponse
Les valeursapiKey ci-dessous sont des espaces réservés donnés à titre d’exemple, et non de véritables credentials.
{
"userTableStats": [
{
"name": "Alice",
"email": "alice@cognition.ai",
"lastUpdateTime": "2024-10-10T22:56:10.771591Z",
"apiKey": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"activeDays": 178,
"role": "admin",
"signupTime": "2024-01-15T08:30:00Z",
"lastAutocompleteUsageTime": "2024-10-10T22:56:10Z",
"lastChatUsageTime": "2024-10-10T20:30:00Z",
"promptCreditsUsed": 12500,
"teamStatus": "USER_TEAM_STATUS_APPROVED"
},
{
"name": "Bob",
"email": "bob@cognition.ai",
"lastUpdateTime": "2024-10-10T18:11:23.980237Z",
"apiKey": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"activeDays": 210,
"role": "member",
"signupTime": "2024-02-01T10:00:00Z",
"lastAutocompleteUsageTime": "2024-10-10T18:11:23Z",
"lastChatUsageTime": "2024-10-09T14:22:00Z",
"lastCommandUsageTime": "2024-10-08T09:15:00Z",
"promptCreditsUsed": 8300,
"teamStatus": "USER_TEAM_STATUS_APPROVED"
}
],
"billingCycleStart": "2024-10-01T00:00:00Z",
"billingCycleEnd": "2024-11-01T00:00:00Z"
}
Réponses d’erreur
string
Message d’erreur décrivant l’erreur survenue
- Clé de service invalide ou autorisations insuffisantes
- Format d’horodatage invalide
- Groupe introuvable
- Limite de requêtes dépassée

