获取你团队代码仓库的 AI 生成代码分析。内容包括按提交统计的 AI 使用情况,以及更细粒度的已接受 AI 变更。
该 API 为首个发布版本。我们会根据反馈持续扩展功能——告诉我们你需要哪些端点!
  • 可用性: 仅面向企业团队
  • 状态: Alpha(响应结构和字段可能变更)

身份验证

所有 API 请求都需要使用 API 密钥进行身份验证。这个 API 使用与其他端点相同的 Admin API 身份验证方式。 详细的身份验证说明请查看 Admin API 身份验证

基础 URL

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

速率限制

  • 每个团队、每个端点:每分钟最多 5 次请求 ---MDX_CONTENTEND---

查询参数

下面所有端点都通过查询字符串接受相同的查询参数:
参数类型必填描述
startDatestringdateISO 日期字符串、字面量 “now”,或类似 “7d” 的相对天数(表示 now - 7 天)。默认:now - 7 天
endDatestringdateISO 日期字符串、字面量 “now”,或类似 “0d” 的相对天数。默认:now
pagenumber页码(从 1 开始)。默认:1
pageSizenumber每页结果数。默认:100,最大:1000
userstring按单个用户进行可选过滤。接受邮箱(例如 developer@company.com)、编码 ID(例如 user_abc123…)或数值 ID(例如 42)
响应会把 userId 返回为带有前缀 user_ 的外部编码 ID。这个值在 API 消费场景下是稳定的。

语义与指标的计算方式

  • 来源: “TAB” 表示已接受的行内补全;“COMPOSER” 表示来自 Composer 的已接受 diff
  • 行数指标:tabLinesAdded/Deleted 和 composerLinesAdded/Deleted 分别统计;nonAiLinesAdded/Deleted 通过 max(0, totalLines - AI lines) 得出
  • 隐私模式:如果在客户端启用,部分元数据(如 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 列

ColumnTypeDescription
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,分页)

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

响应

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

AiCodeChangeMetric 字段

FieldTypeDescription
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 列

ColumnTypeDescription
change_idstring该变更的确定性 ID
user_idstring编码的用户 ID
user_emailstring用户邮箱地址
sourcestringAI 变更来源(TAB 或 COMPOSER)
modelstring使用的 AI 模型
total_lines_addednumber新增行总数
total_lines_deletednumber删除行总数
created_atstring写入时间戳(ISO 格式)
metadata_jsonstring元数据条目的 JSON 字符串数组

备注

  • 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 版本发布:提供用于提交和更改的初始接口。响应结构可能会根据反馈进行调整