Cascade Analytics abrufen
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
Cascade Analytics abrufen
Cascade-spezifische Nutzungsmetriken abfragen, einschließlich vorgeschlagener/akzeptierter Zeilen, AI-Modell-Nutzung, Kreditverbrauch und Statistiken zur Tool-Nutzung.
POST
/
api
/
v1
/
CascadeAnalytics
Cascade Analytics abrufen
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>"
}
]
}
}
]
}Übersicht
Anfrage
string
erforderlich
Ihr Service Key mit Berechtigung „Teams Nur-Lesen“
string
Ergebnisse auf Benutzer in einer bestimmten Gruppe beschränken. Kann nicht zusammen mit dem Parameter
emails verwendet werden.string
Startzeit im RFC 3339-Format (z. B.
2023-01-01T00:00:00Z)string
Endzeit im RFC 3339-Format (z. B.
2023-12-31T23:59:59Z)array
Array von E-Mail-Adressen zum Filtern der Ergebnisse. Kann nicht zusammen mit dem Parameter
group_name verwendet werden.array
Nach IDE-Typ filtern. Verfügbare Optionen:
"editor"- Windsurf Editor"jetbrains"- JetBrains-Plugin
array
erforderlich
Array von Datenquellenabfragen, die ausgeführt werden sollen. Jedes Objekt sollte eine der unterstützten Datenquellen enthalten.
Datenquellen
cascade_lines
{
"cascade_lines": {}
}
day- Datum im RFC 3339-FormatlinesSuggested- Anzahl der vorgeschlagenen ZeilenlinesAccepted- Anzahl der übernommenen Zeilen
cascade_runs
{
"cascade_runs": {}
}
day- Datum im RFC-3339-Formatmodel- Name des verwendeten AI-Modellsmode- Cascade-Modus (siehe Modi unten)messagesSent- Anzahl gesendeter NachrichtencascadeId- Eindeutige Gesprächs-IDpromptsUsed- Genutzte Credits (in Cent)
CONVERSATIONAL_PLANNER_MODE_DEFAULT- SchreibmodusCONVERSATIONAL_PLANNER_MODE_READ_ONLY- LesemodusCONVERSATIONAL_PLANNER_MODE_NO_TOOL- Legacy-ModusUNKNOWN- Unbekannter Modus
cascade_tool_usage
{
"cascade_tool_usage": {}
}
tool- Tool-Bezeichner (siehe Tool-Zuordnungen unten)count- Anzahl der Verwendungen des Tools
Zuordnungen der Tool-Nutzung
| Tool Identifier | Anzeigename |
|---|---|
CODE_ACTION | Code bearbeiten |
VIEW_FILE | Datei anzeigen |
RUN_COMMAND | Befehl ausführen |
FIND | Suchtool |
GREP_SEARCH | Grep-Suche |
VIEW_FILE_OUTLINE | Dateiübersicht anzeigen |
MQUERY | Riptide |
WORKFLOWS_USED | Verwendete Workflows |
LIST_DIRECTORY | Verzeichnis auflisten |
MCP_TOOL | MCP-Tool |
PROPOSE_CODE | Code vorschlagen |
SEARCH_WEB | Im Web suchen |
MEMORY | Memory |
PROXY_WEB_SERVER | Browser-Vorschau |
DEPLOY_WEB_APP | Web-App bereitstellen |
Beispielanfrage
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
Antwort
array
Array von Abfrageergebnissen, eines für jede Abfrage
Anzeigen Cascade-Zeilen-Ergebnis
Anzeigen Cascade-Zeilen-Ergebnis
Anzeigen Cascade-Ausführungen-Ergebnis
Anzeigen Cascade-Ausführungen-Ergebnis
object
array
Array von AI-Modell-Nutzungsstatistiken
string
Datum im RFC 3339-Format
string
Name des AI-Modells, das für die Ausführung verwendet wurde
string
Cascade-Moduskennung
string
Anzahl der gesendeten Nachrichten
string
Eindeutige Konversationskennung
string
Verbrauchte Credits in Cent (z. B. „100“ = 1 Credit)
Beispielantwort
{
"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"
}
]
}
}
]
}
Hinweise
- Die API gibt Rohdaten zurück, die möglicherweise „UNKNOWN“-Werte enthalten
- Für Metrik-Analysen nach bestimmten Feldern von Interesse aggregieren (z. B.
promptsUsedaufsummieren, um Nutzungsmuster zu erkennen) - Mode- und Prompt-Daten können über mehrere Einträge verteilt sein
- Der Verbrauch von Credits (
promptsUsed) wird in Cent angegeben (100 = 1 Credit)