openapi: 3.1.0 info: title: Salesforce Experience Cloud Salesforce CMS Connect API description: >- Manage content, channels, and media in Experience Cloud CMS. Supports creating, updating, and delivering managed content across channels for headless content delivery and site publishing. Part of the Salesforce Connect REST API. version: 59.0.0 contact: name: Salesforce Developer Support url: https://developer.salesforce.com/ license: name: Salesforce Master Subscription Agreement url: https://www.salesforce.com/company/legal/sfdc-website-terms-of-service/ servers: - url: https://{instance}.salesforce.com/services/data/v59.0/connect/cms description: Salesforce Instance variables: instance: default: yourInstance description: Your Salesforce instance name or custom domain security: - oauth2: [] - bearerAuth: [] tags: - name: Channels description: CMS channel management - name: Content description: CMS content management operations - name: Content Types description: CMS content type operations - name: Folders description: CMS folder management - name: Media description: CMS media file operations paths: /channels: get: operationId: listCmsChannels summary: Salesforce Experience Cloud List CMS Channels description: >- Returns a list of CMS channels available to the context user. Channels represent destinations where managed content can be published, such as Experience Cloud sites or external applications. tags: - Channels parameters: - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/PageParam' responses: '200': description: Successfully retrieved CMS channels content: application/json: schema: $ref: '#/components/schemas/ChannelCollection' '401': $ref: '#/components/responses/Unauthorized' /channels/{channelId}: get: operationId: getCmsChannel summary: Salesforce Experience Cloud Get a CMS Channel description: >- Returns details about a specific CMS channel including its name, type, domain, and the content types available in the channel. tags: - Channels parameters: - $ref: '#/components/parameters/ChannelId' responses: '200': description: Successfully retrieved CMS channel details content: application/json: schema: $ref: '#/components/schemas/Channel' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /contents: get: operationId: listCmsContents summary: Salesforce Experience Cloud List CMS Contents description: >- Returns a list of CMS content items. Supports filtering by content type, language, and channel. Returns content metadata and body fields. tags: - Content parameters: - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/PageParam' - name: managedContentType in: query description: Filter by managed content type developer name schema: type: string - name: language in: query description: Language code to filter content (e.g., en_US) schema: type: string - name: channelId in: query description: Filter content by channel ID schema: type: string - name: folderId in: query description: Filter content by folder ID schema: type: string responses: '200': description: Successfully retrieved CMS content list content: application/json: schema: $ref: '#/components/schemas/ContentCollection' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createCmsContent summary: Salesforce Experience Cloud Create CMS Content description: >- Creates a new CMS content item in the specified workspace. Requires the content type, title, and body fields defined for the content type. tags: - Content requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ContentInput' responses: '201': description: CMS content created successfully content: application/json: schema: $ref: '#/components/schemas/Content' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /contents/{contentId}: get: operationId: getCmsContent summary: Salesforce Experience Cloud Get CMS Content description: >- Returns a specific CMS content item by its ID, including all body fields, metadata, and version information. tags: - Content parameters: - $ref: '#/components/parameters/ContentId' - name: language in: query description: Language variant to retrieve schema: type: string responses: '200': description: Successfully retrieved CMS content content: application/json: schema: $ref: '#/components/schemas/Content' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateCmsContent summary: Salesforce Experience Cloud Update CMS Content description: >- Updates an existing CMS content item. Supports updating the title, body fields, and language variants. tags: - Content parameters: - $ref: '#/components/parameters/ContentId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ContentInput' responses: '200': description: CMS content updated successfully content: application/json: schema: $ref: '#/components/schemas/Content' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteCmsContent summary: Salesforce Experience Cloud Delete CMS Content description: >- Deletes the specified CMS content item. Content that is currently published must be unpublished before deletion. tags: - Content parameters: - $ref: '#/components/parameters/ContentId' responses: '204': description: CMS content deleted successfully '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /contents/{contentId}/publish: post: operationId: publishCmsContent summary: Salesforce Experience Cloud Publish CMS Content description: >- Publishes the specified CMS content item to its assigned channels, making it available for delivery. tags: - Content parameters: - $ref: '#/components/parameters/ContentId' requestBody: required: true content: application/json: schema: type: object properties: channelIds: type: array description: Channel IDs to publish to items: type: string responses: '200': description: CMS content published successfully content: application/json: schema: $ref: '#/components/schemas/PublishResult' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /contents/{contentId}/unpublish: post: operationId: unpublishCmsContent summary: Salesforce Experience Cloud Unpublish CMS Content description: >- Unpublishes the specified CMS content item, removing it from delivery channels. tags: - Content parameters: - $ref: '#/components/parameters/ContentId' requestBody: required: true content: application/json: schema: type: object properties: channelIds: type: array description: Channel IDs to unpublish from items: type: string responses: '200': description: CMS content unpublished successfully content: application/json: schema: $ref: '#/components/schemas/PublishResult' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /content-types: get: operationId: listContentTypes summary: Salesforce Experience Cloud List Content Types description: >- Returns the CMS content types available in the org, including both standard and custom content types with their field definitions. tags: - Content Types parameters: - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/PageParam' responses: '200': description: Successfully retrieved content types content: application/json: schema: $ref: '#/components/schemas/ContentTypeCollection' '401': $ref: '#/components/responses/Unauthorized' /folders: get: operationId: listCmsFolders summary: Salesforce Experience Cloud List CMS Folders description: >- Returns a list of CMS workspace folders used to organize content. tags: - Folders parameters: - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/PageParam' responses: '200': description: Successfully retrieved CMS folders content: application/json: schema: $ref: '#/components/schemas/FolderCollection' '401': $ref: '#/components/responses/Unauthorized' /media: get: operationId: listCmsMedia summary: Salesforce Experience Cloud List CMS Media description: >- Returns a list of media files (images, documents) stored in the CMS workspace. tags: - Media parameters: - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/PageParam' - name: folderId in: query description: Filter media by folder ID schema: type: string responses: '200': description: Successfully retrieved CMS media list content: application/json: schema: $ref: '#/components/schemas/MediaCollection' '401': $ref: '#/components/responses/Unauthorized' post: operationId: uploadCmsMedia summary: Salesforce Experience Cloud Upload CMS Media description: >- Uploads a media file (image, document, or video) to the CMS workspace. tags: - Media requestBody: required: true content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: The media file to upload title: type: string description: Title for the media file folderId: type: string description: Folder to upload the media into responses: '201': description: Media file uploaded successfully content: application/json: schema: $ref: '#/components/schemas/MediaFile' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /media/{mediaId}: get: operationId: getCmsMedia summary: Salesforce Experience Cloud Get CMS Media description: >- Returns metadata about a specific media file including its URL, dimensions, file type, and alt text. tags: - Media parameters: - name: mediaId in: path required: true description: The ID of the media file schema: type: string responses: '200': description: Successfully retrieved media details content: application/json: schema: $ref: '#/components/schemas/MediaFile' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteCmsMedia summary: Salesforce Experience Cloud Delete CMS Media description: >- Deletes the specified media file from the CMS workspace. tags: - Media parameters: - name: mediaId in: path required: true description: The ID of the media file schema: type: string responses: '204': description: Media file deleted successfully '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: securitySchemes: oauth2: type: oauth2 description: Salesforce OAuth 2.0 authentication flows: authorizationCode: authorizationUrl: https://login.salesforce.com/services/oauth2/authorize tokenUrl: https://login.salesforce.com/services/oauth2/token scopes: api: Access and manage your data content: Manage CMS content bearerAuth: type: http scheme: bearer bearerFormat: OAuth2 description: Bearer token obtained through OAuth 2.0 flow parameters: ChannelId: name: channelId in: path required: true description: The ID of the CMS channel schema: type: string ContentId: name: contentId in: path required: true description: The ID of the CMS content item schema: type: string PageSize: name: pageSize in: query description: Number of items per page (default 25, max 250) schema: type: integer default: 25 maximum: 250 PageParam: name: page in: query description: Page number to retrieve (0-indexed) schema: type: integer default: 0 schemas: ChannelCollection: type: object description: Collection of CMS channels properties: channels: type: array items: $ref: '#/components/schemas/Channel' currentPageUrl: type: string format: uri nextPageUrl: type: string format: uri totalCount: type: integer Channel: type: object description: A CMS delivery channel properties: channelId: type: string description: Unique identifier of the channel channelName: type: string description: Name of the channel channelType: type: string description: Type of the channel enum: - ExperienceCloudSite - CustomChannel domain: type: string description: Domain associated with the channel domainName: type: string description: Domain name of the channel isDomainLocked: type: boolean description: Whether the domain is locked isSearchable: type: boolean description: Whether content in this channel is searchable ContentCollection: type: object description: Collection of CMS content items properties: content: type: array items: $ref: '#/components/schemas/Content' currentPageUrl: type: string format: uri nextPageUrl: type: string format: uri totalCount: type: integer Content: type: object description: A CMS content item properties: contentKey: type: string description: Unique key for the content contentUrlName: type: string description: URL-friendly name for the content language: type: string description: Language code of the content managedContentId: type: string description: Managed content record ID publishedDate: type: string format: date-time description: When the content was published status: type: string description: Current status of the content enum: - Draft - Published - Archived title: type: string description: Title of the content type: type: string description: Content type developer name typeLabel: type: string description: Content type display label body: type: object description: Content body fields (varies by content type) additionalProperties: true contentNodes: type: object description: Content nodes containing field values additionalProperties: $ref: '#/components/schemas/ContentNode' ContentInput: type: object description: Input for creating or updating CMS content required: - title - contentType properties: title: type: string description: Title for the content contentType: type: string description: Developer name of the content type language: type: string description: Language code (e.g., en_US) contentBody: type: object description: Content body fields as defined by the content type additionalProperties: true urlName: type: string description: URL-friendly name for the content ContentNode: type: object description: A content node representing a field value properties: nodeType: type: string description: Type of the content node enum: - Media - MultilineText - RichText - Text - Url - DateTime - NameField value: type: string description: Text value of the node url: type: string format: uri description: URL value of the node (for Media and Url types) altText: type: string description: Alternative text (for Media type) title: type: string description: Title of the node ContentTypeCollection: type: object description: Collection of content types properties: contentTypes: type: array items: $ref: '#/components/schemas/ContentType' totalCount: type: integer ContentType: type: object description: A CMS content type definition properties: developerName: type: string description: Developer name of the content type label: type: string description: Display label of the content type fields: type: array description: Field definitions for the content type items: type: object properties: fieldName: type: string fieldType: type: string isRequired: type: boolean label: type: string PublishResult: type: object description: Result of a publish or unpublish operation properties: isSuccess: type: boolean description: Whether the operation succeeded errors: type: array items: type: object properties: errorCode: type: string message: type: string FolderCollection: type: object description: Collection of CMS folders properties: folders: type: array items: $ref: '#/components/schemas/Folder' totalCount: type: integer Folder: type: object description: A CMS workspace folder properties: folderId: type: string description: Unique identifier of the folder name: type: string description: Name of the folder parentFolderId: type: string description: ID of the parent folder MediaCollection: type: object description: Collection of CMS media files properties: items: type: array items: $ref: '#/components/schemas/MediaFile' currentPageUrl: type: string format: uri nextPageUrl: type: string format: uri totalCount: type: integer MediaFile: type: object description: A CMS media file properties: id: type: string description: Unique identifier of the media file altText: type: string description: Alternative text for the media fileName: type: string description: Original file name mediaType: type: string description: Type of media enum: - Image - Document - Video mimeType: type: string description: MIME type of the file referenceId: type: string description: Reference ID for the media title: type: string description: Display title of the media url: type: string format: uri description: URL to access the media file ErrorResponse: type: object description: Standard Salesforce API error response properties: errorCode: type: string message: type: string responses: BadRequest: description: Bad request - invalid input parameters content: application/json: schema: type: array items: $ref: '#/components/schemas/ErrorResponse' Unauthorized: description: Unauthorized - invalid or expired OAuth token content: application/json: schema: type: array items: $ref: '#/components/schemas/ErrorResponse' Forbidden: description: Forbidden - insufficient permissions content: application/json: schema: type: array items: $ref: '#/components/schemas/ErrorResponse' NotFound: description: Resource not found content: application/json: schema: type: array items: $ref: '#/components/schemas/ErrorResponse'