curl --request POST \
--url http://localhost:4200/draft/bootstrap \
--header 'Content-Type: application/json' \
--data '
{
"session": "<string>",
"siteId": "<string>",
"pages": [
{}
],
"overwrite": true
}
'import requests
url = "http://localhost:4200/draft/bootstrap"
payload = {
"session": "<string>",
"siteId": "<string>",
"pages": [{}],
"overwrite": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({session: '<string>', siteId: '<string>', pages: [{}], overwrite: true})
};
fetch('http://localhost:4200/draft/bootstrap', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4200",
CURLOPT_URL => "http://localhost:4200/draft/bootstrap",
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([
'session' => '<string>',
'siteId' => '<string>',
'pages' => [
[
]
],
'overwrite' => true
]),
CURLOPT_HTTPHEADER => [
"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 := "http://localhost:4200/draft/bootstrap"
payload := strings.NewReader("{\n \"session\": \"<string>\",\n \"siteId\": \"<string>\",\n \"pages\": [\n {}\n ],\n \"overwrite\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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("http://localhost:4200/draft/bootstrap")
.header("Content-Type", "application/json")
.body("{\n \"session\": \"<string>\",\n \"siteId\": \"<string>\",\n \"pages\": [\n {}\n ],\n \"overwrite\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4200/draft/bootstrap")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"session\": \"<string>\",\n \"siteId\": \"<string>\",\n \"pages\": [\n {}\n ],\n \"overwrite\": true\n}"
response = http.request(request)
puts response.read_bodySeed a session's draft with pages
Fills an empty session from the pages in the body, or from the orchestrator’s published pages when the body carries none. Skipped with status: "skipped" when the draft is already populated and overwrite is not set, and also right after a snapshot restore, so a page refresh cannot overwrite what was just restored.
curl --request POST \
--url http://localhost:4200/draft/bootstrap \
--header 'Content-Type: application/json' \
--data '
{
"session": "<string>",
"siteId": "<string>",
"pages": [
{}
],
"overwrite": true
}
'import requests
url = "http://localhost:4200/draft/bootstrap"
payload = {
"session": "<string>",
"siteId": "<string>",
"pages": [{}],
"overwrite": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({session: '<string>', siteId: '<string>', pages: [{}], overwrite: true})
};
fetch('http://localhost:4200/draft/bootstrap', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4200",
CURLOPT_URL => "http://localhost:4200/draft/bootstrap",
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([
'session' => '<string>',
'siteId' => '<string>',
'pages' => [
[
]
],
'overwrite' => true
]),
CURLOPT_HTTPHEADER => [
"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 := "http://localhost:4200/draft/bootstrap"
payload := strings.NewReader("{\n \"session\": \"<string>\",\n \"siteId\": \"<string>\",\n \"pages\": [\n {}\n ],\n \"overwrite\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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("http://localhost:4200/draft/bootstrap")
.header("Content-Type", "application/json")
.body("{\n \"session\": \"<string>\",\n \"siteId\": \"<string>\",\n \"pages\": [\n {}\n ],\n \"overwrite\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4200/draft/bootstrap")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"session\": \"<string>\",\n \"siteId\": \"<string>\",\n \"pages\": [\n {}\n ],\n \"overwrite\": true\n}"
response = http.request(request)
puts response.read_bodyBody
Editor session key. Scoped with siteId into the key the state store uses.
Site this session belongs to, when the orchestrator hosts more than one.
PageDoc objects. Each is parsed leniently; the ones that fail validation are dropped.
Replace pages that share a slug with a source page. Draft-only pages always survive.
Response
status is bootstrapped or skipped, with the resulting slugs and the new previewVersion. When some pages failed validation and others did not, rejectedPages lists the refused ones as { index, slug?, path, message } — the first Zod issue of each.