POST /v1/sandboxes/{sandbox_id}/snapshot
Saves the sandbox's memory and disk as a snapshot you can create new sandboxes from. The sandbox keeps running (it pauses for the copy). New sandboxes restored from a snapshot get a fresh identity, so two of them never share random state. Writing the snapshot resets the sandbox's open connections to the outside (open PTY sessions, streaming execs and log streams, port preview connections, outbound TCP connections); new ones work as soon as the call returns. Snapshots are kept 7 days. An organization keeps at most `sandboxes.snapshots_max` snapshots (beta: 20) per node, counting at most `sandboxes.snapshot_storage_max` (beta: 40 GiB). Each snapshot counts its sandbox's memory plus its disk size: the memory is stored whole, and the disk copy comes to hold every block the sandbox rewrites after the snapshot. Past either limit the snapshot is refused with `422 limit_exceeded` until you delete some. While the node's snapshot store is nearly full, snapshots and forks are refused with `503 capacity_unavailable`.

Authentication

Bearer Token (b3os_sk_ API key or b3os_pat_ token) API Key (cookie: __Host-b3os_session)

Path Parameters

sandbox_id string required path
The sandbox ID (`sbx_…`).
Example: "sbx_01m5t68q1b590rj801nbzsqzkk"

Header Parameters

Idempotency-Key string optional header
A unique value (for example a UUID) that makes this request safe to retry. Scoped to your project for 24 hours: a retry with the same key, method, path and body returns the stored response with `Idempotent-Replayed: true`, and only to the same API key. Reusing the key for a different request returns `409 idempotency_key_conflict`.

Request Body

application/json
name string
metadata object
Up to 16 string key-value pairs you attach to an object for your own use. Keys are 1 to 40 characters of `A-Z a-z 0-9 _ . : -`; values are at most 500 characters. B3OS never interprets them.

Responses

201 The snapshot.
application/json
id string REQUIRED
object string REQUIRED
Enum: snapshot
name string | null
status string REQUIRED
Enum: creating, ready, failed
sandbox_id string REQUIRED
template object REQUIRED
id string REQUIRED
name string REQUIRED
vcpu integer REQUIRED
memory_mib integer REQUIRED
disk_gib integer REQUIRED
size_bytes integer REQUIRED
created_at string (date-time) REQUIRED
expires_at string (date-time) | null REQUIRED
When the snapshot is deleted (7 days in the beta).
timing object
Server-side phase durations in milliseconds with microsecond resolution: the same phases as the `Server-Timing` header, keyed `<phase>_ms`. `total_ms` is always present. Phase names are product-specific and documented per operation. Example values in this reference are illustrative, not measurements.
total_ms number REQUIRED
metadata object REQUIRED
Up to 16 string key-value pairs you attach to an object for your own use. Keys are 1 to 40 characters of `A-Z a-z 0-9 _ . : -`; values are at most 500 characters. B3OS never interprets them.
400 The request failed validation (`invalid_request`, `invalid_url`).
401 Missing, malformed, expired or revoked credentials (`unauthorized`).
403 Authenticated but not allowed (`forbidden`, `egress_denied`).
404 No such sandbox in this project (`sandbox_not_found`).
409 The sandbox is paused or stopped (`sandbox_not_running`).
413 The request body exceeds this operation's limit.
415 The Content-Type is not accepted by this operation.
422 The organization's snapshots on this node reached a limit (`limit_exceeded`).
429 A rate, concurrency or quota limit applies (`rate_limited`, `concurrency_limited`, `quota_exceeded`).
500 Something failed inside B3OS (`internal`). Retry with backoff.
503 The node or the product is not available right now (`node_unavailable`, `product_unavailable`, `capacity_unavailable`).
curl -X POST 'https://beta-api.b3os.org/v1/sandboxes/sbx_01m5t68q1b590rj801nbzsqzkk/snapshot' \  -H 'Authorization: Bearer YOUR_API_TOKEN' \  -H 'Content-Type: application/json' \  -d '{  "name": "deps-installed"}'
const response = await fetch('https://beta-api.b3os.org/v1/sandboxes/sbx_01m5t68q1b590rj801nbzsqzkk/snapshot', {  method: 'POST',  headers: {      "Authorization": "Bearer YOUR_API_TOKEN",      "Content-Type": "application/json"  },  body: JSON.stringify({    "name": "deps-installed"  })});const data = await response.json();console.log(data);
import requestsheaders = {    'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.post('https://beta-api.b3os.org/v1/sandboxes/sbx_01m5t68q1b590rj801nbzsqzkk/snapshot', headers=headers, json={  "name": "deps-installed"})print(response.json())
201 Response
{  "id": "snap_01m5t5mnvax7tp9peav8jajw3y",  "object": "snapshot",  "name": "deps-installed",  "status": "ready",  "sandbox_id": "sbx_01m5t68q1b590rj801nbzsqzkk",  "template": {    "id": "tpl_01m5t59b2ps0djyzdf082s18bz",    "name": "base"  },  "vcpu": 2,  "memory_mib": 2048,  "disk_gib": 4,  "size_bytes": 734003200,  "created_at": "2026-10-25T19:03:00.000Z",  "expires_at": "2026-11-01T19:03:00.000Z",  "timing": {    "pause_ms": 0.5,    "write_ms": 820.4,    "total_ms": 823.1  },  "metadata": {}}
Ask a question... ⌘I