Get a Site
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
The Site as its draft stands: its pages with their blocks, the menu, the theme, the roles you can preview as, the block catalog (every block kind this Site takes, with its JSON Schema), what Publish would change, and the rules for editing. Also at GET /v1/sites/{siteId}.
Request example
curl --request GET \ --url 'https://public-api.sessionboard.com/v1/organization/{orgId}/sites/{siteId}' \ --header 'x-access-token: <api-token>'const response = await fetch('https://public-api.sessionboard.com/v1/organization/{orgId}/sites/{siteId}', { method: 'GET', headers: { "x-access-token": "<api-token>" },});
const data = await response.json();console.log(data);import requests
response = requests.request( "GET", "https://public-api.sessionboard.com/v1/organization/{orgId}/sites/{siteId}", headers={ "x-access-token": "<api-token>" },)
print(response.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://public-api.sessionboard.com/v1/organization/{orgId}/sites/{siteId}", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "x-access-token: <api-token>", ],]);
$response = curl_exec($curl);curl_close($curl);
echo $response;package main
import ( "fmt" "io" "net/http")
func main() { req, _ := http.NewRequest("GET", "https://public-api.sessionboard.com/v1/organization/{orgId}/sites/{siteId}", nil) req.Header.Add("x-access-token", "<api-token>")
res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))}HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://public-api.sessionboard.com/v1/organization/{orgId}/sites/{siteId}")) .header("x-access-token", "<api-token>") .method("GET", HttpRequest.BodyPublishers.noBody()) .build();
HttpResponse<String> response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Try it
Response headers
Authorizations
x-access-tokenstringheaderOrganization API token. Generate from Organization Settings → API Tokens.
AuthorizationBearer <token>headerorOAuth 2.1 access token. Obtained via the OAuth PKCE flow at
/oauth/token.
Send one of these. See Authentication.
Path parameters
orgIdstringpathrequiredYour organization ID. Any other organization returns
404.siteIdstring<uuid>pathrequiredThe Site's
idfrom List Sites.
Responses
200application/json
OK
payloadSiteShow child attributes
siteobjectShow child attributes
idstring<uuid>typestringevent_page(Marketing),learning, orawards/event_portal/internal(Awards).productstring- Allowed values
"marketing", "learning", "awards"
namestringslugstringevent_idinteger | nullurlstring | nullThe live address.
revisionstringSend back as
baseRevisionon your next write.has_unpublished_changesbooleanpublished_atstring<date-time> | nulldraft_updated_atstring<date-time> | nullbrand_kit_idstring | nulllast_writeobject | nullWho wrote the draft last (a person, Ask, or an MCP client) and when.
pagesSitePage[]Show child attributes
refstringhome, or how to refer to the page in an edit.idstring | nullnullfor a page that is new in the draft.titlestringslugstringpathstringurlstring | nullis_homebooleanhiddenbooleanvisibilitystring- Allowed values
"public", "reviewers", "submitters"
is_newbooleanblocksSiteBlock[]Show child attributes
idstringkindstringA kind from the Site's
block_catalog.hiddenbooleanconfigobjectThe block's settings, as its schema in
block_catalogdescribes.
navobject | nullThe menu;
nullfollows the pages.themeobjectShow child attributes
modestring- Allowed values
"light", "dark", "auto"
primarystring | nullaccentstring | nulltextstring | nullgradientstring | null[]fontstring | nulllogo_urlstring | nullfollow_brand_kitboolean
rolesobject[]Who you can preview the Site as.
Show child attributes
idstringlabelstringhintstring
devicesstring[]has_pagesbooleanfalsefor a one-page Site (the Marketing event page): use pagehome.block_catalogobject[]Every block kind this Site takes, with a label, a JSON Schema for
configand an example.diffSiteDiffShow child attributes
changedbooleanpagesobject[]blocksobject[]settingsobject[]Show child attributes
keystringlabelstring
summarystring[]One plain sentence per change, for the person to read.
rulesstring[]How to edit this Site, in plain sentences.
403
SCOPE_REQUIRED— the token lacksread:sites(orread:marketing,read:learning,read:awards) for reads, or the matchingwrite:scope for writes.FORBIDDEN— the token's user cannot edit this Site.
404
Not found — also returned for another organization's Site.
Response examples
{ "payload": { "site": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "type": "<string>", "product": "marketing", "name": "<string>", "slug": "<string>", "event_id": 123, "url": "<string>", "revision": "<string>", "has_unpublished_changes": true, "published_at": "2026-01-15T09:30:00Z", "draft_updated_at": "2026-01-15T09:30:00Z", "brand_kit_id": "<string>", "last_write": {} }, "pages": [ { "ref": "<string>", "id": "<string>", "title": "<string>", "slug": "<string>", "path": "<string>", "url": "<string>", "is_home": true, "hidden": true, "visibility": "public", "is_new": true, "blocks": [ { "id": "<string>", "kind": "<string>", "hidden": true, "config": {} } ] } ], "nav": {}, "theme": { "mode": "light", "primary": "<string>", "accent": "<string>", "text": "<string>", "gradient": [ "<string>" ], "font": "<string>", "logo_url": "<string>", "follow_brand_kit": true }, "roles": [ { "id": "<string>", "label": "<string>", "hint": "<string>" } ], "devices": [ "<string>" ], "has_pages": true, "block_catalog": [ {} ], "diff": { "changed": true, "pages": [ {} ], "blocks": [ {} ], "settings": [ { "key": "<string>", "label": "<string>" } ], "summary": [ "<string>" ] }, "rules": [ "<string>" ] }}