Zugriff auf KI-generierte Code-Analytics für die Repositories deines Teams. Das umfasst die KI-Nutzung pro Commit sowie detaillierte akzeptierte KI-Änderungen.
Die API befindet sich in der ersten Version. Wir erweitern die Funktionen basierend auf Feedback – lass uns wissen, welche Endpoints du benötigst!
  • Verfügbarkeit: Nur für Enterprise-Teams
  • Status: Alpha (Response-Strukturen und Felder können sich ändern)

Authentifizierung

Alle API-Anfragen erfordern eine Authentifizierung über einen API-Schlüssel. Diese API nutzt dieselbe Admin-API-Authentifizierung wie andere Endpunkte. Detaillierte Anweisungen zur Authentifizierung findest du unter Admin-API-Authentifizierung.

Basis-URL

Alle API-Endpunkte verwenden:
https://api.cursor.com

Rate Limits

  • 5 Anfragen pro Minute pro Team, pro Endpunkt

Query-Parameter

Alle unten aufgeführten Endpunkte akzeptieren dieselben Query-Parameter über den Query-String:
ParameterTypErforderlichBeschreibung
startDatestringdateNeinISO-Datumsstring, das Literal „now” oder relative Tage wie „7d” (bedeutet now - 7 Tage). Standard: now - 7 Tage
endDatestringdateNeinISO-Datumsstring, das Literal „now” oder relative Tage wie „0d”. Standard: now
pagenumberNeinSeitennummer (1-basiert). Standard: 1
pageSizenumberNeinErgebnisse pro Seite. Standard: 100, Max: 1000
userstringNeinOptionaler Filter für einen einzelnen Benutzer. Akzeptiert E-Mail (z. B. developer@company.com), kodierte ID (z. B. user_abc123…) oder numerische ID (z. B. 42)
Antworten geben die userId als kodierte externe ID mit dem Präfix user_ zurück. Diese ist stabil für die API-Nutzung.

Semantik und Berechnung der Metriken

  • Quellen: „TAB“ steht für übernommene Inline-Vervollständigungen; „COMPOSER“ steht für übernommene Diffs aus Composer
  • Zeilenmetriken: tabLinesAdded/Deleted und composerLinesAdded/Deleted werden separat gezählt; nonAiLinesAdded/Deleted werden als max(0, totalLines - AI lines) berechnet
  • Datenschutzmodus: Wenn im Client aktiviert ist, können einige Metadaten (wie fileName) weggelassen werden
  • Branch-Info: isPrimaryBranch ist true, wenn der aktuelle Branch dem Standardbranch des Repos entspricht; kann undefined sein, wenn Repo-Infos nicht verfügbar sind
Du kannst die Datei durchsehen, um zu verstehen, wie Commits und Änderungen erkannt und gemeldet werden.

Endpoints

AI-Commit-Metriken abrufen (JSON, paginiert)

Rufe aggregierte Metriken pro Commit ab, die Zeilen TAB, COMPOSER und Nicht-KI zuordnen.
GET /analytics/ai-code/commits

Response

{
  items: AiCommitMetric[];
  totalCount: number;
  page: number;
  pageSize: number;
}

AiCommitMetric-Felder

FeldTypBeschreibung
commitHashstringGit-Commit-Hash
userIdstringKodierte Benutzer-ID (z.B. user_abc123)
userEmailstringE-Mail-Adresse des Benutzers
repoNamestringnullRepository-Name
branchNamestringnullBranch-Name
isPrimaryBranchbooleannullOb dies der primäre Branch ist
totalLinesAddednumberGesamtzahl der hinzugefügten Zeilen im Commit
totalLinesDeletednumberGesamtzahl der gelöschten Zeilen im Commit
tabLinesAddednumberÜber TAB-Vervollständigungen hinzugefügte Zeilen
tabLinesDeletednumberÜber TAB-Vervollständigungen gelöschte Zeilen
composerLinesAddednumberÜber Composer hinzugefügte Zeilen
composerLinesDeletednumberÜber Composer gelöschte Zeilen
nonAiLinesAddednumbernullHinzugefügte Nicht-KI-Zeilen
nonAiLinesDeletednumbernullGelöschte Nicht-KI-Zeilen
messagestringnullCommit-Nachricht
commitTsstringnullCommit-Zeitstempel (ISO-Format)
createdAtstringErfassungs-Zeitstempel (ISO-Format)

Beispiel-Response

