Analytics API
La API de Analytics proporciona información detallada sobre el uso de Cursor por parte de tu equipo, incluidas métricas de programación asistida con IA, usuarios activos, uso de modelos y más.
- La API de Analytics utiliza autenticación básica. La mayoría de los endpoints requieren una clave de API con ámbito de administrador y alcance
admin:*. La analítica de Bugbot review requiere el alcanceread:*. Genera una clave desde Cursor Dashboard → API Keys. - Para obtener más información sobre la autenticación, los límites de uso y las mejores prácticas, consulta la API Overview.
- Disponibilidad: Solo para equipos Enterprise
Endpoints disponibles
Ediciones del agente
/analytics/team/agent-editsObtén métricas sobre las ediciones de código sugeridas por IA que tu equipo ha aceptado con Cursor.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/agent-edits" \ -u YOUR_API_KEY:Respuesta:
{ "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 de Tab
/analytics/team/tabsObtén métricas sobre el uso del autocompletado de Tab en tu equipo.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/tabs" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Usuarios activos diarios (DAU)
/analytics/team/dauObtén el número diario de usuarios activos de tu equipo. DAU es el número de usuarios únicos que han usado Cursor en un día determinado. Un usuario activo es aquel que ha usado al menos una función de IA en Cursor.
La respuesta incluye métricas de DAU desglosadas por la CLI de Cursor, los agentes en la nube y BugBot.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/dau?startDate=14d&endDate=today" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Versiones del cliente
/analytics/team/client-versionsObtén la distribución de las versiones del cliente de Cursor que utiliza tu equipo (de forma predeterminada, los últimos 7 días). Informamos la versión más reciente de cada usuario por día (si un usuario ha instalado varias versiones, informamos la más reciente).
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/client-versions" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Consumo de modelos de IA
/analytics/team/modelsObtén métricas sobre el consumo de modelos de IA de tu equipo.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/models" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Extensiones de archivo más utilizadas
/analytics/team/top-file-extensionsObtiene los archivos más editados por tu equipo en Cursor. Devuelve las 5 extensiones de archivo más frecuentes por día según el volumen de sugerencias.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/top-file-extensions?startDate=30d&endDate=today" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Adopción de MCP
/analytics/team/mcpObtén métricas sobre la adopción de herramientas MCP (Model Context Protocol) en tu equipo. Devuelve el recuento diario de adopción, desglosado por nombre de herramienta y de servidor MCP.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/mcp" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Adopción de comandos
/analytics/team/commandsObtén métricas sobre la adopción de los comandos de Cursor en tu equipo. Devuelve el recuento diario de adopción, desglosado por nombre de comando.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/commands" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Adopción del modo Plan
/analytics/team/plansObtén métricas sobre la adopción del modo Plan en tu equipo. Devuelve el recuento diario de adopción desglosado por el modelo de IA utilizado para generar planes.
La API devuelve default como nombre del modelo cuando un usuario tiene activada la selección automática de modelos. Esto corresponde a lo que los usuarios ven como "Auto" en la interfaz de Cursor.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/plans" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Adopción de Skills
/analytics/team/skillsObtén métricas sobre la adopción de Skills en tu equipo. Devuelve el recuento diario de adopción desglosado por nombre de skill.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/skills" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Adopción del modo Ask
/analytics/team/ask-modeObtén métricas sobre la adopción del modo Ask en tu equipo. Devuelve el recuento diario de adopción, desglosado por el modelo de IA utilizado en las consultas del modo Ask.
Parámetros
startDate string
endDate string
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/team/ask-mode" \ -u YOUR_API_KEY:Respuesta:
{ "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" }}Insights de conversaciones
/analytics/team/conversation-insightsObtén los mismos datos agregados de Insights de conversaciones que se muestran en el panel de control. Este endpoint devuelve insights agregados, no exportaciones ni contenido de conversaciones sin procesar.
Disponible solo para equipos Enterprise con Insights de conversaciones activado. Si Desactivar Insights de conversaciones está activado en los ajustes del equipo, este endpoint devuelve 401.
Para filtrar por usuario, usa el parámetro de consulta compartido users descrito en Endpoints a nivel de equipo. El filtrado por grupos de SCIM solo está disponible en la UI del panel de control y no es compatible con Analytics API.
intents y complexity describen conversaciones completas.
categories, guidanceLevels y workTypes describen el trabajo en los distintos segmentos de una conversación.
Parámetros
startDate string
endDate string
include string | string[]
intents, complexity, categories, guidanceLevels y workTypes. Puedes pasar include como una lista separada por comas, por ejemplo, include=intents,complexity, o repetirlo, por ejemplo, include=intents&include=workTypes.users string
users=alice@example.com,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&users=alice@example.com,bob@example.com" \ -u YOUR_API_KEY:Respuesta:
{ "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" ] }}Clasificación
/analytics/team/leaderboardObtiene una clasificación de los miembros del equipo según las métricas de uso de IA.
Comportamiento:
- Sin filtrar por usuarios: Devuelve los usuarios ordenados según la métrica especificada (predeterminado: total de líneas aceptadas)
- Al filtrar por usuarios: Devuelve los usuarios que coinciden con el filtro (con su posición real en la clasificación de todo el equipo)
- Admite paginación para equipos con muchos miembros
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)Devuelve clasificaciones independientes para el autocompletado con Tab y las ediciones del Agente. Al filtrar por usuarios, estos aparecen con su posición real en la clasificación de todo el equipo, no con una posición filtrada. Por ejemplo, si solicitas un usuario que ocupa el puesto n.º 45 en la clasificación general, aparecerá con rank: 45.
# Obtener la primera página de la clasificación (los 10 mejores usuarios)curl -X GET "https://api.cursor.com/analytics/team/leaderboard" \ -u YOUR_API_KEY:# Obtener la segunda página con un tamaño de página personalizadocurl -X GET "https://api.cursor.com/analytics/team/leaderboard?page=2&pageSize=20" \ -u YOUR_API_KEY:# Filtrar por usuarios específicoscurl -X GET "https://api.cursor.com/analytics/team/leaderboard?users=alice@example.com,bob@example.com" \ -u TU_API_KEY:Respuesta:
{ "data": { "tab_leaderboard": { "data": [ { "email": "alice@example.com", "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": "bob@example.com", "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": "alice@example.com", "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": "bob@example.com", "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 }}Analítica de Bugbot
/analytics/team/bugbotObtén datos de analítica de las revisiones de Bugbot por PR de tu equipo, incluidos los recuentos de problemas por gravedad y cuántos se resolvieron.
Para consultar datos por revisión, incluido el coste facturado y los hallazgos individuales, usa analítica de Bugbot review.
Parámetros
startDate string
endDate string
prState string
merged o all. Predeterminado: merged. Usa merged para consultar solo la analítica de PR fusionadas. Usa all para consultar la analítica de todos los estados de PR.repo string
https://github.com/org/repo.git o github.com/org/repo). Se normaliza a host/owner/repo.page number
1pageSize number
100, máximo: 250)# Obtener analítica de las PR de Bugbot de los últimos 7 días (período predeterminado)curl -X GET "https://api.cursor.com/analytics/team/bugbot" \ -u YOUR_API_KEY:# Filtrar por repositorio y rango de fechascurl -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 los resultadoscurl -X GET "https://api.cursor.com/analytics/team/bugbot?page=2&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "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 }}Analítica de Bugbot review
/analytics/team/bugbot-reviewsDevuelve un elemento por cada Bugbot review completada, incluido el commit revisado, el número de hallazgos, el coste facturado y los datos de resolución de cada hallazgo.
Incluye tanto revisiones publicadas como revisiones dry run. Los hallazgos publicados se identifican mediante comment_id y resolution_status. En cambio, los hallazgos de dry run devuelven title, description y locations, ya que no se publica nada en el SCM.
Requiere una clave de API con el alcance read:*.
Parámetros
startDate string
endDate string
repo string
host/owner/repo. El protocolo y el sufijo .git son opcionales.prNumber number
page number
1.pageSize number
100; máximo: 250.dryRun boolean
true) o 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'Respuesta (revisión 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 }}Respuesta (revisión en modo 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 y bugs[].severity pueden ser null cuando no están disponibles. cost_cents es null cuando la revisión no se factura por separado. En las revisiones en modo dry-run, bugs[].title, bugs[].description y bugs[].locations contienen el contenido del hallazgo. Los hallazgos en dry-run tienen comment_id: null y resolution_status: null porque no se publica nada en el SCM.
Para iniciar una revisión en modo "dry run", llama a POST /bugbot/review con "dryRun": true. Consulta la documentación de la API de Bugbot.
Endpoints por usuario
Los endpoints por usuario proporcionan las mismas métricas que los endpoints de nivel de equipo, pero organizadas por usuario individual y con compatibilidad para paginación. Son ideales para generar informes por usuario o procesar equipos grandes en lotes.
Parámetros de consulta comunes
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
startDate | Cadena de fecha | No | Fecha de inicio del período de analítica (predeterminado: hace 7 días) |
endDate | Cadena de fecha | No | Fecha de finalización del período de analítica (predeterminado: hoy) |
page | número | No | Número de página (predeterminado: 1) |
pageSize | número | No | Número de usuarios por página (predeterminado: 100, máximo: 500) |
users | cadena | No | Limita la paginación a usuarios específicos (correos electrónicos o ID separados por comas; p. ej., alice@example.com,user_abc123) |
Filtrado de usuarios:
Al proporcionar el parámetro users a los endpoints por usuario:
- La paginación se filtra: Solo se incluyen los usuarios especificados en el conjunto de resultados y en los recuentos de paginación
- Útil para: Obtener datos detallados de miembros específicos del equipo sin tener que paginar por todos los usuarios
- Ejemplo: Si tienes 500 usuarios, pero solo quieres datos de 3 usuarios específicos, filtra por sus correos electrónicos para obtener los 3 en una sola página
Nota: Los endpoints por usuario admiten los mismos formatos de fecha y atajos que los endpoints de nivel de equipo. Consulta la sección Formato de fecha anterior.
Formato de respuesta
Todos los endpoints por usuario devuelven datos con este formato:
{ "data": { "user1@example.com": [ /* datos del usuario */ ], "user2@example.com": [ /* datos del usuario */ ] }, "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": "user1@example.com" }, { "id": "user_def456", "email": "user2@example.com" } ] }}Estructura de la respuesta:
data- Objeto indexado por direcciones de email de usuario, cada una con un array de las métricas de ese usuariopagination- Información de paginaciónparams- Parámetros de la solicitud devueltosuserMappings- Array que asigna direcciones de email a ID de usuario públicos para esta página. Útil para realizar referencias cruzadas con otras API o crear enlaces a perfiles de usuario.
Endpoints disponibles
Todos los endpoints por usuario siguen el patrón: /analytics/by-user/{metric}
GET /analytics/by-user/agent-edits- Ediciones del agente por usuarioGET /analytics/by-user/tabs- Uso de Tab por usuarioGET /analytics/by-user/models- Consumo de modelos por usuarioGET /analytics/by-user/top-file-extensions- Archivos principales por usuarioGET /analytics/by-user/client-versions- Versiones del cliente por usuarioGET /analytics/by-user/mcp- Adopción de MCP por usuarioGET /analytics/by-user/commands- Adopción de comandos por usuarioGET /analytics/by-user/plans- Adopción de planes por usuarioGET /analytics/by-user/skills- Adopción de skills por usuarioGET /analytics/by-user/ask-mode- Adopción del modo Ask por usuario
Ediciones de agentes por usuario
/analytics/by-user/agent-editsObtiene métricas de ediciones de agentes por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,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/agent-edits?users=alice@example.com,bob@example.com,carol@example.com" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "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 } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Uso de Tab por usuario
/analytics/by-user/tabsObtiene métricas de autocompletado de Tab por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/tabs?page=1&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "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 } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Consumo de modelos por usuario
/analytics/by-user/modelsObtiene métricas de consumo de modelos por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/models?page=1&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "date": "2025-01-15", "model_breakdown": { "claude-sonnet-4.5": { "messages": 85, "users": 1 }, "gpt-4o": { "messages": 32, "users": 1 } } } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Principales extensiones de archivos por usuario
/analytics/by-user/top-file-extensionsObtiene métricas de las extensiones de archivo más usadas, organizadas por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/top-file-extensions?page=1&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "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 } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Versiones del cliente por usuario
/analytics/by-user/client-versionsObtiene métricas de las versiones del cliente por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/client-versions?page=1&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "event_date": "2025-01-15", "client_version": "0.42.3", "user_count": 1, "percentage": 1.0 } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Adopción de MCP por usuario
/analytics/by-user/mcpObtén métricas de adopción de herramientas MCP por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/mcp?page=1&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "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 } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Adopción de comandos por usuario
/analytics/by-user/commandsObtiene métricas de adopción de comandos por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/commands?page=1&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "event_date": "2025-01-15", "command_name": "explain", "usage": 12 }, { "event_date": "2025-01-16", "command_name": "explain", "usage": 15 } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Adopción del modo Plan por usuario
/analytics/by-user/plansObtén métricas de adopción del modo Plan por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/plans?page=1&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "event_date": "2025-01-15", "model": "claude-sonnet-4.5", "usage": 23 }, { "event_date": "2025-01-16", "model": "claude-sonnet-4.5", "usage": 19 } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Adopción de skills por usuario
/analytics/by-user/skillsObtiene métricas de adopción de skills por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/skills?page=1&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "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 } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Adopción del modo Ask por usuario
/analytics/by-user/ask-modeObtiene métricas de adopción del modo Ask por usuario, con compatibilidad para paginación.
Parámetros
startDate string
endDate string
page number
1pageSize number
users string
alice@example.com,user_abc123)curl -X GET "https://api.cursor.com/analytics/by-user/ask-mode?page=1&pageSize=50" \ -u YOUR_API_KEY:Respuesta:
{ "data": { "alice@example.com": [ { "event_date": "2025-01-15", "model": "claude-sonnet-4.5", "usage": 34 }, { "event_date": "2025-01-16", "model": "claude-sonnet-4.5", "usage": 28 } ], "bob@example.com": [ { "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": "alice@example.com" }, { "id": "user_def456", "email": "bob@example.com" } ] }}Endpoints a nivel de equipo
Los endpoints a nivel de equipo proporcionan métricas agregadas de todo el equipo o de subconjuntos de usuarios filtrados. Todos los endpoints permiten filtrar por intervalo de fechas y, opcionalmente, por usuario.
Parámetros de consulta comunes
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
startDate | Cadena de fecha | No | Fecha de inicio del período de analítica (predeterminado: hace 7 días) |
endDate | Cadena de fecha | No | Fecha de fin del período de analítica (predeterminado: hoy) |
users | cadena | No | Filtra los datos por usuarios específicos (separados por comas). Cada valor puede ser un correo electrónico (p. ej., alice@example.com) o un ID de usuario público (p. ej., user_abc123). Puedes combinar ambos formatos. |
Filtrado de usuarios:
El parámetro users acepta una lista de identificadores separados por comas. Cada identificador puede ser:
- Dirección de correo electrónico (p. ej.,
alice@example.com) - Se detecta automáticamente por la presencia de@ - ID de usuario público (p. ej.,
user_abc123) - Se detecta automáticamente por el prefijouser_ - Formato mixto - Puedes combinar correos electrónicos e ID en la misma solicitud
Ejemplos:
# Filtrar solo por correos electrónicos?users=alice@example.com,bob@example.com,carol@example.com# Filtrar solo por public user IDs?users=user_abc123,user_def456,user_ghi789# Combinar correos electrónicos e IDs?users=alice@example.com,user_def456,bob@example.comCuando se filtra por usuarios, la API devuelve datos solo de esos usuarios específicos. Esto es útil para:
- Analizar miembros específicos del equipo o grupos (p. ej., responsables de ingeniería o equipos de proyecto específicos)
- Generar informes para un subconjunto de usuarios
- Comparar métricas entre personas seleccionadas
Formato de fecha
Comportamiento predeterminado:
Si omite startDate y endDate, la API usa de forma predeterminada los últimos 7 días (desde hace 7 días hasta hoy). Esto resulta ideal para consultas rápidas sin especificar fechas.
Formatos estándar:
YYYY-MM-DD- Formato de fecha simple (p. ej.,2025-01-15) ← Recomendado- Marcas de tiempo ISO 8601 (p. ej.,
2025-01-15T00:00:00Z)
Atajos:
nowotoday- Fecha actual (a las 00:00:00)yesterday- Fecha de ayer (a las 00:00:00)<number>d- Días atrás (p. ej.,7d= hace 7 días,30d= hace 30 días)
Notas importantes:
- La hora se ignora: Todas las fechas se resuelven al nivel del día (00:00:00 UTC). Enviar
2025-01-15T14:30:00Zequivale a enviar2025-01-15. - Use los formatos recomendados: Use
YYYY-MM-DDo atajos para aprovechar mejor el almacenamiento en caché HTTP. Los distintos valores de hora (comoT14:30:00Zfrente aT08:00:00Z) impiden que se reutilice la caché, aunque correspondan al mismo día. - Intervalos de fechas: Se limitan a un máximo de 30 días.
Ejemplos:
# Omite las fechas para los últimos 7 días (lo más simple y lo mejor para el caching)curl "https://api.cursor.com/analytics/team/agent-edits"# Uso del formato YYYY-MM-DD para un rango de fechas específico (recomendado)?startDate=2025-01-01&endDate=2025-01-31# Uso de atajos para los últimos 30 días?startDate=30d&endDate=today# Uso de atajos para los últimos 14 días?startDate=14d&endDate=now# ❌ No uses timestamps: impide el caching y, de todas formas, la hora se ignora?startDate=2025-01-15T14:30:00Z&endDate=2025-01-31T23:59:59ZLímites de uso
Los límites de uso se aplican por equipo y se restablecen cada minuto:
- Endpoints a nivel de equipo: 100 solicitudes por minuto por equipo
- Endpoints por usuario: 50 solicitudes por minuto por equipo
¿Qué sucede si superas el límite de uso?
Si superas el límite de uso, recibirás una respuesta 429 Too Many Requests:
{ "error": "Too Many Requests", "message": "Rate limit exceeded. Please try again later."}Mejores prácticas
Para conocer las mejores prácticas generales de la API, como el backoff exponencial, las estrategias de caché y el manejo de errores, consulta las Mejores prácticas de la descripción general de la API.
- Usa la paginación para equipos grandes: Si tu equipo tiene más de 100 usuarios, usa los endpoints por usuario con paginación para evitar tiempos de espera.
- Aprovecha la caché: Los endpoints de equipo y de usuario admiten ETags. Guarda el ETag y usa los encabezados
If-None-Matchpara reducir transferencias de datos innecesarias. - Filtra por usuarios cuando sea posible: Si solo necesitas datos de usuarios específicos, usa el parámetro
userspara reducir el tiempo de consulta. - Intervalos de fechas: Mantén intervalos de fechas razonables (p. ej., de 1 a 3 meses) para un rendimiento óptimo.