Skip to content

沙箱 API ​

请求发送到 DEVBOX_API_URL,使用 X-API-Key,只操作当前凭证所属 Namespace 的沙箱。公共鉴权、错误与时间格式见通用约定。

操作方法与路径成功响应
创建POST /sandboxes201,沙箱对象
列表GET /sandboxes200,沙箱数组
详情GET /sandboxes/{sandboxID}200,沙箱对象
连接POST /sandboxes/{sandboxID}/connect200 或 201,沙箱对象及凭证
暂停POST /sandboxes/{sandboxID}/pause204
恢复POST /sandboxes/{sandboxID}/resume201,沙箱对象及凭证
重设存活时间POST /sandboxes/{sandboxID}/timeout204
延长存活时间POST /sandboxes/{sandboxID}/refreshes204
删除DELETE /sandboxes/{sandboxID}204

创建沙箱 ​

POST /sandboxes

请求体为 JSON:

字段类型必填说明
templateIDstring是模板 ID 或别名,如 default
buildIDstring否固定 Build,省略时使用所选模板的最新可用 Build
timeoutinteger否存活秒数,1–86400;省略或传 0 使用服务默认值(通常 300 秒)
envVarsobject否沙箱环境变量,值为字符串
metadataobject否业务标签,值为字符串
autoPauseboolean否到期后暂停而非销毁,默认 false;与 E2B 请求字段一致
autoResumeobject / boolean否推荐 {"enabled":true},也接受 boolean;启用时要求 autoPause=true
autoPauseMemoryboolean否只支持 true 或省略,保存完整内存快照
lifecycle.onTimeoutstring否kill 或 pause,默认 kill
lifecycle.autoResumeboolean否允许访问时自动恢复,默认 false;启用时 onTimeout 必须为 pause

推荐使用 autoPause 与 autoResume。原 lifecycle 请求继续兼容;同时传两套字段时必须一致,否则返回 400。

bash
curl --fail-with-body "$DEVBOX_API_URL/sandboxes" \
  -H "X-API-Key: $DEVBOX_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"templateID":"default","timeout":300,"envVars":{"APP_MODE":"demo"},"metadata":{"project":"example"},"lifecycle":{"onTimeout":"pause","autoResume":true}}'

成功返回 HTTP 201 和沙箱对象。保存 sandboxID;沙箱内请求使用响应中的 domain 和 connectToken。

模板或指定 Build 不可用时返回 404;资源或依赖暂不可用时可返回 503;请求或资源配额耗尽时返回 429。出现 tunnel_quota_exceeded 时,需释放账户下闲置沙箱或隧道。

列出沙箱 ​

GET /sandboxes

Query 参数类型说明
templatestring按模板 ID 或别名精确筛选,如 tpl-devbox-base-test 或 default;省略时不限制模板
statestringrunning、paused,多个状态用逗号分隔;省略时包含两者
metadatastringURL 编码的键值筛选条件,如 project=example&stage=test;所有条件须同时满足
startedAfterstring按本次运行的 startedAt 筛选,包含边界;使用带时区的 RFC3339 时间,如 2026-11-03T00:00:00Z
orderstring按 startedAt 排序:asc 或 desc,默认 desc;时间相同时按 sandboxID 升序
limitinteger每页 1–1000 条;0 或省略时返回全部匹配项,建议显式指定
nextTokenstring上一页 X-Next-Token 响应头,按原值传回
bash
curl --fail-with-body -i --get "$DEVBOX_API_URL/sandboxes" \
  -H "X-API-Key: $DEVBOX_API_KEY" \
  --data-urlencode 'template=default' \
  --data-urlencode 'state=running,paused' \
  --data-urlencode 'metadata=project=example' \
  --data-urlencode 'limit=20'

返回 HTTP 200,JSON 为沙箱对象数组,默认按本次运行的 startedAt 倒序排列;空列表为 []。恢复会更新本次运行的 startedAt,时间筛选不是按首次创建时间。

响应头说明
X-Next-Token下一页游标;为空表示没有下一页
X-Total-Running当前 Namespace 的运行数,独立于本次筛选条件和分页,不是返回条数

获取下一页时保持筛选条件和排序不变,将游标放入 nextToken。列表不是固定快照;沙箱同时创建或删除时,分页结果可能变化。非法时间或排序返回 400。

模板、状态和 metadata 条件同时生效,筛选完成后再分页。没有匹配项时返回 []。

