openapi: 3.0.3
info:
  title: Assets Author API
  description: API definitions for asset management capabilities in AEM Assets that are already deployed to customer environments. To use this API, you MUST reach out to Adobe engineering and ask to participate in our experimental API early adopter program.
  version: 2026.07-experimental
servers:
  - url: https://{bucket}.adobeaemcloud.com/adobe/experimental/metaall-expires-20991231/assets
    variables:
      bucket:
        default: ''
        description: The bucket to use for this request, e.g. author-p12345-e123456
security:
  - bearerAuth: []
tags:
  - name: Assets
    description: APIs for working with assets
  - name: Events
    description: Events generated by AEM Assets
  - name: Metadata
    description: APIs for working with asset metadata
  - name: Relations
    description: APIs for working with asset relations
  - name: Import
    description: APIs for importing assets into AEM Assets
  - name: Jobs
    description: APIs for checking status and results of asynchronous asset jobs
paths:
  /:
    post:
      summary: Initiate Assets Upload
      description: Request to initiate upload for one or more assets.  The response will contain a list of pre-signed URLs and asset IDs that should be used to complete upload for each asset.  Once the assets have been chunked and uploaded to the provided pre-signed URLs, call `completeUpload` to finish uploading the assets.
      operationId: initiateUpload
      security:
        - Bearer: []
      tags:
        - Assets
      requestBody:
        description: Request payload describing the assets to upload.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InitiateUploadRequest'
      responses:
        '200':
          description: Pre-signed URLs where the asset binaries should be uploaded, along with asset IDs to be used when calling `completeUpload`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InitiateUploadCommandResult'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '409':
          $ref: '#/components/responses/409_Conflict'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/completeUpload:
    post:
      summary: Complete Asset Upload
      description: |
        This request should be sent after uploading an asset to the pre-signed URLs returned by either `initiateUpload` or
        `initiateExistingAssetUpload`, informing AEM that file transfer is complete so asset processing can begin.
      operationId: completeUpload
      security:
        - Bearer: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
      requestBody:
        description: Request payload that finalizes the upload of an asset.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompleteUploadAsset'
      responses:
        '200':
          description: Asset uploaded successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompleteFileUploadCommandResult'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '409':
          $ref: '#/components/responses/409_Conflict'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}:
    post:
      summary: Initiate binary upload to replace or update existing asset
      description: |
        Request to initiate upload for an existing asset. The response will contain a list of pre-signed URLs
        to upload the asset to. Once the asset has been chunked and uploaded to the provided pre-signed URLs, call
        `completeUpload` to finish uploading the asset. If `fileName` does not match the existing asset's file name,
        the server responds with HTTP 400.
      operationId: initiateExistingAssetUpload
      security:
        - Bearer: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/If-Match'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InitiateExistingAssetUploadRequest'
      responses:
        '200':
          description: Pre-signed URLs where the asset binary should be uploaded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InitiateExistingAssetUploadCommandResult'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '412':
          $ref: '#/components/responses/412_PreconditionFailed'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    get:
      summary: Get an asset
      description: |
        Returns an existing web-optimized binary representation of the asset.
      operationId: getAsset
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Web-optimized version of the asset
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
                description: Binary content of the asset
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
    delete:
      summary: Delete asset
      description: Deletes an existing asset from the system.  In most cases, a 204 response will be returned immediately, but in some cases, a 202 will be returned if the operation may take a long time to complete.  This most commonly occurs when an asset has a large number of references to update, but can occur for other reasons as well.
      operationId: deleteAsset
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - in: query
          name: force
          description: If true, delete the asset even if it is referenced
          schema:
            type: boolean
      responses:
        '202':
          description: Accepted
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetJobStatus'
        '204':
          $ref: '#/components/responses/204_NoContent'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /move:
    post:
      summary: Move or rename asset(s)
      description: |
        Moves or renames one or more assets. For each asset in the request, at least one of
        the destination parent or destination name must be provided:

        - **Move only**: provide `destination` without `destinationName`. The asset is
          moved to the new parent folder and retains its current name.
        - **Rename only**: provide `destinationName` without a `destination`. The asset
          is renamed within its current parent folder.
        - **Move and rename**: provide both a destination parent and `destinationName`.
          The asset is moved to the new parent folder and simultaneously renamed.

        If the operation requires more than a few seconds to complete, a job is created and a status
        link is returned in the response's `Location` header. Once the async job is complete, the
        status link will return the results of the operation.
      operationId: moveAssets
      security:
        - Bearer: []
      tags:
        - Assets
      parameters:
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MoveAssetsRequest'
      responses:
        '200':
          description: Assets moved successfully (synchronous)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MoveAssetsCommandResult'
        '202':
          description: Accepted for asynchronous processing
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetJobStatus'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '409':
          $ref: '#/components/responses/409_Conflict'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /publish:
    parameters:
      - $ref: '#/components/parameters/Prefer'
    post:
      summary: Publish Assets
      operationId: publishAssets
      description: |
        Publishes one or more assets to a specified target. In most cases, a 200 response will be
        returned immediately, but in some cases, a 202 will be returned if the operation may take
        a long time to complete.

        ### Batch Size Limit

        A maximum of **10 assets** can be published per request. Requests exceeding this limit
        will receive a `400 Bad Request` response.

        ### Async Processing (202 Response)

        When receiving a 202 response, follow the async polling pattern:

        1. Extract the `Location` header from the 202 response (points to status endpoint)
        2. Poll `GET /assets/jobs/{jobId}/status` until the job completes
        3. The final response contains success/failure details for each asset
      security:
        - Bearer: []
      tags:
        - Assets
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublishAssetsRequest'
            example:
              assets:
                - urn:aaid:aem:12345678-1234-1234-1234-123456789012
              target: AEM_PUBLISH
      responses:
        '200':
          description: Publish operation completed successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublishAssetsCommandResult'
              example:
                operation: adobe.assets.publishAssets
                status: 200
                description: Publish operation completed
                data:
                  assets:
                    - assetId: urn:aaid:aem:12345678-1234-1234-1234-123456789012
                      publishedAt: '2026-01-22T10:30:00.000Z'
                errors: []
                warnings: []
        '202':
          description: Publish operation accepted for async processing.
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetJobStatus'
              example:
                jobId: 98765432-1234-1234-1234-123456789012
                state: PROCESSING
                status: Publish operation is processing
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /unpublish:
    parameters:
      - $ref: '#/components/parameters/Prefer'
    post:
      summary: Unpublish Assets
      operationId: unpublishAssets
      description: |
        Unpublishes one or more assets from a specified publish target. In most cases, a 200 response
        will be returned immediately, but in some cases, a 202 will be returned if the operation
        may take a long time to complete.

        ### Batch Size Limit

        A maximum of **10 assets** can be unpublished per request. Requests exceeding this limit
        will receive a `400 Bad Request` response.

        ### Async Processing (202 Response)

        When receiving a 202 response, follow the async polling pattern:

        1. Extract the `Location` header from the 202 response (points to status endpoint)
        2. Poll `GET /assets/jobs/{jobId}/status` until the job completes
        3. The final response contains success/failure details for each asset
      security:
        - Bearer: []
      tags:
        - Assets
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnpublishAssetsRequest'
            example:
              assets:
                - urn:aaid:aem:12345678-1234-1234-1234-123456789012
              target: AEM_PUBLISH
      responses:
        '200':
          description: Unpublish operation completed successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnpublishAssetsCommandResult'
              example:
                operation: adobe.assets.unpublishAssets
                status: 200
                description: Unpublish operation completed
                data:
                  assets:
                    - assetId: urn:aaid:aem:12345678-1234-1234-1234-123456789012
                      unpublishedAt: '2026-01-22T11:00:00.000Z'
                errors: []
                warnings: []
        '202':
          description: Unpublish operation accepted for async processing.
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetJobStatus'
              example:
                jobId: 98765432-1234-1234-1234-123456789012
                state: PROCESSING
                status: Unpublish operation is processing
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /search:
    post:
      summary: Search for assets based on specified criteria
      operationId: searchAssets
      security:
        - Bearer: []
      tags:
        - Assets
      description: Search Assets in author environment
      parameters:
        - in: query
          name: allowUnindexedSearch
          description: |
            When `true`, allows a search request to reference properties that are not indexed. This parameter is
            optional and defaults to `false`, in which case a request that references one or more unindexed
            properties receives an HTTP 400 response.
          schema:
            type: boolean
            default: false
      requestBody:
        required: true
        description: |
          Use `application/json` for text-only searches.
          Use `multipart/form-data` when uploading a PDF file for enhanced search.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetSearchRequest'
          multipart/form-data:
            schema:
              type: object
              properties:
                searchRequest:
                  $ref: '#/components/schemas/AssetSearchRequest'
                file:
                  description: |
                    PDF file for enhanced search capabilities:
                    - Visual similarity search: Find visually similar assets
                    - Content extraction: Extract and search text content from the PDF
                    - Metadata extraction: Use PDF metadata to refine search results

                    Maximum file size: 50MB
                  type: string
                  format: binary
                  maxLength: 52428800
              required:
                - file
            encoding:
              searchRequest:
                contentType: application/json
              file:
                contentType: application/pdf
            examples:
              file-only-search:
                summary: Search using only a PDF file for visual similarity
                value:
                  file: <binary PDF content>
              file-with-query:
                summary: Search with both PDF file and query filters
                value:
                  searchRequest:
                    query:
                      - match:
                          text: blue
                          fields:
                            - repositoryMetadata.repo:name
                    limit: 50
                  file: <binary PDF content>
      responses:
        '200':
          description: Asset Search Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchOperationResponse'
              example:
                hits:
                  results:
                    - assetId: urn:aaid:aem:9d68909d-378b-4c18-8b9d-0ep0g826e984
                      repositoryMetadata:
                        repo:name: blue-shoe.jpg
                        dc:format: image/jpeg
                        repo:createDate: '2023-05-29T12:54:36.410Z'
                        repo:modifyDate: '2023-05-11T14:12:09.304Z'
                        repo:size: 434292
                        repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
                      assetMetadata:
                        xcm:machineKeywords:
                          - localeCode: en-US
                            confidence: 0.7371780872344971
                            value: shoe
                          - localeCode: en-US
                            confidence: 0.7185167074203491
                            value: wearable
                        tiff:ImageLength: 1800
                        tiff:ImageWidth: 2400
                    - assetId: urn:aaid:aem:4e72f5bc-198a-4f92-a7d1-95f3ab428c61
                      repositoryMetadata:
                        repo:name: red-shoe.jpg
                        dc:format: image/jpeg
                        repo:createDate: '2023-06-15T09:23:18.720Z'
                        repo:modifyDate: '2023-06-16T11:08:42.115Z'
                        repo:size: 1258764
                        repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
                      assetMetadata:
                        xcm:machineKeywords:
                          - localeCode: en-US
                            confidence: 0.892456130978523
                            value: mountain
                          - localeCode: en-US
                            confidence: 0.8156347289106783
                            value: landscape
                          - localeCode: en-US
                            confidence: 0.7392815674392018
                            value: nature
                        tiff:ImageLength: 3000
                        tiff:ImageWidth: 4500
                    - assetId: urn:aaid:aem:2b39c41d-8954-401e-b7a3-72e5f9c26ab2
                      repositoryMetadata:
                        repo:name: green-shoe.png
                        dc:format: image/png
                        repo:createDate: '2023-07-08T14:37:52.196Z'
                        repo:modifyDate: '2023-07-10T08:45:29.831Z'
                        repo:size: 3842156
                        repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
                      assetMetadata:
                        xcm:machineKeywords:
                          - localeCode: en-US
                            confidence: 0.892456130978523
                            value: product
                          - localeCode: en-US
                            confidence: 0.8156347289106783
                            value: brochure
                        tiff:ImageLength: 1900
                        tiff:ImageWidth: 2500
                cursor: opaque-string
                facets:
                  - type: CATEGORY
                    field: repositoryMetadata.dc:format
                    id: file_format
                    values:
                      - value: image/jpeg
                        count: 50
                      - value: image/png
                        count: 30
                      - value: video/mp4
                        count: 20
                  - type: CATEGORY
                    field: assetMetadata.dam:assetStatus
                    id: dam_status
                    values:
                      - value: approved
                        count: 20
                      - value: rejected
                        count: 5
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '413':
          $ref: '#/components/responses/413_ContentTooLarge'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
        '501':
          $ref: '#/components/responses/501_NotImplemented'
  /jobs/{jobId}/status:
    parameters:
      - name: jobId
        in: path
        description: ID of an asynchronous job
        required: true
        schema:
          type: string
        examples:
          sample-job-id:
            value: 542c88b4-e136-4341-9221-ae42d3d70b10
    get:
      summary: Get the status of an asynchronous job
      description: |
        Retrieves the current status of an async job created by the API. The job may be in progress, completed, or failed.

        ## Async Job Polling Flow

        When an operation returns a 202 Accepted response, follow this pattern:

        1. **202 Response**: The operation returns a `Location` header pointing to this status endpoint
        2. **Poll Status**: Call this endpoint to check job progress
           - **200**: Job is still processing. Check the `state` field and poll again after a short delay
           - **200/303**: Job is complete. Results are included in the response or available at the Location header

        ## Job States

        | State | Description |
        |-------|-------------|
        | `PROCESSING` | Job is still running |
        | `COMPLETED` | Job finished successfully |
        | `COMPLETED_WITH_ERRORS` | Job finished with some failures |
        | `FAILED` | Job failed entirely |

        *NOTE*: This API supports the documented asynchronous workflows in the
        Content Hub and Licenses experiments. Direct use outside those documented
        workflows is not covered by Adobe Support agreements.
      operationId: getJobStatus
      security:
        - Bearer: []
      tags:
        - Jobs
      responses:
        '200':
          description: The current status of the async job (processing, completed, or failed).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetJobStatus'
        '303':
          description: The job has finished executing and results are available at the indicated location.
          headers:
            Location:
              $ref: '#/components/headers/Location'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /jobs/{jobId}/result:
    x-experiment:
      - foundation
      - meta-all
      - licenses
    parameters:
      - $ref: '#/components/parameters/JobId'
    get:
      summary: Get the result of a completed job
      description: |
        Retrieves the detailed result of an async job created by the API.
      operationId: getJobResult
      security:
        - Bearer: []
      tags:
        - Jobs
      responses:
        '200':
          description: The result of the completed or failed async job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResult'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /jobs/{jobId}/result/successes:
    x-experiment:
      - licenses
      - foundation
      - meta-all
    parameters:
      - $ref: '#/components/parameters/JobId'
    get:
      summary: List successful sub-results of a completed job
      description: |
        Returns a paginated list of details for successful items in a completed async job.
        Success items are modeled with success-specific fields and do not use problem-style
        message properties.

        Job types that do not produce successful sub-results respond with `204 No Content`.
      operationId: listJobResultSuccesses
      security:
        - Bearer: []
      tags:
        - Jobs
      parameters:
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A page of successful sub-result items.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSubResultListResponse'
              examples:
                metadataImportSuccess:
                  summary: Metadata import example for generic job sub-results
                  value:
                    operation: adobe.assets.postMetadataImport
                    cursor: '123'
                    items:
                      - rowIndex: 1
                        assetId: urn:aaid:aem:12d4c06f-f6ec-4941-bbcd-2090203b19a7
                        assetPath: /content/dam/products/camera.jpg
        '204':
          $ref: '#/components/responses/204_NoContent'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /jobs/{jobId}/result/warnings:
    x-experiment:
      - licenses
      - foundation
      - meta-all
    parameters:
      - $ref: '#/components/parameters/JobId'
    get:
      summary: List warning sub-results of a completed job
      description: |
        Returns a paginated list of warning messages for a completed async job.
        Each item is a `CommandResultMessage` (potentially extended with job-type–specific
        fields such as `context`).

        Job types that do not produce warning sub-results respond with `204 No Content`.
      operationId: listJobResultWarnings
      security:
        - Bearer: []
      tags:
        - Jobs
      parameters:
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A page of warning messages.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSubResultIssueListResponse'
              examples:
                metadataImportWarning:
                  summary: Metadata import example for generic job sub-results
                  value:
                    operation: adobe.assets.postMetadataImport
                    cursor: '123'
                    items:
                      - type: adobe.assets.postMetadataImport:warning:propertyIgnored
                        title: Property ignored
                        detail: One metadata property in data row index 6 (seventh data row) was ignored because it is read-only.
                        context:
                          rowIndex: 6
                          assetId: urn:aaid:aem:22d4c06f-f6ec-4941-bbcd-2090203b19a8
                          assetPath: /content/dam/products/lens.jpg
        '204':
          $ref: '#/components/responses/204_NoContent'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /jobs/{jobId}/result/errors:
    x-experiment:
      - licenses
      - foundation
      - meta-all
    parameters:
      - $ref: '#/components/parameters/JobId'
    get:
      summary: List error sub-results of a completed job
      description: |
        Returns a paginated list of error messages for a completed async job.
        Each item is a `CommandResultMessage` (potentially extended with job-type–specific
        fields such as `context`).

        Job types that do not produce error sub-results respond with `204 No Content`.
      operationId: listJobResultErrors
      security:
        - Bearer: []
      tags:
        - Jobs
      parameters:
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: A page of error messages.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSubResultIssueListResponse'
              examples:
                metadataImportError:
                  summary: Metadata import example for generic job sub-results
                  value:
                    operation: adobe.assets.postMetadataImport
                    cursor: '123'
                    items:
                      - type: adobe.assets.postMetadataImport:error:assetNotFound
                        title: Asset not found
                        detail: No asset exists for the identifier values specified in data row index 2 (third data row).
                        context:
                          rowIndex: 2
                          assetId: urn:aaid:aem:32d4c06f-f6ec-4941-bbcd-2090203b19a9
                          assetPath: /content/dam/missing-asset.jpg
        '204':
          $ref: '#/components/responses/204_NoContent'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /metadata/import:
    parameters:
      - $ref: '#/components/parameters/Prefer'
    post:
      operationId: postMetadataImport
      summary: Import Assets Metadata
      security:
        - Bearer: []
      description: |
        Updates asset metadata properties based on values found in a CSV (comma-separated values) file.
        The request body is multipart/form-data and must include the CSV file part `file`.

        ### CSV layout

        A metadata import file is a UTF-8-encoded CSV text file that conforms to [RFC 4180](https://tools.ietf.org/html/rfc4180).

        #### General contents

        - Header row (first row):
          - The first one or two columns must be `assetId`, `assetPath`, or both.
          - Additional columns specify metadata property names, as they are presented by the Metadata API.
          - Property column names should include a data type in square brackets to indicate the intended type of the data in that column.
        - Metadata rows (all following rows):
          - The first one or two cells provide the assetId or path of the asset to which the metadata values in the following cells will be written.
          When both are present, the cell in the `assetId` column takes precedence.
          - The following cells each provide either no value or the value to be written to the corresponding metadata property.
          When a cell is empty there is no change made to the corresponding metadata property.

        Basic example

        ```
        assetId,assetPath,dc:title[string],dc:contributor[string]
        urn:aaid:aem:91246f7e-f716-4e80-86a9-c3209c1977cb,/content/dam/asset1.jpg,Title1,user1
        urn:aaid:aem:9d58f0ed-5c34-46b3-93d5-acd3b43aaf37,/content/dam/asset2.jpg,,user2
        urn:aaid:aem:a33b0a24-d7a4-4640-a42b-c31fbe8eeea6,/content/dam/asset3.jpg,Title3,
        ,/content/dam/asset4.jpg,Title4,user4
        urn:aaid:aem:a8cfaf60-5f12-44c3-b633-39e558342037,,Title5,user5

        ```

        #### Multi-value and complex metadata properties

        Values for multi-value properties and complex metadata properties are expressed as JSON arrays or JSON objects,
        encoded as JSON strings inside CSV cells. Because commas are used to separate CSV fields, these cell values
        must be quoted. Any double quotes in JSON must be escaped with a second double quote.

        Example with multi-value properties

        ```
        assetPath,xyz:label[string[]],xyz:rgbColors[integer[]]
        /content/dam/asset1.jpg,"[""a"",""b"",""c""]","[1,2,3]"
        /content/dam/asset2.jpg,"[""d"",""e"",""f""]",
        /content/dam/asset3.jpg,,"[7,8,9]"
        ```

        Example with object

        ```
        assetPath,Iptc4xmpCore:CreatorContactInfo[object]
        /content/dam/asset1.jpg,"{""Iptc4xmpCore:CiAdrCity"":""Lehi"",""Iptc4xmpCore:CiAdrRegion"":""UT""}""
        ```

        Example with object array

        ```
        assetPath,dam:colorDistribution[object[]]
        /content/dam/asset1.jpg,"[{""[nodeName]"":""color1"",""name"":""LIGHT_BLUE"",""rgb"":[120,170,220]},{""[nodeName]"":""color2"",""name"":""TURQUOISE"",""rgb"":[65,140,232]}]"
        ```

        #### Special values

        A CSV file that was generated through a metadata export can have values of the form, `!~{<valueType>}<value>`.
        This is used to indicate that the value did not have the expected data type. When found during import, cells with
        any such values will be ignored and the corresponding metadata value of the asset will not be changed.

        An empty cell means no change to the corresponding property.

        #### Data types

        Data types included in column headers may be one of the following types:

        | Type | Example |
        |------|---------|
        | string | "A string" |
        | integer | 123 |
        | number | 123.45 |
        | boolean | true |
        | string-date-time | "2026-01-02T03:04:05.678Z" |
        | object | "{""key"":""value""}" |
        | string[] | "[""string1"",""string2""]" |
        | integer[] | "[1,2,3]" |
        | number[] | "[1.23,4.56]" |
        | boolean[] | "[true,false]" |
        | string-date-time[] | "[""2026-01-02T03:04:05.678Z""]" |
        | object[] | "[{""key1"":""value1""},{""key2"":""value2""}]" |

        #### Identifier columns

        The header row must contain at least one identifier column, named exactly `assetId` or
        `assetPath` (case-sensitive); both may be present. A request with neither is rejected with
        `422 Unprocessable Entity`.

        #### Metadata property matching

        Except for the identifier columns `assetId` and `assetPath`, header names identify metadata
        properties.

        A file whose header row contains metadata columns that cannot be matched to supported metadata
        properties is rejected with `422 Unprocessable Entity` and the detail
        `CSV file contains unsupported metadata headers.`

        #### Parsing constraints and deviations

        The following rules are enforced during parsing. They are intentional constraints or deviations
        from full [RFC 4180](https://tools.ietf.org/html/rfc4180) support:

        - **Non-CSV payloads are rejected.** Files that are not valid CSV — for example `.xlsx`
          workbooks, whose ZIP-signature bytes are not interpreted as a valid header row — are rejected
          with `422 Unprocessable Entity` and the detail
          `CSV file contains unsupported metadata headers.` (There is no distinct ZIP-detection error.)

        #### Request-level constraints

        - **Maximum upload size.** The uploaded file must not exceed 10 MB. Larger uploads are rejected
          with `413 Content Too Large`.
        - **Malformed input.** CSV content that violates the rules above — including a missing identifier
          column or a non-CSV payload — is rejected with `422 Unprocessable Entity`.

        #### Uploaded CSV retention and cleanup

        The uploaded CSV is persisted only for the duration of the import and is not retained as a
        durable resource. It is not addressable through this API and cannot be retrieved, listed, or
        deleted by the caller.

        - **On synchronous validation failure** (a `422` for malformed CSV, a `413` for an oversize
          upload, a `400` for an otherwise invalid request, or a failure to accept the job), the
          uploaded CSV is removed before the error response is returned. No further action is required
          by the caller.
        - **On accepted requests** (`202`), the uploaded CSV is retained while the asynchronous import
          job runs and is removed once the job completes and its results are purged — that is, the
          uploaded CSV is deleted as part of the job's purge step, not retained alongside the results.
          Callers should not rely on the uploaded CSV remaining available after receiving a `202`.

        Retention of the uploaded CSV is an internal implementation detail and is subject to change; no
        retention window is guaranteed by this contract.
      tags:
        - Metadata
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/MetadataImportRequest'
      responses:
        '202':
          description: |
            Import metadata job accepted.
            Follow the path in the Location header to monitor job progress and get final results when available.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetJobStatus'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '413':
          $ref: '#/components/responses/413_ContentTooLarge'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/422_UnprocessableEntity'
        '429':
          $ref: '#/components/responses/429_TooManyRequests'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/metadata:
    parameters:
      - $ref: '#/components/parameters/AssetID'
    head:
      summary: Check asset metadata
      description: Returns headers, including an ETag for the specified asset metadata, which can be a lighter method of checking for the existence of, or validating a cached version of an asset's metadata without sending a full GET request.
      operationId: headAssetMetadata
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Metadata
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: OK
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            Content-Type:
              schema:
                type: string
                enum:
                  - application/json
              required: true
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    get:
      summary: Get asset metadata
      description: Asset metadata contains those metadata values that have been extracted from the asset, configured by the user, or derived from the asset during asset processing.  Repository metadata contains metadata properties that are set and maintained by the repository during system operations.
      operationId: getAssetMetadata
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Metadata
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Metadata for the specified asset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Metadata'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    patch:
      summary: Update asset metadata
      description: The specified properties will be updated per the RFC-6902 syntax.  Note that while assetMetadata is editable, repositoryMetadata is not.  If repositoryMetadata is specified in the request, a 400 response will be returned.
      operationId: patchAssetMetadata
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Metadata
      parameters:
        - $ref: '#/components/parameters/If-Match'
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/JSONPatch'
      responses:
        '200':
          description: Patch applied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Metadata'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '409':
          $ref: '#/components/responses/409_Conflict'
        '412':
          $ref: '#/components/responses/412_PreconditionFailed'
        '428':
          $ref: '#/components/responses/428_PreconditionRequired'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/tasks:
    post:
      summary: Create a task for a given asset ID
      description: |
        Creates a task for the specified asset ID.
      operationId: createTask
      security:
        - Bearer: []
      tags:
        - Tasks
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskCreateRequest'
      responses:
        '201':
          description: The newly created task for the specified asset id
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/422_UnprocessableEntity'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/relations:
    parameters:
      - $ref: '#/components/parameters/AssetID'
    get:
      summary: Get the asset relations for an asset
      description: Get a paginated list of all relations for an asset, optionally filtered by relation types. If the `relationTypes` parameter is provided, only relations for the provided type name(s) will be returned. By default, the response will contain a maximum of 50 items per page. The caller may pass the `limit` query parameter to override this default with a lower limit. To request the next page of items, pass the `cursor` value provided in the response to the `cursor` query parameter.
      operationId: getAssetRelations
      security:
        - Bearer: []
      tags:
        - Relations
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/If-None-Match'
        - name: relationTypes
          description: Comma-delimited list of relation types to filter the asset relations to include only the specified types.
          in: query
          explode: false
          schema:
            type: array
            uniqueItems: true
            items:
              type: string
          example:
            - sources
            - derived
            - others
      responses:
        '200':
          description: Paginated list of relations for the given asset or an empty list if the asset has no relations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetRelationsResponse'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    post:
      summary: Create new asset relations for an asset
      description: Create new asset relations for the given asset. Each asset relation object in the request must include the ID of the related asset and the relation type.
      operationId: createAssetRelations
      security:
        - Bearer: []
      tags:
        - Relations
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAssetRelationsRequest'
      responses:
        '204':
          description: Asset relations created successfully.
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/relations/{relationType}:
    parameters:
      - $ref: '#/components/parameters/AssetID'
      - in: path
        name: relationType
        description: Name of relation type
        required: true
        schema:
          type: string
    get:
      summary: Get the asset relations for an asset filtered by relation type
      description: Get a paginated list of relations for an asset filtered by a relation type. Only relations for the provided type name will be returned. By default, the response will contain a maximum of 50 items per page. The caller may pass the `limit` query parameter to override this default with a lower limit. To request the next page of items, pass the `cursor` value provided in the response to the `cursor` query parameter.
      operationId: getAssetRelationsForRelationType
      security:
        - Bearer: []
      tags:
        - Relations
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Paginated list of relations for the given asset and relation type or an empty list if the asset has no relations for the relation type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetRelationsResponse'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    delete:
      summary: Delete all asset relations of the given relation type for an asset
      description: Delete all asset relations of type `relationType` for the asset corresponding to the given `assetId` parameter.
      operationId: deleteAssetRelationsForRelationType
      security:
        - Bearer: []
      tags:
        - Relations
      responses:
        '204':
          $ref: '#/components/responses/204_NoContent'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/relations/{relationType}/{relatedAssetId}:
    parameters:
      - $ref: '#/components/parameters/AssetID'
      - in: path
        name: relationType
        description: Name of relation type for asset relation to be deleted.
        required: true
        schema:
          type: string
      - in: path
        name: relatedAssetId
        description: ID of the related asset to be deleted.
        required: true
        schema:
          $ref: '#/components/schemas/AssetId'
    delete:
      summary: Delete an asset relation for an asset
      description: Delete an asset relation for the asset corresponding to the given `assetId` parameter. The `relationType` and `relatedAssetId` parameters must correspond to values from an existing asset relation returned by the `getAssetRelations` operation for the asset.
      operationId: deleteAssetRelation
      security:
        - Bearer: []
      tags:
        - Relations
      responses:
        '204':
          $ref: '#/components/responses/204_NoContent'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/relationTypes:
    parameters:
      - $ref: '#/components/parameters/AssetID'
    get:
      summary: Get the relation types for an asset
      description: Get a paginated list of relation type names that exist for the given asset. The values returned in this response can be used in the `relationTypes` parameter for the `getAssetRelations` operation. By default, the response will contain a maximum of 50 items per page. The caller may pass the `limit` query parameter to override this default with a lower limit. To request the next page of items, pass the `cursor` value provided in the response to the `cursor` query parameter.
      operationId: getAssetRelationTypes
      security:
        - Bearer: []
      tags:
        - Relations
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Paginated list of relation type names for the given asset or an empty list if the asset has no relations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetRelationTypesResponse'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/original/as/{seoName}:
    get:
      summary: Returns the originally uploaded binary for the asset
      description: The Original Asset Author API accepts an asset ID corresponding to the asset and delivers the bitstream as-is (as it was uploaded). This is a convenience API for `/adobe/assets/{assetId}/renditions/{renditionName}/as/{seoname}` with `renditionName` defaulting to `original`.
      operationId: getAssetOriginal
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/SEOName'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Original binary of the asset
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /{assetId}/renditions:
    get:
      summary: Returns a list of static renditions of an asset
      description: The List Renditions API accepts an asset ID and returns the static renditions associated with the asset. A success response includes list of available renditions and their attributes. Note that only renditions that support dimensions will return dimension values, otherwise the dimensions will be null.
      operationId: getAssetRenditions
      security:
        - Bearer: []
        - ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: List of available renditions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetRenditionsList'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /{assetId}/renditions/{renditionName}/as/{seoName}:
    get:
      summary: Returns a pre-generated (on AEM Assets authoring environment) rendition of the asset
      description: The Asset Rendition Author API accepts an asset ID corresponding to the asset and the rendition name, and delivers the selected asset's specified rendition's bitstream as-is (as present on AEM Assets authoring environment).
      operationId: getAssetRendition
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/RenditionName'
        - $ref: '#/components/parameters/SEOName'
        - $ref: '#/components/parameters/If-None-Match'
        - $ref: '#/components/parameters/Attachment'
      responses:
        '200':
          description: Binary of the specified rendition for the selected asset
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /import/fromUrl:
    post:
      operationId: importFromUrl
      security:
        - Bearer: []
          ApiKeyAuth: []
      summary: Import From Url
      description: |
        Imports the binary found at the specified URL into AEM as an Asset or as a Rendition of an existing Asset.

        While we have successfully tested imports with file sizes up to 30GB from common cloud storage providers, your results may vary based on the throughput provided by the source from which the assets are being imported.

        ## Requirements for Large Files (≥10GB)

        **Files 10GB and larger require:**

        - HTTP Range request support from the source URL (RFC 7233, Section 3.1: Range Header Syntax)
        - Maintaining stable, high-throughput connection to avoid timeouts

        ### Pre-Import Validation:
        Our API will test your URL with this request before importing large files:
        ```bash
        curl -H "Range: bytes=0-0" -I <your-url>
        ```

        **Required Response:**
        ```
        HTTP/1.1 206 Partial Content
        Content-Range: bytes 0-0/[total-file-size]
        Accept-Ranges: bytes
        ```
        Without the required response, import will fail.

        ### Common Implementation Examples:
        Most cloud storage providers support Range requests by default:
        - AWS S3, Google Cloud Storage, Azure Blob Storage - RFC 7233 compliant

        ### Technical Reference:
        Full specification available at: [RFC 7233 - HTTP/1.1 Range Requests](https://tools.ietf.org/html/rfc7233)
      tags:
        - Import
      requestBody:
        description: |
          The request body for importing one or more Assets from a URL.
          The request body contains the metadata for the assets
          to be imported and the URLs and descriptive data for the URLs to import.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportFromUrlRequest'
      responses:
        '202':
          description: |
            The response for an accepted import request. The path provided in the Location header can be followed to monitor the import's progress.
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportJobAcceptedStatus'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
  /import/jobs/{importJobId}/status:
    head:
      summary: Head request for import job status
      description: |
        Returns headers, including an ETag for the specified import job status, which can be used to check for the existence of, or validate a cached version of the import job status without sending a full GET request.
      operationId: headImportJobStatus
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Import
      parameters:
        - in: path
          name: importJobId
          required: true
          schema:
            $ref: '#/components/schemas/ImportJobId'
      responses:
        '200':
          description: OK
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
    get:
      operationId: getImportJobStatus
      security:
        - Bearer: []
          ApiKeyAuth: []
      summary: Get Import Job Status
      description: |
        Retrieves the status of the specified import job. If the job is in progress,
        the response will have a status of 200 and include a Retry-After header with the number
        of seconds to wait before checking the status again. If the job is complete, the response
        will have a status of 200 and the response body will include the final status of the job.
      tags:
        - Import
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
        - in: path
          name: importJobId
          required: true
          schema:
            $ref: '#/components/schemas/ImportJobId'
      responses:
        '200':
          description: A response describing the status of an import job
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportJobStatus'
        '304':
          $ref: '#/components/responses/304_NotModified'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /import/jobs/{importJobId}/result:
    head:
      operationId: headImportJobResult
      security:
        - Bearer: []
          ApiKeyAuth: []
      summary: Head request for import job result
      description: |
        Returns headers, including an ETag for the specified import job result, which can be used to check for the existence of, or validate a cached version of the import job result without sending a full GET request.
      tags:
        - Import
      parameters:
        - in: path
          name: importJobId
          required: true
          schema:
            $ref: '#/components/schemas/ImportJobId'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
      responses:
        '200':
          description: OK
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
    get:
      operationId: getImportJobResult
      security:
        - Bearer: []
          ApiKeyAuth: []
      summary: Get Import Job Result
      description: |
        Retrieves the Result of the specified import job.
      tags:
        - Import
      parameters:
        - in: path
          name: importJobId
          required: true
          schema:
            $ref: '#/components/schemas/ImportJobId'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: A response describing the result of an import job
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportJobResult'
        '304':
          $ref: '#/components/responses/304_NotModified'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /tasks/{taskId}:
    head:
      summary: Head request for fetching a task
      description: Returns headers, including an ETag for the specified task, which can be a lighter method of checking for the existence of, or validating a cached version of a task without sending a full GET request.
      operationId: headTask
      security:
        - Bearer: []
      tags:
        - Tasks
      parameters:
        - in: path
          name: taskId
          required: true
          schema:
            $ref: '#/components/schemas/TaskId'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: OK
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    get:
      summary: Get a task for a given task ID
      description: |
        Returns a task for the specified task ID.
      operationId: getTask
      security:
        - Bearer: []
      tags:
        - Tasks
      parameters:
        - in: path
          name: taskId
          required: true
          schema:
            $ref: '#/components/schemas/TaskId'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: A task for the specified task ID
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    delete:
      summary: Delete a task for a given task ID
      description: |
        Deletes a task for the specified task ID.
      operationId: deleteTask
      security:
        - Bearer: []
      tags:
        - Tasks
      parameters:
        - in: path
          name: taskId
          required: true
          schema:
            $ref: '#/components/schemas/TaskId'
        - $ref: '#/components/parameters/If-Match'
      responses:
        '204':
          description: Task deleted successfully
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '412':
          $ref: '#/components/responses/412_PreconditionFailed'
        '428':
          $ref: '#/components/responses/428_PreconditionRequired'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    patch:
      summary: Update a task by ID
      description: |
        Partially updates the task with the specified ID using JSON Merge Patch (RFC 7396) as follows:
        - Omitted fields are left unchanged
        - Fields set to `null` are removed/cleared
        - Only the specified fields are updated
      operationId: updateTask
      security:
        - Bearer: []
      tags:
        - Tasks
      parameters:
        - in: path
          name: taskId
          required: true
          schema:
            $ref: '#/components/schemas/TaskId'
        - $ref: '#/components/parameters/If-Match'
      requestBody:
        required: true
        description: JSON Merge Patch payload per RFC 7396.
        content:
          application/merge-patch+json:
            schema:
              $ref: '#/components/schemas/UpdateTaskRequest'
      responses:
        '200':
          description: Task successfully patched
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
              example:
                title: Mascot must wear the new hat (image v3)
                description: Updated Description
                taskId: opaque-id-string
                started:
                  by: bar@adobe.com
                  at: '2025-02-20T09:00:00Z'
                lastModified:
                  by: bar@adobe.com
                  at: '2025-03-01T12:00:00Z'
                created:
                  at: '2025-02-01T12:00:00Z'
                  by: foo@adobe.com
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '412':
          $ref: '#/components/responses/412_PreconditionFailed'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/422_UnprocessableEntity'
        '428':
          $ref: '#/components/responses/428_PreconditionRequired'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
x-webhooks:
  asset_processing_completed:
    post:
      operationId: asset_processing_completed
      summary: Asset processing completed event
      description: |
        Event triggered when an asset has completed processing in AEM. This is often used in place of an 'asset created' event for use
        cases that trigger from asset creation for two reasons - many extensions require some amount of asset metadata, which is
        extracted during asset processing and acting upon an asset that is in processing has a high chance of running into conflicts
        and contention issues.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/EventMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.processing_completed
      responses:
        '200':
          description: |
            Asset processing completed event data is received successfully
  asset_deleted:
    post:
      operationId: asset_deleted
      summary: Asset deleted event
      description: |
        An event that is triggered when an asset is deleted from AEM through the Assets View UI or the Assets Open API. It is not triggered when the asset is deleted with the AEM Touch UI or other AEM APIs.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        user:
                          $ref: '#/components/schemas/User'
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                        assetMetadata:
                          $ref: '#/components/schemas/EventAssetMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.deleted
            example:
              specversion: '1.0'
              type: aem.assets.asset.deleted
              source: acct:aem-p56789-e12345@adobe.com
              id: 4fd1cdd8-0898-4d60-90ad-3d442517d3cb
              time: '2021-05-20T20:00:00.000Z'
              datacontenttype: application/json
              data:
                assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                user:
                  imsUserId: 11362B9E62F4CD400A495ECF@09f51d11618ca7b4495ee0.e
                  principalId: testuser@adobe.com
                  displayName: Test User
                repositoryMetadata:
                  aem:assetState: processed
                  aem:checkedOutBy: testuser@test.com
                  dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
                  dc:format: image/jpeg
                  repo:createDate: '2023-04-14T06:31:07.174Z'
                  repo:createdBy: user@adobe.com
                  repo:modifiedBy: dam-writer-service
                  repo:modifyDate: '2023-04-15T05:01:44.229Z'
                  repo:name: city.jpeg
                  repo:path: /content/dam/city.jpeg
                  repo:size: 338049
                  repo:version: oak:1.0::ci:y7ngaf96th56jt62awk8xkoa37c572fe
                  tiff:imageLength: 780
                  tiff:imageWidth: 1000
                  repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
                  repo:ancestors:
                    - urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                  repo:state: ACTIVE
                  aem:published: '2023-04-15T05:03:47.229Z'
                assetMetadata:
                  xcm:machineKeywords:
                    - value: graphic design
                      confidence: 0.926
                    - value: clipart
                      confidence: 0.757
                  pur:expirationDate: '2023-04-17T06:31:07.174Z'
      responses:
        '200':
          description: |
            Asset deleted event data is received successfully
  asset_downloaded:
    post:
      operationId: asset_downloaded
      summary: Asset downloaded event
      description: |
        Event triggered when an asset, folder or collection of assets is downloaded from AEM.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        user:
                          $ref: '#/components/schemas/User'
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        assetMetadata:
                          $ref: '#/components/schemas/EventAssetMetadata'
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                        downloadedRenditions:
                          type: array
                          description: Renditions of the asset that were included in the download.
                          items:
                            $ref: '#/components/schemas/AssetRenditionsItem'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.downloaded
      responses:
        '200':
          description: |
            Asset downloaded event data is received successfully
  asset_metadata_updated:
    post:
      operationId: asset_metadata_updated
      summary: Asset metadata updated event
      description: |
        Event triggered when an asset has had its metadata updated through the Assets View UI or the Assets Open API.  It is not triggered when metadata is updated with the AEM Touch UI or other AEM APIs.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        user:
                          $ref: '#/components/schemas/User'
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        assetMetadata:
                          type: object
                          description: Metadata properties that have been extracted from the asset, derived during asset processing, or applied after ingestion.  These properties are, for the most part, editable.
                          properties:
                            event:created:
                              type: array
                              uniqueItems: true
                              items:
                                type: string
                              description: This contains the names of all properties that were added in the update. This property will only be present if the metadata update contains new properties.
                            event:updated:
                              type: object
                              description: This contains all properties that were updated. The value of each property is their previous state before the update. This property will only be present if the metadata update contains properties that have been updated.
                            event:deleted:
                              type: object
                              description: This contains all properties that were deleted. The value of each property is their previous state before the deletion. This property will only be present if the metadata update contains properties that have been deleted.
                            xcm:machineKeywords:
                              type: array
                              description: Smart Tags that have been predicted for the asset during asset processing
                              items:
                                type: object
                                properties:
                                  value:
                                    type: string
                                    description: The predicted tag for the asset
                                  confidence:
                                    type: number
                                    format: double
                                    description: The model's confidence score for this tag
                            pur:expirationDate:
                              type: string
                              format: date-time
                              description: The date and time when the asset will expire.
                            dc:title:
                              type: string
                              description: A name given to the asset
                          additionalProperties: true
                          example:
                            addedProp: addedValue
                            dc:description: The updated description.
                            event:created:
                              - addedProp
                            event:updated:
                              dc:description: The previous description before the update.
                            event:deleted:
                              removedProp: removedValue
                            xcm:machineKeywords:
                              - value: city
                                confidence: 0.8512217998504639
                            pur:expirationDate: '2023-04-17T06:31:07.174Z'
                            dc:title: Asset name
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.metadata_updated
      responses:
        '200':
          description: |
            Asset metadata updated event data is received successfully
  asset_published:
    post:
      operationId: asset_published
      summary: Asset published event
      description: |
        This event is triggered when an asset is published from an author instance to a publish instance.  This event will be sent whenever an asset is published directly.  Additionally, if an asset is moved using the Assets View UI or the OpenAPI, an asset unpublished event will be sent, followed by an asset published event.  We do not support this behavior when assets are moved from the Admin View UI (aka Touch UI) or from other APIs, such as Java APIs running in-process in the AEM environment.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        user:
                          $ref: '#/components/schemas/User'
                        tier:
                          $ref: '#/components/schemas/Tier'
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                        assetMetadata:
                          $ref: '#/components/schemas/EventAssetMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.published
            example:
              specversion: '1.0'
              type: aem.assets.asset.published
              source: acct:aem-p56789-e12345@adobe.com
              id: 4fd1cdd8-0898-4d60-90ad-3d442517d3cb
              time: '2021-05-20T20:00:00.000Z'
              datacontenttype: application/json
              data:
                assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                user:
                  imsUserId: 11362B9E62F4CD400A495ECF@09f51d11618ca7b4495ee0.e
                  principalId: testuser@adobe.com
                  displayName: Test User
                tier: publish
                repositoryMetadata:
                  aem:assetState: processed
                  aem:checkedOutBy: testuser@test.com
                  dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
                  dc:format: image/jpeg
                  repo:createDate: '2023-04-14T06:31:07.174Z'
                  repo:createdBy: user@adobe.com
                  repo:modifiedBy: dam-writer-service
                  repo:modifyDate: '2023-04-15T05:01:44.229Z'
                  repo:name: city.jpeg
                  repo:path: /content/dam/city.jpeg
                  repo:size: 338049
                  repo:version: oak:1.0::ci:y7ngaf96th56jt62awk8xkoa37c572fe
                  tiff:imageLength: 780
                  tiff:imageWidth: 1000
                  repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
                  repo:ancestors:
                    - urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                  repo:state: ACTIVE
                  aem:published: '2023-04-15T05:03:47.229Z'
                assetMetadata:
                  xcm:machineKeywords:
                    - value: graphic design
                      confidence: 0.926
                    - value: clipart
                      confidence: 0.757
                  pur:expirationDate: '2023-04-17T06:31:07.174Z'
      responses:
        '200':
          description: |
            Asset published event data is received successfully
  asset_unpublished:
    post:
      operationId: asset_unpublished
      summary: Asset unpublished event
      description: |
        An event that is triggered when an asset is unpublished from an AEM publish instance.  This event will be sent whenever an asset is unpublished directly.  Additionally, if an asset is moved or deleted using the Assets View UI or the OpenAPI, an asset unpublished event will be sent.  We do not support this behavior when assets are moved or deleted from the Admin View UI (aka Touch UI) or from other APIs, such as Java APIs running in-process in the AEM environment.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        user:
                          $ref: '#/components/schemas/User'
                        tier:
                          $ref: '#/components/schemas/Tier'
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                        assetMetadata:
                          $ref: '#/components/schemas/EventAssetMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.unpublished
            example:
              specversion: '1.0'
              type: aem.assets.asset.unpublished
              source: acct:aem-p56789-e12345@adobe.com
              id: 4fd1cdd8-0898-4d60-90ad-3d442517d3cb
              time: '2021-05-20T20:00:00.000Z'
              datacontenttype: application/json
              data:
                assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                user:
                  imsUserId: 11362B9E62F4CD400A495ECF@09f51d11618ca7b4495ee0.e
                  principalId: testuser@adobe.com
                  displayName: Test User
                tier: publish
                repositoryMetadata:
                  aem:assetState: processed
                  aem:checkedOutBy: testuser@test.com
                  dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
                  dc:format: image/jpeg
                  repo:createDate: '2023-04-14T06:31:07.174Z'
                  repo:createdBy: user@adobe.com
                  repo:modifiedBy: dam-writer-service
                  repo:modifyDate: '2023-04-15T05:01:44.229Z'
                  repo:name: city.jpeg
                  repo:path: /content/dam/city.jpeg
                  repo:size: 338049
                  repo:version: oak:1.0::ci:y7ngaf96th56jt62awk8xkoa37c572fe
                  tiff:imageLength: 780
                  tiff:imageWidth: 1000
                  repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
                  repo:ancestors:
                    - urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                  repo:state: ACTIVE
                  aem:published: '2023-04-15T05:03:47.229Z'
                assetMetadata:
                  xcm:machineKeywords:
                    - value: graphic design
                      confidence: 0.926
                    - value: clipart
                      confidence: 0.757
                  pur:expirationDate: '2023-04-17T06:31:07.174Z'
      responses:
        '200':
          description: |
            Asset unpublished event data is received successfully
  asset_import_completed:
    post:
      operationId: asset_import_completed
      summary: Asset import completed event
      description: |
        Event triggered when an asset import operation is completed in AEM.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      required:
                        - jobId
                        - startTime
                        - endTime
                        - operation
                        - status
                        - resultEndpoint
                      properties:
                        jobId:
                          $ref: '#/components/schemas/ImportJobId'
                        startTime:
                          type: string
                          format: date-time
                          description: The start time of the import job
                          minLength: 20
                        endTime:
                          type: string
                          format: date-time
                          description: The end time of the import job
                          minLength: 20
                        operation:
                          $ref: '#/components/schemas/ImportOperation'
                        status:
                          $ref: '#/components/schemas/ImportJobStateInEvent'
                        resultEndpoint:
                          type: string
                          format: uri
                          description: URL to retrieve the import job result
                          minLength: 1
                    type:
                      type: string
                      enum:
                        - aem.assets.import.completed
            example:
              specversion: '1.0'
              type: aem.assets.import.completed
              source: acct:aem-p12345-e12345@adobe.com
              id: ffa69f14-4f78-11ed-bdc3-0242ac129992
              time: '2024-08-12T15:29:00Z'
              datacontenttype: application/json
              data:
                jobId: 45a44ed7-f823-4a4c-896c-02b340ee87f0
                startTime: '2025-01-01T00:00:00Z'
                endTime: '2025-01-01T00:01:00.11Z'
                operation: aem.assets.import.fromurl
                status: completed
                resultEndpoint: https://author-p12345-e12345.adobeaemcloud.com/adobe/assets/import/jobs/45a44ed7-f823-4a4c-896c-02b340ee87f0/result
      responses:
        '200':
          description: Asset import completed event data is received successfully
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
    basicAuth:
      type: http
      scheme: basic
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
  schemas:
    InitiateUploadAsset:
      type: object
      description: Represents the file to be uploaded.
      additionalProperties: false
      properties:
        fileName:
          description: Name of the file as it will appear in the repository after upload
          type: string
          minLength: 1
        path:
          description: |
            For repositories that support folders, this will be the location where the file will be uploaded in the repository.
            If the path does not exist, missing folders will be created automatically.

            If the path is not valid for uploads in the targeted repository, a 400 response will be returned. The repository may
            choose to restrict uploads to certain paths, returning a 400 response when other paths are specified. Repositories that
            do not support folders will return a 400 response if this parameter is specified.

            For example, on traditional AEM Assets repositories, only paths under `/content/dam` are supported. When omitted,
            the asset will be uploaded to the default `/content/dam` path.
          type: string
          minLength: 1
        fileSize:
          description: The size, in bytes, of the file to be uploaded.
          type: integer
          format: int64
          minimum: 1
      required:
        - fileName
        - fileSize
    InitiateUploadRequest:
      type: object
      properties:
        assets:
          type: array
          uniqueItems: true
          minItems: 1
          maxItems: 1000
          items:
            $ref: '#/components/schemas/InitiateUploadAsset'
      required:
        - assets
      example:
        assets:
          - fileName: mountain.jpg
            path: /content/dam/upload
            fileSize: 123456
          - fileName: mountain2.jpg
            path: /content/dam/upload
            fileSize: 213000
    CommandResultMessage:
      description: CommandResultMessage Object to encapsulate the result of a command.
      type: object
      properties:
        type:
          type: string
          description: A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) that identifies the message type.
          minLength: 1
        title:
          type: string
          description: A short, human-readable summary of the problem type.
          minLength: 1
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence of the problem.
        context:
          type: object
          description: |
            An optional object containing additional context information about the problem.

            Each command MUST provide its own schema definition for this object, by defining all the properties a client is
            expected to encounter.
      required:
        - type
        - title
    CommandResult:
      description: |
        The result of a command. A command is an operation that changes a system in a different way than via a CRUD
        request to a resource.
      type: object
      properties:
        operation:
          type: string
          description: The operation that was performed.
          minLength: 1
        status:
          type: integer
          format: int32
          description: |
            The HTTP status code ([RFC9110, Section 15](https://www.rfc-editor.org/rfc/rfc9110.html#section-15))
            generated by the origin server corresponding to this operation.
        description:
          type: string
          description: A human-readable explanation specific to this command, explaining the status.
          minLength: 1
        data:
          type: object
          description: |
            The data returned by the operation, which will vary by the implementing command. Each command
            MUST provide its own schema definition for this object, by defining all the properties a client is
            expected to encounter.
        errors:
          type: array
          description: An optional array of errors that occurred during the operation.
          items:
            $ref: '#/components/schemas/CommandResultMessage'
        warnings:
          type: array
          description: An optional array of warnings that occurred during the operation.
          items:
            $ref: '#/components/schemas/CommandResultMessage'
      required:
        - operation
        - status
        - description
    AssetId:
      type: string
      description: ID of the asset
      minLength: 1
      example: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
    InitiateFileUploadResponse:
      type: object
      properties:
        fileName:
          description: Name of the file as it will appear in the repository after upload
          type: string
          minLength: 1
        path:
          description: |
            For repositories that support folders, this is the location where the file will be uploaded in the repository.
          type: string
          minLength: 1
        fileSize:
          description: The size, in bytes, of the file to be uploaded.
          type: integer
          format: int64
          minimum: 1
        assetId:
          $ref: '#/components/schemas/AssetId'
        uploadURIs:
          type: array
          description: |
            Pre-signed upload URIs for the binary upload to which the asset binary should be uploaded using HTTP PUT.
          minItems: 1
          items:
            type: string
        uploadToken:
          type: string
          minLength: 1
          description: Token used to upload the asset. This value should be included in the complete asset upload request.
        minPartSize:
          type: integer
          format: int64
          minimum: 1
          description: The minimum length, in bytes, of data that may be provided to any one of the uploadURIs, if there is more than one URI in the uploadURIs array.
        maxPartSize:
          type: integer
          format: int64
          minimum: 1
          description: The maximum length, in bytes, of data that may be provided to any one of the uploadURIs, if there is more than one URI in the uploadURIs array.
      example:
        fileName: mountain.jpg
        path: /content/dam/upload
        fileSize: 123456
        assetId: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
        uploadURIs:
          - https://upload.example.com/1234567890abcdef
        uploadToken: TVRBMFlpMWxNR0U1TFRkbE9HTXROR1ptWVMxaU9EQXlMVGhoTmpBMFltRTRNemRsTVMweE5qa3lNRE00TkRRNU5qSTVJekl3TWpNdE1EZ3RNVFJVTVRnNk5EQTZORGt1TmpNME5UVXpXaU5OYWtKcFRqSmFiRmxVVlhST1ZFVXlXWGt3TUUxRVdUVk1WR2hzVGxSamRFNUhWbXhPYWtreFRsUmthVmxxVG1rPSNkTGVpTmM5amt4amdtWEQxeFpUL1V2ckRXUFE9
        minPartSize: 3000
        maxPartSize: 10000
      required:
        - fileName
        - fileSize
        - assetId
        - uploadURIs
        - uploadToken
    InitiateUploadResponse:
      type: object
      properties:
        assets:
          type: array
          description: List of assets to be uploaded
          uniqueItems: true
          minItems: 1
          items:
            $ref: '#/components/schemas/InitiateFileUploadResponse'
      required:
        - assets
    InitiateUploadCommandResult:
      allOf:
        - $ref: '#/components/schemas/CommandResult'
        - type: object
          properties:
            operation:
              type: string
              default: adobe.assets.initiateUpload
              readOnly: true
            data:
              allOf:
                - type: object
                  description: Initiate upload operation result.
                - $ref: '#/components/schemas/InitiateUploadResponse'
          required:
            - operation
            - data
      example:
        operation: adobe.assets.initiateUpload
        status: 200
        description: Initiate Upload operation for the asset(s) is successful.
        data:
          assets:
            - fileName: mountain.jpg
              fileSize: 123456
              path: /content/dam/upload
              assetId: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
              uploadURIs:
                - https://upload.example.com/1234567890abcdef
              uploadToken: TVRBMFlpMWxNR0U1TFRkbE9HTXROR1ptWVMxaU9EQXlMVGhoTmpBMFltRTRNemRsTVMweE5qa3lNRE00TkRRNU5qSTVJekl3TWpNdE1EZ3RNVFJVTVRnNk5EQTZORGt1TmpNME5UVXpXaU5OYWtKcFRqSmFiRmxVVlhST1ZFVXlXWGt3TUUxRVdUVk1WR2hzVGxSamRFNUhWbXhPYWtreFRsUmthVmxxVG1rPSNkTGVpTmM5amt4amdtWEQxeFpUL1V2ckRXUFE9
              minPartSize: 3000
              maxPartSize: 10000
            - fileName: mountain2.jpg
              fileSize: 213000
              path: /content/dam/upload
              assetId: urn:aaid:aem:fac2f840-e310-48b6-bdc0-4b2ee0db0f23
              uploadURIs:
                - https://upload.example.com/345678xyzabc
              uploadToken: PRAs6s2l2Ks6AjlQw01Hq85yc485QnWQufK810Nuo98Dtz0j37wfZpVMH8nh1ICT3sc1Zr9YtgqeNdBWs69wYeXBebezodnxtd5tuOonJoHQ1pGTLe6nJe34XYEWNyAgFmq0GMNfh3zlIU7T95DGP5olI1Gqd50sR7JzMWH58nLFPpP9aL0uV3zolgAI023q9TA8TR2MW6Htu63x4IS76O5j0o87NA896l9XacL2o685MJNJoP10gxClHxb50ZeBA8U3Q93bRQ5P
              minPartSize: 3000
              maxPartSize: 10000
        errors: []
        warnings: []
    ProblemDetails:
      description: A [RFC7807](https://www.rfc-editor.org/rfc/rfc7807) JSON Problem Details Object
      type: object
      properties:
        type:
          type: string
          description: A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) to a URL, which, when dereferenced, provides human readable documentation for the problem type.  The problem type may be equivalent to the `status` or may be a "sub-type".  This URI is not intended to be parsed by clients; rather it should be treated as an opaque string that uniquely represents the error condition as-is.
          minLength: 1
        title:
          type: string
          description: A short, human-readable summary of the problem type.
          minLength: 1
        status:
          type: integer
          description: The HTTP status code ([RFC9110], Section 15) generated by the origin server for this occurrence of the problem.
          minLength: 1
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence of the problem.
          minLength: 1
        requestId:
          type: string
          description: |
            A unique identifier that is assigned to the request, either by the API caller or by the service itself.
          minLength: 1
      required:
        - type
        - title
        - status
        - detail
    CompleteUploadAsset:
      type: object
      properties:
        uploadToken:
          type: string
          minLength: 1
          description: Token used to upload the asset
        createVersion:
          type: boolean
          description: |
            This parameter controls how uploads of existing files are handled, with the following behaviors:

            * `true`: Create Version - a new version for the existing asset will be created.
            * `false`: Replace Asset - the entire asset will be removed and replaced with the uploaded file.

            In both cases, the original asset id will be preserved.
          default: true
        versionLabel:
          type: string
          description: If `createVersion` is set to `true`, this label will be used for the new version that is created for any versioned assets.
        versionComment:
          type: string
          description: If `createVersion` is set to `true`, this comment will be used for the new version that is created for any versioned assets.
      required:
        - uploadToken
    CompleteFileUploadResponse:
      type: object
      properties:
        assetId:
          $ref: '#/components/schemas/AssetId'
        fileName:
          description: Name of the file as it appears in the repository.
          type: string
          minLength: 1
        fileSize:
          description: The size, in bytes, of the file that was uploaded.
          type: integer
          format: int64
          minimum: 1
        path:
          description: |
            The location where the file is available in the repository, in case
            the repository supports folders.
          type: string
          minLength: 1
      example:
        fileName: mountain.jpg
        path: /content/dam/upload
        assetId: urn:aaid:aem:d2dea5f5-15c8-46de-9881-5c2f17a0b2fa
        fileSize: 123456
      required:
        - assetId
        - fileName
        - fileSize
    CompleteSingleUploadResponse:
      type: object
      properties:
        assets:
          type: array
          description: Single asset that was uploaded.
          minItems: 1
          maxItems: 1
          items:
            $ref: '#/components/schemas/CompleteFileUploadResponse'
      required:
        - assets
      example:
        assets:
          - fileName: mountain.jpg
            path: /content/dam/upload
            assetId: urn:aaid:aem:d2dea5f5-15c8-46de-9881-5c2f17a0b2fa
            fileSize: 123456
    CompleteFileUploadCommandResult:
      allOf:
        - $ref: '#/components/schemas/CommandResult'
        - type: object
          properties:
            operation:
              type: string
              default: adobe.assets.completeUpload
              readOnly: true
            data:
              allOf:
                - type: object
                  description: Complete single upload operation result.
                - $ref: '#/components/schemas/CompleteSingleUploadResponse'
          required:
            - operation
            - data
      example:
        operation: adobe.assets.completeUpload
        status: 200
        description: Complete upload operation for the asset is successful.
        data:
          assets:
            - assetId: urn:aaid:aem:d2dea5f5-15c8-46de-9881-5c2f17a0b2fa
              fileName: mountain.jpg
              fileSize: 123456
              path: /content/dam/upload
        errors: []
        warnings: []
    FileContentDisposition:
      type: string
      description: filename will be the seo-name set in request path, along with the extension of the delivered file
      example: inline; filename="name.pdf"
    InitiateExistingAssetUploadRequest:
      type: object
      description: Request to initiate upload for an existing asset.
      properties:
        fileName:
          description: Name of the file to be uploaded. Must match the existing asset's file name stored in the repository.
          type: string
          minLength: 1
        fileSize:
          description: The size, in bytes, of the file to be uploaded.
          type: integer
          format: int64
          minimum: 1
      required:
        - fileName
        - fileSize
      example:
        fileName: mountain.jpg
        fileSize: 123456
    InitiateExistingAssetUploadResponse:
      type: object
      properties:
        assets:
          type: array
          description: Single existing asset upload initiation result.
          minItems: 1
          maxItems: 1
          items:
            $ref: '#/components/schemas/InitiateFileUploadResponse'
      required:
        - assets
      example:
        assets:
          - fileName: mountain.jpg
            fileSize: 123456
            path: /content/dam/upload
            assetId: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
            uploadURIs:
              - https://upload.example.com/1234567890abcdef
            uploadToken: TVRBMFlpMWxNR0U1TFRkbE9HTXROR1ptWVMxaU9EQXlMVGhoTmpBMFltRTRNemRsTVMweE5qa3lNRE00TkRRNU5qSTVJekl3TWpNdE1EZ3RNVFJVTVRnNk5EQTZORGt1TmpNME5UVXpXaU5OYWtKcFRqSmFiRmxVVlhST1ZFVXlXWGt3TUUxRVdUVk1WR2hzVGxSamRFNUhWbXhPYWtreFRsUmthVmxxVG1rPSNkTGVpTmM5amt4amdtWEQxeFpUL1V2ckRXUFE9
            minPartSize: 3000
            maxPartSize: 10000
    InitiateExistingAssetUploadCommandResult:
      allOf:
        - $ref: '#/components/schemas/CommandResult'
        - type: object
          properties:
            operation:
              type: string
              default: adobe.assets.initiateExistingAssetUpload
              readOnly: true
            data:
              allOf:
                - type: object
                  description: Initiate existing asset upload operation result.
                - $ref: '#/components/schemas/InitiateExistingAssetUploadResponse'
          required:
            - operation
            - data
      example:
        operation: adobe.assets.initiateExistingAssetUpload
        status: 200
        description: Initiate upload operation for the existing asset is successful.
        data:
          assets:
            - fileName: mountain.jpg
              fileSize: 123456
              path: /content/dam/upload
              assetId: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
              uploadURIs:
                - https://upload.example.com/1234567890abcdef
              uploadToken: TVRBMFlpMWxNR0U1TFRkbE9HTXROR1ptWVMxaU9EQXlMVGhoTmpBMFltRTRNemRsTVMweE5qa3lNRE00TkRRNU5qSTVJekl3TWpNdE1EZ3RNVFJVTVRnNk5EQTZORGt1TmpNME5UVXpXaU5OYWtKcFRqSmFiRmxVVlhST1ZFVXlXWGt3TUUxRVdUVk1WR2hzVGxSamRFNUhWbXhPYWtreFRsUmthVmxxVG1rPSNkTGVpTmM5amt4amdtWEQxeFpUL1V2ckRXUFE9
              minPartSize: 3000
              maxPartSize: 10000
        errors: []
        warnings: []
    JobState:
      type: string
      description: The state of an asynchronous job. Possible values are `QUEUED`, `PROCESSING`, `COMPLETED`, `COMPLETED_WITH_ERRORS`, or `FAILED`.
      enum:
        - QUEUED
        - PROCESSING
        - COMPLETED
        - COMPLETED_WITH_ERRORS
        - FAILED
    AssetJobStatus:
      type: object
      description: The status of an asset async job.
      properties:
        jobId:
          type: string
          minLength: 1
        state:
          allOf:
            - $ref: '#/components/schemas/JobState'
          description: The state of the async job. Possible values are `QUEUED`, `PROCESSING`, `COMPLETED`, `COMPLETED_WITH_ERRORS`, or `FAILED`. To inspect the errors or warnings, request the job result by following the link provided in the Location header.
        status:
          type: string
          description: Additional information about processing state. If an error occurred, error information will appear here.
      required:
        - jobId
        - state
      example:
        jobId: <job-id>
        state: PROCESSING
    MoveAssetsRequest:
      description: Request to move assets
      allOf:
        - type: object
          properties:
            mode:
              type: string
              enum:
                - BY_ID
                - BY_PATH
              description: The addressing mode for the move operation.
            assets:
              type: array
              description: The assets to be moved or renamed, using ID-based or path-based addressing depending on the `mode` parameter.
              minItems: 1
              maxItems: 10
              uniqueItems: true
              items:
                type: object
                description: |
                  An asset to move and/or rename. Parameters `source` and `destination`
                  are ID-based or path-based, depending on the `mode` parameter. At least
                  one of `destination` or `destinationName` must be provided. If `destination`
                  is omitted, the asset is renamed within its current parent folder.
                properties:
                  source:
                    description: The asset to be moved or renamed, expressed as an ID or path depending on the `mode` parameter.
                    type: string
                    minLength: 1
                  destination:
                    description: The parent folder to move the asset into, expressed as an ID or path depending on the `mode` parameter. If omitted, the asset remains in its current location.
                    type: string
                    minLength: 1
                  destinationName:
                    description: The new name for the asset after the operation. If omitted, the asset retains its current name.
                    type: string
                    minLength: 1
                  overwriteBehavior:
                    description: |
                      Specifies how to handle naming conflicts when an asset with the same name exists at the destination. The following behaviors are supported:
                      * `REJECT` (default): Reject the move operation.
                      * `REPLACE`: Replace the existing asset. The existing asset ID will not be changed.
                      * `VERSION`: Create a new version of the existing asset.
                    type: string
                    enum:
                      - REJECT
                      - REPLACE
                      - VERSION
                    default: REJECT
                required:
                  - source
          required:
            - mode
            - assets
    MovedAssetItem:
      type: object
      description: |
        A single moved asset in the move command result. The operation supports three
        modes: re-parent only (previousParentId and destinationParentId are present;
        previousName and destinationName are absent), rename only (previousName and
        destinationName are present; previousParentId and destinationParentId are absent),
        or both (all four fields are present). Only `id` is guaranteed in every case.
      additionalProperties: false
      required:
        - id
      properties:
        id:
          type: string
          readOnly: true
          description: The id of the moved asset.
        path:
          type: string
          readOnly: true
          description: The final absolute path after the move.
        sourcePath:
          type: string
          readOnly: true
          description: Absolute path that was moved.
        previousParentId:
          type: string
          readOnly: true
          description: The id of the source parent folder.
        previousParentPath:
          type: string
          readOnly: true
          description: Absolute source parent folder path.
        previousName:
          type: string
          readOnly: true
          minLength: 1
          description: The name of the asset before being renamed. Present only when the asset was renamed in this operation.
        destinationParentId:
          type: string
          readOnly: true
          description: The id of the target parent folder.
        destinationParentPath:
          type: string
          readOnly: true
          description: Absolute target parent folder path.
        destinationName:
          type: string
          readOnly: true
          minLength: 1
          description: The name of the asset after being renamed. Present only when the asset was renamed in this operation.
    FailedAssetItem:
      type: object
      description: |
        An asset that failed to be moved, along with the reason for the failure.
      additionalProperties: false
      required:
        - type
        - title
      properties:
        id:
          type: string
          readOnly: true
          minLength: 1
          description: The id of the source asset, if known.
          example: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
        path:
          type: string
          readOnly: true
          minLength: 1
          description: The source path of the asset, if known.
          example: /content/dam/my-folder/my-asset.jpg
        type:
          type: string
          readOnly: true
          description: A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) that identifies the problem type.
          minLength: 1
          example: http://api.adobeaemcloud.com/adobe/meta/errors/not_found
        title:
          type: string
          readOnly: true
          description: A short, human-readable summary of the problem type.
          minLength: 1
          example: Not Found
        detail:
          type: string
          readOnly: true
          description: A human-readable explanation specific to this occurrence of the problem.
          example: The asset could not be found at the specified source path.
    MoveAssetsCommandResult:
      description: |
        The result of an `adobe.assets.moveAssets` command.
      allOf:
        - $ref: '#/components/schemas/CommandResult'
        - type: object
          properties:
            operation:
              type: string
              default: adobe.assets.moveAssets
              readOnly: true
            data:
              type: object
              description: Move Assets Command Result data
              properties:
                movedAssets:
                  type: array
                  uniqueItems: true
                  description: Assets that were successfully moved.
                  maxItems: 10
                  items:
                    $ref: '#/components/schemas/MovedAssetItem'
                failedAssets:
                  type: array
                  uniqueItems: true
                  description: Assets that failed to be moved, along with the reason for each failure. Always present; an empty array indicates all assets were moved successfully.
                  maxItems: 10
                  items:
                    $ref: '#/components/schemas/FailedAssetItem'
              required:
                - movedAssets
                - failedAssets
          required:
            - operation
            - data
      example:
        operation: adobe.assets.moveAssets
        status: 200
        description: Assets moved successfully.
        data:
          movedAssets:
            - id: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
              path: /content/dam/destination-folder/my-asset.jpg
              sourcePath: /content/dam/source-folder/my-asset.jpg
              previousParentId: urn:aaid:aem:2b045cff-fceb-5898-cbe4-g035e1883c86
              previousParentPath: /content/dam/source-folder
              destinationParentId: urn:aaid:aem:3c156dgg-gdfc-6909-dcf5-h146f2994d97
              destinationParentPath: /content/dam/destination-folder
          failedAssets:
            - id: urn:aaid:aem:9f287caa-12bc-4901-ae34-d847e3621f88
              path: /content/dam/source-folder/locked-asset.jpg
              type: http://api.adobeaemcloud.com/adobe/meta/errors/forbidden
              title: Forbidden
              detail: The asset could not be moved because it is locked by another user.
    PublishTarget:
      type: string
      description: |
        Target used by publish and unpublish operations.
        - `AEM_PUBLISH` - AEM publish instances used for website delivery.
        - `DYNAMIC_MEDIA` - Dynamic Media used for optimized media delivery.
      enum:
        - AEM_PUBLISH
        - DYNAMIC_MEDIA
      example: AEM_PUBLISH
    PublishAssetsRequest:
      description: Request body for batch publish operations.
      type: object
      properties:
        assets:
          type: array
          description: |
            Assets to publish. Each item identifies an asset by its assetId.
            Minimum 1, maximum 10 assets per request. Requests exceeding 10 assets will 
            receive a 400 Bad Request response.
          items:
            $ref: '#/components/schemas/AssetId'
          minItems: 1
          maxItems: 10
        target:
          $ref: '#/components/schemas/PublishTarget'
      required:
        - assets
        - target
      example:
        assets:
          - urn:aaid:aem:12345678-1234-1234-1234-123456789012
          - urn:aaid:aem:87654321-4321-4321-4321-210987654321
        target: AEM_PUBLISH
    PublishAssetsCommandResult:
      description: |
        The result of an `adobe.assets.publishAssets` command.
      allOf:
        - $ref: '#/components/schemas/JobResult'
        - type: object
          properties:
            operation:
              type: string
              default: adobe.assets.publishAssets
            data:
              $ref: '#/components/schemas/PublishAssetsCommandResultData'
          required:
            - operation
      example:
        operation: adobe.assets.publishAssets
        status: 200
        description: Publish operation completed
        data:
          assets:
            - assetId: urn:aaid:aem:12345678-1234-1234-1234-123456789012
              publishedAt: '2026-01-22T10:30:00.000Z'
            - assetId: urn:aaid:aem:87654321-4321-4321-4321-210987654321
              publishedAt: '2026-01-22T10:30:01.000Z'
    JobResult:
      description: The result of a completed async job.
      type: object
      properties:
        operation:
          $ref: '#/components/schemas/operation'
        status:
          $ref: '#/components/schemas/status'
        description:
          $ref: '#/components/schemas/description'
        data:
          type: object
          description: |
            The data returned by the operation, which will vary by the implementing command.
        errors:
          $ref: '#/components/schemas/errors'
        warnings:
          $ref: '#/components/schemas/warnings'
      required:
        - operation
        - status
        - description
      discriminator:
        propertyName: operation
        mapping:
          adobe.assets.publishAssets: '#/components/schemas/PublishAssetsCommandResult'
          adobe.assets.unpublishAssets: '#/components/schemas/UnpublishAssetsCommandResult'
          adobe.assets.assignLicenses: '#/components/schemas/LicenseAssignmentCommandResult'
          adobe.assets.unassignLicenses: '#/components/schemas/LicenseUnassignmentCommandResult'
          adobe.assets.completeLicenseUpload: '#/components/schemas/CreateLicenseJobResult'
    UnpublishAssetsCommandResultData:
      description: Data object for batch unpublish command result.
      type: object
      properties:
        assets:
          type: array
          description: Assets that were successfully unpublished.
          items:
            type: object
            properties:
              assetId:
                $ref: '#/components/schemas/AssetId'
              unpublishedAt:
                type: string
                format: date-time
                description: Timestamp when the asset was unpublished.
            required:
              - assetId
              - unpublishedAt
      required:
        - assets
      example:
        assets:
          - assetId: urn:aaid:aem:12345678-1234-1234-1234-123456789012
            unpublishedAt: '2026-01-22T11:00:00.000Z'
          - assetId: urn:aaid:aem:87654321-4321-4321-4321-210987654321
            unpublishedAt: '2026-01-22T11:00:01.000Z'
    UnpublishAssetsCommandResult:
      description: |
        The result of an `adobe.assets.unpublishAssets` command.
      allOf:
        - $ref: '#/components/schemas/JobResult'
        - type: object
          properties:
            operation:
              type: string
              default: adobe.assets.unpublishAssets
            data:
              $ref: '#/components/schemas/UnpublishAssetsCommandResultData'
          required:
            - operation
      example:
        operation: adobe.assets.unpublishAssets
        status: 200
        description: Unpublish operation completed
        data:
          assets:
            - assetId: urn:aaid:aem:12345678-1234-1234-1234-123456789012
              unpublishedAt: '2026-01-22T11:00:00.000Z'
            - assetId: urn:aaid:aem:87654321-4321-4321-4321-210987654321
              unpublishedAt: '2026-01-22T11:00:01.000Z'
    LicenseAssignmentState:
      type: string
      description: |
        Terminal state of a license assignment request. `COMPLETED_WITH_ERRORS`
        indicates some target/license pairs failed; the per-pair outcomes, including
        failures, are reported in the `data.assignments` array of the
        `LicenseAssignmentCommandResult` response (each entry carries a `status` field
        with the HTTP outcome for that pair).
      enum:
        - COMPLETED
        - COMPLETED_WITH_ERRORS
        - FAILED
      example: COMPLETED_WITH_ERRORS
    LicenseTargetType:
      type: string
      description: The kind of target entity a license can be bound to. `FOLDER` is only valid in repositories that support folders.
      enum:
        - ASSET
        - FOLDER
    LicenseTarget:
      type: object
      description: Reference to a target entity (an asset or folder) to which a license can be bound.
      required:
        - id
        - type
      properties:
        id:
          type: string
          description: The identifier of the target entity (asset or folder).
          minLength: 1
          maxLength: 256
          example: <asset-or-folder-id>
        type:
          allOf:
            - $ref: '#/components/schemas/LicenseTargetType'
          description: The kind of target entity. `FOLDER` is only valid in repositories that support folders.
    LicenseAssignmentResultItem:
      type: object
      description: Per-pair outcome of a single target/license assignment.
      required:
        - target
        - licenseId
        - status
      properties:
        target:
          $ref: '#/components/schemas/LicenseTarget'
        licenseId:
          type: string
          minLength: 1
          maxLength: 256
          description: Identifier of the license in the pair.
        status:
          type: integer
          format: int32
          description: |
            Per-pair HTTP status code. `200` means the binding succeeded or was
            already present. `404` means the target or license was not found, or the
            caller is not authorized to read the target. `403` means the caller can
            read the target but is not authorized to modify it.
        detail:
          type: string
          minLength: 1
          description: Human-readable explanation of the per-pair outcome, present when the pair did not succeed.
    LicenseAssignmentCommandResult:
      description: |
        The result of an `adobe.assets.assignLicenses` command that completed
        synchronously. Per-pair outcomes are reported in `data.assignments`, so a
        `COMPLETED_WITH_ERRORS` state is accompanied by the specific pairs that
        succeeded or failed.
      allOf:
        - $ref: '#/components/schemas/CommandResult'
        - type: object
          properties:
            operation:
              type: string
              description: The operation that was performed.
              default: adobe.assets.assignLicenses
            data:
              type: object
              description: License assignment command result data.
              properties:
                state:
                  $ref: '#/components/schemas/LicenseAssignmentState'
                assignments:
                  type: array
                  minItems: 1
                  maxItems: 10
                  uniqueItems: true
                  description: Per-pair outcomes, one entry per submitted target/license pair.
                  items:
                    $ref: '#/components/schemas/LicenseAssignmentResultItem'
              required:
                - state
                - assignments
            status:
              type: integer
              format: int32
              description: |
                The HTTP status code for the terminal command result. This is `200`
                both when the result is returned directly and when it is retrieved
                from the asynchronous job-result endpoint.
              example: 200
            description:
              type: string
              minLength: 1
              description: Human-readable explanation of the assignment result.
          required:
            - operation
            - status
            - description
            - data
      example:
        operation: adobe.assets.assignLicenses
        status: 200
        description: All license assignments completed successfully.
        data:
          state: COMPLETED
          assignments:
            - target:
                id: <asset-id>
                type: ASSET
              licenseId: <license-id>
              status: 200
    LicenseUnassignmentState:
      type: string
      description: |
        Terminal state of a license unassignment request. Every terminal state,
        including `FAILED`, reports one outcome for each submitted target/license
        pair in `data.assignments`. `COMPLETED_WITH_ERRORS` indicates that at least
        one submitted pair has a non-success outcome.
      enum:
        - COMPLETED
        - COMPLETED_WITH_ERRORS
        - FAILED
      example: COMPLETED_WITH_ERRORS
    LicenseUnassignmentResultItem:
      type: object
      description: Per-pair outcome of a single target/license unassignment.
      required:
        - target
        - licenseId
        - status
      properties:
        target:
          $ref: '#/components/schemas/LicenseTarget'
        licenseId:
          type: string
          minLength: 1
          maxLength: 256
          description: Opaque identifier of the license in the submitted pair.
          example: <license-id>
        status:
          type: integer
          format: int32
          description: |
            Per-pair HTTP status code. `200` means the requested association was
            removed or was already absent. The absence of a corresponding license
            library record does not change that successful outcome. `404` means the
            target was not found or the caller is not authorized to read it. `403`
            means the caller can read the target but is not authorized to modify it.
          example: 200
        detail:
          type: string
          minLength: 1
          description: Human-readable explanation of a non-success outcome.
      example:
        target:
          id: <asset-id>
          type: ASSET
        licenseId: <license-id>
        status: 200
    LicenseUnassignmentCommandResult:
      description: |
        The terminal result of an `adobe.assets.unassignLicenses` command, returned
        either directly after synchronous processing or by the asynchronous
        job-result endpoint. Every terminal state reports one outcome for each
        submitted target/license pair in `data.assignments`. A `200` pair outcome
        means the requested association was removed or was already absent.
      allOf:
        - $ref: '#/components/schemas/CommandResult'
        - type: object
          properties:
            operation:
              type: string
              description: The operation that was performed.
              default: adobe.assets.unassignLicenses
            data:
              type: object
              description: License unassignment command result data.
              properties:
                state:
                  $ref: '#/components/schemas/LicenseUnassignmentState'
                assignments:
                  type: array
                  minItems: 1
                  maxItems: 10
                  uniqueItems: true
                  description: |
                    Per-pair unassignment outcomes, with one entry for every
                    submitted target/license pair in every terminal state.
                  items:
                    $ref: '#/components/schemas/LicenseUnassignmentResultItem'
              required:
                - state
                - assignments
            status:
              type: integer
              format: int32
              description: |
                The HTTP status code for the terminal command result. This is `200`
                both when the result is returned directly and when it is retrieved
                from the asynchronous job-result endpoint.
              example: 200
            description:
              type: string
              minLength: 1
              description: Human-readable explanation of the unassignment result.
          required:
            - operation
            - status
            - description
            - data
      example:
        operation: adobe.assets.unassignLicenses
        status: 200
        description: One association was removed or already absent; one target could not be modified.
        data:
          state: COMPLETED_WITH_ERRORS
          assignments:
            - target:
                id: <asset-id>
                type: ASSET
              licenseId: <license-id>
              status: 200
            - target:
                id: <folder-id>
                type: FOLDER
              licenseId: <license-id>
              status: 403
              detail: The caller is not authorized to modify the target.
    CreateLicenseJobResult:
      description: |
        The result of an `adobe.assets.completeLicenseUpload` operation. When the job reaches a
        successful terminal state (`COMPLETED` or `COMPLETED_WITH_ERRORS`), the identifier of the
        created license is available in `data.licenseId`. When the job terminates as `FAILED` no
        license is created, so `data.licenseId` is absent; consult the `errors`/`warnings` on the
        base job result for the failure detail.
      allOf:
        - $ref: '#/components/schemas/CommandResult'
        - type: object
          properties:
            operation:
              type: string
              description: The operation that was performed.
              default: adobe.assets.completeLicenseUpload
            data:
              type: object
              description: Create license job result data.
              properties:
                licenseId:
                  type: string
                  minLength: 1
                  maxLength: 256
                  description: Identifier of the created license. Present when the job reached a successful terminal state (`COMPLETED` or `COMPLETED_WITH_ERRORS`); absent when the job terminated as `FAILED`, since no license was created in that case.
            status:
              type: integer
              format: int32
              description: The HTTP status code.
              example: 200
            description:
              type: string
              description: Human-readable explanation of the create license result.
          required:
            - operation
            - status
            - description
            - data
      example:
        operation: adobe.assets.completeLicenseUpload
        status: 200
        description: License created successfully.
        data:
          licenseId: <license-id>
    operation:
      type: string
      description: The operation that was performed.
      minLength: 1
    status:
      type: integer
      format: int32
      description: |
        The HTTP status code ([RFC9110, Section 15](https://www.rfc-editor.org/rfc/rfc9110.html#section-15))
        generated by the origin server corresponding to this operation.
    description:
      type: string
      description: A human-readable explanation specific to this command, explaining the status.
      minLength: 1
    errors:
      type: array
      description: An optional array of errors that occurred during the operation.
      items:
        $ref: '#/components/schemas/CommandResultMessage'
    warnings:
      type: array
      description: An optional array of warnings that occurred during the operation.
      items:
        $ref: '#/components/schemas/CommandResultMessage'
    PublishAssetsCommandResultData:
      description: Data object for batch publish command result.
      type: object
      properties:
        assets:
          type: array
          description: Assets that were successfully published.
          items:
            type: object
            properties:
              assetId:
                $ref: '#/components/schemas/AssetId'
              publishedAt:
                type: string
                format: date-time
                description: Timestamp when the asset was published.
            required:
              - assetId
              - publishedAt
      required:
        - assets
      example:
        assets:
          - assetId: urn:aaid:aem:12345678-1234-1234-1234-123456789012
            publishedAt: '2026-01-22T10:30:00.000Z'
          - assetId: urn:aaid:aem:87654321-4321-4321-4321-210987654321
            publishedAt: '2026-01-22T10:30:01.000Z'
    UnpublishAssetsRequest:
      description: Request body for batch unpublish operations.
      type: object
      properties:
        assets:
          type: array
          description: |
            Assets to unpublish. Each item identifies an asset by its assetId.
            Minimum 1, maximum 10 assets per request. Requests exceeding 10 assets will 
            receive a 400 Bad Request response.
          items:
            $ref: '#/components/schemas/AssetId'
          minItems: 1
          maxItems: 10
        target:
          $ref: '#/components/schemas/PublishTarget'
      required:
        - assets
        - target
      example:
        assets:
          - urn:aaid:aem:12345678-1234-1234-1234-123456789012
          - urn:aaid:aem:87654321-4321-4321-4321-210987654321
        target: AEM_PUBLISH
    CompositeQuery:
      description: A composite query is a combination of clauses, each of which can itself be a composite query
      anyOf:
        - $ref: '#/components/schemas/OrQuery'
        - $ref: '#/components/schemas/AndQuery'
        - $ref: '#/components/schemas/NotQuery'
        - $ref: '#/components/schemas/MatchQuery'
        - $ref: '#/components/schemas/TermQuery'
        - $ref: '#/components/schemas/RangeQuery'
        - $ref: '#/components/schemas/ExistsQuery'
    OrQuery:
      type: object
      description: |
        Logical or operator. The results must match at least one of the sub-queries.
      additionalProperties: false
      properties:
        or:
          type: array
          minItems: 1
          maxItems: 5
          items:
            $ref: '#/components/schemas/CompositeQuery'
      required:
        - or
      example: '{"or":[{"match":{"text":"blue"}},{"match":{"text":"red"}}]}'
    AndQuery:
      type: object
      description: |
        Logical and operator. The results must match all the sub-queries in this clause.
      additionalProperties: false
      properties:
        and:
          type: array
          minItems: 1
          maxItems: 5
          items:
            $ref: '#/components/schemas/CompositeQuery'
      required:
        - and
      example:
        and:
          - match:
              text: blue
          - match:
              text: white
    NotQuery:
      type: object
      description: |
        Logical not operator. All matches are excluded from the results
      additionalProperties: false
      properties:
        not:
          type: array
          minItems: 1
          maxItems: 1
          items:
            $ref: '#/components/schemas/CompositeQuery'
      required:
        - not
      example:
        not:
          - term:
              metadata.repositoryMetadata.dc:format:
                - video/mp4
    MatchQueryMatch:
      type: object
      description: |
        Search for full text using different search modes.
      properties:
        mode:
          allOf:
            - $ref: '#/components/schemas/MatchMode'
          default: FULLTEXT
        text:
          description: |
            The text to search. An empty string searches for everything.
          type: string
          maxLength: 256
          minLength: 0
      required:
        - text
      discriminator:
        propertyName: mode
        mapping:
          FULLTEXT: '#/components/schemas/FullTextMatchQuery'
          HYBRID: '#/components/schemas/HybridMatchQuery'
          NATURAL_LANGUAGE: '#/components/schemas/NaturalLanguageMatchQuery'
    MatchOperator:
      type: string
      description: Defines how to interpret the `text` input
      enum:
        - startsWith
        - matches
    FullTextMatchQuery:
      allOf:
        - $ref: '#/components/schemas/MatchQueryMatch'
        - type: object
          description: |
            Performs keyword-based search across asset metadata.
          properties:
            fields:
              description: Fields to search text. If this property is omitted, we will search for specified text across all fields enabled by the backend implementation and index configuration.
              type: array
              uniqueItems: true
              minItems: 1
              maxItems: 10
              items:
                type: string
                maxLength: 256
                minLength: 1
            operator:
              allOf:
                - $ref: '#/components/schemas/MatchOperator'
              default: matches
              description: |
                Defines how to interpret the `text` input
                * `startsWith`: Give all results where the asset metadata has one or more attributes (selected via `fields` parameter) with values starting with `text`.
                * `matches`: Give all results where the asset metadata has one or more attributes (selected via `fields` parameter) with values containing `text`.
    HybridMatchQuery:
      allOf:
        - $ref: '#/components/schemas/MatchQueryMatch'
        - type: object
          description: |
            Performs keyword-based search across asset metadata and incorporates semantic matching to improve relevance.
    NaturalLanguageMatchQuery:
      allOf:
        - $ref: '#/components/schemas/MatchQueryMatch'
        - type: object
          description: |
            Performs natural language search by interpreting the intent of the query.
    MatchMode:
      type: string
      description: |
        The mode of the match query
        * `FULLTEXT`: Performs keyword-based search across asset metadata.
        * `HYBRID`: Performs keyword-based search across asset metadata and incorporates semantic matching to improve relevance.
        * `NATURAL_LANGUAGE`: Performs natural language search by interpreting the intent of the query.
      enum:
        - FULLTEXT
        - HYBRID
        - NATURAL_LANGUAGE
    MatchQuery:
      type: object
      description: |
        Search for full text (supports matches/startswith) with support for semantic search.
      properties:
        match:
          $ref: '#/components/schemas/MatchQueryMatch'
      required:
        - match
    TermQuery:
      description: |
        Search for the query-term exactly matching the value of a specific field.

        The `key` of the `term` object identifies the field whose value should be matched,
        `value` represents what to match against.

        The API supports multi-valued fields.

        In case multiple values are specified in the query clause, result-set includes documents where at least one
        of the specified values matches the value present in the field.

        Term query supports only a single field in term clause. For searching on multiple fields term should be 
        composed with AND, OR, NOT queries as per the need.
      properties:
        term:
          type: object
          minProperties: 1
          maxProperties: 1
          additionalProperties:
            type: array
            items:
              minItems: 1
              maxItems: 20
              oneOf:
                - type: string
                  maxLength: 256
                - type: string
                  format: date-time
                - type: number
          example:
            metadata.repositoryMetadata.dc:format:
              - image/png
              - image/jpeg
      required:
        - term
      example:
        term:
          metadata.repositoryMetadata.dc:format:
            - image/png
            - image/jpeg
    RangeQuery:
      description: |
        Returns documents that contain terms within the provided range. The acceptable types for range includes:
          * numbers (integer, double, long, float)
          * dates (represented as String compliant with [ISO 8601 representation](https://www.w3.org/TR/NOTE-datetime-970915.html))
      additionalProperties: false
      properties:
        range:
          type: object
          additionalProperties:
            type: object
            properties:
              gt:
                type: string
                description: Greater-than
              gte:
                type: string
                description: Greater-than or equal-to
              lt:
                type: string
                description: Less-than
              lte:
                type: string
                description: Less-than or equal-to
          example:
            metadata.repositoryMetadata.repo:size:
              lt: '20000000'
              gte: '50'
      required:
        - range
      example:
        range:
          metadata.repositoryMetadata.repo:createDate:
            lt: '2023-01-04T13:49:00.00Z'
            gte: '2023-02-07T00:00:00.00Z'
    ExistsQuery:
      type: object
      description: |
        Returns items where a specified field has a stored (non-empty) value.
        A field might be missing if it's null, empty, absent in the source data, or ignored due to invalid formatting.
      additionalProperties: false
      properties:
        exists:
          type: object
          additionalProperties: false
          properties:
            field:
              type: string
              description: Name of the field to check for existence
              maxLength: 256
          required:
            - field
          example:
            field: metadata.assetMetadata.dc:title
      required:
        - exists
      example:
        exists:
          field: metadata.assetMetadata.dc:title
    SearchQuery:
      description: |
        List of `CompositeQuery` elements. The elements in this list will be applied using an AND logic.

        Property field names used in the search request must follow the schema structure of the metadata returned in this API response. For properties nested under a metadata object, prefix with the object name followed by `.`, and then the property name exactly as it appears in the response schema. For example, `repositoryMetadata.repo:name` refers to `repo:name` in `repositoryMetadata`,
        `assetMetadata.dc:title` refers to `dc:title` in `assetMetadata`, `collectionMetadata.title` refers to
        `title` in `collectionMetadata`, and `linkMetadata.title` refers to `title` in `linkMetadata`. Top-level response properties (e.g. `collectionType`, `visibility`) are referenced by name directly, with no prefix. Only use metadata objects and properties returned by the search endpoint being queried.
      type: array
      minItems: 1
      maxItems: 5
      items:
        $ref: '#/components/schemas/CompositeQuery'
    Sort:
      description: |
        The `sort` parameter defines how search results are ordered. It accepts a list of objects, each specifying a field to sort by and an optional sort order.

        - The order can be `ASC` (ascending) or `DESC` (descending).
        - If no order is provided, ascending (`ASC`) is used by default.
        - Sorting is applied in sequence - results are first sorted by the field in the first object. If multiple items share the same value, the next object in the list is used, and so on.

        This allows for multi-level sorting of results.
        If no `sort` parameter is provided, results will be ordered by relevance to the search query.
      type: array
      items:
        type: object
        required:
          - field
        properties:
          field:
            description: |
              The field to sort by. The field name must follow the schema structure of Metadata schema defined in this API response.
            type: string
          order:
            description: |
              The order of sorting. If not specified, results will be ordered by the specified field in ascending order.
              Use `ASC` for ascending or `DESC` for descending.
            type: string
            enum:
              - ASC
              - DESC
            default: ASC
    Limit:
      description: |
        For a paginated request, this parameter defines the maximum number of items to retrieve.
      type: integer
      format: int32
      minimum: 1
      maximum: 50
    Cursor:
      description: |
        A cursor is an opaque string that can be used in API calls which support paginating the response. A non-existent cursor
        signifies that the returned list does not have more elements.
      type: string
      minLength: 1
    SearchOperation:
      type: object
      properties:
        query:
          $ref: '#/components/schemas/SearchQuery'
        sort:
          $ref: '#/components/schemas/Sort'
        limit:
          $ref: '#/components/schemas/Limit'
        cursor:
          $ref: '#/components/schemas/Cursor'
      required:
        - query
      example:
        query:
          - and:
              - or:
                  - match:
                      text: blue
                      mode: FULLTEXT
                      fields:
                        - repositoryMetadata.repo:name
                  - match:
                      text: red
                      mode: FULLTEXT
                      fields:
                        - repositoryMetadata.repo:name
                  - match:
                      text: assets with file names containing 'green'
                      mode: HYBRID
              - not:
                  - term:
                      repositoryMetadata.dc:format:
                        - video/mp4
          - range:
              repositoryMetadata.repo:size:
                gte: 3000000
                lte: 9000000
          - term:
              assetMetadata.xcm:keywords.tagId:
                - f47ac10b-58cc-4372-a567-0e02b2c3d479
        sort:
          - field: repositoryMetadata.repo:size
            order: DESC
          - field: repositoryMetadata.repo:createDate
            order: ASC
        limit: 3
        facets:
          - type: CATEGORY
            field: repositoryMetadata.dc:format
            id: file_format
            size: 120
          - type: CATEGORY
            field: assetMetadata.dam:status
            id: dam_status
            size: 25
    ProjectedFields:
      type: object
      description: |
        Specifies which fields to include or exclude in the search results.
        Use 'includes' to return only specific fields, or 'excludes' to omit specific fields.
        If both are specified, 'includes' takes precedence.

        Note: The asset ID is always included in the response regardless of the projected fields configuration, 
        to ensure results can be properly differentiated.
      additionalProperties: false
      properties:
        includes:
          type: array
          description: List of field paths to include in the response
          items:
            type: string
            maxLength: 256
          minItems: 1
          maxItems: 20
          example:
            - metadata.assetMetadata.dc:title
            - metadata.assetMetadata.dc:creator
        excludes:
          type: array
          description: List of field paths to exclude from the response. Ignored when 'includes' is specified.
          items:
            type: string
            maxLength: 256
          minItems: 1
          maxItems: 20
          example:
            - repositoryMetadata.repo:ancestors
            - assetMetadata.dc:description
      example:
        includes:
          - metadata.assetMetadata.dc:title
          - metadata.assetMetadata.dc:creator
          - metadata.repositoryMetadata.repo:createDate
    FacetRequest:
      type: object
      description: Unified facet request combining category and stat aggregations
      properties:
        type:
          $ref: '#/components/schemas/AuthorFacetType'
        field:
          description: The metadata field on which to compute the aggregation. This is typically a field in the document that you want to either filter on (facet aggregation) or get the stats for.
          type: string
          maxLength: 256
          minLength: 0
        id:
          description: A unique identifier for this facet request. This id will be returned in the response to identify the facet response.
          type: string
          maxLength: 256
          minLength: 0
      required:
        - id
        - type
        - field
      discriminator:
        propertyName: type
        mapping:
          CATEGORY: '#/components/schemas/CategoryFields'
    CategoryFields:
      type: object
      description: Schema for configuring count based aggregations in search results.
      allOf:
        - $ref: '#/components/schemas/FacetRequest'
        - type: object
          properties:
            size:
              description: |
                The maximum number of values to return.  
              type: integer
              minimum: 1
              maximum: 100
              default: 10
      example:
        type: CATEGORY
        field: repositoryMetadata.dc:format
        id: format_facet
        size: 10
    AuthorFacetType:
      type: string
      description: |
        The type of aggregation required on the specified field. Currently, only CATEGORY type is supported.
        - `CATEGORY`: Category aggregation is used to get the unique values for a field and their respective counts. This is applicable for string fields.
      enum:
        - CATEGORY
      example: CATEGORY
    AssetSearchRequest:
      type: object
      description: Experimental version of SearchOperation
      allOf:
        - $ref: '#/components/schemas/SearchOperation'
        - type: object
          properties:
            projectedFields:
              $ref: '#/components/schemas/ProjectedFields'
            facets:
              type: array
              maxItems: 2
              description: Facet requests for dc:format and dam:assetStatus metadata fields
              example:
                - type: CATEGORY
                  field: repositoryMetadata.dc:format
                  id: file_format
                  size: 100
                - type: CATEGORY
                  field: assetMetadata.dam:assetStatus
                  id: dam_status
                  size: 25
              items:
                $ref: '#/components/schemas/FacetRequest'
    RepositoryId:
      description: The ID of the repository that contains the asset, link, folder or collection
      type: string
      minLength: 1
      readOnly: true
      example: author-p12345-e12345.adobeaemcloud.com
    RepositoryMetadata:
      type: object
      description: Read-only metadata properties that are maintained by the repository for the asset. Properties may be omitted if not applicable.
      properties:
        repo:name:
          type: string
          description: The asset storage name
          readOnly: true
        repo:path:
          type: string
          description: The asset storage path
          readOnly: true
        repo:assetId:
          type: string
          description: The asset identifier
          readOnly: true
        repo:parent:
          type: string
          description: The identifier of the parent folder of the asset
          readOnly: true
        repo:ancestors:
          type: array
          description: List of ancestor folder identifiers, starting with the identifier of the storage root folder and ending with the identifier of the parent folder of the asset.
          uniqueItems: true
          readOnly: true
          items:
            type: string
        repo:createDate:
          type: string
          format: date-time
          description: The created date of the asset as maintained by the content repository
          readOnly: true
        repo:createdBy:
          type: string
          description: The user that created the asset in the content repository
          readOnly: true
        repo:modifyDate:
          type: string
          format: date-time
          description: The last modified date of the asset as maintained by the content repository
          readOnly: true
        repo:modifiedBy:
          type: string
          description: The user that last modified the asset in the content repository
          readOnly: true
        dc:format:
          type: string
          description: The file format of the asset
          readOnly: true
        repo:size:
          type: integer
          format: int64
          description: The size, in bytes, of the asset binary
          readOnly: true
        dam:sha1:
          type: string
          description: A SHA1 hash of the asset's binary content
          readOnly: true
        tiff:imageLength:
          type: integer
          description: The number of rows of pixels in the image.
          readOnly: true
        tiff:imageWidth:
          type: integer
          description: The number of columns in the image, i.e., the number of pixels per row.
          readOnly: true
        isPublishedToAemPublish:
          type: boolean
          description: Set to `true` when the asset has been published to AEM Publish
          readOnly: true
        isPublishedToDynamicMedia:
          type: boolean
          description: Set to `true` when the asset has been published to Dynamic Media
          readOnly: true
        lastPublishedToAemPublish:
          type: string
          format: date-time
          description: The date and time at which the asset was last published to AEM Publish
          readOnly: true
        lastPublishedToDynamicMedia:
          type: string
          format: date-time
          description: The date and time at which the asset was last published to Dynamic Media
          readOnly: true
        aem:published:
          type: string
          format: date-time
          description: The date and time at which the asset was last published to AEM Publish
          readOnly: true
          deprecated: true
        aem:assetState:
          type: string
          description: The processing state of the asset
          readOnly: true
        aem:checkedOutBy:
          type: string
          description: The User ID of the user who has checked out the asset, if it is checked out
          readOnly: true
        repo:state:
          type: string
          description: Indicates the state change of an asset. This property is an enumeration that can have values - ACTIVE, DISCARDED, DISCARDED_PARENT.
          readOnly: true
        repo:repositoryId:
          $ref: '#/components/schemas/RepositoryId'
        repo:etag:
          type: string
          description: Computed as a hash over the schema ID, repo:path, and the full serialized metadata response. Changes whenever any of those change. Use with `If-None-Match` (GET) or `If-Match` (PATCH).
          readOnly: true
        repo:scene7Domain:
          type: string
          description: Scene7 delivery domain
          readOnly: true
        repo:scene7File:
          type: string
          description: Scene7 file path
          readOnly: true
        repo:scene7FileStatus:
          type: string
          description: Scene7 synchronization status (e.g. `PublishComplete`)
          readOnly: true
        repo:scene7Folder:
          type: string
          description: Scene7 folder path
          readOnly: true
        repo:scene7FontStyle:
          type: string
          description: Font style (font assets)
          readOnly: true
        repo:scene7FontType:
          type: string
          description: Font type (font assets)
          readOnly: true
        repo:scene7LastModified:
          type: string
          description: Timestamp of last Scene7 modification
          readOnly: true
        repo:scene7Name:
          type: string
          description: Scene7 asset name
          readOnly: true
        repo:scene7RTFName:
          type: string
          description: RTF font name (font assets)
          readOnly: true
        repo:scene7Type:
          type: string
          description: Scene7 asset type
          readOnly: true
      additionalProperties: true
      example:
        aem:assetState: processed
        aem:checkedOutBy: testuser@test.com
        dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
        dc:format: image/jpeg
        repo:createDate: '2023-04-14T06:31:07.174Z'
        repo:createdBy: user@adobe.com
        repo:modifiedBy: dam-writer-service
        repo:modifyDate: '2023-04-15T05:01:44.229Z'
        repo:name: city.jpeg
        repo:path: /content/dam/folder1/city.jpeg
        repo:size: 338049
        tiff:imageLength: 780
        tiff:imageWidth: 1000
        repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
        repo:assetId: <asset-id>
        repo:parent: <parent-id>
        repo:ancestors:
          - <content-dam-id>
          - <parent-id>
        repo:state: ACTIVE
        aem:published: '2023-04-22T23:26:09.036Z'
    AssetMetadata:
      type: object
      description: Metadata properties that have been extracted from the asset, derived during asset processing, or applied after ingestion.  These properties are, for the most part, editable.
      properties:
        xcm:keywords:
          type: array
          description: tags that have been applied to the asset from the tag taxonomy
          items:
            type: object
            properties:
              tagId:
                type: string
                description: unique identifier of the tag in the taxonomy
                minLength: 1
              ancestorIds:
                type: array
                uniqueItems: true
                description: unique identifiers of ancestor tags, from root toward the applied tag
                items:
                  type: string
                  minLength: 1
              value:
                type: string
                description: the tag for the asset
              repo:ancestors:
                type: array
                uniqueItems: true
                description: list of ancestor names for the tag
                items:
                  type: string
              '@lang':
                type: string
                description: the ISO 639-1 language code for the tag
        dc:creator:
          type: array
          description: The entity primarily responsible for making the asset
          items:
            type: string
        dc:description:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: An account of the asset
        dc:title:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: A name given to the asset
        exif:GPSLatitude:
          type: string
          description: Indicates the latitude. The latitude is expressed as three RATIONAL values giving the degrees, minutes, and seconds, respectively.
        exif:GPSLongitude:
          type: string
          description: Indicates the longitude. The longitude is expressed as three RATIONAL values giving the degrees, minutes, and seconds, respectively.
        photoshop:ColorMode:
          type: number
          description: The color mode of the asset
        photoshop:DateCreated:
          type: string
          format: date-time
          description: The creation date of the asset as set by Photoshop
        xcm:machineKeywords:
          type: array
          description: Smart Tags that have been predicted for the asset during asset processing
          items:
            type: object
            properties:
              value:
                type: string
                description: the predicted tag for the asset
              confidence:
                type: number
                format: double
                description: the model's confidence score for this tag
              localeCode:
                type: string
                description: the ISO 639-1 language code for the tag
        tiff:BitsPerSample:
          type: array
          description: Number of bits per component.
          items:
            type: integer
            format: int64
        tiff:Orientation:
          type: number
          description: The orientation of the image with respect to the rows and columns.
        xmp:CreateDate:
          type: string
          format: date-time
          description: The date and time the resource was created.
        xmp:CreatorTool:
          type: string
          description: The name of the first known tool used to create the resource.
        xmp:ModifyDate:
          type: string
          format: date-time
          description: The date and time the resource was last modified.
      additionalProperties: true
    Metadata:
      type: object
      properties:
        assetId:
          $ref: '#/components/schemas/AssetId'
        repositoryMetadata:
          $ref: '#/components/schemas/RepositoryMetadata'
        assetMetadata:
          $ref: '#/components/schemas/AssetMetadata'
      example:
        value:
          assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
          assetMetadata:
            xcm:keywords:
              - tagId: f47ac10b-58cc-4372-a567-0e02b2c3d479
                ancestorIds:
                  - 6ba7b810-9dad-11d1-80b4-00c04fd430c8
                  - 3fa85f64-5717-4562-b3fc-2c963f66afa6
                value: 'Asset Properties : Orientation / Square'
                '@lang': ENGLISH
                repo:ancestors:
                  - properties
                  - orientation
                  - square
            xcm:machineKeywords:
              - value: city
                confidence: 0.8512217998504639
                localeCode: en-US
            dc:creator:
              - Photo Author
            dc:description: This is a view of a city skyline reflected in a body of water
            dc:title: City skyline
            exif:GPSLatitude: 43,19.11N
            exif:GPSLongitude: 11,19.84E
            photoshop:ColorMode: 3
            photoshop:DateCreated: '2017-10-24T12:28:31.672Z'
            tiff:BitsPerSample:
              - 8
              - 8
              - 8
            tiff:Orientation: 1
            xmp:CreateDate: '2016-08-09T00:00:00.000Z'
            xmp:CreatorTool: Adobe Photoshop CC 2019 (Macintosh)
            xmp:ModifyDate: '2019-11-21T22:02:22.000Z'
          repositoryMetadata:
            aem:assetState: processed
            aem:checkedOutBy: testuser@test.com
            dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
            dc:format: image/jpeg
            repo:createDate: '2023-04-14T06:31:07.174Z'
            repo:createdBy: user@adobe.com
            repo:modifiedBy: dam-writer-service
            repo:modifyDate: '2023-04-15T05:01:44.229Z'
            repo:name: city.jpeg
            repo:path: /content/dam/city.jpeg
            repo:size: 338049
            repo:version: oak:1.0::ci:y7ngaf96th56jt62awk8xkoa37c572fe
            tiff:imageLength: 780
            tiff:imageWidth: 1000
            repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
            repo:ancestors:
              - urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
            repo:state: ACTIVE
            aem:published: '2023-04-22T23:26:09.036Z'
    FacetResponse:
      type: object
      description: |
        Unified aggregation result containing both category counts and statistical values.
        Each result contains the tag, field, and type from the request, along with the corresponding values.
      properties:
        type:
          $ref: '#/components/schemas/FacetType'
        field:
          type: string
          minLength: 1
          description: |
            The field on which aggregation was performed. This is typically a field in the document that you want to either filter on (facet aggregation) or get the stats for.
        id:
          description: A unique identifier for this facet response. This is the same id that is used in the request to identify the facet request.
          type: string
          maxLength: 256
          minLength: 0
      required:
        - id
        - field
        - type
      discriminator:
        propertyName: type
        mapping:
          CATEGORY: '#/components/schemas/CategoryResponse'
          STAT: '#/components/schemas/StatResponse'
    CategoryResponse:
      type: object
      description: |
        Aggregation results containing counts for each distinct value of the requested aggregation fields.
        The response contains an array of value-count pairs.
      allOf:
        - $ref: '#/components/schemas/FacetResponse'
        - type: object
          properties:
            values:
              type: array
              items:
                type: object
                properties:
                  value:
                    type: string
                    description: The distinct value for this category
                  count:
                    type: integer
                    format: int64
                    minimum: 0
                    description: The number of items with this value
                required:
                  - value
                  - count
    StatValue:
      type: object
      description: |
        Min and max values for a field. The acceptable types for min and max includes:
          * numbers (integer, double, long, float)
          * dates (represented as String compliant with [ISO 8601 representation](https://www.w3.org/TR/NOTE-datetime-970915.html))
      properties:
        min:
          description: Minimum value
          type: string
        max:
          description: Maximum value
          type: string
      required:
        - min
        - max
    StatResponse:
      type: object
      description: |
        Statistical aggregation results containing min and max values for the requested statistics fields.
        The response contains field names as keys and statistics results as values.
      allOf:
        - $ref: '#/components/schemas/FacetResponse'
        - type: object
          properties:
            values:
              $ref: '#/components/schemas/StatValue'
    FacetType:
      type: string
      description: |
        The type of aggregation required on the specified field.
        - `CATEGORY`: Category aggregation is used to get the unique values for a field and their respective counts. This is applicable for string fields.
        - `STAT`: Stat aggregation is used to get statistical information about a numerical field - min, max. This is applicable only for date and numerical fields.

        Each facet request can have a 'scope' property that is a list of filters that are applied before the aggregation is computed.
      enum:
        - CATEGORY
        - STAT
      example: CATEGORY
    SearchOperationResponse:
      type: object
      properties:
        hits:
          type: object
          properties:
            results:
              type: array
              uniqueItems: true
              items:
                $ref: '#/components/schemas/Metadata'
        cursor:
          $ref: '#/components/schemas/Cursor'
        facets:
          type: array
          description: |
            Facets calculated for the query. These facets are calculated on the
            search results and can be used to filter the results.

            Each facet result contains the field and type from the request,
            along with the corresponding values based on the type.
          items:
            $ref: '#/components/schemas/FacetResponse'
        search_metadata:
          type: object
          properties:
            count:
              description: |
                Number of results on this page.
              type: integer
              format: int64
              minimum: 0
              maximum: 50
            totalCount:
              type: object
              properties:
                total:
                  description: Total number of results.
                  type: integer
                  format: int64
                  minimum: 0
                  maximum: 10000
                relation:
                  description: Total number of results can either be 'eq' (equals to - meaning that this is the total number of results that are available) or 'gte' (greater than or equal to - meaning that there are more than this number of total results available and the precise total number of results has not been calculated, usually for performance reasons).
                  type: string
                  enum:
                    - eq
                    - gte
            searchDuration:
              description: |
                Time taken to execute the search request in nano sec.
              type: integer
              format: int64
      required:
        - hits
    MetadataImportSuccessSubResultItem:
      description: |
        Successful sub-result item for a metadata import row.
      type: object
      properties:
        rowIndex:
          type: integer
          minimum: 0
          description: Zero-based row index in the CSV, excluding header.
        assetId:
          allOf:
            - $ref: '#/components/schemas/AssetId'
          description: Asset ID from the row, when resolved.
        assetPath:
          type: string
          description: Asset path from the CSV row, when available.
      required:
        - rowIndex
      example:
        rowIndex: 1
        assetId: urn:aaid:aem:12d4c06f-f6ec-4941-bbcd-2090203b19a7
        assetPath: /content/dam/products/camera.jpg
    MetadataImportSuccessSubResultListResponse:
      description: |
        Successful sub-result list response for metadata import jobs.
      type: object
      properties:
        operation:
          type: string
          enum:
            - adobe.assets.postMetadataImport
          description: Metadata import operation.
        cursor:
          $ref: '#/components/schemas/Cursor'
        items:
          type: array
          description: Successful sub-result items for metadata import rows.
          items:
            $ref: '#/components/schemas/MetadataImportSuccessSubResultItem'
      required:
        - operation
        - items
      example:
        operation: adobe.assets.postMetadataImport
        cursor: '123'
        items:
          - rowIndex: 1
            assetId: urn:aaid:aem:12d4c06f-f6ec-4941-bbcd-2090203b19a7
            assetPath: /content/dam/products/camera.jpg
    JobSubResultListResponse:
      description: |
        Paginated list of successful sub-result items for a completed async job.
        Concrete operation-specific list schemas are selected by the `operation` discriminator.
      oneOf:
        - $ref: '#/components/schemas/MetadataImportSuccessSubResultListResponse'
      discriminator:
        propertyName: operation
        mapping:
          adobe.assets.postMetadataImport: '#/components/schemas/MetadataImportSuccessSubResultListResponse'
      required:
        - operation
    MetadataImportSubResultContext:
      type: object
      description: Context for metadata import sub-result entries.
      required:
        - rowIndex
      properties:
        rowIndex:
          type: integer
          minimum: 0
          description: Zero-based row index in the CSV, excluding header.
        assetId:
          allOf:
            - $ref: '#/components/schemas/AssetId'
          description: Asset ID from the row, when resolved.
        assetPath:
          type: string
          description: Asset path from the CSV row, when available.
    MetadataImportIssueSubResultItem:
      description: |
        Warning/error sub-result item for a metadata import row.
      allOf:
        - $ref: '#/components/schemas/CommandResultMessage'
        - type: object
          properties:
            context:
              $ref: '#/components/schemas/MetadataImportSubResultContext'
          required:
            - context
      example:
        type: adobe.assets.postMetadataImport:error:assetNotFound
        title: Asset not found
        detail: No asset exists for the identifier values specified in data row index 2 (third data row).
        context:
          rowIndex: 2
          assetId: urn:aaid:aem:12d4c06f-f6ec-4941-bbcd-2090203b19a7
          assetPath: /content/dam/missing-asset.jpg
    MetadataImportIssueSubResultListResponse:
      description: |
        Warning/error sub-result list response for metadata import jobs.
      type: object
      properties:
        operation:
          type: string
          enum:
            - adobe.assets.postMetadataImport
          description: Metadata import operation.
        cursor:
          $ref: '#/components/schemas/Cursor'
        items:
          type: array
          description: Warning/error sub-result items for metadata import rows.
          items:
            $ref: '#/components/schemas/MetadataImportIssueSubResultItem'
      required:
        - operation
        - items
      example:
        operation: adobe.assets.postMetadataImport
        cursor: '123'
        items:
          - type: adobe.assets.postMetadataImport:warning:propertyIgnored
            title: Property ignored
            detail: One metadata property in data row index 6 (seventh data row) was ignored because it is read-only.
            context:
              rowIndex: 6
              assetId: urn:aaid:aem:22d4c06f-f6ec-4941-bbcd-2090203b19a8
              assetPath: /content/dam/products/lens.jpg
    JobSubResultIssueListResponse:
      description: |
        Paginated list of warning/error sub-result items for a completed async job.
        Concrete operation-specific list schemas are selected by the `operation` discriminator.
      oneOf:
        - $ref: '#/components/schemas/MetadataImportIssueSubResultListResponse'
      discriminator:
        propertyName: operation
        mapping:
          adobe.assets.postMetadataImport: '#/components/schemas/MetadataImportIssueSubResultListResponse'
      required:
        - operation
    MetadataImportRequest:
      description: |
        Multipart form request for metadata import. The form must contain a CSV file (part `file`).
      type: object
      properties:
        file:
          type: string
          format: binary
          description: CSV file containing asset identifiers and metadata changes. Required.
      required:
        - file
    JSONPatchOperation:
      type: object
      description: Base schema for a JSON Patch operation
      discriminator:
        propertyName: op
        mapping:
          add: '#/components/schemas/AddOperation'
          copy: '#/components/schemas/CopyOperation'
          move: '#/components/schemas/MoveOperation'
          remove: '#/components/schemas/RemoveOperation'
          replace: '#/components/schemas/ReplaceOperation'
          test: '#/components/schemas/TestOperation'
      properties:
        op:
          type: string
          description: The operation to perform
          enum:
            - add
            - copy
            - move
            - remove
            - replace
            - test
      required:
        - op
    PatchValue:
      description: The information to place at the location indicated by the `path` parameter
      oneOf:
        - type: string
        - type: number
        - type: array
          items: {}
        - type: object
        - type: boolean
    AddOperation:
      type: object
      description: Adds the contents of the `value` parameter to the location indicated by the `path` parameter.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/JSONPatchOperation'
        - type: object
          properties:
            path:
              description: The location where information should be added
              type: string
              minLength: 1
            value:
              $ref: '#/components/schemas/PatchValue'
      required:
        - path
        - value
      example:
        op: add
        path: /dc:title
        value: Flower Photo
    CopyOperation:
      type: object
      description: Copies information from the location described by the `from` parameter to the location described by the `path` parameter.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/JSONPatchOperation'
        - type: object
          properties:
            from:
              description: A path that points to the entity to be copied
              type: string
              minLength: 1
            path:
              description: A path that points to the location where the entity is to be copied to
              type: string
              minLength: 1
      required:
        - from
        - path
      example:
        op: copy
        from: /dc:title
        path: /custom:title
    MoveOperation:
      type: object
      description: Move an entity from the location described by the `from` parameter to the location described by the `path` parameter. This operation is most often used to rename a property.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/JSONPatchOperation'
        - type: object
          properties:
            from:
              description: A path that points to the entity to be moved
              type: string
              minLength: 1
            path:
              description: A path that points to the location where the entity is to be moved to
              type: string
              minLength: 1
      required:
        - from
        - path
      example:
        op: move
        from: /cameraLocation
        path: /cameraPosition
    RemoveOperation:
      type: object
      description: Remove the entity at the location pointed to by the `path` parameter.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/JSONPatchOperation'
        - type: object
          properties:
            path:
              description: A path that points to the entity to be removed
              type: string
              minLength: 1
      required:
        - path
      example:
        op: remove
        path: /cameraLocation
    ReplaceOperation:
      type: object
      description: Replaces information at the location indicated by the `path` parameter with the contents of the `value` parameter.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/JSONPatchOperation'
        - type: object
          properties:
            path:
              description: The location where the information should be replaced
              type: string
              minLength: 1
            value:
              $ref: '#/components/schemas/PatchValue'
      required:
        - path
        - value
      example:
        op: replace
        path: /dc:title
        value: Sun Flower Photo
    TestOperation:
      type: object
      description: |
        Compares the contents of the `value` parameter with the value at the location indicated by the `path` parameter. `test` operations can be
        included in a `PATCH` request to validate that some condition is true before applying the transformations included in the `test`
        operation(s).  If any of the `test`s evaluate to false, a 412 response will be returned.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/JSONPatchOperation'
        - type: object
          properties:
            path:
              description: The location of the information to use for comparison
              type: string
              minLength: 1
            value:
              $ref: '#/components/schemas/PatchValue'
      required:
        - path
        - value
      example:
        op: test
        path: /dc:title
        value: Sun Flower Photo
    JSONPatch:
      type: array
      description: |
        JSON Patch defines a JSON document structure for expressing a
        sequence of operations to apply to a JavaScript Object Notation
        (JSON) document; it is suitable for use with the HTTP PATCH method.
        The `application/json-patch+json` media type is used to identify such
        patch documents.

        For more details check [RFC 6902](https://www.rfc-editor.org/rfc/rfc6902).
      items:
        $ref: '#/components/schemas/JSONPatchOperation'
      example:
        - op: test
          path: /dc:title
          value: old value
        - op: replace
          path: /dc:title
          value: new value
        - op: copy
          from: /dc:title
          path: /custom:title
    TaskType:
      type: string
      description: The type of the task, e.g. REVIEW.
      enum:
        - REVIEW
        - DEFAULT
      example: REVIEW
    TaskStatus:
      type: string
      description: |
        Progress status of the task. On task creation, `taskStatus` cannot be set to `CANCELLED` or `COMPLETED`. On task update, when `taskStatus` is set to `COMPLETED`, the `resolution` property must be provided.
      enum:
        - UNASSIGNED
        - NOT_STARTED
        - IN_PROGRESS
        - BLOCKED
        - CANCELLED
        - COMPLETED
      example: IN_PROGRESS
    TaskPriority:
      type: string
      description: Priority of the task
      enum:
        - LOW
        - MEDIUM
        - HIGH
      example: LOW
    BaseTask:
      title: BaseTask
      description: Common Task properties shared by task responses and listings.
      type: object
      properties:
        title:
          type: string
          description: The name of the task.
          example: Review splash image — penguin or puffin?
        description:
          type: string
          description: Description of the task.
          example: Please make sure all the branding is visible
        assignee:
          type: string
          description: The user that is assigned the task.
          example: bar@adobe.com
        type:
          allOf:
            - $ref: '#/components/schemas/TaskType'
          default: DEFAULT
        assigneeMutableProperties:
          type: array
          description: |
            The owner/creator may create an allowlist of specific task properties that are editable by the assignee. A value of ["*"] indicates that the assignee may edit all the properties in a task. Server-managed properties (`taskId`, `created`, `started`, `lastModified`, `assetId`, `completed`) are immutable and are not valid entries in this list.
          items:
            type: string
          default:
            - taskStatus
          example:
            - taskStatus
            - taskStatusMessage
            - resolution
        taskStatus:
          allOf:
            - $ref: '#/components/schemas/TaskStatus'
          default: NOT_STARTED
        resolutionValues:
          type: array
          uniqueItems: true
          description: |
            These are predefined task resolution choices (e.g. ACCEPTED, REJECTED). When a user creates a task for an assignee,  they may wish to provide predefined values that the owner or assignee can select as a resolution.
          default:
            - ACCEPTED
            - REJECTED
          items:
            type: string
          example:
            - CAMPAIGN_READY
            - COMPLETED_WITH_COMMENTS
            - INCOMPLETE
        priority:
          $ref: '#/components/schemas/TaskPriority'
        deadlineAt:
          type: string
          format: date-time
          description: The date and time by which the task must be completed.
          example: '2025-03-01T12:00:00Z'
    TaskCreateRequest:
      type: object
      allOf:
        - $ref: '#/components/schemas/BaseTask'
        - type: object
          required:
            - title
    TaskId:
      type: string
      readOnly: true
      description: ID of the task
      minLength: 1
      example: opaque-id-string
    AuditInfo:
      readOnly: true
      type: object
      description: Provides audit details about an operation performed by a user (i.e. user and date).
      properties:
        at:
          type: string
          format: date-time
          description: Date and time of the operation.
          example: '2021-01-30T08:30:00Z'
        by:
          type: string
          description: The identifier of the user who performed the operation.
    Task:
      title: Task
      description: Represents a Task Object.
      type: object
      properties:
        taskId:
          $ref: '#/components/schemas/TaskId'
        assetId:
          allOf:
            - $ref: '#/components/schemas/AssetId'
          readOnly: true
        created:
          $ref: '#/components/schemas/AuditInfo'
        completed:
          $ref: '#/components/schemas/AuditInfo'
        lastModified:
          $ref: '#/components/schemas/AuditInfo'
        started:
          $ref: '#/components/schemas/AuditInfo'
        taskStatusMessage:
          type: string
          description: Optional message from the reviewer after updating the taskStatus
          example: The new version looks great
        resolution:
          type: string
          description: |
            An additional status value or phrase recorded at task completion. When `taskStatus` is updated to `COMPLETED`, this field must be provided with a resolution value. This property will be constrained to the values in `resolutionValues`.
          example: APPROVED
      allOf:
        - $ref: '#/components/schemas/BaseTask'
      required:
        - taskId
        - created
        - lastModified
        - title
    AssetRelationType:
      type: string
      description: The type of the relation
      minLength: 1
      example: sources
    AssetRelation:
      type: object
      description: Properties for a related asset
      properties:
        assetId:
          $ref: '#/components/schemas/AssetId'
        relationType:
          $ref: '#/components/schemas/AssetRelationType'
        repo:path:
          type: string
          description: Absolute path to related asset
          minLength: 1
          example: /content/dam/asset.png
        repo:name:
          type: string
          description: The name of the asset in the repository
          readOnly: true
          minLength: 1
          example: asset.png
      required:
        - assetId
        - relationType
        - repo:path
        - repo:name
    AssetRelationsResponse:
      type: object
      description: Paginated list of relations for this asset
      properties:
        items:
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/AssetRelation'
        cursor:
          $ref: '#/components/schemas/Cursor'
      required:
        - items
      example:
        items:
          - assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
            relationType: sources
            repo:path: /content/dam/test/document.pdf
            repo:name: document.pdf
          - assetId: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
            relationType: derived
            repo:path: /content/dam/test/image.png
            repo:name: image.png
        cursor: wqeaszrdxtgfcyguiohfgytdrsewq
    CreateAssetRelation:
      type: object
      description: Properties for creating a related asset
      properties:
        assetId:
          type: string
          description: The ID of the related asset
          minLength: 1
          example: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
        relationType:
          $ref: '#/components/schemas/AssetRelationType'
      required:
        - assetId
        - relationType
    CreateAssetRelationsRequest:
      type: object
      properties:
        items:
          type: array
          uniqueItems: true
          description: Related assets to be added to the asset
          items:
            allOf:
              - $ref: '#/components/schemas/CreateAssetRelation'
      required:
        - items
    AssetRelationTypesResponse:
      type: object
      description: Paginated list of relation types that exist for this asset
      properties:
        items:
          type: array
          uniqueItems: true
          items:
            type: string
        cursor:
          $ref: '#/components/schemas/Cursor'
      required:
        - items
      example:
        items:
          - sources
          - derived
          - others
        cursor: wqeaszrdxtgfcyguiohfgytdrsewq
    AssetRenditionsItem:
      type: object
      properties:
        name:
          type: string
          description: name of the rendition
          minLength: 1
          example: 2023-lexus-rx-450hl.jpg
        format:
          type: string
          description: mime type of the rendition
          minLength: 1
          example: image/jpeg
        size:
          type: integer
          format: int64
          description: size of the rendition in bytes
          minimum: 1
        dimensions:
          type: object
          properties:
            width:
              type: integer
              format: int32
              minimum: 1
              description: Width of the rendition in pixels
            height:
              type: integer
              format: int32
              minimum: 1
              description: Height of the rendition in pixels
      required:
        - name
        - size
        - format
    AssetRenditionsList:
      type: object
      properties:
        assetId:
          $ref: '#/components/schemas/AssetId'
        repo:name:
          type: string
          description: The name of the asset in the repository
        items:
          type: array
          uniqueItems: true
          items:
            allOf:
              - $ref: '#/components/schemas/AssetRenditionsItem'
      required:
        - assetId
        - items
        - repo:name
    ImportAssetMetadata:
      description: |
        Metadata properties and values that should be applied to assets that are part of the import.
        Client should use the assetMetadata properties as exposed by the metadata API endpoints.
      type: object
      additionalProperties: true
      example:
        dc:title: My Asset
        dc:description: An example asset for import
    ImportTargetFolder:
      type: string
      description: The ID or path for the folder into which to import the assets in AEM.
      minLength: 1
      example: urn:aaid:aem:408646b2-a34d-4656-bf1a-b5a06cc9362f
    ImportFromUrlRequest:
      type: object
      properties:
        assetMetadata:
          $ref: '#/components/schemas/ImportAssetMetadata'
        folder:
          $ref: '#/components/schemas/ImportTargetFolder'
        files:
          type: array
          minItems: 1
          maxItems: 300
          items:
            type: object
            properties:
              assetMetadata:
                $ref: '#/components/schemas/ImportAssetMetadata'
              fileName:
                type: string
                description: Name of the file as it will appear in the repository after upload
              mimeType:
                type: string
                description: The file format of the resource
              fileSize:
                type: integer
                description: The size, in bytes, of the file to be imported
                format: int64
              url:
                type: string
                minLength: 10
                description: The url from which to import
                format: uri
            required:
              - fileName
              - url
        sourceName:
          type: string
          description: A user-friendly display name for the source of the assets
      required:
        - folder
        - files
      example:
        assetMetadata:
          dc:title: My Asset
          xmp:Rating: 5
          prism:expirationDate: '2019-01-01T00:00:00.000Z'
        folder: urn:aaid:aem:8964ca64-b302-5abe-88db-e1729385287b
        files:
          - fileName: My-Asset.jpeg
            assetMetadata:
              custom:test: custom-metadata
            mimeType: image/jpeg
            fileSize: 123456
            url: https://example.com/my-asset.jpg
    ImportJobId:
      description: The identifier for an import job
      type: string
      example: B79F5F05-06E2-4D12-A5AE-AD9BC308FCCF
    ImportOperation:
      type: string
      enum:
        - aem.assets.import.fromurl
    ImportJobProgress:
      type: object
      properties:
        failed:
          type: integer
          minimum: 0
          description: The number of assets that failed to import
        imported:
          type: integer
          minimum: 0
          description: The number of assets that have been imported
        lastImported:
          type: string
          description: The name of the last imported asset
          example: my-file.jpg
        lastUpdated:
          type: string
          minLength: 1
          format: date-time
          description: The date/time the import job was last updated
        skipped:
          type: number
          minimum: 0
          description: The number of assets which were skipped during import
        started:
          type: string
          minLength: 1
          format: date-time
          description: The date/time the import job started
        total:
          type: number
          format: int64
          minimum: 1
          description: The total number of assets to import
        size:
          type: number
          format: int64
          minimum: 0
          description: The total size, in bytes, of the assets to import
        step:
          description: the current import step
          type: string
          minLength: 4
          enum:
            - QUEUED
            - SCANNING
            - IMPORTING
            - DONE
        transferred:
          type: number
          format: int64
          minimum: 0
          description: The total size, in bytes, of the assets that have been transferred
      required:
        - failed
        - imported
        - lastUpdated
        - skipped
        - started
        - size
        - step
        - total
        - transferred
      example:
        failed: 1
        imported: 1
        lastImported: my-file.jpg
        lastUpdated: '2019-01-01T00:00:00.000Z'
        skipped: 0
        started: '2019-01-01T00:00:00.000Z'
        size: 123456
        step: DONE
        total: 2
        transferred: 2345
    ImportJobState:
      description: The state of the import job.
      type: string
      enum:
        - PROCESSING
        - COMPLETED
        - FAILED
    ImportJobAcceptedStatus:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ImportJobId'
        operation:
          $ref: '#/components/schemas/ImportOperation'
        data:
          type: object
          properties:
            id:
              $ref: '#/components/schemas/ImportJobId'
            config:
              type: object
              required:
                - folder
                - items
              properties:
                assetMetadata:
                  $ref: '#/components/schemas/ImportAssetMetadata'
                folder:
                  $ref: '#/components/schemas/ImportTargetFolder'
                items:
                  type: array
                  uniqueItems: true
                  minItems: 1
                  description: The list of items to import
                  items:
                    type: string
                    description: URL from which to import
                    minLength: 1
                    format: string
            processedFiles:
              type: array
              description: List of files that have been processed by the import job
              items:
                type: object
            progress:
              $ref: '#/components/schemas/ImportJobProgress'
          required:
            - id
            - config
            - progress
        errors:
          $ref: '#/components/schemas/errors'
        warnings:
          $ref: '#/components/schemas/warnings'
        state:
          $ref: '#/components/schemas/ImportJobState'
      example:
        id: c82f6f05-07e3-5d13-b6bf-be0ac408fddf
        operation: aem.assets.import.fromurl
        data:
          id: c82f6f05-07e3-5d13-b6bf-be0ac408fddf
          config:
            assetMetadata:
              dc:title: My Asset
              xmp:Rating: 5
              prism:expirationDate: '2019-01-01T00:00:00.000Z'
            folder: urn:aaid:aem:8964ca64-b302-5abe-88db-e1729385287b
            items:
              - https://example.com/my-asset.jpg
          processedFiles: []
          progress:
            imported: 0
            failed: 0
            skipped: 0
            started: '2025-03-24T18:23:15.885Z'
            total: 2
            lastUpdated: '2025-03-24T18:23:15.885Z'
            size: 0
            transferred: 0
            step: QUEUED
        errors: []
        warnings: []
        state: PROCESSING
    ImportJobStatus:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ImportJobId'
        operation:
          $ref: '#/components/schemas/ImportOperation'
        state:
          $ref: '#/components/schemas/ImportJobState'
        status:
          $ref: '#/components/schemas/status'
        description:
          $ref: '#/components/schemas/description'
        progress:
          $ref: '#/components/schemas/ImportJobProgress'
        errors:
          $ref: '#/components/schemas/errors'
        warnings:
          $ref: '#/components/schemas/warnings'
      example:
        id: B79F5F05-06E2-4D12-A5AE-AD9BC308FCCF
        description: OK
        operation: aem.assets.import.fromurl
        status: 202
        state: PROCESSING
        progress:
          imported: 1
          failed: 1
          skipped: 0
          started: '2019-01-01T00:00:00.000Z'
          total: 2
          lastUpdated: '2019-01-01T00:00:00.000Z'
          size: 123456
          transferred: 2345
          step: IMPORTING
        errors: []
        warnings: []
    ImportJobResult:
      type: object
      properties:
        cursor:
          $ref: '#/components/schemas/Cursor'
        items:
          type: array
          description: The list of files that have been processed by the import job whether successfully or not
          items:
            type: object
            description: The list of files that have been processed by the import job whether successfully or not
            properties:
              url:
                type: string
                description: The URL of the item
                format: url
                minLength: 1
              fileName:
                type: string
                description: The name of the item
                minLength: 1
              fileSize:
                type: integer
                description: The size of the item in bytes
                format: int64
                minimum: 0
              mimeType:
                type: string
                description: The file format of the resource
                minLength: 1
              assetId:
                $ref: '#/components/schemas/AssetId'
              error:
                type: object
                description: An error object if the item failed to import
                allOf:
                  - $ref: '#/components/schemas/ProblemDetails'
              status:
                type: string
                minLength: 6
                description: The status of the file
                enum:
                  - imported
                  - failed
                  - processing
            required:
              - fileName
      example:
        cursor: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtc2ciOiJZb3UgdGhvdWdodCB0aGlzIG1pZ2h0IGJlIHNvbWV0aGluZyBzZWNyZXQsIHJpZ2h0PyJ9.7xLHh_QS1f6oNd5oy5pXUBjDSQ-brOjBXxLbRDzOXAs
        items:
          - fileName: 000000089948.png
            mimeType: image/png
            fileSize: 150000
            url: https://example.com/images/test-image.png
            status: imported
            assetId: urn:aaid:aem:a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6
          - fileName: neom-ne3RC_Q9UEA-unsplash.jpg
            mimeType: image/jpeg
            fileSize: 324629
            status: failed
            error:
              type: http://api.adobeaemcloud.com/adobe/meta/errors/not_found
              title: Not Found
              status: 404
              detail: 'Could not import file neom-ne3RC_Q9UEA-unsplash.jpg, failed to preprocess: Failed to get download url for id:QqZmUXw658QAAAAAAAAGrw, not found'
    UpdateTaskRequest:
      type: object
      properties:
        title:
          type: string
          description: The name of the task.
          example: Review splash image — penguin or puffin?
        description:
          type: string
          nullable: true
          description: Description of the task.
          example: Please make sure all the branding is visible
        assignee:
          type: string
          nullable: true
          description: The user that is assigned the task.
          example: bar@adobe.com
        assigneeMutableProperties:
          type: array
          description: |
            The owner/creator may create an allowlist of specific task properties that are editable by the assignee. A value of ["*"] indicates that the assignee may edit all the properties in a task. Server-managed properties (`taskId`, `created`, `started`, `lastModified`, `assetId`, `completed`) are immutable and are not valid entries in this list.
          items:
            type: string
          example:
            - taskStatus
            - taskStatusMessage
            - resolution
        taskStatus:
          allOf:
            - $ref: '#/components/schemas/TaskStatus'
        taskStatusMessage:
          type: string
          nullable: true
          description: Optional message from the reviewer after updating the taskStatus.
          example: The new version looks great
        resolutionValues:
          type: array
          uniqueItems: true
          description: |
            These are predefined task resolution choices (e.g. ACCEPTED, REJECTED). When a user creates a task for an assignee, they may wish to provide predefined values that the owner or assignee can select as a resolution.
          items:
            type: string
          example:
            - CAMPAIGN_READY
            - COMPLETED_WITH_COMMENTS
            - INCOMPLETE
        resolution:
          type: string
          description: |
            An additional status value or phrase recorded at task completion. When a user completes a task, they may wish to optionally record additional details. This property will be constrained to the values in `resolutionValues`.
          example: APPROVED
        priority:
          $ref: '#/components/schemas/TaskPriority'
        deadlineAt:
          type: string
          format: date-time
          nullable: true
          description: The date and time by which the task must be completed.
          example: '2025-03-01T12:00:00Z'
    CloudEvents_3rdParty:
      description: |
        AEM Eventing uses the current schema definition for all eventing use cases. The schema definition is based on CloudEvents
        [1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md).

        h2. Changes
        All Events once published MUST be treated like API. Changes to the event schema MUST be backwards compatible,
        i.e. prefer non-breaking changes (adding a field) which don't require an event type change and don't break the consumer.
        However, if there is a breaking change, it MUST be a new event type, while the old one is still sent out until no consumer
        still requires it.
      type: object
      properties:
        id:
          description: |
            An identifier for the event.  When used in combination with the `source` property, it allows for each instance of
            an event to be uniquely identified.  That is to say, the combination of the `source` + `id` properties will be
            unique for each distinct event. If a duplicate event is re-sent (e.g. due to a network error) it may have the same 
            id and should be treated as a duplicate.
          type: string
          minLength: 1
        source:
          description: |
            An instance of the [acct URI scheme](https://www.rfc-editor.org/rfc/rfc7565.html) that uniquely identifies the
            producer of this event, of the format `acct:aem-p<programId>-e<environmentId>@adobe.com`.
          type: string
          format: uri
          pattern: ^acct:aem(-cmstg)?-p\d+-e\d+@adobe\.com$
          minLength: 1
        specversion:
          description: |
            The version of the CloudEvents specification which the event uses.  AEM events use the CloudEvents spec version 
            1.0.2, hence this value will be 1.0.
          type: string
          enum:
            - '1.0'
          minLength: 3
        type:
          description: |
            The type for the event.  This will identify the AEM solution that has dispatched the event and may also include
            the type of entity and the activity that occurred.
          type: string
          pattern: ^aem\..*$
          minLength: 4
        datacontenttype:
          description: |
            The format of the data in the event.  This will always be `application/json` for AEM events.
          type: string
          enum:
            - application/json
          minLength: 1
        dataschema:
          description: |
            An optional attribute, which may point to a JSON schema document that covers the data object.
          type: string
          format: uri
        time:
          description: |
            A timestamp of when the event occurred.
          type: string
          format: date-time
          minLength: 1
        data:
          description: |
            The event payload.
          type: object
      required:
        - id
        - source
        - specversion
        - type
        - datacontenttype
        - time
        - data
      example:
        specversion: '1.0'
        type: aem.assets.asset.created
        source: acct:aem-p56789-e12345@adobe.com
        id: 7c1104e5-4cd7-47d6-a50f-2568c480f2e9
        time: '2018-04-05T17:31:00Z'
        datacontenttype: application/json
        data:
          myProp: myValue
    EventAssetMetadata:
      type: object
      description: Metadata properties that have been extracted from the asset, derived during asset processing, or applied after ingestion.  These properties are, for the most part, editable.
      properties:
        xcm:machineKeywords:
          type: array
          description: Smart Tags that have been predicted for the asset during asset processing
          items:
            type: object
            properties:
              value:
                type: string
                description: The predicted tag for the asset
              confidence:
                type: number
                format: double
                description: The model's confidence score for this tag
        pur:expirationDate:
          type: string
          format: date-time
          description: The date and time when the asset will expire.
        dc:title:
          type: string
          description: A name given to the asset
      additionalProperties: true
      example:
        xcm:machineKeywords:
          - value: graphic design
            confidence: 0.926
          - value: clipart
            confidence: 0.757
        pur:expirationDate: '2023-04-17T06:31:07.174Z'
        dc:title: Asset name
    EventMetadata:
      type: object
      properties:
        assetId:
          $ref: '#/components/schemas/AssetId'
        repositoryMetadata:
          $ref: '#/components/schemas/RepositoryMetadata'
        assetMetadata:
          $ref: '#/components/schemas/EventAssetMetadata'
      example:
        value:
          assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
          assetMetadata:
            xcm:machineKeywords:
              - value: city
                confidence: 0.8512217998504639
                localeCode: en-US
            pur:expirationDate: '2023-04-17T06:31:07.174Z'
          repositoryMetadata:
            aem:assetState: processed
            aem:checkedOutBy: testuser@test.com
            dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
            dc:format: image/jpeg
            repo:createDate: '2023-04-14T06:31:07.174Z'
            repo:createdBy: user@adobe.com
            repo:modifiedBy: dam-writer-service
            repo:modifyDate: '2023-04-15T05:01:44.229Z'
            repo:name: city.jpeg
            repo:path: /content/dam/city.jpeg
            repo:size: 338049
            repo:version: oak:1.0::ci:y7ngaf96th56jt62awk8xkoa37c572fe
            tiff:imageLength: 780
            tiff:imageWidth: 1000
            repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
            repo:ancestors:
              - urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
            repo:state: ACTIVE
            aem:published: '2023-04-22T23:26:09.036Z'
    User:
      type: object
      description: Read-only properties of a user who generated an AEM event.
      properties:
        imsUserId:
          type: string
          description: The IMS user ID of the user who performed the action.
        principalId:
          type: string
          description: The AEM principal ID of the user who performed the action.
        displayName:
          type: string
          description: The display name of the user who performed the action.
    Tier:
      type: string
      description: The type of an AEM instance.
      enum:
        - author
        - publish
        - preview
    ImportJobStateInEvent:
      description: The state of the import job.
      type: string
      enum:
        - failed
        - completed
        - processing
  responses:
    400_BadRequest:
      description: |
        Bad Request.
        Indicates that the server cannot or will not process the request due to something that is perceived to be a client error. The Problem Details object will provide more information about the exact cause.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 400
                  title:
                    type: string
                    default: Bad Request
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/bad_request
            title: Bad Request
            status: 400
            detail: Bad request, please check that you have provided the correct parameters and that they are valid.
    401_Unauthorized:
      description: |
        Unauthorized. Indicates that the request has not been applied because it lacks valid authentication credentials for the target resource.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 401
                  title:
                    type: string
                    default: Unauthorized
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/unauthorized
            title: Unauthorized
            status: 401
            detail: The request did not contain a valid Authorization header.
    403_Forbidden:
      description: |
        Forbidden. Indicates that the server understood the request but refuses to fulfil it.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 403
                  title:
                    type: string
                    default: Forbidden
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/forbidden
            title: Forbidden
            status: 403
            detail: The credentials provided do not have sufficient permissions to access this resource.
    406_Unacceptable:
      description: |
        Not Acceptable.
        Indicates that the target resource does not have a current representation that would be acceptable to the user agent,
        according to the proactive negotiation header fields received in the request.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    example: Unacceptable
                  status:
                    type: integer
                    default: 406
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/not_acceptable
            title: Not Acceptable
            status: 406
            detail: |
              The target resource does not have a current representation that would be acceptable to the user agent, 
              according to the proactive negotiation header fields received in the request.
    409_Conflict:
      description: |
        Conflict. Indicates that the request could not be completed due to a conflict with the current state of the target resource.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 409
                  title:
                    type: string
                    default: Conflict
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/conflict
            title: Conflict
            status: 409
            detail: The current state of the resource on the server is incompatible with your request.
    415_UnsupportedMediaType:
      description: |
        Unsupported Media Type. Indicates that the origin server is refusing to service the request because the content is in a format not supported by this method on the target resource.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    example: Unsupported Media Type
                  status:
                    type: integer
                    default: 415
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/unsupported_media_type
            title: Unsupported Media Type
            status: 415
            detail: This request is not acceptable because the payload is in an unsupported format.
    500_InternalServerError:
      description: |
        Internal Server Error. Indicates that the server encountered an unexpected condition that prevented it from fulfilling the request.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 500
                  title:
                    type: string
                    default: Internal Server Error
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/internal_server_error
            title: Internal Server Error
            status: 500
            detail: The server encountered an unexpected condition that prevented it from fulfilling the request.
    404_NotFound:
      description: |
        Not Found. Indicates that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 404
                  title:
                    type: string
                    default: Not Found
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/not_found
            title: Not Found
            status: 404
            detail: The requested resource could not be found.
    304_NotModified_ETag:
      description: Not Modified
      content: {}
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
    412_PreconditionFailed:
      description: |
        Precondition Failed. Indicates that one or more conditions given in the request header fields evaluated to false when tested on the server.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    default: Precondition Failed
                  status:
                    type: integer
                    default: 412
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/precondition_failed
            title: Precondition Failed
            status: 412
            detail: The provided conditional header was not fulfilled.
    204_NoContent:
      description: No Content
    413_ContentTooLarge:
      description: |
        Content Too Large. Indicates that the server is refusing to process a request because the request content is larger than the server is willing or able to process.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    default: Content Too Large
                  status:
                    type: integer
                    default: 413
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/content_too_large
            title: Content Too Large
            status: 413
            detail: The provided conditional header was not fulfilled.
    501_NotImplemented:
      description: |
        Not Implemented. Indicates that the server does not support the functionality required to fulfill the request.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 501
                  title:
                    type: string
                    default: Not Implemented
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/not_implemented
            title: Not Implemented
            status: 501
            detail: The server does not support the functionality required to fulfill the request.
    422_UnprocessableEntity:
      description: |
        Unprocessable Content. Indicates that the server understands the content type of the request content (hence a 415 (Unsupported Media Type) status code is inappropriate), and the syntax of the request content is correct, but it was unable to process the contained instructions.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 422
                  title:
                    type: string
                    default: Unprocessable Entity
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/unprocessable_entity
            title: Unprocessable Entity
            status: 422
            detail: |
              The syntax of the request entity is correct, but we are unable to process the contained instructions. This
              request should not be repeated without modification.
    429_TooManyRequests:
      description: |
        Too Many Requests. Indicates that the user has sent too many requests in a given amount of time ("rate limiting").
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    default: Too Many Requests
                  status:
                    type: integer
                    default: 429
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/too_many_requests
            title: Too Many Requests
            status: 429
            detail: This indicates the user has sent too many requests in a given amount of time.
    428_PreconditionRequired:
      description: |
        Precondition Required. Indicates that the origin server requires the request to be conditional.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    default: Precondition Required
                  status:
                    type: integer
                    default: 428
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/precondition_required
            title: Precondition Required
            status: 428
            detail: This operation requires the use of a conditional header.
    304_NotModified:
      description: Not Modified
      content: {}
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Last-Modified:
          $ref: '#/components/headers/Last-Modified'
  parameters:
    If-None-Match:
      name: If-None-Match
      description: |
        The `If-None-Match` header field makes the request method conditional on a recipient cache or origin server either
        not having any current representation of the target resource, when the field value is "*", or having a selected
        representation with an entity tag that does not match any of those listed in the field value.

        For more details, please head over to [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-if-none-match).
      in: header
      required: false
      schema:
        type: string
    If-Match:
      name: If-Match
      description: |
        The `If-Match` header field makes the request method conditional on the recipient origin server either having at least
        one current representation of the target resource, when the field value is "*", or having a current representation of
        the target resource that has an entity tag matching a member of the list of entity tags provided in the field value.

        For more details, please head over to [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-if-match).
      in: header
      required: true
      schema:
        type: string
        description: The value of an `ETag` received for a previous `HEAD` or `GET` request to this resource.
    Prefer:
      description: |
        The `Prefer` header field is used to indicate that particular server behaviors are preferred by the client, but
        not required for successful completion of the request. In the context of this API, the following preferences
        are supported:

        - `respond-async`: Indicates that the client prefers an asynchronous response for operations that may take a long
          time to complete.
        - `wait`: Establishes an upper bound on the length of time, in seconds, the client expects it will take the server
          to process the request once it has been received. The server can choose to utilize an asynchronous processing
          model (e.g., returning a 202 Accepted response) if processing will take longer than the specified time. `wait`
          needs to be sent together with `respond-async`, for example `respond-async, wait=10`.

        For more details, please refer to [RFC 7240](https://www.rfc-editor.org/rfc/rfc7240.html).
      in: header
      name: Prefer
      required: false
      schema:
        type: string
      examples:
        respond-async:
          value: respond-async
          description: Prefer an asynchronous response.
        respond-async-and-wait:
          value: respond-async, wait=10
          description: Prefer an asynchronous response but wait for up to 10 seconds for the server to process the request synchronously.
    JobId:
      in: path
      name: jobId
      description: ID of an asynchronous job
      required: true
      schema:
        type: string
      examples:
        sample-job-id:
          value: 542c88b4-e136-4341-9221-ae42d3d70b10
    cursor:
      in: query
      name: cursor
      description: |
        When the number of results for a request exceeds the allowed limit, the response will include a `cursor`.  That value can then be sent via this parameter on a subsequent request to retrieve the next set of items.
      schema:
        $ref: '#/components/schemas/Cursor'
    limit:
      in: query
      name: limit
      description: |
        For a paginated request, this parameter defines the maximum number of items to retrieve.
      schema:
        $ref: '#/components/schemas/Limit'
    AssetID:
      in: path
      name: assetId
      description: ID of the asset to access
      required: true
      schema:
        type: string
        minLength: 1
      examples:
        sample-asset-id:
          value: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
    SEOName:
      in: path
      name: seoName
      description: any url-encoded or alphanumeric, non-whitespace set of characters. may contain hyphens and dots
      required: true
      schema:
        type: string
        pattern: ([%.\w-]+)
      examples:
        seo-name:
          value: banner
    RenditionName:
      in: path
      name: renditionName
      description: any url-encoded or alphanumeric, non-whitespace set of characters that need to match one of the renditions uploaded/created for the specified asset. may contain hyphens and dots
      required: true
      schema:
        type: string
        pattern: ([%.\w-]+)
      examples:
        seo-name:
          value: banner
    Attachment:
      in: query
      name: attachment
      description: |
        Setting this parameter to `true` forces "download" prompt in browser by adapting the `Content-Disposition` appropriately.

        Default is `false`.
      required: false
      schema:
        type: string
        enum:
          - 'true'
          - '1'
          - 'false'
          - '0'
        example: 'true'
  headers:
    ETag:
      schema:
        type: string
      description: |
        The `ETag` field in a response provides the current entity tag for the selected representation, as determined at the
        conclusion of handling the request. An entity tag is an opaque validator for differentiating between multiple
        representations of the same resource, regardless of whether those multiple representations are due to resource state
        changes over time, content negotiation resulting in multiple representations being valid at the same time, or both.
        An entity tag consists of an opaque quoted string, possibly prefixed by a weakness indicator.

        For more details, please head over to [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-etag).
      required: true
    Location:
      schema:
        type: string
        format: uri
      description: |
        The `Location` header field is used in some responses to refer to a specific resource in relation to the response.
        The type of relationship is defined by the combination of request method and status code semantics.

        For more details, please head over to [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-location).
      required: true
    Retry-After:
      schema:
        anyOf:
          - type: string
            pattern: ^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (([0-2][0-9]|3[01] Jan)|([0-2][0-9] Feb)|([0-2][0-9]|3[01] Mar)|([0-2][0-9]|30 Apr)|([0-2][0-9]|3[01] May)|([0-2][0-9]|30 Jun)|([0-2][0-9]|3[01] Jul)|([0-2][0-9]|3[01] Aug)|([0-2][0-9]|30 Sep)|([0-2][0-9]|3[01] Oct)|([0-2][0-9]|30 Nov)|([0-2][0-9]|3[01] Dec)) ([0-9]{4}) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) GMT$
            example: Fri, 31 Dec 1999 23:59:59 GMT
            description: The HTTP-date to which the user agent should wait to make a follow up request
          - type: integer
            format: int32
            minimum: 0
            example: 120
            description: The number of seconds the user agent should wait to make a follow up request
      description: |
        The `Retry-After` header indicates how long the user agent should wait before making a follow-up request.

        The Retry-After value can be either an HTTP-date or a number of seconds to delay after receiving the response.

        For more details, please head over to [RFC9110](https://datatracker.ietf.org/doc/html/rfc9110#name-retry-after).
    Last-Modified:
      schema:
        type: string
      description: |
        The "Last-Modified" header field in a response provides a timestamp indicating the date and time at which the origin
        server believes the selected representation was last modified, as determined at the conclusion of handling the
        request.

        For more details, please head over to [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-last-modified).
      required: true
