Create sandbox
Create a sandbox from the template
curl --request POST \
--url https://api.e2b.app/sandboxes \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"templateID": "<string>",
"timeout": 15,
"autoPause": false,
"secure": true,
"allow_internet_access": true,
"network": {
"allowPublicTraffic": true,
"allowOut": [
"<string>"
],
"denyOut": [
"<string>"
],
"maskRequestHost": "<string>"
},
"metadata": {},
"envVars": {},
"mcp": {},
"volumeMounts": [
{
"name": "<string>",
"path": "<string>"
}
]
}
'import requests
url = "https://api.e2b.app/sandboxes"
payload = {
"templateID": "<string>",
"timeout": 15,
"autoPause": False,
"secure": True,
"allow_internet_access": True,
"network": {
"allowPublicTraffic": True,
"allowOut": ["<string>"],
"denyOut": ["<string>"],
"maskRequestHost": "<string>"
},
"metadata": {},
"envVars": {},
"mcp": {},
"volumeMounts": [
{
"name": "<string>",
"path": "<string>"
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
templateID: '<string>',
timeout: 15,
autoPause: false,
secure: true,
allow_internet_access: true,
network: {
allowPublicTraffic: true,
allowOut: ['<string>'],
denyOut: ['<string>'],
maskRequestHost: '<string>'
},
metadata: {},
envVars: {},
mcp: {},
volumeMounts: [{name: '<string>', path: '<string>'}]
})
};
fetch('https://api.e2b.app/sandboxes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.e2b.app/sandboxes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'templateID' => '<string>',
'timeout' => 15,
'autoPause' => false,
'secure' => true,
'allow_internet_access' => true,
'network' => [
'allowPublicTraffic' => true,
'allowOut' => [
'<string>'
],
'denyOut' => [
'<string>'
],
'maskRequestHost' => '<string>'
],
'metadata' => [
],
'envVars' => [
],
'mcp' => [
],
'volumeMounts' => [
[
'name' => '<string>',
'path' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.e2b.app/sandboxes"
payload := strings.NewReader("{\n \"templateID\": \"<string>\",\n \"timeout\": 15,\n \"autoPause\": false,\n \"secure\": true,\n \"allow_internet_access\": true,\n \"network\": {\n \"allowPublicTraffic\": true,\n \"allowOut\": [\n \"<string>\"\n ],\n \"denyOut\": [\n \"<string>\"\n ],\n \"maskRequestHost\": \"<string>\"\n },\n \"metadata\": {},\n \"envVars\": {},\n \"mcp\": {},\n \"volumeMounts\": [\n {\n \"name\": \"<string>\",\n \"path\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.e2b.app/sandboxes")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"templateID\": \"<string>\",\n \"timeout\": 15,\n \"autoPause\": false,\n \"secure\": true,\n \"allow_internet_access\": true,\n \"network\": {\n \"allowPublicTraffic\": true,\n \"allowOut\": [\n \"<string>\"\n ],\n \"denyOut\": [\n \"<string>\"\n ],\n \"maskRequestHost\": \"<string>\"\n },\n \"metadata\": {},\n \"envVars\": {},\n \"mcp\": {},\n \"volumeMounts\": [\n {\n \"name\": \"<string>\",\n \"path\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.e2b.app/sandboxes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"templateID\": \"<string>\",\n \"timeout\": 15,\n \"autoPause\": false,\n \"secure\": true,\n \"allow_internet_access\": true,\n \"network\": {\n \"allowPublicTraffic\": true,\n \"allowOut\": [\n \"<string>\"\n ],\n \"denyOut\": [\n \"<string>\"\n ],\n \"maskRequestHost\": \"<string>\"\n },\n \"metadata\": {},\n \"envVars\": {},\n \"mcp\": {},\n \"volumeMounts\": [\n {\n \"name\": \"<string>\",\n \"path\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"templateID": "<string>",
"sandboxID": "<string>",
"clientID": "<string>",
"envdVersion": "<string>",
"alias": "<string>",
"envdAccessToken": "<string>",
"trafficAccessToken": "<string>",
"domain": "<string>"
}{
"code": 123,
"message": "<string>"
}{
"code": 123,
"message": "<string>"
}{
"code": 123,
"message": "<string>"
}Authorizations
Body
Identifier of the required template
Time to live for the sandbox in seconds.
x >= 0Automatically pauses the sandbox after the timeout
Auto-resume configuration for paused sandboxes.
Show child attributes
Show child attributes
Secure all system communication with sandbox
Allow sandbox to access the internet. When set to false, it behaves the same as specifying denyOut to 0.0.0.0/0 in the network config.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
MCP configuration for the sandbox
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Response
The sandbox was created successfully
Identifier of the template from which is the sandbox created
Identifier of the sandbox
Identifier of the client
Version of the envd running in the sandbox
Alias of the template
Access token for authenticating envd requests to this sandbox. Only returned when the sandbox is created with secure: true. Null for non-secure sandboxes (envd endpoints work without auth).
Token required for accessing sandbox via proxy.
Deprecated: always null. Construct sandbox URLs as https://{port}-{sandboxID}.e2b.app.
Was this page helpful?
curl --request POST \
--url https://api.e2b.app/sandboxes \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"templateID": "<string>",
"timeout": 15,
"autoPause": false,
"secure": true,
"allow_internet_access": true,
"network": {
"allowPublicTraffic": true,
"allowOut": [
"<string>"
],
"denyOut": [
"<string>"
],
"maskRequestHost": "<string>"
},
"metadata": {},
"envVars": {},
"mcp": {},
"volumeMounts": [
{
"name": "<string>",
"path": "<string>"
}
]
}
'import requests
url = "https://api.e2b.app/sandboxes"
payload = {
"templateID": "<string>",
"timeout": 15,
"autoPause": False,
"secure": True,
"allow_internet_access": True,
"network": {
"allowPublicTraffic": True,
"allowOut": ["<string>"],
"denyOut": ["<string>"],
"maskRequestHost": "<string>"
},
"metadata": {},
"envVars": {},
"mcp": {},
"volumeMounts": [
{
"name": "<string>",
"path": "<string>"
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
templateID: '<string>',
timeout: 15,
autoPause: false,
secure: true,
allow_internet_access: true,
network: {
allowPublicTraffic: true,
allowOut: ['<string>'],
denyOut: ['<string>'],
maskRequestHost: '<string>'
},
metadata: {},
envVars: {},
mcp: {},
volumeMounts: [{name: '<string>', path: '<string>'}]
})
};
fetch('https://api.e2b.app/sandboxes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.e2b.app/sandboxes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'templateID' => '<string>',
'timeout' => 15,
'autoPause' => false,
'secure' => true,
'allow_internet_access' => true,
'network' => [
'allowPublicTraffic' => true,
'allowOut' => [
'<string>'
],
'denyOut' => [
'<string>'
],
'maskRequestHost' => '<string>'
],
'metadata' => [
],
'envVars' => [
],
'mcp' => [
],
'volumeMounts' => [
[
'name' => '<string>',
'path' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.e2b.app/sandboxes"
payload := strings.NewReader("{\n \"templateID\": \"<string>\",\n \"timeout\": 15,\n \"autoPause\": false,\n \"secure\": true,\n \"allow_internet_access\": true,\n \"network\": {\n \"allowPublicTraffic\": true,\n \"allowOut\": [\n \"<string>\"\n ],\n \"denyOut\": [\n \"<string>\"\n ],\n \"maskRequestHost\": \"<string>\"\n },\n \"metadata\": {},\n \"envVars\": {},\n \"mcp\": {},\n \"volumeMounts\": [\n {\n \"name\": \"<string>\",\n \"path\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.e2b.app/sandboxes")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"templateID\": \"<string>\",\n \"timeout\": 15,\n \"autoPause\": false,\n \"secure\": true,\n \"allow_internet_access\": true,\n \"network\": {\n \"allowPublicTraffic\": true,\n \"allowOut\": [\n \"<string>\"\n ],\n \"denyOut\": [\n \"<string>\"\n ],\n \"maskRequestHost\": \"<string>\"\n },\n \"metadata\": {},\n \"envVars\": {},\n \"mcp\": {},\n \"volumeMounts\": [\n {\n \"name\": \"<string>\",\n \"path\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.e2b.app/sandboxes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"templateID\": \"<string>\",\n \"timeout\": 15,\n \"autoPause\": false,\n \"secure\": true,\n \"allow_internet_access\": true,\n \"network\": {\n \"allowPublicTraffic\": true,\n \"allowOut\": [\n \"<string>\"\n ],\n \"denyOut\": [\n \"<string>\"\n ],\n \"maskRequestHost\": \"<string>\"\n },\n \"metadata\": {},\n \"envVars\": {},\n \"mcp\": {},\n \"volumeMounts\": [\n {\n \"name\": \"<string>\",\n \"path\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"templateID": "<string>",
"sandboxID": "<string>",
"clientID": "<string>",
"envdVersion": "<string>",
"alias": "<string>",
"envdAccessToken": "<string>",
"trafficAccessToken": "<string>",
"domain": "<string>"
}{
"code": 123,
"message": "<string>"
}{
"code": 123,
"message": "<string>"
}{
"code": 123,
"message": "<string>"
}