《Cursor文檔》-組織 API

組織 API 允許你執行適用於與某個組織關聯的各個團隊的操作,例如在這些團隊之間移動用戶、查看跨團隊的共享用量、管理組織羣組,以及讀取或更新模型訪問。它使用 組織 API 密鑰 以及與團隊 Admin API相同的 HTTP 模式。

  • 組織 API 使用Basic 認證,並將你的 API 密鑰作爲用戶名。
  • 有關創建 API 密鑰、身份驗證方法、速率限制和最佳實踐的詳細信息,請參閱 API 概覽

組織 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 包含其他作用域。
  • 授權失敗:如果密鑰作用域與端點作用域不匹配,請求會因身份驗證或授權錯誤而失敗 (通常爲 401403) 。

作用域

每個組織 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:readmodels:*。在儀表盤中創建組織 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 接受 pagepageSizepageSize 上限爲 200;超過該值會按 200 處理。

列出組織成員

/organizations/members

獲取與你的 API 密鑰關聯的組織成員,以及每位成員的組織角色和其在關聯團隊中的分配信息。結果支持分頁。

查詢參數

page number

頁碼 (從 1 開始) 。默認值爲第 1 頁。

pageSize number

每頁成員數量。上限爲 200;超過 200 的值會被截斷爲 200。

響應字段

members array

組織成員對象數組,每個對象包含:

  • userId number - 成員的唯一數字標識符,對應團隊 GET /teams/members 端點返回的 id
  • email string - 成員的電子郵件地址
  • name string - 成員的顯示名稱
  • organizationRole string - 組織級角色,可以是 adminmember。這與各團隊分配中的 teamRole 不同:用戶可以在組織中是 admin,同時在某個特定團隊中擔任 member,反之亦然。
  • teams array - 成員在組織關聯團隊中的分配情況。每個對象包含:
  • teamId number - 該成員所屬的某個關聯團隊的整數 ID
  • teamRole string - 該團隊中的角色 (例如 memberowner)

pagination object

分頁元數據:pagepageSizetotalCounttotalPageshasNextPagehasPreviousPage

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 的批量模式一致:發送一個用戶數組,每個用戶對應返回一行結果。

每個條目必須且只能使用 teamIdsdestinationTeamId 之一:

  • teamIds 是用戶應所屬團隊 ID 的完整集合。該端點會將用戶的成員關係精確調整爲與該集合一致:把用戶尚未加入的已列出團隊添加進去,並移除所有未列出的團隊。若要在遷移期間爲用戶新增一個團隊的同時保留其當前團隊,請同時列出這兩個團隊 (例如 [oldTeamId, newTeamId]) 。
  • destinationTeamId 會將用戶加入單個團隊。用戶會被加入指定團隊,並從其他所有團隊中移除。設置 destinationTeamId: NNN 在功能上等同於 teamIds: [NNN]

請求體

organizationId string 必填

公開組織 ID (例如 org_abc123) 。必須與用於調用該端點的組織 API 密鑰所屬的組織相匹配。

users array 必填

非空條目列表 (每次請求最多 500 條) 。每個元素都是一個包含用戶 ID 並且僅有一個團隊字段 (teamIdsdestinationTeamId) 的對象:

  • userId number | string:要同步的用戶 ID。支持整數 ID (例如 12345) 或 string ID (例如 "user_abc123") 。
  • teamIds number[]:同步後,用戶應所屬的全部與組織關聯的團隊 ID 集合。成員關係會被精確調整爲與該集合完全一致。任何未列出的團隊都會被移除。若要保留用戶當前所在的團隊,請將這些團隊也包含在內 (例如 [7, 8]) 。每個條目最多 100 個團隊。
  • destinationTeamId number:用於同步到單個團隊的字段。將 destinationTeamId: NNN 設爲與發送 teamIds: [NNN] 等效。該用戶的團隊將被精確設爲這一個團隊。必須是關聯到該組織的團隊。

每條記錄只能提供 teamIdsdestinationTeamId 中的一個。

