Accède aux analytics de code générées par l’IA pour les dépôts de ton équipe. Ça inclut l’usage de l’IA par commit ainsi que le détail des modifications assistées par IA acceptées.
L’API est en première release. On élargit les capacités selon vos retours — dis-nous quels endpoints il te faut !
  • Disponibilité: Réservée aux équipes Enterprise
  • Statut: Alpha (les schémas de réponse et les champs peuvent changer)

Authentification

Toutes les requêtes API nécessitent une authentification avec une clé API. Cette API utilise le même mécanisme d’authentification de l’Admin API que les autres endpoints. Pour des instructions d’authentification détaillées, vois Authentification de l’Admin API.

URL de base

Tous les points de terminaison de l’API utilisent :
https://api.cursor.com

Limites de débit

  • 5 requêtes par minute et par équipe, par endpoint

Paramètres de requête

Tous les endpoints ci-dessous acceptent les mêmes paramètres via la chaîne de requête :
ParameterTypeRequiredDescription
startDatestringdateNoChaîne de date ISO, le littéral “now”, ou des jours relatifs comme “7d” (équivaut à maintenant - 7 jours). Par défaut : maintenant - 7 jours
endDatestringdateNoChaîne de date ISO, le littéral “now”, ou des jours relatifs comme “0d”. Par défaut : maintenant
pagenumberNoNuméro de page (base 1). Par défaut : 1
pageSizenumberNoRésultats par page. Par défaut : 100, max. : 1000
userstringNoFiltre optionnel par utilisateur unique. Accepte un e-mail (p. ex. : developer@company.com), un ID encodé (p. ex. : user_abc123…), ou un ID numérique (p. ex. : 42)
Les réponses renvoient userId en tant qu’ID externe encodé avec le préfixe user_. Ce format est stable pour la consommation via l’API.

Sémantique et calcul des métriques

  • Sources : « TAB » représente les complétions en ligne acceptées ; « COMPOSER » représente les diffs acceptés depuis Composer
  • Métriques de lignes : tabLinesAdded/Deleted et composerLinesAdded/Deleted sont comptées séparément ; nonAiLinesAdded/Deleted sont calculées comme max(0, totalLines - AI lines)
  • Mode confidentialité : s’il est activé côté client, certaines métadonnées (comme fileName) peuvent être omises
  • Infos de branche : isPrimaryBranch est true lorsque la branche actuelle est identique à la branche par défaut du dépôt ; peut être undefined si les infos du dépôt ne sont pas disponibles
Tu peux parcourir ce fichier pour comprendre comment les commits et les changements sont détectés et remontés.

Endpoints

Récupérer les métriques de commits IA (JSON, paginé)

Récupère des métriques agrégées par commit qui attribuent les lignes à TAB, COMPOSER et non-IA.
GET /analytics/ai-code/commits

Réponse

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

Champs AiCommitMetric

FieldTypeDescription
commitHashstringHash du commit Git
userIdstringID utilisateur encodé (p. ex., user_abc123)
userEmailstringAdresse e-mail de l’utilisateur
repoNamestringnullNom du dépôt
branchNamestringnullNom de la branche
isPrimaryBranchbooleannullIndique s’il s’agit de la branche principale
totalLinesAddednumberNombre total de lignes ajoutées dans le commit
totalLinesDeletednumberNombre total de lignes supprimées dans le commit
tabLinesAddednumberLignes ajoutées via des complétions TAB
tabLinesDeletednumberLignes supprimées via des complétions TAB
composerLinesAddednumberLignes ajoutées via Composer
composerLinesDeletednumberLignes supprimées via Composer
nonAiLinesAddednumbernullLignes non IA ajoutées
nonAiLinesDeletednumbernullLignes non IA supprimées
messagestringnullMessage de commit
commitTsstringnullHorodatage du commit (format ISO)
createdAtstringHorodatage d’ingestion (format ISO)

Exemple de réponse

{
  "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
}

Exemples de requêtes

Requête simple :
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=7d&endDate=now&page=1&pageSize=100" \
  -u YOUR_API_KEY:
