openapi: 3.1.0 info: title: Salesforce Marketing Cloud REST Assets API description: The Salesforce Marketing Cloud REST API provides programmatic access to Marketing Cloud features including contacts, journeys, and assets. The API uses JSON request and response bodies and OAuth 2.0 authentication via the Marketing Cloud authentication endpoint. All API requests require a valid access token obtained through the Server-to-Server OAuth flow. version: 1.0.0 termsOfService: https://www.salesforce.com/company/legal/ contact: name: Salesforce Marketing Cloud Support url: https://help.salesforce.com/s/ email: support@salesforce.com license: name: Salesforce Master Subscription Agreement url: https://www.salesforce.com/company/legal/agreements/ servers: - url: https://{subdomain}.rest.marketingcloudapis.com description: Marketing Cloud REST API endpoint variables: subdomain: default: YOUR_SUBDOMAIN description: Your Marketing Cloud tenant-specific subdomain (e.g., mc563885gzs27c5t9-63k636ttgm). Obtain this from Setup > Apps > Installed Packages in Marketing Cloud. security: - OAuth2: [] tags: - name: Assets description: Manage marketing assets including images, documents, content blocks, and templates. The Asset API provides CRUD operations for all content types stored in Content Builder. externalDocs: description: Asset API Documentation url: https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/asset-api.html paths: /asset/v1/content/assets: get: operationId: listAssets summary: Salesforce Marketing Cloud List Assets description: Retrieves a collection of assets from Content Builder. Supports filtering, sorting, and pagination. Assets include emails, templates, images, content blocks, and other content types. tags: - Assets parameters: - name: $page in: query description: Page number for pagination (1-based) schema: type: integer default: 1 minimum: 1 - name: $pageSize in: query description: Number of assets per page schema: type: integer default: 50 minimum: 1 maximum: 200 - name: $orderBy in: query description: Field to sort results by (e.g., modifiedDate DESC, name ASC) schema: type: string - name: $filter in: query description: OData-style filter expression (e.g., assetType.name eq 'htmlemail') schema: type: string responses: '200': description: Assets retrieved successfully content: application/json: schema: $ref: '#/components/schemas/AssetCollection' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '429': description: Too many requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-microcks-operation: delay: 0 dispatcher: FALLBACK post: operationId: createAsset summary: Salesforce Marketing Cloud Create an Asset description: Creates a new asset in Content Builder. The asset type determines the required and optional fields. Common asset types include htmlemail, templatebasedemail, htmlblock, codesnippetblock, and image. tags: - Assets requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AssetDefinition' example: name: Welcome Email description: Welcome email sent to new subscribers assetType: name: htmlemail id: 208 views: html: content:

Welcome!