查询沙箱 ​

GET /sandboxes/{sandboxID}

sandboxID 为路径参数,必填。后续示例假设已将它保存到 SANDBOX_ID。

bash
curl --fail-with-body "$DEVBOX_API_URL/sandboxes/$SANDBOX_ID" \
  -H "X-API-Key: $DEVBOX_API_KEY"

返回 HTTP 200 和沙箱对象。已删除、已销毁或无权访问的 ID 返回 404。查询不会延长存活时间,也不会恢复暂停沙箱。

连接沙箱 ​

POST /sandboxes/{sandboxID}/connect

请求体可省略,或传入 {"timeout":300}。timeout 为可选整数,单位秒,范围 1–86400。

可选 resume 为 boolean,默认 true。传 {"resume":false} 只为运行中的沙箱准备凭证;沙箱已暂停时返回 409 sandbox_paused,不会恢复。SDK 自动换凭证在未允许自动恢复时使用此选项。主动调用 connect() 或 resume() 仍可恢复 autoResume=false 的沙箱。

timeout=0 等同于省略。连接并恢复暂停沙箱时可传 autoPause;设为 false 会同时关闭自动唤醒。仅连接运行中的沙箱时不会修改暂停策略。

bash
curl --fail-with-body "$DEVBOX_API_URL/sandboxes/$SANDBOX_ID/connect" \
  -H "X-API-Key: $DEVBOX_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"timeout":300}'
当前状态行为成功响应
running返回访问凭证;指定 timeout 时保证至少剩余相应时间,不缩短期限;省略时不主动延长200
paused恢复同一沙箱并返回访问凭证;按 timeout 设置新的运行期限,省略时使用服务默认时长201

运行中返回 HTTP 200,执行恢复后返回 HTTP 201,响应均为沙箱对象。该接口准备访问入口,实际数据连接由调用者向 domain 发起。状态暂不允许操作时返回 409。

暂停沙箱 ​

POST /sandboxes/{sandboxID}/pause

无请求体。请求等待快照保存与暂停完成后返回 HTTP 204,无响应体;已暂停时也返回 204。

也可传 {"memory":true}。暂停、恢复和连接均接受 memory:true 或省略;memory:false 返回 400 memory_snapshot_required,不会静默改成完整内存恢复。

bash
curl --fail-with-body -X POST "$DEVBOX_API_URL/sandboxes/$SANDBOX_ID/pause" \
  -H "X-API-Key: $DEVBOX_API_KEY"

保存内存与文件状态;HTTP、PTY 和监听连接需要客户端重新建立。Manager 不自动过期清理暂停记录,暂停期间不消耗本次运行的 timeout;恢复依赖原节点、快照和隧道可用。完成前查询仍可能显示 running。其他状态不允许暂停时返回 409。

恢复沙箱 ​

POST /sandboxes/{sandboxID}/resume

请求体可省略,或传入 {"timeout":300}。timeout 的单位、范围与创建相同;省略时使用服务默认运行时长。

bash
curl --fail-with-body "$DEVBOX_API_URL/sandboxes/$SANDBOX_ID/resume" \
  -H "X-API-Key: $DEVBOX_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"timeout":300}'

成功返回 HTTP 201 和沙箱对象,使用其中最新的访问凭证。恢复后的运行期限重新计算,不承接暂停前剩余秒数;快照中的文件及未结束进程继续保留。当前恢复依赖原节点可用。

运行中的沙箱调用 resume 返回 409;希望兼容运行和暂停两种状态时使用 connect。

重设存活时间 ​

POST /sandboxes/{sandboxID}/timeout

请求体必须包含整数 timeout,单位秒,范围 1–86400。从现在起重设剩余存活时间,可以延长或缩短,仅用于运行中的沙箱。

bash
curl --fail-with-body "$DEVBOX_API_URL/sandboxes/$SANDBOX_ID/timeout" \
  -H "X-API-Key: $DEVBOX_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"timeout":7200}'

成功返回 HTTP 204,无响应体;状态不允许修改时返回 409。需要确认新期限时调用查询沙箱。

延长存活时间 ​

POST /sandboxes/{sandboxID}/refreshes

请求体必须包含整数 duration,单位秒,范围 1–86400。保证至少剩余指定时间,不累加,也不缩短现有期限,仅用于运行中的沙箱。

