Admin API 让你以编程方式访问团队数据,包括成员信息、使用指标和支出详情。你可以构建自定义仪表盘、监控工具,或与现有工作流集成。
该 API 为首个发布版本。我们会根据反馈逐步扩展功能——告诉我们你需要哪些端点!

身份验证

所有 API 请求都需要使用 API 密钥进行身份验证。只有团队管理员可以创建和管理 API 密钥。 API 密钥与组织绑定,对所有管理员可见,且不受原始创建者账号状态影响。

创建 API Key

  1. 前往 cursor.com/dashboardSettings 标签页 → Cursor Admin API Keys
  2. 点击 Create New API Key
  3. 给密钥起个清晰易懂的名字(例如:“Usage Dashboard Integration”)
  4. 立刻复制生成的密钥——之后将无法再次查看
格式:key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

使用你的 API 密钥

在基本身份验证中,将你的 API 密钥作为用户名: 使用 curl 进行基本身份验证:
curl https://api.cursor.com/{route} -u API_KEY:
或者直接设置 Authorization 标头:
Authorization: Basic {base64_encode('API_KEY:')}

基础 URL

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

端点

获取团队成员

获取所有团队成员及其详细信息。
GET /teams/members

响应

返回一个团队成员对象的数组:
{
  teamMembers: {
    name: string;
    email: string;
    role: '拥有者' | '成员' | '免费拥有者';
  }[];
}

示例回复

{
  "teamMembers": [
    {
      "name": "Alex",
      "email": "developer@company.com",
      "role": "成员"
    },
    {
      "name": "Sam",
      "email": "admin@company.com",
      "role": "拥有者"
    }
  ]
}

示例请求

curl -X GET https://api.cursor.com/teams/members \
  -u 你的API密钥:

获取每日用量数据

在指定日期范围内获取你团队的每日用量指标,了解代码编辑、AI 协作使用情况与接受率等详细洞察。
POST /teams/daily-usage-data

请求体

参数类型必填描述
startDatenumber起始日期(Epoch 毫秒)
endDatenumber结束日期(Epoch 毫秒)
日期范围不能超过 90 天。更长的时间段请分多次发起请求。

返回

{
  data: {
    date: number;
    isActive: boolean;
    totalLinesAdded: number;
    totalLinesDeleted: number;
    acceptedLinesAdded: number;
    acceptedLinesDeleted: number;
    totalApplies: number;
    totalAccepts: number;
    totalRejects: number;
    totalTabsShown: number;
    totalTabsAccepted: number;
    composerRequests: number;
    chatRequests: number;
    agentRequests: number;
    cmdkUsages: number;
    subscriptionIncludedReqs: number;
    apiKeyReqs: number;
    usageBasedReqs: number;
    bugbotUsages: number;
    mostUsedModel: string;
    applyMostUsedExtension?: string;
    tabMostUsedExtension?: string;
    clientVersion?: string;
    email?: string;
  }[];
  period: {
    startDate: number;
    endDate: number;
  };
}

响应字段

字段描述
date以 epoch 毫秒表示的日期
isActive该日用户是否活跃
totalLinesAdded新增代码行数
totalLinesDeleted删除代码行数
acceptedLinesAdded来自已接受 AI 建议的新增行数
acceptedLinesDeleted来自已接受 AI 建议的删除行数
totalAppliesApply 操作次数
totalAccepts接受的建议数
totalRejects拒绝的建议数
totalTabsShown显示的 Tab 补全次数
totalTabsAccepted接受的 Tab 补全次数
composerRequestsComposer 请求数
chatRequestsChat 请求数
agentRequestsAgent 请求数
cmdkUsages命令面板(Cmd+K)使用次数
subscriptionIncludedReqs订阅内请求数
apiKeyReqsAPI Key 请求数
usageBasedReqs按用量计费请求数
bugbotUsagesBug 检测使用次数
mostUsedModel最常用的 AI 模型
applyMostUsedExtensionApply 使用最频繁的文件扩展名
tabMostUsedExtensionTab 使用最频繁的文件扩展名
clientVersionCursor 版本
email用户邮箱

