openapi: 3.2.0 info: title: dotCMS REST Publishing API version: '3' description: Push publishing job management endpoints servers: - url: / description: dotCMS Server tags: - name: Publishing description: Push publishing job management endpoints paths: /api/auditPublishing/get/{bundleId}: get: tags: - Publishing operationId: get_2 parameters: - name: bundleId in: path required: true schema: pattern: .* type: string responses: default: description: default response content: text/xml: {} summary: Get 2 x-summary-source: derived /api/auditPublishing/getAll: post: tags: - Publishing operationId: getAll requestBody: content: '*/*': schema: type: array items: type: string responses: default: description: default response content: application/json: {} summary: Get all x-summary-source: derived /api/v1/publishqueue: delete: tags: - Publishing operationId: deleteAssetsByIdentifiers requestBody: content: '*/*': schema: $ref: '#/components/schemas/DeletePPQueueElementsByIdentifierForm' responses: default: description: default response content: application/json: {} summary: Delete assets by identifiers x-summary-source: derived /api/v1/bundles/assets: post: tags: - Publishing summary: Add assets to a bundle description: 'Adds assets to an existing bundle or creates a new bundle. Bundle resolution: (1) look up by bundleId, (2) if not found, look up unsent bundles by bundleName, (3) if still not found, auto-create a new bundle. A non-matching bundleId does NOT return 404 — it falls through to name lookup and then auto-creation. Assets already in the bundle are silently skipped (idempotent). Individual asset failures (e.g., no publish permission) are reported in the errors list as human-readable strings, not as HTTP errors.' operationId: addAssetsToBundle requestBody: description: Assets to add and target bundle information content: application/json: schema: $ref: '#/components/schemas/AddAssetsToBundleForm' required: true responses: '200': description: Assets processed (check errors list for per-asset failures) content: application/json: schema: $ref: '#/components/schemas/ResponseEntityAddAssetsToBundleView' '400': description: Invalid request (e.g., empty assetIds) content: application/json: {} '401': description: Unauthorized - authentication required content: application/json: {} '403': description: Forbidden - insufficient permissions content: application/json: {} '404': description: bundleId provided but not found and no bundleName fallback content: application/json: {} '409': description: Cannot add assets while bundle is in BUNDLING, SENDING_TO_ENDPOINTS, or PUBLISHING_BUNDLE status content: application/json: {} '500': description: Internal server error content: application/json: {} /api/v1/bundles/{bundleId}/assets: delete: tags: - Publishing summary: Remove assets from an unpushed bundle description: Removes one or more assets from an unpushed bundle. Each asset is processed independently with per-asset results. Assets not found in the bundle return success=false. operationId: removeAssetsFromBundle parameters: - name: bundleId in: path description: Bundle identifier required: true schema: type: string example: 550e8400-e29b-41d4-a716-446655440000 requestBody: description: Assets to remove from the bundle content: application/json: schema: $ref: '#/components/schemas/RemoveAssetsFromBundleForm' required: true responses: '200': description: Removal completed (check per-asset success flags) content: application/json: schema: $ref: '#/components/schemas/ResponseEntityRemoveAssetsFromBundleView' '400': description: Invalid request (e.g., blank bundleId, empty assetIds) content: application/json: {} '401': description: Unauthorized - authentication required content: application/json: {} '403': description: Forbidden - insufficient permissions content: application/json: {} '404': description: Bundle not found content: application/json: {} '409': description: Cannot remove assets while bundle is in BUNDLING, SENDING_TO_ENDPOINTS, or PUBLISHING_BUNDLE status content: application/json: {} '500': description: Internal server error content: application/json: {} /api/v1/publishing/{bundleId}: get: tags: - Publishing summary: Get publishing job details description: Returns detailed status, environments, endpoints, and timestamps for a specific publishing bundle. Includes per-endpoint success/failure status with error messages and stack traces for failed endpoints. operationId: getPublishingJobDetails parameters: - name: bundleId in: path description: Bundle identifier required: true schema: type: string example: 01KJWNJM2C67DM56GHBJ4S7B89 responses: '200': description: Publishing job details retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ResponseEntityPublishingJobDetailView' '400': description: Invalid bundle ID format content: application/json: {} '401': description: Unauthorized - authentication required content: application/json: {} '403': description: Forbidden - insufficient permissions content: application/json: {} '404': description: Bundle not found content: application/json: {} delete: tags: - Publishing summary: Delete a publishing job description: Removes a specific bundle from the publishing queue. Cannot delete bundles that are actively publishing (BUNDLING, SENDING_TO_ENDPOINTS, PUBLISHING_BUNDLE). operationId: deletePublishingJob parameters: - name: bundleId in: path description: Bundle identifier required: true schema: type: string example: 01KJWNJM2C67DM56GHBJ4S7B89 responses: '200': description: Bundle deleted successfully content: application/json: schema: type: object description: Success response with message example: message: Bundle deleted successfully '401': description: Unauthorized - authentication required content: application/json: {} '403': description: Forbidden - insufficient permissions content: application/json: {} '404': description: Bundle not found in either the publishing audit history or the bundle table content: application/json: {} '409': description: Cannot delete bundle while publishing is in progress content: application/json: {} /api/v1/publishing: get: tags: - Publishing summary: List publishing jobs description: Returns a paginated list of publishing jobs combining audit status and bundle metadata. Supports filtering by status and bundle name/ID. Each job includes asset preview (first 3 assets), environment count, and timing information. operationId: listPublishingJobs parameters: - name: page in: query description: Page number (starts from 1) schema: type: integer format: int32 default: 1 example: 1 - name: per_page in: query description: Results per page (1-500) schema: type: integer format: int32 default: 50 example: 50 - name: filter in: query description: Case-insensitive partial match filter on bundle_id and bundle name schema: type: string example: staging - name: status in: query description: 'Comma-separated status values to filter (e.g., SUCCESS,FAILED_TO_PUBLISH). Valid values: SCHEDULED, BUNDLE_REQUESTED, WAITING_FOR_PUBLISHING, BUNDLING, SENDING_TO_ENDPOINTS, PUBLISHING_BUNDLE, BUNDLE_SENT_SUCCESSFULLY, RECEIVED_BUNDLE, BUNDLE_SAVED_SUCCESSFULLY, SUCCESS, SUCCESS_WITH_WARNINGS, FAILED_TO_BUNDLE, FAILED_TO_SENT, FAILED_TO_SEND_TO_ALL_GROUPS, FAILED_TO_SEND_TO_SOME_GROUPS, FAILED_TO_PUBLISH, FAILED_INTEGRITY_CHECK, INVALID_TOKEN, LICENSE_REQUIRED. SCHEDULED = bundles pushed with a future publishDate not yet picked up by the publisher cron.' schema: type: string example: SUCCESS,FAILED_TO_PUBLISH responses: '200': description: Publishing jobs retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ResponseEntityPublishingJobsView' '400': description: Invalid request parameters (e.g., invalid status value, pagination out of range) content: application/json: {} '401': description: Unauthorized - authentication required content: application/json: {} '403': description: Forbidden - insufficient permissions content: application/json: {} /api/v1/publishing/purge: delete: tags: - Publishing summary: Bulk delete publishing jobs by status description: 'Removes all bundles matching the specified status filter. Cannot purge in-progress bundles (BUNDLING, SENDING_TO_ENDPOINTS, PUBLISHING_BUNDLE). If no status specified, uses safe defaults (all terminal + queued statuses). IMPORTANT: This endpoint processes asynchronously. Results are delivered via WebSocket system messages to browser clients. Non-browser API clients will not receive completion notifications.' operationId: purgePublishingJobs parameters: - name: status in: query description: 'Comma-separated status values to purge. If omitted, uses safe defaults (all terminal + queued, excludes in-progress). Cannot include: BUNDLING, SENDING_TO_ENDPOINTS, PUBLISHING_BUNDLE. Valid values: BUNDLE_REQUESTED, WAITING_FOR_PUBLISHING, BUNDLE_SENT_SUCCESSFULLY, RECEIVED_BUNDLE, BUNDLE_SAVED_SUCCESSFULLY, SUCCESS, SUCCESS_WITH_WARNINGS, FAILED_TO_BUNDLE, FAILED_TO_SENT, FAILED_TO_SEND_TO_ALL_GROUPS, FAILED_TO_SEND_TO_SOME_GROUPS, FAILED_TO_PUBLISH, FAILED_INTEGRITY_CHECK, INVALID_TOKEN, LICENSE_REQUIRED' schema: type: string example: SUCCESS,FAILED_TO_PUBLISH responses: '200': description: Purge operation initiated (processes in background). The result is delivered as a system notification to the triggering user's browser session. Non-browser API clients will not receive the completion event. content: application/json: schema: $ref: '#/components/schemas/ResponseEntityPurgeView' '400': description: Invalid status value or attempted to purge in-progress statuses content: application/json: {} '401': description: Unauthorized - authentication required content: application/json: {} '403': description: Forbidden - insufficient permissions content: application/json: {} /api/v1/publishing/push/{bundleId}: post: tags: - Publishing summary: Push bundle to environments description: Queues an existing bundle for publishing to specified environments. The bundle must exist and have assets already added. Supports publish, expire, and publishexpire operations with ISO 8601 date/time format. operationId: pushBundle parameters: - name: bundleId in: path description: Bundle identifier required: true schema: type: string example: 01KJWNJM2C67DM56GHBJ4S7B89 requestBody: description: Push configuration including operation type, dates, environments, and filter content: application/json: schema: $ref: '#/components/schemas/PushBundleForm' required: true responses: '200': description: Bundle successfully queued for publishing content: application/json: schema: $ref: '#/components/schemas/ResponseEntityPushBundleResultView' '400': description: Invalid request (missing required fields, invalid operation, invalid date format) content: application/json: {} '401': description: Unauthorized - authentication required content: application/json: {} '403': description: Forbidden - no permission to use specified environments content: application/json: {} '404': description: Bundle or environment not found content: application/json: {} /api/v1/publishing/retry: post: tags: - Publishing summary: Retry failed or successful bundles description: Re-attempts sending bundles that were previously pushed but failed, partially failed, or succeeded but need re-synchronization. Supports bulk operations with per-bundle results. operationId: retryBundles requestBody: description: Retry request containing bundle IDs and options content: application/json: schema: $ref: '#/components/schemas/RetryBundlesForm' required: true responses: '200': description: Retry operation completed (check individual results for success/failure) content: application/json: schema: $ref: '#/components/schemas/ResponseEntityRetryBundlesView' '400': description: Invalid request parameters (e.g., empty bundleIds, invalid deliveryStrategy) content: application/json: {} '401': description: Unauthorized - authentication required content: application/json: {} '403': description: Forbidden - insufficient permissions content: application/json: {} /api/v1/pushpublish/filters/{filterKey}: get: tags: - Publishing operationId: getFilter parameters: - name: filterKey in: path required: true schema: type: string responses: default: description: default response content: application/json: {} application/javascript: {} summary: Get filter x-summary-source: derived delete: tags: - Publishing operationId: deleteFilter parameters: - name: filterKey in: path required: true schema: type: string responses: default: description: default response content: application/json: {} application/javascript: {} summary: Delete filter x-summary-source: derived /api/v1/pushpublish/filters: get: tags: - Publishing operationId: getFilters responses: default: description: default response content: application/json: {} application/javascript: {} summary: Get filters x-summary-source: derived put: tags: - Publishing operationId: updateFromForm requestBody: content: '*/*': schema: $ref: '#/components/schemas/FilterDescriptorForm' responses: default: description: default response content: application/json: {} application/javascript: {} summary: Update from form x-summary-source: derived post: tags: - Publishing operationId: saveFromForm requestBody: content: '*/*': schema: $ref: '#/components/schemas/FilterDescriptorForm' responses: default: description: default response content: application/json: {} application/javascript: {} summary: Save from form x-summary-source: derived components: schemas: Pagination: type: object properties: currentPage: type: integer format: int32 perPage: type: integer format: int32 totalEntries: type: integer format: int64 PublishingJobDetailView: required: - assetCount - bundleId - environments - numTries - status - timestamps type: object properties: bundleId: type: string description: Unique bundle identifier example: 01KJWNJM2C67DM56GHBJ4S7B89 bundleName: type: string description: Human-readable bundle name example: bundle-testName status: type: string description: Current publishing status example: SUCCESS enum: - BUNDLE_REQUESTED - BUNDLING - SENDING_TO_ENDPOINTS - FAILED_TO_SEND_TO_ALL_GROUPS - FAILED_TO_SEND_TO_SOME_GROUPS - FAILED_TO_BUNDLE - FAILED_TO_SENT - FAILED_TO_PUBLISH - SUCCESS - BUNDLE_SENT_SUCCESSFULLY - RECEIVED_BUNDLE - PUBLISHING_BUNDLE - WAITING_FOR_PUBLISHING - BUNDLE_SAVED_SUCCESSFULLY - INVALID_TOKEN - LICENSE_REQUIRED - SUCCESS_WITH_WARNINGS - FAILED_INTEGRITY_CHECK - SCHEDULED filterName: type: string description: Publishing filter name used example: Live to Staging filterKey: type: string description: Publishing filter key (pass to POST /push/{bundleId} filterKey to reproduce this push) example: ForcePush.yml assetCount: type: integer description: Total number of assets in the bundle format: int32 example: 47 environments: type: array properties: empty: type: boolean first: $ref: '#/components/schemas/EnvironmentDetailView' last: $ref: '#/components/schemas/EnvironmentDetailView' description: Environments with their endpoints and status details items: $ref: '#/components/schemas/EnvironmentDetailView' timestamps: $ref: '#/components/schemas/TimestampsView' numTries: type: integer description: Number of publish attempts format: int32 example: 1 scheduledPublishDate: type: string description: Scheduled execution time (future publishDate) for SCHEDULED bundles; null for all other statuses format: date-time example: '2026-03-15T14:30:00Z' RetryBundlesForm: required: - bundleIds type: object properties: bundleIds: type: array properties: empty: type: boolean first: type: string last: type: string description: List of bundle identifiers to retry example: - 01KJWNJM2C67DM56GHBJ4S7B89 - 01KJWNJM2C67DM56GHBJ4S7B90 items: type: string description: List of bundle identifiers to retry example: '["01KJWNJM2C67DM56GHBJ4S7B89","01KJWNJM2C67DM56GHBJ4S7B90"]' forcePush: type: boolean description: Force push to override existing content at endpoints. Automatically true for SUCCESS/SUCCESS_WITH_WARNINGS bundles. example: false deliveryStrategy: type: string description: 'Which endpoints to retry: ALL_ENDPOINTS sends to all, FAILED_ENDPOINTS sends only to previously failed endpoints. Case-sensitive: must be uppercase.' example: FAILED_ENDPOINTS enum: - ALL_ENDPOINTS - FAILED_ENDPOINTS default: ALL_ENDPOINTS EnvironmentDetailView: required: - endpoints - id - name type: object properties: id: type: string description: Unique environment identifier example: env-staging-123 name: type: string description: Human-readable environment name example: Staging Environment endpoints: type: array properties: empty: type: boolean first: $ref: '#/components/schemas/EndpointDetailView' last: $ref: '#/components/schemas/EndpointDetailView' description: Endpoints within this environment with their status items: $ref: '#/components/schemas/EndpointDetailView' RetryBundleResultView: required: - bundleId - deliveryStrategy - message - success type: object properties: bundleId: type: string description: Bundle identifier that was processed example: 01HQXYZ123456789ABCDEFGHIJ success: type: boolean description: Whether the retry operation was successful example: true message: type: string description: Human-readable message describing the result example: Bundle successfully re-queued for publishing forcePush: type: boolean description: Whether force push was applied to this bundle example: true operation: type: string description: Publishing operation type example: PUBLISH enum: - PUBLISH - UNPUBLISH deliveryStrategy: type: string description: 'Delivery strategy used: ALL_ENDPOINTS or FAILED_ENDPOINTS' example: FAILED_ENDPOINTS enum: - ALL_ENDPOINTS - FAILED_ENDPOINTS assetCount: type: integer description: Number of assets in the bundle format: int32 example: 47 ResponseEntityPurgeView: type: object properties: errors: type: array items: $ref: '#/components/schemas/ErrorEntity' entity: $ref: '#/components/schemas/PurgeResultView' messages: type: array items: $ref: '#/components/schemas/MessageEntity' i18nMessagesMap: type: object additionalProperties: type: string permissions: type: array items: type: string pagination: $ref: '#/components/schemas/Pagination' AssetPreviewView: required: - id - title - type type: object properties: id: type: string description: Asset identifier example: abc123-content-id title: type: string description: Human-readable asset title example: Homepage Content Update type: type: string description: Asset type (e.g., contentlet, template, container, folder, host) example: contentlet RemoveAssetResultView: required: - assetId - message - success type: object properties: assetId: type: string description: The asset identifier that was processed example: 550e8400-e29b-41d4-a716-446655440000 success: type: boolean description: Whether the asset was successfully removed from the bundle example: true message: type: string description: Human-readable result message example: Asset removed from bundle MessageEntity: type: object properties: message: type: string ResponseEntityAddAssetsToBundleView: type: object properties: errors: type: array items: $ref: '#/components/schemas/ErrorEntity' entity: $ref: '#/components/schemas/AddAssetsToBundleView' messages: type: array items: $ref: '#/components/schemas/MessageEntity' i18nMessagesMap: type: object additionalProperties: type: string permissions: type: array items: type: string pagination: $ref: '#/components/schemas/Pagination' RemoveAssetsFromBundleForm: required: - assetIds type: object properties: assetIds: type: array properties: empty: type: boolean first: type: string last: type: string description: List of asset identifiers to remove from the bundle example: - asset-123 - asset-456 items: type: string description: List of asset identifiers to remove from the bundle example: '["asset-123","asset-456"]' TimestampsView: required: - createDate type: object properties: bundleStart: type: string description: When bundle creation started (ISO 8601 format) format: date-time example: '2026-01-15T10:30:00Z' bundleEnd: type: string description: When bundle creation completed (ISO 8601 format) format: date-time example: '2026-01-15T10:31:22Z' publishStart: type: string description: When publishing to endpoints started (ISO 8601 format) format: date-time example: '2026-01-15T10:30:05Z' publishEnd: type: string description: When publishing to endpoints completed (ISO 8601 format) format: date-time example: '2026-01-15T10:31:18Z' createDate: type: string description: When the audit record was created (ISO 8601 format) format: date-time example: '2026-01-15T10:29:55Z' statusUpdated: type: string description: When the status was last updated (ISO 8601 format) format: date-time example: '2026-01-15T10:31:22Z' description: Publishing job timestamps FilterDescriptorForm: type: object properties: key: type: string title: type: string sort: type: string defaultFilter: type: boolean roles: type: string filters: type: object additionalProperties: type: object ResponseEntityPublishingJobsView: type: object properties: errors: type: array items: $ref: '#/components/schemas/ErrorEntity' entity: type: array items: $ref: '#/components/schemas/PublishingJobView' messages: type: array items: $ref: '#/components/schemas/MessageEntity' i18nMessagesMap: type: object additionalProperties: type: string permissions: type: array items: type: string pagination: $ref: '#/components/schemas/Pagination' EndpointDetailView: required: - address - id - port - protocol - serverName type: object properties: id: type: string description: Unique endpoint identifier example: endpoint-1 serverName: type: string description: Human-readable server name example: Staging Server 1 address: type: string description: Server address (hostname or IP) example: staging1.example.com port: pattern: ^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[1-9])$ type: string description: 'Server port number as a string (valid range: 1–65535). May be empty if not configured.' example: '443' protocol: type: string description: Communication protocol example: https status: type: string description: Publishing status for this endpoint (e.g., SUCCESS, FAILED_TO_SENT) example: SUCCESS enum: - BUNDLE_REQUESTED - BUNDLING - SENDING_TO_ENDPOINTS - FAILED_TO_SEND_TO_ALL_GROUPS - FAILED_TO_SEND_TO_SOME_GROUPS - FAILED_TO_BUNDLE - FAILED_TO_SENT - FAILED_TO_PUBLISH - SUCCESS - BUNDLE_SENT_SUCCESSFULLY - RECEIVED_BUNDLE - PUBLISHING_BUNDLE - WAITING_FOR_PUBLISHING - BUNDLE_SAVED_SUCCESSFULLY - INVALID_TOKEN - LICENSE_REQUIRED - SUCCESS_WITH_WARNINGS - FAILED_INTEGRITY_CHECK - SCHEDULED statusMessage: type: string description: Status message with additional details example: Everything ok stackTrace: type: string description: Stack trace for failed endpoints (only included for failures) ResponseEntityPushBundleResultView: type: object properties: errors: type: array items: $ref: '#/components/schemas/ErrorEntity' entity: $ref: '#/components/schemas/PushBundleResultView' messages: type: array items: $ref: '#/components/schemas/MessageEntity' i18nMessagesMap: type: object additionalProperties: type: string permissions: type: array items: type: string pagination: $ref: '#/components/schemas/Pagination' ResponseEntityPublishingJobDetailView: type: object properties: errors: type: array items: $ref: '#/components/schemas/ErrorEntity' entity: $ref: '#/components/schemas/PublishingJobDetailView' messages: type: array items: $ref: '#/components/schemas/MessageEntity' i18nMessagesMap: type: object additionalProperties: type: string permissions: type: array items: type: string pagination: $ref: '#/components/schemas/Pagination' AddAssetsToBundleForm: required: - assetIds type: object properties: bundleId: type: string description: Optional bundle ID. If provided and found, assets are added to this bundle. If not found, falls through to bundleName lookup, then auto-creation — does NOT return 404 example: 550e8400-e29b-41d4-a716-446655440000 bundleName: type: string description: Optional bundle name. Used as fallback when bundleId is not provided or not found. Searches unsent bundles by name (case-insensitive). If no match, a new bundle is created with this name example: My Content Bundle assetIds: type: array description: List of asset identifiers to add to the bundle example: - asset-123 - asset-456 items: type: string description: List of asset identifiers to add to the bundle example: '["asset-123","asset-456"]' description: Form for adding assets to a bundle ResponseEntityRemoveAssetsFromBundleView: type: object properties: errors: type: array items: $ref: '#/components/schemas/ErrorEntity' entity: type: array items: $ref: '#/components/schemas/RemoveAssetResultView' messages: type: array items: $ref: '#/components/schemas/MessageEntity' i18nMessagesMap: type: object additionalProperties: type: string permissions: type: array items: type: string pagination: $ref: '#/components/schemas/Pagination' PublishingJobView: required: - assetCount - assetPreview - bundleId - createDate - environmentCount - numTries - status type: object properties: bundleId: type: string description: Unique bundle identifier example: 01KJWNJM2C67DM56GHBJ4S7B89 bundleName: type: string description: Human-readable bundle name example: bundle-testName status: type: string description: Current publishing status example: SUCCESS enum: - BUNDLE_REQUESTED - BUNDLING - SENDING_TO_ENDPOINTS - FAILED_TO_SEND_TO_ALL_GROUPS - FAILED_TO_SEND_TO_SOME_GROUPS - FAILED_TO_BUNDLE - FAILED_TO_SENT - FAILED_TO_PUBLISH - SUCCESS - BUNDLE_SENT_SUCCESSFULLY - RECEIVED_BUNDLE - PUBLISHING_BUNDLE - WAITING_FOR_PUBLISHING - BUNDLE_SAVED_SUCCESSFULLY - INVALID_TOKEN - LICENSE_REQUIRED - SUCCESS_WITH_WARNINGS - FAILED_INTEGRITY_CHECK - SCHEDULED filterName: type: string description: Publishing filter name used example: Live to Staging filterKey: type: string description: Publishing filter key identifier (use this for API calls) example: ForcePush.yml assetCount: type: integer description: Total number of assets in the bundle format: int32 example: 47 assetPreview: type: array properties: empty: type: boolean first: $ref: '#/components/schemas/AssetPreviewView' last: $ref: '#/components/schemas/AssetPreviewView' description: Preview of first 3 assets in the bundle items: $ref: '#/components/schemas/AssetPreviewView' environmentCount: type: integer description: Number of target environments format: int32 example: 3 createDate: type: string description: Bundle creation timestamp in ISO 8601 format format: date-time example: '2026-01-15T10:29:55Z' statusUpdated: type: string description: Last status update timestamp in ISO 8601 format format: date-time example: '2026-01-15T10:31:22Z' numTries: type: integer description: Number of publish attempts format: int32 example: 1 scheduledPublishDate: type: string description: Scheduled execution time (future publishDate) for SCHEDULED bundles; null for all other statuses format: date-time example: '2026-03-15T14:30:00Z' ResponseEntityRetryBundlesView: type: object properties: errors: type: array items: $ref: '#/components/schemas/ErrorEntity' entity: type: array items: $ref: '#/components/schemas/RetryBundleResultView' messages: type: array items: $ref: '#/components/schemas/MessageEntity' i18nMessagesMap: type: object additionalProperties: type: string permissions: type: array items: type: string pagination: $ref: '#/components/schemas/Pagination' PushBundleForm: required: - environments - filterKey - operation type: object properties: operation: type: string description: 'Operation type: publish, expire, or publishexpire. Case-insensitive (PUBLISH, Publish, publish all accepted).' example: publish enum: - publish - expire - publishexpire publishDate: type: string description: Scheduled publish date in ISO 8601 format with timezone offset (required for publish/publishexpire). Dates without timezone offset are rejected. format: date-time example: '2025-03-15T14:30:00-05:00' expireDate: type: string description: Scheduled expire date in ISO 8601 format with timezone offset (required for expire/publishexpire). Dates without timezone offset are rejected. format: date-time example: '2025-04-15T14:30:00-05:00' environments: type: array description: List of environment IDs to push the bundle to example: - env-123 - env-456 items: type: string description: List of environment IDs to push the bundle to example: '["env-123","env-456"]' filterKey: type: string description: Push publishing filter key example: ForcePush.yml description: Form for pushing a bundle to environments PushBundleResultView: required: - bundleId - environments - filterKey - operation type: object properties: bundleId: type: string description: Bundle identifier example: 01KJWNJM2C67DM56GHBJ4S7B89 operation: type: string description: Operation type performed example: publish publishDate: type: string description: Scheduled publish date in ISO 8601 format example: '2025-03-15T14:30:00-05:00' expireDate: type: string description: Scheduled expire date in ISO 8601 format example: '2025-04-15T14:30:00-05:00' environments: type: array properties: empty: type: boolean first: type: string last: type: string description: List of environment IDs the bundle was pushed to items: type: string description: List of environment IDs the bundle was pushed to filterKey: type: string description: Filter key used for publishing example: ForcePush.yml PurgeResultView: required: - message - statusesRequested type: object properties: message: type: string description: Confirmation message indicating the purge operation has started example: Purge operation started. Results will be notified when complete. statusesRequested: type: array properties: empty: type: boolean first: type: string last: type: string description: List of status names being purged example: - SUCCESS - FAILED_TO_PUBLISH items: type: string description: List of status names being purged example: '["SUCCESS","FAILED_TO_PUBLISH"]' AddAssetsToBundleView: required: - bundleId - created - errors - total type: object properties: bundleId: type: string description: Bundle identifier (new or existing) example: 550e8400-e29b-41d4-a716-446655440000 bundleName: type: string description: Name of the bundle example: My Content Bundle created: type: boolean description: Whether a new bundle was created by this call example: false total: type: integer description: Total non-duplicate assets processed (subtract errors count for successful adds). Assets already in the bundle are skipped and excluded from this count. format: int32 example: 5 errors: type: array properties: empty: type: boolean first: type: string last: type: string description: Per-asset error messages as human-readable strings. Empty list = all assets added successfully items: type: string description: Per-asset error messages as human-readable strings. Empty list = all assets added successfully ErrorEntity: type: object properties: errorCode: type: string message: type: string fieldName: type: string DeletePPQueueElementsByIdentifierForm: type: object properties: identifiers: type: array items: type: string