Optimizely Structured Contents API
The Structured Contents API from Optimizely — 11 operation(s) for structured contents.
The Structured Contents API from Optimizely — 11 operation(s) for structured contents.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/optimizely-structured-contents-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
version: V3
title: Optimizely CMP Open API Documentation Structured Contents API
servers:
- url: https://api.cmp.optimizely.com/v3
description: v3 version of Optimizely CMP Open API
security:
- OAuth2:
- openid
- profile
- offline_access
tags:
- name: Structured Contents
paths:
/structured-content/content-types:
get:
operationId: listSCContentTypes
tags:
- Structured Contents
summary: GET /structured-content/content-types
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get content types. '
parameters:
- required: false
schema:
type: string
description: Source of the content type
name: source
in: query
- required: false
schema:
type: boolean
default: true
description: Disabled status of the content type
name: disabled
in: query
- required: false
schema:
$ref: '#/components/schemas/ContentTypeListingOption'
default: '3'
name: list
in: query
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BaseContentTypeModel'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
post:
operationId: createSCContentType
tags:
- Structured Contents
summary: POST /structured-content/content-types
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Create content type. '
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeCreateRequest'
required: true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeCreateResponse'
'201':
description: Created
headers:
Location:
description: URL to get the created resource
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeCreateResponse'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/structured-content/content-types/{content_type_id}:
get:
operationId: getSCContentType
tags:
- Structured Contents
summary: GET /structured-content/content-types/{content_type_id}
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get content type. '
parameters:
- required: true
schema:
type: string
description: Unique identifier of the content type
name: content_type_id
in: path
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentType'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
post:
operationId: updateSCContentType
tags:
- Structured Contents
summary: POST /structured-content/content-types/{content_type_id}
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Update content type. '
parameters:
- required: true
schema:
type: string
description: Unique identifier of the content type
name: content_type_id
in: path
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeUpdateRequest'
required: true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeUpdateResponse'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/structured-content/content-types/{content_type_id}/versions:
get:
operationId: listSCContentTypeVersions
tags:
- Structured Contents
summary: GET /structured-content/content-types/{content_type_id}/versions
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get content type versions. '
parameters:
- required: true
schema:
type: string
description: Unique identifier of the content type
name: content_type_id
in: path
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BaseContentTypeVersionModel'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
post:
operationId: createSCContentTypeVersion
tags:
- Structured Contents
summary: POST /structured-content/content-types/{content_type_id}/versions
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Add Content Type Version. '
parameters:
- required: true
schema:
type: string
description: Unique identifier of the content type
name: content_type_id
in: path
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeVersionCreateRequest'
required: true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeCreateResponse'
'201':
description: Created
headers:
Location:
description: URL to get the created resource
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeCreateResponse'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/structured-content/content-types/{content_type_id}/versions/{version_id}:
get:
operationId: getSCContentTypeVersion
tags:
- Structured Contents
summary: GET /structured-content/content-types/{content_type_id}/versions/{version_id}
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get content type version. '
parameters:
- required: true
schema:
type: string
description: Unique identifier of the content type
name: content_type_id
in: path
- required: true
schema:
type: string
description: Unique identifier of the content type version
name: version_id
in: path
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeVersion'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/structured-content/contents/{content_id}/migration:
post:
operationId: migrateSCContent
tags:
- Structured Contents
summary: POST /structured-content/contents/{content_id}/migration
description: Migrate content to a specific content type version. <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span>
parameters:
- required: true
schema:
type: string
description: Unique identifier of the content
name: content_id
in: path
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentMigrationCreateRequest'
required: true
responses:
'201':
description: Successful response
content:
application/json:
schema:
type: object
properties:
created:
type: boolean
description: Whether the version was created or not
content_guid:
type: string
description: The identifier of the content
version_guid:
type: string
description: The identifier of the content version
content_hash:
type: string
description: The hashed fingerprint of the content version
'400':
$ref: '#/components/responses/ClientError'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/ClientError'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/structured-content/contents/{content_id}/versions/{version_id}/previews/{preview_id}/acknowledge:
post:
operationId: acknowledgeSCContentPreview
tags:
- Structured Contents
summary: POST /structured-content/contents/{content_id}/versions/{version_id}/previews/{preview_id}/acknowledge
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Acknowledge content preview. Content preview can be acknowledged only once. So make sure you are acknowledging only the content previews targeted for your integration. Otherwise it will stall acknowledgment from other integrations.
parameters:
- required: true
schema:
type: string
description: Unique identifier of the content
name: content_id
in: path
- required: true
schema:
type: string
description: Unique identifier of the content version
name: version_id
in: path
- required: true
schema:
type: string
description: Unique identifier of the content version preview
name: preview_id
in: path
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentPreviewAcknowledgeRequest'
required: true
responses:
'200':
description: Successful response
content:
application/json:
schema: {}
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/structured-content/contents/{content_id}/versions/{version_id}/previews/{preview_id}/complete:
post:
operationId: completeSCContentPreview
tags:
- Structured Contents
summary: POST /structured-content/contents/{content_id}/versions/{version_id}/previews/{preview_id}/complete
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Complete content preview. '
parameters:
- required: true
schema:
type: string
description: Unique identifier of the content
name: content_id
in: path
- required: true
schema:
type: string
description: Unique identifier of the content version
name: version_id
in: path
- required: true
schema:
type: string
description: Unique identifier of the content version preview
name: preview_id
in: path
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentPreviewCompleteRequest'
required: true
responses:
'200':
description: Successful response
content:
application/json:
schema: {}
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/structured-content/content-types/{content_type_id}/managed-migrations:
post:
operationId: createSCContentTypeManagedMigration
tags:
- Structured Contents
summary: POST /structured-content/content-types/{content_type_id}/managed-migrations
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Create a new managed migration job.
parameters:
- name: content_type_id
in: path
required: true
example: 645cb61c966d0c591320f636
schema:
type: string
description: Unique identifier of the content type.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeManagedMigrationCreateRequest'
required: true
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
created:
type: boolean
description: False if the managed migration job is not created.
required:
- created
'201':
description: Created.
content:
application/json:
schema:
type: object
properties:
created:
type: boolean
description: True if the managed migration job is created.
job_id:
type: string
description: The ID of the created managed migration job.
required:
- created
'400':
$ref: '#/components/responses/ClientError'
'404':
$ref: '#/components/responses/NotFound'
get:
operationId: listSCContentTypeManagedMigrations
tags:
- Structured Contents
summary: GET /structured-content/content-types/{content_type_id}/managed-migrations
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Retrieves a list of managed migration jobs for a specific content type.
parameters:
- name: content_type_id
in: path
required: true
example: 645cb61c966d0c591320f636
schema:
type: string
description: Unique identifier of the content type.
- name: content_migration_summary
in: query
required: false
description: Whether include a summary of content migration status (total, not started, succeeded, errored).
example: true
schema:
type: boolean
default: false
- name: offset
in: query
required: false
description: Pagination offset (number of jobs to skip).
example: 10
schema:
type: integer
minimum: 0
default: 0
- name: limit
in: query
required: false
description: Pagination limit (number of jobs to return).
example: 25
schema:
type: integer
minimum: 1
default: 100
responses:
'200':
description: List of managed migration jobs for the content type.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SCContentTypeManagedMigrationResponse'
/structured-content/content-types/{content_type_id}/managed-migrations/{job_id}/start:
post:
operationId: startSCContentTypeManagedMigration
tags:
- Structured Contents
summary: POST /structured-content/content-types/{content_type_id}/managed-migrations/{job_id}/start
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Start managed migration job.
parameters:
- required: true
schema:
type: string
description: content type id.
name: content_type_id
in: path
- required: true
schema:
type: string
description: Unique identifier of the job.
name: job_id
in: path
responses:
'200':
description: Successful response with started=true
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeManagedMigrationStartResponse'
example:
started: true
job_id: sample_job_id
'400':
description: Error response when job found by job_id but job status is invalid (status not in [error or not_started])
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPException'
example:
detail: 'No Job found for job_id: {job_id} and instance_id: {instance_id} with status not_started or error'
'404':
description: Error response when no job found by job_id with status not_started, error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPException'
example:
message: 'No Job found for job_id: {job_id} and instance_id: {instance_id}.'
/structured-content/content-types/{content_type_id}/managed-migrations/{job_id}:
get:
operationId: getSCContentTypeManagedMigration
tags:
- Structured Contents
summary: GET /structured-content/content-types/{content_type_id}/managed-migrations/{job_id}
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get details of a specific managed migration job.
parameters:
- name: content_type_id
in: path
required: true
example: 645cb61c966d0c591320f636
schema:
type: string
description: Unique identifier of the content type.
- name: job_id
in: path
required: true
schema:
type: string
description: The ID of the managed migration job.
responses:
'200':
description: Successful response.
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeManagedMigrationResponse'
'404':
description: Not Found.
content:
application/json:
schema:
type: object
properties:
detail:
type: string
description: The error message.
patch:
operationId: updateSCContentTypeManagedMigration
tags:
- Structured Contents
summary: PATCH /structured-content/content-types/{content_type_id}/managed-migrations/{job_id}
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Update a managed migration job.
parameters:
- name: content_type_id
in: path
required: true
example: 645cb61c966d0c591320f636
schema:
type: string
description: Unique identifier of the content type.
- name: job_id
in: path
required: true
schema:
type: string
description: Unique identifier of the managed migration job.
requestBody:
description: Payload for default field values.
required: true
content:
application/json:
schema:
type: object
description: Default values for the managed migration job content.
additionalProperties: false
properties:
default_values:
$ref: '#/components/schemas/LocalizedFieldValues'
required:
- default_values
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
updated:
type: boolean
description: True if the managed migration job is updated.
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
operationId: deleteSCContentTypeManagedMigration
tags:
- Structured Contents
summary: DELETE /structured-content/content-types/{content_type_id}/managed-migrations/{job_id}
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Delete a managed migration job with not_started status.
parameters:
- name: content_type_id
in: path
required: true
example: 645cb61c966d0c591320f636
schema:
type: string
description: Unique identifier of the content type.
- required: true
schema:
type: string
description: Unique identifier of the managed migration job.
name: job_id
in: path
responses:
'204':
description: Successful response
'400':
$ref: '#/components/responses/ClientError'
'404':
$ref: '#/components/responses/NotFound'
/structured-content/content-types/{content_type_id}/managed-migrations/validate:
post:
operationId: validateSCContentTypeManagedMigration
tags:
- Structured Contents
summary: POST /structured-content/content-types/{content_type_id}/managed-migrations/validate
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Check managed migration possible or not.
parameters:
- name: content_type_id
in: path
required: true
example: 645cb61c966d0c591320f636
schema:
type: string
description: Unique identifier of the content type.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SCContentTypeManagedMigrationValidateRequest'
required: true
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
is_managed_migration_possible:
type: boolean
description: False if the managed migration not possible
required:
- is_managed_migration_possible
'404':
description: Error response when no content type found by content_type_id and instance_id
content:
application/json:
schema:
type: object
properties:
detail:
type: string
description: error message details
required:
- detail
example:
detail: Could not find the content type
components:
schemas:
SCContentTypeCreateRequest:
required:
- field_definitions
- created_by
- details
type: object
properties:
details:
$ref: '#/components/schemas/CoreContentType'
source:
type: string
description: Source for the content type
field_definitions:
type: array
items:
anyOf:
- $ref: '#/components/schemas/ContentTypeFieldDefinition'
- $ref: '#/components/schemas/LibraryAssetFieldDefinition'
- $ref: '#/components/schemas/TextFieldDefinition'
- $ref: '#/components/schemas/BaseFieldDefinition'
- $ref: '#/components/schemas/DatetimeFieldDefinition'
- $ref: '#/components/schemas/RichTextFieldDefinition'
- $ref: '#/components/schemas/ChoiceFieldDefinition'
- $ref: '#/components/schemas/NumberFieldDefinition'
created_by:
type: string
description: Unique identifier of the user who is creating the content type
expected_locales:
type: array
description: Expected locales for the content type
items:
type: string
source_id:
type: string
description: Source ID for the content type
source_metadata:
type: string
description: Source metadata for the content type
SCContentTypeCreateResponse:
required:
- created
type: object
properties:
created:
type: boolean
description: Created status of the requested content type
content_type_guid:
type: string
description: Unique identifier of the content type
content_type_version_guid:
type: string
description: Unique identifier of the content type version
AllowedContentTypeItem:
required:
- name
- url
type: object
properties:
name:
type: string
description: Name of the item
url:
type: string
description: URL of the item
LocationDefaultValue:
required:
- longitude
- latitude
type: object
properties:
longitude:
type: number
description: Longitude of the location
latitude:
type: number
description: Latitude of the location
ContentTypeFieldDefinition:
required:
- core
- allowed_content_types
- ref_type
type: object
properties:
core:
$ref: '#/components/schemas/CoreFieldDef'
allowed_content_types:
type: array
description: List of allowed content types
items:
type: string
ref_type:
$ref: '#/components/schemas/ContentTypeFieldEmbedMixConfig'
allow_ref_edit:
type: boolean
description: Whether to allow ref editing
content_type_links:
type: object
description: Links related to the content type
additionalProperties:
$ref: '#/components/schemas/AllowedContentTypeItem'
default_value:
type: string
description: Default value for the field
ContentFieldValueExpandedModel:
required:
- content_guid
- embedded
- content_details
type: object
properties:
embedded:
type: boolean
description: Indicates whether the field value is embedded
order_index:
type: integer
description: Order index of the field value
content_guid:
type: string
description: Content GUID of the field value
content_url:
type: string
description: Content URL of the field value
content_details:
$ref: '#/components/schemas/ContentDetailsModel'
LibraryAssetType:
enum:
- article
- image
- video
- raw_file
- structured_content
type: string
description: An enumeration.
ContentTypeFieldEmbedMixConfig:
enum:
- 1
- 2
- 3
type: integer
description: "Ref Type:\n * `1` Refer only\n * `2` Refer and create embed\n * `3` Create only\n"
SCContentTypeManagedMigrationValidateRequest:
type: object
properties:
source_content_type_version_id:
type: string
description: The ID of the source content type version to migrate from.
default_values:
type: object
description: Default values for the migration, if any.
$ref: '#/components/schemas/LocalizedFieldValues'
required:
- source_content_type_version_id
BaseFieldDefinitionType:
enum:
- boolean
- json
- url
- location
type: string
description: An enumeration.
SCContentPreviewCompleteRequest:
required:
- keyed_previews
type: object
properties:
keyed_previews:
type: object
additionalProperties:
anyOf:
- maxLength: 65536
minLength: 1
type: string
format: uri
- $ref: '#/components/schemas/KeyedPreviewCompletedModel'
- $ref: '#/components/schemas/KeyedPreviewErrorModel'
VersionedContentTypeModel:
required:
- name
- component
- content_type_guid
- created_by
- updated_by
- created_at
- updated_at
- links
- version
type: object
properties:
name:
type: string
description: Name of the content type
description:
type: string
description: Description of the content type
component:
type: boolean
description: Indicates whether the content type is a component
disabled:
type: boolean
description: Disabled status of the content type
source:
type: string
description: Source of the content type
version:
$ref: '#/components/schemas/SCContentTypeVersion'
thumbnail_guid:
type: string
description: Thumbnail GUID of the content type
content_type_guid:
type: string
description: Unique identifier of the content type
created_by:
type: string
description: Unique identifier of the user who created the content type
updated_by:
type: string
description: Unique identifier of the user who last updated the content type
created_at:
type: string
format: date-time
description: Date and time on which the content type was created, in ISO 8601 UTC format
updated_at:
type: string
format: date-time
description: Date and time on which the content type was last updated, in ISO 8601 UTC format
source_id:
type: string
description: Source of the content type
source_metadata:
type: string
description: Source metadata of the content type
links:
type: object
description: Meta links
properties:
self:
type: string
description: URL of the content type
example: https://api.cmp.optimizely.com/v3/structured-content/content-types/9fda53cf66a14fd487251480ca695c7b
versions:
type: string
description: URL of the content type versions
example: https://api.cmp.optimizely.com/v3/structured-content/content-types/9fda53cf66a14fd487251480ca695c7b/versions
ChoiceDisplayOption:
enum:
- radio
- dropdown
- tag
- checkbox
type: string
description: An enumeration.
LocationFieldValueModel:
required
# --- truncated at 32 KB (63 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/optimizely/refs/heads/main/openapi/optimizely-structured-contents-api-openapi.yml