Obtenir les Analytics Cascade
curl --request POST \
--url https://server.codeium.com/api/v1/CascadeAnalytics \
--header 'Content-Type: application/json' \
--data '
{
"service_key": "<string>",
"group_name": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>",
"emails": [
{}
],
"ide_types": [
{}
],
"query_requests": [
{}
]
}
'import requests
url = "https://server.codeium.com/api/v1/CascadeAnalytics"
payload = {
"service_key": "<string>",
"group_name": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>",
"emails": [{}],
"ide_types": [{}],
"query_requests": [{}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
service_key: '<string>',
group_name: '<string>',
start_timestamp: '<string>',
end_timestamp: '<string>',
emails: [{}],
ide_types: [{}],
query_requests: [{}]
})
};
fetch('https://server.codeium.com/api/v1/CascadeAnalytics', 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/CascadeAnalytics",
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>',
'emails' => [
[
]
],
'ide_types' => [
[
]
],
'query_requests' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"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/CascadeAnalytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\",\n \"emails\": [\n {}\n ],\n \"ide_types\": [\n {}\n ],\n \"query_requests\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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/CascadeAnalytics")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\",\n \"emails\": [\n {}\n ],\n \"ide_types\": [\n {}\n ],\n \"query_requests\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/CascadeAnalytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\",\n \"emails\": [\n {}\n ],\n \"ide_types\": [\n {}\n ],\n \"query_requests\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"queryResults": [
{
"cascadeLines": {
"cascadeLines": [
{
"day": "<string>",
"linesSuggested": "<string>",
"linesAccepted": "<string>"
}
]
},
"cascadeRuns": {
"cascadeRuns": [
{
"day": "<string>",
"model": "<string>",
"mode": "<string>",
"messagesSent": "<string>",
"cascadeId": "<string>",
"promptsUsed": "<string>"
}
]
},
"cascadeToolUsage": {
"cascadeToolUsage": [
{
"tool": "<string>",
"count": "<string>"
}
]
}
}
]
}Analytics API
Obtenir les Analytics Cascade
Interroger les métriques et les données d’utilisation propres à Cascade, notamment les lignes suggérées/acceptées, l’utilisation des modèles d’IA, la consommation de crédits et les statistiques d’utilisation des outils.
POST
/
api
/
v1
/
CascadeAnalytics
Obtenir les Analytics Cascade
curl --request POST \
--url https://server.codeium.com/api/v1/CascadeAnalytics \
--header 'Content-Type: application/json' \
--data '
{
"service_key": "<string>",
"group_name": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>",
"emails": [
{}
],
"ide_types": [
{}
],
"query_requests": [
{}
]
}
'import requests
url = "https://server.codeium.com/api/v1/CascadeAnalytics"
payload = {
"service_key": "<string>",
"group_name": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>",
"emails": [{}],
"ide_types": [{}],
"query_requests": [{}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
service_key: '<string>',
group_name: '<string>',
start_timestamp: '<string>',
end_timestamp: '<string>',
emails: [{}],
ide_types: [{}],
query_requests: [{}]
})
};
fetch('https://server.codeium.com/api/v1/CascadeAnalytics', 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/CascadeAnalytics",
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>',
'emails' => [
[
]
],
'ide_types' => [
[
]
],
'query_requests' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"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/CascadeAnalytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\",\n \"emails\": [\n {}\n ],\n \"ide_types\": [\n {}\n ],\n \"query_requests\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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/CascadeAnalytics")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\",\n \"emails\": [\n {}\n ],\n \"ide_types\": [\n {}\n ],\n \"query_requests\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/CascadeAnalytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"start_timestamp\": \"<string>\",\n \"end_timestamp\": \"<string>\",\n \"emails\": [\n {}\n ],\n \"ide_types\": [\n {}\n ],\n \"query_requests\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"queryResults": [
{
"cascadeLines": {
"cascadeLines": [
{
"day": "<string>",
"linesSuggested": "<string>",
"linesAccepted": "<string>"
}
]
},
"cascadeRuns": {
"cascadeRuns": [
{
"day": "<string>",
"model": "<string>",
"mode": "<string>",
"messagesSent": "<string>",
"cascadeId": "<string>",
"promptsUsed": "<string>"
}
]
},
"cascadeToolUsage": {
"cascadeToolUsage": [
{
"tool": "<string>",
"count": "<string>"
}
]
}
}
]
}Vue d’ensemble
Requête
string
requis
Votre clé de service avec les autorisations « Teams Read-only »
string
Filtrez les résultats aux utilisateurs d’un groupe spécifique. Ne peut pas être utilisé avec le paramètre
emails.string
Heure de début au format RFC 3339 (p. ex. « 2023-01-01T00:00:00Z »)
string
Heure de fin au format RFC 3339 (p. ex. « 2023-12-31T23:59:59Z »)
array
Tableau d’adresses e‑mail pour filtrer les résultats. Ne peut pas être utilisé avec le paramètre
group_name.array
Filtrez par type d’IDE. Options disponibles :
"editor"- Windsurf Editor"jetbrains"- JetBrains Plugin
array
requis
Tableau de requêtes de sources de données à exécuter. Chaque objet doit contenir l’une des sources de données prises en charge.
Sources de données
cascade_lines
{
"cascade_lines": {}
}
day- Date au format RFC 3339linesSuggested- Nombre de lignes proposéeslinesAccepted- Nombre de lignes acceptées
cascade_runs
{
"cascade_runs": {}
}
day- Date au format RFC 3339model- Nom du modèle d’IA utilisémode- Mode Cascade (voir les modes ci-dessous)messagesSent- Nombre de messages envoyéscascadeId- ID de conversation uniquepromptsUsed- Crédits consommés (en centimes)
CONVERSATIONAL_PLANNER_MODE_DEFAULT- Mode d’écritureCONVERSATIONAL_PLANNER_MODE_READ_ONLY- Mode de lectureCONVERSATIONAL_PLANNER_MODE_NO_TOOL- Mode héritéUNKNOWN- Mode inconnu
cascade_tool_usage
{
"cascade_tool_usage": {}
}
tool- Identifiant de l’outil (voir les mappages d’outils ci-dessous)count- Nombre d’utilisations de l’outil
Correspondances d’utilisation des outils
| Tool Identifier | Nom affiché |
|---|---|
CODE_ACTION | Édition de code |
VIEW_FILE | Afficher le fichier |
RUN_COMMAND | Exécuter une commande |
FIND | Outil de recherche |
GREP_SEARCH | Recherche Grep |
VIEW_FILE_OUTLINE | Afficher le plan du fichier |
MQUERY | Riptide |
WORKFLOWS_USED | Workflows utilisés |
LIST_DIRECTORY | Lister le contenu du répertoire |
MCP_TOOL | Outil MCP |
PROPOSE_CODE | Proposer du code |
SEARCH_WEB | Recherche sur le Web |
MEMORY | Mémoire |
PROXY_WEB_SERVER | Aperçu dans le navigateur |
DEPLOY_WEB_APP | Déployer l’application web |
Exemple de demande
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"group_name": "engineering_team",
"start_timestamp": "2025-01-01T00:00:00Z",
"end_timestamp": "2025-01-02T00:00:00Z",
"emails": ["user1@windsurf.com", "user2@windsurf.com"],
"ide_types": ["editor"],
"query_requests": [
{
"cascade_lines": {}
},
{
"cascade_runs": {}
},
{
"cascade_tool_usage": {}
}
]
}' \
https://server.codeium.com/api/v1/CascadeAnalytics
Réponse
array
Tableau des résultats de requête, un élément pour chaque requête
Afficher Résultat des lignes Cascade
Afficher Résultat des lignes Cascade
Afficher Résultat des exécutions Cascade
Afficher Résultat des exécutions Cascade
object
array
Tableau de statistiques d’utilisation du modèle d’IA
string
Date au format RFC 3339
string
Nom du modèle d’IA utilisé pour l’exécution
string
Identifiant du mode Cascade
string
Nombre de messages envoyés
string
Identifiant unique de la conversation
string
Crédits consommés en centimes (par exemple “100” = 1 crédit)
Exemple de réponse
{
"queryResults": [
{
"cascadeLines": {
"cascadeLines": [
{
"day": "2025-05-01T00:00:00Z",
"linesSuggested": "206",
"linesAccepted": "157"
},
{
"day": "2025-05-02T00:00:00Z",
"linesSuggested": "16"
}
]
}
},
{
"cascadeRuns": {
"cascadeRuns": [
{
"day": "2025-05-01T00:00:00Z",
"model": "Claude 3.7 Sonnet (Thinking)",
"mode": "CONVERSATIONAL_PLANNER_MODE_DEFAULT",
"messagesSent": "1",
"cascadeId": "0d35c1f7-0a85-41d0-ac96-a04cd2d64444"
}
]
}
},
{
"cascadeToolUsage": {
"cascadeToolUsage": [
{
"tool": "CODE_ACTION",
"count": "15"
},
{
"tool": "LIST_DIRECTORY",
"count": "20"
}
]
}
}
]
}
Remarques
- L’API renvoie des données brutes susceptibles de contenir des valeurs « UNKNOWN »
- Pour analyser les métriques, agrégez par champs spécifiques pertinents (par exemple, en faisant la somme de
promptsUsedpour les schémas d’utilisation) - Les données relatives au mode et au prompt peuvent être réparties sur plusieurs entrées
- La consommation de crédits (
promptsUsed) est renvoyée en centimes (100 = 1 crédit)