AI Code Tracking API
AI Code Tracking API 可让你跟踪团队各代码仓库中 AI 生成的代码贡献,包括每次提交的 AI 用量以及细粒度的已接受 AI 更改。
- AI Code Tracking API 使用 Basic 认证,以你的 API 密钥作为用户名,与 Admin API 的认证方式相同。
- 有关创建 API 密钥、身份验证方法、速率限制和最佳实践的详细信息,请参阅 API Overview。
- 可用性:仅限企业版;如需获取访问权限,请联系销售
- 状态:Alpha (响应结构和字段可能会更改)
- 工作区限制:仅计算工作区根目录顶层 Git 代码仓库的指标。目前不支持多根工作区。
端点
获取 AI 提交指标 (JSON,分页)
/analytics/ai-code/commits获取按提交聚合的指标,用于将代码行归因于 TAB、COMPOSER 和非 AI。
参数
startDate string | date
endDate string | date
page number
pageSize number
user string
响应字段
| 字段 | 类型 | 描述 | ||
|---|---|---|---|---|
commitHash | string | Git 提交哈希 | ||
userId | string | 编码用户 ID (例如 user_abc123) | ||
userEmail | string | 用户电子邮件地址 | ||
repoName | string | null | 代码仓库名称 | |
branchName | string | null | 分支名称 | |
isPrimaryBranch | boolean | null | 是否为主分支 | |
commitSource | "ide" | "cli" | "cloud" | 提交来源 |
totalLinesAdded | number | 提交中新增的总行数 | ||
totalLinesDeleted | number | 提交中删除的总行数 | ||
tabLinesAdded | number | 通过 TAB 补全新增的行 | ||
tabLinesDeleted | number | 通过 TAB 补全删除的行 | ||
composerLinesAdded | number | 通过 Composer 新增的行 | ||
composerLinesDeleted | number | 通过 Composer 删除的行 | ||
nonAiLinesAdded | number | null | 新增的非 AI 代码行 | |
nonAiLinesDeleted | number | null | 删除的非 AI 代码行 | |
message | string | null | 提交说明 | |
commitTs | string | null | 提交时间戳 (ISO 格式) | |
createdAt | string | 数据摄取时间戳 (ISO 格式) |
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=7d&endDate=now&page=1&pageSize=100" \ -u YOUR_API_KEY:响应:
{ "items": [ { "commitHash": "a1b2c3d4", "userId": "user_3k9x8q...", "userEmail": "developer@company.com", "repoName": "company/repo", "branchName": "main", "isPrimaryBranch": true, "commitSource": "ide", "totalLinesAdded": 120, "totalLinesDeleted": 30, "tabLinesAdded": 50, "tabLinesDeleted": 10, "composerLinesAdded": 40, "composerLinesDeleted": 5, "nonAiLinesAdded": 30, "nonAiLinesDeleted": 15, "message": "Refactor: extract analytics client", "commitTs": "2025-07-30T14:12:03.000Z", "createdAt": "2025-07-30T14:12:30.000Z" } ], "totalCount": 42, "page": 1, "pageSize": 100}下载 AI 提交指标 (CSV,流式传输)
/analytics/ai-code/commits.csv以 CSV 格式下载提交指标数据,适用于大规模数据提取。
参数
startDate string | date
endDate string | date
user string
响应头
- Content-Type: text/csv; charset=utf-8
CSV 列
| 列 | 类型 | 描述 |
|---|---|---|
commit_hash | string | Git 提交哈希 |
user_id | string | 编码用户 ID |
user_email | string | 用户电子邮件地址 |
repo_name | string | 代码仓库名称 |
branch_name | string | 分支名称 |
is_primary_branch | boolean | 是否为主分支 |
commit_source | string | 提交来源 (ide、cli 或 cloud) |
total_lines_added | number | 提交中新增的总行数 |
total_lines_deleted | number | 提交中删除的总行数 |
tab_lines_added | number | 通过 Tab 补全新增的行数 |
tab_lines_deleted | number | 通过 Tab 补全删除的行数 |
composer_lines_added | number | 通过 Composer 新增的行数 |
composer_lines_deleted | number | 通过 Composer 删除的行数 |
non_ai_lines_added | number | 新增的非 AI 代码行数 |
non_ai_lines_deleted | number | 删除的非 AI 代码行数 |
message | string | 提交信息 |
commit_ts | string | 提交时间戳 (ISO 格式) |
created_at | string | 数据摄取时间戳 (ISO 格式) |
curl -L "https://api.cursor.com/analytics/ai-code/commits.csv?startDate=2025-07-01T00:00:00Z&endDate=now&user=user_3k9x8q..." \ -u YOUR_API_KEY: \ -o commits.csvCSV 输出示例:
commit_hash,commit_source,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_ata1b2c3d4,ide,user_3k9x8q...,developer@company.com,company/repo,main,true,120,30,50,10,40,5,30,15,"Refactor: extract analytics client",2025-07-30T14:12:03.000Z,2025-07-30T14:12:30.000Ze5f6g7h8,cloud,user_3k9x8q...,developer@company.com,company/repo,feature-branch,false,85,15,30,5,25,3,30,7,"Add error handling",2025-07-30T13:45:21.000Z,2025-07-30T13:45:45.000Z获取 AI 代码更改指标 (JSON,分页)
/analytics/ai-code/changes获取按确定性 changeId 分组的细粒度已接受 AI 更改。可用于独立于提交分析已接受的 AI 事件。
参数
startDate string | date
endDate string | date
page number
pageSize number
user string
响应字段
| 字段 | 类型 | 描述 |
|---|---|---|
changeId | string | 更改的确定性 ID |
userId | string | 编码的用户 ID (例如 user_abc123) |
userEmail | string | 用户的电子邮件地址 |
source | "TAB" | "COMPOSER" |
model | string | null |
totalLinesAdded | number | 新增的总行数 |
totalLinesDeleted | number | 删除的总行数 |
createdAt | string | 数据摄取时间戳 (ISO 格式) |
metadata | Array | 文件元数据 (隐私模式下可能省略 fileName) |
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?startDate=14d&endDate=now&page=1&pageSize=200" \ -u YOUR_API_KEY:响应:
{ "items": [ { "changeId": "749356201", "userId": "user_3k9x8q...", "userEmail": "developer@company.com", "source": "COMPOSER", "model": null, "totalLinesAdded": 18, "totalLinesDeleted": 4, "createdAt": "2025-07-30T15:10:12.000Z", "metadata": [ { "fileName": "src/analytics/report.ts", "fileExtension": "ts", "linesAdded": 12, "linesDeleted": 3 }, { "fileName": "src/analytics/ui.tsx", "fileExtension": "tsx", "linesAdded": 6, "linesDeleted": 1 } ] } ], "totalCount": 128, "page": 1, "pageSize": 200}下载 AI 代码更改指标 (CSV,流式)
/analytics/ai-code/changes.csv以 CSV 格式下载更改指标数据,适用于大规模数据提取。
参数
startDate string | date
endDate string | date
user string
响应头
- Content-Type: text/csv; charset=utf-8
CSV 列
| 列 | 类型 | 描述 |
|---|---|---|
change_id | string | 更改的确定性 ID |
user_id | string | 编码的用户 ID |
user_email | string | 用户的电子邮件地址 |
source | string | AI 更改的来源 (TAB 或 COMPOSER) |
model | string | 所用的 AI 模型 |
total_lines_added | number | 新增的总行数 |
total_lines_deleted | number | 删除的总行数 |
created_at | string | 数据摄取时间戳 (ISO 格式) |
metadata_json | string | 元数据条目组成的 JSON 字符串化数组 |
curl -L "https://api.cursor.com/analytics/ai-code/changes.csv?startDate=30d&endDate=now" \ -u YOUR_API_KEY: \ -o changes.csvCSV 输出示例:
change_id,user_id,user_email,source,model,total_lines_added,total_lines_deleted,created_at,metadata_json749356201,user_3k9x8q...,developer@company.com,COMPOSER,gpt-4o,18,4,2025-07-30T15:10:12.000Z,"[{""fileName"":""src/analytics/report.ts"",""fileExtension"":""ts"",""linesAdded"":12,""linesDeleted"":3},{""fileName"":""src/analytics/ui.tsx"",""fileExtension"":""tsx"",""linesAdded"":6,""linesDeleted"":1}]"749356202,user_3k9x8q...,developer@company.com,TAB,,8,2,2025-07-30T15:08:45.000Z,"[{""fileName"":""src/utils/helpers.ts"",""fileExtension"":""ts"",""linesAdded"":8,""linesDeleted"":2}]"获取提交详情
/analytics/ai-code/commits/:commitHash获取一个或多个提交的详细信息,包括 blame 标注和所引用对话的元数据。
此端点处于有限 Alpha 阶段,仅对部分用户开放。响应结构可能会变更。
路径参数
commitHash string
abc123,def456) 查询参数
branch string
响应字段
返回一个包含 commits 和 conversations 数组的对象。
| 字段 | 类型 | 描述 | ||
|---|---|---|---|---|
commits | array | 包含 blame 标注的提交对象数组 | ||
commits[].commitSource | "ide" | "cli" | "cloud" | 提交的来源。 |
commits[].rangeAnnotations | array | 该提交的文件级 blame 数据 | ||
commits[].rangeAnnotations[].filePath | string | 代码仓库中文件的路径 | ||
commits[].rangeAnnotations[].groups | array | 标注群组数组 | ||
commits[].rangeAnnotations[].groups[].conversationId | string | null | 生成此代码的对话 ID | |
commits[].rangeAnnotations[].groups[].model | string | null | 用于生成代码的 AI 模型 | |
commits[].rangeAnnotations[].groups[].operationType | string | 执行的操作类型 | ||
commits[].rangeAnnotations[].groups[].ranges | array | 此标注影响的行范围数组 | ||
commits[].rangeAnnotations[].groups[].ranges[].start | number | 起始行号 | ||
commits[].rangeAnnotations[].groups[].ranges[].end | number | 结束行号 | ||
conversations | array | 所有被引用对话的元数据 | ||
conversations[].id | string | 唯一对话标识符 | ||
conversations[].title | string | null | 对话标题 | |
conversations[].tldr | string | null | 简短摘要 | |
conversations[].overview | string | null | 详细概述 | |
conversations[].summaryBullets | array | null | 摘要要点数组 |
即使请求单个提交,响应格式也保持一致。
单次提交:
curl -X GET "https://api.cursor.com/analytics/ai-code/commits/0aabf603dc906e05bf5e4d9fd423fdd517f2e43f?branch=main" \ -u YOUR_API_KEY:多个提交:
curl -X GET "https://api.cursor.com/analytics/ai-code/commits/abc123,def456,ghi789" \ -u YOUR_API_KEY:响应:
{ "commits": [ { "commitHash": "0aabf603dc906e05bf5e4d9fd423fdd517f2e43f", "commitSource": "ide", "rangeAnnotations": [ { "filePath": "src/analytics/report.ts", "groups": [ { "conversationId": "conv_abc123", "model": "gpt-4o", "operationType": "insert", "ranges": [ { "start": 10, "end": 25 }, { "start": 42, "end": 58 } ] } ] } ] } ], "conversations": [ { "id": "conv_abc123", "title": "Refactor analytics module", "tldr": "Extracted report generation into separate functions", "overview": "Refactored the analytics module to improve maintainability by extracting report generation logic.", "summaryBullets": [ "Created dedicated report generator class", "Added unit tests for new functions", "Updated imports across affected files" ] } ]}通用查询参数
所有端点均通过查询字符串接受相同的查询参数:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
startDate | string | date | 否 |
endDate | string | date | 否 |
page | number | 否 | 页码 (从 1 开始) 。默认值:1 |
pageSize | number | 否 | 每页结果数。默认值:100,最大值:1000 |
user | string | 否 | 可选按单个用户筛选。接受电子邮件 (例如 developer@company.com) 、编码 ID (例如 user_abc123...) 或数字 ID (例如 42) |
响应中的 userId 为带有 user_ 前缀的编码外部 ID。该 ID 可稳定用于 API 调用。
语义与指标计算方式
- 来源:“TAB”表示已接受的内联补全;“COMPOSER”表示已接受的智能体编辑 diff
- 行数指标:tabLinesAdded/Deleted 和 composerLinesAdded/Deleted 分别计数;nonAiLinesAdded/Deleted 计算为 max(0, totalLines - AI 行数)
- 隐私模式:如果在客户端中启用,部分元数据 (如 fileName) 可能会被省略
- 分支信息:当前分支等于仓库默认分支时,isPrimaryBranch 为 true;如果仓库信息不可用,该值可能为 undefined
你可以扫描该文件,了解如何检测和报告提交与更改。
提示
- 使用
user参数可快速在所有端点中筛选特定用户 - 对于大规模数据提取,建议使用 CSV 端点——服务器会以每页 10,000 条记录的形式流式传输数据
- 如果客户端无法解析默认分支,
isPrimaryBranch可能为未定义 commitTs是提交时间戳;createdAt是数据在我们服务器上的接收时间- 客户端启用隐私模式时,某些字段可能缺失
- 提交哈希并非唯一且不可变更。例如,如果你通过添加额外信息修订提交,可能会看到同一提交出现两次。
- 即使提交被修订,提交时间戳也不会改变。
更新日志
- Alpha 版本:提供提交和更改的初始端点。响应结构可能会根据反馈调整
AI Code Tracking 适用于企业版方案
联系我们的团队,获取详细的 AI 用量指标。