Operation details

GET /v1/admin/control-site

operationId
getControlSite
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Responses

getControlSite Responses
StatusDescription
200Draft

Fields:schema?: const cdnca.control-site/v1 revision?: integer theme?: ThemeView | null draft?: Document published?: Document | null published_revision?: integer | null dirty?: boolean seeded?: boolean updated_at?: string(date-time) | null(date-time) published_at?: string(date-time) | null(date-time) assets?: array<Asset>

401Unauthenticated
403Permission denied

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.

↑ Back to list

PUT /v1/admin/control-site

operationId
saveControlSiteDraft
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

saveControlSiteDraft Parameters
NameInTypeRequiredDescription
If-MatchheaderstringYes—
Idempotency-KeyheaderstringYes—
X-Request-IDheaderstringYes—

Request body

application/json · Required:Yes

saveControlSiteDraft Request body
NameTypeRequiredDescription
draftDocumentYes—

Responses

saveControlSiteDraft Responses
StatusDescription
200Saved

Fields:schema?: const cdnca.control-site/v1 revision?: integer theme?: ThemeView | null draft?: Document published?: Document | null published_revision?: integer | null dirty?: boolean seeded?: boolean updated_at?: string(date-time) | null(date-time) published_at?: string(date-time) | null(date-time) assets?: array<Asset>

400Invalid content or unknown image
403Permission denied
409Revision or idempotency conflict

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

POST /v1/admin/control-site/assets

operationId
uploadControlSiteAsset
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

uploadControlSiteAsset Parameters
NameInTypeRequiredDescription
Idempotency-KeyheaderstringYes—
X-Request-IDheaderstringYes—

Request body

image/png, image/jpeg, image/webp, image/svg+xml, image/x-icon · Required:Yes

Responses

uploadControlSiteAsset Responses
StatusDescription
200Stored image

Fields:sha256?: string reference?: string url?: string mime_type?: string size_bytes?: integer created_at?: string(date-time)

400Not an accepted image or an unsafe SVG
413Larger than 2 MiB

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.

↑ Back to list

POST /v1/admin/control-site/publish

operationId
publishControlSite
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

publishControlSite Parameters
NameInTypeRequiredDescription
If-MatchheaderstringYes—
Idempotency-KeyheaderstringYes—
X-Request-IDheaderstringYes—

Responses

publishControlSite Responses
StatusDescription
200Published

Fields:schema?: const cdnca.control-site/v1 revision?: integer theme?: ThemeView | null draft?: Document published?: Document | null published_revision?: integer | null dirty?: boolean seeded?: boolean updated_at?: string(date-time) | null(date-time) published_at?: string(date-time) | null(date-time) assets?: array<Asset>

403Permission denied
409Revision conflict or nothing to publish

What to do on failure

  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

GET /v1/admin/control-site/themes

operationId
listWebsiteThemes
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Built-in, uploaded and market website theme plugins (installed or available) and the active one.

Responses

listWebsiteThemes Responses
StatusDescription
200Catalog

Fields:themes?: array<ThemeEntry> active_theme_id?: string activation_revision?: integer

403Permission denied

What to do on failure

  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.

↑ Back to list

POST /v1/admin/control-site/themes

operationId
uploadWebsiteTheme
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Validates and installs an uploaded package (id custom.*); an upload with the same id is replaced and keeps its parameters.

Parameters

uploadWebsiteTheme Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringYes—

Request body

application/json · Required:Yes

uploadWebsiteTheme Request body
NameTypeRequiredDescription
schemaconst cdnca.site-theme/v1Yes—
idstringYesofficial.site-<name> (built-in), custom.<name> (uploaded), market.<plugin id> (plugin market).
versionstringYes—
nameI18nTextYes—
descriptionI18nTextNo—
layoutstring: jidun / xmfYes—
tokensobjectNo—
imagesobjectNo—
seedSeedContentYes—

Responses

uploadWebsiteTheme Responses
StatusDescription
200Installed

Fields:themes?: array<ThemeEntry> active_theme_id?: string activation_revision?: integer

400control_site_theme_invalid with reason and field
403Permission denied
413Larger than 8 MiB

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.

↑ Back to list

DELETE /v1/admin/control-site/themes/{theme_id}

operationId
uninstallWebsiteTheme
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Uninstalls a plugin that is not active and drops its parameters; website content is kept. A market plugin stays available to install.

Parameters

uninstallWebsiteTheme Parameters
NameInTypeRequiredDescription
theme_idpathstringYes—
X-Request-IDheaderstringYes—

Responses

uninstallWebsiteTheme Responses
StatusDescription
200Uninstalled

Fields:themes?: array<ThemeEntry> active_theme_id?: string activation_revision?: integer

404Unknown theme
409control_site_theme_active or control_site_theme_not_installed

What to do on failure

  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

POST /v1/admin/control-site/themes/{theme_id}/activate

operationId
activateWebsiteTheme
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Makes an installed plugin the website's theme. The website reads the new layout's content (or the plugin seed); other layouts' content is kept.

Parameters

activateWebsiteTheme Parameters
NameInTypeRequiredDescription
theme_idpathstringYes—
If-MatchheaderstringYesActivation revision seen ("0" before any activation)
X-Request-IDheaderstringYes—

Responses

activateWebsiteTheme Responses
StatusDescription
200Activated

Fields:themes?: array<ThemeEntry> active_theme_id?: string activation_revision?: integer

403Permission denied, or control_site_theme_withdrawn
409Revision conflict, control_site_theme_not_installed or control_site_theme_unchanged

What to do on failure

  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

PUT /v1/admin/control-site/themes/{theme_id}/customization

operationId
customizeWebsiteTheme
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Token overrides (the layout whitelist) and replacement images per plugin slot (uploaded images). Empty maps restore the plugin defaults. Applies at once.

Parameters

customizeWebsiteTheme Parameters
NameInTypeRequiredDescription
theme_idpathstringYes—
If-MatchheaderstringYesCustomization revision seen ("0" for none)
X-Request-IDheaderstringYes—

Request body

application/json · Required:Yes

customizeWebsiteTheme Request body
NameTypeRequiredDescription
tokensobjectNo—
imagesobjectNo—

Responses

customizeWebsiteTheme Responses
StatusDescription
200Saved

Fields:themes?: array<ThemeEntry> active_theme_id?: string activation_revision?: integer

400Unknown token
409Revision conflict or not installed

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

POST /v1/admin/control-site/themes/{theme_id}/install

operationId
installWebsiteTheme
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Installs a built-in plugin, or a market plugin this installation is authorized for.

Parameters

installWebsiteTheme Parameters
NameInTypeRequiredDescription
theme_idpathstringYes—
X-Request-IDheaderstringYes—

Responses

installWebsiteTheme Responses
StatusDescription
200Installed

Fields:themes?: array<ThemeEntry> active_theme_id?: string activation_revision?: integer

403Permission denied, or control_site_theme_withdrawn
404Unknown theme
409control_site_theme_unchanged (already installed)

What to do on failure

  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

GET /v1/admin/control-site/themes/{theme_id}/seed

operationId
readWebsiteThemeSeed
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

readWebsiteThemeSeed Parameters
NameInTypeRequiredDescription
theme_idpathstringYes—

Responses

readWebsiteThemeSeed Responses
StatusDescription
200The plugin's default content

Fields:nav?: array<object> | null actions?: array<Link> | null footer?: object pages?: array<object> | null brand?: Brand contact?: Contact

404Unknown theme

What to do on failure

  • 404 The resource does not exist or belongs to another tenant.

↑ Back to list