示例回复

{
  "data": [
    {
      "date": 1710720000000,
      "isActive": true,
      "totalLinesAdded": 1543,
      "totalLinesDeleted": 892,
      "acceptedLinesAdded": 1102,
      "acceptedLinesDeleted": 645,
      "totalApplies": 87,
      "totalAccepts": 73,
      "totalRejects": 14,
      "totalTabsShown": 342,
      "totalTabsAccepted": 289,
      "composerRequests": 45,
      "chatRequests": 128,
      "agentRequests": 12,
      "cmdkUsages": 67,
      "subscriptionIncludedReqs": 180,
      "apiKeyReqs": 0,
      "usageBasedReqs": 5,
      "bugbotUsages": 3,
      "mostUsedModel": "gpt-4",
      "applyMostUsedExtension": ".tsx",
      "tabMostUsedExtension": ".ts",
      "clientVersion": "0.25.1",
      "email": "developer@company.com"
    },
    {
      "date": 1710806400000,
      "isActive": true,
      "totalLinesAdded": 2104,
      "totalLinesDeleted": 1203,
      "acceptedLinesAdded": 1876,
      "acceptedLinesDeleted": 987,
      "totalApplies": 102,
      "totalAccepts": 91,
      "totalRejects": 11,
      "totalTabsShown": 456,
      "totalTabsAccepted": 398,
      "composerRequests": 67,
      "chatRequests": 156,
      "agentRequests": 23,
      "cmdkUsages": 89,
      "subscriptionIncludedReqs": 320,
      "apiKeyReqs": 15,
      "usageBasedReqs": 0,
      "bugbotUsages": 5,
      "mostUsedModel": "claude-3-opus",
      "applyMostUsedExtension": ".py",
      "tabMostUsedExtension": ".py",
      "clientVersion": "0.25.1",
      "email": "developer@company.com"
    }
  ],
  "period": {
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }
}

示例请求

curl -X POST https://api.cursor.com/teams/daily-usage-data \
  -u 你的_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }'

获取支出数据

支持通过搜索、排序和分页检索本日历月的支出信息。
POST /teams/spend

请求体

参数类型必填描述
searchTermstring在用户名和邮箱中搜索
sortBystring排序字段:amountdateuser。默认值:date
sortDirectionstring排序方向:ascdesc。默认值:desc
pagenumber页码(从 1 开始)。默认值:1
pageSizenumber每页结果数

返回

{
  teamMemberSpend: {
    spendCents: number;
    fastPremiumRequests: number;
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
    hardLimitOverrideDollars: number;
  }[];
  subscriptionCycleStart: number;
  totalMembers: number;
  totalPages: number;
}

响应字段

字段描述
spendCents总花费(单位:美分)
fastPremiumRequestsFast 高级模型请求数
name成员名称
email成员邮箱
role团队角色
hardLimitOverrideDollars自定义支出上限(美元)
subscriptionCycleStart订阅周期起始时间(Epoch 毫秒)
totalMembers团队成员总数
totalPages总页数

示例回复

{
  "teamMemberSpend": [
    {
      "spendCents": 2450,
      "fastPremiumRequests": 1250,
      "name": "Alex",
      "email": "developer@company.com",
      "role": "member",
      "hardLimitOverrideDollars": 100
    },
    {
      "spendCents": 1875,
      "fastPremiumRequests": 980,
      "name": "Sam",
      "email": "admin@company.com",
      "role": "owner",
      "hardLimitOverrideDollars": 0
    },
  ],
  "subscriptionCycleStart": 1708992000000,
  "totalMembers": 15,
  "totalPages": 1
}

示例请求

基础消费数据:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
分页搜索指定用户:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "searchTerm": "alex@company.com",
    "page": 2,
    "pageSize": 25
  }'

