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
ISO 日期字符串、字面量 “now”,或 “7d” 等相对天数 (表示当前时间减 7 天) 。默认值:now - 7 days
endDate string | date
ISO 日期字符串、字面量 “now”,或 “0d” 等相对天数。默认值:now
page number
页码 (从 1 开始) 。默认值:1
pageSize number
每页结果数。默认值:100,最大值:1000
user string
可选:按单个用户筛选。接受电子邮件 (例如 developer@company.com) 、编码 ID (例如 user_abc123…) 或数字 ID (例如 42)
响应字段¶
| 字段 | 类型 | 描述 | ||
|---|---|---|---|---|
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
ISO 日期字符串、字面量 “now”,或 “7d” 等相对天数 (表示当前时间减 7 天) 。默认值:now - 7 days
endDate string | date
ISO 日期字符串、字面量 “now”,或 “0d” 等相对天数。默认值:now
user string
可选:按单个用户筛选。接受电子邮件 (例如 developer@company.com) 、编码 ID (例如 user_abc123…) 或数字 ID (例如 42)
响应头¶
- 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.csv
CSV 输出示例:
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_at
a1b2c3d4,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.000Z
e5f6g7h8,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
ISO 日期字符串、字面量“now”或“7d”等相对天数 (表示当前时间减 7 天) 。默认值:当前时间减 7 天
endDate string | date
ISO 日期字符串、字面量“now”或“0d”等相对天数。默认值:now
page number
页码 (从 1 开始) 。默认值:1
pageSize number
每页结果数。默认值:100,最大值:1000
user string
可选按单个用户筛选。接受电子邮件 (例如 developer@company.com) 、编码 ID (例如 user_abc123…) 或数字 ID (例如 42)
响应字段¶
| 字段 | 类型 | 描述 | |
|---|---|---|---|
changeId |
string | 更改的确定性 ID | |
userId |
string | 编码的用户 ID (例如 user_abc123) | |
userEmail |
string | 用户的电子邮件地址 | |
source |
“TAB” | “COMPOSER” | AI 更改的来源 |
model |
string | null | 使用的 AI 模型 |
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
ISO 日期字符串、字面值“now”或“7d”等相对天数 (表示当前时间减 7 天) 。默认值:当前时间减 7 天
endDate string | date
ISO 日期字符串、字面值“now”或“0d”等相对天数。默认值:now
user string
可选:按单个用户筛选。支持电子邮件 (例如 developer@company.com) 、编码 ID (例如 user_abc123…) 或数字 ID (例如 42)
响应头¶
- 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.csv
CSV 输出示例:
change_id,user_id,user_email,source,model,total_lines_added,total_lines_deleted,created_at,metadata_json
749356201,user_3k9x8q...,developer@company.com,COMPOSER,gpt-4o,18,4,2025-07-30T15:10:12.000Z,"[{""fileName"":""src/analytics/report.ts"",""fileExtension"":""ts"",""linesAdded"":12,""linesDeleted"":3},{""fileName"":""src/analytics/ui.tsx"",""fileExtension"":""tsx"",""linesAdded"":6,""linesDeleted"":1}]"
749356202,user_3k9x8q...,developer@company.com,TAB,,8,2,2025-07-30T15:08:45.000Z,"[{""fileName"":""src/utils/helpers.ts"",""fileExtension"":""ts"",""linesAdded"":8,""linesDeleted"":2}]"
获取提交详情¶
/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 | 否 | ISO 日期 string、字面量“now”或“7d”等相对天数 (表示当前时间 - 7 天) 。默认值:当前时间 - 7 天 |
endDate |
string | date | 否 | ISO 日期 string、字面量“now”或“0d”等相对天数。默认值:当前时间 |
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 用量指标。