Sites
Tags: content, sites
Website and content management
In the product: Sites
Resources
Request and response models used by the endpoints on this page.
MenuItemResponse
| Field | Type | Required | Description |
|---|---|---|---|
children | Array | ||
createdAt | DateTime | ✓ | |
cssClass | String | ||
icon | String | ||
id | Integer | ✓ | |
isActive | Boolean | Default: True | |
itemType | Literal[page, url, products, none] | ✓ | |
label | String | ✓ | |
pageId | Integer | ||
pageSlug | String | ||
pageTitle | String | ||
parentId | Integer | ||
position | Integer | ✓ | |
siteId | Integer | ✓ | |
target | String | ||
translations | Dict[str, str] | ||
updatedAt | DateTime | ✓ | |
url | String |
Example:
{
"id": 0 // Integer,
"siteId": 0 // Integer,
"label": "string" // String,
"itemType": null // Literal[page, url, products, none],
"pageId": 0 // Integer, optional,
"pageSlug": "string" // String, optional,
"pageTitle": "string" // String, optional,
"url": "string" // String, optional,
"parentId": 0 // Integer, optional,
"position": 0 // Integer,
"icon": "string" // String, optional,
"cssClass": "string" // String, optional,
"target": "string" // String, optional,
"isActive": false // Boolean, optional, default: True,
"translations": {} // Dict[str, str], optional,
"createdAt": "2024-01-01T00:00:00Z" // DateTime,
"updatedAt": "2024-01-01T00:00:00Z" // DateTime,
"children": [] // Array<MenuItemResponse>, optional, default: PydanticUndefined
}
MenuTreeResponse
| Field | Type | Required | Description |
|---|---|---|---|
items | Array | ||
siteId | Integer | ✓ |
Example:
{
"siteId": 0 // Integer,
"items": [] // Array<MenuItemResponse>, optional, default: PydanticUndefined
}
RenderedPageResponse
| Field | Type | Required | Description |
|---|---|---|---|
availableLocales | Array | ||
content | String | ✓ | |
contentBlocks | TipTapDocument | ||
createdAt | DateTime | ✓ | |
id | Integer | ✓ | |
locale | String | Default: en-US | |
metaDescription | String | ||
primaryLocale | String | ||
slug | String | ✓ | |
status | String | Default: draft | |
title | String | ✓ | |
updatedAt | DateTime |
Example:
{
"id": 0 // Integer,
"slug": "string" // String,
"title": "string" // String,
"status": "string" // String, optional, default: draft,
"metaDescription": "string" // String, optional,
"content": "string" // String,
"contentBlocks": null // TipTapDocument, optional,
"createdAt": "2024-01-01T00:00:00Z" // DateTime,
"updatedAt": "2024-01-01T00:00:00Z" // DateTime, optional,
"locale": "string" // String, optional, default: en-US,
"availableLocales": "string" // Array<String>, optional,
"primaryLocale": "string" // String, optional
}
SiteResponse
| Field | Type | Required | Description |
|---|---|---|---|
allowSignup | Boolean | ✓ | |
assetsFolderId | Integer | ||
authorized | Boolean | ✓ | |
availableLocales | Array | Default: ['en-US'] | |
content | String | ✓ | |
crawl | Boolean | Default: False | |
crawlCompleted | Integer | ||
crawlCompletedAt | DateTime | ||
crawlError | String | ||
crawlExcludedTags | Array | Default: [] | |
crawlFailedAt | DateTime | ||
crawlJobId | String | ||
crawlLimit | Integer | ||
crawlPrevious | Integer | ||
crawlStartedAt | DateTime | ||
crawlUrl | String | ||
createdAt | DateTime | ✓ | |
customDomain | String | ✓ | |
defaultUrl | String | ||
defaultWorkflowId | Integer | ||
googleAdwordsId | String | ||
googleAnalyticsId | String | ||
homePageId | Integer | ||
id | Integer | ✓ | |
isMapped | Boolean | ✓ | |
isPublic | Boolean | ✓ | |
isReseller | Boolean | ✓ | |
metaDescription | String | ✓ | |
name | String | ✓ | |
organizationLogoUrl | String | ||
ownerId | Integer | ||
pageCount | Integer | ||
permissions | Integer | Default: 0 | |
primaryLocale | String | Default: en-US | |
redirectUrl | String | ✓ | |
resolvedThemeSettings | dict[str, Any] | Default: {} | |
signupMemberRoleId | Integer | ||
signupMemberRoleName | String | ||
slug | String | ✓ | |
sourceFolderId | Integer | ||
sourceReleaseId | Integer | ||
tagLine | String | ✓ | |
theme | Literal[default, gravityrail-home, gravityrail-home-2, dml-home, gravityrail-start, gravityrail-pitch, leapcure-home, leapcure-home-no-chat, leapcure-home-pre-launch, admin-clinical-trial, customer-basic, rc360-demo, patient-engagement-demo, operator-product, gravity-health, gravity-developer, gravityrail-launch, gravity-rail-feb-2026, gravity-rail-2026-v2, cosan-enrollment, gravity-health-enrollment, source-site] | ✓ | |
themeSettings | dict[str, Any] | Default: {} | |
updatedAt | DateTime | ✓ | |
url | String | ✓ | |
uuid | String | ✓ | |
workspaceName | String | ✓ | |
workspaceUuid | String |
Example:
{
"id": 0 // Integer,
"name": "string" // String,
"uuid": "string" // String,
"slug": "string" // String,
"assetsFolderId": 0 // Integer, optional,
"sourceFolderId": 0 // Integer, optional,
"sourceReleaseId": 0 // Integer, optional,
"theme": null // Literal[default, gravityrail-home, gravityrail-home-2, dml-home, gravityrail-start, gravityrail-pitch, leapcure-home, leapcure-home-no-chat, leapcure-home-pre-launch, admin-clinical-trial, customer-basic, rc360-demo, patient-engagement-demo, operator-product, gravity-health, gravity-developer, gravityrail-launch, gravity-rail-feb-2026, gravity-rail-2026-v2, cosan-enrollment, gravity-health-enrollment, source-site],
"themeSettings": {} // dict[str, Any], optional, default: {},
"resolvedThemeSettings": {} // dict[str, Any], optional, default: {},
"content": "string" // String,
"authorized": false // Boolean,
"tagLine": "string" // String,
"metaDescription": "string" // String,
"customDomain": "string" // String,
"redirectUrl": "string" // String,
"allowSignup": false // Boolean,
"signupMemberRoleId": 0 // Integer, optional,
"signupMemberRoleName": "string" // String, optional,
"isMapped": false // Boolean,
"isPublic": false // Boolean,
"createdAt": "2024-01-01T00:00:00Z" // DateTime,
"updatedAt": "2024-01-01T00:00:00Z" // DateTime,
"isReseller": false // Boolean,
"workspaceName": "string" // String,
"workspaceUuid": "string" // String, optional,
"ownerId": 0 // Integer, optional,
"defaultWorkflowId": 0 // Integer, optional,
"homePageId": 0 // Integer, optional,
"url": "string" // String,
"defaultUrl": "string" // String, optional,
"crawl": false // Boolean, optional, default: False,
"crawlUrl": "string" // String, optional,
"crawlStartedAt": "2024-01-01T00:00:00Z" // DateTime, optional,
"crawlCompletedAt": "2024-01-01T00:00:00Z" // DateTime, optional,
"crawlCompleted": 0 // Integer, optional,
"crawlFailedAt": "2024-01-01T00:00:00Z" // DateTime, optional,
"crawlError": "string" // String, optional,
"crawlExcludedTags": "string" // Array<String>, optional, default: [],
"crawlJobId": "string" // String, optional,
"crawlPrevious": 0 // Integer, optional,
"crawlLimit": 0 // Integer, optional,
"googleAnalyticsId": "string" // String, optional,
"googleAdwordsId": "string" // String, optional,
"permissions": 0 // Integer, optional, default: 0,
"organizationLogoUrl": "string" // String, optional,
"primaryLocale": "string" // String, optional, default: en-US,
"availableLocales": "string" // Array<String>, optional, default: ['en-US'],
"pageCount": 0 // Integer, optional
}
SiteSignupResponse
| Field | Type | Required | Description |
|---|---|---|---|
memberId | Integer | ||
message | String | ✓ | |
roleName | String | ||
status | Literal[success, already_member] | ✓ |
Example:
{
"status": null // Literal[success, already_member],
"message": "string" // String,
"memberId": 0 // Integer, optional,
"roleName": "string" // String, optional
}
Endpoints
GET /api/v2/s/mapping/{custom_domain}- MappingGET /api/v2/s/{workspace_uuid}/{site_uuid}- Get Workspace Uuid Site UuidGET /api/v2/s/{workspace_uuid}/{site_uuid}/files/{file_id}/contents/{filename}- ContentsGET /api/v2/s/{workspace_uuid}/{site_uuid}/menu- MenuGET /api/v2/s/{workspace_uuid}/{site_uuid}/pages/{page_slug_or_id}- PagesPOST /api/v2/s/{workspace_uuid}/{site_uuid}/signup- Signup
Mapping
GET /api/v2/s/mapping/{custom_domain}
Description:
Get workspace_uuid and site_uuid for a custom domain.
Authentication: Requires authenticated user
Parameters:
custom_domain(String)
Response: See SiteMappingResponse
Get Workspace Uuid Site Uuid
GET /api/v2/s/{workspace_uuid}/{site_uuid}
Description:
Get a specific site by ID.
Authentication: Requires workspace session
Parameters:
site_uuid(String)
Response: See SiteResponse
Contents
GET /api/v2/s/{workspace_uuid}/{site_uuid}/files/{file_id}/contents/{filename}
Description:
Download file contents for site media with site-based access controls. This endpoint allows downloading site file contents with proper access control enforcement.
Authentication: Requires workspace session
Parameters:
site_uuid(String)file_id(Integer)filename(String)token(String)
Menu
GET /api/v2/s/{workspace_uuid}/{site_uuid}/menu
Description:
Get the complete menu tree for a site.
Authentication: Requires workspace session
Parameters:
site_uuid(String)
Response: See MenuTreeResponse
Pages
GET /api/v2/s/{workspace_uuid}/{site_uuid}/pages/{page_slug_or_id}
Description:
Get a specific page by its ID or slug within a site.
Supports locale-specific content via the locale query parameter. If the requested locale is not available, falls back to the page's primary locale.
Authentication: Requires workspace session
Parameters:
site_uuid(String)page_slug_or_id(String)locale(String)preview(Boolean)
Response: See RenderedPageResponse
Signup
POST /api/v2/s/{workspace_uuid}/{site_uuid}/signup
Description:
Sign up a logged-in user for a public site if signup is allowed.
Authentication: Requires workspace session
Parameters:
site_uuid(String)
Response: See SiteSignupResponse