Admin API
Admin API 允许你以编程方式访问团队数据,包括成员信息、用量指标、支出明细、团队目录组、模型访问和 Grok Bot。
- Admin API 使用 Basic Authentication,并将你的 API 密钥作为用户名。
- 有关创建 API 密钥、认证方式、速率限制和最佳实践的详细信息,请参阅 API 概览。
如需执行跨团队的组织级操作,请参阅 组织 和 组织 API。
端点
获取团队成员
/teams/members获取所有团队成员及其详细信息。
响应字段
teamMembers array
idstring - 团队成员的编码用户 ID (例如user_PDSPmvukpYgZEDXsoNirw3CFhy)。OpenTelemetry 导出中的可选资源属性cursor.user.account_id也携带相同的值。emailstring - 团队成员的电子邮件地址namestring - 团队成员的显示名称rolestring - 在团队中的角色 (例如member、owner)isRemovedboolean - 该成员是否已从团队中移除
curl -X GET https://api.cursor.com/teams/members \ -u YOUR_API_KEY:响应:
{ "teamMembers": [ { "id": "user_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Alex", "email": "[email protected]", "role": "member", "isRemoved": false }, { "id": "user_kljUvI0ASZORvSEXf9hV0ydcso", "name": "Sam", "email": "[email protected]", "role": "owner", "isRemoved": false } ]}获取审计日志
/teams/audit-logs通过筛选获取团队的审计日志事件,用于跟踪团队活动、安全事件和配置变更。每个团队每分钟最多 20 次请求。详见速率限制和最佳实践。
参数
startTime string | number
endTime string | number
eventTypes string
login, logout, add_user, remove_user, update_user_role, team_settings, mcp_server_config, team_api_key, user_api_key, privacy_mode, user_spend_limit, team_rule, team_repo, team_hook, team_command, create_directory_group, delete_directory_group, update_directory_group, update_directory_group_permissions, add_user_to_directory_group, remove_user_from_directory_group, bugbot_installation, bugbot_installation_settings, bugbot_repo_settings, bugbot_team_rule, bugbot_team_settings, bugbot_bulk_repo_update, grok_bot_created, grok_bot_lifecycle, sand_onboarding, grok_bot_access_changed, grok_bot_team_setup_manifest, grok_bot_group_settings, grok_bot_group_resource, grok_bot_resource, grok_bot_machine, grok_bot_vm, grok_bot_vm_bulk, grok_bot_routine, mcp_authentication, slack_account_linksearch string
page number
1pageSize number
100users string
日期范围不能超过 30 天。更长时间段请拆分为多次请求。
日期格式
startTime 和 endTime 参数支持多种格式:
- 相对快捷方式:
now、today、yesterday、7d(7 天前) 、5h(5 小时前) 、300s(300 秒前) - ISO 8601 字符串:
2024-01-15T12:00:00Z或2024-01-15T10:00:00-05:00 - YYYY-MM-DD 格式:
2024-01-15(时间默认为 00:00:00 UTC) - Unix 时间戳:
1705315200(秒) 或1705315200000(毫秒)
示例:
?startTime=7d&endTime=now- 最近 7 天?startTime=5h&endTime=now- 最近 5 小时?startTime=2024-01-15&endTime=2024-01-20- 指定日期范围?startTime=1705315200000&endTime=1705401600000- Unix 时间戳
用户筛选
users 参数支持多种格式,使用逗号分隔:
- 邮箱地址:
[email protected],[email protected] - 编码用户 ID:
user_PDSPmvukpYgZEDXsoNirw3CFhy,user_kljUvI0ASZORvSEXf9hV0ydcso
你可以混合使用这些格式:[email protected],12345,user_PDSPmvukpYgZEDXsoNirw3CFhy
每次请求的最大用户数等于 pageSize。
curl -X GET "https://api.cursor.com/teams/[email protected],[email protected]&eventTypes=login,add_user" \ -u YOUR_API_KEY:响应:
events 中的每个对象都包含 application_type:Grok Bot 为 grok_bot,其他 Cherri Code 界面为 cursor;当无法确定应用时为空字符串 (包括在该字段存在之前写入的记录) 。
例程记录通过 event_data.sand_agent_id 标识 Bot。
{ "events": [ { "event_id": "evt_abc123", "timestamp": "2024-01-15T12:30:00.000Z", "ip_address": "203.0.113.42", "user_email": "[email protected]", "event_type": "add_user", "application_type": "cursor", "event_data": { "email": "[email protected]", "method": "manual" } }, { "event_id": "evt_def456", "timestamp": "2024-01-15T10:15:00.000Z", "ip_address": "192.168.1.1", "user_email": "[email protected]", "event_type": "login", "application_type": "grok_bot", "event_data": { "ip_address": "192.168.1.1", "user_agent": "Cherri Code/0.42.0" } } ], "pagination": { "page": 1, "pageSize": 100, "totalCount": 2, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }, "params": { "teamId": 12345, "startDate": 1704729600000, "endDate": 1705334400000 }}获取每日使用情况数据
/teams/daily-usage-data获取团队的每日用量指标。数据按小时汇总,建议对此端点每小时最多轮询一次。每个团队每分钟最多可发送 20 个请求。请参阅最佳实践。
参数
startDate 数值 必填
endDate number 必填
page number
pageSize 同时提供时,将启用分页,并返回在所请求日期范围内具有成员资格的所有团队成员的数据。pageSize number
page 一同提供时,将启用分页,并返回在所请求日期范围内具有成员资格的所有团队成员的数据。未指定分页参数时,此端点仅返回活跃用户 (即在该日期范围内有活动的用户) 。要获取所有团队成员,请同时提供 page 和 pageSize 参数。
使用分页时,响应会为每位用户返回一个 isActive 字段,用于指示该用户当天是否有活动。请求时间段结束后才加入的成员不包括在内。
日期范围不能超过 30 天。如需查询更长时段,请分多次请求。
字段 subscriptionIncludedReqs、usageBasedReqs 和 apiKeyReqs 统计的是原始使用事件,而非较早的基于请求的定价模式中的可计费请求单位。要获取准确的可计费请求数量,请使用 /teams/filtered-usage-events 端点,并对 requestsCosts 字段求和。
响应字段
data 数组中的每个对象包含:
userIdnumber - 用户的唯一标识符daystring - 此记录所涵盖的日期 (ISO 日期,例如2024-03-18)datenumber - 以纪元毫秒为单位的日期emailstring - 用户的电子邮件地址isActive布尔值 - 用户当天是否有活动 (仅在分页时提供)totalLinesAddednumber - 新增代码行总数totalLinesDeletednumber - 删除的代码行总数acceptedLinesAddednumber - 已接受的 AI 建议新增行数acceptedLinesDeletednumber - 已接受的 AI 建议删除行数totalAppliesnumber - 应用 AI 代码的操作总数totalAcceptsnumber - 已接受的 AI 建议总数totalRejectsnumber - 被拒绝的 AI 建议总数totalTabsShownnumber - 向用户展示的 Tab 补全总数totalTabsAcceptednumber - 用户接受的 Tab 补全数量composerRequestsnumber - 发起的 Composer 请求数chatRequestsnumber - 发起的 chat 请求数量agentRequestsnumber - 发起的 Agent 模式请求数cmdkUsagesnumber - Cmd+K 内联编辑的使用次数subscriptionIncludedReqsnumber - 订阅方案包含的请求数apiKeyReqsnumber - 通过 API 密钥发起的请求数usageBasedReqsnumber - 按用量计费的 (超额) 请求数bugbotUsagesnumber - Bugbot 使用次数mostUsedModelstring | null - 当天使用频率最高的 AI 模型applyMostUsedExtensionstring | null - 应用操作最常用的文件扩展名tabMostUsedExtensionstring | null - Tab 补全最常用的文件扩展名clientVersionstring | null - 所使用的 Cherri Code 客户端版本
# 仅获取活跃用户的数据(不分页)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 }'# 获取所有团队成员的数据(分页)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, "page": 1, "pageSize": 1000 }'响应 (不分页,仅限活跃用户) :
{ "data": [ { "userId": 12345, "day": "2024-03-18", "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-5", "applyMostUsedExtension": ".tsx", "tabMostUsedExtension": ".ts", "clientVersion": "0.25.1", "email": "[email protected]" } ], "period": { "startDate": 1710720000000, "endDate": 1710892800000 }}响应 (含分页——所有团队成员) :
{ "data": [ { "userId": 12345, "day": "2024-03-18", "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-5", "applyMostUsedExtension": ".tsx", "tabMostUsedExtension": ".ts", "clientVersion": "0.25.1", "email": "[email protected]" }, { "userId": 12346, "day": "2024-03-18", "date": 1710720000000, "isActive": false, "totalLinesAdded": 0, "totalLinesDeleted": 0, "acceptedLinesAdded": 0, "acceptedLinesDeleted": 0, "totalApplies": 0, "totalAccepts": 0, "totalRejects": 0, "totalTabsShown": 0, "totalTabsAccepted": 0, "composerRequests": 0, "chatRequests": 0, "agentRequests": 0, "cmdkUsages": 0, "subscriptionIncludedReqs": 0, "apiKeyReqs": 0, "usageBasedReqs": 0, "bugbotUsages": 0, "mostUsedModel": null, "applyMostUsedExtension": null, "tabMostUsedExtension": null, "clientVersion": null, "email": "[email protected]" } ], "period": { "startDate": 1710720000000, "endDate": 1710892800000 }, "pagination": { "page": 1, "pageSize": 1000, "totalUsers": 150, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }}获取支出数据
/teams/spend获取当前计费周期的支出数据,支持搜索、排序和分页。
参数
searchTerm string
sortBy string
amount、date、user。默认值:datesortDirection string
asc、desc。默认值:descpage number
1pageSize number
响应字段
teamMemberSpend 中的每个对象包含:
userIdstring - 编码后的用户 ID (例如:user_PDSPmvukpYgZEDXsoNirw3CFhy) 。与/teams/members中的teamMembers[].id使用相同的标识符命名空间。namestring - 用户显示名称emailstring - 用户邮箱地址rolestring - 在团队中的角色 (例如:member、owner)spendCentsnumber - 当前计费周期内按需支出金额 (单位:美分),不包括包含的用量overallSpendCentsnumber - 当前计费周期内的总支出金额 (单位:美分),包括按需用量和包含的用量fastPremiumRequestsnumber - 该计费周期内按用量计费的高级请求次数hardLimitOverrideDollarsnumber - 为该用户设置的自定义硬性支出上限覆盖值 (单位:美元,0 表示不覆盖)monthlyLimitDollarsnumber | null - 为该用户设置的每月支出上限 (单位:美元),若未设置上限则为nulleffectivePerUserLimitDollarsnumber - 当前生效的按用户支出上限 (单位:美元),由monthlyLimitDollars和hardLimitOverrideDollars推导得出
2026 年 6 月 4 日,我们为 spendCents 和 overallSpendCents 字段增加了额外精度,以避免在将结果与发票金额比较时出现舍入误差。
curl -X POST https://api.cursor.com/teams/spend \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "searchTerm": "[email protected]", "page": 2, "pageSize": 25 }'响应:
{ "teamMemberSpend": [ { "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy", "spendCents": 2450.125487, "overallSpendCents": 2450.125487, "fastPremiumRequests": 1250, "name": "Alex", "email": "[email protected]", "role": "member", "hardLimitOverrideDollars": 100, "monthlyLimitDollars": 200, "effectivePerUserLimitDollars": 100 }, { "userId": "user_kljUvI0ASZORvSEXf9hV0ydcso", "spendCents": 1875.500123, "overallSpendCents": 3200.750456, "fastPremiumRequests": 980, "name": "Sam", "email": "[email protected]", "role": "owner", "hardLimitOverrideDollars": 0, "monthlyLimitDollars": null, "effectivePerUserLimitDollars": 50 } ], "subscriptionCycleStart": 1708992000000, "totalMembers": 15, "totalPages": 1}获取使用事件数据
/teams/filtered-usage-events为你的团队检索带有筛选、搜索和分页选项的详细使用事件。此端点可提供对 API 调用、模型使用、令牌消耗和费用的细致洞察。数据按小时汇总。我们建议最多每小时轮询此端点一次。每个团队的速率限制为每分钟 60 次请求。参见 API 指南。
成本计算:要将事件级成本与 /teams/spend 总计对齐,请汇总所有事件的 chargedCents 字段。此字段包含模型费用和 Cherri Code Token 费率 (在请求适用该费率时) ,与仪表盘总计一致。它适用于按 token 和按请求计费的方案。
cursorTokenFee 字段表示 Cherri Code Token 费率,且仅在该费率适用于第三方模型请求时才会出现。这包括 Auto 将请求路由至第三方模型的情况。Cherri Code 的一方模型 (如 Grok 和 Composer) 以及按请求计费的企业版账户均不包含此费用。参见 Cherri Code Token 费率。
参数
startDate number
endDate number
startDate 和 endDate 是精确到毫秒的时间点,并且
两个边界都包含在内。恰好发生在 2026-05-08T00:00:00.000Z 的事件,
当 endDate 为 1778198400000 时也会被包含在内。对于不重叠的每日
摄取时间窗口,请将前一个窗口的 endDate 设为当天最后一
毫秒,例如 2026-05-07T23:59:59.999Z。
userId number
page number
1pageSize number
100。最大值:1000。email string
serviceAccountId string
cloudAgentId string
* 可返回来自所有云代理运行的事件。automationId string
* 可返回所有自动化的事件。hostingType string
CLOUD- Cherri Code 托管的运行SELF_HOSTED- 任何自托管运行 (Team Pool worker 或我的机器 worker)SELF_HOSTED_POOL- 仅限 Team Pool workerSELF_HOSTED_MACHINE- 仅限个人 "My Machine" worker
无法识别的 hostingType 值会返回 400 错误,而不是空结果,因此不会把拼写错误误当成自托管支出确实为零。此过滤器仅涵盖推理支出;自托管计算在你自己的机器上运行,且永远不会由 Cherri Code 计量。
当你传入多个筛选条件时,此端点会使用 AND 将它们组合。例如,同时传入 automationId 和 serviceAccountId 时,将返回同时匹配这两个值的事件。
响应字段
usageEvents 中的每个对象包含:
timestampstring - 事件时间戳 (epoch 毫秒,以字符串形式表示)userEmailstring - 发出该请求的用户邮箱地址serviceAccountIdstring | undefined - 发出该请求的服务账户 ID。对于由人工用户发起的事件,此字段会被省略。serviceAccountNamestring | undefined - 发出该请求的服务账户显示名称。人工用户事件中会省略此字段。cloudAgentIdstring | undefined - 与此事件关联的云端代理运行 ID。对于云端代理之外的事件,会省略此字段。automationIdstring | undefined - 与此事件关联的自动化 UUID。自动化之外的事件中会省略此字段。conversationIdstring | undefined - 生成此事件的对话 (智能体会话) ID。可用它将费用归因于某个会话,或作为与其他提供对话 ID 的来源 (如 AI Code Tracking API) 进行关联的键。未关联对话的事件会省略此字段。modelstring - 用于该请求的 AI 模型kindstring - 计费类别 (例如Usage-based、Included in Business)maxModeboolean - 请求是否使用 Max 模式requestsCostsnumber - 按请求单位计算的成本isTokenBasedCallboolean - 请求是否按 token 用量计费isChargeableboolean - 此事件是否计费isHeadlessboolean - 此请求是否在没有连接客户端的情况下发出 (例如后台 Agent)tokenUsageobject | undefined - Token 使用明细 (当isTokenBasedCall为true时存在) :inputTokensnumber - 消耗的输入 token 数outputTokensnumber - 生成的输出 token 数cacheWriteTokensnumber - 写入缓存的 token 数cacheReadTokensnumber - 从缓存读取的 token 数totalCentsnumber - 模型总费用 (美分)discountPercentOffnumber | undefined - 已应用的折扣百分比 (如有)
chargedCentsnumber - 此事件实际收取的总金额 (单位:美分)。对于适用 Cherri Code Token 费率的第三方模型请求,此金额包含模型费用以及 Cherri Code Token 费率。使用此字段可将事件级成本与/teams/spend总计对齐。适用于按 token 和按请求计费的方案。cursorTokenFeenumber | undefined - Cherri Code Token 费率 (单位:美分)。仅当该费率适用于第三方模型请求时出现 (包括 Auto 路由到第三方模型时) 。
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": "[email protected]", "page": 1, "pageSize": 25 }'响应:
{ "totalUsageEventsCount": 113, "pagination": { "numPages": 5, "currentPage": 1, "pageSize": 25, "hasNextPage": true, "hasPreviousPage": false }, "usageEvents": [ { "timestamp": "1750979225854", "userEmail": "[email protected]", "conversationId": "8f2e4a1b-6c3d-4e5f-9a7b-2d1c8e6f4a3b", "model": "claude-4.5-sonnet", "kind": "Usage-based", "maxMode": true, "requestsCosts": 5, "isTokenBasedCall": true, "isChargeable": true, "isHeadless": false, "tokenUsage": { "inputTokens": 126, "outputTokens": 450, "cacheWriteTokens": 6112, "cacheReadTokens": 11964, "totalCents": 20.18232 }, "chargedCents": 21.36232, "cursorTokenFee": 1.18 }, { "timestamp": "1750979173824", "userEmail": "[email protected]", "conversationId": "8f2e4a1b-6c3d-4e5f-9a7b-2d1c8e6f4a3b", "model": "claude-4.5-sonnet", "kind": "Usage-based", "maxMode": true, "requestsCosts": 10, "isTokenBasedCall": true, "isChargeable": true, "isHeadless": false, "tokenUsage": { "inputTokens": 5805, "outputTokens": 311, "cacheWriteTokens": 11964, "cacheReadTokens": 0, "totalCents": 40.167, "discountPercentOff": 10 }, "chargedCents": 37.33, "cursorTokenFee": 1.18 }, { "timestamp": "1750978339901", "userEmail": "[email protected]", "model": "claude-4-sonnet-thinking", "kind": "Included in Business", "maxMode": true, "requestsCosts": 1.4, "isTokenBasedCall": false, "isChargeable": false, "isHeadless": false, "chargedCents": 8 } ], "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 '{ "startDate": 1748411762359, "endDate": 1751003762359, "serviceAccountId": "sa_abc123", "page": 1, "pageSize": 10 }'服务账户响应:
{ "totalUsageEventsCount": 1, "pagination": { "numPages": 1, "currentPage": 1, "pageSize": 10, "hasNextPage": false, "hasPreviousPage": false }, "usageEvents": [ { "timestamp": "1750979225854", "userEmail": "[email protected]", "serviceAccountId": "sa_abc123", "serviceAccountName": "Nightly CI Agent", "conversationId": "3b9d7c2e-1f4a-4b8c-a6d5-e9f0a2b4c6d8", "model": "claude-4.5-sonnet", "kind": "Usage-based", "maxMode": true, "requestsCosts": 5, "isTokenBasedCall": true, "isChargeable": true, "isHeadless": true, "tokenUsage": { "inputTokens": 126, "outputTokens": 450, "cacheWriteTokens": 6112, "cacheReadTokens": 11964, "totalCents": 20.18232 }, "chargedCents": 21.36232, "cursorTokenFee": 1.18 } ], "period": { "startDate": 1748411762359, "endDate": 1751003762359 }}自动化使用示例:
使用自动化 UUID 获取其使用事件。自动化归因适用于以用户或服务账户身份运行的自动化。
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, "automationId": "7fc64f90-6d7a-4a5d-91b1-bd1f529a85dd", "page": 1, "pageSize": 100 }'每个匹配的事件都包含其 automationId 和 cloudAgentId。对所有事件的 chargedCents 求和,即可计算该自动化的总费用。
自托管代理支出示例:
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, "hostingType": "SELF_HOSTED", "page": 1, "pageSize": 10 }'设置用户支出限额
/teams/user-spend-limit为团队中的单个成员设置支出限额。这样可以控制每个用户在团队内 AI 使用产生的费用。每个团队速率限制为每分钟 250 次请求。参见 速率限制。
如需在单次请求中最多更新 100 个成员,请使用 批量设置用户支出限额 (预览版)。
参数
userEmail string 必填
spendLimitDollars number | null 必填
null 可移除该上限。- 可用性:仅限企业版
- 用户必须已经是你团队的成员
- 仅接受整数值 (不允许小数金额)
- 设置
spendLimitDollars为 0 会将上限设为 $0 - 设置
spendLimitDollars为null会完全清除/移除该上限
curl -X POST https://api.cursor.com/teams/user-spend-limit \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userEmail": "[email protected]", "spendLimitDollars": 100 }'成功响应:
{ "outcome": "success", "message": "Spend limit set to $100 for user [email protected]"}错误响应:
{ "outcome": "error", "message": "Invalid email format"}批量设置用户支出限额 (预览版)
/teams/user-spend-limits在单次请求中最多为 100 名团队成员设置支出限额。速率限制为每个团队每分钟 20 次请求。参见速率限制。
该批量路由处于预览阶段,可能会发生变化。在正式发布之前,请求结构、响应字段和错误行为都可能调整。
参数
updates array 必填
userEmailstring - 团队成员的电子邮件地址spendLimitDollarsnumber | null - 以美元为单位的整数支出限额。设为null可移除限额。
响应字段
requestedCountnumber - 请求中的更新数量updatedCountnumber - 发生变更的限额数量unchangedCountnumber - 已与请求值相同的限额数量failedCountnumber - Cherri Code 未能应用的更新数量resultsarray - 按请求顺序返回的结果。每条结果包含userEmail及状态updated、unchanged或failed。失败结果还会包含error消息。
- 适用范围:仅限企业版。批量端点正在逐步推出;尚未启用的团队会收到
403响应 - 团队成员不存在时会返回
failed结果,但不会阻塞其他更新 - 请求字段无效、电子邮件重复或更新超过 100 条时,将返回
400响应,且不会应用任何更新 - 重复提交已成功的更新会返回
unchanged,且不会再创建审计事件
curl -X POST https://api.cursor.com/teams/user-spend-limits \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "updates": [ { "userEmail": "[email protected]", "spendLimitDollars": 100 }, { "userEmail": "[email protected]", "spendLimitDollars": null }, { "userEmail": "[email protected]", "spendLimitDollars": 50 } ] }'响应:
{ "requestedCount": 3, "updatedCount": 1, "unchangedCount": 1, "failedCount": 1, "results": [ { "userEmail": "[email protected]", "status": "updated" }, { "userEmail": "[email protected]", "status": "unchanged" }, { "userEmail": "[email protected]", "status": "failed", "error": "User not found in team" } ]}移除团队成员
/teams/remove-member以编程方式从团队中移除成员。适用于自动化离职流程或与 HR 系统集成。每个团队的速率限制为每分钟 50 次。参见 速率限制。
参数
userId string
user_PDSPmvukpYgZEDXsoNirw3CFhy) 。当未提供 email 时必填。email string
userId 时必填。- 可用性:仅限企业版
- 仅提供
userId或email其中之一,不要同时提供 - 移除后团队中至少需要保留一名付费成员
- 移除后团队中至少需要保留一名管理员 (owner 或 free-owner)
curl -X POST https://api.cursor.com/teams/remove-member \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "email": "[email protected]" }'响应:
{ "success": true, "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy", "hasBillingCycleUsage": true}通过 user ID 移除:
curl -X POST https://api.cursor.com/teams/remove-member \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy" }'错误响应:
{ "error": "User is not a member of this team"}{ "error": "Either userId or email must be provided"}{ "error": "Only one of userId or email should be provided, not both"}获取团队代码仓库屏蔽列表
/settings/repo-blocklists/repos获取为团队配置的所有代码仓库屏蔽列表。添加仓库并使用模式,防止文件或目录被索引或用作上下文。
模式示例
常见的屏蔽列表模式:
*- 屏蔽整个仓库*.env- 屏蔽所有 .env 文件config/*- 屏蔽 config 目录中的所有文件**/*.secret- 屏蔽任何子目录中的所有 .secret 文件src/api/keys.ts- 屏蔽特定文件
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \ -u YOUR_API_KEY:响应:
{ "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": ["*"] } ]}新增或更新代码仓库屏蔽列表
/settings/repo-blocklists/repos/upsert替换指定代码仓库现有的屏蔽列表。此端点只会覆盖所提供代码仓库的匹配模式,其他仓库不会受到影响。
参数
repos array 必填
代码仓库屏蔽列表对象数组。每个代码仓库对象必须包含:
urlstring - 要加入屏蔽列表的代码仓库 URLpatternsstring[] - 要屏蔽的文件模式数组 (支持 glob 模式)
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": ["*"] } ] }'响应:
{ "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": ["*"] } ]}删除代码仓库屏蔽列表
/settings/repo-blocklists/repos/:repoId从屏蔽列表中移除指定代码仓库。删除成功时返回 204 No Content。
参数
repoId string 必填
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \ -u YOUR_API_KEY:响应:
204 No Content团队目录组
Team Admin API 在 /teams/directory-groups 下的路由 用于管理团队目录组。这些群组在单个团队内设置支出和策略。关于它们与组织级群体的区别,参见 组织群组,以及 账单组。
当某个组织群组应当驱动该团队的成员关系时,请将群组映射到团队。可使用 Team API 密钥 创建、列出团队目录组以及添加或移除其成员。仪表盘和 SCIM 的设置方法参见目录组。
这些路由 与账单组分属不同的 API。请参照下表选择正确的路径和 id:
| 群组 | 路径 | ID |
|---|---|---|
| 组织群组 | /organizations/groups | id 使用 g_ 前缀。响应中还会返回带 grp_ 前缀的 publicId。参见组织群组。 |
| 团队目录组 | /teams/directory-groups | public id 使用 team_group_… 前缀,例如 team_group_01k2ja2000e0080000000000n2。 |
| 账单组 | /teams/groups | group_… |
:groupId 是该团队目录组的 public id,使用 team_group_… 前缀。请勿传入组织群组的 g_ 或 grp_ id,也不要传入账单组的 group_… id。
- 身份验证:Team API 密钥 (Basic 认证) 。读取需要
read:*,写入需要admin:*;带admin:*的密钥两者皆可。使用read:*密钥执行写入会返回401。 - 群组 ID:每个
:groupId都是群组的 public id,使用team_group_…前缀,例如team_group_01k2ja2000e0080000000000n2。组织群组使用g_和grp_,账单组使用group_…。 - 分页:列表路由 接受
page和pageSize,两个值都必须为正整数。 - 速率限制:每个路由 对每个团队每分钟允许 20 次请求。参见速率限制与最佳实践。
- SCIM 同步的群组:请在身份提供商中管理成员。对 SCIM 同步的群组发起添加或移除成员的请求会返回
400。
群组路由 共用以下错误响应:
| 状态码 | 场景 |
|---|---|
400 | 群组 ID、分页值或请求体格式不正确 |
401 | API 密钥无效,或密钥缺少 read:* (读取) 或 admin:* (写入) 权限范围 |
404 | 该群组在此团队中不存在 |
429 | 超出速率限制,响应中包含 Retry-After: 60 头 |
列出团队目录组
/teams/directory-groups获取 API 密钥所属团队的团队目录组。
查询参数
page number
1。pageSize number
50。上限为 200;超过 200 的值会被截断为 200。响应字段
groups 中的每个对象包含:
idstring - 带有team_group_…前缀的群组 public id。在其他路由中将此值用作:groupId。namestring - 群组名称memberCountnumber - 群组中的成员数量monthlySpendingLimitDollarsnumber | null - 每位群组成员的支出限额,以整美元为单位。null表示该群组无限额。createdAtstring - 创建时间,ISO 8601 格式updatedAtstring - 最后更新时间,ISO 8601 格式
pagination object
page、pageSize、totalCount、totalPages、hasNextPage 和 hasPreviousPage。curl -X GET "https://api.cursor.com/teams/directory-groups?page=1&pageSize=50" \ -u YOUR_API_KEY:响应:
{ "groups": [ { "id": "team_group_01k2ja2000e0080000000000n2", "name": "Engineering", "memberCount": 12, "monthlySpendingLimitDollars": 500, "createdAt": "2026-01-15T10:30:00.000Z", "updatedAt": "2026-01-20T14:22:00.000Z" }, { "id": "team_group_01k2jb4000e0080000000000p7", "name": "Design", "memberCount": 8, "monthlySpendingLimitDollars": null, "createdAt": "2026-01-16T09:00:00.000Z", "updatedAt": "2026-01-16T09:00:00.000Z" } ], "pagination": { "page": 1, "pageSize": 50, "totalCount": 2, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }}获取团队目录组
/teams/directory-groups/:groupId获取某个团队目录组。
参数
groupId string 必填
team_group_… 前缀,例如 team_group_01k2ja2000e0080000000000n2。组织群组的 g_ 或 grp_ id 以及账单组的 group_… id 会返回 400 或 404。响应字段
group 对象包含 id、name、memberCount、monthlySpendingLimitDollars、createdAt 和 updatedAt。这些字段与 列出团队目录组 的响应一致。
curl -X GET https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \ -u YOUR_API_KEY:响应:
{ "group": { "id": "team_group_01k2ja2000e0080000000000n2", "name": "Engineering", "memberCount": 12, "monthlySpendingLimitDollars": 500, "createdAt": "2026-01-15T10:30:00.000Z", "updatedAt": "2026-01-20T14:22:00.000Z" }}创建团队目录组
/teams/directory-groups创建一个成员手动管理的团队目录组。如需创建 SCIM 同步的群组,请改为从身份提供商同步。参见 SCIM。
请求体
name string 必填
响应字段
返回 201 Created 及新建的 group 对象。该对象包含 id、name、memberCount、monthlySpendingLimitDollars、createdAt 和 updatedAt。其中 id 为该群组的 public id,带 team_group_… 前缀。
错误
400- 群组名称缺失、为空,或已被另一个活跃群组占用。
curl -X POST https://api.cursor.com/teams/directory-groups \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Engineering" }'响应:
{ "group": { "id": "team_group_01k2ja2000e0080000000000n2", "name": "Engineering", "memberCount": 0, "monthlySpendingLimitDollars": null, "createdAt": "2026-01-15T10:30:00.000Z", "updatedAt": "2026-01-15T10:30:00.000Z" }}更新团队目录组
/teams/directory-groups/:groupId更新群组的名称或支出限额。支持部分更新:至少需包含一个字段,未提供的字段保持当前值不变。
参数
groupId string 必填
team_group_… 前缀,例如 team_group_01k2ja2000e0080000000000n2。请求体
name string
monthlySpendingLimitDollars number
0 到 2147483647。clearMonthlySpendingLimitDollars boolean
true 可移除群组支出限额。请勿在同一请求中包含 monthlySpendingLimitDollars。响应字段
返回更新后的 group 对象,包含 id、name、memberCount、monthlySpendingLimitDollars、createdAt 和 updatedAt。
错误
400- 请求未包含任何更新字段、包含无效值、使用了另一个活跃群组的名称,或在同一请求中同时设置和清除支出限额。
curl -X PATCH https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Platform Engineering", "monthlySpendingLimitDollars": 500 }'响应:
{ "group": { "id": "team_group_01k2ja2000e0080000000000n2", "name": "Platform Engineering", "memberCount": 12, "monthlySpendingLimitDollars": 500, "createdAt": "2026-01-15T10:30:00.000Z", "updatedAt": "2026-01-20T14:22:00.000Z" }}删除团队目录组
/teams/directory-groups/:groupId删除团队目录组。该组必须为空:删除前请先移除全部成员。
参数
groupId string 必填
team_group_… 前缀,例如 team_group_01k2ja2000e0080000000000n2。响应
删除群组后返回 204 No Content。
错误
400- 群组中仍有成员,或群组存在启用中的 SCIM 映射。
如果群组存在启用中的 SCIM 映射,则无法通过此端点删除。 请先在仪表盘中移除该映射,再移除全部成员,然后删除该群组。
curl -X DELETE https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \ -u YOUR_API_KEY:响应: 204 No Content
列出团队目录组成员
/teams/directory-groups/:groupId/members获取团队目录组中的成员。
参数
groupId string 必填
team_group_… 前缀,例如 team_group_01k2ja2000e0080000000000n2。查询参数
page number
1。pageSize number
50。上限为 200;超过 200 的值会被截断为 200。响应字段
members 中的每个对象包含:
userIdstring - 公开用户 ID,带user_前缀namestring - 成员的显示名称emailstring - 成员的电子邮件地址joinedAtstring - 成员加入群组的时间,采用 ISO 8601 格式
pagination object
page、pageSize、totalCount、totalPages、hasNextPage 和 hasPreviousPage。curl -X GET "https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2/members?page=1&pageSize=50" \ -u YOUR_API_KEY:响应:
{ "members": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "[email protected]", "joinedAt": "2026-01-15T10:30:00.000Z" }, { "userId": "user_def456", "name": "Sam Engineer", "email": "[email protected]", "joinedAt": "2026-01-16T09:15:00.000Z" } ], "pagination": { "page": 1, "pageSize": 50, "totalCount": 2, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }}添加团队目录组成员
/teams/directory-groups/:groupId/members/bulk-add向手动管理的团队目录组添加成员。
参数
groupId string 必填
team_group_… 前缀,例如 team_group_01k2ja2000e0080000000000n2。请求体
userIds string[] 必填
user_ 前缀。单次请求最多可包含 100 个用户。响应字段
addedCount number
SCIM 同步的群组会拒绝手动更改成员关系,并返回 400 响应。
请在你的身份提供商中管理其成员关系。
curl -X POST https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2/members/bulk-add \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userIds": ["user_abc123", "user_def456"] }'响应:
{ "addedCount": 2}移除团队目录组成员
/teams/directory-groups/:groupId/members/bulk-remove从手动管理的团队目录组中移除成员。
参数
groupId string 必填
team_group_… 前缀,例如 team_group_01k2ja2000e0080000000000n2。请求体
userIds string[] 必填
user_ 前缀。单次请求最多可包含 100 个用户。响应字段
removedCount number
SCIM 同步的群组会拒绝手动更改成员关系,并返回 400 响应。
请在你的身份提供商中管理其成员关系。
curl -X POST https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2/members/bulk-remove \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userIds": ["user_def456"] }'响应:
{ "removedCount": 1}账单组
账单组 允许 Enterprise 管理员按用户分组了解和管理支出。此功能适用于报表、内部费用分摊和预算管理。
成员在同一时间只能属于一个账单组。未分配到任何分组的成员会被放入预留的 Unassigned 分组中。
账单组位于 /teams/groups,使用 group_… 形式的 id。团队目录组位于 /teams/directory-groups,使用 team_group_… 形式的 id。这两个 API 不接受彼此的 id。
列出分组
/teams/groups获取团队中所有账单组,以及当前计费周期的支出数据。
参数
billingCycle string
2025-01-15) ,用于指定要查询的计费周期。默认为当前周期。curl -X GET "https://api.cursor.com/teams/groups?billingCycle=2025-01-15" \ -u YOUR_API_KEY:响应:
{ "groups": [ { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 12, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-20T14:22:00.000Z", "spendCents": 245000, "currentMembers": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "[email protected]", "joinedAt": "2024-01-15T10:30:00.000Z", "leftAt": null, "spendCents": 12500 } ], "formerMembers": [], "dailySpend": [ { "date": "2025-01-15", "spendCents": 8500 }, { "date": "2025-01-16", "spendCents": 9200 } ] }, { "id": "group_kljUvI0ASZORvSEXf9hV0ydcso", "name": "Design", "type": "BILLING", "directoryGroupId": "dir_group_abc123xyz", "memberCount": 5, "createdAt": "2024-01-16T09:00:00.000Z", "updatedAt": "2024-01-16T09:00:00.000Z", "spendCents": 87500, "currentMembers": [], "formerMembers": [], "dailySpend": [] } ], "unassignedGroup": { "id": "group_unassigned", "name": "Unassigned", "type": "BILLING", "directoryGroupId": null, "memberCount": 3, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z", "spendCents": 15000, "currentMembers": [], "formerMembers": [], "dailySpend": [] }, "billingCycle": { "cycleStart": "2025-01-01T00:00:00.000Z", "cycleEnd": "2025-02-01T00:00:00.000Z" }}获取分组
/teams/groups/:groupId获取单个计费分组,以及其成员和当前计费周期的消费数据。
参数
groupId string 必填
group_PDSPmvukpYgZEDXsoNirw3CFhy) billingCycle string
2025-01-15) ,用于指定要查询的计费周期。默认为当前周期。curl -X GET "https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy?billingCycle=2025-01-15" \ -u YOUR_API_KEY:响应:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 3, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-20T14:22:00.000Z", "spendCents": 125000, "currentMembers": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "[email protected]", "joinedAt": "2024-01-15T10:30:00.000Z", "leftAt": null, "spendCents": 75000, "dailySpend": [ { "date": "2025-01-15", "spendCents": 5000 }, { "date": "2025-01-16", "spendCents": 7500 } ] }, { "userId": "user_def456", "name": "Sam Engineer", "email": "[email protected]", "joinedAt": "2024-01-16T09:15:00.000Z", "leftAt": null, "spendCents": 50000, "dailySpend": [ { "date": "2025-01-15", "spendCents": 3500 }, { "date": "2025-01-16", "spendCents": 4200 } ] } ], "formerMembers": [ { "userId": "user_xyz789", "name": "Former Member", "email": "[email protected]", "joinedAt": "2024-01-10T08:00:00.000Z", "leftAt": "2024-01-14T17:00:00.000Z", "spendCents": 0 } ], "dailySpend": [ { "date": "2025-01-15", "spendCents": 8500 }, { "date": "2025-01-16", "spendCents": 11700 } ] }, "billingCycle": { "cycleStart": "2025-01-01T00:00:00.000Z", "cycleEnd": "2025-02-01T00:00:00.000Z" }}创建分组
/teams/groups创建一个新的计费分组。每个团队每分钟最多 20 个请求。
参数
name string 必填
type string
BILLING。默认值:BILLINGcurl -X POST https://api.cursor.com/teams/groups \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Engineering" }'响应:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 0, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z", "members": [] }}更新分组
/teams/groups/:groupId更新计费分组的名称或目录分组关联。每个团队每分钟最多 20 个请求。
每次请求只能更新一个字段。若需要同时更新名称和目录关联,请分别发起请求。
参数
groupId string 必填
name string
directoryGroupId string | null
null 以取消目录同步curl -X PATCH https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Platform Engineering" }'响应:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Platform Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 3, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-25T16:45:00.000Z", "members": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "[email protected]", "joinedAt": "2024-01-15T10:30:00.000Z" } ] }}删除分组
/teams/groups/:groupId删除一个计费分组。成功时返回 204 No Content。每个团队每分钟最多 20 个请求。
删除计费分组是破坏性操作;数据无法恢复。被删除分组的所有历史用量都会被追溯性地重新分配到 Unassigned 分组。
参数
groupId string 必填
curl -X DELETE https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY:响应:
204 No Content向分组添加成员
/teams/groups/:groupId/members向计费分组添加团队成员。用户必须已是你团队的成员,且当前未分配到其他分组。每个团队每分钟最多 20 个请求。
与 SCIM 同步的计费分组无法通过 API 修改。所有此类分组的成员分配都必须通过 SCIM 进行管理。
参数
groupId string 必填
userIds string[] 必填
["user_abc123", "user_def456"]) curl -X POST https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy/members \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userIds": ["user_abc123", "user_def456"] }'响应:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 2, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-25T16:50:00.000Z", "members": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "[email protected]", "joinedAt": "2024-01-25T16:50:00.000Z" }, { "userId": "user_def456", "name": "Sam Engineer", "email": "[email protected]", "joinedAt": "2024-01-25T16:50:00.000Z" } ] }}从分组中移除成员
/teams/groups/:groupId/members从计费分组中移除团队成员。被移除的成员会移动到 Unassigned 分组。每个团队每分钟最多 20 个请求。
与 SCIM 同步的计费分组无法通过 API 修改。对于与 SCIM 同步的分组,所有成员变更都必须通过 SCIM 进行管理。
参数
groupId string 必填
userIds string[] 必填
curl -X DELETE https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy/members \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userIds": ["user_def456"] }'响应:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 1, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-25T17:00:00.000Z", "members": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "[email protected]", "joinedAt": "2024-01-25T16:50:00.000Z" } ] }}模型访问
模型访问路由目前处于预览阶段,可能会发生变化。在正式发布前,路径、响应字段和错误行为均可能调整。
读取和更新团队的模型访问策略:自定义策略是否已启用、新提供商和模型的默认值、按提供商和每个模型设置的开关,以及每个模型的设置,例如 Fast 和推理工作量。
启用未设置参数的模型时,将保留目录默认值。当这些默认值 (例如 Fast) 不符合团队策略时,请使用每个模型的设置。
这些路由返回团队基线配置。组织群组仍可为部分成员扩大访问权限;群组允许列表不在此 API 的管理范围内。个人 API 密钥 (BYOK) 控制仍需在仪表盘中设置。
如需读取组织范围的设置,或对关联团队进行批量切换,请参阅组织 API 模型访问路由。
- 适用范围:已启用模型访问控制的团队
- 身份验证:团队 API 密钥 (Basic auth)。读取需要
models:read。写入需要models:*。具有admin:*权限范围的密钥两者均可使用。通用read:*密钥无法调用这些路由。 - 提供商和模型 ID:路径段使用目录 ID,例如
anthropic和claude-opus-4-6,而非显示名称。GET 响应中包含显示名称。 - 先配置策略:当
state为unrestricted(或legacy) 时,对提供商和模型的读取和写入会返回 409。对不受限团队首次执行带默认值的PUT /teams/model-access/configuration会启用策略,并以当前目录初始化设置 (与在“模型”页面首次保存的效果相同) 。后续带默认值的配置 PUT 仅更新默认值,不会更改现有开关。 - 恢复为不受限状态:使用
{ "state": "unrestricted" }执行PUT /teams/model-access/configuration会清除自定义策略,使state再次变为unrestricted。 - 速率限制:每分钟 20 个请求。写入会以
team_settings事件的形式出现在团队审计日志中。请参阅速率限制和最佳实践。
获取模型访问配置
/teams/model-access/configuration返回团队是否设置了自定义模型访问策略,以及新发现的提供商和模型的默认值。
响应字段
teamId number
state string
unrestricted、custom 或 legacy。newProviderDefault string | null
state 为 custom 时,取值为 enabled 或 disabled;否则为 null。newModelDefault string | null
state 为 custom 时,取值为 enabled 或 disabled;否则为 null。curl -X GET https://api.cursor.com/teams/model-access/configuration \ -u YOUR_API_KEY:响应:
{ "teamId": 7, "state": "unrestricted", "newProviderDefault": null, "newModelDefault": null}更新模型访问配置
/teams/model-access/configuration创建自定义策略、更新默认值,或将团队恢复为不受限状态。
发送以下任一内容:
{ "state": "unrestricted" }:清除自定义策略 (以及旧版允许/阻止列表) ,将state设为unrestricted{ "newProviderDefault", "newModelDefault" }:创建或更新自定义策略 (state: "custom"的向后兼容简写)
对于不受限团队,首次发送默认值 PUT 请求会创建自定义策略并初始化目录条目。后续默认值 PUT 请求仅更新默认值,保留现有开关设置。
请求体
state string
unrestricted 清除策略。发送默认值时请省略。newProviderDefault string
enabled 或 disabled。创建或更新自定义策略时必填;当 state 为 unrestricted 时请省略。newModelDefault string
enabled 或 disabled。创建或更新自定义策略时必填;当 state 为 unrestricted 时请省略。curl -X PUT https://api.cursor.com/teams/model-access/configuration \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "newProviderDefault": "disabled", "newModelDefault": "enabled" }'响应:
{ "teamId": 7, "state": "custom", "newProviderDefault": "disabled", "newModelDefault": "enabled"}将团队恢复为不受限状态:
curl -X PUT https://api.cursor.com/teams/model-access/configuration \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "state": "unrestricted" }'响应:
{ "teamId": 7, "state": "unrestricted", "newProviderDefault": null, "newModelDefault": null}列出模型访问提供商
/teams/model-access/providers列出目录中的提供商和模型,包括最终解析的启用状态及每个模型的 parameters。如果团队没有自定义策略,则返回 409。
每个模型都包含由目录定义的 parameters 数组。参数 ID 和支持的值来自模型目录 (例如 fast、reasoning、effort、context) 。在写入前,可通过此 GET 请求了解模型支持哪些参数。
模型 parameters 字段
id string
fast 或 reasoning) 。displayName string
supportedValues string[]
allowedValues string[]
configuredDefaultValue string | null
null。catalogDefaultValue string | null
curl -X GET https://api.cursor.com/teams/model-access/providers \ -u YOUR_API_KEY:响应:
{ "teamId": 7, "state": "custom", "providers": [ { "id": "anthropic", "displayName": "Anthropic", "enabled": true, "models": [ { "id": "claude-opus-4-6", "displayName": "Opus 4.6", "enabled": true, "parameters": [ { "id": "fast", "displayName": "Fast", "supportedValues": ["false", "true"], "allowedValues": ["false", "true"], "configuredDefaultValue": null, "catalogDefaultValue": "true" } ] } ] }, { "id": "openai", "displayName": "OpenAI", "enabled": true, "models": [ { "id": "gpt-5.4", "displayName": "GPT-5.4", "enabled": true, "parameters": [ { "id": "reasoning", "displayName": "Reasoning", "supportedValues": ["low", "medium", "high", "xhigh", "max"], "allowedValues": ["low", "medium", "high"], "configuredDefaultValue": "high", "catalogDefaultValue": "medium" } ] } ] } ]}更新模型访问提供商
/teams/model-access/providers/:provider启用或禁用提供商。如果团队仍为 unrestricted 或 legacy,则返回 409。
参数
provider string 必填
openai 或 anthropic) 。请求体
enabled boolean 必填
curl -X PUT https://api.cursor.com/teams/model-access/providers/openai \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{"enabled": false}'列出提供商的模型
/teams/model-access/providers/:provider/models列出某个提供商的模型及其最终解析的启用状态和每个模型的 parameters。参数字段与提供商响应一致。如果团队没有自定义策略,则返回 409。
参数
provider string 必填
anthropic) 。curl -X GET https://api.cursor.com/teams/model-access/providers/anthropic/models \ -u YOUR_API_KEY:更新模型访问模型
/teams/model-access/providers/:provider/models/:model启用或禁用单个模型,并可选择设置每个模型的参数限制和默认值。团队仍为 unrestricted 或 legacy 时,返回 409。
参数
provider string 必填
anthropic) 。model string 必填
claude-opus-4-6) 。请求体
enabled boolean 必填
parameters object
allowedValuesstring[] | null: 限制成员可选择的值。传入null可清除限制。defaultValuestring | null: 团队的默认值。设置限制时,必须包含在allowedValues中。传入null可恢复目录默认值。
未知的参数 ID 或值、空的 allowedValues 数组、不在 allowedValues 中的默认值,以及解析后没有有效模型变体的设置均返回 400。
在模型上禁用 Fast:
curl -X PUT https://api.cursor.com/teams/model-access/providers/anthropic/models/claude-opus-4-6 \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "parameters": { "fast": { "allowedValues": ["false"] } } }'设置允许的推理级别和默认值:
curl -X PUT https://api.cursor.com/teams/model-access/providers/openai/models/gpt-5.4 \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "parameters": { "reasoning": { "allowedValues": ["low", "medium", "high"], "defaultValue": "high" } } }'清除限制并恢复目录默认值:
curl -X PUT https://api.cursor.com/teams/model-access/providers/openai/models/gpt-5.4 \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "parameters": { "reasoning": { "allowedValues": null, "defaultValue": null } } }'响应:
{ "id": "gpt-5.4", "displayName": "GPT-5.4", "enabled": true, "provider": "openai", "parameters": [ { "id": "reasoning", "displayName": "Reasoning", "supportedValues": ["low", "medium", "high", "xhigh", "max"], "allowedValues": ["low", "medium", "high", "xhigh", "max"], "configuredDefaultValue": null, "catalogDefaultValue": "medium" } ]}错误
错误响应体使用:
{ "code": "error", "message": "…" }| 状态 | 发生情况 |
|---|---|
401 | Key 无效,或缺少 models:read / models:* (或 admin:*) 权限 |
403 | 该团队无法使用模型访问控制 |
409 | 当 state 为 unrestricted 或 legacy 时读取或写入 提供商 或模型 |
400 | 提供商、模型、参数 ID 或参数值未知;响应体无效;allowedValues 为空;默认值不在 allowedValues 范围内;会解析为无有效模型变体的设置;或会阻止 Smart Auto 所需的模型 |
Grok Bot
启用 Grok Bot 并管理能力、Enforce Auto-Review、群组访问权限、网络策略、团队规则和 setup scripts。
- 身份验证:Team API key (Basic 认证) 。读操作需要
read:*或admin:*。写操作需要admin:*。使用read:*密钥执行写操作会返回401。 - 速率限制:每个团队每个 endpoint 每分钟 20 次请求。超出限制时,API 返回
429并附带Retry-After: 60。参见速率限制。 - 所有方案均可读取:
GET /grok-bot/access、/network和/auto-review在所有方案下都会返回当前生效的策略。若团队无法使用该功能,写操作返回403。
curl -X POST https://api.cursor.com/grok-bot/enable \ -u YOUR_API_KEY:响应:
204 No Contentcurl -X POST https://api.cursor.com/grok-bot/disable \ -u YOUR_API_KEY:响应:
204 No Content获取 Grok Bot 能力
/grok-bot/capabilities返回团队的 Grok Bot 能力。
响应字段
enabled boolean
cloudAgents boolean
templateSharing string | null
all、team_only、none,或 null 表示使用团队默认值。actionRecording boolean
localExecution string | null
never、ask、always,或 null 表示未设置上限。localEgressAllowed boolean
curl -X GET https://api.cursor.com/grok-bot/capabilities \ -u YOUR_API_KEY:响应:
{ "enabled": true, "cloudAgents": true, "templateSharing": "team_only", "actionRecording": false, "localExecution": "ask", "localEgressAllowed": true}更新 Grok Bot 能力
/grok-bot/capabilities更新 Grok Bot 能力。省略的字段保持不变。当团队无权使用某个字段时返回 403。
enabled 为只读。请使用 启用 Grok Bot 或 禁用 Grok Bot。至少需要发送一个字段。
参数
cloudAgents boolean
templateSharing string | null
all、team_only、none,或使用 null 恢复团队默认值。actionRecording boolean
localExecution string | null
never、ask、always,或使用 null 清除团队上限。localEgressAllowed boolean
curl -X PATCH https://api.cursor.com/grok-bot/capabilities \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "cloudAgents": false, "localExecution": "never", "localEgressAllowed": false }'响应:
{ "enabled": true, "cloudAgents": false, "templateSharing": "team_only", "actionRecording": false, "localExecution": "never", "localEgressAllowed": false}获取 Enforce Auto-Review
/grok-bot/auto-review返回团队的 Enforce Auto-Review 策略。
响应字段
enforced boolean
true 时,所有成员都必须保持 Enforce Auto-Review 开启。rules object
allow 与 block 指令列表。curl -X GET https://api.cursor.com/grok-bot/auto-review \ -u YOUR_API_KEY:响应:
{ "enforced": true, "rules": { "allow": ["Read-only git commands"], "block": ["Publishing releases"] }}替换 Enforce Auto-review 模式
/grok-bot/auto-review替换团队的 Enforce Auto-review 模式策略。当团队无法使用 Enforce Auto-review 模式时返回 403。
如果你的团队无法设置 Auto-review 模式规则,空的 allow 和 block 列表会保留已存储的指令。此时若列表非空,则返回 403。
参数
enforced boolean 必填
true 时,每位成员都必须保持开启 Enforce Auto-review 模式。rules object 必填
allowstring[]:最多 20 条指令,每条最多 1,000 个字符。会被去除首尾空白并去重。blockstring[]:最多 20 条指令,每条最多 1,000 个字符。会被去除首尾空白并去重。
curl -X PUT https://api.cursor.com/grok-bot/auto-review \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enforced": true, "rules": { "allow": ["Read-only git commands"], "block": ["Publishing releases"] } }'在不更改指令的情况下锁定 Enforce Auto-review 模式:
curl -X PUT https://api.cursor.com/grok-bot/auto-review \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enforced": true, "rules": { "allow": [], "block": [] } }'响应:
{ "enforced": true, "rules": { "allow": ["Read-only git commands"], "block": ["Publishing releases"] }}获取 Grok Bot 访问权限
/grok-bot/access返回团队中可以使用 Grok Bot 的人员。
响应字段
mode string
all 或 limited。groups array
mode 为 limited 时所选的群组。每一项包含编码后的 id 和 name。当 mode 为 all 时为空。curl -X GET https://api.cursor.com/grok-bot/access \ -u YOUR_API_KEY:响应:
{ "mode": "limited", "groups": [ { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Platform Engineering" } ]}更新 Grok Bot 访问权限
/grok-bot/access设置团队中哪些人可以使用 Grok Bot。团队不具备群组访问权限时返回 403。
参数
mode string 必填
all 表示所有成员,limited 表示选定的账单组。groupIds array
ID 未知或格式错误、limited 列表为空,或在 all 模式下传入群组 ID,均返回 400。
curl -X PUT https://api.cursor.com/grok-bot/access \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "mode": "limited", "groupIds": ["group_PDSPmvukpYgZEDXsoNirw3CFhy"] }'响应:
{ "mode": "limited", "groups": [ { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Platform Engineering" } ]}获取 Grok Bot 网络策略
/grok-bot/network返回团队的 Grok Bot 网络策略。
响应字段
egressMode string
unset、allow_all、default_with_network_settings 或 network_settings_only。allowlist array
host-or-CIDR:port 形式,例如 54.85.223.0/24:3306。locked boolean
true 时,群组策略无法覆盖团队策略。curl -X GET https://api.cursor.com/grok-bot/network \ -u YOUR_API_KEY:响应:
{ "egressMode": "network_settings_only", "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"], "locked": true}替换 Grok Bot 网络策略
/grok-bot/network替换团队的 Grok Bot 网络策略。团队方案会返回 403。
参数
egressMode string 必填
unset:不应用任何策略allow_all:允许所有导出目标default_with_network_settings:Cherri Code 的默认目标以及允许列表中的目标network_settings_only:允许列表中的目标,以及运行 Grok Bot 所需的目标
allowlist array 必填
host-or-CIDR:port 的值,例如 54.85.223.0/24:3306。locked boolean 必填
true 时,群组策略无法覆盖团队策略。请求体不完整、模式未知或允许列表条目无效时返回 400。
curl -X PUT https://api.cursor.com/grok-bot/network \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "egressMode": "network_settings_only", "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"], "locked": true }'响应:
{ "egressMode": "network_settings_only", "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"], "locked": true}列出 Grok Bot 团队规则
/grok-bot/team-rules列出 Grok Bot 团队规则,按创建时间由新到旧排序。
参数
limit number
50。最大值:100。cursor string
nextCursor 的不透明游标。curl -X GET "https://api.cursor.com/grok-bot/team-rules?limit=50" \ -u YOUR_API_KEY:响应:
{ "teamRules": [ { "id": "rule_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Ask before publishing", "content": "Never publish a release without an explicit go from the requester.", "enabled": true, "scope": "grokBot", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z" } ], "nextCursor": null}创建 Grok Bot 团队规则
/grok-bot/team-rules创建一条 Grok Bot 团队规则。每个团队最多可存储 50 条 Grok Bot 规则。成功时返回 201。
参数
name string 必填
content string 必填
enabled boolean 必填
curl -X POST https://api.cursor.com/grok-bot/team-rules \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Ask before publishing", "content": "Never publish a release without an explicit go from the requester.", "enabled": true }'响应:
{ "teamRule": { "id": "rule_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Ask before publishing", "content": "Never publish a release without an explicit go from the requester.", "enabled": true, "scope": "grokBot", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z" }}更新 Grok Bot 团队规则
/grok-bot/team-rules/:id更新 Grok Bot 团队规则。规则不存在时返回 404。
至少需发送一个字段。
参数
id string 必填
name string
content string
enabled boolean
curl -X PATCH https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enabled": false }'响应:
{ "teamRule": { "id": "rule_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Ask before publishing", "content": "Never publish a release without an explicit go from the requester.", "enabled": false, "scope": "grokBot", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z" }}删除 Grok Bot 团队规则
/grok-bot/team-rules/:id删除 Grok Bot 团队规则。成功时返回 204 No Content。
参数
id string 必填
curl -X DELETE https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY:响应:
204 No Content列出 Grok Bot 设置清单
/grok-bot/setup-manifests列出 Grok Bot 设置清单,按 id 排序。
参数
limit number
50。最大值:100。cursor string
nextCursor 的不透明游标。curl -X GET "https://api.cursor.com/grok-bot/setup-manifests?limit=50" \ -u YOUR_API_KEY:响应:
{ "manifests": [ { "id": "toolchain", "scripts": [ { "id": "node", "setup": "mise install node@22", "check": "node --version" }, { "id": "pnpm", "setup": "npm i -g pnpm" } ] } ], "nextCursor": null}更新或插入 Grok Bot 设置清单
/grok-bot/setup-manifests/:manifestId创建或替换设置清单。每个团队最多可存储 100 个清单。若清单在请求期间发生变更,则返回 409。
参数
manifestId string 必填
.、_ 或 -。scripts array 必填
idstring:格式与manifestId相同setupstring:非空的安装命令checkstring:可选的验证命令
curl -X PUT https://api.cursor.com/grok-bot/setup-manifests/toolchain \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "scripts": [ { "id": "node", "setup": "mise install node@22", "check": "node --version" }, { "id": "pnpm", "setup": "npm i -g pnpm" } ] }'响应:
{ "manifest": { "id": "toolchain", "scripts": [ { "id": "node", "setup": "mise install node@22", "check": "node --version" }, { "id": "pnpm", "setup": "npm i -g pnpm" } ] }}删除 Grok Bot 设置清单
/grok-bot/setup-manifests/:manifestId删除设置清单。成功时返回 204 No Content。
参数
manifestId string 必填
curl -X DELETE https://api.cursor.com/grok-bot/setup-manifests/toolchain \ -u YOUR_API_KEY:响应:
204 No Content错误
错误响应体使用:
{ "code": "error", "message": "…" }| 状态 | 发生情况 |
|---|---|
401 | Key 无效、缺少 read:* / admin:* 权限,或该团队未启用 Grok Bot Admin API |
403 | 该团队或其方案无法执行此写入操作 |
404 | 路径中格式正确的规则 ID 或清单 ID 不存在 |
409 | 设置清单在请求期间发生了变更 |
400 | 响应体或 ID 无效;PATCH 内容为空;在能力上使用 enabled;未知群组;规则或清单数量过多;没有可归属设置清单的 所有者 |
429 | 超出该 endpoint 的 rate limit |