Filtrer par utilisateur (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:

Télécharger les métriques de commits IA (CSV, streaming)

Télécharge les métriques de commits au format CSV pour de larges extractions de données.
GET /analytics/ai-code/commits.csv

Réponse

En-têtes :
  • Content-Type: text/csv; charset=utf-8

Colonnes CSV

ColonneTypeDescription
commit_hashstringHachage de commit Git
user_idstringID utilisateur encodé
user_emailstringAdresse e-mail de l’utilisateur
repo_namestringNom du dépôt
branch_namestringNom de la branche
is_primary_branchbooleanIndique s’il s’agit de la branche principale
total_lines_addednumberNombre total de lignes ajoutées dans le commit
total_lines_deletednumberNombre total de lignes supprimées dans le commit
tab_lines_addednumberLignes ajoutées via les complétions TAB
tab_lines_deletednumberLignes supprimées via les complétions TAB
composer_lines_addednumberLignes ajoutées via Composer
composer_lines_deletednumberLignes supprimées via Composer
non_ai_lines_addednumberLignes non IA ajoutées
non_ai_lines_deletednumberLignes non IA supprimées
messagestringMessage de commit
commit_tsstringHorodatage du commit (format ISO)
created_atstringHorodatage d’ingestion (format ISO)

Exemple de sortie CSV

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

Exemple de requête

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

Obtenir les métriques de modifications de code IA (JSON, paginé)

Récupère des modifications IA acceptées de manière granulaire, groupées par changeId déterministe. Utile pour analyser les événements IA acceptés indépendamment des commits.
GET /analytics/ai-code/changes

Réponse

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

Champs AiCodeChangeMetric

ChampTypeDescription
changeIdstringID déterministe de la modification
userIdstringID utilisateur encodé (p. ex., user_abc123)
userEmailstringAdresse e-mail de l’utilisateur
source”TAB""COMPOSER”Source de la modification IA
modelstringnullModèle IA utilisé
totalLinesAddednumberNombre total de lignes ajoutées
totalLinesDeletednumberNombre total de lignes supprimées
createdAtstringHorodatage d’ingestion (format ISO)
metadataArrayMétadonnées de fichier (fileName peut être omis en mode confidentialité)

Exemple de réponse

{
  "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
}

Exemples de requêtes

Requête simple :
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?startDate=14d&endDate=now&page=1&pageSize=200" \
  -u YOUR_API_KEY:
Filtrer par utilisateur (ID encodé) :
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=user_3k9x8q..." \
  -u YOUR_API_KEY:
Filtrer par utilisateur (e-mail) :
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=developer@company.com" \
  -u YOUR_API_KEY:

Télécharger les métriques de modifications de code IA (CSV, streaming)

Télécharge les métriques de modifications au format CSV pour de larges extractions de données.
GET /analytics/ai-code/changes.csv

Réponse

En-têtes :
  • Content-Type: text/csv; charset=utf-8

Colonnes CSV

ColumnTypeDescription
change_idstringID déterministe de la modification
user_idstringID utilisateur encodé
user_emailstringAdresse e-mail de l’utilisateur
sourcestringSource de la modification IA (TAB ou COMPOSER)
modelstringModèle IA utilisé
total_lines_addednumberNombre total de lignes ajoutées
total_lines_deletednumberNombre total de lignes supprimées
created_atstringHorodatage d’ingestion (format ISO)
metadata_jsonstringTableau de métadonnées sérialisé en JSON

Notes

  • metadata_json est un tableau de métadonnées sérialisé en JSON (peut omettre fileName en mode confidentialité)
  • Lors de la lecture du CSV, pense à parser les champs entre guillemets

Exemple de sortie CSV

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}]"

Exemple de requête

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

Conseils

  • Utilise le paramètre user pour filtrer rapidement un seul utilisateur sur tous les endpoints
  • Pour les extractions de données volumineuses, préfère les endpoints CSV — ils diffusent côté serveur par pages de 10 000 enregistrements
  • isPrimaryBranch peut être indéfini si le client n’a pas pu déterminer la branche par défaut
  • commitTs est l’horodatage du commit ; createdAt est l’horodatage d’ingestion sur nos serveurs
  • Certains champs peuvent être absents lorsque le mode confidentialité est activé côté client

Journal des modifications

  • Version alpha : Premiers endpoints pour les commits et les modifications. Les formats de réponse pourront évoluer selon les retours