Available tools for CMS 13
The CMS Opal Tools package provides AI-powered tools for content management. Opal invokes all tools and requires Opti ID authenticationOpti ID authentication.
Content type tools
Manage content type definitions in CMS. These tools require CMS administrator permissions.
- paas_cms_list_content_types – Lists all content types in CMS, optionally filtered by base type (_page, _component, _media, _image, _video). Returns type name, key, base type, and property count.
Parameter | Type | Required | Description |
|---|---|---|---|
baseType | string | No | Filter by base type: _page, _component, _media, _image, _video |
- paas_cms_get_content_type_details – Retrieves detailed information about a specific content type, including all property definitions with types, validation rules, and group assignments.
Parameter | Type | Required | Description |
|---|---|---|---|
contentTypeKey | string | Yes | The key (name) of the content type |
- paas_cms_create_content_type – Creates a content type with a key, display name, base type, and property definitions. Properties support types like string, richtext, number, boolean, contentReference, and contentArea.
Parameter | Type | Required | Description |
|---|---|---|---|
key | string | Yes | Unique machine-readable key (for example, NewsArticle). |
displayName | string | Yes | Human-readable name (for example, News Article). |
description | string | No | Description of the content type's purpose. |
baseType | string | Yes | Base type: _page, _block, _component, _media, _image, or _video. |
properties | string | No | JSON array of property definitions. |
- paas_cms_update_content_type – Modifies an existing content type's display name, description, or property definitions. Can add, update, or remove properties.
Parameter | Type | Required | Description |
|---|---|---|---|
contentTypeKey | string | Yes | The key of the content type to update. |
displayName | string | No | Display name. |
description | string | No | Description. |
properties | string | No | JSON array of property definitions to add or update. |
- paas_cms_delete_content_type – Deletes a content type from CMS. The content type must not have any existing content instances.
Parameter | Type | Required | Description |
|---|---|---|---|
contentTypeKey | string | Yes | The key of the content type to delete. |
Property group tools
Manage property groups (tabs) used to organize content type properties in the editing UI. These tools require CMS administrator permissions.
- paas_cms_list_property_groups – Lists all property groups in CMS with their names and sort order.
- paas_cms_create_property_group – Creates a property group with a unique key and optional sort order.
Parameter | Type | Required | Description |
|---|---|---|---|
key | string | Yes | Unique machine-readable key (for example, SEO_Settings). |
sortOrder | integer | No | Display sort order in the CMS UI (default: 100). |
Content item tools
Create, read, update, and delete content items. All operations respect the authenticated user's CMS permissions.
- paas_cms_get_content_data – Retrieves a content item's data including all non-metadata properties. Fetches a specific version or the latest published version.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | Yes | GUID of the content item. |
contentVersion | integer | No | Specific version number (omit for latest published). |
- paas_cms_update_content_item – Creates or updates a content item. Omit contentKey to create a item and set its properties in a single call (requires contentType, displayName, and locale). Provide contentKey and contentVersion to update an existing item. Returns the contentKey and contentVersion for subsequent operations such as publishing.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | No | GUID of the content item to update. Omit to create an item. |
contentVersion | integer | No | Version number to update. Required when updating an existing item. Use 0 for published content (a draft is created automatically). Omit when creating. |
properties | object | Yes | JSON object of property name and value pairs. Uses JSON Merge Patch semantics: only provided properties are updated. See Property write outcomes. |
composition | object | No | Composition layout for Experience content types. Contains a nodes array that describes the section, row, column, and component hierarchy. See Composition writes. |
allowNodeRemoval | boolean | No | Permits a composition write that detaches nodes stored on the experience. Defaults to false, so the tool refuses such a write and names the nodes that would be lost. |
contentType | string | No | Content type name. Required when creating (that is, contentKey is omitted). |
displayName | string | No | Display name for the content item. Required when creating. |
container | string | No | GUID of the parent container. Omit for default placement. Only used when creating. |
routeSegment | string | No | URL segment for page routing (for example, about-us). Only used when creating. |
locale | string | No | Locale code (for example, en or sv). Required when creating. |
- paas_cms_delete_content_item – Moves a content item to the waste basket. An editor can restore the item.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | Yes | GUID of the content item to delete. |
- paas_cms_publish_content_item – Publishes a content item immediately or schedules it for a future date and time. Requires a content version number.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | Yes | GUID of the content item. |
contentVersion | integer | Yes | Version number to publish. |
scheduledPublishDate | string | No | ISO 8601 date and time for scheduled publishing. |
Composition writes
A composition write updates the stored layout of an Experience content item. Read the layout with paas_cms_get_content_data, change the parts you want, and send it back. A layout written back exactly as read stays unchanged. You do not have to send the whole tree on every write (see the following paragraph on omitting nodes).
Each node keeps its identity through propertyBinding on sections and components, or id on rows and columns. A node that carries a resolvable identity keeps its stored content, display template, and display settings. The tool creates a new node when the identity cannot be resolved.
Omitting the nodes array on a section, row, or column keeps the children stored under it. Sending "nodes": [] empties it. This distinction lets you edit one branch of the layout without listing the whole tree.
The tool refuses a write that would detach stored nodes and names up to 10 of them. Re-list the missing nodes, or omit nodes on their parent to keep its children. Set allowNodeRemoval to true when you intend to remove the nodes. Removed nodes stay in CMS 13 and lose their place on the experience.
A response that includes a composition reports the counts of added, removed, and retained nodes.
Property write outcomes
paas_cms_update_content_item confirms that each property you supply is stored. When you supply properties, the response includes a properties array with one entry per property. Read it to confirm a write took effect without fetching the content item again.
The properties array reports one of three outcomes per property:
- written – A value is stored, or you supplied an empty value and the stored value is empty.
- notPersisted – You supplied a value and nothing is stored. The tool reports the update as a failure.
- unverified – The stored value could not be read back. The tool reports the update as a success.
The check confirms that a value is stored, not that it matches what you sent. CMS 13 reshapes some values as it saves them, such as normalizing rich text or reducing date precision. Those values still report written.
A notPersisted property sets "success": false on the response. The save still happened, and the other properties are stored. For the causes and what to do next, go to Troubleshoot Optimizely Opal tools.
Content variation tool
Create locale variations (translations) of existing content items.
- paas_cms_create_content_variation – Creates a locale variation of a page or experience content item. After creation, use paas_cms_update_content_item to set properties that differ from the default version.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | Yes | GUID of the content item. |
variationKey | string | Yes | Unique key for the variation (for example, Holiday2024). |
locale | string | No | Locale code for the variation. |
displayName | string | No | Display name (defaults to variation key). |
Preview tool
Generate preview URLs for content items.
- paas_cms_get_content_preview_url – Generates a preview URL for a specific content version, letting Opal fetch and analyze the rendered HTML.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | Yes | GUID of the content item. |
contentVersion | integer | Yes | Version number to preview. |
SEO tools
AI-powered Search Engine Optimization (SEO) analysis and editing capabilities.
- paas_cms_seo_analysis – Analyzes content SEO performance and provides AI-powered recommendations. Extracts all content properties and metadata for comprehensive analysis including title tags, meta descriptions, heading structure, and keyword optimization.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | Yes | GUID of the content item. |
question | string | No | Focus area for the analysis. |
previewUrl | string | No | Preview URL for rendered HTML analysis. |
- paas_cms_seo_edit – Applies SEO recommendations to CMS content. Provides an interactive form for editing SEO fields such as meta titles, descriptions, and social media tags. Use after running SEO analysis.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | Yes | GUID of the content item. |
recommendedValues | string | No | JSON object of recommended SEO values. |
actualPropertyNames | string | No | JSON object mapping SEO field names to CMS property names. |
GEO tools
Analyze content for large language model (LLM) discoverability and apply JSON-LD schema markup for Generative Engine Optimization (GEO).
- paas_cms_geo_analysis – Performs an AI-powered audit of content for LLM discoverability. Analyzes reachability, robots controls, structured data, content clarity, performance signals, and so on. Generates JSON-LD schema recommendations.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | Yes | GUID of the content item. |
previewUrl | string | Yes | Preview URL for the rendered page. |
question | string | No | Focus area for the analysis. |
- paas_cms_geo_apply – Applies JSON-LD schema templates to the content's JsonLdTemplates property. Creates a draft version with the schema markup.
Parameter | Type | Required | Description |
|---|---|---|---|
contentKey | string | Yes | GUID of the content item. |
jsonLdTemplates | string | Yes | JSON-LD schema templates to apply. |
Display template tools
Manage display templates (Visual Builder styles and layouts).
A display template is scoped to exactly one of the following:
- A specific content type. For example, HeroBlock or ArticlePage.
- A Visual Builder base type. Section or Experience (the _section and _experience forms are also accepted).
- A layout node type. experience, section, row, or column.
Tools list
- paas_cms_list_display_templates – Lists all display templates. Takes no parameters.
- paas_cms_get_display_template – Retrieves one or more display templates by key. Provide either Key or Keys.
Parameter | Type | Required | Description |
|---|---|---|---|
Key | string | No* | Key of a single template to retrieve. Maximum 256 characters. |
Keys | string | No* | Comma-separated list of keys for a batch fetch (maximum 20), for example, HeroBlockWide,DefaultSection. |
- paas_cms_create_display_template – Creates a display template. Scope the template to exactly one of NodeType, BaseType, or ContentType.
Parameter | Type | Required | Description |
|---|---|---|---|
DisplayName | string | Yes | Human-readable display name. Maximum 255 characters. |
Key | string | No | Unique key (for example, HeroBlockWide). Auto-generated if omitted. Maximum 256 characters. |
NodeType | string | No | Layout node type: experience, section, row, or column (case-insensitive). experience and section are stored as the corresponding base type automatically. Maximum 50 characters. |
BaseType | string | No | Visual Builder base type: Section or Experience (_section or _experience also accepted). |
ContentType | string | No | Content type key (for example, HeroBlock). Maximum 256 characters. |
IsDefault | boolean | No | Whether this is the default template for the scope. Defaults to false. |
Settings | object | No | Settings as a JSON object. Each key maps to an object with displayName and choices (a map of choice key to display name). |
- paas_cms_update_display_template – Updates an existing display template. Only provided fields are updated. Omitted fields are unchanged.
Parameter | Type | Required | Description |
|---|---|---|---|
Key | string | Yes | Key of the template to update. Maximum 256 characters. |
DisplayName | string | No | Display name. Maximum 255 characters. |
NodeType | string | No | Layout node type (experience, section, row, or column). Leave blank to keep it unchanged. If BaseType is also provided, BaseType takes precedence and the node type is cleared. Maximum 50 characters. |
BaseType | string | No | Base type: Section or Experience (_section or _experience accepted). |
ContentType | string | No | Content type key association. Maximum 256 characters. |
IsDefault | boolean | No | Whether this is the default template for the scope. |
Settings | object | No | Uses REPLACE semantics. When provided, the entire settings collection is replaced. Omit to leave settings unchanged. |
Media tool
Upload media assets into CMS.
- paas_cms_upload_media – Downloads a file from a publicly accessible URL and uploads it as a media asset in CMS.
Parameter | Type | Required | Description |
|---|---|---|---|
FileUrl | string | Yes | HTTP or HTTPS URL of a publicly accessible file to download and upload. |
FileName | string | Yes | Filename with extension (for example, photo.jpg). The extension determines the MIME type. Maximum 255 characters. |
DisplayName | string | No | Display name in CMS. Defaults to FileName. Maximum 255 characters. |
ContentType | string | No | CMS media content type name. If omitted, auto-selected by matching the file extension to registered media types. Maximum 256 characters. |
Container | string | No | Parent container GUID. Defaults to the global shared asset folder. Maximum 68 characters. |