Acesse análises de código geradas por IA nos repositórios da sua equipe. Isso inclui uso de IA por commit e alterações de IA aceitas em nível granular.
A API está na primeira versão. A gente está ampliando as capacidades com base no feedback — conta pra gente quais endpoints você precisa!
- Disponibilidade: somente para equipes enterprise
- Status: Alpha (os formatos e campos de resposta podem mudar)
Todas as solicitações à API exigem autenticação com uma chave de API. Esta API usa o mesmo esquema de autenticação da Admin API que outros endpoints.
Para instruções detalhadas de autenticação, confere Admin API authentication.
Todos os endpoints da API usam:
- 5 requisições por minuto, por equipe, por endpoint
Todos os endpoints abaixo aceitam os mesmos parâmetros via query string:
| Parâmetro | Tipo | Obrigatório | Descrição | |
startDate | string | date | Não | String de data ISO, o literal “now” ou dias relativos como “7d” (equivale a agora - 7 dias). Padrão: agora - 7 dias |
endDate | string | date | Não | String de data ISO, o literal “now” ou dias relativos como “0d”. Padrão: agora |
page | number | Não | Número da página (iniciado em 1). Padrão: 1 | |
pageSize | number | Não | Resultados por página. Padrão: 100, máx.: 1000 | |
user | string | Não | Filtro opcional por um único usuário. Aceita email (por exemplo, [email protected]), ID codificado (por exemplo, user_abc123…) ou ID numérico (por exemplo, 42) | |
As respostas retornam userId como um ID externo codificado com o prefixo user_. Esse valor é estável para consumo via API.
Semântica e como as métricas são calculadas
- Fontes: “TAB” representa completações inline que foram aceitas; “COMPOSER” representa diffs aceitos do Composer
- Métricas de linhas: tabLinesAdded/Deleted e composerLinesAdded/Deleted são contabilizadas separadamente; nonAiLinesAdded/Deleted são derivadas como max(0, totalLines - AI lines)
- Modo de privacidade: Se ativado no cliente, alguns metadados (como fileName) podem ser omitidos
- Informações de branch: isPrimaryBranch é true quando a branch atual é igual à branch padrão do repositório; pode ser undefined se as informações do repositório não estiverem disponíveis
Você pode analisar esse arquivo para entender como commits e alterações são detectados e reportados.
Retorna métricas agregadas por commit que atribuem linhas ao TAB, COMPOSER e conteúdo não gerado por IA.
GET /analytics/ai-code/commits
{
items: AiCommitMetric[];
totalCount: number;
page: number;
pageSize: number;
}
| Campo | Tipo | Descrição | |
commitHash | string | Hash do commit do Git | |
userId | string | ID de usuário codificado (ex.: user_abc123) | |
userEmail | string | Endereço de e-mail do usuário | |
repoName | string | null | Nome do repositório |
branchName | string | null | Nome da branch |
isPrimaryBranch | boolean | null | Indica se é a branch primária |
totalLinesAdded | number | Total de linhas adicionadas no commit | |
totalLinesDeleted | number | Total de linhas removidas no commit | |
tabLinesAdded | number | Linhas adicionadas via completações com TAB | |
tabLinesDeleted | number | Linhas removidas via completações com TAB | |
composerLinesAdded | number | Linhas adicionadas via Composer | |
composerLinesDeleted | number | Linhas removidas via Composer | |
nonAiLinesAdded | number | null | Linhas não geradas por IA adicionadas |
nonAiLinesDeleted | number | null | Linhas não geradas por IA removidas |
message | string | null | Mensagem do commit |
commitTs | string | null | Timestamp do commit (formato ISO) |
createdAt | string | Timestamp de ingestão (formato ISO) | |
{
"items": [
{
"commitHash": "a1b2c3d4",
"userId": "user_3k9x8q...",
"userEmail": "[email protected]",
"repoName": "company/repo",
"branchName": "main",
"isPrimaryBranch": true,
"totalLinesAdded": 120,
"totalLinesDeleted": 30,
"tabLinesAdded": 50,
"tabLinesDeleted": 10,
"composerLinesAdded": 40,
"composerLinesDeleted": 5,
"nonAiLinesAdded": 30,
"nonAiLinesDeleted": 15,
"message": "Refatorar: extrair cliente de analytics"
"commitTs": "2025-07-30T14:12:03.000Z",
"createdAt": "2025-07-30T14:12:30.000Z"
}
],
"totalCount": 42,
"page": 1,
"pageSize": 100
}
Solicitação básica:
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=7d&endDate=now&page=1&pageSize=100" \
-u SUA_CHAVE_DA_API:
Filtrar por usuário (e-mail):
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=2025-06-01T00:00:00Z&endDate=now&[email protected]" \
-u SUA_CHAVE_DE_API:
Baixa dados de métricas de commits em CSV para extrações em grande escala.
GET /analytics/ai-code/commits.csv
Cabeçalhos:
- Content-Type: text/csv; charset=utf-8
Colunas CSV
| Coluna | Tipo | Descrição |
commit_hash | string | Hash do commit do Git |
user_id | string | ID de usuário codificado |
user_email | string | Endereço de e-mail do usuário |
repo_name | string | Nome do repositório |
branch_name | string | Nome da branch |
is_primary_branch | boolean | Se esta é a branch principal |
total_lines_added | number | Total de linhas adicionadas no commit |
total_lines_deleted | number | Total de linhas removidas no commit |
tab_lines_added | number | Linhas adicionadas via completações com TAB |
tab_lines_deleted | number | Linhas removidas via completações com TAB |
composer_lines_added | number | Linhas adicionadas via Composer |
composer_lines_deleted | number | Linhas removidas via Composer |
non_ai_lines_added | number | Linhas não geradas por IA adicionadas |
non_ai_lines_deleted | number | Linhas não geradas por IA removidas |
message | string | Mensagem do commit |
commit_ts | string | Carimbo de data e hora do commit (formato ISO) |
created_at | string | Carimbo de data e hora de ingestão (formato ISO) |
Exemplo de saída 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...,[email protected],company/repo,main,true,120,30,50,10,40,5,30,15,"Refatoração: extrair cliente de analytics",2025-07-30T14:12:03.000Z,2025-07-30T14:12:30.000Z
e5f6g7h8,user_3k9x8q...,[email protected],company/repo,feature-branch,false,85,15,30,5,25,3,30,7,"Adicionar tratamento de erro",2025-07-30T13:45:21.000Z,2025-07-30T13:45:45.000Z
curl -L "https://api.cursor.com/analytics/ai-code/commits.csv?startDate=2025-07-01T00:00:00Z&endDate=now&user=user_3k9x8q..." \
-u SUA_CHAVE_DA_API: \
-o commits.csv
Recupera alterações granulares de IA aceitas, agrupadas por changeId determinístico. Útil para analisar eventos de IA aceitos independentemente dos commits.
GET /analytics/ai-code/changes
{
items: AiCodeChangeMetric[];
totalCount: number;
page: number;
pageSize: number;
}
Campos de AiCodeChangeMetric
| Campo | Tipo | Descrição | |
changeId | string | ID determinístico da alteração | |
userId | string | ID de usuário codificado (por exemplo, user_abc123) | |
userEmail | string | Endereço de e-mail do usuário | |
source | ”TAB" | "COMPOSER” | Origem da alteração gerada por IA |
model | string | null | Modelo de IA utilizado |
totalLinesAdded | number | Total de linhas adicionadas | |
totalLinesDeleted | number | Total de linhas removidas | |
createdAt | string | Timestamp de ingestão (formato ISO) | |
metadata | Array | Metadados do arquivo (fileName pode ser omitido no modo de privacidade) | |
{
"items": [
{
"changeId": "749356201",
"userId": "user_3k9x8q...",
"userEmail": "[email protected]",
"fonte": "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
}
Solicitação básica:
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?startDate=14d&endDate=now&page=1&pageSize=200" \
-u SUA_CHAVE_DA_API:
Filtrar por usuário (ID criptografado):
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=user_3k9x8q..." \
-u SUA_API_KEY:
Filtrar por usuário (e-mail):
curl -X GET "https://api.cursor.com/analytics/ai-code/[email protected]" \
-u SUA_API_KEY:
Baixar métricas de alterações de IA (CSV, streaming)
Baixa métricas de alterações em formato CSV para extrações de grandes volumes de dados.
GET /analytics/ai-code/changes.csv
Cabeçalhos:
- Content-Type: text/csv; charset=utf-8
| Coluna | Tipo | Descrição |
change_id | string | ID determinístico da alteração |
user_id | string | ID de usuário codificado |
user_email | string | Endereço de e-mail do usuário |
source | string | Origem da alteração de IA (TAB ou COMPOSER) |
model | string | Modelo de IA usado |
total_lines_added | number | Total de linhas adicionadas |
total_lines_deleted | number | Total de linhas excluídas |
created_at | string | Carimbo de data/hora de ingestão (formato ISO) |
metadata_json | string | Array de metadados serializado em JSON |
- metadata_json é um array de metadados serializado em JSON (pode omitir fileName no modo de privacidade)
- Ao consumir CSV, lembra de fazer o parse de campos entre aspas
change_id,user_id,user_email,origem,modelo,total_de_linhas_adicionadas,total_de_linhas_excluídas,criado_em,metadata_json
749356201,user_3k9x8q...,[email protected],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...,[email protected],TAB,,8,2,2025-07-30T15:08:45.000Z,"[{""fileName"":""src/utils/helpers.ts"",""fileExtension"":""ts"",""linesAdded"":8,""linesDeleted"":2}]"
curl -L "https://api.cursor.com/analytics/ai-code/changes.csv?startDate=30d&endDate=now" \
-u SUA_API_KEY: \
-o changes.csv
- Usa o parâmetro
user pra filtrar rapidinho um único usuário em todos os endpoints
- Pra extrações grandes de dados, prefere os endpoints CSV — eles fazem streaming em páginas de 10.000 registros no lado do servidor
isPrimaryBranch pode ser indefinido se o cliente não conseguiu resolver a branch padrão
commitTs é o timestamp do commit; createdAt é o horário de ingestão nos nossos servidores
- Alguns campos podem estar ausentes quando o modo de privacidade tá habilitado no cliente
- Versão alpha: Endpoints iniciais para commits e mudanças. Os formatos de resposta podem evoluir com base no feedback