このページは、安定版テンプレート上の sandbox bridge が公開するすべてのルートを記載します。
/v1/sandbox/* と /v1/openapi.* 配下のすべてのルートには Bearer トークンが必要です。
Authorization: Bearer <SANDBOX_API_KEY>SANDBOX_API_KEY が未設定のときは、ローカル開発の便宜のため認証をスキップします。本番へデプロイする前に、必ずシークレットを設定してください。
bridge は自身の API ドキュメントを提供します。
| メソッド | ルート | 説明 |
|---|---|---|
GET |
/v1/openapi.json |
機械可読の OpenAPI 3.1 スキーマです。 |
GET |
/v1/openapi |
対話型の HTML ドキュメントです。 |
両方のルートは、Bearer ヘッダーまたは ?token= クエリパラメーターで認証できます。
ローカルで npm run dev を実行しているときは、ブラウザーで http://localhost:8787/v1/openapi を開き、各エンドポイントを対話的に確認できます。
| メソッド | ルート | 説明 |
|---|---|---|
POST |
/v1/sandbox |
新しいサンドボックスを作成します。{"id": "<sandbox-id>"} を返します。 |
DELETE |
/v1/sandbox/:id |
サンドボックスコンテナを破棄します。204 を返します。 |
GET |
/v1/sandbox/:id/running |
コンテナの稼働状態を確認します。{"running": true|false} を返します。 |
| メソッド | ルート | 説明 |
|---|---|---|
POST |
/v1/sandbox/:id/exec |
コマンドを実行します。レスポンスは SSE ストリームです(後述)。 |
/exec エンドポイントは次の JSON ボディを受け付けます。
{
"argv": ["sh", "-lc", "echo hello"],
"timeout_ms": 10000,
"cwd": "/workspace"
}argv 配列の各要素は、シェルコマンドに結合する前に ANSI-C の $'...' クォートでエスケープされます。安全な文字(A-Za-z0-9@%+=:,./-)だけを含むトークンはそのまま渡します。それ以外のトークンは $'...' で囲み、バックスラッシュ、シングルクォート、改行、キャリッジリターン、タブをエスケープします。これによりシェルインジェクションを防ぎつつ、スペース、引用符、特殊文字を含む引数を保てます。
レスポンスは text/event-stream で、次のイベント種別があります。
| イベント | データ | 説明 |
|---|---|---|
stdout |
Base64 エンコードしたチャンク | コマンドの標準出力です。 |
stderr |
Base64 エンコードしたチャンク | コマンドの標準エラーです。 |
exit |
{"exit_code": N} |
コマンドが完了しました。終端イベントです。 |
error |
{"error": "…", "code": "…"} |
コマンドが失敗しました。終端イベントです。 |
| メソッド | ルート | 説明 |
|---|---|---|
GET |
/v1/sandbox/:id/file/* |
ファイルを読みます。生バイト(application/octet-stream)を返します。 |
PUT |
/v1/sandbox/:id/file/* |
ファイルを書き込みます。リクエストボディは生バイトです。{"ok": true} を返します。上限は 32 MiB です。 |
ファイルパスは URL の /file/ のあとにエンコードします。すべてのパスは /workspace 内に解決される必要があります。パストラバーサル(例: ../../etc/passwd)は拒否されます。
| メソッド | ルート | 説明 |
|---|---|---|
POST |
/v1/sandbox/:id/persist |
/workspace を tar アーカイブにシリアル化します。生の tar バイトを返します。 |
POST |
/v1/sandbox/:id/hydrate |
リクエストボディとして送った tar アーカイブから /workspace を復元します。 |
/persist エンドポイントは、オプションの excludes クエリパラメーターを受け付けます。アーカイブから除外する相対パスをカンマ区切りで指定します。
/hydrate エンドポイントは、最大 32 MiB の生 tar ペイロードを受け付けます。
| メソッド | ルート | 説明 |
|---|---|---|
POST |
/v1/sandbox/:id/mount |
S3 互換バケットをローカルディレクトリとしてマウントします。 |
POST |
/v1/sandbox/:id/unmount |
以前マウントしたバケットをアンマウントします。 |
/mount エンドポイントは JSON ボディを受け付けます。次の 2 つの流れに対応しています。
endpoint を省略し、bucket に Worker の R2 バインディング名を渡します。
{
"bucket": "MY_BUCKET",
"mountPath": "/mnt/data",
"options": {
"readOnly": false,
"prefix": "/subdir"
}
}options.endpoint を省略したとき、bucket は Worker の R2 バインディング名を意味します。
明示的な S3 互換エンドポイントへマウントする場合は、endpoint を含め、必要に応じて credentials も指定します。
{
"bucket": "my-r2-bucket",
"mountPath": "/mnt/data",
"options": {
"endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com",
"readOnly": false,
"prefix": "/subdir",
"credentials": {
"accessKeyId": "...",
"secretAccessKey": "..."
}
}
}endpoint を指定したとき、bucket はリモートのバケット名を意味します。このモードでは認証情報は任意です。省略すると、bridge は Worker のシークレット(R2_ACCESS_KEY_ID / R2_SECRET_ACCESS_KEY または AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY)から自動検出します。
| メソッド | ルート | 説明 |
|---|---|---|
POST |
/v1/sandbox/:id/session |
セッションを作成します。{"id": "<session-id>"} を返します。 |
DELETE |
/v1/sandbox/:id/session/:sid |
セッションを削除します。204 を返します。 |
セッションは、サンドボックス内で作業ディレクトリ、環境変数、コマンド実行状態を分離します。/exec、/file/*、/pty リクエストに Session-Id ヘッダーを付けると、そのセッションにスコープします。
Session-Id ヘッダーがない場合、リクエストはサンドボックスの暗黙的な実行モードを使います。デフォルトではデフォルトセッションです。ただし enableDefaultSession: false を設定した SDK では、これらの暗黙的な操作はセッションなしで実行されます。
| メソッド | ルート | 説明 |
|---|---|---|
GET |
/v1/sandbox/:id/pty |
WebSocket の PTY セッションへアップグレードします。 |
クエリパラメーター:
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
cols |
number | 80 |
ターミナルの幅(桁数)です。 |
rows |
number | 24 |
ターミナルの高さ(行数)です。 |
shell |
string | — | シェルのバイナリです(例: /bin/bash)。 |
session |
string | — | セッションスコープの PTY 用セッション ID です。 |
WebSocket は、ターミナル I/O にバイナリフレーム、制御メッセージに JSON テキストフレームを使います。
| 方向 | フレーム種別 | 内容 |
|---|---|---|
| クライアント → サーバー | Binary | UTF-8 でエンコードしたキー入力です。 |
| サーバー → クライアント | Binary | ANSI エスケープシーケンスを含むターミナル出力です。 |
| クライアント → サーバー | Text (JSON) | 制御メッセージです(例: {"type": "resize", "cols": 120, "rows": 30})。 |
| サーバー → クライアント | Text (JSON) | ステータスメッセージです(ready、exit、error)。 |
| メソッド | ルート | 説明 |
|---|---|---|
GET |
/v1/pool/stats |
現在のプール統計です。 |
POST |
/v1/pool/prime |
ウォームプールのアラームループを開始します。 |
POST |
/v1/pool/shutdown-prewarmed |
アイドル中のウォームコンテナをすべて停止します。 |
ウォームプールはサンドボックスコンテナを事前起動し、新しいセッションをすぐ起動できるようにします。wrangler.jsonc の環境変数で設定します。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"vars": {
"WARM_POOL_TARGET": "3",
"WARM_POOL_REFRESH_INTERVAL": "10000"
}
}[vars]
WARM_POOL_TARGET = "3" # Number of idle containers to keep warm (0 = disabled)
WARM_POOL_REFRESH_INTERVAL = "10000" # Health-check interval in millisecondsデプロイ後、cron トリガー(* * * * *)がプールを自動で事前起動します。WARM_POOL_TARGET を "0"(デフォルト)にするとプールを無効にし、想定外の課金を避けられます。
| メソッド | ルート | 説明 |
|---|---|---|
GET |
/health |
認証不要の稼働確認です。{"ok": true} を返します。 |
- Bridge の概要 — bridge の役割、デプロイ、利用例。
- Sandbox API リファレンス — Sandbox SDK のメソッド一覧。
- GitHub 上の Bridge ソース ↗ — Worker、Dockerfile、OpenAPI スキーマ。