{
  "items": [
    {
      "commitHash": "a1b2c3d4",
      "userId": "user_3k9x8q...",
      "userEmail": "developer@company.com",
      "repoName": "company/repo",
      "branchName": "main",
      "isPrimaryBranch": true,
      "totalLinesAdded": 120,
      "totalLinesDeleted": 30,
      "tabLinesAdded": 50,
      "tabLinesDeleted": 10,
      "composerLinesAdded": 40,
      "composerLinesDeleted": 5,
      "nonAiLinesAdded": 30,
      "nonAiLinesDeleted": 15,
      "message": "Refactor: extract analytics client",
      "commitTs": "2025-07-30T14:12:03.000Z",
      "createdAt": "2025-07-30T14:12:30.000Z"
    }
  ],
  "totalCount": 42,
  "page": 1,
  "pageSize": 100
}

Beispiel-Requests

Basis-Request:
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=7d&endDate=now&page=1&pageSize=100" \
  -u YOUR_API_KEY:
Nach Benutzer filtern (E-Mail):
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=2025-06-01T00:00:00Z&endDate=now&user=developer@company.com" \
  -u YOUR_API_KEY:

AI-Commit-Metriken herunterladen (CSV, Streaming)

Lade Commit-Metriken-Daten im CSV-Format für große Datenextraktionen herunter.
GET /analytics/ai-code/commits.csv

Response

Headers:
  • Content-Type: text/csv; charset=utf-8

CSV-Spalten

SpalteTypBeschreibung
commit_hashstringGit-Commit-Hash
user_idstringKodierte User-ID
user_emailstringE-Mail-Adresse des Users
repo_namestringRepository-Name
branch_namestringBranch-Name
is_primary_branchbooleanOb dies der primäre Branch ist
total_lines_addednumberGesamtanzahl hinzugefügter Zeilen im Commit
total_lines_deletednumberGesamtanzahl gelöschter Zeilen im Commit
tab_lines_addednumberÜber TAB-Vervollständigungen hinzugefügte Zeilen
tab_lines_deletednumberÜber TAB-Vervollständigungen gelöschte Zeilen
composer_lines_addednumberÜber Composer hinzugefügte Zeilen
composer_lines_deletednumberÜber Composer gelöschte Zeilen
non_ai_lines_addednumberOhne KI hinzugefügte Zeilen
non_ai_lines_deletednumberOhne KI gelöschte Zeilen
messagestringCommit-Message
commit_tsstringCommit-Zeitstempel (ISO-Format)
created_atstringErfassungs-Zeitstempel (ISO-Format)

Beispiel CSV-Output

commit_hash,user_id,user_email,repo_name,branch_name,is_primary_branch,total_lines_added,total_lines_deleted,tab_lines_added,tab_lines_deleted,composer_lines_added,composer_lines_deleted,non_ai_lines_added,non_ai_lines_deleted,message,commit_ts,created_at
a1b2c3d4,user_3k9x8q...,developer@company.com,company/repo,main,true,120,30,50,10,40,5,30,15,"Refactor: extract analytics client",2025-07-30T14:12:03.000Z,2025-07-30T14:12:30.000Z
e5f6g7h8,user_3k9x8q...,developer@company.com,company/repo,feature-branch,false,85,15,30,5,25,3,30,7,"Add error handling",2025-07-30T13:45:21.000Z,2025-07-30T13:45:45.000Z

Beispiel-Request

curl -L "https://api.cursor.com/analytics/ai-code/commits.csv?startDate=2025-07-01T00:00:00Z&endDate=now&user=user_3k9x8q..." \
  -u YOUR_API_KEY: \
  -o commits.csv

KI-Code-Änderungsmetriken abrufen (JSON, paginiert)

Rufe granulare akzeptierte KI-Änderungen ab, gruppiert nach deterministischer changeId. Nützlich zur Analyse akzeptierter KI-Events unabhängig von Commits.
GET /analytics/ai-code/changes

Response

{
  items: AiCodeChangeMetric[];
  totalCount: number;
  page: number;
  pageSize: number;
}

AiCodeChangeMetric Fields

FieldTypBeschreibung
changeIdstringDeterministische ID für die Änderung
userIdstringKodierte User-ID (z.B. user_abc123)
userEmailstringE-Mail-Adresse des Users
source”TAB""COMPOSER”Quelle der KI-Änderung
modelstringnullVerwendetes KI-Modell
totalLinesAddednumberGesamtanzahl hinzugefügter Zeilen
totalLinesDeletednumberGesamtanzahl gelöschter Zeilen
createdAtstringErfassungs-Zeitstempel (ISO-Format)
metadataArrayDatei-Metadaten (fileName kann im Privacy-Modus weggelassen werden)

