获取团队代码库的 AI 生成代码分析数据。包括每次提交的 AI 使用情况以及详细的已接受 AI 更改记录。
该 API 目前是首个发布版本。我们正在根据反馈扩展功能 - 告诉我们你需要哪些端点!
  • 可用性:仅限企业团队
  • 状态:Alpha 版本(响应结构和字段可能会发生变化)

身份验证

所有 API 请求都需要使用 API 密钥进行身份验证。此 API 使用与其他端点相同的 Admin API 身份验证。 有关详细的身份验证说明,请参阅 Admin API 身份验证

基础 URL

所有 API 端点都使用:
https://api.cursor.com

速率限制

  • 每个团队每个端点每分钟限制 5 次请求

查询参数

以下所有端点都通过查询字符串接受相同的查询参数:
ParameterTypeRequiredDescription
startDatestringdateISO 日期字符串、字面值 “now” 或相对天数如 “7d”(表示当前时间 - 7 天)。默认值:当前时间 - 7 天
endDatestringdateISO 日期字符串、字面值 “now” 或相对天数如 “0d”。默认值:当前时间
pagenumber页码(从 1 开始)。默认值:1
pageSizenumber每页结果数量。默认值:100,最大值:1000
userstring可选的单用户筛选条件。接受邮箱地址(如 developer@company.com)、编码 ID(如 user_abc123…)或数字 ID(如 42)
响应中返回的 userId 是带有 user_ 前缀的编码外部 ID。这个 ID 在 API 调用中保持稳定。

语义与指标的计算方式

  • 来源: “TAB” 表示已接受的内联补全;“COMPOSER” 表示在 Composer 中接受的 diff
  • 行指标: tabLinesAdded/Deleted 和 composerLinesAdded/Deleted 分别单独统计;nonAiLinesAdded/Deleted 按 max(0, totalLines - AI 行数) 计算
  • 隐私模式: 如果在客户端启用,某些元数据(如 fileName)可能会被省略
  • 分支信息: 当当前分支与仓库的默认分支相同,isPrimaryBranch 为 true;如果仓库信息不可用,则可能为 undefined
你可以查看该文件,了解如何检测并报告提交和更改。

端点

获取 AI 提交指标(JSON,分页)

获取聚合的每次提交指标,将代码行归因于 TAB、COMPOSER 和非 AI。
GET /analytics/ai-code/commits

响应

{
  items: AiCommitMetric[];
  totalCount: number;
  page: number;
  pageSize: number;
}

AiCommitMetric 字段

字段类型描述
commitHashstringGit 提交哈希值
userIdstring编码用户 ID(如 user_abc123)
userEmailstring用户邮箱地址
repoNamestringnull仓库名称
branchNamestringnull分支名称
isPrimaryBranchbooleannull是否为主分支
totalLinesAddednumber提交中新增的总行数
totalLinesDeletednumber提交中删除的总行数
tabLinesAddednumber通过 TAB 补全新增的行数
tabLinesDeletednumber通过 TAB 补全删除的行数
composerLinesAddednumber通过 Composer 新增的行数
composerLinesDeletednumber通过 Composer 删除的行数
nonAiLinesAddednumbernull非 AI 新增的行数
nonAiLinesDeletednumbernull非 AI 删除的行数
messagestringnull提交信息
commitTsstringnull提交时间戳(ISO 格式)
createdAtstring数据摄取时间戳(ISO 格式)

响应示例

