Skip to main content

Command Palette

Search for a command to run...

API

Cloud Agents API

Cloud Agents API を使用すると、リポジトリで動作する Cloud Agent をプログラム経由で起動し、管理できます。

エンドポイント

エージェントを作成する

POST/v1/agents

Cloud Agentを作成し、初回の実行を即座にキューに追加します。レスポンスには、永続的なagentと初回のrunの両方が返されます。

リクエストボディ

prompt オブジェクト (必須)

エージェントに渡すタスクプロンプト (画像は任意) 。

prompt.text 文字列 (必須)

エージェントへの指示テキスト。

prompt.images 配列 (任意)

プロンプト用の画像入力。各エントリには data (必須の mimeType を伴う base64 エンコード済みバイト列) か url (Cursor が取得する http または https の URL) のいずれかを含める必要があります。最大5枚、各ファイルは最大15MB。サポートされている MIME タイプ: image/png, image/jpeg, image/gif, image/webp

model オブジェクト (任意)

モデルの選択。このフィールドを省略すると、設定されたデフォルトが使用されます。省略した場合、Cursor はユーザーのデフォルトモデル、次にチームのデフォルトモデル、最後にシステムのデフォルトを解決します。

model.id string (model が指定された場合は必須)

GET /v1/models が返す明示的なモデルID (例:claude-4-sonnet-thinking) 。

model.params 配列 (任意)

実行に適用するモデルごとのパラメータ (reasoning effort やコンテキストウィンドウサイズなど) 。各項目は idvalue を持ちます。選択したモデルでサポートされているパラメータのみを使用してください。使用可能な id/params の組み合わせを確認するには GET /v1/models を呼び出してください。

name string (省略可)

エージェントの表示名。最大100文字。省略した場合、Cursor はプロンプトから自動的に名前を派生します。

env オブジェクト (任意)

実行環境のターゲット。名前付きの cloud 環境を使用するか、自身がホストする pool または machine にルーティングします。Cursor がホストする名前付き環境を選択する場合、明示的な repos とは相互排他です。

env.type string (env が指定されている場合は必須)

実行環境の種類。cloud は Cursor ホストの VM を使用し、poolmachine は自身のワーカーにルーティングされます。

env.name string (省略可)

Cursor-hosted 環境、プール、またはマシンの名前を指定します。env.type: "pool" の場合はプール名となり、省略した場合は default がデフォルトになります。不明なプール名を指定すると、いつまでもキューに残るのではなく 400 が返されます。

repos 配列 (任意)

リポジトリの設定。名前付きクラウド環境とは相互排他です。reposenv の両方を省略すると、リポジトリなしのエージェントを起動します。env.typepool の場合は、any-repo プールをターゲットにするために repos を省略することもできます。最大20リポジトリ。

repos[0].url string (必須)

