curl --request POST \
--url https://api.e2b.app/v3/templates \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"tags": [
"<string>"
],
"alias": "<string>",
"teamID": "<string>",
"cpuCount": 2,
"maxCpuCount": 2,
"memoryMB": 129,
"minFreeDiskMb": 1
}
'import requests
url = "https://api.e2b.app/v3/templates"
payload = {
"name": "<string>",
"tags": ["<string>"],
"alias": "<string>",
"teamID": "<string>",
"cpuCount": 2,
"maxCpuCount": 2,
"memoryMB": 129,
"minFreeDiskMb": 1
}
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({
name: '<string>',
tags: ['<string>'],
alias: '<string>',
teamID: '<string>',
cpuCount: 2,
maxCpuCount: 2,
memoryMB: 129,
minFreeDiskMb: 1
})
};
fetch('https://api.e2b.app/v3/templates', 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/v3/templates",
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([
'name' => '<string>',
'tags' => [
'<string>'
],
'alias' => '<string>',
'teamID' => '<string>',
'cpuCount' => 2,
'maxCpuCount' => 2,
'memoryMB' => 129,
'minFreeDiskMb' => 1
]),
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/v3/templates"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"alias\": \"<string>\",\n \"teamID\": \"<string>\",\n \"cpuCount\": 2,\n \"maxCpuCount\": 2,\n \"memoryMB\": 129,\n \"minFreeDiskMb\": 1\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/v3/templates")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"alias\": \"<string>\",\n \"teamID\": \"<string>\",\n \"cpuCount\": 2,\n \"maxCpuCount\": 2,\n \"memoryMB\": 129,\n \"minFreeDiskMb\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.e2b.app/v3/templates")
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 \"name\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"alias\": \"<string>\",\n \"teamID\": \"<string>\",\n \"cpuCount\": 2,\n \"maxCpuCount\": 2,\n \"memoryMB\": 129,\n \"minFreeDiskMb\": 1\n}"
response = http.request(request)
puts response.read_bodyCreate template (v3)
Create a new template.
curl --request POST \
--url https://api.e2b.app/v3/templates \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"tags": [
"<string>"
],
"alias": "<string>",
"teamID": "<string>",
"cpuCount": 2,
"maxCpuCount": 2,
"memoryMB": 129,
"minFreeDiskMb": 1
}
'import requests
url = "https://api.e2b.app/v3/templates"
payload = {
"name": "<string>",
"tags": ["<string>"],
"alias": "<string>",
"teamID": "<string>",
"cpuCount": 2,
"maxCpuCount": 2,
"memoryMB": 129,
"minFreeDiskMb": 1
}
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({
name: '<string>',
tags: ['<string>'],
alias: '<string>',
teamID: '<string>',
cpuCount: 2,
maxCpuCount: 2,
memoryMB: 129,
minFreeDiskMb: 1
})
};
fetch('https://api.e2b.app/v3/templates', 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/v3/templates",
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([
'name' => '<string>',
'tags' => [
'<string>'
],
'alias' => '<string>',
'teamID' => '<string>',
'cpuCount' => 2,
'maxCpuCount' => 2,
'memoryMB' => 129,
'minFreeDiskMb' => 1
]),
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/v3/templates"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"alias\": \"<string>\",\n \"teamID\": \"<string>\",\n \"cpuCount\": 2,\n \"maxCpuCount\": 2,\n \"memoryMB\": 129,\n \"minFreeDiskMb\": 1\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/v3/templates")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"alias\": \"<string>\",\n \"teamID\": \"<string>\",\n \"cpuCount\": 2,\n \"maxCpuCount\": 2,\n \"memoryMB\": 129,\n \"minFreeDiskMb\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.e2b.app/v3/templates")
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 \"name\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"alias\": \"<string>\",\n \"teamID\": \"<string>\",\n \"cpuCount\": 2,\n \"maxCpuCount\": 2,\n \"memoryMB\": 129,\n \"minFreeDiskMb\": 1\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
Headers
Optional team-scoped key for retrying the request. Use 1 to 255 lowercase ASCII letters, digits, or hyphens (a-z, 0-9, -), such as a lowercase UUID. The HTTP method, path, query, and request content identify the request. When idempotency is enabled, a matching retry of a completed request replays its status and body, including the IDs of any resources it created, without repeating the operation. A failure explicitly classified as safe to retry (Should-Retry: true) permits a fresh attempt with the same key and request. Only one attempt can run at a time. A different request returns 409 with error_code idempotency_request_mismatch. A matching request whose original has no recorded response yet and is within its expected response window returns 409 with error_code idempotency_in_progress. A matching request whose original has no recorded response and whose expected response deadline has passed or is unknown returns 422 with error_code idempotency_outcome_unknown. These conflicts and unknown outcomes do not execute the request again. If the key's record is unavailable or idempotency is misconfigured, the request returns 503; Should-Retry tells whether to retry with the same key. After the retention period expires, the key can start a new operation.
1 - 255^[a-z0-9-]+$Body
Name of the template. Can include a tag with colon separator (e.g. "my-template" or "my-template:v1"). If tag is included, it will be treated as if the tag was provided in the tags array.
128Tags to assign to the template build
Alias of the template. Deprecated, use name instead.
128Identifier of the team, as its UUID or its public project ID (prj_)
CPU cores for the sandbox
x >= 1Maximum CPU count the template's sandboxes can be resized to; makes the template resizable. Must be at least cpuCount.
x >= 1Memory for the sandbox in MiB
x >= 128Requested minimum free space after the template's build steps, in MiB. Omit to use the team's default. Set to 0 to request no minimum free-disk growth. The filesystem is never shrunk, including inherited or already-larger filesystems. Growth is best effort, so filesystem metadata can leave the available space slightly below the requested minimum.
x >= 0Response
The build was requested successfully
Identifier of the template
Identifier of the last successful build for given template
Whether the template is public or only accessible by the team
Names of the template
Tags assigned to the template build
Aliases of the template
Was this page helpful?