获取使用事件数据

通过完整的筛选、搜索和分页选项,为你的团队获取详细的使用事件数据。这个端点提供关于单次 API 调用、模型使用、令牌(token)消耗和成本的细粒度洞察。
POST /teams/filtered-usage-events

请求体

参数类型必填描述
startDatenumber起始日期(epoch 毫秒)
endDatenumber结束日期(epoch 毫秒)
userIdnumber按指定用户 ID 过滤
pagenumber页码(从 1 开始)。默认值:1
pageSizenumber每页返回数量。默认值:10
emailstring按用户邮箱地址过滤

返回

{
  totalUsageEventsCount: number; // 使用事件总数
  pagination: {
    numPages: number; // 总页数
    currentPage: number; // 当前页
    pageSize: number; // 每页大小
    hasNextPage: boolean; // 是否有下一页
    hasPreviousPage: boolean; // 是否有上一页
  };
  usageEvents: {
    timestamp: string; // 时间戳
    model: string; // 模型
    kind: string; // 类型
    maxMode: boolean; // 是否为最大模式
    requestsCosts: number; // 请求成本
    isTokenBasedCall: boolean; // 是否为按 Token 计费调用
    tokenUsage?: {
      inputTokens: number; // 输入 Token
      outputTokens: number; // 输出 Token
      cacheWriteTokens: number; // 缓存写入 Token
      cacheReadTokens: number; // 缓存读取 Token
      totalCents: number; // 总费用(美分)
    };
    isFreeBugbot: boolean; // 是否为免费 Bugbot
    userEmail: string; // 用户邮箱
  }[];
  period: {
    startDate: number; // 开始日期(时间戳)
    endDate: number; // 结束日期(时间戳)
  };
}

响应字段说明

字段说明
totalUsageEventsCount与查询匹配的使用事件总数
pagination用于浏览结果的分页元数据
timestamp事件时间戳(自纪元起的毫秒数)
model此请求使用的 AI 模型
kind使用类别(例如,“按用量计费”、“商用版包含”)
maxMode是否启用了 Max 模式
requestsCosts按请求计量单位计算的成本
isTokenBasedCall当事件按令牌用量计费时为 true
tokenUsage令牌用量明细(当 isTokenBasedCall 为 true 时可用)
isFreeBugbot是否为免费 Bugbot 使用
userEmail发起请求的用户邮箱
period查询数据的日期范围

示例回复

{
  "totalUsageEventsCount": 113,
  "pagination": {
    "numPages": 12,
    "currentPage": 1,
    "pageSize": 10,
    "hasNextPage": true,
    "hasPreviousPage": false
  },
  "usageEvents": [
    {
      "timestamp": "1750979225854",
      "model": "claude-4-opus",
      "kind": "按用量计费",
      "maxMode": true,
      "requestsCosts": 5,
      "isTokenBasedCall": true,
      "tokenUsage": {
        "inputTokens": 126,
        "outputTokens": 450,
        "cacheWriteTokens": 6112,
        "cacheReadTokens": 11964,
        "totalCents": 20.18232
      },
      "isFreeBugbot": false,
      "userEmail": "developer@company.com"
    },
    {
      "timestamp": "1750979173824",
      "model": "claude-4-opus",
      "kind": "Usage-based",
      "maxMode": true,
      "requestsCosts": 10,
      "isTokenBasedCall": true,
      "tokenUsage": {
        "inputTokens": 5805,
        "outputTokens": 311,
        "cacheWriteTokens": 11964,
        "cacheReadTokens": 0,
        "totalCents": 40.16699999999999
      },
      "isFreeBugbot": false,
      "userEmail": "developer@company.com"
    },
    {
      "timestamp": "1750978339901",
      "model": "claude-4-sonnet-thinking",
      "kind": "包含在商务版中"
      "maxMode": true,
      "requestsCosts": 1.4,
      "isTokenBasedCall": false,
      "isFreeBugbot": false,
      "userEmail": "admin@company.com"
    }
  ],
  "period": {
    "startDate": 1748411762359,
    "endDate": 1751003762359
  }
}

