# Sandbox API (/en/docs/api/native/sandbox)



Sandbox runs isolated environments for commands, files and HTTP services through /sandbox/v1, with an SDK-compatible face at /e2b. Concepts and behavior follow E2B (templates, sandboxes, envd files and commands, timeouts and pause/resume), so E2B experience applies. Differences: templateID resolves to your ready Environment or a public Base and must be supplied explicitly; light sandboxes are own-face only, preserve disk rather than memory on pause and provide a limited shell, line terminals and no metrics; port URLs use the returned sandboxID and domain, not an E2B hostname; network.httpsPorts is rejected; persistent sandboxes can resume on traffic even when autoResume is false. Files and command execution use the envd data plane; the sandbox management methods do not execute commands or write files. Start with `praxis.sandbox.templates.list` to choose an available template.

## Base URL [#base-url]

<ApiBaseDomain prefix="/sandbox/v1" />

## Get started [#get-started]

<QuickstartTabs snippets="{&#x22;curl&#x22;:&#x22;curl https://api-origin.invalid/sandbox/v1/sandboxes \\\n  -H \&#x22;X-API-Key: $PRAXIS_API_KEY\&#x22; \\\n  -H \&#x22;Content-Type: application/json\&#x22; \\\n  -d '{\&#x22;templateID\&#x22;:\&#x22;node22\&#x22;,\&#x22;timeout\&#x22;:300}'&#x22;,&#x22;python&#x22;:&#x22;import os\n\nimport requests\n\napi_key = os.environ[\&#x22;PRAXIS_API_KEY\&#x22;]\n\n# Call /sandbox/v1 directly over HTTP.\nresp = requests.post(\n    \&#x22;https://api-origin.invalid/sandbox/v1/sandboxes\&#x22;,\n    headers={\&#x22;X-API-Key\&#x22;: api_key},\n    json={\&#x22;templateID\&#x22;: \&#x22;node22\&#x22;, \&#x22;timeout\&#x22;: 300},\n)\nprint(resp.status_code, resp.text)&#x22;,&#x22;typescript&#x22;:&#x22;\n\nconst apiKey = process.env.PRAXIS_API_KEY;\n\n// Call /sandbox/v1 directly over HTTP.\nconst resp = await fetch(`https://api-origin.invalid/sandbox/v1/sandboxes`, {\n  method: \&#x22;POST\&#x22;,\n  headers: { \&#x22;X-API-Key\&#x22;: apiKey, \&#x22;Content-Type\&#x22;: \&#x22;application/json\&#x22; },\n  body: JSON.stringify({ templateID: \&#x22;node22\&#x22;, timeout: 300 }),\n});\nconsole.log(resp.status, await resp.text());&#x22;}" />

## HTTP and SDK access [#http-and-sdk-access]

Call `/sandbox/v1` directly over HTTP with the `X-API-Key` header. Use the [E2B-compatible API](/docs/api/compatible/e2b) with the official E2B SDK. Changing its API URL alone cannot make it call these endpoints.

HTTP base URL: <ApiOriginInline text="https://api-origin.invalid/sandbox/v1" />.

## Endpoints [#endpoints]

