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

认证

所有 API 请求都需要使用 API key 进行认证。只有团队管理员可以创建和管理 API key。 API key 与组织绑定,所有管理员均可查看,且不受原始创建者账号状态影响。

创建 API Key

  1. 进入 cursor.com/dashboardSettings 选项卡 → Cursor Admin API Keys
  2. 点击 Create New API Key
  3. 给你的 key 起个有描述性的名称(例如:“Usage Dashboard Integration”)
  4. 立即复制生成的 key——之后将无法再次查看
格式:key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

使用你的 API Key

在 Basic 认证中将你的 API key 作为用户名: 使用 curl 进行 Basic 认证:
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: 'owner' | 'member' | 'free-owner';
  }[];
}

示例响应

{
  "teamMembers": [
    {
      "name": "Alex",
      "email": "developer@company.com",
      "role": "member"
    },
    {
      "name": "Sam",
      "email": "admin@company.com",
      "role": "owner"
    }
  ]
}

示例请求

curl -X GET https://api.cursor.com/teams/members \
  -u YOUR_API_KEY:

获取每日使用数据

在指定日期范围内获取团队的每日使用指标,包含代码编辑、AI 辅助使用和接收率等洞察。
POST /teams/daily-usage-data

请求体

ParameterTypeRequiredDescription
startDatenumberYes以 epoch 毫秒表示的开始日期
endDatenumberYes以 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;
  };
}

响应字段

FieldDescription
date以 epoch 毫秒表示的日期
isActive当天是否活跃
totalLinesAdded新增代码行数
totalLinesDeleted删除代码行数
acceptedLinesAdded由已接受的 AI 建议产生的新增行数
acceptedLinesDeleted由已接受的 AI 建议产生的删除行数
totalApplies应用(Apply)操作次数
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 YOUR_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;
    tokenUsage?: {
      inputTokens: number;
      outputTokens: number;
      cacheWriteTokens: number;
      cacheReadTokens: number;
      totalCents: number;
    };
    isFreeBugbot: boolean;
    userEmail: string;
  }[];
  period: {
    startDate: number;
    endDate: number;
  };
}

响应字段说明

字段说明
totalUsageEventsCount匹配查询的使用事件总数
pagination用于结果导航的分页元数据
timestamp事件时间戳(epoch 毫秒)
model请求所用的 AI 模型
kind使用类别(如 “Usage-based”、“Included in Business”)
maxMode是否启用了 Max 模式
requestsCosts按请求单位计的成本
isTokenBasedCall当事件按用量计费时为 true
tokenUsage详细的 token 消耗(当 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": "Usage-based",
      "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": "Included in Business",
      "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
  }'

Repo Blocklists API

添加仓库及匹配模式,阻止文件或目录被索引,或被用于团队上下文。

获取团队 Repo Blocklists

获取团队已配置的所有仓库阻止列表。
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 YOUR_API_KEY:

Upsert Repo Blocklists

替换所提供仓库的现有阻止列表。 注意:该端点只会覆盖所提供仓库的匹配模式,其他仓库不会受到影响。
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 YOUR_API_KEY:

模式示例

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