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

身份验证

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

创建 API 密钥

  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: '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

请求体

参数类型必需描述
startDatenumber开始日期(以毫秒为单位的时间戳)
endDatenumber结束日期(以毫秒为单位的时间戳)
日期范围不能超过 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日期(以毫秒为单位的时间戳)
isActive用户在此日期是否活跃
totalLinesAdded添加的代码行数
totalLinesDeleted删除的代码行数
acceptedLinesAdded从接受的 AI 建议中添加的行数
acceptedLinesDeleted从接受的 AI 建议中删除的行数
totalApplies应用操作次数
totalAccepts接受的建议数
totalRejects拒绝的建议数
totalTabsShown显示的 Tab 补全数
totalTabsAccepted接受的 Tab 补全数
composerRequestsComposer 请求数
chatRequests聊天请求数
agentRequestsAgent 请求数
cmdkUsages命令面板(Cmd+K)使用次数
subscriptionIncludedReqs订阅包含的请求数
apiKeyReqsAPI 密钥请求数
usageBasedReqs按使用量付费的请求数
bugbotUsages错误检测使用次数
mostUsedModel最常用的 AI 模型
applyMostUsedExtension应用操作中最常用的文件扩展名
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总支出(以分为单位)
fastPremiumRequests快速高级模型请求数
name成员姓名
email成员邮箱
role团队角色
hardLimitOverrideDollars自定义支出限制覆盖
subscriptionCycleStart订阅周期开始时间(纪元毫秒)
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 调用、模型使用、令牌消耗和成本的精细洞察。
POST /teams/filtered-usage-events

请求体

参数类型必需描述
startDatenumber开始日期(以毫秒为单位的时间戳)
endDatenumber结束日期(以毫秒为单位的时间戳)
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;
    kindLabel: 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事件时间戳(以毫秒为单位的时间戳)
model请求使用的 AI 模型
kindLabel使用类别(例如,“基于使用量”、“包含在商业版中”)
maxMode是否启用了最大模式
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",
      "kindLabel": "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",
      "kindLabel": "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",
      "kindLabel": "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
  }'

仓库阻止列表 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 YOUR_API_KEY:

更新插入仓库阻止列表

替换提供的仓库的现有仓库阻止列表。 注意:此端点只会覆盖提供的仓库的模式。所有其他仓库将不受影响。
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 - 阻止特定文件