Beispiel-Response

{
  "items": [
    {
      "changeId": "749356201",
      "userId": "user_3k9x8q...",
      "userEmail": "developer@company.com",
      "source": "COMPOSER",
      "model": null,
      "totalLinesAdded": 18,
      "totalLinesDeleted": 4,
      "createdAt": "2025-07-30T15:10:12.000Z",
      "metadata": [
        { "fileName": "src/analytics/report.ts", "fileExtension": "ts", "linesAdded": 12, "linesDeleted": 3 },
        { "fileName": "src/analytics/ui.tsx", "fileExtension": "tsx", "linesAdded": 6, "linesDeleted": 1 }
      ]
    }
  ],
  "totalCount": 128,
  "page": 1,
  "pageSize": 200
}

Beispiel-Requests

Basis-Request:
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?startDate=14d&endDate=now&page=1&pageSize=200" \
  -u YOUR_API_KEY:
Nach User filtern (kodierte ID):
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=user_3k9x8q..." \
  -u YOUR_API_KEY:
Nach User filtern (E-Mail):
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=developer@company.com" \
  -u YOUR_API_KEY:

AI-Code-Änderungsmetriken herunterladen (CSV, Streaming)

Lade Änderungsmetrik-Daten im CSV-Format für große Datenextraktionen herunter.
GET /analytics/ai-code/changes.csv

Response

Headers:
  • Content-Type: text/csv; charset=utf-8

CSV-Spalten

SpalteTypBeschreibung
change_idstringDeterministische ID für die Änderung
user_idstringKodierte User-ID
user_emailstringE-Mail-Adresse des Users
sourcestringQuelle der AI-Änderung (TAB oder COMPOSER)
modelstringVerwendetes AI-Modell
total_lines_addednumberGesamtanzahl hinzugefügter Zeilen
total_lines_deletednumberGesamtanzahl gelöschter Zeilen
created_atstringErfassungszeitstempel (ISO-Format)
metadata_jsonstringJSON-stringifiziertes Array von Metadaten-Einträgen

Hinweise

  • metadata_json ist ein JSON-stringifiziertes Array von Metadaten-Einträgen (kann fileName im Privacy-Modus weglassen)
  • Beim Verarbeiten von CSV solltest du darauf achten, Felder in Anführungszeichen zu parsen

Beispiel-CSV-Output

change_id,user_id,user_email,source,model,total_lines_added,total_lines_deleted,created_at,metadata_json
749356201,user_3k9x8q...,developer@company.com,COMPOSER,gpt-4o,18,4,2025-07-30T15:10:12.000Z,"[{""fileName"":""src/analytics/report.ts"",""fileExtension"":""ts"",""linesAdded"":12,""linesDeleted"":3},{""fileName"":""src/analytics/ui.tsx"",""fileExtension"":""tsx"",""linesAdded"":6,""linesDeleted"":1}]"
749356202,user_3k9x8q...,developer@company.com,TAB,,8,2,2025-07-30T15:08:45.000Z,"[{""fileName"":""src/utils/helpers.ts"",""fileExtension"":""ts"",""linesAdded"":8,""linesDeleted"":2}]"

Beispiel-Request

curl -L "https://api.cursor.com/analytics/ai-code/changes.csv?startDate=30d&endDate=now" \
  -u YOUR_API_KEY: \
  -o changes.csv

Tipps

  • Nutze den user-Parameter, um schnell einen einzelnen Benutzer über alle Endpunkte hinweg zu filtern
  • Für große Datenextraktionen solltest du CSV-Endpunkte bevorzugen—sie streamen seitenweise 10.000 Datensätze serverseitig
  • isPrimaryBranch kann undefined sein, wenn der Client den Standard-Branch nicht auflösen konnte
  • commitTs ist der Commit-Zeitstempel; createdAt ist der Zeitpunkt der Datenaufnahme auf unseren Servern
  • Einige Felder können fehlen, wenn der Datenschutzmodus auf dem Client aktiviert ist

Changelog

  • Alpha-Release: Erste Endpunkte für Commits und Änderungen. Antwortstrukturen können sich basierend auf Feedback noch ändern