curl --request POST \
--url https://api.example.com/api/v1/environments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "docker",
"image": {
"docker": "<string>",
"dockerfile": {
"type": "inline",
"value": "<string>"
}
},
"resources": {
"cpu": 123,
"memory": "<string>",
"disk": "<string>"
},
"network": {
"allow": [
"<string>"
]
},
"lifecycle": {
"preserve": true,
"stop_on_terminal": true,
"auto_stop": "<string>"
},
"labels": {},
"env": {},
"cwd": "/srv/fabro/workspaces/team-a"
}
'import requests
url = "https://api.example.com/api/v1/environments"
payload = {
"id": "docker",
"image": {
"docker": "<string>",
"dockerfile": {
"type": "inline",
"value": "<string>"
}
},
"resources": {
"cpu": 123,
"memory": "<string>",
"disk": "<string>"
},
"network": { "allow": ["<string>"] },
"lifecycle": {
"preserve": True,
"stop_on_terminal": True,
"auto_stop": "<string>"
},
"labels": {},
"env": {},
"cwd": "/srv/fabro/workspaces/team-a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: 'docker',
image: {docker: '<string>', dockerfile: {type: 'inline', value: '<string>'}},
resources: {cpu: 123, memory: '<string>', disk: '<string>'},
network: {allow: ['<string>']},
lifecycle: {preserve: true, stop_on_terminal: true, auto_stop: '<string>'},
labels: {},
env: {},
cwd: '/srv/fabro/workspaces/team-a'
})
};
fetch('https://api.example.com/api/v1/environments', 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.example.com/api/v1/environments",
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([
'id' => 'docker',
'image' => [
'docker' => '<string>',
'dockerfile' => [
'type' => 'inline',
'value' => '<string>'
]
],
'resources' => [
'cpu' => 123,
'memory' => '<string>',
'disk' => '<string>'
],
'network' => [
'allow' => [
'<string>'
]
],
'lifecycle' => [
'preserve' => true,
'stop_on_terminal' => true,
'auto_stop' => '<string>'
],
'labels' => [
],
'env' => [
],
'cwd' => '/srv/fabro/workspaces/team-a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.example.com/api/v1/environments"
payload := strings.NewReader("{\n \"id\": \"docker\",\n \"image\": {\n \"docker\": \"<string>\",\n \"dockerfile\": {\n \"type\": \"inline\",\n \"value\": \"<string>\"\n }\n },\n \"resources\": {\n \"cpu\": 123,\n \"memory\": \"<string>\",\n \"disk\": \"<string>\"\n },\n \"network\": {\n \"allow\": [\n \"<string>\"\n ]\n },\n \"lifecycle\": {\n \"preserve\": true,\n \"stop_on_terminal\": true,\n \"auto_stop\": \"<string>\"\n },\n \"labels\": {},\n \"env\": {},\n \"cwd\": \"/srv/fabro/workspaces/team-a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.example.com/api/v1/environments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"docker\",\n \"image\": {\n \"docker\": \"<string>\",\n \"dockerfile\": {\n \"type\": \"inline\",\n \"value\": \"<string>\"\n }\n },\n \"resources\": {\n \"cpu\": 123,\n \"memory\": \"<string>\",\n \"disk\": \"<string>\"\n },\n \"network\": {\n \"allow\": [\n \"<string>\"\n ]\n },\n \"lifecycle\": {\n \"preserve\": true,\n \"stop_on_terminal\": true,\n \"auto_stop\": \"<string>\"\n },\n \"labels\": {},\n \"env\": {},\n \"cwd\": \"/srv/fabro/workspaces/team-a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/environments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"docker\",\n \"image\": {\n \"docker\": \"<string>\",\n \"dockerfile\": {\n \"type\": \"inline\",\n \"value\": \"<string>\"\n }\n },\n \"resources\": {\n \"cpu\": 123,\n \"memory\": \"<string>\",\n \"disk\": \"<string>\"\n },\n \"network\": {\n \"allow\": [\n \"<string>\"\n ]\n },\n \"lifecycle\": {\n \"preserve\": true,\n \"stop_on_terminal\": true,\n \"auto_stop\": \"<string>\"\n },\n \"labels\": {},\n \"env\": {},\n \"cwd\": \"/srv/fabro/workspaces/team-a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "docker",
"revision": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"image": {
"docker": "<string>",
"dockerfile": {
"type": "inline",
"value": "<string>"
}
},
"resources": {
"cpu": 123,
"memory": "<string>",
"disk": "<string>"
},
"network": {
"allow": [
"<string>"
]
},
"lifecycle": {
"preserve": true,
"stop_on_terminal": true,
"auto_stop": "<string>"
},
"labels": {},
"env": {},
"cwd": "/srv/fabro/workspaces/team-a"
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}Create environment
Creates a server-owned environment definition in the environment catalog. REST environment requests only accept inline Dockerfile content; local Dockerfile paths are supported by workflow/settings files but rejected by this API.
curl --request POST \
--url https://api.example.com/api/v1/environments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "docker",
"image": {
"docker": "<string>",
"dockerfile": {
"type": "inline",
"value": "<string>"
}
},
"resources": {
"cpu": 123,
"memory": "<string>",
"disk": "<string>"
},
"network": {
"allow": [
"<string>"
]
},
"lifecycle": {
"preserve": true,
"stop_on_terminal": true,
"auto_stop": "<string>"
},
"labels": {},
"env": {},
"cwd": "/srv/fabro/workspaces/team-a"
}
'import requests
url = "https://api.example.com/api/v1/environments"
payload = {
"id": "docker",
"image": {
"docker": "<string>",
"dockerfile": {
"type": "inline",
"value": "<string>"
}
},
"resources": {
"cpu": 123,
"memory": "<string>",
"disk": "<string>"
},
"network": { "allow": ["<string>"] },
"lifecycle": {
"preserve": True,
"stop_on_terminal": True,
"auto_stop": "<string>"
},
"labels": {},
"env": {},
"cwd": "/srv/fabro/workspaces/team-a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: 'docker',
image: {docker: '<string>', dockerfile: {type: 'inline', value: '<string>'}},
resources: {cpu: 123, memory: '<string>', disk: '<string>'},
network: {allow: ['<string>']},
lifecycle: {preserve: true, stop_on_terminal: true, auto_stop: '<string>'},
labels: {},
env: {},
cwd: '/srv/fabro/workspaces/team-a'
})
};
fetch('https://api.example.com/api/v1/environments', 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.example.com/api/v1/environments",
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([
'id' => 'docker',
'image' => [
'docker' => '<string>',
'dockerfile' => [
'type' => 'inline',
'value' => '<string>'
]
],
'resources' => [
'cpu' => 123,
'memory' => '<string>',
'disk' => '<string>'
],
'network' => [
'allow' => [
'<string>'
]
],
'lifecycle' => [
'preserve' => true,
'stop_on_terminal' => true,
'auto_stop' => '<string>'
],
'labels' => [
],
'env' => [
],
'cwd' => '/srv/fabro/workspaces/team-a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.example.com/api/v1/environments"
payload := strings.NewReader("{\n \"id\": \"docker\",\n \"image\": {\n \"docker\": \"<string>\",\n \"dockerfile\": {\n \"type\": \"inline\",\n \"value\": \"<string>\"\n }\n },\n \"resources\": {\n \"cpu\": 123,\n \"memory\": \"<string>\",\n \"disk\": \"<string>\"\n },\n \"network\": {\n \"allow\": [\n \"<string>\"\n ]\n },\n \"lifecycle\": {\n \"preserve\": true,\n \"stop_on_terminal\": true,\n \"auto_stop\": \"<string>\"\n },\n \"labels\": {},\n \"env\": {},\n \"cwd\": \"/srv/fabro/workspaces/team-a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.example.com/api/v1/environments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"docker\",\n \"image\": {\n \"docker\": \"<string>\",\n \"dockerfile\": {\n \"type\": \"inline\",\n \"value\": \"<string>\"\n }\n },\n \"resources\": {\n \"cpu\": 123,\n \"memory\": \"<string>\",\n \"disk\": \"<string>\"\n },\n \"network\": {\n \"allow\": [\n \"<string>\"\n ]\n },\n \"lifecycle\": {\n \"preserve\": true,\n \"stop_on_terminal\": true,\n \"auto_stop\": \"<string>\"\n },\n \"labels\": {},\n \"env\": {},\n \"cwd\": \"/srv/fabro/workspaces/team-a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/environments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"docker\",\n \"image\": {\n \"docker\": \"<string>\",\n \"dockerfile\": {\n \"type\": \"inline\",\n \"value\": \"<string>\"\n }\n },\n \"resources\": {\n \"cpu\": 123,\n \"memory\": \"<string>\",\n \"disk\": \"<string>\"\n },\n \"network\": {\n \"allow\": [\n \"<string>\"\n ]\n },\n \"lifecycle\": {\n \"preserve\": true,\n \"stop_on_terminal\": true,\n \"auto_stop\": \"<string>\"\n },\n \"labels\": {},\n \"env\": {},\n \"cwd\": \"/srv/fabro/workspaces/team-a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "docker",
"revision": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"image": {
"docker": "<string>",
"dockerfile": {
"type": "inline",
"value": "<string>"
}
},
"resources": {
"cpu": 123,
"memory": "<string>",
"disk": "<string>"
},
"network": {
"allow": [
"<string>"
]
},
"lifecycle": {
"preserve": true,
"stop_on_terminal": true,
"auto_stop": "<string>"
},
"labels": {},
"env": {},
"cwd": "/srv/fabro/workspaces/team-a"
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}Authorizations
Raw dev token passed as Authorization: Bearer fabro_dev_... when server.auth.methods includes dev-token.
Body
Request body for creating a server-managed environment.
^[a-z0-9][a-z0-9-]{0,62}$"docker"
Desired environment provider.
local, docker, daytona REST-safe environment image settings. Dockerfile sources are inline-only; local paths are rejected by the REST API.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Local-provider command working directory for this environment. Docker and Daytona ignore this value.
"/srv/fabro/workspaces/team-a"
Response
Environment created
Public server-managed environment definition.
^[a-z0-9][a-z0-9-]{0,62}$"docker"
Stable revision used with If-Match for optimistic concurrency.
^[0-9a-f]{64}$"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
Desired environment provider.
local, docker, daytona REST-safe environment image settings. Dockerfile sources are inline-only; local paths are rejected by the REST API.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Local-provider command working directory for this environment. Docker and Daytona ignore this value.
"/srv/fabro/workspaces/team-a"