Admin APIを使用すると、メンバー情報、使用状況メトリクス、支出詳細を含むチームのデータにプログラムでアクセスできます。カスタムダッシュボードや監視ツールを構築したり、既存のワークフローと統合したりできます。
このAPIは初回リリース版です。フィードバックに基づいて機能を拡張しています - 必要なエンドポイントがあればお知らせください!

認証

すべてのAPIリクエストには、APIキーを使用した認証が必要です。チーム管理者のみがAPIキーを作成・管理できます。 APIキーは組織に紐づけられ、すべての管理者が閲覧でき、元の作成者のアカウント状態に影響されません。

APIキーの作成

  1. cursor.com/dashboardSettingsタブ → Cursor Admin API Keysに移動
  2. Create New API Keyをクリック
  3. キーに説明的な名前を付ける(例:「Usage Dashboard Integration」)
  4. 生成されたキーをすぐにコピー - 再度表示されることはありません
形式: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

APIキーの使用

基本認証でAPIキーをユーザー名として使用します: curlで基本認証を使用する場合:
curl https://api.cursor.com/{route} -u API_KEY:
またはAuthorizationヘッダーを直接設定する場合:
Authorization: Basic {base64_encode('API_KEY:')}

ベースURL

すべてのAPIエンドポイントは以下を使用します:
https://api.cursor.com

エンドポイント

チームメンバーの取得

すべてのチームメンバーとその詳細を取得します。
GET /teams/members

レスポンス

チームメンバーオブジェクトの配列を返します:
{
  teamMembers: {
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
  }[];
}

レスポンス例

{
  "teamMembers": [
    {
      "name": "Alex",
      "email": "developer@company.com",
      "role": "member"
    },
    {
      "name": "Sam",
      "email": "admin@company.com",
      "role": "owner"
    }
  ]
}

リクエスト例

curl -X GET https://api.cursor.com/teams/members \
  -u YOUR_API_KEY:

日次使用データの取得

指定した日付範囲内でのチームの詳細な日次使用メトリクスを取得します。コード編集、AI支援の使用状況、受諾率に関する洞察を提供します。
POST /teams/daily-usage-data

リクエストボディ

パラメータ必須説明
startDatenumberはいエポックミリ秒での開始日
endDatenumberはいエポックミリ秒での終了日
日付範囲は90日を超えることはできません。より長い期間については複数のリクエストを行ってください。

レスポンス

{
  data: {
    date: number;
    isActive: boolean;
    totalLinesAdded: number;
    totalLinesDeleted: number;
    acceptedLinesAdded: number;
    acceptedLinesDeleted: number;
    totalApplies: number;
    totalAccepts: number;
    totalRejects: number;
    totalTabsShown: number;
    totalTabsAccepted: number;
    composerRequests: number;
    chatRequests: number;
    agentRequests: number;
    cmdkUsages: number;
    subscriptionIncludedReqs: number;
    apiKeyReqs: number;
    usageBasedReqs: number;
    bugbotUsages: number;
    mostUsedModel: string;
    applyMostUsedExtension?: string;
    tabMostUsedExtension?: string;
    clientVersion?: string;
    email?: string;
  }[];
  period: {
    startDate: number;
    endDate: number;
  };
}

レスポンスフィールド

フィールド説明
dateエポックミリ秒での日付
isActiveこの日にユーザーがアクティブだったか
totalLinesAdded追加されたコード行数
totalLinesDeleted削除されたコード行数
acceptedLinesAdded受諾されたAI提案から追加された行数
acceptedLinesDeleted受諾されたAI提案から削除された行数
totalApplies適用操作数
totalAccepts受諾された提案数
totalRejects拒否された提案数
totalTabsShown表示されたタブ補完数
totalTabsAccepted受諾されたタブ補完数
composerRequestsComposerリクエスト数
chatRequestsチャットリクエスト数
agentRequestsエージェントリクエスト数
cmdkUsagesコマンドパレット(Cmd+K)の使用回数
subscriptionIncludedReqsサブスクリプションリクエスト数
apiKeyReqsAPIキーリクエスト数
usageBasedReqs従量課金リクエスト数
bugbotUsagesバグ検出の使用回数
mostUsedModel最も頻繁に使用されたAIモデル
applyMostUsedExtension適用で最も使用されたファイル拡張子
tabMostUsedExtensionタブで最も使用されたファイル拡張子
clientVersionCursorのバージョン
emailユーザーのメールアドレス

レスポンス例

