curl --request POST \
--url https://api.twinbay.ai/sandboxes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"prompt": "<string>",
"twins": [
{
"twin": "<string>",
"scenario_template": "<string>",
"prompt": "<string>"
}
],
"template": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"save_as_template": false
}
'import requests
url = "https://api.twinbay.ai/sandboxes"
payload = {
"name": "<string>",
"prompt": "<string>",
"twins": [
{
"twin": "<string>",
"scenario_template": "<string>",
"prompt": "<string>"
}
],
"template": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"save_as_template": False
}
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({
name: '<string>',
prompt: '<string>',
twins: [{twin: '<string>', scenario_template: '<string>', prompt: '<string>'}],
template: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
save_as_template: false
})
};
fetch('https://api.twinbay.ai/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.twinbay.ai/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([
'name' => '<string>',
'prompt' => '<string>',
'twins' => [
[
'twin' => '<string>',
'scenario_template' => '<string>',
'prompt' => '<string>'
]
],
'template' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'save_as_template' => false
]),
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.twinbay.ai/sandboxes"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"prompt\": \"<string>\",\n \"twins\": [\n {\n \"twin\": \"<string>\",\n \"scenario_template\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ],\n \"template\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"save_as_template\": false\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.twinbay.ai/sandboxes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"prompt\": \"<string>\",\n \"twins\": [\n {\n \"twin\": \"<string>\",\n \"scenario_template\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ],\n \"template\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"save_as_template\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.twinbay.ai/sandboxes")
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 \"name\": \"<string>\",\n \"prompt\": \"<string>\",\n \"twins\": [\n {\n \"twin\": \"<string>\",\n \"scenario_template\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ],\n \"template\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"save_as_template\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"name": "<string>",
"status": "<string>",
"twins": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"twin_slug": "<string>",
"desired_state": "<string>",
"state": "<string>",
"url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"twin_version": "<string>",
"failure": "<string>",
"ready_at": "2023-11-07T05:31:56Z"
}
],
"created_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Create a sandbox
Records the sandbox and queues each twin for provisioning. The twins are not serving yet: poll the sandbox until each reports ready, then collect its API key.
curl --request POST \
--url https://api.twinbay.ai/sandboxes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"prompt": "<string>",
"twins": [
{
"twin": "<string>",
"scenario_template": "<string>",
"prompt": "<string>"
}
],
"template": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"save_as_template": false
}
'import requests
url = "https://api.twinbay.ai/sandboxes"
payload = {
"name": "<string>",
"prompt": "<string>",
"twins": [
{
"twin": "<string>",
"scenario_template": "<string>",
"prompt": "<string>"
}
],
"template": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"save_as_template": False
}
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({
name: '<string>',
prompt: '<string>',
twins: [{twin: '<string>', scenario_template: '<string>', prompt: '<string>'}],
template: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
save_as_template: false
})
};
fetch('https://api.twinbay.ai/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.twinbay.ai/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([
'name' => '<string>',
'prompt' => '<string>',
'twins' => [
[
'twin' => '<string>',
'scenario_template' => '<string>',
'prompt' => '<string>'
]
],
'template' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'save_as_template' => false
]),
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.twinbay.ai/sandboxes"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"prompt\": \"<string>\",\n \"twins\": [\n {\n \"twin\": \"<string>\",\n \"scenario_template\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ],\n \"template\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"save_as_template\": false\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.twinbay.ai/sandboxes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"prompt\": \"<string>\",\n \"twins\": [\n {\n \"twin\": \"<string>\",\n \"scenario_template\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ],\n \"template\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"save_as_template\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.twinbay.ai/sandboxes")
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 \"name\": \"<string>\",\n \"prompt\": \"<string>\",\n \"twins\": [\n {\n \"twin\": \"<string>\",\n \"scenario_template\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ],\n \"template\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"save_as_template\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"name": "<string>",
"status": "<string>",
"twins": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"twin_slug": "<string>",
"desired_state": "<string>",
"state": "<string>",
"url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"twin_version": "<string>",
"failure": "<string>",
"ready_at": "2023-11-07T05:31:56Z"
}
],
"created_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Access token issued by WorkOS AuthKit.
Body
Display name of the new sandbox
1 - 100A natural-language description of the scenario the whole sandbox represents. Every twin in it is seeded from this description while it is being provisioned.
1 - 4000Provider twins to provision in the sandbox. Omitted when the sandbox is started from a template, which holds them already.
1 - 5 elementsShow child attributes
Show child attributes
A saved sandbox definition to start from, instead of listing twins. Its twins, their curated scenarios and their instructions are used as they were saved.
Also save this sandbox's definition, so another sandbox can be started from it later.