示例请求

使用默认分页获取所有使用事件:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
按日期范围和指定用户筛选:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1748411762359,
    "endDate": 1751003762359,
    "email": "developer@company.com",
    "page": 1,
    "pageSize": 25
  }'
获取特定用户的使用事件(支持自定义分页):
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "userId": 12345,
    "page": 2,
    "pageSize": 50
  }'

设置用户花费上限

为各个团队成员设置花费上限。这样就能控制每个用户在团队内使用 AI 的花费额度。
POST /teams/user-spend-limit
速率限制: 每个团队每分钟最多 60 次请求

请求体

参数类型必填说明
userEmailstring团队成员的邮箱地址
spendLimitDollarsnumber以美元计的花费上限(仅限整数,不含小数)。
  • 该用户必须已是你团队的成员
  • 只接受整数值(不含小数金额)
  • spendLimitDollars 设为 0 会把上限设为 $0

响应

返回一个标准化的响应,用于指示成功或失败:
{
  outcome: 'success' | 'error';
  message: string;
}

示例回复

已成功设置限制:
{
  "outcome": "success",
  "message": "已将用户 developer@company.com 的支出上限设为 $100"
}
错误响应:
{
  "outcome": "error",
  "message": "邮箱格式无效"
}

示例请求

设置消费上限:
curl -X POST https://api.cursor.com/teams/user-spend-limit \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "userEmail": "developer@company.com",
    "spendLimitDollars": 100
  }'

Repo Blocklists API

添加仓库并使用匹配规则,防止文件或目录被索引,或被用作你团队的上下文。

获取团队仓库黑名单

检索你团队配置的所有仓库黑名单。
GET /settings/repo-blocklists/repos
响应
返回一个仓库封禁列表对象的数组:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
示例回复
{
  "repos": [
    {
      "id": "repo_123",
      "url": "https://github.com/company/sensitive-repo",
      "patterns": ["*.env", "config/*", "secrets/**"]
    },
    {
      "id": "repo_456",
      "url": "https://github.com/company/internal-tools",
      "patterns": ["*"]
    }
  ]
}
示例请求
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u 你的_API_KEY:

覆盖更新 Repo 阻止列表

为提供的仓库替换其现有的阻止列表。 注意:此端点只会覆盖所提供仓库的匹配模式,其他仓库不受影响。
POST /settings/repo-blocklists/repos/upsert
请求体
参数类型必填说明
reposarray仓库阻止列表对象数组
每个仓库对象必须包含:
字段类型必填说明
urlstring要加入阻止列表的仓库 URL
patternsstring[]要阻止的文件模式数组(支持 glob 通配符)
响应
返回更新后的仓库封锁列表:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
示例请求
curl -X POST https://api.cursor.com/settings/repo-blocklists/repos/upsert \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "repos": [
      {
        "url": "https://github.com/company/sensitive-repo",
        "patterns": ["*.env", "config/*", "secrets/**"]
      },
      {
        "url": "https://github.com/company/internal-tools", 
        "patterns": ["*"]
      }
    ]
  }'

删除仓库封锁列表

从封锁列表中移除指定仓库。
DELETE /settings/repo-blocklists/repos/:repoId
参数
参数类型必填描述
repoIdstring要删除的仓库黑名单的 ID
响应
删除成功时返回 204 No Content。
示例请求
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u 你的_API_KEY:

模式示例

常见的 blocklist 模式:
  • * - 屏蔽整个仓库
  • *.env - 屏蔽所有 .env 文件
  • config/* - 屏蔽 config 目录中的所有文件
  • **/*.secret - 屏蔽任意子目录中的所有 .secret 文件
  • src/api/keys.ts - 屏蔽指定文件