subjectLine: content: Welcome to our newsletter data: email: options: characterEncoding: utf-8 responses: '201': description: Asset created successfully content: application/json: schema: $ref: '#/components/schemas/Asset' '400': description: Bad request - invalid asset definition content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '429': description: Too many requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-microcks-operation: delay: 0 dispatcher: FALLBACK /asset/v1/content/assets/{id}: get: operationId: getAsset summary: Salesforce Marketing Cloud Retrieve an Asset description: Retrieves a single asset by its unique identifier. Returns the complete asset definition including content, metadata, and associated category. tags: - Assets parameters: - name: id in: path required: true description: Unique identifier of the asset schema: type: integer responses: '200': description: Asset retrieved successfully content: application/json: schema: $ref: '#/components/schemas/Asset' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Asset not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '429': description: Too many requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-microcks-operation: delay: 0 dispatcher: FALLBACK put: operationId: updateAsset summary: Salesforce Marketing Cloud Update an Asset description: Updates an existing asset. Provide the complete asset definition with all desired values. Fields not included in the request body are not modified. tags: - Assets parameters: - name: id in: path required: true description: Unique identifier of the asset schema: type: integer requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AssetDefinition' responses: '200': description: Asset updated successfully content: application/json: schema: $ref: '#/components/schemas/Asset' '400': description: Bad request - invalid asset definition content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Asset not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '429': description: Too many requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-microcks-operation: delay: 0 dispatcher: FALLBACK delete: operationId: deleteAsset summary: Salesforce Marketing Cloud Delete an Asset description: Deletes an asset from Content Builder. This action is permanent and cannot be undone. tags: - Assets parameters: - name: id in: path required: true description: Unique identifier of the asset to delete schema: type: integer responses: '200': description: Asset deleted successfully '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Asset not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '429': description: Too many requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-microcks-operation: delay: 0 dispatcher: FALLBACK /asset/v1/content/assets/query: post: operationId: queryAssets summary: Salesforce Marketing Cloud Query Assets With Advanced Filtering description: Performs an advanced query against assets using a structured query object. Supports complex filtering with AND/OR logic, nested conditions, and multiple sort criteria. More powerful than the OData-style filter on the list endpoint. tags: - Assets requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AssetQuery' example: page: page: 1 pageSize: 50 query: property: assetType.name simpleOperator: equal value: htmlemail sort: - property: modifiedDate direction: DESC fields: - id - name - assetType - modifiedDate responses: '200': description: Query results returned content: application/json: schema: $ref: '#/components/schemas/AssetCollection' '400': description: Bad request - invalid query content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '429': description: Too many requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-microcks-operation: delay: 0 dispatcher: FALLBACK /asset/v1/content/categories: get: operationId: listCategories summary: Salesforce Marketing Cloud List Asset Categories description: Retrieves categories (folders) used to organize assets in Content Builder. Categories provide a hierarchical folder structure for content organization. tags: - Assets parameters: - name: $page in: query description: Page number for pagination (1-based) schema: type: integer default: 1 - name: $pageSize in: query description: Number of categories per page schema: type: integer default: 50 - name: $filter in: query description: OData-style filter expression (e.g., parentId eq 12345) schema: type: string responses: '200': description: Categories retrieved successfully content: application/json: schema: $ref: '#/components/schemas/CategoryCollection' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '429': description: Too many requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-microcks-operation: delay: 0 dispatcher: FALLBACK components: schemas: AssetType: type: object description: Defines the type of an asset. Each type has a unique ID and name. Common types include htmlemail (208), templatebasedemail (207), htmlblock (197), codesnippetblock (220), and image (28). properties: id: type: integer description: Numeric identifier for the asset type example: abc123 name: type: string description: Name of the asset type example: Example Title Asset: type: object description: Represents a marketing asset in Content Builder. Assets include emails, templates, images, content blocks, and other content types used in marketing campaigns. properties: id: type: integer description: System-generated unique identifier for the asset example: abc123 customerKey: type: string description: Customer-defined unique key for the asset example: example_value name: type: string description: Display name of the asset example: Example Title description: type: string description: Description of the asset example: A sample description. assetType: $ref: '#/components/schemas/AssetType' category: type: object description: Category (folder) containing the asset properties: id: type: integer name: type: string parentId: type: integer example: example_value content: type: string description: Primary content of the asset, typically HTML or text depending on asset type example: example_value views: type: object description: Channel-specific content views (e.g., html, text, subjectLine, preheader) properties: html: type: object properties: content: type: string text: type: object properties: content: type: string subjectLine: type: object properties: content: type: string preheader: type: object properties: content: type: string example: example_value data: type: object description: Asset-type-specific data and configuration additionalProperties: true example: example_value tags: type: array description: Tags assigned to the asset for organization items: type: string example: [] status: type: object properties: id: type: integer name: type: string enum: - Draft - Approved example: example_value createdDate: type: string format: date-time example: '2026-01-15T10:30:00Z' modifiedDate: type: string format: date-time example: '2026-01-15T10:30:00Z' createdBy: type: object properties: id: type: integer name: type: string email: type: string example: example_value modifiedBy: type: object properties: id: type: integer name: type: string email: type: string example: example_value AssetQuery: type: object description: Advanced query object for searching assets properties: page: type: object properties: page: type: integer pageSize: type: integer example: example_value query: type: object description: Query filter criteria properties: property: type: string description: Property name to filter on simpleOperator: type: string description: Comparison operator enum: - equal - notEqual - greaterThan - greaterThanOrEqual - lessThan - lessThanOrEqual - like - isNull - isNotNull - between - IN value: description: Value to compare against dateValue: type: string format: date-time description: Date value for date-based comparisons leftOperand: type: object description: Left operand for compound queries rightOperand: type: object description: Right operand for compound queries logicalOperator: type: string enum: - AND - OR example: example_value sort: type: array items: type: object properties: property: type: string direction: type: string enum: - ASC - DESC example: [] fields: type: array description: Specific fields to include in the response items: type: string example: [] AssetDefinition: type: object description: Specification for creating or updating an asset properties: name: type: string description: Display name of the asset example: Example Title description: type: string description: Description of the asset example: A sample description. customerKey: type: string description: Customer-defined unique key example: example_value assetType: $ref: '#/components/schemas/AssetType' category: type: object properties: id: type: integer description: ID of the category (folder) to place the asset in example: example_value content: type: string description: Primary content of the asset example: example_value views: type: object description: Channel-specific content views properties: html: type: object properties: content: type: string text: type: object properties: content: type: string subjectLine: type: object properties: content: type: string preheader: type: object properties: content: type: string example: example_value data: type: object description: Asset-type-specific data additionalProperties: true example: example_value tags: type: array items: type: string example: [] required: - name - assetType ErrorResponse: type: object description: Standard error response returned by the Marketing Cloud API properties: message: type: string description: Human-readable error message example: example_value errorcode: type: integer description: Numeric error code example: 10 documentation: type: string description: URL to relevant documentation for this error example: example_value CategoryCollection: type: object description: Paginated collection of asset categories properties: count: type: integer example: 10 page: type: integer example: 10 pageSize: type: integer example: 10 items: type: array items: type: object properties: id: type: integer name: type: string parentId: type: integer description: type: string example: [] AssetCollection: type: object description: Paginated collection of assets properties: count: type: integer description: Total number of assets matching the query example: 10 page: type: integer description: Current page number example: 10 pageSize: type: integer description: Number of items per page example: 10 items: type: array items: $ref: '#/components/schemas/Asset' example: [] securitySchemes: OAuth2: type: oauth2 description: Marketing Cloud uses OAuth 2.0 client credentials flow for authentication. Obtain a client ID and secret from an installed package in Marketing Cloud Setup, then exchange them for an access token at the authentication endpoint. flows: clientCredentials: tokenUrl: https://YOUR_SUBDOMAIN.auth.marketingcloudapis.com/v2/token scopes: {}