{
  "items": [
    {
      "commitHash": "a1b2c3d4",
      "userId": "user_3k9x8q...",
      "userEmail": "developer@company.com",
      "repoName": "company/repo",
      "branchName": "main",
      "isPrimaryBranch": true,
      "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
}

请求示例

基础请求:
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=7d&endDate=now&page=1&pageSize=100" \
  -u YOUR_API_KEY:
按用户(邮箱)筛选:
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=2025-06-01T00:00:00Z&endDate=now&user=developer@company.com" \
  -u YOUR_API_KEY:

下载 AI 提交指标(CSV,流式传输)

以 CSV 格式下载提交指标数据,适用于大数据量提取。
GET /analytics/ai-code/commits.csv

响应

Headers:
  • Content-Type: text/csv; charset=utf-8

CSV 列

类型描述
commit_hashstringGit 提交哈希值
user_idstring编码用户 ID
user_emailstring用户邮箱地址
repo_namestring仓库名称
branch_namestring分支名称
is_primary_branchboolean是否为主分支
total_lines_addednumber提交中新增的总行数
total_lines_deletednumber提交中删除的总行数
tab_lines_addednumber通过 TAB 补全新增的行数
tab_lines_deletednumber通过 TAB 补全删除的行数
composer_lines_addednumber通过 Composer 新增的行数
composer_lines_deletednumber通过 Composer 删除的行数
non_ai_lines_addednumber非 AI 新增的行数
non_ai_lines_deletednumber非 AI 删除的行数
messagestring提交信息
commit_tsstring提交时间戳(ISO 格式)
created_atstring数据摄取时间戳(ISO 格式)

CSV 输出示例

commit_hash,user_id,user_email,repo_name,branch_name,is_primary_branch,total_lines_added,total_lines_deleted,tab_lines_added,tab_lines_deleted,composer_lines_added,composer_lines_deleted,non_ai_lines_added,non_ai_lines_deleted,message,commit_ts,created_at
a1b2c3d4,user_3k9x8q...,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,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

请求示例

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

获取 AI 代码变更指标(JSON,分页)

获取细粒度的已接受 AI 变更数据,按确定性的 changeId 分组。用于分析独立于提交的已接受 AI 事件。
GET /analytics/ai-code/changes

响应

{
  items: AiCodeChangeMetric[];
  totalCount: number;
  page: number;
  pageSize: number;
}

AiCodeChangeMetric 字段

字段类型描述
changeIdstring变更的确定性 ID
userIdstring编码用户 ID(例如 user_abc123)
userEmailstring用户邮箱地址
source”TAB""COMPOSER”AI 变更的来源
modelstringnull使用的 AI 模型
totalLinesAddednumber新增的总行数
totalLinesDeletednumber删除的总行数
createdAtstring数据摄取时间戳(ISO 格式)
metadataArray文件元数据(隐私模式下可能省略 fileName)

响应示例

{
  "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
}

请求示例

基础请求:
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?startDate=14d&endDate=now&page=1&pageSize=200" \
  -u YOUR_API_KEY:
按用户筛选(编码 ID):
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=user_3k9x8q..." \
  -u YOUR_API_KEY:
按用户筛选(邮箱):
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=developer@company.com" \
  -u YOUR_API_KEY:

下载 AI 代码变更指标(CSV,流式)

以 CSV 格式下载变更指标数据,适用于大数据量提取。
GET /analytics/ai-code/changes.csv

响应

Headers:
  • Content-Type: text/csv; charset=utf-8

CSV 列说明

列名类型说明
change_idstring变更的唯一标识 ID
user_idstring编码后的用户 ID
user_emailstring用户邮箱地址
sourcestringAI 变更来源(TAB 或 COMPOSER)
modelstring使用的 AI 模型
total_lines_addednumber总新增行数
total_lines_deletednumber总删除行数
created_atstring数据摄取时间戳(ISO 格式)
metadata_jsonstringJSON 字符串格式的元数据条目数组

注意事项

  • metadata_json 是 JSON 字符串格式的元数据条目数组(隐私模式下可能会省略 fileName)
  • 处理 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}]"

请求示例

curl -L "https://api.cursor.com/analytics/ai-code/changes.csv?startDate=30d&endDate=now" \
  -u YOUR_API_KEY: \
  -o changes.csv

小贴士

  • 使用 user 参数可以快速在所有端点中筛选单个用户
  • 对于大量数据提取,推荐使用 CSV 端点——它们在服务器端以 10,000 条记录为单位进行流式分页
  • 如果客户端无法解析默认分支,isPrimaryBranch 可能为 undefined
  • commitTs 是提交时间戳;createdAt 是数据在我们服务器上的摄取时间
  • 当客户端启用隐私模式时,某些字段可能会缺失

更新日志

  • Alpha 版本: 提交和变更的初始接口。响应格式可能会根据反馈进行调整