Die Custom Analytics-API bietet flexible Abfragemöglichkeiten für Autocomplete-, Chat- und Command-Daten mit anpassbaren selections, Filtern, aggregations und Sortierungen.
Ihr Service Key mit Berechtigung “Teams Nur-Lesen”
Ergebnisse auf Benutzer einer bestimmten Gruppe filtern (optional)
Array von Abfrageanforderungsobjekten, die die abzurufenden Daten definieren
Struktur der Query-Anfrage
Jedes Query-Anfrageobjekt enthält:
Abzufragende Datenquelle. Optionen:
QUERY_DATA_SOURCE_USER_DATA - Autocomplete-Daten
QUERY_DATA_SOURCE_CHAT_DATA - Chat-Daten
QUERY_DATA_SOURCE_COMMAND_DATA - Command-Daten
QUERY_DATA_SOURCE_PCW_DATA - Percent-Code-Written-Daten
Array von Feldselections, die abgerufen werden sollen (siehe Abschnitt Selections)
Array von Filtern, die angewendet werden sollen (siehe Abschnitt Filters)
Array von Aggregations zum Gruppieren (siehe Abschnitt Aggregations)
Selections legen fest, welche Felder abgerufen werden und wie sie aggregiert werden.
Name des auszuwählenden Feldes (siehe Abschnitt Available Fields)
Alias für das Feld. Wenn nicht angegeben, lautet der Standardwert {aggregation_function}_{field_name} (in Kleinbuchstaben)
Anzuwendende Aggregationsfunktion:
QUERY_AGGREGATION_UNSPECIFIED (Standard)
QUERY_AGGREGATION_COUNT
QUERY_AGGREGATION_SUM
QUERY_AGGREGATION_AVG
QUERY_AGGREGATION_MAX
QUERY_AGGREGATION_MIN
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
Filter schränken Daten auf Elemente ein, die bestimmte Kriterien erfüllen.
Feldname, nach dem gefiltert werden soll
Filteroperation:
QUERY_FILTER_EQUAL
QUERY_FILTER_NOT_EQUAL
QUERY_FILTER_GREATER_THAN
QUERY_FILTER_LESS_THAN
QUERY_FILTER_GE (größer als oder gleich)
QUERY_FILTER_LE (kleiner als oder gleich)
{
"name": "language",
"filter": "QUERY_FILTER_EQUAL",
"value": "PYTHON"
}
Aggregations fassen Daten anhand angegebener Kriterien zusammen.
Feldname, nach dem gruppiert werden soll
Alias für das Aggregationsfeld
{
"field": "ide",
"name": "ide_type"
}
Alle Nutzerdaten werden pro Nutzer und pro Stunde aggregiert.
| Feldname | Beschreibung | Gültige Aggregationen |
api_key | Hash des Benutzer-API-Schlüssels | UNSPECIFIED, COUNT |
date | UTC-Datum der Autocomplete-Vorgänge | UNSPECIFIED, COUNT |
date UTC-x | Datum mit Zeitzonenversatz (z. B. „date UTC-8“ für PST) | UNSPECIFIED, COUNT |
hour | UTC-Stunde der Autocomplete-Vorgänge | UNSPECIFIED, COUNT |
language | Programmiersprache | UNSPECIFIED, COUNT |
ide | Verwendete IDE | UNSPECIFIED, COUNT |
version | Windsurf-Version | UNSPECIFIED, COUNT |
num_acceptances | Anzahl der Autocomplete-Annahmen | SUM, MAX, MIN, AVG |
num_lines_accepted | Angenommene Codezeilen | SUM, MAX, MIN, AVG |
num_bytes_accepted | Angenommene Bytes | SUM, MAX, MIN, AVG |
distinct_users | Eindeutige Nutzer | UNSPECIFIED, COUNT |
distinct_developer_days | Eindeutige (Nutzer, Tag)-Tupel | UNSPECIFIED, COUNT |
distinct_developer_hours | Eindeutige (Nutzer, Stunde)-Tupel | UNSPECIFIED, COUNT |
Chat-Daten sind von Cascade-Daten getrennt und erfassen die Nutzung unserer älteren, nicht-agentischen Plugins
Alle Chat-Daten beziehen sich auf Antworten des Chat-AI-Modells, nicht auf Benutzerfragen.
| Field Name | Description | Valid Aggregations |
api_key | Hash des API-Schlüssels des Benutzers | UNSPECIFIED, COUNT |
model_id | Chat-AI-Modell-ID | UNSPECIFIED, COUNT |
date | UTC-Datum der Chat-Antwort | UNSPECIFIED, COUNT |
date UTC-x | Datum mit Zeitzonenversatz | UNSPECIFIED, COUNT |
ide | Verwendete IDE | UNSPECIFIED, COUNT |
version | Windsurf-Version | UNSPECIFIED, COUNT |
latest_intent_type | Chat-Intent-Typ (siehe Intent-Typen unten) | UNSPECIFIED, COUNT |
num_chats_received | Anzahl empfangener Chat-Nachrichten | SUM, MAX, MIN, AVG |
chat_accepted | Ob der Chat akzeptiert wurde (Daumen hoch) | SUM, COUNT |
chat_inserted_at_cursor | Ob die Schaltfläche „Insert“ geklickt wurde | SUM, COUNT |
chat_applied | Ob die Schaltfläche „Apply Diff“ geklickt wurde | SUM, COUNT |
chat_loc_used | Aus dem Chat genutzte Codezeilen | SUM, MAX, MIN, AVG |
CHAT_INTENT_GENERIC - Normales Chat
CHAT_INTENT_FUNCTION_EXPLAIN - CodeLens zur Erklärung einer Funktion
CHAT_INTENT_FUNCTION_DOCSTRING - CodeLens für den Docstring einer Funktion
CHAT_INTENT_FUNCTION_REFACTOR - CodeLens zum Refactoring einer Funktion
CHAT_INTENT_CODE_BLOCK_EXPLAIN - CodeLens zur Erklärung eines Codeblocks
CHAT_INTENT_CODE_BLOCK_REFACTOR - CodeLens zum Refactoring eines Codeblocks
CHAT_INTENT_PROBLEM_EXPLAIN - CodeLens zur Erklärung eines Problems
CHAT_INTENT_FUNCTION_UNIT_TESTS - CodeLens für Unit-Tests einer Funktion
Command-Daten umfassen alle Commands, einschließlich abgelehnter. Verwenden Sie das Feld accepted, um nur nach akzeptierten Commands zu filtern.
| Feldname | Beschreibung | Gültige Aggregationen |
api_key | Hash des API-Schlüssels des Nutzers | UNSPECIFIED, COUNT |
date | UTC-Datum des Commands | UNSPECIFIED, COUNT |
timestamp | UTC-Zeitstempel des Commands | UNSPECIFIED, COUNT |
language | Programmiersprache | UNSPECIFIED, COUNT |
ide | Verwendetes IDE | UNSPECIFIED, COUNT |
version | Windsurf-Version | UNSPECIFIED, COUNT |
command_source | Auslöserquelle des Commands (siehe Command Sources unten) | UNSPECIFIED, COUNT |
provider_source | Generierungs- oder Bearbeitungsmodus | UNSPECIFIED, COUNT |
lines_added | Hinzugefügte Codezeilen | SUM, MAX, MIN, AVG |
lines_removed | Entfernte Codezeilen | SUM, MAX, MIN, AVG |
bytes_added | Hinzugefügte Bytes | SUM, MAX, MIN, AVG |
bytes_removed | Entfernte Bytes | SUM, MAX, MIN, AVG |
selection_lines | Ausgewählte Zeilen (0 bei Generierungen) | SUM, MAX, MIN, AVG |
selection_bytes | Ausgewählte Bytes (0 bei Generierungen) | SUM, MAX, MIN, AVG |
accepted | Ob der Command akzeptiert wurde | SUM, COUNT |
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
COMMAND_REQUEST_SOURCE_DEFAULT - Typische Command-Verwendung
COMMAND_REQUEST_SOURCE_RIGHT_CLICK_REFACTOR
COMMAND_REQUEST_SOURCE_FUNCTION_CODE_LENS
COMMAND_REQUEST_SOURCE_FOLLOWUP
COMMAND_REQUEST_SOURCE_CLASS_CODE_LENS
COMMAND_REQUEST_SOURCE_PLAN
COMMAND_REQUEST_SOURCE_SELECTION_HINT_CODE_LENS
PROVIDER_SOURCE_COMMAND_GENERATE - Generierungsmodus
PROVIDER_SOURCE_COMMAND_EDIT - Bearbeitungsmodus
Prozentsatz des geschriebenen Codes mit getrennter Erfassung der Beiträge von Autocomplete und Command.
| Feldname | Beschreibung | Gültige Aggregationen |
percent_code_written | Berechnet als codeium_bytes / (codeium_bytes + user_bytes) | UNSPECIFIED |
codeium_bytes | Gesamtanzahl der von Codeium generierten Bytes | UNSPECIFIED |
user_bytes | Gesamtanzahl der vom Benutzer geschriebenen Bytes | UNSPECIFIED |
total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
codeium_bytes_by_autocomplete | Von Autocomplete stammende Codeium-Bytes | UNSPECIFIED |
codeium_bytes_by_command | Von Command stammende Codeium-Bytes | UNSPECIFIED |
| Feldname | Beschreibung | Beispiele |
language | Programmiersprache | KOTLIN, GO, JAVA |
ide | Verwendete IDE | jetbrains, vscode |
version | Windsurf-Version | 1.28.0, 130.0 |
Für die Datumsfilterung in PCW-Abfragen verwende die Parameter start_timestamp und end_timestamp im Hauptteil der Anfrage.
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_USER_DATA",
"selections": [
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "num_lines_accepted",
"name": "total_lines",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "hour",
"filter": "QUERY_FILTER_GE",
"value": "2024-01-01"
},
{
"name": "hour",
"filter": "QUERY_FILTER_LE",
"value": "2024-02-01"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "ihr_service_key_hier",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
"selections": [
{
"field": "chat_loc_used",
"name": "lines_used",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "latest_intent_type",
"filter": "QUERY_FILTER_EQUAL",
"value": "CHAT_INTENT_FUNCTION_DOCSTRING"
}
],
"aggregations": [
{
"field": "ide",
"name": "ide_type"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Beispiel für Command-Daten
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "ihr_service_key_hier",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
"selections": [
{
"field": "lines_added",
"name": "total_lines_added",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "lines_removed",
"name": "total_lines_removed",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "provider_source",
"filter": "QUERY_FILTER_EQUAL",
"value": "PROVIDER_SOURCE_COMMAND_EDIT"
},
{
"name": "accepted",
"filter": "QUERY_FILTER_EQUAL",
"value": "true"
}
],
"aggregations": [
{
"field": "language",
"name": "programming_language"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "ihr_service_key_hier",
"start_timestamp": "2024-01-01T00:00:00Z",
"end_timestamp": "2024-12-22T00:00:00Z",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_PCW_DATA",
"selections": [
{
"field": "percent_code_written",
"name": "pcw"
},
{
"field": "codeium_bytes",
"name": "ai_bytes"
},
{
"field": "total_bytes",
"name": "total"
},
{
"field": "codeium_bytes_by_autocomplete",
"name": "autocomplete_bytes"
},
{
"field": "codeium_bytes_by_command",
"name": "command_bytes"
}
],
"filters": [
{
"filter": "QUERY_FILTER_EQUAL",
"name": "language",
"value": "GO"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Array mit Abfrageergebnissen, jeweils eines pro AbfrageArray mit ErgebniseinträgenObjekt mit den ausgewählten Feldern und ihren Werten
Antwort mit Benutzerdaten
{
"queryResults": [
{
"responseItems": [
{
"item": {
"total_acceptances": "125",
"total_lines": "863"
}
}
]
}
]
}
{
"queryResults": [
{
"responseItems": [
{
"item": {
"lines_used": "74",
"ide_type": "jetbrains"
}
},
{
"item": {
"lines_used": "41",
"ide_type": "vscode"
}
}
]
}
]
}
{
"queryResults": [
{
"responseItems": [
{
"item": {
"programming_language": "PYTHON",
"total_lines_added": "21",
"total_lines_removed": "5"
}
},
{
"item": {
"programming_language": "GO",
"total_lines_added": "31",
"total_lines_removed": "27"
}
}
]
}
]
}
{
"queryResults": [
{
"responseItems": [
{
"item": {
"ai_bytes": "6018",
"autocomplete_bytes": "4593",
"command_bytes": "1425",
"pcw": "0.61",
"total": "9900"
}
}
]
}
]
}
- PCW (Percent Code Written) weist innerhalb einzelner Tage oder Nutzer eine hohe Varianz auf – für bessere Einblicke über Wochen aggregieren
- Alle Auswahlfelder müssen entweder Aggregationsfunktionen haben oder keine (keine Mischung möglich)
- Felder mit dem Muster “distinct_*” können nicht in aggregations verwendet werden
- Feldaliase müssen über alle selections und aggregations hinweg eindeutig sein
- Wenn keine Aggregationsfunktion angegeben ist, lautet der Standardwert UNSPECIFIED