成功響應 (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 表示調用後該用戶應屬於的完整團隊集合。用戶會被從任何未列出的團隊中移除,因此如果要保留用戶當前所在的團隊,請將這些團隊也包含在該集合中。
  • 每個條目一個團隊字段:每個條目必須且只能提供 teamIdsdestinationTeamId 其中之一。
  • 每個條目的團隊數量上限:單個條目的 teamIds 最多可列出 100 個團隊。
  • 目標用戶必須已是該組織的成員,同步才能成功。
  • 條目中的每個團隊都必須已關聯到該組織,同步才能成功。
  • 如果 users 中某個條目失敗,其他條目仍可能成功;請檢查每個 results 條目的 statuserrorMessage
  • 批量大小:單個請求最多可包含 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 精確關聯到團隊 78 (將用戶加入尚未加入的團隊,並移除任何其他已關聯的團隊) 。第二條記錄使用 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 401403400,並返回如下結構的 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

當前合同期內用量池層級的彙總數據:

  • limitCents number - 組織的共享用量支出上限,以美分爲單位
  • usedCents number - 目前已使用的共享總用量,以美分爲單位
  • remainingCents number - 剩餘共享預算 (limitCents 減去 usedCents) ,以美分爲單位
  • contractStartDate string | null - 標記當前合同期開始時間的 ISO 8601 時間戳;如果未設置合同日期,則爲 null
  • contractEndDate string | null - 標記當前合同期結束時間的 ISO 8601 時間戳;如果未設置合同日期,則爲 null

teams array

按團隊劃分的用量明細。所有 usedCents 之和等於 pool.usedCents。每個對象包含:

  • teamId number - 關聯到該組織的團隊整數 ID
  • usedCents number - 該團隊在當前合同期內消耗的用量,以美分爲單位
  • budgetLimitCents number | 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 相同的字段,並額外附帶一個所屬團隊標籤:

  • teamId number - 擁有此事件的團隊 ID (整數)
  • timestamp string - 事件時間戳,以紀元毫秒爲單位 (string 形式)
  • userEmail string - 發起該請求的用戶電子郵件地址
  • serviceAccountId string | undefined - 發起請求的服務賬戶 ID。對於人工用戶事件,此字段會省略。
  • serviceAccountName string | undefined - 發起該請求的服務賬戶的顯示名稱。對於人工用戶事件,此字段將省略。
  • model string - 該請求使用的 AI 模型
  • kind string - 計費類型 (例如:Usage-basedIncluded in Business)
  • maxMode boolean - 請求是否使用了 Max Mode
  • requestsCosts number - 以請求單位計的成本
  • isTokenBasedCall boolean - 該請求是否按 token 使用量計費
  • isChargeable 布爾值 - 該事件是否會產生費用
  • isHeadless 布爾值 - 該請求是否在未連接客戶端的情況下發起 (例如,後臺代理)
  • tokenUsage object | undefined - 使用量詳情 (當 isTokenBasedCalltrue 時提供) :
  • inputTokens number - 消耗的輸入 token
  • outputTokens number - 生成的輸出 token
  • cacheWriteTokens number - 寫入緩存的 token
  • cacheReadTokens number - 從緩存讀取的 token
  • totalCents number - 模型總成本 (以美分計)
  • discountPercentOff number | undefined - 應用的折扣百分比 (如有)
  • chargedCents number - 此事件收取的總金額 (單位:美分) 。對於適用 Cursor Token 費率的第三方模型請求,此字段同時包含模型成本和 Cursor Token 費率。
  • cursorTokenFee number | 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。結果按用戶分頁,並返回在所請求日期範圍內具有成員身份的所有成員的數據;使用 pagepageSize 進行翻頁。

請求體

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 天。若需更長時間段,請分多次請求。

字段 subscriptionIncludedReqsusageBasedReqsapiKeyReqs 統計的是原始使用事件,而非較早的基於請求的定價模式中的可計費請求單位。

響應字段

data 數組中的每個對象包含與團隊每日用量端點相同的字段,並額外包含一個 teamId。關鍵字段:

  • userId string - 帶有 user_ 前綴的已編碼用戶 ID (例如 user_abc123)
  • teamId number - 該行所屬的組織關聯團隊 ID
  • day string - 該記錄對應的日期 (ISO 日期,例如 2024-03-18)
  • date 數字 - 以紀元毫秒錶示的日期
  • email string - 用戶的電子郵件地址
  • isActive 布爾值 - 用戶當天是否活躍
  • totalLinesAdded number - 新增代碼總行數
  • totalLinesDeleted number - 已刪除的代碼總行數
  • acceptedLinesAdded 數字 - 已接受的 AI 建議新增行數
  • acceptedLinesDeleted number - 已接受的 AI 建議中刪除的行數
  • totalApplies number - AI 代碼應用次數總數
  • totalAccepts 數值 - 已接受的 AI 建議總數
  • totalRejects number - 被拒絕的 AI 建議總數
  • totalTabsShown number - 向用戶顯示的 Tab 補全總數
  • totalTabsAccepted 數字 - 用戶已接受的 Tab 補全總數
  • composerRequests 數值 - 發起的 Composer 請求數量
  • chatRequests number - 發起的聊天請求數
  • agentRequests number - 發起的 Agent 模式請求數
  • cmdkUsages number - Cmd+K Inline edit 的使用次數
  • subscriptionIncludedReqs number - 訂閱方案包含的請求數
  • apiKeyReqs number - 通過 API 密鑰發起的請求數
  • usageBasedReqs number - 按用量計費 (超額) 請求數
  • bugbotUsages number - Bugbot 的用量
  • mostUsedModel string | null - 當天最常用的 AI 模型
  • applyMostUsedExtension string | null - apply 操作中最常見的文件擴展名
  • tabMostUsedExtension string | null - Tab 補全中最常見的文件擴展名
  • clientVersion string | null - 使用的 Cursor 客戶端版本

響應還包含一個 pagination 對象 (pagepageSizetotalUserstotalPageshasNextPagehasPreviousPage) 和一個 period 對象 (startDateendDate) 。

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

排序字段:emailnamespendCents。默認值:email

sortDirection string

排序方向:ascdesc。默認值:asc

page number

頁碼 (從 1 開始) 。默認值:1

pageSize number

每頁結果數 (1-1000) 。默認值:100

支出數據基於組織用量池中的各團隊進行彙總,因此不包含 /teams/spend 中的單團隊字段 subscriptionCycleStartoverallSpendCentsfastPremiumRequestshardLimitOverrideDollarsmonthlyLimitDollars。統計窗口會在 period 中返回。

響應字段

teamMemberSpend 中的每個對象都包含:

  • userId string - 帶 user_ 前綴的編碼用戶 ID (例如 user_abc123)
  • teamId number - 該成員所屬的組織關聯團隊 ID
  • name string - 用戶的顯示名稱
  • email string - 用戶的電子郵件地址
  • role string - 該成員在團隊中的角色 (例如 memberowner)
  • spendCents number - 在組織合同窗口內歸屬於該成員的已包含用量池支出,單位爲美分

響應還包括 totalMembers (number) 、totalPages (number) ,以及描述組織合同窗口的 period 對象 (startDateendDate,以 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。成功的行不會回滾。操作對每個團隊都是冪等的,因此僅重試失敗的 teamId4xx5xx 響應會拒絕整個請求,且不會應用任何更改。響應結構與 /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

enableddisabled。創建或更新自定義策略時必填;當 stateunrestricted 時省略此字段。

newModelDefault string

enableddisabled。創建或更新自定義策略時必填;當 stateunrestricted 時省略此字段。

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。成功的團隊會保留新配置。此操作對每個團隊均具備冪等性,因此僅重試失敗的 teamId4xx5xx 響應會拒絕整個請求且不應用任何更改。

請求體

teamIds number[] 必填

要更新的關聯團隊 ID。每個請求最多 100 個。

state string

可選。使用 unrestricted 清除各團隊的策略。發送默認值時省略此項。

newProviderDefault string

enableddisabled。創建或更新自定義策略時必填;當 stateunrestricted 時省略。

newModelDefault string

enableddisabled。創建或更新自定義策略時必填;當 stateunrestricted 時省略。

爲多個團隊設置自定義策略的默認值:

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。成功的行不會回滾。該操作對每個團隊都是冪等的,因此僅重試失敗的 teamId4xx5xx 響應會拒絕整個請求,且不會應用任何更改。

參數

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。成功的行不會回滾。該操作對每個團隊都是冪等的,因此僅重試失敗的 teamId4xx5xx 響應會拒絕整個請求,且不會應用任何更改。

參數

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 該團隊的 stateunrestrictedlegacy 時讀取提供商或模型,或對單個團隊執行寫入操作
400 提供商、模型、參數 ID 或參數值未知;響應體無效;allowedValues 爲空;默認值不在 allowedValues 內;設置無法解析爲有效的模型變體;或會阻止 Smart Auto 所需模型

批量組織路由 (帶 teamIdsPUT .../providers/:providerPUT .../providers/:provider/models/:modelPUT .../configuration) 會在批處理完成後返回 HTTP 200,即使某些行失敗也是如此。errorCount 非零仍表示 HTTP 響應成功。未關聯的團隊以及缺少配置等公開錯誤會顯示爲 status: "error" 行。成功的行不會回滾。每個團隊的操作都是冪等的,因此僅重試失敗的 teamId。任何 4xx5xx 響應均表示整個請求被拒絕,且未應用任何更改。當關聯團隊無法加載配置時,列表路由也會返回 HTTP 200 和一個包含 errorMessage 的行。

組織羣組

組織羣組用於管理同一組織下各關聯團隊的成員。有關儀表盤設置和羣組級控制,請參閱 組織羣組

  • 身份驗證:組織 API 密鑰 (Basic 認證)。讀取路由需要 members:* 作用域。寫入路由也需要 members:*。帶有 admin:* 的密鑰也可用,因爲 admin 權限包含 members 權限。
  • 羣組 ID:組織羣組 ID 使用 g_ 前綴。
  • 分頁:列表路由接受 pagepageSize。兩個值都必須是正整數。

列出組織羣組

/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
}
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