{
  "data": [
    {
      "date": 1710720000000,
      "isActive": true,
      "totalLinesAdded": 1543,
      "totalLinesDeleted": 892,
      "acceptedLinesAdded": 1102,
      "acceptedLinesDeleted": 645,
      "totalApplies": 87,
      "totalAccepts": 73,
      "totalRejects": 14,
      "totalTabsShown": 342,
      "totalTabsAccepted": 289,
      "composerRequests": 45,
      "chatRequests": 128,
      "agentRequests": 12,
      "cmdkUsages": 67,
      "subscriptionIncludedReqs": 180,
      "apiKeyReqs": 0,
      "usageBasedReqs": 5,
      "bugbotUsages": 3,
      "mostUsedModel": "gpt-4",
      "applyMostUsedExtension": ".tsx",
      "tabMostUsedExtension": ".ts",
      "clientVersion": "0.25.1",
      "email": "developer@company.com"
    },
    {
      "date": 1710806400000,
      "isActive": true,
      "totalLinesAdded": 2104,
      "totalLinesDeleted": 1203,
      "acceptedLinesAdded": 1876,
      "acceptedLinesDeleted": 987,
      "totalApplies": 102,
      "totalAccepts": 91,
      "totalRejects": 11,
      "totalTabsShown": 456,
      "totalTabsAccepted": 398,
      "composerRequests": 67,
      "chatRequests": 156,
      "agentRequests": 23,
      "cmdkUsages": 89,
      "subscriptionIncludedReqs": 320,
      "apiKeyReqs": 15,
      "usageBasedReqs": 0,
      "bugbotUsages": 5,
      "mostUsedModel": "claude-3-opus",
      "applyMostUsedExtension": ".py",
      "tabMostUsedExtension": ".py",
      "clientVersion": "0.25.1",
      "email": "developer@company.com"
    }
  ],
  "period": {
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }
}

リクエスト例

curl -X POST https://api.cursor.com/teams/daily-usage-data \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }'

支出データの取得

検索、ソート、ページネーション機能を使用して、現在の暦月の支出情報を取得します。
POST /teams/spend

リクエストボディ

パラメータ必須説明
searchTermstringいいえユーザー名とメールアドレスで検索
sortBystringいいえソート基準: amount, date, user。デフォルト: date
sortDirectionstringいいえソート方向: asc, desc。デフォルト: desc
pagenumberいいえページ番号(1から開始)。デフォルト: 1
pageSizenumberいいえページあたりの結果数

レスポンス

{
  teamMemberSpend: {
    spendCents: number;
    fastPremiumRequests: number;
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
    hardLimitOverrideDollars: number;
  }[];
  subscriptionCycleStart: number;
  totalMembers: number;
  totalPages: number;
}

レスポンスフィールド

フィールド説明
spendCents総支出額(セント単位)
fastPremiumRequests高速プレミアムモデルリクエスト数
nameメンバーの名前
emailメンバーのメールアドレス
roleチームでの役割
hardLimitOverrideDollarsカスタム支出制限の上書き
subscriptionCycleStartサブスクリプションサイクル開始日(エポックミリ秒)
totalMembers総チームメンバー数
totalPages総ページ数

レスポンス例

{
  "teamMemberSpend": [
    {
      "spendCents": 2450,
      "fastPremiumRequests": 1250,
      "name": "Alex",
      "email": "developer@company.com",
      "role": "member",
      "hardLimitOverrideDollars": 100
    },
    {
      "spendCents": 1875,
      "fastPremiumRequests": 980,
      "name": "Sam",
      "email": "admin@company.com",
      "role": "owner",
      "hardLimitOverrideDollars": 0
    },
  ],
  "subscriptionCycleStart": 1708992000000,
  "totalMembers": 15,
  "totalPages": 1
}

リクエスト例

基本的な支出データ:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
ページネーション付きで特定ユーザーを検索:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "searchTerm": "alex@company.com",
    "page": 2,
    "pageSize": 25
  }'

使用イベントデータの取得

包括的なフィルタリング、検索、ページネーションオプションを使用して、チームの詳細な使用イベントを取得します。このエンドポイントは、個別のAPI呼び出し、モデル使用、トークン消費、コストに関する詳細な洞察を提供します。
POST /teams/filtered-usage-events

リクエストボディ

パラメータ必須説明
startDatenumberいいえエポックミリ秒での開始日
endDatenumberいいえエポックミリ秒での終了日
userIdnumberいいえ特定のユーザーIDでフィルタ
pagenumberいいえページ番号(1から開始)。デフォルト: 1
pageSizenumberいいえページあたりの結果数。デフォルト: 10
emailstringいいえユーザーのメールアドレスでフィルタ

レスポンス

{
  totalUsageEventsCount: number;
  pagination: {
    numPages: number;
    currentPage: number;
    pageSize: number;
    hasNextPage: boolean;
    hasPreviousPage: boolean;
  };
  usageEvents: {
    timestamp: string;
    model: string;
    kindLabel: string;
    maxMode: boolean;
    requestsCosts: number;
    isTokenBasedCall: boolean;
    tokenUsage?: {
      inputTokens: number;
      outputTokens: number;
      cacheWriteTokens: number;
      cacheReadTokens: number;
      totalCents: number;
    };
    isFreeBugbot: boolean;
    userEmail: string;
  }[];
  period: {
    startDate: number;
    endDate: number;
  };
}

レスポンスフィールドの説明

