curl --request POST \
--url https://api.twinbay.ai/environments \
--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/environments"
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/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.twinbay.ai/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([
'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/environments"
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/environments")
.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/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 \"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 an environment
Records the environment and queues each twin for provisioning. The twins are not serving yet: read each one with wait_for=ready, then collect its API key.
curl --request POST \
--url https://api.twinbay.ai/environments \
--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/environments"
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/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.twinbay.ai/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([
'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/environments"
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/environments")
.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/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 \"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 environment
1 - 100A natural-language description of the scenario the whole environment represents. Every twin in it is seeded from this description while it is being provisioned.
1 - 4000Provider twins to provision in the environment. Omitted when the environment is started from a template, which holds them already.
1 - 25 elementsShow child attributes
Show child attributes
A saved environment 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 environment's definition, so another environment can be started from it later.