Skip to main content

Command Palette

Search for a command to run...

API

Organization API

Organization API を使用すると、組織にリンクされたチーム全体に適用される操作 (たとえば、それらのチーム間でユーザーを移動する操作、チーム全体のプール型利用についてレポートする操作、組織グループを管理する操作、モデルアクセスを読み取るまたは更新する操作) を実行できます。これには、Organization API キーteam Admin API と同じ HTTP パターンを使用します。

  • Organization API では、API キーをユーザー名として ベーシック認証 を使用します。
  • API キーの作成、認証方法、レート制限、ベストプラクティスの詳細については、API Overview を参照してください。

Organization API キーと Team API キーの違い

Organization API キーは組織スコープの認証情報です。Team API キーはチームスコープの認証情報です。

/organizations/team-memberships/sync/organizations/pooled-usage/organizations/groups のような組織レベルのエンドポイントを呼び出す場合は、Organization API キーを使用します。

/teams/* 配下のチームレベルのエンドポイント (例: /teams/members/teams/spend) を呼び出す場合は、Team API キーを使用します。

主な違い

  • スコープ: Organization API キー は、同じ 組織 に紐づく複数のチームにまたがって利用できます。Team API キーは、1 つのチーム内でのみ利用できます。
  • エンドポイントの互換性: Organization エンドポイント には Organization API キー が必要です。Team エンドポイント には Team API キーが必要です。
  • キーのスコープ: 各ルートでは、キーに特定のスコープが必要です。参照専用の membership ルートでは members:read を受け付けます。membership と group の書き込みルートには members:* が必要で、usage ルートには usage:* が必要です。admin:* を持つキーは、admin が他のスコープを含むため、どのルートでも使用できます。
  • 認可の失敗: キーのスコープがエンドポイントのスコープと一致しない場合、リクエストは認証または認可エラー (通常は 401 または 403) で失敗します。

スコープ

すべての Organization API キーには、必ず 1 つのスコープが付与されています。ルートは、そのキーのスコープが対象のルートをカバーしている場合にのみ実行されます。より広いスコープには、より狭いスコープで許可される内容がすべて含まれます。

スコープAccessExample routes
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:* を使用します。ダッシュボードで Organization API キーを作成するときに、これらのスコープを選択できます。

Organization 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 }    ]  }'

メンバー

組織にリンクされているチーム間で組織メンバーシップを参照し、メンバーを移動できます。

組織メンバーの一覧

GET/organizations/members

API キーに紐付けられた組織のメンバーを取得します。各メンバーの組織での role と、リンクされたチームでの割り当ても含まれます。結果はページ分割されます。

クエリパラメータ

page number

ページ番号 (1始まり) 。デフォルトは最初のページです。

pageSize number

1ページあたりのメンバー数。上限は 200 で、200 を超える値は 200 として扱われます。

レスポンスフィールド

members array

組織メンバーの object の配列。各 object には次が含まれます。
  • userId number - メンバーの一意な数値識別子。チームの GET /teams/members エンドポイント が返す id と一致します
  • email string - メンバーのメールアドレス
  • name string - メンバーの表示名
  • organizationRole string - 組織レベルの role。admin または member のいずれかです。これは各チーム割り当ての teamRole とは異なります。ユーザーは組織では admin でありながら、特定のチームでは member role を持つことも、その逆もあります。
  • teams array - 組織にリンクされたチームでのそのメンバーの割り当て。各 object には次が含まれます。
    • teamId number - メンバーが所属するリンク済みチームの整数 ID
    • teamRole string - そのチームでの role (例: member, owner)

pagination object

ページネーションの metadata: 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  }}

組織のチームメンバーシップを同期する

POST/organizations/team-memberships/sync

組織内の1人以上のユーザーが所属するチームを設定します。これはCSV インポートAPIのバルク形式と同様の仕様です。ユーザーの配列を送信すると、各ユーザーに対して結果行が返されます。

各エントリには teamIds または destinationTeamId のいずれか一方のみを指定する必要があります:

  • teamIds は、ユーザーが所属すべきチーム ID の完全な一覧です。endpoint は、ユーザーの membership がその一覧と正確に一致するように調整します。ユーザーがまだ所属していない一覧内のチームは追加され、一覧にないチームは削除されます。Migration 中に別のチームを追加しつつ、ユーザーを現在のチームに残すには、両方を指定してください (例: [oldTeamId, newTeamId]) 。
  • destinationTeamId は、ユーザーを1 つのチームに所属させます。ユーザーは指定されたチームに追加され、他のすべてのチームから削除されます。destinationTeamId: NNN の設定は、機能的には teamIds: [NNN] と同等です。

リクエストボディ

organizationId string 必須

公開組織ID (例:org_abc123) 。エンドポイントを呼び出すために使用する Organization API キーの組織と一致している必要があります。

users array 必須

空でないエントリのリスト (リクエストごとに最大500件) 。各要素はユーザーIDとチームフィールド (teamIds または destinationTeamId) をちょうど1つ持つオブジェクトです:
  • userId number | string: 同期する対象のユーザー ID。整数の ID (例: 12345) または文字列の ID (例: "user_abc123") のいずれかを使用できます。
  • teamIds number[]: 同期後にユーザーが所属しているべき、Org に紐づくチーム ID の完全な一覧です。メンバーシップはこの一覧と完全に一致するように調整されます。一覧に含まれないチームはすべて削除されます。現在所属しているチームを維持するには、それらも含めてください (例: [7, 8]) 。1 エントリあたり最大 100 チームまで指定できます。
  • destinationTeamId 数値: 単一のチームに同期するためのフィールドです。destinationTeamId: NNN の設定は、teamIds: [NNN] を送信するのと同じです。ユーザーのチームはその1つのチームのみに設定されます。組織に紐づくチームである必要があります。
エントリごとに teamIds または destinationTeamId のいずれか一方のみを指定してください。

成功レスポンス (HTTP 200)

results array

リクエストされた各同期について、順番に1件ずつエントリが返されます。各オブジェクトには userId、そのエントリに対して解決された teamIds、および該当行が失敗した場合は errorMessage を伴う status: "error"、成功した場合は status: "success" のいずれかが含まれます。destinationTeamId を指定して送信されたエントリには、teamIds の先頭チームである destinationTeamId も返されます。

successCount 数値

status: "success" の行数。

errorCount 数値

status: "error" の行数。
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 に紐付けます (ユーザーがまだ所属していないチームを追加し、その他の紐付けられたチームを削除します) 。2番目のエントリは 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 401403、または 400 と、次のような形式のJSONボディが使用されます。

{  "code": "error",  "message": "…"}

404: 組織が見つかりません (このルートでは、message に別のフィールド名が使われます) :

{  "error": "Organization not found"}

401: 無効な Organization API キー (キーが間違っているか、指定されていません) :

{  "code": "error",  "message": "Invalid Organization API Key"}

401: 必要なスコープが不足しています (キーは有効ですが、members:* または admin:* のスコープが含まれていません) :

{  "code": "error",  "message": "Organization API key missing required scope: members:*"}

403: organization がこの API キーと一致しません (body 内の organizationId は、この API キーに対応する組織ではありません) :

{  "code": "error",  "message": "Not authorized"}

400: 無効なリクエストボディ (例。失敗した各リクエストに該当するのは1つだけです) :

{  "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}

利用

組織に紐づくすべてのチームの利用状況をレポートします。これらのエンドポイントは organization pool 内の全チームのデータを集計するため、チームごとに個別の Team API キー は必要ありません。単一チームのレポートには、代わりにチームの Admin API の利用エンドポイントを使用してください。

プール型利用を取得

POST/organizations/pooled-usage

組織のプール型利用を取得します。プールの支出上限、組織全体の合計利用額、チームごとの内訳を返します。これはダッシュボードのプール型利用セクションで使用されます。金額フィールドはすべてセント単位です。

リクエスト本文

organizationId string 必須

公開組織 ID (例: org_abc123) 。エンドポイントの呼び出しに使用する Organization 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 と一致します。各 object には以下が含まれます:
  • 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    }  ]}

利用イベントを取得する

POST/organizations/filtered-usage-events

組織に紐づくチーム全体の詳細な使用状況イベントを取得します。これはチームの /teams/filtered-usage-events エンドポイントに対応する組織全体版で、同じイベント形式を返し、各イベントには所有チームの teamId がタグ付けされます。

リクエストボディ

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

1ページあたりの結果数。デフォルト: 10

レスポンスフィールド

usageEvents の各オブジェクトには、チームのエンドポイントと同じフィールドに加えて、所有チームのタグが含まれます。

  • teamId number - このイベントを所有するチームの整数ID
  • timestamp string - エポックミリ秒単位のイベントタイムスタンプ (文字列)
  • userEmail string - リクエストを送信したユーザーのメールアドレス
  • serviceAccountId string | undefined - リクエストを行ったサービスアカウントの ID。人間のユーザーによるイベントでは省略されます。
  • serviceAccountName string | undefined - リクエストを行ったサービス アカウントの表示名。人間のユーザーによるイベントでは省略されます。
  • model string - リクエストで使用するAIモデル
  • kind string - 請求種別 (例: Usage-based, Included in Business)
  • maxMode boolean - リクエストで Max Mode が使用されたかどうか
  • requestsCosts 数値 - リクエスト単位のコスト
  • isTokenBasedCall boolean - リクエストがトークン利用に基づいて課金されたかどうか
  • isChargeable boolean - このイベントに料金が発生するかどうか
  • isHeadless ブール値 - このリクエストが接続済みのクライアントを介さずに行われたかどうか (例: バックグラウンドエージェント)
  • tokenUsage object | undefined - トークン利用の詳細 (isTokenBasedCalltrue の場合に含まれます) :
    • inputTokens number - 消費された入力トークン数
    • outputTokens number - 生成された出力トークン数
    • cacheWriteTokens number - キャッシュに書き込まれたトークン数
    • cacheReadTokens number - キャッシュから読み取られたトークン数
    • totalCents number - モデルの総コスト (セント単位)
    • discountPercentOff number | undefined - 適用された割引率 (存在する場合)
  • chargedCents number - このイベントで請求された合計金額 (セント単位)。Cursorトークンレートの対象となるサードパーティモデルのリクエストでは、モデルコストと Cursorトークンレートが含まれます。
  • cursorTokenFee number | undefined - セント単位のCursorトークンレート。サードパーティモデルのリクエストにレートが適用される場合 (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  }}

日次利用データを取得する

POST/organizations/daily-usage-data

organizationに紐づく全チームのメンバーごとの日次利用メトリクスを取得します。これはチームの /teams/daily-usage-data endpointに対応するorganization全体版であり、各行には所属する teamId が付与されます。結果はユーザー単位でページネーションされ、指定した日付範囲内にmembershipを持つ全メンバーのデータを返します。pagepageSize を使用してページを切り替えてください。

リクエストボディ

organizationId string 必須

公開組織 ID (例:org_abc123) 。エンドポイントを呼び出す際に使用する Organization API キーの組織と一致している必要があります。

startDate number

エポックミリ秒単位の開始日。デフォルトは7日前です。

endDate number

エポックミリ秒単位の終了日時。デフォルトは現在時刻です。

teamIds number[]

レポート対象の組織リンクされたチーム。省略した場合、組織プール内のすべてのチームが含まれます。1リクエストあたり最大100チームまで。

page number

ページ番号 (1から開始) 。デフォルト: 1

pageSize number

1ページあたりのユーザー数 (1〜1000)。デフォルト: 1000

userEmail string

メールアドレスで1人以上のユーザーを絞り込みます。単一のメールアドレス、またはカンマ区切りのリストを指定できます。userEmails はエイリアスとして使用できます。

レスポンスフィールド

data 配列内の各オブジェクトには、チームの日次利用 endpointと同じフィールドに加え、teamId が含まれます。主なフィールド:

  • userId 文字列 - user_ プレフィックスが付いたエンコード済みのユーザー ID (例: user_abc123)
  • teamId number - この行が属する組織に紐づくチームのID
  • day string - このレコードの対象日 (ISO日付、例: 2024-03-18)
  • date number - エポックミリ秒形式の日付
  • email string - ユーザーのメールアドレス
  • isActive boolean - その日にユーザーのアクティビティがあったかどうか
  • totalLinesAdded number - 追加されたコードの総行数
  • totalLinesDeleted 数値 - 削除されたコードの合計行数
  • acceptedLinesAdded number - AI が提案し、受け入れられた追加行数
  • acceptedLinesDeleted 数値 - 承認されたAI提案による削除行数
  • totalApplies 数値 - AIによるコード適用アクションの合計数
  • totalAccepts 数値 - 採用されたAI提案の合計数
  • totalRejects number - 拒否されたAI提案の総数
  • totalTabsShown number - ユーザーに表示された Tab completion の合計数
  • totalTabsAccepted number - ユーザーが受け入れた Tab 補完の合計数
  • composerRequests 数値 - 行われた Composer リクエストの数
  • chatRequests 数値 - チャット リクエストの件数
  • agentRequests number - Agentモードのリクエスト数
  • cmdkUsages 数値 - 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  }}

支出データを取得

POST/organizations/spend

組織にリンクされたチーム全体について、メンバーごとの支出を取得します。これはチーム向け/teams/spendエンドポイントの組織全体版で、各メンバーにはその所属元のteamIdが付与されます。チームのエンドポイントとは異なり、支出は/organizations/pooled-usageと同じ含まれる支出の定義を使用して組織の契約期間全体でレポートされるため (チームごとの請求サイクルではありません) 、数値はプールと整合します。

リクエスト本文

organizationId string 必須

公開組織ID (例: org_abc123) 。エンドポイントの呼び出しに使用するOrganization API keyの組織と一致している必要があります。

teamIds number[]

レポート対象の組織にリンクされたチーム。省略した場合、組織のプール内のすべてのチームが含まれます。1リクエストあたり最大100チームまでです。

sortBy string

並び替え基準: emailnamespendCents。デフォルト: email

sortDirection string

並び順: ascdesc。デフォルト: asc

page number

ページ番号 (1始まり) 。デフォルト: 1

pageSize number

1ページあたりの結果数 (1〜1000) 。デフォルト: 100

レスポンスフィールド

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 を含む) を使用してチーム間の設定を整合させます。組織レベルのコピーエンドポイントやポリシーフィンガープリントはありません。

パラメーター設定なしでモデルを有効にすると、カタログのデフォルトのままになります。Fast などのデフォルトが組織のポリシーと一致しない場合は、一括モデルルートを使用してください。

数値の teamId は、GET /organizations/members などのルートから取得します。

モデルアクセス設定を一覧表示

GET/organizations/teams/model-access/configuration

リンクされたチームのモデルアクセス設定を一覧表示します。制限なしポリシーとカスタムポリシーの乖離を確認するために使用します。オン/オフ設定の乖離については、各チームのプロバイダーを GET して比較します。

リンクされたチームでモデルアクセス制御が有効になっていない場合でも、その行は HTTP 200 となり、state/デフォルト値の代わりに errorMessage が含まれます。そのチームに対するチームごとの 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  }}

チームのモデルアクセス設定を取得

GET/organizations/teams/:teamId/model-access/configuration

リンクされた 1 つのチームの設定を取得します。

パラメータ

teamId number 必須

組織にリンクされたチームの整数 ID。
curl -X GET https://api.cursor.com/organizations/teams/7/model-access/configuration \  -u YOUR_ORGANIZATION_API_KEY:

チームのモデルアクセス設定を更新

PUT/organizations/teams/:teamId/model-access/configuration

リンクされたチームのモデルアクセス設定を作成または更新するか、チームを無制限に戻します。リクエストボディと初期設定時の挙動はチームルートと同じです。

パラメータ

teamId number 必須

組織にリンクされたチームの整数 ID。

リクエスト本文

state string

任意。ポリシーをクリアするには unrestricted を使用します。デフォルトを送信する場合は省略します。

newProviderDefault string

enabled または disabled。カスタムポリシーを作成または更新する場合は必須です。stateunrestricted の場合は省略します。

newModelDefault string

enabled または disabled。カスタムポリシーを作成または更新する場合は必須です。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" }'

モデルアクセス設定を一括更新

PUT/organizations/teams/model-access/configuration

複数のリンクされたチームの設定を作成または更新するか、アクセス制限なしの状態に戻します。1 回のリクエストで指定できる teamIds は最大 100 件です。

HTTP 200 はバッチが処理されたことを示すだけで、すべての行が成功したことを示すものではありません。errorCount と各 results[].status を確認してください。成功したチームには新しい設定が適用されます。この操作はチームごとに冪等であるため、失敗した teamId のみ再試行してください。4xx または 5xx のレスポンスではリクエスト全体が拒否され、変更は適用されません。

リクエスト本文

teamIds number[] 必須

更新するリンクされたチーム ID。1 回のリクエストで最大 100 件。

state string

任意。各チームのポリシーをクリアするには unrestricted を指定します。デフォルトを送信する場合は省略してください。

newProviderDefault string

enabled または disabled。カスタムポリシーを作成または更新する場合は必須です。stateunrestricted の場合は省略してください。

newModelDefault string

enabled または disabled。カスタムポリシーを作成または更新する場合は必須です。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}

チームのモデルアクセスプロバイダーを取得

GET/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:

チームのモデルアクセスプロバイダーを更新

PUT/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}'

チームのモデルアクセスモデルを更新

PUT/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"      }    }  }'

モデルアクセスプロバイダーを一括更新

PUT/organizations/teams/model-access/providers/:provider

複数のリンクされたチームでプロバイダーを有効または無効にします。1回のリクエストで指定できる teamIds は最大100件です。

HTTP 200 は、バッチが処理されたことを示すだけで、すべての行が成功したことを意味するわけではありません。errorCount と各 results[].status を確認してください。成功した行はロールバックされません。操作はチームごとに冪等であるため、失敗した teamId のみを再試行してください。4xx または 5xx のレスポンスではリクエスト全体が拒否され、変更は適用されません。

パラメータ

provider string 必須

カタログのプロバイダー ID (例:openai) 。

リクエスト本文

enabled boolean 必須

teamIds number[] 必須

更新するリンクされたチームの ID。1回のリクエストで最大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": "Team has no model access policy. Create one with PUT /teams/model-access/configuration, or enable model access in Team Settings → Models."    }  ],  "successCount": 2,  "errorCount": 1}

この例でも、���ッチが完了したため HTTP ステータスは 200 です。チーム7と8ではプロバイダーは無効のままです。チーム9は設定を作成してから再試行してください。

モデルアクセスモデルを一括更新

PUT/organizations/teams/model-access/providers/:provider/models/:model

複数のリンクされたチームでモデルを有効または無効にします。必要に応じて、単一チームのモデル PUT と同じparametersマップを指定できます。1回のリクエストで指定できるteamIdsは最大100件です。

HTTP 200 は、すべての行が成功したことではなく、バッチが処理されたことを意味します。errorCountと各results[].statusを確認してください。成功した行はロールバックされません。この操作はチームごとに冪等であるため、失敗したteamIdのみ再試行してください。4xx または 5xx のレスポンスではリクエスト全体が拒否され、変更は適用されません。

パラメータ

provider string 必須

カタログのプロバイダー ID (例: anthropic) 。

model string 必須

カタログのモデル ID (例: claude-opus-4-6) 。

リクエスト本文

enabled boolean 必須

teamIds number[] 必須

更新するリンクされたチームのID。1回のリクエストで最大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": "Team has no model access policy. Create one with PUT /teams/model-access/configuration, or enable model access in Team Settings → Models."    }  ],  "successCount": 2,  "errorCount": 1}

エラー

エラー本文には以下を使用します。

{ "code": "error", "message": "…" }
ステータス発生条件
401キーが不正、または models:read / models:* (または admin:*) がない
403そのチームではモデルアクセス制御を利用できない (単一チームルート)
404チームが組織にリンクされていない (単一チームルート)
409そのチームの stateunrestricted または legacy のときにプロバイダーまたはモデルを読み取った、または単一チームへの書き込みを行った
400不明なプロバイダー、モデル、パラメーター ID、またはパラメーター値、無効なリクエスト本文、空の allowedValuesallowedValues 外のデフォルト、有効なモデルバリアントに解決されない設定、または Smart Auto で必須のモデルがブロックされる

組織向けの一括ルート (teamIds を含む PUT .../providers/:providerPUT .../providers/:provider/models/:model、および PUT .../configuration) は、一部の行が失敗しても、バッチが処理されると HTTP 200 を返します。errorCount がゼロ以外でも、HTTP レスポンスは成功です。リンクされていないチームや設定不足などの公開エラーは、status: "error" の行として表示されます。成功した行はロールバックされません。操作はチームごとに冪等です。そのため、失敗した teamId のみを再試行してください。4xx または 5xx のレスポンスは、リクエスト全体が拒否され、変更が適用されなかったことを意味します。リンクされたチームが設定を読み込めない場合、リストルートも errorMessage 行を含む HTTP 200 を返します。

組織グループ

組織グループを使うと、同じ組織に紐づく複数のチームにまたがるメンバーを整理できます。ダッシュボードのセットアップとグループレベルの制御については、組織グループ を参照してください。

組織グループを一覧表示

GET/organizations/groups

API キーに紐づく組織の組織グループを取得します。

クエリパラメータ

page number

ページ番号。デフォルトは 1 ページ目です。

pageSize number

1 ページあたりのグループ数。
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  }}

組織グループを取得

GET/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"  }}

組織グループ メンバーの一覧

GET/organizations/groups/:groupId/members

組織グループ内のメンバーを取得します。

パラメータ

groupId string 必須

g_ プレフィックス付きの組織グループ ID。

クエリパラメータ

page number

ページ番号。デフォルトは最初のページです。

pageSize number

1ページあたりのメンバー数。
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  }}

組織グループ メンバーの追加

POST/organizations/groups/:groupId/members/bulk-add

組織グループにメンバーを追加します。

パラメータ

groupId string 必須

g_ プレフィックス付きの組織グループ ID。

リクエスト本文

userIds string[] 必須

user_ 接頭辞付きの公開 user ID の配列。1回のリクエストには最大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}

組織グループ メンバーの削除

POST/organizations/groups/:groupId/members/bulk-remove

組織グループからメンバーを削除します。

パラメータ

groupId string 必須

g_ プレフィックス付きの組織グループ ID。

リクエスト本文

userIds string[] 必須

user_ プレフィックス付きの公開ユーザー ID の配列。1 回のリクエストで最大 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}