Create a sandbox organization
curl --request POST \
--url https://api.openworklabs.com/v1/admin/sandbox-orgs \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"connectorBaseUrl": "<string>",
"days": 45,
"memberLimit": 250,
"allowedEmailDomains": [
"<string>"
],
"creditUsd": 2500
}
'import requests
url = "https://api.openworklabs.com/v1/admin/sandbox-orgs"
payload = {
"name": "<string>",
"connectorBaseUrl": "<string>",
"days": 45,
"memberLimit": 250,
"allowedEmailDomains": ["<string>"],
"creditUsd": 2500
}
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>',
connectorBaseUrl: '<string>',
days: 45,
memberLimit: 250,
allowedEmailDomains: ['<string>'],
creditUsd: 2500
})
};
fetch('https://api.openworklabs.com/v1/admin/sandbox-orgs', 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.openworklabs.com/v1/admin/sandbox-orgs",
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>',
'connectorBaseUrl' => '<string>',
'days' => 45,
'memberLimit' => 250,
'allowedEmailDomains' => [
'<string>'
],
'creditUsd' => 2500
]),
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.openworklabs.com/v1/admin/sandbox-orgs"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"connectorBaseUrl\": \"<string>\",\n \"days\": 45,\n \"memberLimit\": 250,\n \"allowedEmailDomains\": [\n \"<string>\"\n ],\n \"creditUsd\": 2500\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.openworklabs.com/v1/admin/sandbox-orgs")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"connectorBaseUrl\": \"<string>\",\n \"days\": 45,\n \"memberLimit\": 250,\n \"allowedEmailDomains\": [\n \"<string>\"\n ],\n \"creditUsd\": 2500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/admin/sandbox-orgs")
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 \"connectorBaseUrl\": \"<string>\",\n \"days\": 45,\n \"memberLimit\": 250,\n \"allowedEmailDomains\": [\n \"<string>\"\n ],\n \"creditUsd\": 2500\n}"
response = http.request(request)
puts response.read_body{
"sandbox": {
"id": "<string>",
"organizationId": "<string>",
"name": "<string>",
"state": "open",
"joinLink": "<string>",
"memberCount": 0,
"memberLimit": 0,
"connectorBaseUrl": "<string>",
"connectorCount": 0,
"allowedEmailDomains": [
"<string>"
],
"joinRole": "member",
"expiresAt": "2023-11-07T05:31:56Z",
"closedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"modelProviderCount": 0,
"planTier": "free",
"modelCredit": {
"limitUsd": 123,
"remainingUsd": 123
}
}
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "forbidden",
"reason": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Admin
Create a sandbox organization
Creates an organization owned by the calling admin on the Enterprise plan until the sandbox ends, with included models, AI Gateway models for everyone (the sandbox’s own OpenRouter key capped at creditUsd when the deployment mints them), Free Auto until the sandbox closes or expires, one per-person OAuth connector for each fictional workplace app, and a join link that joins people as members until the sandbox ends. Platform administrators only.
POST
/
v1
/
admin
/
sandbox-orgs
Create a sandbox organization
curl --request POST \
--url https://api.openworklabs.com/v1/admin/sandbox-orgs \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"connectorBaseUrl": "<string>",
"days": 45,
"memberLimit": 250,
"allowedEmailDomains": [
"<string>"
],
"creditUsd": 2500
}
'import requests
url = "https://api.openworklabs.com/v1/admin/sandbox-orgs"
payload = {
"name": "<string>",
"connectorBaseUrl": "<string>",
"days": 45,
"memberLimit": 250,
"allowedEmailDomains": ["<string>"],
"creditUsd": 2500
}
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>',
connectorBaseUrl: '<string>',
days: 45,
memberLimit: 250,
allowedEmailDomains: ['<string>'],
creditUsd: 2500
})
};
fetch('https://api.openworklabs.com/v1/admin/sandbox-orgs', 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.openworklabs.com/v1/admin/sandbox-orgs",
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>',
'connectorBaseUrl' => '<string>',
'days' => 45,
'memberLimit' => 250,
'allowedEmailDomains' => [
'<string>'
],
'creditUsd' => 2500
]),
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.openworklabs.com/v1/admin/sandbox-orgs"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"connectorBaseUrl\": \"<string>\",\n \"days\": 45,\n \"memberLimit\": 250,\n \"allowedEmailDomains\": [\n \"<string>\"\n ],\n \"creditUsd\": 2500\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.openworklabs.com/v1/admin/sandbox-orgs")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"connectorBaseUrl\": \"<string>\",\n \"days\": 45,\n \"memberLimit\": 250,\n \"allowedEmailDomains\": [\n \"<string>\"\n ],\n \"creditUsd\": 2500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/admin/sandbox-orgs")
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 \"connectorBaseUrl\": \"<string>\",\n \"days\": 45,\n \"memberLimit\": 250,\n \"allowedEmailDomains\": [\n \"<string>\"\n ],\n \"creditUsd\": 2500\n}"
response = http.request(request)
puts response.read_body{
"sandbox": {
"id": "<string>",
"organizationId": "<string>",
"name": "<string>",
"state": "open",
"joinLink": "<string>",
"memberCount": 0,
"memberLimit": 0,
"connectorBaseUrl": "<string>",
"connectorCount": 0,
"allowedEmailDomains": [
"<string>"
],
"joinRole": "member",
"expiresAt": "2023-11-07T05:31:56Z",
"closedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"modelProviderCount": 0,
"planTier": "free",
"modelCredit": {
"limitUsd": 123,
"remainingUsd": 123
}
}
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "forbidden",
"reason": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
denApiKeybearerAuth
Organization API key passed as the x-api-key header. The raw key is the header value; do not prefix it with Bearer.
Body
application/json
Required string length:
2 - 120Maximum string length:
1900Required range:
1 <= x <= 90Required range:
1 <= x <= 500Maximum array length:
20Pattern:
^(?!-)[a-z0-9-]+(\.[a-z0-9-]+)+$Available options:
member, admin Required range:
1 <= x <= 5000Response
Sandbox created.
Show child attributes
Show child attributes
Was this page helpful?