bash
curl --fail-with-body "$DEVBOX_API_URL/sandboxes/$SANDBOX_ID/refreshes" \
  -H "X-API-Key: $DEVBOX_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"duration":300}'

成功返回 HTTP 204,无响应体。例如已经剩余 600 秒,refresh 300 不改变期限;set timeout 300 则会缩短为剩余 300 秒。

删除沙箱 ​

DELETE /sandboxes/{sandboxID}

bash
curl --fail-with-body -X DELETE "$DEVBOX_API_URL/sandboxes/$SANDBOX_ID" \
  -H "X-API-Key: $DEVBOX_API_KEY"

成功返回 HTTP 204,无响应体,释放运行实例、暂停记录与隧道;之后不能再恢复。已经终止但仍保有记录时也可返回 204,资源不存在时返回 404。客户端清理流程可将这两者都视为已释放。

沙箱对象 ​

json
{
  "sandboxID": "<sandbox-id>",
  "templateID": "<template-id>",
  "state": "running",
  "startedAt": "2026-10-21T08:00:00Z",
  "endAt": "2026-10-21T08:05:00Z",
  "cpuCount": 2,
  "memoryMB": 1024,
  "diskSizeMB": 2040,
  "metadata": {"project": "example"},
  "lifecycle": {"onTimeout": "pause", "autoResume": true},
  "domain": "https://<沙箱访问域名>",
  "tunnelId": "<tunnel-id>",
  "connectToken": "<connect-token>",
  "tokenExpiration": 1792656000
}
字段类型说明
sandboxID / templateIDstring沙箱和来源模板 ID
statestringrunning 或 paused;销毁后通过 404 表示不可访问
startedAtstring本次运行开始时间,恢复后更新
endAtstring运行状态为存活截止时间;暂停状态保留上次运行截止时间,仅用于兼容客户端,不表示暂停记录的删除期限
cpuCountintegerCPU 核数
memoryMB / diskSizeMBinteger内存与磁盘规格,单位 MiB
metadataobject业务标签,可省略
lifecycleobjectonTimeout 与 autoResume 配置
domainstring完整沙箱 HTTPS 地址
tunnelIdstring隧道标识;正常访问使用 domain 即可
connectTokenstring沙箱访问凭证,用于 relay_token Cookie
envdAccessTokenstring与 connectToken 相同的凭证;DevBox SDK 同时使用 X-Access-Token 头和兼容 Cookie
envdUrlstring数据面完整 HTTPS 地址;与原接口的 domain 相同
envdVersionstring当前 EnvD 协议版本
clientIDstringE2B 兼容字段,当前为空字符串,不作为身份或权限依据
tokenExpirationinteger访问凭证的 Unix 到期秒数

暂停对象不包含 domain、tunnelId、connectToken、tokenExpiration。读取状态不会触发恢复;需要访问入口时调用 connect。

访问应用端口 ​

创建沙箱时设置 network.allowPublicTraffic=false,应用端口访问需要连接凭证。向应用端口的 HTTPS 地址发送请求时,传入 X-Access-Token: <envdAccessToken>;未带凭证返回 401。DevBox SDK 的写法见创建参数。

使用 E2B 客户端 ​

兼容 POST /v2/sandboxes、GET /v2/sandboxes、POST /v2/sandboxes/{sandboxID}/connect,复用上述业务逻辑、鉴权和配额。E2B 接口返回的 sandboxID 使用固定 tunnelId 作为公开别名;单沙箱操作同时接受该别名与原 UUID,仍按当前凭证所属 Namespace 隔离。

E2B 客户端使用响应中的基础域名 domain 拼接端口地址。直接访问 EnvD 时使用完整的 envdUrl。列表可按 metadata 筛选,包括中文和特殊字符。

Python 客户端可通过 get_host(8080) 获取应用端口地址。执行命令时省略 user 会使用沙箱默认用户。

仅支持完整内存快照。其他非 null 网络字段(例如 dnsServers、httpsPorts)或 allow_internet_access:false 返回 400 network_policy_unsupported。创建时非 null 的 cpuCount、volumeMounts、iam、mcp 或非空 Idempotency-Key 返回 400 unsupported_create_option;CPU 规格由模板决定,不支持创建幂等。

恢复请求也接受 autoPause;省略时保留原生命周期策略。DevBox 的 timeout=0 和 limit=0 是扩展约定;不支持 E2B 的冷恢复、fork、历史指标、沙箱日志或动态网络更新接口。