Analytics API
A Analytics API oferece uma visão abrangente sobre o uso do Cherri Code pela equipe, incluindo métricas de codificação assistida por AI, usuários ativos, uso de modelos e mais.
- A Analytics API usa Basic Authentication. A maioria dos endpoints exige uma API key com escopo de admin (
admin:*). A análise de Bugbot review exige o escoporead:*. Gere uma chave no Cherri Code Dashboard → API Keys. - Para detalhes sobre autenticação, limite de taxa e boas práticas, consulte a API Overview.
- Disponibilidade: Somente para equipes corporativas
Endpoints disponíveis
Edições do agente
/analytics/team/agent-editsObtenha métricas sobre edições de código sugeridas por IA e aceitas pela sua equipe no Cherri Code.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/agent-edits" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "event_date": "2025-01-15", "total_suggested_diffs": 145, "total_accepted_diffs": 98, "total_rejected_diffs": 47, "total_green_lines_accepted": 820, "total_red_lines_accepted": 160, "total_green_lines_rejected": 210, "total_red_lines_rejected": 60, "total_green_lines_suggested": 1030, "total_red_lines_suggested": 220, "total_lines_suggested": 1250, "total_lines_accepted": 980 }, { "event_date": "2025-01-16", "total_suggested_diffs": 132, "total_accepted_diffs": 89, "total_rejected_diffs": 43, "total_green_lines_accepted": 740, "total_red_lines_accepted": 150, "total_green_lines_rejected": 185, "total_red_lines_rejected": 55, "total_green_lines_suggested": 925, "total_red_lines_suggested": 175, "total_lines_suggested": 1100, "total_lines_accepted": 890 } ], "params": { "metric": "agent-edits", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Uso do Tab
/analytics/team/tabsObtenha métricas de uso do preenchimento automático do Tab pela sua equipe.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/tabs" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "event_date": "2025-01-15", "total_suggestions": 5420, "total_accepts": 3210, "total_rejects": 2210, "total_green_lines_accepted": 4120, "total_red_lines_accepted": 2000, "total_green_lines_rejected": 1480, "total_red_lines_rejected": 730, "total_green_lines_suggested": 5600, "total_red_lines_suggested": 2740, "total_lines_suggested": 8340, "total_lines_accepted": 6120 }, { "event_date": "2025-01-16", "total_suggestions": 4980, "total_accepts": 3050, "total_rejects": 1930, "total_green_lines_accepted": 3890, "total_red_lines_accepted": 1890, "total_green_lines_rejected": 1350, "total_red_lines_rejected": 580, "total_green_lines_suggested": 5240, "total_red_lines_suggested": 2650, "total_lines_suggested": 7890, "total_lines_accepted": 5780 } ], "params": { "metric": "tabs", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Usuários ativos diários (DAU)
/analytics/team/dauRetorna a contagem diária de usuários ativos da sua equipe. DAU é o número de usuários únicos que usaram o Cherri Code em um determinado dia. Um usuário ativo é aquele que usou pelo menos uma funcionalidade de IA no Cherri Code.
A resposta inclui métricas detalhadas de DAU para a CLI do Cherri Code, agentes em nuvem e BugBot.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/dau?startDate=14d&endDate=today" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "date": "2025-01-15", "dau": 42, "cli_dau": 5, "cloud_agent_dau": 37, "bugbot_dau": 10 }, { "date": "2025-01-16", "dau": 38, "cli_dau": 4, "cloud_agent_dau": 34, "bugbot_dau": 12 } ], "params": { "metric": "dau", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Versões do cliente
/analytics/team/client-versionsRetorna a distribuição das versões do cliente Cherri Code usadas pela sua equipe (o padrão é considerar os últimos 7 dias). Informamos a versão mais recente de cada usuário por dia (se um usuário tiver instalado várias versões, informamos a mais recente).
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/client-versions" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "event_date": "2025-01-01", "client_version": "0.42.3", "user_count": 35, "percentage": 0.833 }, { "event_date": "2025-01-01", "client_version": "0.42.2", "user_count": 7, "percentage": 0.167 } ], "params": { "metric": "client-versions", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Uso de modelos
/analytics/team/modelsObtenha métricas sobre o uso de modelos de IA pela sua equipe.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/models" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "date": "2025-01-15", "model_breakdown": { "claude-sonnet-4.5": { "messages": 1250, "users": 28 }, "gpt-4o": { "messages": 450, "users": 15 }, "claude-opus-4.5": { "messages": 320, "users": 12 } } }, { "date": "2025-01-16", "model_breakdown": { "claude-sonnet-4.5": { "messages": 1180, "users": 26 }, "gpt-4o": { "messages": 420, "users": 14 } } } ], "params": { "metric": "models", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Principais extensões de arquivos
/analytics/team/top-file-extensionsRetorna os arquivos mais editados pela sua equipe no Cherri Code. Retorna as 5 extensões de arquivo mais frequentes por dia, com base no volume de sugestões.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/top-file-extensions?startDate=30d&endDate=today" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "event_date": "2025-01-15", "file_extension": "tsx", "total_files": 156, "total_accepts": 98, "total_rejects": 45, "total_lines_suggested": 3230, "total_lines_accepted": 2340, "total_lines_rejected": 890 }, { "event_date": "2025-01-15", "file_extension": "ts", "total_files": 142, "total_accepts": 89, "total_rejects": 38, "total_lines_suggested": 2850, "total_lines_accepted": 2100, "total_lines_rejected": 750 } ], "params": { "metric": "top-files", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Adoção de MCP
/analytics/team/mcpObtenha métricas sobre a adoção de ferramentas MCP (Model Context Protocol) pela sua equipe. Retorna contagens diárias de adoção detalhadas por nome da ferramenta e do servidor MCP.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/mcp" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "event_date": "2025-01-15", "tool_name": "read_file", "mcp_server_name": "filesystem", "usage": 245 }, { "event_date": "2025-01-15", "tool_name": "search_web", "mcp_server_name": "brave-search", "usage": 128 }, { "event_date": "2025-01-16", "tool_name": "read_file", "mcp_server_name": "filesystem", "usage": 231 } ], "params": { "metric": "mcp", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Adoção de comandos
/analytics/team/commandsObtenha métricas sobre a adoção de comandos do Cherri Code pela sua equipe. Retorna contagens diárias de adoção por nome de comando.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/commands" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "event_date": "2025-01-15", "command_name": "explain", "usage": 89 }, { "event_date": "2025-01-15", "command_name": "refactor", "usage": 45 }, { "event_date": "2025-01-16", "command_name": "explain", "usage": 92 } ], "params": { "metric": "commands", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Adoção do modo Plan
/analytics/team/plansObtenha métricas sobre a adoção do modo Plan pela sua equipe. Retorna contagens diárias de adoção por modelo de IA usado na geração de planos.
A API retorna default como nome do modelo quando um usuário tem a seleção de modelo Auto habilitada. Isso corresponde ao que os usuários veem como "Auto" na interface do Cherri Code.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/plans" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "event_date": "2025-01-15", "model": "claude-sonnet-4.5", "usage": 156 }, { "event_date": "2025-01-15", "model": "default", "usage": 42 }, { "event_date": "2025-01-16", "model": "claude-sonnet-4.5", "usage": 148 } ], "params": { "metric": "plans", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Adoção de Skills
/analytics/team/skillsObtenha métricas sobre a adoção de Skills pela sua equipe. Retorna contagens diárias de adoção por nome de skill.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/skills" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "event_date": "2025-01-15", "skill_name": "react-best-practices", "usage": 53 }, { "event_date": "2025-01-15", "skill_name": "usage-billing", "usage": 41 }, { "event_date": "2025-01-16", "skill_name": "react-best-practices", "usage": 48 } ], "params": { "metric": "skills", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Adoção do modo Ask
/analytics/team/ask-modeObtenha métricas sobre a adoção do modo Ask pela sua equipe. Retorna contagens diárias de adoção por modelo de IA usado nas consultas do modo Ask.
Parâmetros
startDate string
endDate string
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/team/ask-mode" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "event_date": "2025-01-15", "model": "claude-sonnet-4.5", "usage": 203 }, { "event_date": "2025-01-15", "model": "gpt-4o", "usage": 67 }, { "event_date": "2025-01-16", "model": "claude-sonnet-4.5", "usage": 198 } ], "params": { "metric": "ask-mode", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31" }}Conversation Insights
/analytics/team/conversation-insightsObtenha os mesmos dados agregados do Conversation Insights exibidos no dashboard. Este endpoint retorna insights agregados, não exportações brutas nem conteúdo bruto de conversas.
Disponível apenas para equipes corporativas com o Conversation Insights habilitado. Se Desativar Conversation Insights estiver ativado nas configurações da equipe, este endpoint retornará 401.
Para filtrar por usuário, use o parâmetro de consulta compartilhado users descrito em Endpoints em nível de equipe. A filtragem por grupos SCIM (System for Cross-domain Identity Management) está disponível apenas na UI do dashboard e não é compatível com a Analytics API.
intents e complexity descrevem conversas inteiras.
categories, guidanceLevels e workTypes descrevem o trabalho em segmentos de conversa.
Parâmetros
startDate string
endDate string
include string | string[]
intents, complexity, categories, guidanceLevels e workTypes. Você pode passar include como uma lista separada por vírgulas, como include=intents,complexity, ou repeti-lo, como include=intents&include=workTypes.users string
[email protected],user_abc123.curl -X GET "https://api.cursor.com/analytics/team/conversation-insights?startDate=2026-03-01&endDate=2026-03-07&include=intents,complexity,categories,guidanceLevels,workTypes&[email protected],[email protected]" \ -u YOUR_API_KEY:Resposta:
{ "data": { "intents": { "distribution": [ { "intent": "Write Code", "count": 18 }, { "intent": "Ask", "count": 7 }, { "intent": "Plan", "count": 3 } ], "topValues": [ { "intent": "Write Code", "count": 18 }, { "intent": "Ask", "count": 7 } ], "timeSeries": [ { "date": "2026-03-01", "intent": "Ask", "count": 2 }, { "date": "2026-03-02", "intent": "Write Code", "count": 6 } ], "subcategories": { "askMode": [ { "subcategory": "error_fix", "count": 4 } ], "planMode": [ { "subcategory": "implementation", "count": 3 } ], "writeCode": [ { "subcategory": "feature", "count": 11 } ] } }, "complexity": { "distribution": [ { "complexity": "high", "count": 12 }, { "complexity": "medium", "count": 10 } ], "timeSeries": [ { "date": "2026-03-01", "complexity": "medium", "count": 4 }, { "date": "2026-03-02", "complexity": "high", "count": 5 } ] }, "categories": { "distribution": [ { "category": "New Features", "count": 9 }, { "category": "Bug Fixing & Debugging", "count": 6 } ], "timeSeries": [ { "date": "2026-03-01", "category": "Bug Fixing & Debugging", "count": 2 }, { "date": "2026-03-02", "category": "New Features", "count": 4 } ] }, "guidanceLevels": { "distribution": [ { "guidanceLevel": "high", "count": 8 }, { "guidanceLevel": "medium", "count": 7 } ], "timeSeries": [ { "date": "2026-03-01", "guidanceLevel": "medium", "count": 3 }, { "date": "2026-03-02", "guidanceLevel": "high", "count": 4 } ] }, "workTypes": { "distribution": [ { "workType": "new_feature", "count": 9 }, { "workType": "bug", "count": 6 } ], "timeSeries": [ { "date": "2026-03-01", "workType": "bug", "count": 2 }, { "date": "2026-03-02", "workType": "new_feature", "count": 4 } ] } }, "params": { "metric": "conversation-insights", "teamId": 12345, "startDate": "2026-03-01", "endDate": "2026-03-07", "include": [ "intents", "complexity", "categories", "guidanceLevels", "workTypes" ] }}Ranqueamento
/analytics/team/leaderboardObtenha um ranqueamento dos membros da equipe com base nas métricas de uso de IA.
Comportamento:
- Sem filtro de usuários: retorna os usuários classificados pela métrica especificada (padrão: linhas aceitas combinadas)
- Com filtro de usuários: retorna os usuários que correspondem ao filtro (com suas posições reais no ranqueamento de toda a equipe)
- Oferece suporte à paginação para equipes com muitos membros
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)Retorna ranqueamentos separados para o preenchimento automático por Tab e edições do agente. Ao filtrar por usuários, eles aparecem com sua posição real no ranqueamento de toda a equipe, e não com uma posição filtrada. Por exemplo, se você solicitar um usuário que ocupa a posição #45 no geral, ele aparecerá com rank: 45.
# Obter a primeira página do leaderboard (10 principais usuários)curl -X GET "https://api.cursor.com/analytics/team/leaderboard" \ -u YOUR_API_KEY:# Obter a segunda página com tamanho de página personalizadocurl -X GET "https://api.cursor.com/analytics/team/leaderboard?page=2&pageSize=20" \ -u YOUR_API_KEY:# Filtrar por usuários específicoscurl -X GET "https://api.cursor.com/analytics/team/[email protected],[email protected]" \ -u YOUR_API_KEY:Resposta:
{ "data": { "tab_leaderboard": { "data": [ { "email": "[email protected]", "user_id": "user_abc123", "profile_picture_url": "https://example.com/avatars/alice.jpg", "total_accepts": 1334, "total_lines_accepted": 3455, "total_lines_suggested": 15307, "line_acceptance_ratio": 0.2256519892590384, "accept_ratio": 0.2330827067669173, "rank": 1 }, { "email": "[email protected]", "user_id": "user_def789", "profile_picture_url": "https://example.com/avatars/bob.jpg", "total_accepts": 796, "total_lines_accepted": 2090, "total_lines_suggested": 7689, "line_acceptance_ratio": 0.2718168812589414, "accept_ratio": 0.2731256599787746, "rank": 2 } ], "total_users": 142 }, "agent_leaderboard": { "data": [ { "email": "[email protected]", "user_id": "user_abc123", "profile_picture_url": "https://example.com/avatars/alice.jpg", "total_accepts": 914, "total_lines_accepted": 65947, "total_lines_suggested": 201467, "line_acceptance_ratio": 0.3273465219182842, "rank": 1 }, { "email": "[email protected]", "user_id": "user_def789", "profile_picture_url": "https://example.com/avatars/bob.jpg", "total_accepts": 843, "total_lines_accepted": 61709, "total_lines_suggested": 51092, "line_acceptance_ratio": 1.2077924536684573, "rank": 2 } ], "total_users": 142 } }, "pagination": { "page": 1, "pageSize": 10, "totalUsers": 142, "totalPages": 15, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "leaderboard", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 10 }}Análises do Bugbot
/analytics/team/bugbotObtenha análises das revisões do Bugbot por PR da sua equipe, incluindo a quantidade de issues por gravidade e quantas foram resolvidas.
Para dados por revisão, incluindo o custo faturado e findings individuais, use análise de Bugbot review.
Parâmetros
startDate string
endDate string
prState string
merged ou all. Padrão: merged. Use merged apenas para análises de PRs mergeadas. Use all para análises de PRs em todos os status.repo string
https://github.com/org/repo.git ou github.com/org/repo). Normalizado para host/owner/repo.page number
1pageSize number
100, máx.: 250)# Obter o analytics de PRs do Bugbot dos últimos 7 dias (janela padrão)curl -X GET "https://api.cursor.com/analytics/team/bugbot" \ -u YOUR_API_KEY:# Filtrar por repositório e intervalo de datascurl -X GET "https://api.cursor.com/analytics/team/bugbot?repo=github.com/acme/app&startDate=2025-01-01&endDate=2025-01-31" \ -u YOUR_API_KEY:# Paginar resultadoscurl -X GET "https://api.cursor.com/analytics/team/bugbot?page=2&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": [ { "repo": "github.com/acme/app", "pr_number": 42, "timestamp": "2025-01-21T00:00:00.000Z", "reviews": 3, "issues": { "total": 5, "by_severity": { "high": 1, "medium": 2, "low": 2 } }, "issues_resolved": { "total": 2, "by_severity": { "high": 1, "medium": 1, "low": 0 } } } ], "pagination": { "page": 1, "pageSize": 100, "totalItems": 1, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }, "params": { "metric": "bugbot", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "repo": "github.com/acme/app", "prState": "merged", "page": 1, "pageSize": 100 }}Análise de Bugbot review
/analytics/team/bugbot-reviewsRetorna um item para cada Bugbot review concluída, incluindo o commit revisado, a quantidade de findings, o custo faturado e dados de resolução por finding.
Inclui reviews publicadas e dry-run reviews. Findings publicadas são identificadas por comment_id e resolution_status. Já as findings de dry-run retornam title, description e locations, pois nada é publicado no SCM.
Requer uma API key com escopo read:*.
Parâmetros
startDate string
endDate string
repo string
host/owner/repo. O protocolo e o sufixo .git são opcionais.prNumber number
page number
1.pageSize number
100, máximo: 250.dryRun boolean
true) ou reviews publicadas (false).curl --get https://api.cursor.com/analytics/team/bugbot-reviews \ -u YOUR_API_KEY: \ --data-urlencode 'startDate=2026-06-01' \ --data-urlencode 'endDate=2026-06-29' \ --data-urlencode 'repo=github.com/your-org/your-repo' \ --data-urlencode 'prNumber=42' \ --data-urlencode 'page=1' \ --data-urlencode 'pageSize=100'curl --get https://api.cursor.com/analytics/team/bugbot-reviews \ -u YOUR_API_KEY: \ --data-urlencode 'dryRun=true' \ --data-urlencode 'repo=github.com/your-org/your-repo' \ --data-urlencode 'prNumber=42'Resposta (avaliação publicada):
{ "data": [ { "request_id": "6e0d261c-86a2-4383-89f0-9162c1c10662", "timestamp": "2026-06-29T19:42:18.000Z", "repo": "github.com/your-org/your-repo", "repo_node_id": "R_kgDOABCDEF", "pr_number": 42, "commit_sha": "9f3c2a1b7d8e4f5061728394a5b6c7d8e9f0a1b2", "bugs_found": 2, "cost_cents": 42.5, "dry_run": false, "publication_status": "posted", "bugs": [ { "comment_id": "2147483999", "resolution_status": "resolved", "severity": "high" }, { "comment_id": "2147484000", "resolution_status": "unresolved", "severity": "medium" } ] } ], "pagination": { "page": 1, "pageSize": 100, "totalItems": 1, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }, "params": { "metric": "bugbot-reviews", "teamId": 12345, "startDate": "2026-06-01", "endDate": "2026-06-29", "repo": "github.com/your-org/your-repo", "prNumber": 42, "page": 1, "pageSize": 100 }}Resposta (revisão dry-run):
{ "data": [ { "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "timestamp": "2026-06-29T20:15:03.000Z", "repo": "github.com/your-org/your-repo", "repo_node_id": "R_kgDOABCDEF", "pr_number": 42, "commit_sha": "9f3c2a1b7d8e4f5061728394a5b6c7d8e9f0a1b2", "bugs_found": 1, "cost_cents": null, "dry_run": true, "publication_status": "dry_run", "bugs": [ { "comment_id": null, "resolution_status": null, "severity": "medium", "title": "Unbounded retry loop", "description": "retry() recurses without a ceiling.", "locations": [ { "file": "src/net.ts", "start_line": 5, "end_line": 9 } ] } ] } ], "pagination": { "page": 1, "pageSize": 100, "totalItems": 1, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }, "params": { "metric": "bugbot-reviews", "teamId": 12345, "startDate": "2026-06-01", "endDate": "2026-06-29", "repo": "github.com/your-org/your-repo", "prNumber": 42, "dryRun": true, "page": 1, "pageSize": 100 }}repo_node_id, pr_number, commit_sha, cost_cents, bugs[].comment_id, bugs[].resolution_status e bugs[].severity podem ser null quando não estiverem disponíveis. cost_cents é null quando a revisão não é cobrada separadamente. Em revisões dry-run, bugs[].title, bugs[].description e bugs[].locations contêm o conteúdo do finding. Findings de dry-run têm comment_id: null e resolution_status: null porque nada é postado no SCM.
Para acionar uma revisão em modo de simulação, chame POST /bugbot/review com "dryRun": true. Consulte a documentação da API do Bugbot.
Endpoints por usuário
Os endpoints por usuário fornecem as mesmas métricas que os endpoints em nível de equipe, mas organizadas por usuário, com suporte à paginação. São ideais para gerar relatórios por usuário ou processar equipes grandes em lotes.
Parâmetros de consulta comuns
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
startDate | String de data | Não | Data de início do período de análise (padrão: há 7 dias) |
endDate | String de data | Não | Data de término do período de análise (padrão: hoje) |
page | number | Não | Número da página (padrão: 1) |
pageSize | number | Não | Número de usuários por página (padrão: 100, máximo: 500) |
users | string | Não | Limita a paginação a usuários específicos (e-mails ou IDs separados por vírgula, por exemplo, [email protected],user_abc123) |
Filtragem de usuários:
Ao fornecer o parâmetro users a endpoints por usuário:
- A paginação é filtrada: apenas os usuários especificados são incluídos no conjunto de resultados e nas contagens de paginação
- Útil para: obter dados detalhados de membros específicos da equipe sem precisar paginar por todos os usuários
- Exemplo: se você tiver 500 usuários, mas quiser dados de apenas 3 usuários específicos, filtre pelos e-mails deles para obter os 3 em uma única página
Observação: Endpoints por usuário aceitam os mesmos formatos de data e atalhos que endpoints em nível de equipe. Consulte a seção Formatos de data acima.
Formato da resposta
Todos os endpoints por usuário retornam dados neste formato:
{ "data": { "[email protected]": [ /* dados do usuário */ ], "[email protected]": [ /* dados do usuário */ ] }, "pagination": { "page": 1, "pageSize": 100, "totalUsers": 250, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "agent-edits", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 100, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Estrutura da resposta:
data- Objeto cujas chaves são endereços de e-mail de usuários; cada entrada contém uma matriz das métricas do respectivo usuáriopagination- Informações de paginaçãoparams- Parâmetros da solicitação retornadosuserMappings- Matriz que associa endereços de e-mail a IDs públicos de usuários nesta página. Útil para fazer referência cruzada com outras APIs ou criar links para perfis de usuários.
Endpoints disponíveis
Todos os endpoints por usuário seguem o padrão: /analytics/by-user/{metric}
GET /analytics/by-user/agent-edits- Edições do agente por usuárioGET /analytics/by-user/tabs- Uso do Tab por usuárioGET /analytics/by-user/models- Uso de modelos por usuárioGET /analytics/by-user/top-file-extensions- Principais arquivos por usuárioGET /analytics/by-user/client-versions- Versões do cliente por usuárioGET /analytics/by-user/mcp- Adoção do MCP por usuárioGET /analytics/by-user/commands- Adoção de comandos por usuárioGET /analytics/by-user/plans- Adoção de planos por usuárioGET /analytics/by-user/skills- Adoção de Skills por usuárioGET /analytics/by-user/ask-mode- Adoção do modo Ask por usuário
Edições do agente por usuário
/analytics/by-user/agent-editsObtém métricas de edições do agente por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/agent-edits?page=1&pageSize=50" \ -u YOUR_API_KEY:curl -X GET "https://api.cursor.com/analytics/by-user/[email protected],[email protected],[email protected]" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "event_date": "2025-01-15", "total_suggested_diffs": 145, "total_accepted_diffs": 98, "total_rejected_diffs": 47, "total_green_lines_accepted": 820, "total_red_lines_accepted": 160, "total_green_lines_rejected": 210, "total_red_lines_rejected": 60, "total_green_lines_suggested": 1030, "total_red_lines_suggested": 220, "total_lines_suggested": 1250, "total_lines_accepted": 980 }, { "event_date": "2025-01-16", "total_suggested_diffs": 132, "total_accepted_diffs": 89, "total_rejected_diffs": 43, "total_green_lines_accepted": 740, "total_red_lines_accepted": 150, "total_green_lines_rejected": 185, "total_red_lines_rejected": 55, "total_green_lines_suggested": 925, "total_red_lines_suggested": 175, "total_lines_suggested": 1100, "total_lines_accepted": 890 } ], "[email protected]": [ { "event_date": "2025-01-15", "total_suggested_diffs": 95, "total_accepted_diffs": 72, "total_rejected_diffs": 23, "total_green_lines_accepted": 450, "total_red_lines_accepted": 90, "total_green_lines_rejected": 120, "total_red_lines_rejected": 35, "total_green_lines_suggested": 570, "total_red_lines_suggested": 125, "total_lines_suggested": 695, "total_lines_accepted": 540 } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "agent-edits", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Uso do Tab por usuário
/analytics/by-user/tabsObtenha métricas de autocompletar do Tab por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/tabs?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "event_date": "2025-01-15", "total_suggestions": 320, "total_accepts": 210, "total_rejects": 110, "total_green_lines_accepted": 280, "total_red_lines_accepted": 120, "total_green_lines_rejected": 90, "total_red_lines_rejected": 45, "total_green_lines_suggested": 370, "total_red_lines_suggested": 165, "total_lines_suggested": 535, "total_lines_accepted": 400 } ], "[email protected]": [ { "event_date": "2025-01-15", "total_suggestions": 180, "total_accepts": 120, "total_rejects": 60, "total_green_lines_accepted": 150, "total_red_lines_accepted": 70, "total_green_lines_rejected": 50, "total_red_lines_rejected": 25, "total_green_lines_suggested": 200, "total_red_lines_suggested": 95, "total_lines_suggested": 295, "total_lines_accepted": 220 } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "tabs", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Uso de modelos por usuário
/analytics/by-user/modelsRetorna métricas de uso de modelos organizadas por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/models?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "date": "2025-01-15", "model_breakdown": { "claude-sonnet-4.5": { "messages": 85, "users": 1 }, "gpt-4o": { "messages": 32, "users": 1 } } } ], "[email protected]": [ { "date": "2025-01-15", "model_breakdown": { "claude-sonnet-4.5": { "messages": 64, "users": 1 } } } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "models", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Principais extensões de arquivo por usuário
/analytics/by-user/top-file-extensionsRetorna métricas das principais extensões de arquivo por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/top-file-extensions?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "event_date": "2025-01-15", "file_extension": "tsx", "total_files": 45, "total_accepts": 32, "total_rejects": 10, "total_lines_suggested": 890, "total_lines_accepted": 650, "total_lines_rejected": 240 }, { "event_date": "2025-01-15", "file_extension": "ts", "total_files": 38, "total_accepts": 28, "total_rejects": 8, "total_lines_suggested": 720, "total_lines_accepted": 540, "total_lines_rejected": 180 } ], "[email protected]": [ { "event_date": "2025-01-15", "file_extension": "py", "total_files": 22, "total_accepts": 18, "total_rejects": 4, "total_lines_suggested": 410, "total_lines_accepted": 340, "total_lines_rejected": 70 } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "top-files", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Versões do cliente por usuário
/analytics/by-user/client-versionsObtém métricas de versão do cliente por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/client-versions?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "event_date": "2025-01-15", "client_version": "0.42.3", "user_count": 1, "percentage": 1.0 } ], "[email protected]": [ { "event_date": "2025-01-15", "client_version": "0.42.2", "user_count": 1, "percentage": 1.0 } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "client-versions", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Adoção de MCP por usuário
/analytics/by-user/mcpObtenha métricas de adoção de ferramentas MCP por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/mcp?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "event_date": "2025-01-15", "tool_name": "read_file", "mcp_server_name": "filesystem", "usage": 45 }, { "event_date": "2025-01-16", "tool_name": "read_file", "mcp_server_name": "filesystem", "usage": 38 } ], "[email protected]": [ { "event_date": "2025-01-15", "tool_name": "search_web", "mcp_server_name": "brave-search", "usage": 23 } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "mcp", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Adoção de comandos por usuário
/analytics/by-user/commandsObtenha métricas de adoção de comandos por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/commands?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "event_date": "2025-01-15", "command_name": "explain", "usage": 12 }, { "event_date": "2025-01-16", "command_name": "explain", "usage": 15 } ], "[email protected]": [ { "event_date": "2025-01-15", "command_name": "refactor", "usage": 8 } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "commands", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Adoção do modo Plan por usuário
/analytics/by-user/plansObtenha métricas de adoção do modo Plan por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/plans?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "event_date": "2025-01-15", "model": "claude-sonnet-4.5", "usage": 23 }, { "event_date": "2025-01-16", "model": "claude-sonnet-4.5", "usage": 19 } ], "[email protected]": [ { "event_date": "2025-01-15", "model": "gpt-4o", "usage": 12 } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "plans", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Adoção de Skills por usuário
/analytics/by-user/skillsRetorna métricas de adoção de Skills por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/skills?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "event_date": "2025-01-15", "skill_name": "react-best-practices", "usage": 8 }, { "event_date": "2025-01-15", "skill_name": "create-rule", "usage": 3 }, { "event_date": "2025-01-16", "skill_name": "react-best-practices", "usage": 5 } ], "[email protected]": [ { "event_date": "2025-01-15", "skill_name": "commit-message-helper", "usage": 5 }, { "event_date": "2025-01-15", "skill_name": "create-skill", "usage": 2 } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "skills", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Adoção do modo Ask por usuário
/analytics/by-user/ask-modeObtém métricas de adoção do modo Ask por usuário, com suporte à paginação.
Parâmetros
startDate string
endDate string
page number
1pageSize number
users string
[email protected],user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/ask-mode?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "data": { "[email protected]": [ { "event_date": "2025-01-15", "model": "claude-sonnet-4.5", "usage": 34 }, { "event_date": "2025-01-16", "model": "claude-sonnet-4.5", "usage": 28 } ], "[email protected]": [ { "event_date": "2025-01-15", "model": "gpt-4o", "usage": 15 } ] }, "pagination": { "page": 1, "pageSize": 50, "totalUsers": 120, "totalPages": 3, "hasNextPage": true, "hasPreviousPage": false }, "params": { "metric": "ask-mode", "teamId": 12345, "startDate": "2025-01-01", "endDate": "2025-01-31", "page": 1, "pageSize": 50, "userMappings": [ { "id": "user_abc123", "email": "[email protected]" }, { "id": "user_def456", "email": "[email protected]" } ] }}Endpoints em nível de equipe
Os endpoints em nível de equipe fornecem métricas agregadas de toda a equipe ou de subconjuntos filtrados de usuários. Todos os endpoints permitem filtrar por intervalo de datas e, opcionalmente, por usuário.
Parâmetros de consulta comuns
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
startDate | String de data | Não | Data de início do período de análise (padrão: há 7 dias) |
endDate | String de data | Não | Data de término do período de análise (padrão: hoje) |
users | string | Não | Filtre os dados por usuários específicos (separados por vírgula). Cada valor pode ser um e-mail (por exemplo, [email protected]) ou um ID público de usuário (por exemplo, user_abc123). Você pode combinar os dois formatos. |
Filtragem de usuários:
O parâmetro users aceita uma lista de identificadores separados por vírgula. Cada identificador pode ser:
- Endereço de e-mail (por exemplo,
[email protected]) - Detectado automaticamente pela presença de@ - ID público de usuário (por exemplo,
user_abc123) - Detectado automaticamente pelo prefixouser_ - Formato misto - Você pode combinar e-mails e IDs na mesma solicitação
Exemplos:
# Filtrar apenas por e-mails[email protected],[email protected],[email protected]# Filtrar apenas por IDs de usuário públicos?users=user_abc123,user_def456,user_ghi789# Combinar e-mails e IDs[email protected],user_def456,[email protected]Quando você filtra por usuários, a API retorna dados apenas desses usuários específicos. Isso é útil para:
- Analisar membros ou grupos específicos da equipe (por exemplo, líderes de engenharia e equipes de projetos específicos)
- Gerar relatórios para um subconjunto de usuários
- Comparar métricas entre indivíduos selecionados
Formatos de data
Comportamento padrão:
Se você omitir startDate e endDate, a API usará, por padrão, os últimos 7 dias (de 7 dias atrás até hoje). Isso é ideal para consultas rápidas sem especificar datas.
Formatos padrão:
YYYY-MM-DD- Formato de data simples (por exemplo,2025-01-15) ← Recomendado- timestamps no formato ISO 8601 (por exemplo,
2025-01-15T00:00:00Z)
Atalhos:
nowoutoday- Data atual (às 00:00:00)yesterday- Data de ontem (às 00:00:00)<number>d- Dias atrás (por exemplo,7d= 7 dias atrás,30d= 30 dias atrás)
Observações importantes:
- A hora é ignorada: Todas as datas são consideradas no nível do dia (00:00:00 UTC). Enviar
2025-01-15T14:30:00Zequivale a enviar2025-01-15. - Use os formatos recomendados: Use
YYYY-MM-DDou atalhos para melhorar o suporte a cache HTTP. Valores de horário diferentes (comoT14:30:00ZeT08:00:00Z) impedem acertos no cache, mesmo que correspondam ao mesmo dia. - Intervalos de datas: Limitados a no máximo 30 dias.
Exemplos:
# Omita as datas para os últimos 7 dias (mais simples e melhor para o cache)curl "https://api.cursor.com/analytics/team/agent-edits"# Use o formato YYYY-MM-DD para um intervalo de datas específico (recomendado)?startDate=2025-01-01&endDate=2025-01-31# Use atalhos para os últimos 30 dias?startDate=30d&endDate=today# Use atalhos para os últimos 14 dias?startDate=14d&endDate=now# ❌ Não use timestamps: eles impedem o cache, e o horário é ignorado de qualquer forma?startDate=2025-01-15T14:30:00Z&endDate=2025-01-31T23:59:59ZLimites de taxa
Os limites de taxa são aplicados por equipe e redefinidos a cada minuto:
- Endpoints em nível de equipe: 100 solicitações por minuto por equipe
- Endpoints por usuário: 50 solicitações por minuto por equipe
O que acontece quando você ultrapassa o limite de taxa?
Quando você ultrapassa o limite de taxa, recebe uma resposta 429 Too Many Requests:
{ "error": "Too Many Requests", "message": "Rate limit exceeded. Please try again later."}Melhores práticas
Para conhecer as boas práticas gerais da API, incluindo backoff exponencial, estratégias de cache e tratamento de erros, consulte as Melhores práticas da Visão geral da API.
- Use paginação para equipes grandes: se sua equipe tiver mais de 100 usuários, use os endpoints por usuário com paginação para evitar tempos limite.
- Use o cache: os endpoints nos níveis de Team e User oferecem suporte a ETags. Armazene o ETag e use os headers
If-None-Matchpara reduzir transferências desnecessárias de dados. - Filtre por usuários quando possível: se precisar de dados apenas de usuários específicos, use o parâmetro
userspara reduzir o tempo de consulta. - Intervalos de datas: mantenha os intervalos de datas razoáveis (por exemplo, de 1 a 3 meses) para obter o melhor desempenho.