Skip to content
View as Markdown

REST API ​

基础地址就是你运行控制面的地址。下面所有端点都说 JSON,脚本、SDK、curl 都能调。

鉴权 ​

接受两种头,含义不同:

头凭据范围
X-Sandrpod-Token平台 token全部,所有工作区
X-Sandrpod-Tokensk_… 工作区 key单个工作区
X-Sandrpod-Tokene2b_… E2B key单个工作区(同一份凭据的 E2B 拼写)
Cookie: sandrpod_session浏览器会话已登录的工作区

平台 token 是运维凭据:能列出所有沙箱、删掉所有 worker。不要把它放进智能体。

沙箱 ​

方法路径说明
POST/api/v1/sandboxes创建。async:true 返回 202 加 job id
GET/api/v1/sandboxes列表,按凭据限定范围
GET/api/v1/sandboxes/{name}单个沙箱
DELETE/api/v1/sandboxes/{name}删除记录和容器
POST/api/v1/sandboxes/{name}/start 或 /stop恢复 / 暂停
POST/api/v1/sandboxes/execute?sandbox={name}执行代码
GET/api/v1/sandboxes/stream?sandbox={name}流式执行
GET/api/v1/sandboxes/{name}/toolbox/*转发到沙箱内的 toolbox
POST/api/v1/sandboxes/{name}/snapshot提交成镜像

创建请求体:

json
{
  "name": "agent-01",
  "provider_type": "local",
  "region": "local",
  "cpu_cores": 1,
  "memory_mb": 1024,
  "ttl_seconds": 3600,
  "network": { "allowed_domains": ["pypi.org", "github.com"] }
}

带 network 策略、而机队里没有具备出网能力的 worker 时,返回 409,而不是启动一个 没有实际限制的沙箱。

执行 ​

bash
curl -s -X POST "$API/api/v1/sandboxes/execute?sandbox=agent-01" \
  -H "X-Sandrpod-Token: $TOKEN" -H 'Content-Type: application/json' \
  -d '{"language":"bash","code":"echo hi","timeout":20}'
json
{"exit_code":0,"stdout":"hi\n","stderr":"","started_at":"…","ended_at":"…"}

language 取 bash、python、node、sh。timeout 单位是秒。

Worker ​

方法路径说明
GET/api/v1/poders清点:状态、资源、能力、地域
DELETE/api/v1/poders/{id}删除记录(并断开隧道)
POST/api/v1/poders/{id}/heartbeat仅 worker:一个 worker 只能心跳自己那条记录
GET/ws/poder/connectworker 拨入的 WebSocket(不是手工调的)

出网 ​

方法路径说明
GET/api/v1/sandboxes/{name}/egress当前策略,未设置时 null
PUT/api/v1/sandboxes/{name}/egress替换策略(会校验)
DELETE/api/v1/sandboxes/{name}/egress取消设置 —— 和 PUT {} 不是一回事
POST/api/v1/policy/decide单连接裁决,供 -egress-mode=decider 使用

运维 ​

方法路径说明
GET/health存活与版本
GET/healthz更深的检查:数据库、worker、支付、磁盘
GET/metricsPrometheus;需要管理员凭据
GET/api/v1/capabilities这个控制面支持什么(egress_policy 等)

错误码 ​

状态码含义
400请求体格式错误,或名字不合法
401没有凭据,或凭据不认识
403凭据有效但无权(worker 想读机队视图、member 想花钱)
404没有这个沙箱
409冲突:名字被占、沙箱不是 RUNNING、或某个能力没有 worker 具备
429被限流;Retry-After 告诉你要等多久
503拥有该沙箱的 worker 没有连在任何实例上

E2B 兼容面 ​

可以在独立域名上再挂一个 E2B 形状的面,见 E2B 直接替换:路径是 /sandboxes、/sandboxes/{id}、/sandboxes/{id}/pause,以及 <端口>-<id>.<域名> 上的 envd RPC。

Apache 2.0 — your clouds, your machines, your rules.