フィールド説明
totalUsageEventsCountクエリに一致する使用イベントの総数
pagination結果をナビゲートするためのページネーションメタデータ
timestampエポックミリ秒でのイベントタイムスタンプ
modelリクエストに使用されたAIモデル
kindLabel使用カテゴリ(例:「Usage-based」、「Included in Business」)
maxModemaxモードが有効だったかどうか
requestsCostsリクエスト単位でのコスト
isTokenBasedCallイベントが使用量ベースのイベントとして課金される場合はtrue
tokenUsage詳細なトークン消費(isTokenBasedCallがtrueの場合に利用可能)
isFreeBugbotこれが無料のbugbot使用だったかどうか
userEmailリクエストを行ったユーザーのメール
periodクエリされたデータの日付範囲

レスポンス例

{
  "totalUsageEventsCount": 113,
  "pagination": {
    "numPages": 12,
    "currentPage": 1,
    "pageSize": 10,
    "hasNextPage": true,
    "hasPreviousPage": false
  },
  "usageEvents": [
    {
      "timestamp": "1750979225854",
      "model": "claude-4-opus",
      "kindLabel": "Usage-based",
      "maxMode": true,
      "requestsCosts": 5,
      "isTokenBasedCall": true,
      "tokenUsage": {
        "inputTokens": 126,
        "outputTokens": 450,
        "cacheWriteTokens": 6112,
        "cacheReadTokens": 11964,
        "totalCents": 20.18232
      },
      "isFreeBugbot": false,
      "userEmail": "developer@company.com"
    },
    {
      "timestamp": "1750979173824",
      "model": "claude-4-opus",
      "kindLabel": "Usage-based",
      "maxMode": true,
      "requestsCosts": 10,
      "isTokenBasedCall": true,
      "tokenUsage": {
        "inputTokens": 5805,
        "outputTokens": 311,
        "cacheWriteTokens": 11964,
        "cacheReadTokens": 0,
        "totalCents": 40.16699999999999
      },
      "isFreeBugbot": false,
      "userEmail": "developer@company.com"
    },
    {
      "timestamp": "1750978339901",
      "model": "claude-4-sonnet-thinking",
      "kindLabel": "Included in Business",
      "maxMode": true,
      "requestsCosts": 1.4,
      "isTokenBasedCall": false,
      "isFreeBugbot": false,
      "userEmail": "admin@company.com"
    }
  ],
  "period": {
    "startDate": 1748411762359,
    "endDate": 1751003762359
  }
}

リクエスト例

デフォルトのページネーションですべての使用イベントを取得:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
日付範囲と特定のユーザーでフィルタリング:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1748411762359,
    "endDate": 1751003762359,
    "email": "developer@company.com",
    "page": 1,
    "pageSize": 25
  }'
カスタムページネーションで特定のユーザーの使用イベントを取得:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "userId": 12345,
    "page": 2,
    "pageSize": 50
  }'

Repo Blocklists API

リポジトリと使用パターンを追加して、ファイルやディレクトリがインデックス化されたり、チームのコンテキストとして使用されることを防ぎます。

チームのリポジトリブロックリストを取得

チームに設定されているすべてのリポジトリブロックリストを取得します。
GET /settings/repo-blocklists/repos
レスポンス
リポジトリブロックリストオブジェクトの配列を返します:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
レスポンス例
{
  "repos": [
    {
      "id": "repo_123",
      "url": "https://github.com/company/sensitive-repo",
      "patterns": ["*.env", "config/*", "secrets/**"]
    },
    {
      "id": "repo_456",
      "url": "https://github.com/company/internal-tools",
      "patterns": ["*"]
    }
  ]
}
リクエスト例
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

リポジトリブロックリストのアップサート

提供されたリポジトリの既存のリポジトリブロックリストを置き換えます。 注意: このエンドポイントは、提供されたリポジトリのパターンのみを上書きします。他のすべてのリポジトリは影響を受けません。
POST /settings/repo-blocklists/repos/upsert
リクエストボディ
パラメータ必須説明
reposarrayYesリポジトリブロックリストオブジェクトの配列
各リポジトリオブジェクトには以下が含まれている必要があります:
フィールド必須説明
urlstringYesブロックリストに追加するリポジトリURL
patternsstring[]Yesブロックするファイルパターンの配列(globパターンサポート)
レスポンス
更新されたリポジトリブロックリストのリストを返します:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
リクエスト例
curl -X POST https://api.cursor.com/settings/repo-blocklists/repos/upsert \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "repos": [
      {
        "url": "https://github.com/company/sensitive-repo",
        "patterns": ["*.env", "config/*", "secrets/**"]
      },
      {
        "url": "https://github.com/company/internal-tools", 
        "patterns": ["*"]
      }
    ]
  }'

リポジトリブロックリストの削除

ブロックリストから特定のリポジトリを削除します。
DELETE /settings/repo-blocklists/repos/:repoId
パラメータ
パラメータ必須説明
repoIdstringYes削除するリポジトリブロックリストのID
レスポンス
削除が成功すると204 No Contentを返します。
リクエスト例
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

パターン例

一般的なブロックリストパターン:
  • * - リポジトリ全体をブロック
  • *.env - すべての.envファイルをブロック
  • config/* - configディレクトリ内のすべてのファイルをブロック
  • **/*.secret - 任意のサブディレクトリ内のすべての.secretファイルをブロック
  • src/api/keys.ts - 特定のファイルをブロック