| Method | Path                                                                                                          | Description                                              | Support     |
| ------ | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------- |
| POST   | [`/v1/sandboxes`](/docs/api/native/sandbox/createSandbox)                                                     | Create a sandbox                                         | ● Supported |
| POST   | [`/v1/sandboxes/{sandboxID}/upgrade`](/docs/api/native/sandbox/upgradeSandbox)                                | Upgrade to a full sandbox                                | ● Supported |
| GET    | [`/v1/sandboxes`](/docs/api/native/sandbox/listSandboxes)                                                     | List running sandboxes                                   | ● Supported |
| GET    | [`/v1/sandboxes/{sandboxID}`](/docs/api/native/sandbox/getSandbox)                                            | Get a sandbox                                            | ● Supported |
| PATCH  | [`/v1/sandboxes/{sandboxID}`](/docs/api/native/sandbox/renameSandbox)                                         | Rename a sandbox                                         | ● Supported |
| GET    | [`/v1/sandboxes/{sandboxID}/metrics`](/docs/api/native/sandbox/getSandboxMetrics)                             | Get sandbox metrics                                      | ● Supported |
| POST   | [`/v1/sandboxes/{sandboxID}/timeout`](/docs/api/native/sandbox/setSandboxTimeout)                             | Set sandbox timeout                                      | ● Supported |
| POST   | [`/v1/sandboxes/{sandboxID}/pause`](/docs/api/native/sandbox/pauseSandbox)                                    | Pause a sandbox                                          | ● Supported |
| POST   | [`/v1/sandboxes/{sandboxID}/connect`](/docs/api/native/sandbox/connectSandbox)                                | Connect to a sandbox                                     | ● Supported |
| DELETE | [`/v1/sandboxes/{sandboxID}`](/docs/api/native/sandbox/killSandbox)                                           | Kill a sandbox                                           | ● Supported |
| GET    | [`/v1/templates`](/docs/api/native/sandbox/listTemplates)                                                     | List templates                                           | ● Supported |
| POST   | [`/v1/volumes`](/docs/api/native/sandbox/createVolume)                                                        | Create team volume                                       | ● Supported |
| GET    | [`/v1/volumes`](/docs/api/native/sandbox/listVolumes)                                                         | List team volumes                                        | ● Supported |
| GET    | [`/v1/volumes/{volumeID}`](/docs/api/native/sandbox/getVolume)                                                | Team volume                                              | ● Supported |
| DELETE | [`/v1/volumes/{volumeID}`](/docs/api/native/sandbox/deleteVolume)                                             | Delete team volume                                       | ● Supported |
| POST   | [`/v1/sandboxes/{sandboxID}/fork`](/docs/api/native/sandbox/forkSandbox)                                      | Fork a sandbox                                           | ● Supported |
| POST   | [`/v1/sandboxes/{sandboxID}/snapshots`](/docs/api/native/sandbox/createSnapshot)                              | Create a snapshot                                        | ● Supported |
| GET    | [`/v1/snapshots`](/docs/api/native/sandbox/listSnapshots)                                                     | List snapshots                                           | ● Supported |
| DELETE | [`/v1/snapshots/{snapshotID}`](/docs/api/native/sandbox/deleteSnapshot)                                       | Delete a snapshot                                        | ● Supported |
| PUT    | [`/v1/sandboxes/{sandboxID}/network`](/docs/api/native/sandbox/updateSandboxNetwork)                          | Update sandbox network                                   | ● Supported |
| GET    | [`/v1/sandboxes/{sandboxID}/logs`](/docs/api/native/sandbox/getSandboxLogs)                                   | Get sandbox logs                                         | ● Supported |
| POST   | [`/v1/sandboxes/{sandboxID}/extend`](/docs/api/native/sandbox/extendSandbox)                                  | Extend a running sandbox without shortening its deadline | ● Supported |
| GET    | [`/v1/sandboxes/{sandboxID}/processes`](/docs/api/native/sandbox/listObservedProcesses)                       | List live processes and retained observations            | ● Supported |
| GET    | [`/v1/sandboxes/{sandboxID}/processes/{processID}/output`](/docs/api/native/sandbox/getObservedProcessOutput) | Read bounded observed process output                     | ● Supported |

## Differences from E2B [#differences-from-e2b]

* Snapshots use platform IDs beginning with snap\_, accepted as templateID when creating a sandbox. Retired vendor handles are rejected. Resume a paused sandbox by connecting to it.
* Only endpoints declared on this page are offered. Unadopted endpoints such as webhooks return 404.
* <a href="/docs/api/native/sandbox/createSandbox">Create a sandbox</a>：The platform does not provide E2B's default base template yet: Sandbox.create() without a template returns 404, so name a template explicitly (see List templates for what is available).

For authoritative parameter definitions, see the [official E2B documentation](https://docs.e2b.dev/api-reference).

Errors follow the E2B format, see [errors](/docs/api/errors); quotas and response headers are covered in [rate limits](/docs/api/rate-limits).
