組織 API 允許你執行適用於與某個組織關聯的各個團隊的操作,例如在這些團隊之間移動用戶、查看跨團隊的共享用量、管理組織羣組,以及讀取或更新模型訪問。它使用 組織 API 密鑰 以及與團隊 Admin API相同的 HTTP 模式。
組織 API 密鑰與團隊 API 密鑰¶
組織 API 密鑰是組織作用域的憑據,團隊 API 密鑰是團隊作用域的憑據。
調用組織級端點 (如 /organizations/team-memberships/sync、/organizations/pooled-usage 和 /organizations/groups) 時,請使用 組織 API 密鑰。
調用 /teams/* 下的團隊級端點時,請使用 團隊 API 密鑰 (例如 /teams/members 和 /teams/spend) 。
主要區別¶
- 作用域:組織 API 密鑰可跨同一組織下關聯的多個團隊執行操作。團隊 API 密鑰只能在單個團隊內執行操作。
- 端點兼容性:組織端點需要組織 API 密鑰。團隊端點需要團隊 API 密鑰。
- 密鑰作用域:每個路由都要求密鑰具備特定作用域。只讀成員路由接受
members:read;成員和羣組寫入路由需要members:*;用量路由需要usage:*。具備admin:*的密鑰可用於所有路由,因爲 admin 包含其他作用域。 - 授權失敗:如果密鑰作用域與端點作用域不匹配,請求會因身份驗證或授權錯誤而失敗 (通常爲
401或403) 。
作用域¶
每個組織 API 密鑰都恰好帶有一個作用域。只有當密鑰的作用域覆蓋該路由時,該路由才能使用。更寬的作用域包含較窄作用域允許的全部權限。
| 作用域 | 權限 | 示例路由 |
|---|---|---|
members:read |
對組織成員資格的只讀訪問權限。 | GET /organizations/members |
members:* |
對成員和羣組的讀寫權限。包含 members:read 允許的全部權限。 |
GET /organizations/members, POST /organizations/team-memberships/sync, 所有 /organizations/groups 路由 |
usage:* |
對共享用量和報表的讀取權限。 | POST /organizations/pooled-usage, POST /organizations/filtered-usage-events, POST /organizations/daily-usage-data, POST /organizations/spend |
models:read |
對模型訪問配置和提供商清單的只讀訪問權限。 | GET /organizations/teams/model-access/configuration, GET /organizations/teams/{teamId}/model-access/configuration, GET /organizations/teams/{teamId}/model-access/providers |
models:* |
對模型訪問的讀寫權限。包含 models:read 允許的全部權限。 |
所有模型訪問路由,包括批量切換提供商/模型和批量配置 |
admin:* |
對所有組織路由的完全訪問權限。 | 以上所有路由 |
請根據需要選擇權限範圍最小的作用域。對於只列出成員、但絕不修改成員關係的只讀集成,請使用 members:read。對於無需授予完整管理員權限的模型訪問自動化,請使用 models:read 或 models:*。在儀表盤中創建組織 API 密鑰時,你可以選擇這些作用域。
如何傳遞組織 API 密鑰?¶
方式與其他 Cursor API 密鑰相同:使用 Basic 認證,將該密鑰作爲用戶名,密碼留空。
curl -X POST https://api.cursor.com/organizations/team-memberships/sync \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"organizationId": "org_abc123",
"users": [
{ "userId": 12345, "destinationTeamId": 7 }
]
}'
成員¶
讀取組織成員信息,並在與你的組織關聯的團隊之間移動成員。
- 可用性:僅限企業版
- 身份驗證:組織 API 密鑰 (Basic 認證) 。讀取成員信息接受只讀
members:read作用域;移動成員需要members:*。具有admin:*的密鑰兩者都可使用。 - 作用域:
GET /organizations/members的作用域爲組織級別、支持分頁,並在一次響應中返回每個成員的組織角色,以及其在所有關聯團隊中的分配情況。 - 分頁:
GET /organizations/members接受page和pageSize。pageSize上限爲 200;超過該值會按 200 處理。
列出組織成員¶
/organizations/members
獲取與你的 API 密鑰關聯的組織成員,以及每位成員的組織角色和其在關聯團隊中的分配信息。結果支持分頁。
查詢參數¶
page number
頁碼 (從 1 開始) 。默認值爲第 1 頁。
pageSize number
每頁成員數量。上限爲 200;超過 200 的值會被截斷爲 200。
響應字段¶
members array
組織成員對象數組,每個對象包含:
userIdnumber - 成員的唯一數字標識符,對應團隊GET /teams/members端點返回的idemailstring - 成員的電子郵件地址namestring - 成員的顯示名稱organizationRolestring - 組織級角色,可以是admin或member。這與各團隊分配中的teamRole不同:用戶可以在組織中是admin,同時在某個特定團隊中擔任member,反之亦然。teamsarray - 成員在組織關聯團隊中的分配情況。每個對象包含:teamIdnumber - 該成員所屬的某個關聯團隊的整數 IDteamRolestring - 該團隊中的角色 (例如member、owner)
pagination object
分頁元數據:page、pageSize、totalCount、totalPages、hasNextPage 和 hasPreviousPage。
curl -X GET "https://api.cursor.com/organizations/members?page=1&pageSize=50" \
-u YOUR_ORGANIZATION_API_KEY:
響應:
{
"members": [
{
"userId": 12345,
"email": "developer@company.com",
"name": "Alex",
"organizationRole": "member",
"teams": [
{ "teamId": 7, "teamRole": "member" },
{ "teamId": 8, "teamRole": "owner" }
]
},
{
"userId": 12346,
"email": "admin@company.com",
"name": "Sam",
"organizationRole": "admin",
"teams": [
{ "teamId": 7, "teamRole": "owner" }
]
}
],
"pagination": {
"page": 1,
"pageSize": 50,
"totalCount": 2,
"totalPages": 1,
"hasNextPage": false,
"hasPreviousPage": false
}
}
同步組織團隊成員資格¶
/organizations/team-memberships/sync
設置組織內一個或多個用戶所屬的團隊。此操作與 CSV 導入 API 的批量模式一致:發送一個用戶數組,每個用戶對應返回一行結果。
每個條目必須且只能使用 teamIds 或 destinationTeamId 之一:
teamIds是用戶應所屬團隊 ID 的完整集合。該端點會將用戶的成員關係精確調整爲與該集合一致:把用戶尚未加入的已列出團隊添加進去,並移除所有未列出的團隊。若要在遷移期間爲用戶新增一個團隊的同時保留其當前團隊,請同時列出這兩個團隊 (例如[oldTeamId, newTeamId]) 。destinationTeamId會將用戶加入單個團隊。用戶會被加入指定團隊,並從其他所有團隊中移除。設置destinationTeamId: NNN在功能上等同於teamIds: [NNN]。
請求體¶
organizationId string 必填
公開組織 ID (例如 org_abc123) 。必須與用於調用該端點的組織 API 密鑰所屬的組織相匹配。
users array 必填
非空條目列表 (每次請求最多 500 條) 。每個元素都是一個包含用戶 ID 並且僅有一個團隊字段 (teamIds 或 destinationTeamId) 的對象:
userIdnumber | string:要同步的用戶 ID。支持整數 ID (例如12345) 或 string ID (例如"user_abc123") 。teamIdsnumber[]:同步後,用戶應所屬的全部與組織關聯的團隊 ID 集合。成員關係會被精確調整爲與該集合完全一致。任何未列出的團隊都會被移除。若要保留用戶當前所在的團隊,請將這些團隊也包含在內 (例如[7, 8]) 。每個條目最多 100 個團隊。destinationTeamIdnumber:用於同步到單個團隊的字段。將destinationTeamId: NNN設爲與發送teamIds: [NNN]等效。該用戶的團隊將被精確設爲這一個團隊。必須是關聯到該組織的團隊。
每條記錄只能提供 teamIds 或 destinationTeamId 中的一個。
成功響應 (HTTP 200)¶
results array
每條同步請求對應一個條目,按順序排列。每個對象包含 userId、該條目解析後的 teamIds,以及 status: "success" 或 status: "error" (該行失敗時包含 errorMessage) 。攜帶 destinationTeamId 的條目也會回顯 destinationTeamId (即 teamIds 中的第一個團隊) 。
successCount number
status: "success" 的行數。
errorCount number
status: "error" 的行數。
- 可用性:僅限企業版
- 身份驗證:組織 API 密鑰 (Basic 認證) 。該密鑰必須包含此路由所需的
members:*scope;帶有admin:*的密鑰也可使用,因爲 admin 隱含 members 權限。 - 組織匹配:響應體中的
organizationId必須與 API 密鑰所屬的組織一致;否則請求會被拒絕。 - 團隊集合:
teamIds表示調用後該用戶應屬於的完整團隊集合。用戶會被從任何未列出的團隊中移除,因此如果要保留用戶當前所在的團隊,請將這些團隊也包含在該集合中。 - 每個條目一個團隊字段:每個條目必須且只能提供
teamIds或destinationTeamId其中之一。 - 每個條目的團隊數量上限:單個條目的
teamIds最多可列出 100 個團隊。 - 目標用戶必須已是該組織的成員,同步才能成功。
- 條目中的每個團隊都必須已關聯到該組織,同步才能成功。
- 如果
users中某個條目失敗,其他條目仍可能成功;請檢查每個results條目的status和errorMessage。 - 批量大小:單個請求最多可包含 500 個條目。如有需要,請通過單獨的請求發送額外批次。
curl -X POST https://api.cursor.com/organizations/team-memberships/sync \
-u YOUR_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"organizationId": "org_abc123",
"users": [
{ "userId": 12345, "teamIds": [7, 8] },
{ "userId": "user_abc123", "destinationTeamId": 8 }
]
}'
第一條記錄將用戶 12345 精確關聯到團隊 7 和 8 (將用戶加入尚未加入的團隊,並移除任何其他已關聯的團隊) 。第二條記錄使用 destinationTeamId,其效果等同於發送 teamIds: [8]。
響應:
{
"results": [
{
"userId": 12345,
"teamIds": [7, 8],
"status": "success"
},
{
"userId": "user_abc123",
"teamIds": [8],
"destinationTeamId": 8,
"status": "success"
}
],
"successCount": 2,
"errorCount": 0
}
錯誤響應:
大多數 API 錯誤會使用 HTTP 401、403 或 400,並返回如下結構的 JSON 響應體:
{
"code": "error",
"message": "…"
}
404:未找到組織 (此路由的消息字段名不同):
{
"error": "Organization not found"
}
401:組織 API 密鑰無效 (密鑰錯誤或缺失):
{
"code": "error",
"message": "Invalid Organization API Key"
}
401:缺少所需權限範圍 (密鑰有效,但未包含 members:* 或 admin:*):
{
"code": "error",
"message": "Organization API key missing required scope: members:*"
}
403:組織與該 API 密鑰不匹配 (響應體中的 organizationId 與該 API 密鑰所屬的組織不一致):
{
"code": "error",
"message": "Not authorized"
}
400:無效的請求體 (示例;每個失敗的請求僅適用其中一種情況):
{
"code": "error",
"message": "Request body is required"
}
{
"code": "error",
"message": "organizationId is required"
}
{
"code": "error",
"message": "users must be a non-empty array"
}
{
"code": "error",
"message": "users must not contain more than 500 moves"
}
按行失敗 (HTTP 200) :單條記錄的驗證錯誤或業務規則錯誤會在 results 中返回,並帶有 status: "error" 和 errorMessage。下面的示例使用 destinationTeamId,因此這些行會回顯 destinationTeamId;使用 teamIds 發送的條目則會回顯 teamIds。如果 userId / destinationTeamId 的類型無效,則該行中的對應無效字段會使用 0:
{
"results": [
{
"userId": 0,
"destinationTeamId": 7,
"status": "error",
"errorMessage": "Invalid userId"
}
],
"successCount": 0,
"errorCount": 1
}
{
"results": [
{
"userId": 12345,
"destinationTeamId": 0,
"status": "error",
"errorMessage": "Invalid destinationTeamId"
}
],
"successCount": 0,
"errorCount": 1
}
{
"results": [
{
"userId": 0,
"destinationTeamId": 0,
"status": "error",
"errorMessage": "Invalid userId. Invalid destinationTeamId"
}
],
"successCount": 0,
"errorCount": 1
}
逐行失敗 (HTTP 200) :當輸入類型正確但無法應用更改時,由同步邏輯返回:
{
"results": [
{
"userId": 12345,
"destinationTeamId": 999,
"status": "error",
"errorMessage": "Team is not linked to this organization"
}
],
"successCount": 0,
"errorCount": 1
}
{
"results": [
{
"userId": 12345,
"destinationTeamId": 7,
"status": "error",
"errorMessage": "User is not a member of this organization"
}
],
"successCount": 0,
"errorCount": 1
}
{
"results": [
{
"userId": 12345,
"destinationTeamId": 7,
"status": "error",
"errorMessage": "User not found"
}
],
"successCount": 0,
"errorCount": 1
}
用量¶
查看你的組織中所有關聯團隊的用量情況。這些端點會彙總組織用量池內所有團隊的數據,因此你無需爲每個團隊分別使用 團隊 API 密鑰。若只需統計單個團隊,請改用團隊 Admin API 的用量端點。
- 可用性:僅企業版
- 身份驗證:組織 API 密鑰 (Basic 認證) 。該密鑰必須包含
usage:*作用域 才能訪問這些路由;包含admin:*的密鑰同樣可用,因爲 admin 權限涵蓋 usage。 - 組織匹配:請求體中的
organizationId必須與 API 密鑰所屬的組織一致;否則請求會被拒絕。 - 團隊歸屬:
teamIds中的每個條目都必須屬於該組織。引用組織外團隊的請求會被拒絕。 - 輪詢:用量數據按小時粒度彙總。這些端點最多每小時輪詢一次。速率限制爲每分鐘 20 個請求。參見速率限制和最佳實踐。
獲取共享用量¶
/organizations/pooled-usage
獲取組織的共享用量:包括用量池的支出上限、整個組織的總用量,以及按團隊劃分的明細。這些數據用於儀表盤中的共享用量部分。所有金額字段均以美分爲單位。
請求體¶
organizationId string 必填
公開的組織 ID (例如 org_abc123) 。必須與用於調用該端點的組織 API 密鑰所屬組織一致。
響應字段¶
pool object
當前合同期內用量池層級的彙總數據:
limitCentsnumber - 組織的共享用量支出上限,以美分爲單位usedCentsnumber - 目前已使用的共享總用量,以美分爲單位remainingCentsnumber - 剩餘共享預算 (limitCents減去usedCents) ,以美分爲單位contractStartDatestring | null - 標記當前合同期開始時間的 ISO 8601 時間戳;如果未設置合同日期,則爲nullcontractEndDatestring | null - 標記當前合同期結束時間的 ISO 8601 時間戳;如果未設置合同日期,則爲null
teams array
按團隊劃分的用量明細。所有 usedCents 之和等於 pool.usedCents。每個對象包含:
teamIdnumber - 關聯到該組織的團隊整數 IDusedCentsnumber - 該團隊在當前合同期內消耗的用量,以美分爲單位budgetLimitCentsnumber | undefined - 該團隊的預算上限,以美分爲單位。僅當該團隊已配置預算時纔會返回。
curl -X POST https://api.cursor.com/organizations/pooled-usage \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"organizationId": "org_abc123"
}'
響應:
{
"pool": {
"limitCents": 5000000,
"usedCents": 1862340,
"remainingCents": 3137660,
"contractStartDate": "2026-01-01T00:00:00.000Z",
"contractEndDate": "2026-12-31T23:59:59.999Z"
},
"teams": [
{
"teamId": 7,
"usedCents": 1440100,
"budgetLimitCents": 2000000
},
{
"teamId": 8,
"usedCents": 422240
}
]
}
獲取使用事件¶
/organizations/filtered-usage-events
檢索與貴組織關聯的各團隊的詳細使用事件。這是團隊端點 /teams/filtered-usage-events 的組織範圍對應版本:它返回相同的事件結構,每個事件均標註其所屬的 teamId。
默認會返回組織用量池中所有團隊的事件。傳入 teamIds 可將返回結果限制爲特定團隊。
成本計算:對各個事件的 chargedCents 字段求和,以便將事件級成本與 /organizations/pooled-usage 返回的按團隊劃分的 usedCents 明細進行覈對。當請求符合該費率的適用條件時,此字段同時包括模型成本和 Cursor Token 費率。
cursorTokenFee 字段表示 Cursor Token 費率,且僅在該費率適用於第三方模型請求時纔會出現。這包括 Auto 路由到第三方模型的情況。Grok 和 Composer 等第一方 Cursor 模型,以及按請求計費的企業版賬戶,均不收取此費用。請參閱 Cursor Token 費率。
請求體¶
organizationId string 必填
組織公開 ID (例如 org_abc123) 。必須與用於調用該端點的 Organization API 密鑰所屬的組織一致。
teamIds number[]
可選的一組整數型團隊 ID,用於包含指定團隊。每個 ID 必須屬於該組織。若省略,則包含該組織池中的所有團隊。
startDate number
起始日期 (以紀元毫秒爲單位) 。此邊界爲閉合 (包含端點) 。
endDate number
結束日期 (以紀元毫秒爲單位) 。此邊界爲閉合 (包含端點) 。
userId number
按特定用戶 ID 篩選。
email string
按用戶電子郵件地址篩選。
serviceAccountId string
按服務賬號 ID 篩選。
page number
頁碼 (從 1 開始) 。默認值:1
pageSize number
每頁返回的結果數量。默認值:10
響應字段¶
usageEvents 中的每個對象包含與團隊 endpoint 相同的字段,並額外附帶一個所屬團隊標籤:
teamIdnumber - 擁有此事件的團隊 ID (整數)timestampstring - 事件時間戳,以紀元毫秒爲單位 (string 形式)userEmailstring - 發起該請求的用戶電子郵件地址serviceAccountIdstring | undefined - 發起請求的服務賬戶 ID。對於人工用戶事件,此字段會省略。serviceAccountNamestring | undefined - 發起該請求的服務賬戶的顯示名稱。對於人工用戶事件,此字段將省略。modelstring - 該請求使用的 AI 模型kindstring - 計費類型 (例如:Usage-based、Included in Business)maxModeboolean - 請求是否使用了 Max ModerequestsCostsnumber - 以請求單位計的成本isTokenBasedCallboolean - 該請求是否按 token 使用量計費isChargeable布爾值 - 該事件是否會產生費用isHeadless布爾值 - 該請求是否在未連接客戶端的情況下發起 (例如,後臺代理)tokenUsageobject | undefined - 使用量詳情 (當isTokenBasedCall爲true時提供) :inputTokensnumber - 消耗的輸入 tokenoutputTokensnumber - 生成的輸出 tokencacheWriteTokensnumber - 寫入緩存的 tokencacheReadTokensnumber - 從緩存讀取的 tokentotalCentsnumber - 模型總成本 (以美分計)discountPercentOffnumber | undefined - 應用的折扣百分比 (如有)chargedCentsnumber - 此事件收取的總金額 (單位:美分) 。對於適用 Cursor Token 費率的第三方模型請求,此字段同時包含模型成本和 Cursor Token 費率。cursorTokenFeenumber | undefined - 以美分計的 Cursor Token 費率。僅當該費率適用於第三方模型請求時纔會提供 (包括 Auto 將請求路由到第三方模型時) 。
# 組織用量池中所有團隊的事件
curl -X POST https://api.cursor.com/organizations/filtered-usage-events \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"organizationId": "org_abc123",
"startDate": 1748411762359,
"endDate": 1751003762359,
"page": 1,
"pageSize": 25
}'
# 特定團隊的事件
curl -X POST https://api.cursor.com/organizations/filtered-usage-events \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"organizationId": "org_abc123",
"teamIds": [7, 8],
"startDate": 1748411762359,
"endDate": 1751003762359,
"page": 1,
"pageSize": 25
}'
響應:
{
"totalUsageEventsCount": 113,
"pagination": {
"numPages": 12,
"currentPage": 1,
"pageSize": 10,
"hasNextPage": true,
"hasPreviousPage": false
},
"usageEvents": [
{
"teamId": 7,
"timestamp": "1750979225854",
"userEmail": "developer@company.com",
"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
},
{
"teamId": 8,
"timestamp": "1750978339901",
"userEmail": "admin@company.com",
"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
}
}
獲取每日用量數據¶
/organizations/daily-usage-data
獲取與您組織關聯的所有團隊中每位成員的每日使用指標。這是團隊 /teams/daily-usage-data 端點的組織級對應接口,每行數據都標註了所屬的 teamId。結果按用戶分頁,並返回在所請求日期範圍內具有成員身份的所有成員的數據;使用 page 和 pageSize 進行翻頁。
請求體¶
organizationId string 必填
組織的公開 ID (例如 org_abc123) 。必須與用於調用此端點的組織 API 密鑰所屬的組織相匹配。
startDate number
起始日期 (Unix 毫秒時間戳) 。默認爲 7 天前。
endDate number
結束日期 (epoch 毫秒時間戳) 。默認爲當前時間。
teamIds number[]
需要統計的組織關聯團隊。若省略,則包含該組織池中的所有團隊。每次請求最多 100 個團隊。
page number
頁碼 (從 1 開始) 。默認值:1
pageSize number
每頁用戶數量 (1-1000) 。默認值:1000
userEmail string
按電子郵件篩選一個或多個用戶。接受單個電子郵件或以逗號分隔的列表。userEmails 可作爲別名。
日期範圍不得超過 30 天。若需更長時間段,請分多次請求。
字段 subscriptionIncludedReqs、usageBasedReqs 和 apiKeyReqs 統計的是原始使用事件,而非較早的基於請求的定價模式中的可計費請求單位。
響應字段¶
data 數組中的每個對象包含與團隊每日用量端點相同的字段,並額外包含一個 teamId。關鍵字段:
userIdstring - 帶有user_前綴的已編碼用戶 ID (例如user_abc123)teamIdnumber - 該行所屬的組織關聯團隊 IDdaystring - 該記錄對應的日期 (ISO 日期,例如2024-03-18)date數字 - 以紀元毫秒錶示的日期emailstring - 用戶的電子郵件地址isActive布爾值 - 用戶當天是否活躍totalLinesAddednumber - 新增代碼總行數totalLinesDeletednumber - 已刪除的代碼總行數acceptedLinesAdded數字 - 已接受的 AI 建議新增行數acceptedLinesDeletednumber - 已接受的 AI 建議中刪除的行數totalAppliesnumber - AI 代碼應用次數總數totalAccepts數值 - 已接受的 AI 建議總數totalRejectsnumber - 被拒絕的 AI 建議總數totalTabsShownnumber - 向用戶顯示的 Tab 補全總數totalTabsAccepted數字 - 用戶已接受的 Tab 補全總數composerRequests數值 - 發起的 Composer 請求數量chatRequestsnumber - 發起的聊天請求數agentRequestsnumber - 發起的 Agent 模式請求數cmdkUsagesnumber - Cmd+K Inline edit 的使用次數subscriptionIncludedReqsnumber - 訂閱方案包含的請求數apiKeyReqsnumber - 通過 API 密鑰發起的請求數usageBasedReqsnumber - 按用量計費 (超額) 請求數bugbotUsagesnumber - Bugbot 的用量mostUsedModelstring | null - 當天最常用的 AI 模型applyMostUsedExtensionstring | null - apply 操作中最常見的文件擴展名tabMostUsedExtensionstring | null - Tab 補全中最常見的文件擴展名clientVersionstring | null - 使用的 Cursor 客戶端版本
響應還包含一個 pagination 對象 (page、pageSize、totalUsers、totalPages、hasNextPage、hasPreviousPage) 和一個 period 對象 (startDate、endDate) 。
curl -X POST https://api.cursor.com/organizations/daily-usage-data \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"organizationId": "org_abc123",
"startDate": 1710720000000,
"endDate": 1710892800000,
"page": 1,
"pageSize": 1000
}'
響應:
{
"data": [
{
"userId": "user_abc123",
"teamId": 101,
"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": "developer@company.com"
}
],
"period": {
"startDate": 1710720000000,
"endDate": 1710892800000
},
"pagination": {
"page": 1,
"pageSize": 1000,
"totalUsers": 150,
"totalPages": 1,
"hasNextPage": false,
"hasPreviousPage": false
}
}
獲取支出數據¶
/organizations/spend
獲取你的組織關聯的各團隊中按成員統計的支出數據。這是團隊 /teams/spend 端點在組織範圍內的對應版本,並會用所屬的 teamId 標記每位成員。與團隊端點不同,支出基於與 /organizations/pooled-usage 相同的已包含支出定義,按組織合同窗口統計 (而非各團隊各自的計費週期) ,因此這些數字可與用量池對齊。
請求體¶
organizationId string 必填
公開組織 ID (例如 org_abc123) 。必須與調用該端點時所用的 Organization API 密鑰對應的組織一致。
teamIds number[]
要納入報告的組織關聯團隊。省略時,將包含組織用量池中的所有團隊。每次請求最多 100 個團隊。
sortBy string
排序字段:email、name、spendCents。默認值:email
sortDirection string
排序方向:asc、desc。默認值:asc
page number
頁碼 (從 1 開始) 。默認值:1
pageSize number
每頁結果數 (1-1000) 。默認值:100
支出數據基於組織用量池中的各團隊進行彙總,因此不包含 /teams/spend 中的單團隊字段 subscriptionCycleStart、overallSpendCents、fastPremiumRequests、hardLimitOverrideDollars 和 monthlyLimitDollars。統計窗口會在 period 中返回。
響應字段¶
teamMemberSpend 中的每個對象都包含:
userIdstring - 帶user_前綴的編碼用戶 ID (例如user_abc123)teamIdnumber - 該成員所屬的組織關聯團隊 IDnamestring - 用戶的顯示名稱emailstring - 用戶的電子郵件地址rolestring - 該成員在團隊中的角色 (例如member、owner)spendCentsnumber - 在組織合同窗口內歸屬於該成員的已包含用量池支出,單位爲美分
響應還包括 totalMembers (number) 、totalPages (number) ,以及描述組織合同窗口的 period 對象 (startDate、endDate,以 epoch 毫秒錶示) 。
curl -X POST https://api.cursor.com/organizations/spend \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"organizationId": "org_abc123",
"sortBy": "spendCents",
"sortDirection": "desc",
"page": 1,
"pageSize": 25
}'
響應:
{
"teamMemberSpend": [
{
"userId": "user_abc123",
"teamId": 101,
"name": "Alex",
"email": "developer@company.com",
"role": "member",
"spendCents": 2450
},
{
"userId": "user_def456",
"teamId": 202,
"name": "Sam",
"email": "admin@company.com",
"role": "owner",
"spendCents": 1875
}
],
"totalMembers": 15,
"totalPages": 1,
"period": {
"startDate": 1735689600000,
"endDate": 1767225600000
}
}
模型訪問¶
模型訪問路由目前爲預覽版,可能會發生變化。路徑、響應字段和錯誤行爲可能會在正式發佈前調整。
讀取和更新組織關聯團隊的模型訪問策略。這些路由與團隊模型訪問 API 對應,但僅適用於關聯團隊。
使用列表接口和按團隊查詢的 GET 接口來發現配置偏差。通過配置 PUT 接口以及提供商/模型開關 (包括每個模型的 parameters) 來對齊團隊配置。沒有組織級別的複製端點或策略指紋。
數值型 teamId 可通過 GET /organizations/members 等路由獲取。
- 可用性:企業版組織。目標團隊必須已啓用模型訪問控制。
- 身份驗證:組織 API 密鑰 (Basic 認證) 。讀取需要
models:read。寫入需要models:*。具有admin:*權限的密鑰兩者均可使用。具有members:*、usage:*和read:*權限的密鑰無法調用這些路由。 - 團隊歸屬:每個
teamId都必須關聯到該組織。在單團隊路由中,未知或未關聯的團隊會返回 404。在批量路由中,未關聯的團隊會作爲 HTTP 200 錯誤行返回。 - 先配置:當團隊仍處於
unrestricted(或legacy) 狀態時,讀取和寫入提供商和模型會返回 409。請先通過PUT /organizations/teams/{teamId}/model-access/configuration(或批量配置路由) 創建自定義策略。首次默認值 PUT 會初始化目錄默認值;不會複製其他團隊的開關狀態映射。 - 恢復爲不受限:在按團隊或批量配置 PUT 中發送
{ "state": "unrestricted" }。 - 批量部分成功:批量路由最多接受 100 個
teamIds,批次經過處理後始終返回 HTTP 200,即使部分行失敗也是如此。請檢查errorCount和每個results[].status。成功的行不會回滾。操作對每個團隊都是冪等的,因此僅重試失敗的teamId。4xx 或 5xx 響應會拒絕整個請求,且不會應用任何更改。響應結構與/organizations/team-memberships/sync相同。 - 速率限制:每分鐘 20 個請求。寫入會以
team_settings事件的形式出現在團隊審計日誌中。請參閱速率限制和最佳實踐。
列出模型訪問配置¶
/organizations/teams/model-access/configuration
列出關聯團隊的模型訪問配置。可用於發現不受限策略與自定義策略之間的偏差。若要發現開關狀態偏差,請 GET 每個團隊的提供商並進行比較。
如果關聯團隊未啓用模型訪問控制,該行仍會返回 HTTP 200,幷包含 errorMessage 而非 state / 默認值。該團隊的按團隊 GET 和寫入路由會返回 403。
查詢參數¶
page number
頁碼 (從 1 開始) 。
pageSize number
每頁結果數。
teamIds string
可選,以逗號分隔的團隊 ID,例如 7,8,9。
curl -X GET "https://api.cursor.com/organizations/teams/model-access/configuration?page=1&pageSize=50" \
-u YOUR_ORGANIZATION_API_KEY:
響應:
{
"teams": [
{
"teamId": 7,
"teamName": "Platform",
"state": "custom",
"newProviderDefault": "disabled",
"newModelDefault": "enabled"
},
{
"teamId": 8,
"teamName": "Mobile",
"state": "custom",
"newProviderDefault": "disabled",
"newModelDefault": "enabled"
},
{
"teamId": 9,
"teamName": "Data",
"state": "unrestricted",
"newProviderDefault": null,
"newModelDefault": null
},
{
"teamId": 10,
"teamName": "Research",
"errorMessage": "Model access control is not available for this team"
}
],
"pagination": {
"page": 1,
"pageSize": 50,
"totalCount": 4,
"totalPages": 1,
"hasNextPage": false,
"hasPreviousPage": false
}
}
獲取團隊模型訪問配置¶
/organizations/teams/:teamId/model-access/configuration
獲取一個關聯團隊的配置。
參數¶
teamId number 必填
關聯到該組織的團隊的整數 ID。
curl -X GET https://api.cursor.com/organizations/teams/7/model-access/configuration \
-u YOUR_ORGANIZATION_API_KEY:
更新團隊模型訪問配置¶
/organizations/teams/:teamId/model-access/configuration
爲一個關聯團隊創建或更新配置,或將該團隊設爲不受限制。請求體和初始化行爲與團隊路由相同。
參數¶
teamId number 必填
關聯到組織的團隊的整數 ID。
請求體¶
state string
可選。使用 unrestricted 清除策略。發送默認值時省略此字段。
newProviderDefault string
enabled 或 disabled。創建或更新自定義策略時必填;當 state 爲 unrestricted 時省略此字段。
newModelDefault string
enabled 或 disabled。創建或更新自定義策略時必填;當 state 爲 unrestricted 時省略此字段。
curl -X PUT https://api.cursor.com/organizations/teams/7/model-access/configuration \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"newProviderDefault": "disabled",
"newModelDefault": "enabled"
}'
將一個關聯團隊設爲不受限制:
curl -X PUT https://api.cursor.com/organizations/teams/7/model-access/configuration \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{ "state": "unrestricted" }'
批量更新模型訪問配置¶
/organizations/teams/model-access/configuration
爲多個關聯團隊創建或更新配置,或將其恢復爲不受限狀態。每個請求最多可包含 100 個 teamIds。
HTTP 200 表示該批次已處理完畢,並不代表每一項都成功。請檢查 errorCount 和每個 results[].status。成功的團隊會保留新配置。此操作對每個團隊均具備冪等性,因此僅重試失敗的 teamId。4xx 或 5xx 響應會拒絕整個請求且不應用任何更改。
請求體¶
teamIds number[] 必填
要更新的關聯團隊 ID。每個請求最多 100 個。
state string
可選。使用 unrestricted 清除各團隊的策略。發送默認值時省略此項。
newProviderDefault string
enabled 或 disabled。創建或更新自定義策略時必填;當 state 爲 unrestricted 時省略。
newModelDefault string
enabled 或 disabled。創建或更新自定義策略時必填;當 state 爲 unrestricted 時省略。
爲多個團隊設置自定義策略的默認值:
curl -X PUT https://api.cursor.com/organizations/teams/model-access/configuration \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"teamIds": [7, 8, 9],
"newProviderDefault": "disabled",
"newModelDefault": "enabled"
}'
將多個團隊恢復爲不受限狀態:
curl -X PUT https://api.cursor.com/organizations/teams/model-access/configuration \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"teamIds": [7, 8, 9],
"state": "unrestricted"
}'
響應:
{
"results": [
{ "teamId": 7, "status": "success" },
{ "teamId": 8, "status": "success" },
{
"teamId": 9,
"status": "error",
"errorMessage": "Team is not linked to this organization"
}
],
"successCount": 2,
"errorCount": 1
}
獲取團隊模型訪問提供商¶
/organizations/teams/:teamId/model-access/providers
列出一個關聯團隊的提供商和模型,包括各模型的 parameters (結構與團隊提供商路由相同) 。如果團隊沒有自定義策略,則返回 409。
參數¶
teamId number 必填
關聯到組織的團隊整數 ID。
curl -X GET https://api.cursor.com/organizations/teams/7/model-access/providers \
-u YOUR_ORGANIZATION_API_KEY:
更新團隊模型訪問提供商¶
/organizations/teams/:teamId/model-access/providers/:provider
爲一個關聯團隊啓用或禁用提供商。如果團隊沒有自定義策略,則返回 409。
參數¶
teamId number 必填
關聯到組織的團隊整數 ID。
provider string 必填
目錄中的提供商 ID (例如 openai) 。
請求體¶
enabled boolean 必填
curl -X PUT https://api.cursor.com/organizations/teams/7/model-access/providers/openai \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{"enabled": false}'
更新團隊模型訪問模型¶
/organizations/teams/:teamId/model-access/providers/:provider/models/:model
爲一個關聯團隊啓用或禁用模型,並可選擇設置每個模型的 parameters (請求體與團隊模型路由相同) 。當團隊沒有自定義策略時,返回 409。
參數¶
teamId number 必填
關聯到組織的團隊整數 ID。
provider string 必填
目錄中的提供商 ID (例如 anthropic) 。
model string 必填
目錄中的模型 ID (例如 claude-opus-4-6) 。
請求體¶
enabled boolean 必填
parameters object
參數 ID 到 { allowedValues, defaultValue } 的可選映射。省略的字段保持不變。allowedValues: null 會清除限制。defaultValue: null 會恢復目錄默認值。請參閱團隊更新模型訪問模型文檔。
在一個關聯團隊中禁用 Fast:
curl -X PUT https://api.cursor.com/organizations/teams/7/model-access/providers/anthropic/models/claude-opus-4-6 \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"parameters": {
"fast": { "allowedValues": ["false"] }
}
}'
設置默認推理 effort:
curl -X PUT https://api.cursor.com/organizations/teams/7/model-access/providers/openai/models/gpt-5.4 \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"parameters": {
"reasoning": {
"allowedValues": ["low", "medium", "high"],
"defaultValue": "high"
}
}
}'
批量更新模型訪問提供商¶
/organizations/teams/model-access/providers/:provider
在多個關聯團隊中啓用或禁用提供商。每個請求最多可包含 100 個 teamIds。
HTTP 200 表示批處理已完成,並不代表每一行都成功。請檢查 errorCount 和每個 results[].status。成功的行不會回滾。該操作對每個團隊都是冪等的,因此僅重試失敗的 teamId。4xx 或 5xx 響應會拒絕整個請求,且不會應用任何更改。
參數¶
provider string 必填
目錄中的提供商 ID (例如 openai) 。
請求體¶
enabled boolean 必填
teamIds number[] 必填
要更新的關聯團隊 ID。每個請求最多 100 個。
curl -X PUT https://api.cursor.com/organizations/teams/model-access/providers/openai \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"teamIds": [7, 8, 9],
"enabled": false
}'
響應:
{
"results": [
{ "teamId": 7, "status": "success" },
{ "teamId": 8, "status": "success" },
{
"teamId": 9,
"status": "error",
"errorMessage": "團隊沒有模型訪問策略。請使用 PUT /teams/model-access/configuration 創建一個,或在團隊設置 → 模型中啓用模型訪問。"
}
],
"successCount": 2,
"errorCount": 1
}
在此示例中,HTTP 狀態仍爲 200,因爲批處理已完成。團隊 7 和 8 的提供商仍處於禁用狀態;僅在創建團隊 9 的配置後重試該團隊。
批量更新模型訪問配置中的模型¶
/organizations/teams/model-access/providers/:provider/models/:model
爲多個關聯團隊啓用或禁用模型,也可選擇使用與單團隊模型 PUT 相同的 parameters 映射。每個請求最多可包含 100 個 teamIds。
HTTP 200 表示批處理已完成,並不表示每一行都成功。請檢查 errorCount 和每個 results[].status。成功的行不會回滾。該操作對每個團隊都是冪等的,因此僅重試失敗的 teamId。4xx 或 5xx 響應會拒絕整個請求,且不會應用任何更改。
參數¶
provider string 必填
目錄中的提供商 ID (例如 anthropic) 。
model string 必填
目錄中的模型 ID (例如 claude-opus-4-6) 。
請求體¶
enabled boolean 必填
teamIds number[] 必填
要更新的關聯團隊 ID。每個請求最多 100 個。
parameters object
可選。與單團隊模型 PUT 使用相同的映射。allowedValues: null 會清除限制。defaultValue: null 會恢復目錄默認值。
在關聯團隊中禁用 Fast:
curl -X PUT https://api.cursor.com/organizations/teams/model-access/providers/anthropic/models/claude-opus-4-6 \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"teamIds": [7, 8, 9],
"enabled": true,
"parameters": {
"fast": { "allowedValues": ["false"] }
}
}'
將關聯團隊的默認推理強度固定爲:
curl -X PUT https://api.cursor.com/organizations/teams/model-access/providers/openai/models/gpt-5.4 \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"teamIds": [7, 8, 9],
"enabled": true,
"parameters": {
"reasoning": {
"allowedValues": ["low", "medium", "high"],
"defaultValue": "high"
}
}
}'
響應:
{
"results": [
{ "teamId": 7, "status": "success" },
{ "teamId": 8, "status": "success" },
{
"teamId": 9,
"status": "error",
"errorMessage": "團隊未配置模型訪問策略。請使用 PUT /teams/model-access/configuration 創建配置,或在團隊設置 → 模型中啓用模型訪問。"
}
],
"successCount": 2,
"errorCount": 1
}
錯誤¶
錯誤響應體格式如下:
{ "code": "error", "message": "…" }
| 狀態 | 情況 |
|---|---|
401 |
Key 無效,或缺少 models:read / models:* (或 admin:*) 權限 |
403 |
該團隊不支持模型訪問控制 (單團隊路由) |
404 |
該團隊未關聯到組織 (單團隊路由) |
409 |
該團隊的 state 爲 unrestricted 或 legacy 時讀取提供商或模型,或對單個團隊執行寫入操作 |
400 |
提供商、模型、參數 ID 或參數值未知;響應體無效;allowedValues 爲空;默認值不在 allowedValues 內;設置無法解析爲有效的模型變體;或會阻止 Smart Auto 所需模型 |
批量組織路由 (帶 teamIds 的 PUT .../providers/:provider、PUT .../providers/:provider/models/:model 和 PUT .../configuration) 會在批處理完成後返回 HTTP 200,即使某些行失敗也是如此。errorCount 非零仍表示 HTTP 響應成功。未關聯的團隊以及缺少配置等公開錯誤會顯示爲 status: "error" 行。成功的行不會回滾。每個團隊的操作都是冪等的,因此僅重試失敗的 teamId。任何 4xx 或 5xx 響應均表示整個請求被拒絕,且未應用任何更改。當關聯團隊無法加載配置時,列表路由也會返回 HTTP 200 和一個包含 errorMessage 的行。
組織羣組¶
組織羣組用於管理同一組織下各關聯團隊的成員。有關儀表盤設置和羣組級控制,請參閱 組織羣組。
- 身份驗證:組織 API 密鑰 (Basic 認證)。讀取路由需要
members:*作用域。寫入路由也需要members:*。帶有admin:*的密鑰也可用,因爲 admin 權限包含 members 權限。 - 羣組 ID:組織羣組 ID 使用
g_前綴。 - 分頁:列表路由接受
page和pageSize。兩個值都必須是正整數。
列出組織羣組¶
/organizations/groups
獲取與你的 API 密鑰關聯的組織下的組織羣組。
查詢參數¶
page number
頁碼。默認爲第一頁。
pageSize number
每頁的羣組數量。
curl -X GET "https://api.cursor.com/organizations/groups?page=1&pageSize=50" \
-u YOUR_ORGANIZATION_API_KEY:
響應:
{
"groups": [
{
"id": "g_PDSPmvukpYgZEDXsoNirw3CFhy",
"name": "Engineering",
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-20T14:22:00.000Z"
},
{
"id": "g_kljUvI0ASZORvSEXf9hV0ydcso",
"name": "Design",
"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
}
}
獲取組織羣組¶
/organizations/groups/:groupId
獲取單個組織羣組。
參數¶
groupId string 必填
帶有 g_ 前綴的組織羣組 ID。
curl -X GET https://api.cursor.com/organizations/groups/g_PDSPmvukpYgZEDXsoNirw3CFhy \
-u YOUR_ORGANIZATION_API_KEY:
響應:
{
"group": {
"id": "g_PDSPmvukpYgZEDXsoNirw3CFhy",
"name": "Engineering",
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-20T14:22:00.000Z"
}
}
列出組織羣組成員¶
/organizations/groups/:groupId/members
獲取組織羣組中的成員。
參數¶
groupId string 必填
帶有 g_ 前綴的組織羣組 ID。
查詢參數¶
page number
頁碼。默認值爲第一頁。
pageSize number
每頁的成員數。
curl -X GET "https://api.cursor.com/organizations/groups/g_PDSPmvukpYgZEDXsoNirw3CFhy/members?page=1&pageSize=50" \
-u YOUR_ORGANIZATION_API_KEY:
響應:
{
"members": [
{
"userId": "user_abc123",
"name": "Alex Developer",
"email": "alex@company.com",
"joinedAt": "2026-01-15T10:30:00.000Z"
},
{
"userId": "user_def456",
"name": "Sam Engineer",
"email": "sam@company.com",
"joinedAt": "2026-01-16T09:15:00.000Z"
}
],
"pagination": {
"page": 1,
"pageSize": 50,
"totalCount": 2,
"totalPages": 1,
"hasNextPage": false,
"hasPreviousPage": false
}
}
添加組織羣組成員¶
/organizations/groups/:groupId/members/bulk-add
將成員添加到組織羣組。
參數¶
groupId string 必填
帶有 g_ 前綴的組織羣組 ID。
請求體¶
userIds string[] 必填
帶有 user_ 前綴的公開用戶 ID 數組。單次請求最多可包含 100 個用戶。
curl -X POST https://api.cursor.com/organizations/groups/g_PDSPmvukpYgZEDXsoNirw3CFhy/members/bulk-add \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"userIds": ["user_abc123", "user_def456"]
}'
響應:
{
"addedCount": 2
}
移除組織羣組成員¶
/organizations/groups/:groupId/members/bulk-remove
從組織羣組中移除成員。
參數¶
groupId string 必填
帶有 g_ 前綴的組織羣組 ID。
請求體¶
userIds string[] 必填
帶有 user_ 前綴的公開用戶 ID 數組。單次請求最多可包含 100 個用戶。
curl -X POST https://api.cursor.com/organizations/groups/g_PDSPmvukpYgZEDXsoNirw3CFhy/members/bulk-remove \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"userIds": ["user_def456"]
}'
響應:
{
"removedCount": 1
}