GitHub リポジトリの URL (例: https://github.com/your-org/your-repo) 。prUrl が指定されている場合でも、すべてのリポジトリエントリで必須です。

repos[0].startingRef string (省略可)

開始点として使用するブランチ名またはコミットSHA。prUrl が指定されている場合は無視されます。

repos[0].prUrl string (省略可)

GitHub プルリクエストの URL。指定すると、エージェントはこのプルリクエストのリポジトリとブランチで動作し、startingRef は無視されます。repos の同じエントリに url を設定しておく必要があります。

workOnCurrentBranch boolean (省略可、デフォルト: false)

false (デフォルト) の場合、Cursor は repos[0].startingRef (または prUrl が設定されている場合は PR のベース ref) を基に自動生成された新しいブランチ (cursor/...) にコミットをプッシュします。true の場合、Cursor はその開始 ref に直接プッシュします — PR でない作成では startingRef に渡したブランチ、prUrl を使った作成では PR のヘッドブランチが対象になります。エージェントがプッシュしたブランチはエージェントの git.branches[] に表示されます。

autoCreatePR boolean (省略可)

実行完了時に Cursor がプルリクエストを作成するかどうか。

skipReviewerRequest boolean (省略可)

CursorがPRを開く際にユーザーをレビュアーとしてリクエストする処理をスキップするかどうか。autoCreatePRtrueの場合にのみ適用されます。

envVars オブジェクト (任意)

Cloud Agentのセッションスコープの環境変数です。値は保存時に暗号化され、エージェントのシェルに注入され、エージェントとともに削除されます。最大50件まで。名前は最大255バイト (CURSOR_で始めることはできません) 、値は最大4096バイトです。クライアント提供のagentIdとは併用できません。
ベータ: envVars は段階的に展開されています。まだお使いのアカウントで有効になっていない場合、このフィールドは作成時にリクエストを失敗させるのではなく静かに無視されます。本番でそれらに依存する前に、初回実行時にエージェントのシェルを確認して値が存在することを確認してください。

mcpServers 配列 (任意)

エージェントが利用できるインラインMCPサーバーの定義。最大50台のサーバー。リモートサーバーは headers または OAuth の auth をサポートし、stdio サーバーはクラウド VM 内で実行され env を受け取ることができます。サーバー名は一意である必要があります。

mcpServers[0].name string (必須)

エージェントに公開される MCP サーバー名。

mcpServers[0].type string (省略可)

トランスポートの種類: httpsse、または stdiourl を持つリモートサーバーではデフォルトが httpcommand を持つサーバーではデフォルトが stdio です。

mcpServers[0].url string (リモートMCPの場合は必須)

リモートMCPサーバーの HTTP または HTTPS の URL。ユーザー名やパスワードを含む URL は許可されていません。

mcpServers[0].command string (stdio MCP の場合は必須)

Cloud Agent VM内でstdio MCPサーバーを起動するコマンド。引数および実行時のシークレットにはargsenvを使用してください。

customSubagents 配列 (任意)

実行中にメインエージェントが委任できるカスタムサブエージェントを定義します。最大20のサブエージェントまでです。各エントリには namedescriptionprompt が必須で、オプションで model (モデルID文字列、ModelSelection オブジェクト、または "inherit") を指定できます。名前は一意であり、組み込みの名前 (exploredebugshellcomputerUse など) と衝突してはいけません。

mode string (省略可、デフォルト: agent)

エージェントの初回実行時の初期会話モード。plan はコーディング前に計画を探索・立案します (Plan モード) 。agent は変更を直接実装します。

agentId string (省略可)

bc-<uuid> 形式のクライアント指定エージェント識別子。冪等な作成フローに役立ちます — 同じ agentId を再度 POST すると重複作成の代わりに 409 agent_id_conflict が返されます。envVars と併用できません。セッションシークレットが必要な場合は agentId を省略して、サーバーに生成させてください。
curl --request POST \  --url https://api.cursor.com/v1/agents \  -u YOUR_API_KEY: \  --header 'Content-Type: application/json' \  --data '{    "prompt": {      "text": "Add a README with setup instructions"    },    "model": {      "id": "composer-2",      "params": [        { "id": "fast", "value": "true" }      ]    },    "repos": [      {        "url": "https://github.com/your-org/your-repo",        "startingRef": "main"      }    ],    "mcpServers": [      {        "name": "linear",        "type": "http",        "url": "https://mcp.linear.app/sse",        "headers": {          "Authorization": "Bearer YOUR_LINEAR_API_KEY"        }      },      {        "name": "github",        "type": "stdio",        "command": "npx",        "args": ["-y", "@modelcontextprotocol/server-github"],        "env": {          "GITHUB_TOKEN": "YOUR_GITHUB_TOKEN"        }      }    ],    "autoCreatePR": true  }'

ワーカープール (リポジトリなしを含む) :

curl --request POST \  --url https://api.cursor.com/v1/agents \  -u YOUR_API_KEY: \  --header 'Content-Type: application/json' \  --data '{    "prompt": {      "text": "Clone the payments service and add a health check"    },    "env": {      "type": "pool",      "name": "sandbox"    }  }'

レスポンス:

{  "agent": {    "id": "bc-00000000-0000-0000-0000-000000000001",    "name": "Add README with setup instructions",    "status": "ACTIVE",    "env": {      "type": "cloud"    },    "repos": [      {        "url": "https://github.com/your-org/your-repo",        "startingRef": "main"      }    ],    "workOnCurrentBranch": false,    "autoCreatePR": true,    "url": "https://cursor.com/agents/bc-00000000-0000-0000-0000-000000000001",    "createdAt": "2026-04-13T18:30:00.000Z",    "updatedAt": "2026-04-13T18:30:00.000Z",    "latestRunId": "run-00000000-0000-0000-0000-000000000001"  },  "run": {    "id": "run-00000000-0000-0000-0000-000000000001",    "agentId": "bc-00000000-0000-0000-0000-000000000001",    "status": "CREATING",    "createdAt": "2026-04-13T18:30:00.000Z",    "updatedAt": "2026-04-13T18:30:00.000Z"  }}

エージェントを一覧表示

GET/v1/agents

認証済みユーザーのエージェントを新しい順に一覧表示します。

クエリパラメータ

limit number (省略可)

返すエージェント数。デフォルト: 20、最大: 100。

cursor string (省略可)

前回のレスポンスの nextCursor で返されたページネーションカーソル。

prUrl string (省略可)

GitHub のプルリクエスト URL でエージェントを絞り込みます。

includeArchived boolean (省略可、デフォルト: true)

レスポンスにアーカイブ済みのエージェントを含めるかどうか。
curl --request GET \  --url 'https://api.cursor.com/v1/agents?limit=20' \  -u YOUR_API_KEY:

レスポンス:

{  "items": [    {      "id": "bc-00000000-0000-0000-0000-000000000001",      "name": "Add README with setup instructions",      "status": "ACTIVE",      "env": {        "type": "cloud"      },      "url": "https://cursor.com/agents/bc-00000000-0000-0000-0000-000000000001",      "createdAt": "2026-04-13T18:30:00.000Z",      "updatedAt": "2026-04-13T18:45:00.000Z",      "latestRunId": "run-00000000-0000-0000-0000-000000000001"    }  ],  "nextCursor": "bc-00000000-0000-0000-0000-000000000002"}

エージェントを取得

GET/v1/agents/{id}

エージェントの永続的なメタデータを取得します。実行ステータスは実行ごとに管理されます。latestRunId を取得し、実行の取得 を呼び出して実行状態を確認します。

パスパラメータ

id string

エージェントの一意の識別子 (例: bc-00000000-0000-0000-0000-000000000001) 。

レスポンスフィールド

status string

エージェントのライフサイクルステータス。コントローラーは、マシンを稼働し続ける必要があるかを判断するために使用します:
  • ACTIVE — ターンが実行中、バックグラウンド作業を待機中、または開始直前です。エージェントのマシンを稼働し続けてください。
  • IDLE — 最後のターンが完了し、フォローアップを受け入れられます。エージェントのマシンは休止またはスナップショットにできます。復旧可能なエラーで終了した実行も IDLE と報告されます。実行レベルのエラー詳細は実行の取得に保持されます。
  • ARCHIVED — エージェントはアーカイブ済みまたは期限切れです。終端状態です。クレームは終了し、ワークスペース状態は削除できます。
curl --request GET \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001 \  -u YOUR_API_KEY:

レスポンス:

{  "id": "bc-00000000-0000-0000-0000-000000000001",  "name": "Add README with setup instructions",  "status": "ACTIVE",  "env": {    "type": "cloud"  },  "repos": [    {      "url": "https://github.com/your-org/your-repo",      "startingRef": "main"    }  ],  "workOnCurrentBranch": false,  "autoCreatePR": true,  "url": "https://cursor.com/agents/bc-00000000-0000-0000-0000-000000000001",  "createdAt": "2026-04-13T18:30:00.000Z",  "updatedAt": "2026-04-13T18:30:00.000Z",  "latestRunId": "run-00000000-0000-0000-0000-000000000001"}

実行を作成

POST/v1/agents/{id}/runs

既存のアクティブなエージェントに追加入力のプロンプトを送信します。この新しい実行では、エージェントの現在の会話状態とワークスペース状態が引き継がれます。

パスパラメータ

id string

エージェントの一意の識別子 (例: bc-00000000-0000-0000-0000-000000000001) 。

リクエストボディ

prompt object (required)

任意の画像を含められる追加入力のプロンプト。

prompt.text string (required)

追加の指示テキスト。

prompt.images array (optional)

追加入力用の画像入力。各エントリには、data (mimeType が必須の base64 エンコード済みバイト列) または url のいずれかを含める必要があります。最大 5 枚、各 15 MB。サポートされる MIME タイプ: image/pngimage/jpegimage/gifimage/webp

mcpServers array (optional)

この追加実行用のインライン MCP サーバー定義。指定した場合、この実行では作成時に設定したインライン MCP サーバーを置き換えます。省略すると、エージェントの現在の MCP 設定が維持されます。

mode string (optional)

この追加実行の会話モードの上書き: agent または plan。省略すると、以前の実行から現在の会話モードが維持されます。
curl --request POST \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/runs \  -u YOUR_API_KEY: \  --header 'Content-Type: application/json' \  --data '{    "prompt": {      "text": "Also add troubleshooting steps"    },    "mcpServers": [      {        "name": "docs",        "type": "http",        "url": "https://example.com/mcp"      }    ]  }'

レスポンス:

{  "run": {    "id": "run-00000000-0000-0000-0000-000000000002",    "agentId": "bc-00000000-0000-0000-0000-000000000001",    "status": "CREATING",    "createdAt": "2026-04-13T18:50:00.000Z",    "updatedAt": "2026-04-13T18:50:00.000Z"  }}

実行一覧

GET/v1/agents/{id}/runs

エージェントの実行を新しい順に一覧表示します。

パスパラメータ

id string

エージェントの一意の識別子。

クエリパラメータ

limit number (optional)

返す実行数。デフォルト: 20、最大: 100。

cursor string (optional)

前回のレスポンスの nextCursor で返されたページネーションカーソル。
curl --request GET \  --url 'https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/runs?limit=20' \  -u YOUR_API_KEY:

レスポンス:

{  "items": [    {      "id": "run-00000000-0000-0000-0000-000000000002",      "agentId": "bc-00000000-0000-0000-0000-000000000001",      "status": "RUNNING",      "createdAt": "2026-04-13T18:50:00.000Z",      "updatedAt": "2026-04-13T18:51:00.000Z",      "git": {        "branches": [          {            "repoUrl": "github.com/your-org/your-repo",            "branch": "cursor/add-readme-a1b2"          }        ]      }    }  ]}

実行の取得

GET/v1/agents/{id}/runs/{runId}

特定の実行のステータス、タイムスタンプ、さらに (ターミナル実行の場合は) 最終結果、実行時間、プッシュされたブランチを取得します。

パスパラメータ

id string

エージェントの一意の識別子。

runId string

実行の一意の識別子 (例: run-00000000-0000-0000-0000-000000000001) 。

レスポンスフィールド

基本の実行フィールド (idagentIdstatuscreatedAtupdatedAt) は常に含まれます。以下のフィールドは、データが利用可能になり次第設定されます。

durationMs integer (terminal runs)

実行が FINISHEDERRORCANCELLED、または EXPIRED になった時点で算出される、実行時間 (ミリ秒) です。

result string (terminal runs)

終了した実行に対するアシスタントの最終返信テキストです。

git object (when a branch has been pushed)

エージェントの現在のプッシュ済みブランチとプルリクエストです。git.branches[] には、エージェントがプッシュした各ブランチごとに { repoUrl, branch?, prUrl? } のエントリが含まれます (スタックされたエージェントでは複数になります) 。
実行単位ではなく、エージェント単位の状態です。 同じエージェント上のすべての実行で、同じ git スナップショットが返されます。特定の実行に作業を対応付けるには、エージェントの latestRunId または SSE ストリームを使用します。
repoUrl はスキームなしで返されます (例: github.com/your-org/your-repo) — https:// プレフィックスが保持されるリクエストの repos[].url とは異なります。
curl --request GET \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/runs/run-00000000-0000-0000-0000-000000000001 \  -u YOUR_API_KEY:

レスポンス:

{  "id": "run-00000000-0000-0000-0000-000000000001",  "agentId": "bc-00000000-0000-0000-0000-000000000001",  "status": "FINISHED",  "createdAt": "2026-04-13T18:30:00.000Z",  "updatedAt": "2026-04-13T18:45:00.000Z",  "durationMs": 12357,  "result": "Added README.md with installation instructions and usage examples.",  "git": {    "branches": [      {        "repoUrl": "github.com/your-org/your-repo",        "branch": "cursor/add-readme-a1b2",        "prUrl": "https://github.com/your-org/your-repo/pull/123"      }    ]  }}

実行をストリーミング

GET/v1/agents/{id}/runs/{runId}/stream

1 つの実行に対する Server-Sent Events (SSE) をストリーミングします。ストリームの対象はリクエストされた実行に限定され、過去の実行は再送されません。

イベントの種類

  • status — 実行ステータスの更新。Payload: { runId, status }.
  • assistant — アシスタントのテキスト差分。Payload: { text }.
  • thinking — 思考テキストの差分。Payload: { text }.
  • tool_call — ツール呼び出しステータスの更新。Payload: { callId, name, status, args?, result?, truncated? }.
  • interaction_update — 上記の簡略化されたイベントとあわせて送出される、省略可能なよりリッチなイベントです。Payload は TypeScript SDK が受け取る InteractionUpdate 形式に一致し、text-deltatool-call-started / tool-call-completedstep-started / step-completedturn-ended などのサブタイプがあります。プレーンテキストとツール呼び出しだけが必要な場合は、簡略化されたイベントを処理し、interaction_update は無視してください。完全な SDK 形式のストリームが必要な場合は、interaction_update を処理し、簡略化されたイベントは無視してください。
  • heartbeat — キープアライブイベント。Payload: {}.
  • result — 実行の終端状態。Payload: { runId, status, text?, durationMs?, git? }. text は最終的なアシスタントの返信、durationMs はミリ秒単位の実行時間、gitRun.git を反映します (この実行だけでなく、エージェントが現在 push 済みのブランチ) 。
  • error — ストリームエラー。Payload: { code, message }.
  • done — ストリーム完了。Payload: {}.

ツール呼び出しのペイロード

tool_call イベントでは、ツール固有の入力と出力を安定した共通形式で包んで使用します。

type JsonValue =  | string  | number  | boolean  | null  | JsonValue[]  | { [key: string]: JsonValue };interface ToolCallEventData {  callId: string;  name: string;  status: "running" | "completed";  args?: JsonValue;  result?: JsonValue;  truncated?: {    args?: true;    result?: true;  };}

callId は、更新をまたいで 1 つのツール呼び出しを識別します。nameread_filerun_terminal_cmdmcp などの公開ツール名です。argsresult はツール固有の JSON 値です。args または result が大きすぎてストリームに含められない場合、Cursor はそのフィールドを省略し、対応する truncated フラグを設定します。

ストリームの再開

ほとんどのイベントには id 行が含まれます。これは解析すべきでない不透明な文字列です (現在は 1713033006000-0 のような形式に見えますが、不透明なものとして扱ってください) 。先頭の status イベントには id がなく、再接続のたびに先頭で再送される sticky なフレーミングイベントです。

切断後に再開するには、最後に受信したイベント ID を Last-Event-ID に設定して再接続します。イベント ID はリクエストされた実行に属している必要があり、そうでない場合、リクエストは 400 invalid_last_event_id を返します。再開に成功した場合は、再開された範囲が始まる前に status イベントがもう一度送信されます。

保持期間

ストリームレスポンスには X-Cursor-Stream-Retention-Seconds ヘッダーが含まれます。保持期間を過ぎると、このエンドポイントは 410 stream_expired を返すことがあります。その場合は、ストリームを再試行するのではなく、実行の取得 で終端状態を確認してください。

curl --request GET \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/runs/run-00000000-0000-0000-0000-000000000001/stream \  -u YOUR_API_KEY: \  --header 'Accept: text/event-stream'

ストリームの例:

event: statusdata: {"runId":"run-00000000-0000-0000-0000-000000000001","status":"RUNNING"}id: 1713033000000-0event: assistantdata: {"text":"I'll update the README now."}id: 1713033005000-0event: tool_calldata: {"callId":"call-1","name":"read_file","status":"running","args":{"path":"README.md"}}id: 1713033006000-0event: tool_calldata: {"callId":"call-1","name":"read_file","status":"completed","args":{"path":"README.md"},"result":{"success":{"content":"# Project","totalLines":1,"fileSize":9,"path":"README.md"}}}id: 1713033010000-0event: resultdata: {"runId":"run-00000000-0000-0000-0000-000000000001","status":"FINISHED","text":"Added README.md with installation instructions.","durationMs":12357,"git":{"branches":[{"repoUrl":"github.com/your-org/your-repo","branch":"cursor/add-readme-a1b2"}]}}id: 1713033010000-0event: donedata: {}

実行をキャンセル

POST/v1/agents/{id}/runs/{runId}/cancel

エージェントのアクティブな実行をキャンセルします。キャンセルは終端状態となるため、実行は CANCELLED に遷移し、再開できません。会話を続けるには、同じエージェントで新しい実行を作成してください。

パスパラメータ

id string

エージェントの一意の識別子。

runId string

キャンセルする実行の一意の識別子。
curl --request POST \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/runs/run-00000000-0000-0000-0000-000000000001/cancel \  -u YOUR_API_KEY:

レスポンス:

{  "id": "run-00000000-0000-0000-0000-000000000001"}

エージェントのトークン利用状況を取得

GET/v1/agents/{id}/usage

エージェントのトークン利用状況を run ごとの内訳付きで取得します。レスポンスには、エージェント上のすべての run における利用状況の合計と、各 run ごとの利用状況が含まれます。トークン利用状況は、チームの usage events エンドポイントで報告される tokenUsage と一致します。

Path Parameters

id string

エージェントの一意の識別子 (例: bc-00000000-0000-0000-0000-000000000001) 。

Query Parameters

runId string (optional)

レスポンスの対象を単一の run に限定します (例: run-00000000-0000-0000-0000-000000000001) 。省略すると、エージェント上のすべての run の利用状況を返します。不明な runId を指定すると 404 run_not_found を返します。

Response Fields

totalUsage object

返された run 全体で合計したトークン利用状況です。各 run の usage object と同じフィールドを含みます。

runs array

run ごとの利用状況です。run ごとに 1 つの要素があり (runId が設定されている場合は 1 つのみ) 、各 object には次が含まれます。
  • id string - Run 識別子 (例: run-00000000-0000-0000-0000-000000000001) 。
  • usageUuid string (optional) - その run の内部利用識別子です。まだ利用状況が記録されていない run では省略されます。
  • usage object - この run のトークン利用状況:
    • inputTokens number - 消費された入力トークン数。
    • outputTokens number - 生成された出力トークン数。
    • cacheWriteTokens number - キャッシュに書き込まれたトークン数。
    • cacheReadTokens number - キャッシュから読み取られたトークン数。
    • totalTokens number - 上記 4 つのトークン数の合計。
# エージェントのすべての実行curl --request GET \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/usage \  -u YOUR_API_KEY:# 単一の実行curl --request GET \  --url 'https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/usage?runId=run-00000000-0000-0000-0000-000000000001' \  -u YOUR_API_KEY:

レスポンス:

{  "totalUsage": {    "inputTokens": 12480,    "outputTokens": 3110,    "cacheWriteTokens": 18200,    "cacheReadTokens": 42600,    "totalTokens": 76390  },  "runs": [    {      "id": "run-00000000-0000-0000-0000-000000000002",      "usageUuid": "00000000-0000-0000-0000-000000000002",      "usage": {        "inputTokens": 6320,        "outputTokens": 1450,        "cacheWriteTokens": 7100,        "cacheReadTokens": 21300,        "totalTokens": 36170      }    },    {      "id": "run-00000000-0000-0000-0000-000000000001",      "usageUuid": "00000000-0000-0000-0000-000000000001",      "usage": {        "inputTokens": 6160,        "outputTokens": 1660,        "cacheWriteTokens": 11100,        "cacheReadTokens": 21300,        "totalTokens": 40220      }    }  ]}

アーティファクト

ワークスペースは実行をまたいで保持されるため、アーティファクトはエージェント単位で管理されます。

アーティファクトを一覧表示

GET/v1/agents/{id}/artifacts

エージェントが生成したアーティファクトを一覧表示します。各アーティファクトの path は、ワークスペースの artifacts/ ディレクトリからの相対パスです。

パスパラメータ

id string

エージェントの一意の識別子。
curl --request GET \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/artifacts \  -u YOUR_API_KEY:

レスポンス:

{  "items": [    {      "path": "artifacts/screenshot.png",      "sizeBytes": 12345,      "updatedAt": "2026-04-13T18:45:00.000Z"    }  ]}

アーティファクトをダウンロード

GET/v1/agents/{id}/artifacts/download

特定のアーティファクトに対する、一時的に15分間有効な事前署名付き S3 URL を取得します。

パスパラメータ

id string

エージェントの一意の識別子。

クエリパラメータ

path string

アーティファクトを一覧表示 で返される相対アーティファクトパスです (例: artifacts/screenshot.png) 。artifacts/ 配下である必要があります。
curl --request GET \  --url 'https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/artifacts/download?path=artifacts/screenshot.png' \  -u YOUR_API_KEY:

レスポンス:

{  "url": "https://cloud-agent-artifacts.s3.us-east-1.amazonaws.com/...",  "expiresAt": "2026-04-13T19:00:00.000Z"}

エージェントのライフサイクル

エージェントをアーカイブ

POST/v1/agents/{id}/archive

エージェントをアーカイブします。アーカイブされたエージェントは引き続き参照できますが、アーカイブを解除するまで新しい実行は受け付けられません。元に戻せる「ソフト削除」にはこちらを使用します。

パスパラメータ

id string

エージェントの一意の識別子。
curl --request POST \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/archive \  -u YOUR_API_KEY:

レスポンス:

{  "id": "bc-00000000-0000-0000-0000-000000000001"}

エージェントのアーカイブを解除

POST/v1/agents/{id}/unarchive

エージェントのアーカイブを解除し、再び新しい実行を受け付けられるようにします。

パスパラメータ

id string

エージェントの一意の識別子。
curl --request POST \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/unarchive \  -u YOUR_API_KEY:

レスポンス:

{  "id": "bc-00000000-0000-0000-0000-000000000001"}

エージェントを完全に削除

DELETE/v1/agents/{id}

エージェントを完全に削除します。この操作は元に戻せません。元に戻せる削除が必要な場合は、アーカイブ を使用してください。

パスパラメータ

id string

エージェントの一意の識別子。
curl --request DELETE \  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001 \  -u YOUR_API_KEY:

レスポンス:

{  "id": "bc-00000000-0000-0000-0000-000000000001"}

ワーカー トークン

ユーザー スコープのワーカー トークンを作成

POST/v1/sub-tokens

アクティブなチームメンバーとして実行するワーカー用に、1 時間有効なユーザー スコープのトークンを作成します。

エージェント スコープのチーム サービスアカウントの API キーが必要です。ユーザー スコープのトークンでは、別のユーザー スコープのトークンを発行できません。

リクエストボディ

対象ユーザーを識別するには、次のいずれか 1 つを指定してください。

forUserEmail string (任意)

アクティブなチームメンバーのメールアドレス。大文字と小文字は区別されません。

forUserId integer (任意)

アクティブなチームメンバーの Cursor の数値ユーザー ID。

メールアドレスで指定:

curl --request POST \  --url https://api.cursor.com/v1/sub-tokens \  --header "Authorization: Bearer $CURSOR_SERVICE_ACCOUNT_API_KEY" \  --header "Content-Type: application/json" \  --data '{    "forUserEmail": "alice@company.com"  }'

ユーザー ID で指定:

curl --request POST \  --url https://api.cursor.com/v1/sub-tokens \  --header "Authorization: Bearer $CURSOR_SERVICE_ACCOUNT_API_KEY" \  --header "Content-Type: application/json" \  --data '{    "forUserId": 42  }'

レスポンス:

{  "accessToken": "eyJ...",  "expiresAt": "2026-04-24T19:00:00.000Z",  "userId": 42,  "teamId": 456}

ワーカーとプール

プール向けに、ワーカーの使用率を監視し、オートスケーリングを構築します。永続プールは最後のワーカーが切断された後も登録されたままとなるため、ゼロまでスケールダウンし、保留中のリクエストが発生した際にキャパシティを戻すことができます。

エンドポイントパスには古い private-workers という名前が残っていますが、同じワーカーを指します。

���ールのサービスアカウントの API キーを使用し、Basic auth または Bearer トークン で認証します。その他の API キー種別は受け付けられません。

ワーカーを一覧表示

GET/v0/private-workers

認証済みサービスアカウントのチームに属するプールワーカーを、新しい順に取得します。

クエリパラメータ

status string (任意、デフォルト: all)

ワーカーのステータスで絞り込みます。allin_useidle のいずれかです。

scope string (任意、デフォルト: all)

ワーカーのスコープで絞り込みます。allteam_poolpersonal のいずれかです。

limit integer (任意、デフォルト: 50)

1ページあたりの結果数。範囲: 1~100。

pageToken string (任意)

ページネーションカーソル。前のレスポンスの nextPageToken を渡します。

レスポンスフィールド

workers array

接続済みのワーカー。各エントリには次の情報が含まれます。
  • workerId string — 一意のワーカー識別子。自動生成されたIDはUUIDです。CURSOR_AGENT_WORKER_ID で起動したワーカーは、そのカスタムIDを報告します。
  • isInUse boolean — ワーカーに現在エージェントが割り当てられているかどうか。
  • repoOwner, repoName string — ワーカーがGitリモートを登録している場合のメインリポジトリのメタデータ。任意のリポジトリに対応するワーカーでは空文字列です。
  • repoUrl string (任意) — メインリポジトリのURL。任意のリポジトリに対応するワーカーでは省略されます。
  • workspaceRootPath string — ワーカー上のメインワークスペースのパス。
  • connectedAtMs integer — Unix 時間 (ミリ秒) の接続時刻。
  • userId integer — 所有ユーザーのID。サービスアカウントキーで認証されたワーカーでは 0
  • teamId integer (任意) — チームプールワーカーのチームID。
  • serviceAccountId string (任意) — ワーカーの認証に使用したサービスアカウント。
  • activeBcId string (任意) — 使用中の場合にワーカー上で現在実行中のエージェントのID。
  • name string (任意) — ワーカーの表示名 (--name、デフォルトはマシンのホスト名)。

totalCount integer

すべてのページにおける、フィルターに一致するワーカーの合計数。

nextPageToken string (任意)

pageToken 用のページネーションカーソル。次のページがない場合は省略されます。
curl --request GET \  --url "https://api.cursor.com/v0/private-workers?status=idle&scope=team_pool&limit=50" \  -u "$CURSOR_API_KEY:"

レスポンス:

{  "workers": [    {      "workerId": "a8574fe8-248e-424a-a078-7584a2b93724",      "repoOwner": "acme",      "repoName": "payments-service",      "repoUrl": "https://github.com/acme/payments-service",      "workspaceRootPath": "/home/agent/payments-service",      "connectedAtMs": 1737306880000,      "userId": 0,      "teamId": 456,      "serviceAccountId": "sa_abc123",      "isInUse": false,      "name": "gpu-worker-1"    }  ],  "totalCount": 1}

ワーカーの概要を取得

GET/v0/private-workers/summary

認証済みユーザーとそのチームについて、接続済みおよび使用中のワーカー数を返します。使用率が高いときのスケーリング判断に使用します。

curl --request GET \  --url "https://api.cursor.com/v0/private-workers/summary" \  -u "$CURSOR_API_KEY:"

スケーリング確認の例:

const summary = await response.json();const team = summary.teamSummary;if (team && team.totalConnected > 0) {  const utilization = team.inUse / team.totalConnected;  if (utilization >= 0.9) {    // スケールアップ: 追加の��ーカーをプロビジョニング  }}

ID でワーカーを取得

GET/v0/private-workers/{id}

ID でプールワーカーを 1 つ取得します。

パスパラメータ

id string

ワーカーの一意の識別子です (例: pw_123) 。
curl --request GET \  --url "https://api.cursor.com/v0/private-workers/pw_123" \  -u "$CURSOR_API_KEY:"

プールを一覧表示

GET/v0/private-workers/pools

認証済みサービスアカウントのチームに属する永続プールを一覧表示します。最後のワーカーが切断された後もプールは登録されたままのため、ゼロまでスケールダウンするワーカー群を監視し、キャパシティをプロビジョニングするタイミングを判断できます。

クエリパラメータ

scope string (任意)

プール一覧のスコープでフィルタリングします。allteam_poolpersonal のいずれかです。

includeStale boolean (任意、デフォルト: false)

true の場合、長期間の非アクティブ状態により古いものとしてマークされたプールを含めます。

レスポンスフィールド

pools array

登録済みのプール。各エントリには以下が含まれます。
  • scope string — プールの所有スコープ (user または team) 。
  • ownerId integer — スコープに対応する所有ユーザーまたはチームの ID。
  • poolName string — プール名 (例: default または gpu) 。
  • connectedWorkerCount integer — 現在このプールに接続されているワーカー数。
  • inUseWorkerCount integer — 現在エージェントが割り当てられている接続済みワーカー数。アイドルキャパシティは connectedWorkerCount - inUseWorkerCount です。
  • firstSeenAtMs, lastSeenAtMs integer — Unix 時間 (ミリ秒) での最初と最後の検出時刻。
  • isStale boolean — 長期間の非アクティブ状態によりプールが古いものとしてマークされているかどうか。
  • repoOwner, repoName, repoUrl string (任意) — プールがリポジトリに紐付いている場合のリポジトリメタデータ。任意のリポジトリ対応プールでは省略されます。
  • workerReadyTimeoutSeconds integer — 要求の確保が期限切れになる前に、そのプールのオフラインワーカーが再接続するまで、確保済みのリクエストが待機する秒数。0 は、オフラインワーカーへのフォローアップが直ちにプールから再取得されることを意味します。
curl --request GET \  --url "https://api.cursor.com/v0/private-workers/pools?scope=team_pool&includeStale=false" \  -u "$CURSOR_API_KEY:"

レスポンス:

{  "pools": [    {      "scope": "team",      "ownerId": 456,      "poolName": "gpu",      "repoOwner": "acme",      "repoName": "payments-service",      "repoUrl": "https://github.com/acme/payments-service",      "connectedWorkerCount": 2,      "inUseWorkerCount": 1,      "firstSeenAtMs": 1737000000000,      "lastSeenAtMs": 1737306880000,      "isStale": false,      "workerReadyTimeoutSeconds": 900    },    {      "scope": "team",      "ownerId": 456,      "poolName": "sandbox",      "connectedWorkerCount": 0,      "inUseWorkerCount": 0,      "firstSeenAtMs": 1737100000000,      "lastSeenAtMs": 1737200000000,      "isStale": false,      "workerReadyTimeoutSeconds": 0    }  ]}

sandbox エントリは任意のリポジトリ対応です。リポジトリフィールドは省略され、接続済みワーカーがゼロでもプールは選択可能なままです。

プールを登録

POST/v0/private-workers/pools

ワーカーを起動せずに、永続プールを登録します。たとえば、コントローラーがオンデマンドでキャパシティをプロビジョニングする場合に、ワーカーが接続する前からプールを選択できるようにします。--pool を指定してワーカーを起動すると、プールは自動的に登録されます。このエンドポイントは、プールをあらかじめ作成する場合にのみ必要です。

リクエストボディ

scope string (必須)

プールの所有スコープ。user または team のいずれか。

poolName string (必須)

登録するプール名 (例: gpu) 。

repoOwner, repoName string (任意)

プールがリポジトリに紐付いている場合のリポジトリメタデータ。両方を指定するか、任意のリポジトリ対応プールの場合は両方とも省略してください。

repoUrl string (任意)

表示用のリポジトリ URL。repoOwnerrepoName が必要です。

workerReadyTimeoutSeconds integer (任意、デフォルト: 0)

このプールのオフラインワーカーが再接続するまで、確保済みのリクエストが待機する秒数です。この時間を過ぎると確保が解除され、リクエストはキューに戻ります。マシンをターン間で休止状態にする場合で、再開できるときに設定します。0 の場合、オフラインワーカーへのフォローアップは直ちにプールから再取得されます。0 以上の整数である必要があります。

レスポンスフィールド

registered boolean

プールが登録されたかどうか。
curl --request POST \  --url "https://api.cursor.com/v0/private-workers/pools" \  -u "$CURSOR_API_KEY:" \  --header 'Content-Type: application/json' \  --data '{    "scope": "team",    "poolName": "payments-pool",    "repoOwner": "acme",    "repoName": "payments-service",    "repoUrl": "https://github.com/acme/payments-service"  }'

レスポンス:

{  "registered": true}

プールの登録解除

DELETE/v0/private-workers/pools

永続プールを登録解除 (論理削除) すると、プールピッカーおよびプールを一覧表示に表示されなくなります。現在プールに接続しているワーカーには影響しません。チームプールにはチーム管理者、ユーザープールにはその所有者が必要です。

クエリパラメータ

scope string (必須)

プールの所有スコープ。user または team を指定します。

pool_name string (必須)

登録を解除するプール名。

repo_owner string (任意)

リポジトリスコープのプールレコードを登録解除する場合のリポジトリ所有者。

repo_name string (任意)

リポジトリスコープのプールレコードを登録解除する場合のリポジトリ名。repo_ownerrepo_name は両方とも指定するか、任意のリポジトリ対応プールでは両方とも省略します。
curl --request DELETE \  --url "https://api.cursor.com/v0/private-workers/pools?scope=team&pool_name=sandbox" \  -u "$CURSOR_API_KEY:"

レスポンス:

{  "deregistered": true}

保留中のプールリクエストを一覧表示

GET/v0/private-workers/pending-requests

まだワーカーに割り当てられていないプールリクエストを一覧表示します。ユーザーが利用可能なプールワーカーを待っているときにキャパシティを拡張する場合や、エフェメラルワーカーを開始する前に 保留中のリクエストをクレーム と組み合わせる場合に、このエンドポイントを使用します。

workerReadyTimeoutSeconds が設定されているプールでは、クレーム済みだがオフラインのエントリも一覧に表示されます。これは、再接続ウィンドウが開いている間にクレーム済みワーカーがオフラインになっているリクエストです。これらのエントリには claimedWorkerIdwakeTimeoutMs が含まれるため、コントローラーが マシンを復帰 させることができます。

このエンドポイントにはサービスアカウントの API キーが必要です。キーに紐づくチームのリクエストを返し、マイマシンのリクエストは除外します。キーが特定のリポジトリにスコープされている場合は、repository を指定してください。リポジトリはキーの許可スコープに含まれている必要があります。

レスポンスには streamCursor が含まれます。このスナップショット以降のキューの変更をリアルタイムで追跡するには、これを 保留中のプールリクエストを監視 に渡します。

クエリパラメータ

limit 数値 (任意)

返す保留中リクエストの数。デフォルト: 50、最大: 100。

pageToken string (任意)

前のレスポンスのページネーションクーソル。ページトークンは、発行時に指定した repository および pool フィルターに紐づきます。

repository string (任意)

リポジトリ URL でフィルタリングします。リポジトリスコープのサービスアカウント API キーでは必須です。任意のリポジトリの保留中リクエストでは省略します。

pool string (任意)

プール名でフィルタリングします。リクエストの pool ラベルと完全一致し、大文字と小文字は区別されます。チーム内のすべてのプールのリクエストを一覧表示する場合は省略します。

レスポンスフィールド

requests array

保留中のリクエスト。各エントリには以下が含まれます。
  • id string — 保留中のリクエスト / エージェント ID (クレーム または クレームを解放id として渡します) 。
  • userId integer — リクエストを作成した Cursor の数値ユーザー ID。
  • userEmail string (任意) — 利用可能な場合は、リクエスト元ユーザーのメールアドレス。追加の検索なしで、ユーザーに紐づくキャパシティを選択できます。
  • serviceAccountId string (任意) — 指定されている場合、リクエストに関連付けられたサービスアカウント。
  • repoOwner, repoName, repoUrl string (任意) — リクエストの対象がリポジトリである場合のリポジトリメタデータ。任意のリポジトリを対象とするプールリクエストでは省略されます。
  • labels array{ key, value } のペアで表されるリクエストラベル (設定されている場合は repo=pool= を含みます) 。
  • createdAtMs integer — リクエストの作成時刻 (Unix ミリ秒) 。
  • claimedWorkerId string (任意) — クレーム済みだがオフラインのエントリに含まれます。このリクエストは、現在オフラインのこのワーカーによってクレームされています。エージェントをそのマシンで再開するには、この ID (CURSOR_AGENT_WORKER_ID) を指定してワーカーを開始します。
  • wakeTimeoutMs integer (任意) — クレーム済みでオフラインになっているエントリの再接続ウィンドウの残り時間 (ミリ秒) 。ウィンドウが終了するとクレームは期限切れになり、リクエストは未クレームのエントリとして再通知されます。

nextPageToken string (任意)

ページネーションクーソル。これ以上のページがない場合は省略されます。キューの深さを測定するには、すべてのページを取得してリクエスト数を数えます。

streamCursor string

保留中のプールリクエストを監視 用の不透明な再開位置。1 つの論理的な一覧表示のすべてのページには同じ streamCursor が含まれます。ページネーションの完了後、この値から監視を開始してください。発行した一覧表示から 5 分後に期限切れになります。
curl --request GET \  --url "https://api.cursor.com/v0/private-workers/pending-requests?limit=50&repository=https%3A%2F%2Fgithub.com%2Facme%2Fpayments-service" \  -u "$CURSOR_API_KEY:"

レスポンス:

{  "requests": [    {      "id": "bc-00000000-0000-0000-0000-000000000002",      "userId": 321,      "userEmail": "owner@acme.example",      "serviceAccountId": "sa_abc123",      "repoOwner": "acme",      "repoName": "payments-service",      "repoUrl": "https://github.com/acme/payments-service",      "labels": [        { "key": "repo", "value": "acme/payments-service" },        { "key": "pool", "value": "gpu" },        { "key": "env", "value": "production" }      ],      "createdAtMs": 1737306880000    }  ],  "nextPageToken": "eyJjcmVhdGVkQXRNcyI6MTczNzMwNjg4MDAwMH0=",  "streamCursor": "djQuZXhhbXBsZS1vcGFxdWUtY3Vyc29y"}

元のリポジトリ URL に userinfo が含まれている場合、repoUrl から埋め込み認証情報は除外されます。

保留中のプールリクエストを監視

GET/v0/private-workers/pending-requests/stream

Server-Sent Events (SSE) を介して保留中リクエストのライフサイクルイベントをストリーミングし、コントローラーがポーリングせずにキューの変更に対応できるようにします。

このエンドポイントにはサービスアカウントの API キーが必要です。コントローラーは、まず一覧を取得してから監視します。保留中のプールリクエストを一覧表示を呼び出してキューの状態を構築し、レスポンスの streamCursor を保持してから、その位置から監視を開始します。一覧表示と監視には同じ repository および pool フィルターを使用してください。カーソルは、それを発行したフィルターに紐付けられます。

クエリパラメータ

cursor string (必須)

一覧レスポンスの streamCursor、または処理した最後のイベントの SSE id: です。再接続時、ネイティブの EventSource はその ID を Last-Event-ID ヘッダーとして再送し、これはクエリパラメータより優先されます。

repository string (任意)

保留中のプールリクエストを一覧表示と同じ動作です。リポジトリスコープのサービスアカウント API キーでは必須です。ストリームではページネーションパラメータは使用できません。

pool string (任意)

このプールのイベントのみを監視します。リクエストの pool ラベルに完全一致し、大文字と小文字は区別されます。カーソルを発行した一覧表示で使用したフィルターと一致する必要があります。省略すると、チーム内のすべてのプールを監視します。

イベント

監視ではカーソル以降に保持されている遷移を再生した後、ライブイベントを追跡します。各イベントの SSE id: は、接続が切断された場合に再開するためのカーソルです。

  • created イベント — リクエストがキューに追加されました。これには、取得済みだがオフラインで、再接続ウィンドウの期限切れにより取得が失効したリクエストも含まれます。ペイロード: 保留中のプールリクエストを一覧表示と同じリクエストオブジェクト。
  • claimed イベント — ワーカーがリクエストを取得したか、オフラインだったワーカーが再接続して取得済みのリクエストを再開しました。ペイロード: { id }
  • claimed_offline イベント — リクエストを取得したワーカーがオフラインになった場合のフォローアップが到着しました。ペイロード: claimedWorkerIdwakeTimeoutMs を含む、保留中のプールリクエストを一覧表示と同じリクエストオブジェクト。猶予期間が過ぎる前にマシンを復帰させてください。そうしない場合、取得の有効期限が切れ、新しい created イベントでリクエストが再通知されます。
  • expired イベント — リクエストは取得されずにキューから削除されました。ペイロード: { id }
  • heartbeat イベント — 状態変更のないカーソルチェックポイントです。静かなストリームでは約20秒ごとに送信されます。ペイロード: {}。ハートビートはアイドル状態の監視の再開位置を進めますが、カーソルの有効期間は延長しません。

カーソルの有効期間

監視チェーン内のすべてのカーソルは、それを発行した一覧表示から5分後に期限切れになります。ハートビートと再接続では延長されません。カーソルの期限が切れた場合、または保持されているイベントウィンドウがカーソルをカバーしなくなった場合、エンドポイントは {"code": "cursor_expired"} を含む HTTP 410 Gone を返します。再度一覧表示し、新しい streamCursor から監視してください。これは通常の動作であり、エラー処理ではありません。コントローラー群の一覧表示呼び出しが同期しないよう、410 を受けるまで待つのではなく、ジッターを含む5分タイマーで事前に再一覧表示してください。

配信保証

配信はベストエフォートであり、一覧表示が信頼できる情報源です。イベントは各遷移のコミット後にリトライ付きで公開されますが、まれな障害でイベントが欠落することがあり、欠落したイベントが再配信されることはありません。再一覧表示の間は、イベントを低レイテンシのヒントとして扱ってください。冪等に適用し (created および claimed_offline リクエストはアップサートし、claimed および expired リクエストは id で削除) 、次回の一覧表示で差異を修正します。一度も確認していないリクエストに対する claimed イベントは何も行いません。ローカルの状態にかかわらず、取得処理はサーバー側でアトミックに行われます。

カーソルを永続化しないでください。サービスアカウントは同時に最大4つのストリームを保持できます。コントローラーごとに1つのストリームを使用し、ローカルでファンアウトしてください。

curl --request GET --no-buffer \  --url "https://api.cursor.com/v0/private-workers/pending-requests/stream?cursor=$STREAM_CURSOR" \  --header 'Accept: text/event-stream' \  -u "$CURSOR_API_KEY:"

ストリームの例:

: connected

event: heartbeat
id: djQuY3Vyc29yLWNoZWNrcG9pbnQ
data: {}

event: created
id: djQuY3Vyc29yLWFmdGVyLWNyZWF0ZWQ
data: {"id":"bc-00000000-0000-0000-0000-000000000002","userId":321,"userEmail":"owner@acme.example","repoOwner":"acme","repoName":"payments-service","repoUrl":"https://github.com/acme/payments-service","labels":[{"key":"pool","value":"gpu"}],"createdAtMs":1737306880000}

event: claimed
id: djQuY3Vyc29yLWFmdGVyLWNsYWltZWQ
data: {"id":"bc-00000000-0000-0000-0000-000000000002"}

コントローラーループ:

  1. 保留中のリクエストを一覧取得して完了し、結果でローカルビューを置き換えます。レスポンスの streamCursor を保持します。
  2. ?cursor=<streamCursor> を指定して監視を開始し、イベントをローカルビューに適用します。処理した最新イベントの id: を追跡します。
  3. 切断した場合は、最新イベント ID を ?cursor= に指定して再接続するか、ネイティブの EventSource を使用します。EventSourceLast-Event-ID を自動的に再送します。
  4. HTTP 410 Gone の場合は、ステップ 1 に戻って再度一覧取得します。

保留中のリクエストを確保

POST/v0/private-workers/claim

ワーカーを起動する前に、特定のワーカー用に保留中のプールリクエストを確保します。コントローラーはこれを使用して、レプリカ間で作業をアトミックに割り当てます。保留中のリクエストを取得し、1 件を確保してから、確保した内容と一致する安定したワーカー ID でワーカーを起動します。

有効な確保が存在する間は、2 回目の確保は拒否されます。まず確保を解除してから、新しい workerId を確保します。

このエンドポイントにはサービスアカウントの API キーが必要です。

リクエストボディ

id string (必須)

保留中のリクエスト ID。保留中のプールリクエストを一覧表示id と同じ値です。

workerId string (必須)

リクエスト用に確保するワーカー ID。ブリッジが確保済みの ID を登録できるよう、CURSOR_AGENT_WORKER_ID (または非表示の --worker-id フラグ) で同じ ID を指定してワーカーを起動します。
curl --request POST \  --url "https://api.cursor.com/v0/private-workers/claim" \  -u "$CURSOR_API_KEY:" \  --header 'Content-Type: application/json' \  --data '{    "id": "bc-00000000-0000-0000-0000-000000000002",    "workerId": "pw_123"  }'

レスポンス:

{  "id": "bc-00000000-0000-0000-0000-000000000002",  "workerId": "pw_123"}

確保に成功したら、予約した ID でワーカーを起動します。

export CURSOR_API_KEY="your-service-account-api-key"export CURSOR_AGENT_WORKER_ID="pw_123"agent worker --pool gpu --worker-dir /workspace start

確保を解放

POST/v0/private-workers/claims/{id}/release

エージェントをセルフホストワーカーに紐付ける長期確保を解除します。解除後、Cursor はそのエージェントに対してそのマシンを優先しなくなります。

確保はルーティングのヒントであり、実行中のプロセス状態ではありません。解除時にワーカーの接続状態は確認されません。待機中のフォローアップは、次のスケジューリング時にプールキューへ戻されます。接続中のワーカーは、現在のターンを中断されることなく完了します。解除後はすぐに、別のワーカーが同じエージェントを確保できます。

有効な確保が存在する間に 保留中のリクエストを確保 を再度実行すると拒否されます。先に解除してから、新しい workerId を確保してください。

--idle-release-timeout (環境変数 CURSOR_WORKER_IDLE_RELEASE_TIMEOUT) を指定すると、ワーカー CLI はアイドル状態になると終了します。このエンドポイントはルーティング確保のみを解除します。

このエンドポイントにはサービスアカウントの API キーが必要です。

パスパラメータ

id string

保留中のリクエスト / エージェント ID。保留中のリクエストを確保id と同じ値です。リクエストボディはありません。
curl --request POST \  --url "https://api.cursor.com/v0/private-workers/claims/bc-00000000-0000-0000-0000-000000000002/release" \  -u "$CURSOR_API_KEY:"

レスポンス:

{  "id": "bc-00000000-0000-0000-0000-000000000002",  "workerId": "pw_123"}

HTTP 404 は、有効な確保が存在しないことを示します。すでに解除済み、期限切れ、または他のワーカーに引き継がれています。404 を再試行しないでください。

メタデータエンドポイント

API Key Info

GET/v1/me

認証に使用中の API キーに関する情報を取得します。

レスポンスフィールド

apiKeyName string

API キーの表示名。

createdAt string

API キーが作成された日時 (ISO 8601) 。

userId integer (user-scoped keys)

API キー所有者の数値の Cursor user ID。特定のユーザーに紐付かない service-account / Team API キー の場合は省略されます。

userEmail string (user-scoped keys)

API キー所有者のメールアドレス。

userFirstName, userLastName string (user-scoped keys)

値が設定されている場合、API キー所有者の名と姓。
curl --request GET \  --url https://api.cursor.com/v1/me \  -u YOUR_API_KEY:

レスポンス (user-scoped key) :

{  "apiKeyName": "Production API Key",  "userId": 42,  "createdAt": "2026-04-13T18:30:00.000Z",  "userEmail": "developer@example.com",  "userFirstName": "Alex",  "userLastName": "Rivera"}

レスポンス (service-account key) :

{  "apiKeyName": "Production Service Account",  "createdAt": "2026-04-13T18:30:00.000Z"}

モデル一覧

GET/v1/models

エージェントを作成model.id フィールドに指定できる推奨モデルを返します。あわせて、各モデルで使用できるパラメータとバリアントも返します。モデルのパラメータは、TypeScript SDK ModelSelection と同じ model.params の形式です。

レスポンスフィールド

items の各項目は 1 つのモデルを表します。

id string

エージェント作成時に、この値を model.id として指定します。

displayName string

Cursor UI に表示される、人が読める名前です。

description string (optional)

モデルの簡単な説明です。

aliases array (optional)

同じモデルとして解決される別名 ID です (例: composer-latest) 。

parameters array (optional)

モデルごとのパラメータ定義です。各エントリには id、任意の displayName、および使用可能な { value, displayName? } エントリを含む values 配列があります。これらを使って、作成リクエストの model.params を設定します。

variants array (optional)

モデルで使用可能な具体的な id+params の組み合わせです。各エントリには params 配列 (空の場合あり) 、displayName、任意の description、および任意の isDefault フラグがあります。
curl --request GET \  --url https://api.cursor.com/v1/models \  -u YOUR_API_KEY:

レスポンス:

{  "items": [    {      "id": "composer-2",      "displayName": "Composer 2",      "aliases": ["composer-latest", "composer"],      "parameters": [        {          "id": "fast",          "displayName": "Fast",          "values": [            { "value": "false" },            { "value": "true", "displayName": "Fast" }          ]        }      ],      "variants": [        {          "params": [{ "id": "fast", "value": "true" }],          "displayName": "Composer 2",          "isDefault": true        },        {          "params": [{ "id": "fast", "value": "false" }],          "displayName": "Composer 2"        }      ]    },    {      "id": "claude-4.6-sonnet-thinking",      "displayName": "Claude 4.6 Sonnet (Thinking)",      "variants": [        {          "params": [],          "displayName": "Claude 4.6 Sonnet (Thinking)",          "isDefault": true        }      ]    }  ]}

GitHub リポジトリ一覧

GET/v1/repositories

Cursor の GitHub App インストールを通じて、認証済みユーザーがアクセスできる GitHub リポジトリを一覧表示します。

curl --request GET \  --url https://api.cursor.com/v1/repositories \  -u YOUR_API_KEY:

レスポンス:

{  "items": [    {      "url": "https://github.com/your-org/your-repo"    }  ]}