curl --request POST \
--url https://api.parallellabs.app/api/v0/websites \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"companyId": "<string>",
"name": "<string>",
"description": "<string>",
"seedPrompt": "<string>",
"brandKitId": "<string>",
"designStyleId": "<string>",
"colorPalette": {},
"useCompanyContext": true
}
'import requests
url = "https://api.parallellabs.app/api/v0/websites"
payload = {
"companyId": "<string>",
"name": "<string>",
"description": "<string>",
"seedPrompt": "<string>",
"brandKitId": "<string>",
"designStyleId": "<string>",
"colorPalette": {},
"useCompanyContext": True
}
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({
companyId: '<string>',
name: '<string>',
description: '<string>',
seedPrompt: '<string>',
brandKitId: '<string>',
designStyleId: '<string>',
colorPalette: {},
useCompanyContext: true
})
};
fetch('https://api.parallellabs.app/api/v0/websites', 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.parallellabs.app/api/v0/websites",
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([
'companyId' => '<string>',
'name' => '<string>',
'description' => '<string>',
'seedPrompt' => '<string>',
'brandKitId' => '<string>',
'designStyleId' => '<string>',
'colorPalette' => [
],
'useCompanyContext' => true
]),
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.parallellabs.app/api/v0/websites"
payload := strings.NewReader("{\n \"companyId\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"seedPrompt\": \"<string>\",\n \"brandKitId\": \"<string>\",\n \"designStyleId\": \"<string>\",\n \"colorPalette\": {},\n \"useCompanyContext\": true\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.parallellabs.app/api/v0/websites")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"companyId\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"seedPrompt\": \"<string>\",\n \"brandKitId\": \"<string>\",\n \"designStyleId\": \"<string>\",\n \"colorPalette\": {},\n \"useCompanyContext\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/websites")
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 \"companyId\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"seedPrompt\": \"<string>\",\n \"brandKitId\": \"<string>\",\n \"designStyleId\": \"<string>\",\n \"colorPalette\": {},\n \"useCompanyContext\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Create a new website from scratch
Creates an empty starter website and returns its id. Choose its look here: a brandKitId, or a designStyleId from the design style library (list design styles, medium=website) and/or a colorPalette.
To have the built-in website builder agent design and build it: list the site’s threads, move the first thread onto a review branch (update thread), run the agent in it with a description of the site, and read the thread until the agent finishes. Only that first thread designs in the chosen style. Or write the pages, layouts and assets onto a review branch yourself (write file, upload asset).
Either way, check the branch with validate and a preview link, approve it into main (merge), then publish to put it live.
curl --request POST \
--url https://api.parallellabs.app/api/v0/websites \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"companyId": "<string>",
"name": "<string>",
"description": "<string>",
"seedPrompt": "<string>",
"brandKitId": "<string>",
"designStyleId": "<string>",
"colorPalette": {},
"useCompanyContext": true
}
'import requests
url = "https://api.parallellabs.app/api/v0/websites"
payload = {
"companyId": "<string>",
"name": "<string>",
"description": "<string>",
"seedPrompt": "<string>",
"brandKitId": "<string>",
"designStyleId": "<string>",
"colorPalette": {},
"useCompanyContext": True
}
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({
companyId: '<string>',
name: '<string>',
description: '<string>',
seedPrompt: '<string>',
brandKitId: '<string>',
designStyleId: '<string>',
colorPalette: {},
useCompanyContext: true
})
};
fetch('https://api.parallellabs.app/api/v0/websites', 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.parallellabs.app/api/v0/websites",
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([
'companyId' => '<string>',
'name' => '<string>',
'description' => '<string>',
'seedPrompt' => '<string>',
'brandKitId' => '<string>',
'designStyleId' => '<string>',
'colorPalette' => [
],
'useCompanyContext' => true
]),
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.parallellabs.app/api/v0/websites"
payload := strings.NewReader("{\n \"companyId\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"seedPrompt\": \"<string>\",\n \"brandKitId\": \"<string>\",\n \"designStyleId\": \"<string>\",\n \"colorPalette\": {},\n \"useCompanyContext\": true\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.parallellabs.app/api/v0/websites")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"companyId\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"seedPrompt\": \"<string>\",\n \"brandKitId\": \"<string>\",\n \"designStyleId\": \"<string>\",\n \"colorPalette\": {},\n \"useCompanyContext\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/websites")
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 \"companyId\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"seedPrompt\": \"<string>\",\n \"brandKitId\": \"<string>\",\n \"designStyleId\": \"<string>\",\n \"colorPalette\": {},\n \"useCompanyContext\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Body
Create a website
Company ID that owns the website
Website name (default "Untitled website")
Optional short description
What the site is for. Used only to name the site when name is omitted; it does not build any pages.
Brand kit to design with (an id from brand_kit_listBrandKits). Wins over designStyleId and colorPalette. Omit all three to use the company's default kit.
Design style the site is designed in, when no brand kit is given. Get ids from design_styles_listDesignStyles with medium=website and pick the style whose name, category and description fit the site.
Colors to use when no brand kit is given: {primary, secondary, accent, background, surface, text} as hex values. Combines with designStyleId.
Let the site builder use the company profile as context

