openapi: 3.0.3
info:
  title: Dynamic Media with OpenAPI
  version: '2026.07'
servers:
  - url: https://{bucket}.adobeaemcloud.com/adobe/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 asset binaries
  - name: Metadata
    description: APIs for working with asset metadata
  - name: Videos
    description: APIs for working with videos
  - name: Image Presets
    description: APIs for working with image presets
  - name: Collections
    description: APIs for working with asset collections
  - name: Link Shares
    description: APIs for working with assets link shares
  - name: Events
    description: Events generated by assets delivery tier
  - name: Archives
    description: APIs for generating archives containing binaries (one or more assets, with one or more renditions) in one of the supported archival formats (e.g., `zip`).
paths:
  /{assetId}/as/{seoName}.{format}:
    get:
      summary: Returns web-optimized binary representation of the asset in the requested output format
      description: |
        The `seo-name` doesn't have a functional impact on the image, but is provided to allow for adding SEO value to
        asset URLs.  The `assetId` is an opaque string defined by the content repository that can be used to target
        the asset resource.

        In the URL construction, an SEO name and an output image format must be provided.

        Additional transformations to be applied on that output can (optionally) be specified as query parameters, and the syntax and examples are listed in the Query Parameters section of this document.

        To name a few:
          * `crop`
          * `height`
          * `width`
          * `quality`
          * `smartcrop`
          * `blur`
          * `sharpen`

        <div style="border: 1px solid #ccc; border-radius: 6px; padding: 16px; background: #fafbfc; margin: 16px 0;">
          <b>Smart Imaging</b><br>
          Smart imaging automatically optimizes the image delivery to provide the best balance of visual quality, image size, and response time. This results in faster page loads, reduced bandwidth usage, and a consistently high-quality experience across devices and network conditions.
          <br>
          <br>
          <ul>
            <li>
              <b>Auto Format Conversion:</b>
              Images are automatically converted to modern, web-optimized formats (such as AVIF or WebP) based on browser capabilities and customer entitlements irrespective of requested format. These formats provide better compression, thus making images smaller and faster to deliver and load. Read more at <a href="https://web.dev/learn/performance/image-performance#file_formats">File format's impact on image delivery and rendering performance</a>.
              <br>
              To disable, set the <code>auto-format</code> query parameter to <code>false</code>.
            </li>
            <li>
              <b>Network Bandwidth Optimization (Automatic Quality Adjustment):</b>
              Image quality-factor is automatically applied based on the client's network conditions, ensuring faster image delivery and loading under all conditions.
              <br>
              See <code>quality</code> and <code>max-quality</code> for additional information on tweaking this behaviour.
            </li>
          </ul>
        </div>
        <div style="border: 1px solid #ccc; border-radius: 6px; padding: 16px; background: #fafbfc; margin: 16px 0;">
          <b>Image Composition</b><br>
          The API supports composing a single output image based on segregation of operations applied to specific portions of the artwork (e.g., <i>"applying a background color to an image that has an alpha channel, but after scaling it down to occupy only 25% of the total area of the image"</i>).
          <br>
          <br>
          To learn more about Image Composition, please <a href="#operation/getAssetSeoFormat!in=query&path=layers&t=request">review the documentation for <code>layers</code></a>
        </div>
      operationId: getAssetSeoFormat
      security:
        - {}
        - Bearer: []
      tags:
        - Assets
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/SEOName'
        - $ref: '#/components/parameters/Format'
        - $ref: '#/components/parameters/Width'
        - $ref: '#/components/parameters/Quality'
        - $ref: '#/components/parameters/MaxQuality'
        - $ref: '#/components/parameters/Smartcrop'
        - $ref: '#/components/parameters/Dpr'
        - $ref: '#/components/parameters/Height'
        - $ref: '#/components/parameters/Sharpen'
        - $ref: '#/components/parameters/Blur'
        - $ref: '#/components/parameters/Crop'
        - $ref: '#/components/parameters/Preset'
        - $ref: '#/components/parameters/Layers'
        - $ref: '#/components/parameters/Fit'
        - $ref: '#/components/parameters/BackgroundColor'
        - $ref: '#/components/parameters/ForegroundColor'
        - $ref: '#/components/parameters/AutoFormat'
        - $ref: '#/components/parameters/UnsharpMask'
        - $ref: '#/components/parameters/Attachment'
        - $ref: '#/components/parameters/Flip'
        - $ref: '#/components/parameters/Rotate'
        - $ref: '#/components/parameters/Fallback'
        - $ref: '#/components/parameters/Extend'
        - $ref: '#/components/parameters/ClipPathNames'
        - $ref: '#/components/parameters/Transparency'
        - $ref: '#/components/parameters/HideLayer'
        - $ref: '#/components/parameters/InvertColor'
        - $ref: '#/components/parameters/Colorize'
        - $ref: '#/components/parameters/Brightness'
        - $ref: '#/components/parameters/Contrast'
        - $ref: '#/components/parameters/Mask'
        - $ref: '#/components/parameters/Saturation'
        - $ref: '#/components/parameters/Hue'
        - $ref: '#/components/parameters/Noise'
        - $ref: '#/components/parameters/BlendingMode'
        - $ref: '#/components/parameters/Erode'
        - $ref: '#/components/parameters/Dilate'
        - $ref: '#/components/parameters/Position'
        - $ref: '#/components/parameters/Source'
        - $ref: '#/components/parameters/CropNames'
        - $ref: '#/components/parameters/PrintResolution'
      responses:
        '200':
          description: Web-optimized version of the asset
          content:
            image/gif:
              schema:
                type: string
                format: binary
            image/png:
              schema:
                type: string
                format: binary
            image/jpeg:
              schema:
                type: string
                format: binary
            image/webp:
              schema:
                type: string
                format: binary
            image/svg+xml:
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            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'
  /{assetId}:
    get:
      x-delivery: true
      summary: Returns a web-optimized binary representation of the asset
      description: |
        This is a convenience API for `/adobe/assets/{assetId}/as/{seoname}.{format}?...` that applies following defaults:
          * `format` => `avif` (based on image-characteristics, browser-capabilities and license-entitlements, falls back to an appropriate format (`webp`/`png`/`jpeg`) if avif-output can't be delivered. See `auto-format` and `format` for more details)
          * `quality` => `65`
          * `width` => `1024`
      operationId: getAsset
      security:
        - {}
        - Bearer: []
      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:
            image/jpeg:
              schema:
                type: string
                format: binary
            image/webp:
              schema:
                type: string
                format: binary
            image/svg+xml:
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            ETag:
              $ref: '#/components/headers/ETag'
        '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'
  /{assetId}/play:
    get:
      summary: Delivers the Player container for specified Video asset.
      description: |
        The Delivery API accepts an assetId, and if the ID corresponds to a video asset, delivers Player for video streaming.
        The asset ID is an opaque string defined by the content repository. The entity composing the Delivery URLs must know them apriori.
        Additional filters can be applied on the output (optionally) be specified as query parameters, and the syntax and examples are listed in the Query Parameters section of this document.

        To name a few:
          * `mode` - Delivery mode (e.g., `smartcrop`)
          * `language` - Language for audio and text tracks
          * `viewerPreset` - Viewer preset name (reference only). The player loads userdata JSON from `GET /adobe/assets/viewerPresets/{viewerPresetName}` after the HTML is delivered.

        Video player flow when `viewerPreset` is set:
          1. `GET /adobe/assets/{assetId}/play?viewerPreset={viewerPresetName}` returns the player HTML.
          2. `GET /adobe/assets/viewerPresets/{viewerPresetName}` returns preset userdata JSON (`PlayerViewerPresetValue`).
          3. The player applies settings from that JSON (for example autoplay, letterboxing, CSS).
      operationId: videoPlayerDelivery
      security:
        - {}
        - Bearer: []
      tags:
        - Videos
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/PlayerMode'
        - $ref: '#/components/parameters/Language'
        - $ref: '#/components/parameters/PlayerViewerPreset'
      responses:
        '200':
          description: Response Video in Player.
          content:
            text/html:
              schema:
                $ref: '#/components/schemas/PlayerOutput'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
  /{assetId}/original/as/{seoName}:
    get:
      summary: Returns the originally uploaded binary for the asset
      description: The Original Asset Delivery 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: []
      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:
            '*/*':
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            Content-Type:
              schema:
                $ref: '#/components/schemas/FileContentType'
            ETag:
              $ref: '#/components/headers/ETag'
        '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'
  /{assetId}/renditions/{renditionName}/as/{seoName}:
    get:
      summary: Returns a pre-generated (on AEM Assets authoring environment) rendition of the asset
      description: The Asset Rendition Delivery 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: []
      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:
            '*/*':
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            Content-Type:
              schema:
                $ref: '#/components/schemas/FileContentType'
            ETag:
              $ref: '#/components/headers/ETag'
        '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'
  /{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.
      operationId: getAssetRenditions
      security:
        - Bearer: []
      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:
                properties:
                  assetId:
                    $ref: '#/components/schemas/AssetId'
                  repo:name:
                    type: string
                    description: The name of the asset in the repository
                  items:
                    type: array
                    items:
                      allOf:
                        - $ref: '#/components/schemas/AssetRenditionsItem'
                required:
                  - assetId
                  - items
                  - repo:name
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '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'
    head:
      summary: Head request for list of static renditions of an asset
      description: Returns headers, including an ETag for the specified asset, which can be a lighter method of checking for the change in list of static renditions, without sending a full GET request.
      operationId: headAssetRenditions
      security:
        - Bearer: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
      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'
  /{assetId}/smartCrops:
    get:
      summary: Returns a list of smart crops of an asset
      description: |-
        The List Smart Crop API accepts an asset ID and retrieves the associated smart crops for the specified asset.
        A successful response returns a list of smart crops along with their attributes.

        Each smart crop item uses a **unified schema** for image and video:
        - **name** (required) and **aspectRatio** (required) are always present.
        - **cropType** is optional (e.g. `image`, `video`).
        - **defaultDimensions** (optional width and height in pixels for the crop output) may be present.

        **NOTE**: This API is used by Adobe's Content Hub application and Viewers. Using this API directly isn't covered in Adobe Support agreements.
      operationId: getAssetSmartCrops
      security:
        - {}
        - Bearer: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - in: query
          name: limit
          schema:
            $ref: '#/components/schemas/Limit'
        - in: query
          name: cursor
          schema:
            $ref: '#/components/schemas/Cursor'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: List of smart crops
          content:
            application/json:
              schema:
                properties:
                  assetId:
                    $ref: '#/components/schemas/AssetId'
                  repo:name:
                    type: string
                    description: The name of the asset in the repository
                    minLength: 1
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Smartcrop'
                  cursor:
                    $ref: '#/components/schemas/Cursor'
                required:
                  - assetId
                  - items
                  - repo:name
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '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'
    head:
      summary: Head request for list of smart crops of an asset
      description: |-
        Returns headers, including an ETag for the specified asset, which can be a lighter method of
        checking for the change in list of smart crops, without sending a full GET request.

        **NOTE**: This API is used by Adobe's Content Hub application and Viewers. Using this API directly isn't covered in Adobe Support agreements.
      operationId: headAssetSmartcrops
      security:
        - {}
        - Bearer: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
      responses:
        '200':
          description: OK
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            Content-Type:
              schema:
                type: string
                enum:
                  - application/json
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
  /imagePresets:
    get:
      summary: Returns a list of image presets
      description: |-
        The List Image Presets API returns the image presets configured for the given tenant.
        A successful response includes a list of available image presets and their attributes.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: getImagePresets
      security:
        - Bearer: []
      tags:
        - Image Presets
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
        - in: query
          name: limit
          schema:
            $ref: '#/components/schemas/Limit'
        - in: query
          name: cursor
          schema:
            $ref: '#/components/schemas/Cursor'
      responses:
        '200':
          description: List of available image presets
          content:
            application/json:
              schema:
                type: object
                properties:
                  cursor:
                    $ref: '#/components/schemas/Cursor'
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ImagePreset'
              examples:
                example1:
                  value:
                    cursor: '123'
                    items:
                      - name: testImagePreset1
                        format: jpeg
                      - name: testImagePreset2
                        format: jpeg,gray
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
  /{assetId}/manifest.{format}:
    get:
      summary: Delivers the playback manifests for specified Video asset in the selected output format.
      description: |
        The Delivery API accepts an asset ID, and if the ID corresponds to a video asset, delivers the playback manifest in the requested protocol.
        The asset ID is an opaque string defined by the content repository. The entity composing the Delivery URLs must know them apriori.
        If the asset is not a video asset, client gets a 404 response.
      tags:
        - Videos
      operationId: videoManifestDelivery
      security:
        - {}
        - Bearer: []
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - in: path
          name: format
          description: Desired Playback manifest format
          required: true
          schema:
            $ref: '#/components/schemas/VideoManifestFormatParam'
      responses:
        '200':
          description: Response Video Manifests in selected format
          content:
            application/vnd.apple.mpegurl:
              schema:
                $ref: '#/components/schemas/VideoManifestOutput'
            application/dash+xml:
              schema:
                $ref: '#/components/schemas/VideoManifestOutput'
          headers:
            ETag:
              schema:
                type: string
        '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'
  /{assetId}/metadata:
    parameters:
      - $ref: '#/components/parameters/AssetID'
    head:
      summary: Head request for 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: []
      tags:
        - Metadata
      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'
    get:
      summary: Delivers the specified asset's 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: []
      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'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
  /deliver/{assetId}/{seoName}:
    get:
      deprecated: true
      summary: Returns the originally uploaded binary for the asset.
      description: |
        The Original Asset Delivery API accepts an asset ID corresponding to the asset and delivers the
        bitstream as-is (as it was uploaded). 

        This API is deprecated, please use `/adobe/assets/{assetId}/original/as/{seo-name}`
      operationId: getAssetOriginalLegacy
      security:
        - {}
        - Bearer: []
      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:
            '*/*':
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            Content-Type:
              schema:
                $ref: '#/components/schemas/FileContentType'
            ETag:
              $ref: '#/components/headers/ETag'
        '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'
  /search:
    post:
      summary: Search for activated assets based on specified criteria
      description: |
        Search for activated assets based on specified criteria
      operationId: search
      security:
        - Bearer: []
          ApiKeyAuth: []
      parameters:
        - $ref: '#/components/parameters/SubjectTokenParam'
      tags:
        - Assets
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/AssetSearchRequest'
                - type: object
                  properties:
                    orderBy:
                      allOf:
                        - $ref: '#/components/schemas/OrderBy'
                        - deprecated: true
            examples:
              search-brown-shoes-with-color-facets:
                summary: Search for brown shoes with color and subject facets, fetch limited fields in response
                value:
                  query:
                    - match:
                        text: brown shoe
                        fields:
                          - repositoryMetadata.repo:name
                  sort:
                    - field: repositoryMetadata.repo:size
                      order: DESC
                  limit: 3
                  facets:
                    - type: CATEGORY
                      field: assetMetadata.xcm:colorDistribution.name
                      id: color_facet
                      query: brown
                      size: 15
                      sort: COUNT_DESC
                      scope:
                        - and:
                            - term:
                                assetMetadata.autogen:subject: footwear
                            - range:
                                repositoryMetadata.repo:createDate:
                                  gte: '2023-05-06T09:15:20.000Z'
                                  lte: '2023-05-10T09:30:00.000Z'
                    - type: CATEGORY
                      field: assetMetadata.autogen:subject
                      id: subject_facet
                      size: 15
                      scope:
                        and:
                          - term:
                              assetMetadata.xcm:colorDistribution.name: BROWN
                    - type: STAT
                      field: repositoryMetadata.repo:createDate
                      id: createdate_facet
                      scope:
                        - term:
                            assetMetadata.autogen:subject: footwear
                  projectedFields:
                    includes:
                      - assetMetadata.dc:title
                      - assetMetadata.dc:creator
                      - repositoryMetadata.repo:createDate
              search-landscape-with-creator:
                summary: Search landscapes that have creator information
                value:
                  query:
                    - match:
                        text: mountain landscape
                        fields:
                          - assetMetadata.dc:title
                          - assetMetadata.dc:description
                    - exists:
                        field: assetMetadata.dc:creator
                  limit: 10
              search-non-expired-assets:
                summary: Search for only non-expired marketing assets
                value:
                  query:
                    - match:
                        text: marketing
                        fields:
                          - assetMetadata.dc:title
                          - assetMetadata.dc:description
                    - range:
                        assetMetadata.pur:expirationDate:
                          gt: '2024-06-15T00:00:00.000Z'
                  limit: 20
                  facets:
                    - type: CATEGORY
                      field: repositoryMetadata.dc:format
                      id: format_facet
                      size: 15
                      sort: COUNT_DESC
              search-photography-by-format:
                summary: Search landscape photography filtered by image format, fetch limited fields in response
                value:
                  query:
                    - match:
                        text: landscape photography
                        fields:
                          - assetMetadata.dc:title
                          - assetMetadata.dc:description
                    - term:
                        repositoryMetadata.dc:format:
                          - image/jpeg
                          - image/png
                  sort:
                    - field: repositoryMetadata.repo:createDate
                      order: DESC
                  limit: 15
                  projectedFields:
                    includes:
                      - assetMetadata.dc:title
                      - assetMetadata.dc:description
                      - assetMetadata.dc:creator
                      - repositoryMetadata.repo:name
                      - repositoryMetadata.dc:format
                      - repositoryMetadata.repo:createDate
              get-format-and-size-distribution:
                summary: Get format and size distribution without filtering
                value:
                  limit: 0
                  facets:
                    - type: CATEGORY
                      field: repositoryMetadata.dc:format
                      id: format_facet
                      size: 20
                      sort: COUNT_DESC
                    - type: STAT
                      field: repositoryMetadata.repo:size
                      id: size_facet
              search-filter-images-by-format:
                summary: Filter out images that are not JPEG, PNG, or WebP using nested boolean facet grouping
                value:
                  query:
                    - match:
                        text: product campaign
                        fields:
                          - assetMetadata.dc:title
                          - assetMetadata.dc:description
                  limit: 20
                  facets:
                    - type: CATEGORY
                      field: repositoryMetadata.dc:format
                      id: format_facet
                      size: 10
                      sort: COUNT_DESC
                      scope:
                        - term:
                            repositoryMetadata.dc:format:
                              - image/jpeg
                              - image/png
                              - image/webp
              get-format-aggregation-matching-regex:
                summary: Get format aggregation matching regex
                value:
                  limit: 0
                  facets:
                    - type: CATEGORY
                      field: repositoryMetadata.dc:format
                      id: format_facet
                      size: 20
                      sort: COUNT_DESC
                      includes:
                        regex: image/.*
              get-format-aggregation-matching-values:
                summary: Get format aggregation matching values
                value:
                  limit: 0
                  facets:
                    - type: CATEGORY
                      field: repositoryMetadata.dc:format
                      id: format_facet
                      size: 20
                      sort: COUNT_DESC
                      includes:
                        values:
                          - image/jpeg
                          - image/png
                          - image/webp
              exact-filtering-on-custom-tags:
                summary: Filter assets by custom tags
                value:
                  query:
                    - term:
                        assetMetadata.custom:tags.tagId:
                          - 8df4a9c2-1b0e-4f3a-9d7c-2e5f8a1b6c0d
                  limit: 10
              hierarchical-filtering-on-tags:
                summary: Search for assets using hierarchical tag subtree filtering via ancestorIds
                value:
                  query:
                    - term:
                        assetMetadata.xcm:keywords.ancestorIds:
                          - f47ac10b-58cc-4372-a567-0e02b2c3d479
                  limit: 10
      responses:
        '200':
          description: Asset Search Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchOperationResponse'
              examples:
                search-brown-shoes-with-color-facets:
                  summary: Response for brown shoes search with color facets
                  value:
                    hits:
                      results:
                        - assetId: urn:aaid:aem:e12f3f56-7890-4567-abcd-123456789012
                          repositoryMetadata:
                            repo:name: Clarks_Oxford_Brown_Leather_Shoe.jpeg
                            repo:size: 5242880
                            dc:format: image/jpeg
                            repo:modifyDate: '2023-05-11T14:12:09.304Z'
                            repo:createDate: '2023-05-10T09:30:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            xmp:CreatorTool: Adobe Photoshop
                            dc:title: brown shoe
                            dc:description: A beautiful brown leather shoe
                            autogen:subject:
                              - footwear
                              - shoe
                              - leather
                              - formal
                            xcm:colorDistribution:
                              - name: BROWN
                                coverage: 0.855
                                rgb:
                                  - 139
                                  - 69
                                  - 19
                        - assetId: urn:aaid:aem:f23g4h67-8901-5678-bcde-234567890123
                          repositoryMetadata:
                            repo:name: Birkenstock_Arizona_Brown_Leather_Sandal.jpeg
                            repo:size: 3145728
                            dc:format: image/jpeg
                            repo:modifyDate: '2023-05-12T10:15:30.500Z'
                            repo:createDate: '2023-05-09T14:20:15.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            xmp:CreatorTool: Adobe Lightroom
                            dc:title: brown sandal
                            dc:description: A comfortable brown leather sandal
                            autogen:subject:
                              - footwear
                              - sandal
                              - casual
                              - summer
                            xcm:colorDistribution:
                              - name: LIGHT_BROWN
                                coverage: 0.723
                                rgb:
                                  - 160
                                  - 82
                                  - 45
                        - assetId: urn:aaid:aem:g34h5i78-9012-6789-cdef-345678901234
                          repositoryMetadata:
                            repo:name: Timberland_Brown_Hiking_Boot.jpeg
                            repo:size: 4194304
                            dc:format: image/jpeg
                            repo:modifyDate: '2023-05-13T08:30:45.200Z'
                            repo:createDate: '2023-05-08T16:45:30.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            xmp:CreatorTool: Adobe Photoshop
                            dc:title: brown hiking boot
                            dc:description: A durable brown leather hiking boot
                            autogen:subject:
                              - footwear
                              - boot
                              - outdoor
                              - hiking
                            xcm:colorDistribution:
                              - name: DARK_BROWN
                                coverage: 0.892
                                rgb:
                                  - 101
                                  - 67
                                  - 33
                    cursor: '["45600323",1478539971]'
                    search_metadata:
                      count: 3
                      totalCount:
                        total: 150
                        relation: eq
                      searchDuration: 12
                    facets:
                      - type: CATEGORY
                        field: assetMetadata.xcm:colorDistribution.name
                        id: color_facet
                        values:
                          - value: BROWN
                            count: 45
                          - value: LIGHT_BROWN
                            count: 32
                          - value: DARK_BROWN
                            count: 15
                      - type: CATEGORY
                        field: assetMetadata.autogen:subject
                        id: subject_facet
                        values:
                          - value: footwear
                            count: 120
                          - value: leather
                            count: 85
                          - value: shoe
                            count: 67
                          - value: boot
                            count: 32
                          - value: sandal
                            count: 28
                          - value: casual
                            count: 25
                          - value: outdoor
                            count: 20
                          - value: hiking
                            count: 18
                          - value: formal
                            count: 15
                          - value: summer
                            count: 12
                          - value: work
                            count: 10
                          - value: sport
                            count: 8
                      - type: STAT
                        field: repositoryMetadata.repo:createDate
                        id: createdate_facet
                        values:
                          min: '2023-05-06T09:15:20.000Z'
                          max: '2023-05-10T09:30:00.000Z'
                search-landscape-with-creator:
                  summary: Response for landscapes with creator information
                  value:
                    hits:
                      results:
                        - assetId: urn:aaid:aem:a1b2c3d4-5678-90ab-cdef-123456789abc
                          repositoryMetadata:
                            repo:name: Mountain_Landscape_Sunset.jpg
                            dc:format: image/jpeg
                            repo:createDate: '2023-08-15T10:30:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Mountain landscape at sunset
                            dc:description: Beautiful mountain landscape with sunset colors
                            dc:creator:
                              - Alice Johnson
                        - assetId: urn:aaid:aem:b2c3d4e5-6789-01bc-def0-234567890bcd
                          repositoryMetadata:
                            repo:name: Alpine_Lake_Landscape.png
                            dc:format: image/png
                            repo:createDate: '2023-07-22T14:15:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Alpine lake landscape
                            dc:description: Serene alpine lake surrounded by mountains
                            dc:creator:
                              - Bob Wilson
                    search_metadata:
                      count: 2
                      totalCount:
                        total: 2
                        relation: eq
                      searchDuration: 8
                search-non-expired-assets:
                  summary: Response for non-expired marketing assets search
                  value:
                    hits:
                      results:
                        - assetId: urn:aaid:aem:e1f2g3h4-5678-90ab-cdef-234567890abc
                          repositoryMetadata:
                            repo:name: Q1_Marketing_Campaign_2024.pdf
                            dc:format: application/pdf
                            repo:createDate: '2023-12-15T10:00:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Q1 Marketing Campaign Assets
                            dc:description: Marketing materials for Q1 2024 campaign
                            pur:expirationDate: '2024-09-30T23:59:59.000Z'
                        - assetId: urn:aaid:aem:f2g3h4i5-6789-01bc-def0-345678901bcd
                          repositoryMetadata:
                            repo:name: Summer_Marketing_Video.mp4
                            dc:format: video/mp4
                            repo:createDate: '2024-01-20T14:30:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Summer Marketing Video Assets
                            dc:description: Video assets for summer marketing campaign
                            pur:expirationDate: '2024-12-31T23:59:59.000Z'
                        - assetId: urn:aaid:aem:g3h4i5j6-7890-12cd-ef01-456789012cde
                          repositoryMetadata:
                            repo:name: Product_Launch_Marketing_Kit.zip
                            dc:format: application/zip
                            repo:createDate: '2024-02-10T09:15:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Product Launch Marketing Kit
                            dc:description: Complete marketing asset package for product launch
                            pur:expirationDate: '2025-03-31T23:59:59.000Z'
                    cursor: '["56789012",1487654321]'
                    search_metadata:
                      count: 3
                      totalCount:
                        total: 28
                        relation: eq
                      searchDuration: 14
                    facets:
                      - type: CATEGORY
                        field: repositoryMetadata.dc:format
                        id: format_facet
                        values:
                          - value: application/pdf
                            count: 12
                          - value: video/mp4
                            count: 8
                          - value: image/jpeg
                            count: 5
                          - value: application/zip
                            count: 3
                search-photography-by-format:
                  summary: Response for photography search filtered by format
                  value:
                    hits:
                      results:
                        - assetId: urn:aaid:aem:h4i5j6k7-8901-34ef-g234-678901234efg
                          repositoryMetadata:
                            repo:name: Mountain_Sunset_Landscape.jpeg
                            dc:format: image/jpeg
                            repo:createDate: '2024-05-20T16:45:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Mountain Sunset Landscape Photography
                            dc:description: Stunning landscape photography of mountain sunset
                            dc:creator:
                              - John Smith
                        - assetId: urn:aaid:aem:i5j6k7l8-9012-45fg-h345-789012345fgh
                          repositoryMetadata:
                            repo:name: Valley_Landscape_Dawn.png
                            dc:format: image/png
                            repo:createDate: '2024-05-18T08:30:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Valley Landscape at Dawn
                            dc:description: Beautiful landscape photography capturing valley at dawn
                            dc:creator:
                              - Jane Doe
                        - assetId: urn:aaid:aem:j6k7l8m9-0123-56gh-i456-890123456ghi
                          repositoryMetadata:
                            repo:name: Coastal_Landscape_Panorama.jpeg
                            dc:format: image/jpeg
                            repo:createDate: '2024-05-15T12:00:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Coastal Landscape Panorama
                            dc:description: Wide angle landscape photography of coastal scenery
                            dc:creator:
                              - John Smith
                    cursor: '["67890123",1497654321]'
                    search_metadata:
                      count: 3
                      totalCount:
                        total: 42
                        relation: eq
                      searchDuration: 11
                    facets:
                      - type: CATEGORY
                        field: assetMetadata.dc:creator
                        id: creator_facet
                        values:
                          - value: John Smith
                            count: 28
                          - value: Jane Doe
                            count: 14
                get-format-and-size-distribution:
                  summary: Response for format and size distribution
                  value:
                    hits:
                      results: []
                    search_metadata:
                      count: 0
                      totalCount:
                        total: 0
                        relation: eq
                      searchDuration: 5
                    facets:
                      - type: CATEGORY
                        field: repositoryMetadata.dc:format
                        id: format_facet
                        values:
                          - value: image/jpeg
                            count: 450
                          - value: image/png
                            count: 320
                          - value: application/pdf
                            count: 180
                          - value: video/mp4
                            count: 95
                          - value: image/webp
                            count: 68
                      - type: STAT
                        field: repositoryMetadata.repo:size
                        id: size_facet
                        values:
                          min: '1024'
                          max: '524288000'
                search-filter-images-by-format:
                  summary: Response for filtering images by format using nested facet grouping
                  value:
                    hits:
                      results:
                        - assetId: urn:aaid:aem:a1b2c3d4-5678-90ab-cdef-1234567890ab
                          repositoryMetadata:
                            repo:name: Campaign_Infographic.svg
                            dc:format: image/svg+xml
                            repo:size: 524288
                            repo:createDate: '2024-03-15T10:30:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Product Campaign Infographic
                            dc:description: Vector infographic for product campaign presentation
                            dc:creator:
                              - Sarah Miller
                        - assetId: urn:aaid:aem:b2c3d4e5-6789-01bc-defg-234567890bcd
                          repositoryMetadata:
                            repo:name: Campaign_Brief.pdf
                            dc:format: application/pdf
                            repo:size: 2097152
                            repo:createDate: '2024-03-18T14:20:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Product Campaign Brief
                            dc:description: Detailed campaign strategy and execution brief
                            dc:creator:
                              - Mike Johnson
                        - assetId: urn:aaid:aem:c3d4e5f6-7890-12cd-efgh-34567890cdef
                          repositoryMetadata:
                            repo:name: Campaign_Animation.gif
                            dc:format: image/gif
                            repo:size: 1572864
                            repo:createDate: '2024-03-20T09:15:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Campaign Animated Banner
                            dc:description: Animated GIF for online campaign banner
                            dc:creator:
                              - Sarah Miller
                      cursor: '["78901234",1498765432]'
                      search_metadata:
                        count: 3
                        totalCount:
                          total: 42
                          relation: eq
                        searchDuration: 14
                      facets:
                        - type: CATEGORY
                          field: repositoryMetadata.dc:format
                          id: format_facet
                          values:
                            - value: image/gif
                              count: 18
                            - value: application/pdf
                              count: 12
                            - value: image/svg+xml
                              count: 8
                            - value: image/tiff
                              count: 4
                exact-filtering-on-custom-tags:
                  summary: Response for assets with specific custom tags
                  value:
                    hits:
                      results:
                        - assetId: urn:aaid:aem:a1b2c3d4-5678-90ab-cdef-123456789abc
                          repositoryMetadata:
                            repo:name: Campaign_Asset.jpeg
                            dc:format: image/jpeg
                            repo:createDate: '2024-01-15T10:30:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Campaign Asset
                            custom:tags:
                              - tagId: 8df4a9c2-1b0e-4f3a-9d7c-2e5f8a1b6c0d
                                ancestorIds:
                                  - 2f5f8a1b-6c0d-4e3f-8a9b-1c2d34567890
                                  - 3a6b7c8d-9e0f-1a2b-3c4d-5e6f7890abcd
                    search_metadata:
                      count: 1
                      totalCount:
                        total: 1
                        relation: eq
                      searchDuration: 7
                hierarchical-filtering-on-tags:
                  summary: Response for assets matching a tag subtree via ancestorIds
                  value:
                    hits:
                      results:
                        - assetId: urn:aaid:aem:b2c3d4e5-6789-01bc-def0-234567890bcd
                          repositoryMetadata:
                            repo:name: Product_Campaign_Banner.jpeg
                            dc:format: image/jpeg
                            repo:createDate: '2024-03-10T08:45:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Product Campaign Banner
                            xcm:keywords:
                              - tagId: 8df4a9c2-1b0e-4f3a-9d7c-2e5f8a1b6c0d
                                ancestorIds:
                                  - f47ac10b-58cc-4372-a567-0e02b2c3d479
                                  - 2f5f8a1b-6c0d-4e3f-8a9b-1c2d34567890
                        - assetId: urn:aaid:aem:c3d4e5f6-7890-12cd-ef01-345678901cde
                          repositoryMetadata:
                            repo:name: Brand_Guidelines_Visual.png
                            dc:format: image/png
                            repo:createDate: '2024-02-28T14:20:00.000Z'
                            repo:repositoryId: delivery-p12345-e123456.adobeaemcloud.com
                          assetMetadata:
                            dc:title: Brand Guidelines Visual
                            xcm:keywords:
                              - tagId: 3a6b7c8d-9e0f-1a2b-3c4d-5e6f7890abcd
                                ancestorIds:
                                  - f47ac10b-58cc-4372-a567-0e02b2c3d479
                                  - 5b7c8d9e-0f1a-2b3c-4d5e-6f7890abcdef
                    search_metadata:
                      count: 2
                      totalCount:
                        total: 2
                        relation: eq
                      searchDuration: 9
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
        '501':
          $ref: '#/components/responses/501_NotImplemented'
  /collections:
    post:
      summary: Create a collection
      description: |
        Creates a collection that represents a group of Asset(s) and/or Collection(s).

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: createCollection
      tags:
        - Collections
      security:
        - Bearer: []
      parameters:
        - $ref: '#/components/parameters/SubjectTokenParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CollectionCreationRequest'
      responses:
        '201':
          description: Returns information on the recently created collection, including its metadata.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/CollectionMetadata'
        '202':
          description: Accepted
          headers:
            Location:
              $ref: '#/components/headers/Location'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
    get:
      summary: List all Collections
      description: |
        Retrieves all the Collections available in the repository.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: getAllCollections
      tags:
        - Collections
      security:
        - Bearer: []
      parameters:
        - in: query
          name: limit
          schema:
            $ref: '#/components/schemas/Limit'
        - in: query
          name: cursor
          schema:
            $ref: '#/components/schemas/Cursor'
        - $ref: '#/components/parameters/SubjectTokenParam'
      responses:
        '200':
          description: Collections retrieved successfully
          content:
            application/json:
              schema:
                properties:
                  cursor:
                    $ref: '#/components/schemas/Cursor'
                  items:
                    type: array
                    items:
                      allOf:
                        - $ref: '#/components/schemas/CollectionMetadata'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
  /collections/{collectionId}:
    get:
      summary: Retrieve a Collection's Metadata
      description: |
        Retrieves collection metadata for a given collection id along with Etag representing the current state of the collection.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: getCollection
      tags:
        - Collections
      security:
        - Bearer: []
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
        - name: collectionId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/CollectionId'
        - $ref: '#/components/parameters/X-Adobe-Accept-Experimental'
        - $ref: '#/components/parameters/SubjectTokenParam'
      responses:
        '200':
          description: Collection Metadata Retrieved successfully
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/CollectionMetadata'
        '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'
    head:
      summary: Head request for a collection metadata
      description: |
        Returns headers, including an ETag for the specified collection, which can be a lighter method of
        checking for the existence of, or validating a cached version of an collection without sending a full GET
        request.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: headCollectionMetadata
      security:
        - {}
        - Bearer: []
      parameters:
        - name: collectionId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/CollectionId'
        - $ref: '#/components/parameters/SubjectTokenParam'
      tags:
        - Collections
      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'
    delete:
      summary: Delete a Collection
      description: |
        Deletes a collection for a given collection id. If the delete operation requires more than a few
        seconds to complete, a status link with the jobId is returned in the response header that can be used to
        check the status.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: deleteCollection
      tags:
        - Collections
      security:
        - Bearer: []
      parameters:
        - name: collectionId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/CollectionId'
        - $ref: '#/components/parameters/If-Match'
        - $ref: '#/components/parameters/SubjectTokenParam'
      responses:
        '202':
          description: Accepted
          headers:
            Location:
              $ref: '#/components/headers/Location'
        '204':
          description: Collection 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'
        '412':
          $ref: '#/components/responses/412_PreconditionFailed'
        '428':
          $ref: '#/components/responses/428_PreconditionRequired'
    post:
      summary: Update a collection's metadata
      description: |
        Updates the metadata for a given collection id.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: updateCollectionMetadata
      tags:
        - Collections
      security:
        - Bearer: []
      parameters:
        - name: collectionId
          in: path
          required: true
          description: ID of the Collection
          schema:
            $ref: '#/components/schemas/CollectionId'
        - $ref: '#/components/parameters/If-Match'
        - $ref: '#/components/parameters/SubjectTokenParam'
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/CollectionMetadataUpdateRequest'
            examples:
              UpdateMetadataOperation:
                value:
                  title: New Title
                  description: New Description
      responses:
        '204':
          description: No Content
          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'
        '412':
          $ref: '#/components/responses/412_PreconditionFailed'
        '428':
          $ref: '#/components/responses/428_PreconditionRequired'
  /collections/{collectionId}/items:
    get:
      summary: Get collection items
      description: |
        Retrieve a paginated list of the items in the specified collection.

        Anonymous access (no Bearer token) is permitted only when it is backed by a valid,
        resource-scoped `X-Adobe-Subject-Token`. When browsing into a collection surfaced by a shared
        link, present the collection's resource token (returned for that collection by the link's
        `GET /assets/linkshares/{linkId}/collections` listing) as that `X-Adobe-Subject-Token` header. A
        request with neither a Bearer token nor a valid resource-scoped token is rejected with `401`.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: getCollectionItems
      tags:
        - Collections
      security:
        - {}
        - Bearer: []
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
        - name: collectionId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/CollectionId'
        - in: query
          name: limit
          schema:
            $ref: '#/components/schemas/Limit'
        - in: query
          name: cursor
          schema:
            $ref: '#/components/schemas/Cursor'
        - $ref: '#/components/parameters/X-Adobe-Accept-Experimental'
        - $ref: '#/components/parameters/SubjectTokenParam'
      responses:
        '200':
          description: Collection Retrieved successfully
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
          content:
            application/json:
              schema:
                properties:
                  cursor:
                    $ref: '#/components/schemas/Cursor'
                  self:
                    items:
                      allOf:
                        - $ref: '#/components/schemas/CollectionMetadata'
                  items:
                    type: array
                    items:
                      allOf:
                        - $ref: '#/components/schemas/CollectionItem'
        '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'
    head:
      summary: Head request for collection items
      description: |
        Returns headers, including an ETag for the specified assets collection, which can be a lighter method of
        checking for the existence of, or validating a cached version of an collection without sending a full GET
        request.

        As with the `GET` method, anonymous access (no Bearer token) is permitted only when it is backed
        by a valid, resource-scoped `X-Adobe-Subject-Token` — for a collection reached via a shared link,
        the per-item resource token from the list-in-link call (`GET /assets/linkshares/{linkId}/assets`).

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: headCollection
      security:
        - {}
        - Bearer: []
      parameters:
        - name: collectionId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/CollectionId'
        - in: query
          name: limit
          schema:
            $ref: '#/components/schemas/Limit'
        - in: query
          name: cursor
          schema:
            $ref: '#/components/schemas/Cursor'
        - $ref: '#/components/parameters/SubjectTokenParam'
      tags:
        - Collections
      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'
    post:
      summary: Update collection items
      description: |
        If the update operation requires more than a few seconds to complete, response includes a `Location` header which contains the URL to poll for status of this operation.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: updateCollectionItems
      tags:
        - Collections
      security:
        - Bearer: []
      parameters:
        - name: collectionId
          in: path
          required: true
          description: ID of the Collection
          schema:
            $ref: '#/components/schemas/CollectionId'
        - $ref: '#/components/parameters/If-Match'
        - $ref: '#/components/parameters/SubjectTokenParam'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                anyOf:
                  - $ref: '#/components/schemas/CollectionOperation'
            examples:
              MultipleOperations:
                value:
                  - op: remove
                    id: urn:aaid:aem:fc472a53-4ef1-4fdb-8ebb-f9b1ee75985w
                    type: asset
                  - op: add
                    id: urn:aaid:aem:fc472a53-4ef1-4fdb-8ebb-f9b1ee75985w
                    type: asset
              AddOperation:
                value:
                  - op: add
                    id: urn:aaid:aem:fc472a53-4ef1-4fdb-8ebb-f9b1ee75985w
                    type: asset
              RemoveOperation:
                value:
                  - op: remove
                    id: urn:aaid:aem:fc472a53-4ef1-4fdb-8ebb-f9b1ee75985w
                    type: asset
      responses:
        '202':
          description: Accepted
          headers:
            Location:
              $ref: '#/components/headers/Location'
        '204':
          description: No Content
          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'
        '412':
          $ref: '#/components/responses/412_PreconditionFailed'
        '428':
          $ref: '#/components/responses/428_PreconditionRequired'
  /collections/jobs/{jobId}/status:
    get:
      summary: Retrieve a collection's job async status
      description: |
        Retrieves the current job's status for a collection.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: getCollectionStatus
      tags:
        - Collections
      security:
        - Bearer: []
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
            minLength: 1
        - $ref: '#/components/parameters/X-Adobe-Accept-Experimental'
      responses:
        '200':
          description: Status of a task being processed
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/CollectionJobStatus'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
  /archives:
    post:
      summary: Archival Request API
      description: |
        Request creation of an archive for the asset references specified in the request payload. The response contains an identifier and metadata pertaining to the archive request.
        The result of the operation will be one or more archives. The API may use various factors to determine the number of archives required to complete the operation. For example, very large archive request might be split into multiple files.
        Consumers of this API should use the response `Location` header to poll for the status of the archive creation request. The polling interval should be determined by the `Retry-After` header value.
        Invalid assets specified for inclusion in the archive will not fail the overall creation process. Instead, the API will create a archive containing the assets it could find, with invalid asset references appearing as warnings in the final status response.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: createArchive
      tags:
        - Archives
      security:
        - Bearer: []
        - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateArchiveRequest'
      responses:
        '202':
          description: Accepted
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ArchiveMetadata'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /archives/{archiveId}/status:
    get:
      summary: Archival Request Status API
      description: |
        Get the status of the archive creation request

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: getArchiveStatus
      tags:
        - Archives
      security:
        - Bearer: []
        - ApiKeyAuth: []
      parameters:
        - name: archiveId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/ArchiveId'
      responses:
        '200':
          description: Ok
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ArchiveStatus'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /archives/{archiveId}/files/{fileName}:
    get:
      summary: Archive File Download API
      description: |
        For a given `archiveId`, one or more archive files can be created.
        Archival Request Status API provides the list of archive files available for the `archiveId`. This API enables download of any/all of those files.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: downloadArchive
      tags:
        - Archives
      security:
        - {}
        - Bearer: []
        - ApiKeyAuth: []
      parameters:
        - name: archiveId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/ArchiveId'
        - name: fileName
          in: path
          required: true
          schema:
            type: string
            description: The name of the archive file to retrieve. Archive files available for download against this `archiveId` can be retrieved through the Archival Request Status API.
            example: assets.zip
        - name: token
          in: query
          description: a time limited token allowing anonymous retrieval of the archive file. The token will be included in the URLs presented in `Archival Request Status API` response for requests that have their status as `COMPLETED`.
          schema:
            type: string
      responses:
        '302':
          description: Found
          headers:
            Location:
              $ref: '#/components/headers/Location'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
x-webhooks:
  asset_removed_from_delivery:
    post:
      operationId: asset_removed_from_delivery
      summary: Asset delivery disabled event
      description: |
        Event triggered when an asset can no longer be rendered through new DM APIs. This is used by applications when processing of asset(s) in delivery
        tier takes a long time, for example, video assets or assets going through any ML pipeline.
      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.removed_from_delivery
      responses:
        '200':
          description: |
            Asset delivery disabled event data is received successfully
  asset_ready_for_delivery:
    post:
      operationId: asset_ready_for_delivery
      summary: Asset delivery ready event
      description: |
        Event triggered when an asset is ready for delivery through new DM APIs. This is used by applications when processing of asset(s) in delivery tier
        takes a long time, for example, video assets or assets going through any ML pipeline.
      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.ready_for_delivery
      responses:
        '200':
          description: |
            Asset delivery ready 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_search:
    post:
      operationId: assetSearchEvent
      summary: Asset search event
      description: |
        Event triggered when a search is executed within 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'
                        search:
                          $ref: '#/components/schemas/CompositeQuery'
                        resultsCount:
                          type: integer
                          description: The total number of results returned by the search is accurate up to 10,000. (Note) This field is optional and will only be populated by implementations that support it.
                      required:
                        - user
                        - search
                    type:
                      type: string
                      enum:
                        - aem.assets.search
                  required:
                    - data
            example:
              specversion: '1.0'
              type: aem.assets.search
              source: acct:aem-p56789-e12345@adobe.com
              id: 8e7e1f0e-8c5c-4e2d-9b78-4f9b2a5d1111
              time: '2026-03-12T10:15:30Z'
              datacontenttype: application/json
              data:
                user:
                  imsUserId: 11362B9E62F4CD400A495ECF@09f51d11618ca7b4495ee0.e
                  principalId: testuser@adobe.com
                  displayName: Test User
                search:
                  and:
                    - match:
                        text: summer campaign
                    - term:
                        dc:format:
                          - image/png
                          - image/jpeg
                resultsCount: 42
      responses:
        '200':
          description: |
            Asset search event data is received successfully
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
  schemas:
    PlayerViewerPresetValue:
      type: object
      description: |
        Viewer preset userdata returned by `GET /adobe/assets/viewerPresets/{viewerPresetName}`.
        After `GET /adobe/assets/{assetId}/play` delivers the player HTML, the viewer loads this userdata to apply the preset.

        The set of modifier keys is defined and controlled by the implementation and may evolve
        without a change to this contract. Each entry is an opaque key/value string pair; the viewer
        is the sole consumer and interprets the keys it recognizes.
      additionalProperties: false
      properties:
        modifiers:
          type: array
          description: List of viewer modifier key/value pairs applied by the player.
          items:
            type: object
            additionalProperties: false
            required:
              - key
              - value
            properties:
              key:
                type: string
                minLength: 1
                description: Modifier name (implementation-defined).
              value:
                type: string
                description: Modifier value, serialized as a string.
        style:
          type: string
          description: |
            Custom CSS applied by the player. On Polaris this is a full asset delivery URL
            (for example `https://delivery-pxxxxx-eyyyyy.adobeaemcloud.com/adobe/assets/<asset-id>/original/as/<css_name>.css`).
            Delivered under the `style` key, consistent across Dynamic Media (S7) and Polaris.
        description:
          type: string
          description: Human-readable description of the preset.
    AssetId:
      type: string
      description: ID of the asset
      minLength: 1
      example: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
    ColorFormatString:
      type: string
      anyOf:
        - pattern: ^gray,([A-Fa-f0-9]{2})$
          description: 'Gray color format: gray,XX (2 hex digits)'
        - pattern: ^graya,([A-Fa-f0-9]{4})$
          description: 'Gray with alpha format: graya,XXXX (4 hex digits)'
        - pattern: ^rgb,([A-Fa-f0-9]{6})$
          description: 'RGB color format: rgb,XXXXXX (6 hex digits)'
        - pattern: ^rgba,([A-Fa-f0-9]{8})$
          description: 'RGBA color format: rgba,XXXXXXXX (8 hex digits)'
    FourTuple:
      type: array
      minItems: 4
      maxItems: 4
      items:
        type: integer
      example:
        - 100
        - 200
        - 300
        - 400
      description: Four coordinates defining a rectangle [x, y, width, height]
    FourTupleRelative:
      type: array
      minItems: 4
      maxItems: 4
      items:
        type: string
        pattern: \d+((\.\d+)?p){0,1}
      example:
        - 0p
        - 0p
        - 100p
        - 100p
      description: Four coordinates with percentage values [xp, yp, widthp, heightp]
    RGBColor:
      type: string
      pattern: ^[A-Fa-f0-9]{6}$
      description: RGB color value as 6 hex digits (e.g., FF0000 for red)
      example: FF0000
    TwoTuple:
      type: array
      minItems: 2
      maxItems: 2
      items:
        type: integer
      example:
        - 400
        - 200
    TwoTupleRelative:
      type: array
      minItems: 2
      maxItems: 2
      items:
        type: string
        pattern: \d+((\.\d+)?p){0,1}
      example:
        - 0p
        - 0p
      description: Two coordinates with percentage values [xp, yp]
    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"
    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
    PlayerOutput:
      type: string
    FileContentType:
      type: string
      description: the content type of the delivered binary
      example: application/pdf, image/jpg
    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
    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
    AspectRatio:
      type: object
      description: Aspect ratio of the smart crop (width:height) as integer components.
      properties:
        width:
          type: integer
          format: int32
          minimum: 1
          description: Width component of the aspect ratio
          example: 16
        height:
          type: integer
          format: int32
          minimum: 1
          description: Height component of the aspect ratio
          example: 9
      required:
        - width
        - height
    DefaultDimensions:
      type: object
      description: Default width and height in pixels for the crop output.
      properties:
        width:
          type: integer
          format: int32
          minimum: 1
          description: Width in pixels
        height:
          type: integer
          format: int32
          minimum: 1
          description: Height in pixels
      required:
        - width
        - height
    Smartcrop:
      type: object
      description: |
        Smart crop item for image and video assets.
        Every crop has a name and an aspect ratio. Optional defaultDimensions provides width and height in pixels for the crop output.
      properties:
        name:
          type: string
          description: Name of the smart crop preset
          minLength: 1
          example: Large
        cropType:
          type: string
          description: Optional type of the crop (e.g. image, video)
          enum:
            - image
            - video
        aspectRatio:
          $ref: '#/components/schemas/AspectRatio'
        defaultDimensions:
          $ref: '#/components/schemas/DefaultDimensions'
      required:
        - name
        - aspectRatio
    ImagePreset:
      type: object
      description: An image preset item
      properties:
        name:
          type: string
          description: Name of the image preset
          minLength: 1
          example: testImagePreset
        format:
          type: string
          description: Image format and color space of the image preset. Both the image format and the color space are saved as comma separated values in the image preset.
          minLength: 1
        dimensions:
          type: object
          properties:
            width:
              type: integer
              format: int32
              minimum: 1
              description: Width of the image preset in pixels
              example: 500
            height:
              type: integer
              format: int32
              minimum: 1
              description: Height of the image preset in pixels
              example: 500
      required:
        - name
        - format
    VideoManifestFormatParam:
      type: string
      enum:
        - m3u8
        - mpd
      example: m3u8
    VideoManifestOutput:
      type: string
    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: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: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'
    SubjectToken:
      type: string
      minLength: 1
      description: |
        Optional opaque token containing user/subject attributes used for user authorization.
      example: eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..
    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
    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/FacetType'
        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'
          STAT: '#/components/schemas/StatFields'
      example:
        type: CATEGORY
        field: metadata.assetMetadata.dc:subject
        id: subject_facet
        scope:
          - term:
              assetMetadata.dc:category:
                - footwear
                - accessories
    CategoryValueFilter:
      type: object
      description: The query may be either a regex pattern or a list of explicit values (but not both) depending on the specified queryType.
      properties:
        regex:
          type: string
          description: |
            A regular expression to match the category values. This is useful when you want to 
            include category values based on a pattern.

            **Note:** Anchor operators (^ for beginning of line, $ for end of line) are not supported.
            The regex pattern must match the entire string by default.
            For example, if you want to include categories that start with "Tech", you would specify a
            regex like "Tech.*" (not "^Tech.*"). Similarly, to match values ending with "ics", use ".*ics" (not ".*ics$").
        values:
          type: array
          description: |
            A list of explicit values to include.
            Applicable only when queryType is LIST.
          items:
            type: string
      additionalProperties: false
    ScopeQuery:
      description: A scope query is a combination of clauses, each of which can itself be a scope query
      anyOf:
        - $ref: '#/components/schemas/ScopeOrQuery'
        - $ref: '#/components/schemas/ScopeAndQuery'
        - $ref: '#/components/schemas/ScopeNotQuery'
        - $ref: '#/components/schemas/TermQuery'
        - $ref: '#/components/schemas/RangeQuery'
    ScopeOrQuery:
      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/ScopeQuery'
      required:
        - or
      example:
        or:
          - term:
              repositoryMetadata.dc:format:
                - image/png
                - image/jpeg
          - term:
              repositoryMetadata.dc:subject:
                - landscape photography
                - portrait photography
    ScopeAndQuery:
      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/ScopeQuery'
      required:
        - and
      example:
        and:
          - term:
              repositoryMetadata.dc:format:
                - image/png
                - image/jpeg
          - term:
              repositoryMetadata.dc:subject:
                - landscape photography
                - portrait photography
    ScopeNotQuery:
      type: object
      description: |
        Logical not operator. The results must not match the sub-query in this clause.
      additionalProperties: false
      properties:
        not:
          type: array
          minItems: 1
          maxItems: 5
          items:
            $ref: '#/components/schemas/ScopeQuery'
      required:
        - not
      example:
        not:
          - term:
              repositoryMetadata.dc:format:
                - image/png
                - image/jpeg
          - term:
              repositoryMetadata.dc:subject:
                - landscape photography
                - portrait photography
    CategoryFields:
      type: object
      description: Schema for configuring count based aggregations in search results.
      allOf:
        - $ref: '#/components/schemas/FacetRequest'
        - type: object
          properties:
            includes:
              $ref: '#/components/schemas/CategoryValueFilter'
            size:
              description: |
                The maximum number of values to return.
              type: integer
              minimum: 1
              maximum: 1000
              default: 10
            scope:
              $ref: '#/components/schemas/ScopeQuery'
            sort:
              description: |
                Rules to sort the values (e.g., by frequency or by value).
                - COUNT_DESC : highest count first (default)
                - VALUE_ASC : alphabetical ascending
                - VALUE_DESC : alphabetical descending
              type: string
              enum:
                - COUNT_DESC
                - VALUE_ASC
                - VALUE_DESC
              default: COUNT_DESC
      example:
        type: CATEGORY
        field: repositoryMetadata.dc:format
        id: format_facet
        size: 10
        sort: COUNT_DESC
        scope:
          - term:
              assetMetadata.dc:subject:
                - footwear
                - accessories
    StatFields:
      type: object
      description: Schema for configuring statistical aggregations in search results.
      allOf:
        - $ref: '#/components/schemas/FacetRequest'
        - type: object
          properties:
            scope:
              $ref: '#/components/schemas/ScopeQuery'
      example:
        type: STAT
        field: metadata.repositoryMetadata.repo:size
        id: size_facet
        scope:
          - term:
              assetMetadata.dc:subject:
                - footwear
                - accessories
    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
    AssetSearchRequest:
      type: object
      description: Experimental version of SearchOperation with unified facets
      allOf:
        - $ref: '#/components/schemas/SearchOperation'
        - type: object
          properties:
            projectedFields:
              $ref: '#/components/schemas/ProjectedFields'
            facets:
              type: array
              minItems: 1
              maxItems: 50
              description: Unified facet requests combining category and stat requests
              items:
                $ref: '#/components/schemas/FacetRequest'
    OrderBy:
      description: |
        The value of an `orderBy` parameter contains a comma-separated list of expressions used to sort the items.

        The expression may include the suffix `asc` for ascending or `desc` for descending, separated from the property
        name by one or more spaces. If `asc` or `desc` is not specified, the service will order by the specified
        property in ascending order.

        Items will be sorted by the result values of the first expression; items with the same value for the first
        expression are sorted by the result value of the second expression and so on. The sort order is the
        inherent order for the type of the property.
      type: string
      minLength: 1
      example: metadata.repositoryMetadata.repo:size desc,metadata.repositoryMetadata.repo:createDate asc
    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'
    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
    CollectionId:
      type: string
      description: ID of the collection
      minLength: 1
      example: urn:cid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
    BaseRepositoryMetadata:
      type: object
      description: Read-only metadata properties that are maintained by the repository for the asset, link, folder or collection.
      properties:
        repo:repositoryId:
          $ref: '#/components/schemas/RepositoryId'
        repo:createDate:
          type: string
          format: date-time
          description: The created date of the asset, link, folder or collection as maintained by the content repository
          readOnly: true
        repo:createdBy:
          type: string
          description: The user that created the asset, link, folder or collection in the content repository
          readOnly: true
        repo:modifiedBy:
          type: string
          description: The user that last modified the asset, link, folder or collection in the content repository
          readOnly: true
        repo:modifyDate:
          type: string
          format: date-time
          description: The last modified date of the asset, link, folder or collection as maintained by the content repository
          readOnly: true
      additionalProperties: true
    CollectionBaseMetadata:
      type: object
      description: Base collection metadata returned in a collection response.
      required:
        - id
        - repositoryMetadata
        - collectionMetadata
      properties:
        id:
          $ref: '#/components/schemas/CollectionId'
        repositoryMetadata:
          $ref: '#/components/schemas/BaseRepositoryMetadata'
        collectionMetadata:
          type: object
          properties:
            title:
              type: string
              description: The title of the Collection
              example: Product Images
            description:
              type: string
              description: A short description of the Collection
              example: Images approved for use in the product catalog
          additionalProperties: true
    CollectionMetadata:
      allOf:
        - $ref: '#/components/schemas/CollectionBaseMetadata'
        - type: object
          properties:
            pin:
              type: boolean
              description: Indicates whether the collection is pinned for the current user
              example: true
            favorite:
              type: boolean
              description: Indicates whether the collection is marked as favorite for the current user
              example: true
    CollectionItem:
      type: object
      properties:
        id:
          type: string
          description: ID of an item that represents the asset or collection
          minLength: 1
          example: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
        repo:repositoryId:
          $ref: '#/components/schemas/RepositoryId'
        type:
          type: string
          description: The type of the item
          enum:
            - asset
            - collection
    CollectionCreationRequest:
      type: object
      properties:
        title:
          type: string
          minLength: 1
          description: Title of the Collection
          example: Product Images
        description:
          type: string
          description: A short description of the Collection
          example: Images approved for use in the product catalog
        items:
          type: array
          description: The items in the Collection
          items:
            allOf:
              - $ref: '#/components/schemas/CollectionItem'
      additionalProperties: true
      required:
        - title
        - items
    CollectionMetadataUpdateRequest:
      type: object
      properties:
        title:
          type: string
          minLength: 1
          description: Title of the Collection
          example: Product Images
        description:
          type: string
          description: A short description of the Collection
          example: Images approved for use in the product catalog
      additionalProperties: true
    CollectionOperation:
      type: object
      description: Adds or removes an item from the collection.
      additionalProperties: false
      properties:
        op:
          description: Identifies this operation as an `add` or `remove` operation
          type: string
          minLength: 3
          enum:
            - add
            - remove
        id:
          description: The ID of the item to add or remove. The ID can specify an asset or a collection.
          type: string
          minLength: 1
        repo:repositoryId:
          $ref: '#/components/schemas/RepositoryId'
        type:
          description: The type of item that is referenced by the id. Valid values are `asset` or `collection`.
          type: string
          minLength: 5
          enum:
            - asset
            - collection
      required:
        - op
        - id
        - type
    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
    CollectionJobStatus:
      type: object
      description: The status of a collection async job.
      allOf:
        - $ref: '#/components/schemas/CommandResult'
        - type: object
          properties:
            operation:
              type: string
              enum:
                - aem.assets.collections.createCollection
                - aem.assets.collections.deleteCollection
                - aem.assets.collections.addToCollection
                - aem.assets.collections.removeFromCollection
            data:
              allOf:
                - type: object
                  description: Assets Collection Command Result
                  properties:
                    id:
                      type: string
                      minLength: 1
                    collectionId:
                      $ref: '#/components/schemas/CollectionId'
                    status:
                      type: string
                      description: Status of the collection operation
                      minLength: 1
                      enum:
                        - PROCESSING
                        - COMPLETED
                        - FAILED
                      readOnly: true
                  required:
                    - status
      example:
        operation: aem.assets.collections.deleteCollection
        status: 200
        description: Collection deleted successfully
        data:
          id: 12a020e8-ca19-44aa-91fa-c1c0db97edff
          collectionId: urn:cid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
          status: COMPLETED
        errors: []
        warnings:
          - type: http://api.adobeaemcloud.com/adobe/meta/errors/not_found
            title: Not Found
            detail: Asset 'xyz-123' could not be found
    LinkShareAccess:
      type: string
      enum:
        - PUBLIC
        - RESTRICTED
      description: Specifies the access level for the link.
      minLength: 6
    LinkMetadata:
      type: object
      description: The link's configured metadata.
      properties:
        title:
          type: string
          description: Title of the link
          example: Sample link
          minLength: 1
        description:
          type: string
          description: Description of the link
          example: Approved hero images for the spring campaign
        access:
          $ref: '#/components/schemas/LinkShareAccess'
        expiryTime:
          type: string
          format: date-time
          description: The date and time when shared link expires.
          example: '2021-05-20T20:00:00.000Z'
          minLength: 19
      required:
        - title
        - access
    LinkShareMetadataResponse:
      type: object
      properties:
        id:
          type: string
          description: ID of the link
          example: 6ba7b8109dad11d180b40002a5d5c51b62xsa4uT0qO_hvyym329pOYFasfPffVM9E-IPgs9KM
          minLength: 40
        repositoryMetadata:
          $ref: '#/components/schemas/BaseRepositoryMetadata'
        linkMetadata:
          $ref: '#/components/schemas/LinkMetadata'
        isPasswordProtected:
          type: boolean
          description: Indicates whether the link is protected by a password.
          example: false
      required:
        - id
        - repositoryMetadata
        - linkMetadata
    LinkSharePassword:
      type: string
      description: Password for a password-protected public link. Applicable to public links only; the service rejects this field when access is restricted. Write-only, never returned in any response. Must be at least 8 characters and contain at least one uppercase letter, one lowercase letter, and one digit.
      writeOnly: true
      format: password
      minLength: 8
      maxLength: 128
      pattern: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$
      example: S3cre7!Ab
    LinkShareMetadataRequest:
      type: object
      properties:
        linkMetadata:
          $ref: '#/components/schemas/LinkMetadata'
        password:
          $ref: '#/components/schemas/LinkSharePassword'
      required:
        - linkMetadata
      not:
        allOf:
          - properties:
              linkMetadata:
                properties:
                  access:
                    enum:
                      - RESTRICTED
                required:
                  - access
            required:
              - linkMetadata
          - required:
              - password
    LinkShareItemType:
      type: string
      enum:
        - ASSET
        - COLLECTION
      description: The type of item referenced, either an `ASSET` or a `COLLECTION`.
      minLength: 5
    LinkShareItem:
      type: object
      properties:
        id:
          type: string
          description: ID of an item that represents the asset or collection
          minLength: 1
          example: opaque-asset-id
        type:
          $ref: '#/components/schemas/LinkShareItemType'
      required:
        - id
        - type
    LinkShareItemsRequest:
      type: object
      properties:
        items:
          type: array
          description: Array of items (assets or collections) to include in the shared link. Capped at 2500 items per request; requests exceeding the cap are rejected with `422 Unprocessable Entity`.
          items:
            $ref: '#/components/schemas/LinkShareItem'
          minItems: 1
          maxItems: 2500
      required:
        - items
    LinkShareJobState:
      type: object
      description: The identity and current state of a link share async job.
      properties:
        jobId:
          type: string
          minLength: 1
        linkId:
          type: string
          minLength: 1
        state:
          type: string
          description: Status of the link share operation
          minLength: 1
          enum:
            - PROCESSING
            - COMPLETED
            - COMPLETED_WITH_ERRORS
            - FAILED
        status:
          type: string
          description: Additional information about processing state. If an error occurred, error information will appear here.
      required:
        - jobId
        - linkId
        - state
      example:
        jobId: 542c88b4-e136-4341-9221-ae42d3d70b10
        linkId: 6ba7b8109dad11d180b40002a5d5c51b62xsa4uT0qO_hvyym329pOYFasfPffVM9E-IPgs9KM
        state: PROCESSING
        status: Link creation is being processed
    SearchTokenRequest:
      type: object
      properties:
        indexes:
          type: array
          items:
            type: string
            enum:
              - assets
              - collections
              - linkshares
              - querysuggestions
          description: |
            Specify indexes to grant access to.
          example:
            - assets
            - collections
        operationType:
          type: string
          enum:
            - search
            - analytics
            - settings
          description: Specifiy the type of operation.
      required:
        - indexes
        - operationType
    SearchTokenResponse:
      type: object
      properties:
        token:
          type: string
          description: The created token.
          example: YTgyMzMwOTkzMjA2Mzk5OWUxNjhjYmIwMGZkNGFmMzk2NDU3ZjMyYTg1NThiZjgx
        expiryTime:
          type: string
          format: date-time
          description: The date and time until which the created token will be valid.
          example: 2024-02-28T21:39:02.417-0800
          minLength: 19
        appId:
          type: string
          description: This ID uniquely defines the application and will be required when using this token.
          example: 5HEOA9BAT1
      required:
        - token
        - expiryTime
        - appId
    ArchiveFormat:
      type: string
      description: The output format of the archive
      default: zip
      enum:
        - zip
    CreateArchiveRequest:
      type: object
      description: Request to create an archive
      properties:
        items:
          type: array
          description: |
            Assets to be included in the archive. By default, any [custom renditions generated via Processing Profiles](https://experienceleague.adobe.com/en/docs/experience-manager-learn/assets/configuring/processing-profiles) and [original rendition](https://experienceleague.adobe.com/en/docs/experience-manager-learn/assets/authoring/renditions) are included, and all others are excluded.
            The request can optionally specify renditions that MUST be included-in or excluded-from the archive being requested.
          items:
            type: object
            properties:
              assetId:
                $ref: '#/components/schemas/AssetId'
              repo:repositoryId:
                $ref: '#/components/schemas/RepositoryId'
              includeRenditions:
                type: array
                items:
                  type: string
                description: |
                  Specifies the renditions of the asset to be included in the archive.
                example:
                  - thumbnail.319.png
                  - customRenditionName.png
              excludeRenditions:
                type: array
                items:
                  type: string
                description: |
                  Specifies the renditions of the asset to be excluded from the archive. If a given rendition is specified in both includeRenditions and excludeRenditions, then the rendition will be excluded from the archive.
                example:
                  - original
            required:
              - assetId
          minItems: 1
        format:
          $ref: '#/components/schemas/ArchiveFormat'
        namePrefix:
          type: string
          description: The name to use for the created archive file(s). Note that the API will treat this as a suggestion, and reserves the right to change the final archive name as needed. If not provided, the API will assign its own file name according to any logic it deems fit.
          example: assets
        organizeRenditions:
          type: boolean
          description: |
            When multiple renditions of each asset being downloaded are to be included in the archive, this flag controls whether they'd be hierarchically organized.
            When `false`, assets and their renditions are available at the root level of the generated archive.
            When `true`, the renditions of individual assets will be organized in asset-specific folders in the archive.
          default: false
          example: true
      required:
        - items
    ArchiveId:
      type: string
      description: Identifier for the archive under-process/processed by the service
      minLength: 1
      example: 1a034bee-ebda-4787-bad3-f924d0772b75
    ArchiveMetadata:
      properties:
        id:
          $ref: '#/components/schemas/ArchiveId'
        format:
          $ref: '#/components/schemas/ArchiveFormat'
        submittedBy:
          type: string
          description: The user who submitted the archive request
          minLength: 1
          readOnly: true
          example: person@company.com
        submittedDate:
          type: string
          format: date-time
          description: The date and time the archive creation request was submitted
          readOnly: true
          example: 2024-02-28T21:39:02.417-0800
          minLength: 19
      required:
        - id
        - format
        - submittedBy
        - submittedDate
    ArchiveStatus:
      type: object
      description: Read-only metadata properties associated with the archive
      allOf:
        - $ref: '#/components/schemas/CommandResult'
        - type: object
          properties:
            operation:
              type: string
              enum:
                - aem.assets.archives.createArchive
            data:
              allOf:
                - $ref: '#/components/schemas/ArchiveMetadata'
                - type: object
                  description: Assets Archive Command Result
                  properties:
                    status:
                      type: string
                      description: The status of the archive creation process
                      minLength: 1
                      enum:
                        - PROCESSING
                        - COMPLETED
                        - FAILED
                    completionDate:
                      type: string
                      format: date-time
                      description: The date and time the archive request was completed. Available when the status is 'COMPLETED'
                    files:
                      type: array
                      description: Full URLs to the locations where the archive files' binaries can be retrieved. Available when the status is 'COMPLETED'
                      items:
                        type: string
                        format: uri
                  required:
                    - status
      example:
        operation: aem.assets.archives.createArchive
        status: 200
        description: Archive created successfully
        data:
          id: 12a020e8-ca19-44aa-91fa-c1c0db97edff
          format: zip
          submittedBy: person@company.com
          submittedDate: 2024-02-28T21:39:02.417-0800
          status: COMPLETED
          completionDate: 2024-02-28T21:50:31.346-0800
          files:
            - https://polaris-asset-archives.adobe.io/adobe/assets/archives/12345/as/asset.zip
            - https://polaris-asset-archives.adobe.io/adobe/assets/archives/12345/as/asset1.zip
        errors: []
        warnings:
          - type: http://api.adobeaemcloud.com/adobe/meta/errors/not_found
            title: Not Found
            detail: Asset 'xyz-123' could not be found
    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: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.
  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
    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
    Format:
      in: path
      name: format
      description: |
        The Requested format.

        _NOTE_: The format of the output image may be different from the requested format as smart imaging is enabled by default and based on the browser capabilities, customer entitlements, and transparency a web-optimized format is returned.
      required: true
      schema:
        type: string
        enum:
          - gif
          - png
          - jpg
          - jpeg
          - webp
          - avif
        example: avif
    Width:
      name: width
      in: query
      description: |
        Specifies the width of the output image in pixels. This parameter allows you to control the horizontal dimension of either the final output image or a specific layer. The width must be a positive integer (minimum value: 1).

        When used in combination with the height parameter, the aspect ratio of the original image is preserved. This means the actual output width may be smaller than the requested value to preserve aspect ratio.

        If not defined, the image width defaults to a maximum of 2048 pixels.

        Examples without layer:
        - `width=200` - Set width of final output image to 200 pixels

        Examples when used with a layer named `layerName`:
        - `width[layerName]=200` - Set width of specific layer to 200 pixels

        Only one of `width` or `width[layerName]` should be used at a time.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: integer
                minimum: 1
          - type: integer
            minimum: 1
    Quality:
      name: quality
      in: query
      description: |
        Specifies the compression quality for the image. Quality value ranges from 1 to 100, where 100 is the highest quality (least compression) and 1 is the lowest quality (highest compression).

        A higher quality value results in better image quality but larger file size, while a lower value reduces file size at the cost of image quality.

        <span style="color: red; font-weight: bold">_Note_: For dynamic quality based on network conditions, use `max-quality` instead of `quality`.</span>

        Example:
        - `quality=85` - Set quality of final output image to 85

        Only the global `quality` parameter is supported.
      schema:
        type: integer
        minimum: 1
        maximum: 100
    MaxQuality:
      name: max-quality
      in: query
      description: |
        Specifies the maximum quality for the image when delivery-engine dynamically adjusts the quality of the image based on the client's network bandwidth. The value ranges from 1 to 100, where 100 is the highest quality (least compression) and 1 is the lowest quality (highest compression).

        By default, the value is set to `85` and network-based dynamic quality adjustment is enabled.

        Unlike the static `quality` parameter, `max-quality` acts as an upper bound. The actual quality used for image delivery may be reduced below this value depending on the round-trip time (RTT) and network conditions of the requester. This helps optimize image delivery for faster loading on slower networks by reducing file size when needed.

        <span style="color: red; font-weight: bold">_Note_: If `quality` is specified, `max-quality` is ignored.</span>

        Example:
        - `max-quality=85` - Set the maximum quality to 85; actual delivered quality may be lower based on network speed


        `max-quality` parameter is only applied at final output image.
      schema:
        type: integer
        minimum: 1
        maximum: 100
    Smartcrop:
      name: smartcrop
      in: query
      description: |
        Applies intelligent cropping to automatically identify and preserve visually most important areas of the image for a given crop-region. This operation uses AI-powered content-aware cropping to ensure that key elements like faces, text, or focal points are retained in the output.

        The smartcrop parameter expects that named-smartcrop-profiles exist and have been applied to the asset. Those predefined profile names - specifying the target dimensions and aspect ratio of the cropped image - can be supplied as values of this parameter. The cropping can be applied either to a specific layer or to the final output image.

        Examples without layer:
        - `smartcrop=QHD` - Apply a smartcrop profile named QHD to final output image

        Examples when used with a layer named `layerName`:
        - `smartcrop[layerName]=QHD` - Apply a smartcrop profile named QHD to a specific layer


        Only one of `smartcrop` or `smartcrop[layerName]` should be used at a time.

        _NOTE_: Specifying an unresolvable smartcrop profile-name (the one that hasn't been defined, or hasn't been applied to the asset being requested) will lead to an error response.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: string
                example: QHD
          - type: string
            example: QHD
    Dpr:
      in: query
      name: dpr
      description: |
        Device Pixel Ratio (DPR) (also known as CSS pixel ratio) is the relation between a device's physical pixels and logical pixels.

        Enabling Device Pixel Ratio optimization with <a href="https://web.dev/learn/design/responsive-images#pixel-density">HTML5 Responsive Imaging techniques</a> renders the image at the native resolution of the screen which makes it sharp.
        For more information about DPR and how it affects image resolution, see <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio">MDN Documentation for devicePixelRation property of browser-`window` object.</a>

        Examples without layerName:
        - `dpr=2` - Renders the final output image at twice the requested dimensions to support high-DPI displays

        Examples when used with a layer named `layerName`:
        - `dpr[layerName]=2` - Renders a specific layer at twice the requested dimensions to support high-DPI displays
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: number
                format: float
                minimum: 0
                example: 2
          - type: number
            format: float
            minimum: 0
            example: 2
    Height:
      name: height
      in: query
      description: |
        Specifies the height of the image or a specific layer in pixels. When applied to the final output image or a layer, the image is scaled to match the specified height while maintaining the aspect ratio.

        The value must be a positive integer (minimum: 1 pixel).

        _NOTE_: If not defined, the height is automatically scaled to maintain aspect ratio based on the `width` (specified, or default). If defined alongside `width`, the dimensions of the output (or the layer) layer image are computed by applying `fit=contain` (see more [here](#operation/getAssetSeoFormat!in=query&path=fit&t=request)).

        Examples without layer:
        - `height=200` - Set height of final output image to 200 pixels

        Examples when used with a layer named `layerName`:
        - `height[layerName]=200` - Set height of specific layer to 200 pixels

        Only one of `height` or `height[layerName]` should be used at a time.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: integer
                minimum: 1
          - type: integer
            minimum: 1
    Sharpen:
      in: query
      name: sharpen
      description: |
        Applies a sharpening filter to enhance the edges and details in the image. The sharpening is applied either to a specific layer or to the final output image after all scaling operations are complete.

        When enabled, this operation increases the contrast between adjacent pixels to make the image appear more crisp and detailed.

        Examples without layerName:
        - `sharpen=true` - Apply sharpening to the final output image

        Examples when used with a layer named `layerName`:
        - `sharpen[layerName]=true` - Apply sharpening to a specific layer

        Only one of `sharpen` or `sharpen[layerName]` should be used at a time.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: boolean
                example: true
          - type: boolean
            example: true
    Blur:
      in: query
      name: blur
      description: |
        Applies a blur filter to soften the image. The blur can be applied either to a specific layer (when layerName is provided) or to the final output image (when no layerName is specified). The radius parameter determines the strength of the blur effect in pixels relative to the final output image, with a value between 0 and 100 pixels.

        Examples without layerName:
        - `blur=5` - Apply a blur filter to the final output image with a radius of 5 pixels

        Examples when used with a layer named `layerName`:
        - `blur[layerName]=5` - Apply a blur filter to a specific layer with a radius of 5 pixels
          
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: integer
                minimum: 0
                maximum: 100
                example: 5
          - type: integer
            minimum: 0
            maximum: 100
            example: 5
    Crop:
      in: query
      name: crop
      description: |
        Crop is specified by four comma-separated values, each a number with up to two digits after the decimal point, followed by `p`.

        First two specify the origin (top, left) of the desired cropped region as percentages of width and height of the original image, respectively.

        Last two specify the size of the cropped region relative to original dimensions of the asset.

        A valid crop region MUST meet both of the following constraints:
          * `<x-origin> + <crop-region-width>  <= 100`
          * `<y-origin> + <crop-region-height> <=100`

        Requests which don't meet aforementioned constraints will fail.

        Examples:
        - `crop=10p,10p,50p,50p` - Crop the final output image starting at 10% from top and left, taking 50% of width and height of the final output image
        - `crop[layerName]=10p,10p,50p,50p` - Crop a specific layer starting at 10% from top and left, taking 50% of width and height of the final output image
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: object
                properties:
                  value:
                    type: array
                    minItems: 4
                    maxItems: 4
                    items:
                      type: string
                      pattern: \d+((\.\d+)?p){0,1}
                required:
                  - value
          - type: array
            minItems: 4
            maxItems: 4
            items:
              type: string
              pattern: \d+((\.\d+)?p){0,1}
    Preset:
      in: query
      name: preset
      description: |
        Image Preset represents a predefined collection of sizing and formatting modifiers for output image. Image Preset is a feature provided in AEM Assets. Post generation of a preset, it can be applied to the output image by specifying the preset name in this modifier.

        To generate a preset, please refer to the documentation <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/managing-image-presets#:~:text=You%20manage%20your%20Image%20Presets,you%20preview%20or%20deliver%20assets">here</a>.

        Examples without layer:
        - `preset=preset-name`

        Examples when used with a layer named `layerName`:
        - `preset[layerName]=preset-name`
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: string
          - type: string
    Layers:
      in: query
      name: layers
      description: |

        Layers allow composition of a single output image from multiple segregations, each of which may have specific operations applied to them. Search for `layerName` in the documentation to identify the parameters that can be applied to layers.

        The layers which segregate the operations (and are finally aggregated to compose the single output image) are addressed by the names in the value of this parameter. These names are then used in rest of the parameters (which can be applied to layers) in the URL. The names are to be separated by the `|` character, and need to appear in the order in which they are painted when aggregated to produce the output image (rightmost layer specified in this parameter is painted the last when composing the aggregate.

        Layer names are case-sensitive and can have any alphanumeric characters (a-z, A-Z, 0-9).

        _NOTE_: `base` is reserved for the "base" layer - the lowermost layer (even if specified in the `layers` parameter at any other position) and will always be included (even if omitted from the `layers` parameter). i.e., `layers=base|mid|top`, `layers=mid|top` and `layers=mid|base|top` are all equivalent, and the recommendation is to follow either the first or the second pattern.

        _NOTE_: Nested layers are not supported, and the layers parameter can not applied to any other layer.  e.g., `layers=top&layers[top]=top1|top2` is invalid.
          
      explode: false
      schema:
        type: string
      examples:
        sample-layer-2:
          description: a request for a final output image composed of two layers.
          value: top
        sample-layer-3:
          description: a request for a final output image composed of three layers.
          value: base|mid|top
        sample-layer-3-base-ommitted:
          description: a request for a final output image composed of three layers, but the base layer is omitted.
          value: mid|top
    Fit:
      in: query
      name: fit
      description: "Specifies the resizing behavior when fitting the image within the output dimensions specified with `width` or `height`.\n\nIn the following description of the mode options, it is assumed that\n* `xScale` is the ratio of the original image width to the output image width, and\n* `yScale` is the ratio of the original image height to the output image height.\n\nIt takes the following values:\n| Parameter | Description |\n| --- | --- |\n| `constrain` (default) | Scales the original image so that it fits the bounding-box of `width` and `height` dimensions while preserving the aspect-ratio. The output image may be smaller than specified with `width` and `height` to avoid additional transparent pixes (padding) to the output, and is never cropped. The smaller of `xScale` and `yScale` is applied. |\n| `contain` | Scales the original image so that it fits the bounding-box of `width` and `height` dimensions while preserving the aspect-ratio _of the image-content_. The output image has the exact size specified with `width` and `height`, with additional transparent pixels (padding) added to the output. The smaller of `xScale` and `yScale` is applied. |\n| `crop` |\tScales the original image so that it fills a bounding-box of `width` and `height` dimensions. The output image has the exact size specified with `width` and `height`, but may be cropped to avoid additional transparent pixes (padding) to the output. The larger of `xScale` and `yScale` is applied. |\n\nThe color and transparency of the whitespace fill is determined by `background-color` and `transparency`.\n\nExamples without layer:\n- `fit=contain`\n\nExamples when used with a layer named `layerName`:\n- `fit[layerName]=contain`\n\n_NOTE_: Attempting to apply `fit` without requesting atleast one of `width` or `height` (explicitly, or implicitly) will result in an error.\n"
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: object
                properties:
                  mode:
                    type: string
                    enum:
                      - constrain
                      - contain
                      - crop
                required:
                  - mode
          - type: object
            properties:
              mode:
                type: string
                enum:
                  - constrain
                  - contain
                  - crop
            required:
              - mode
    BackgroundColor:
      in: query
      name: background-color
      description: |
        Specifies the background color for the transparent areas of the image or selected layer. 

        This operation takes following parameter values:
        |Parameter|Description|
        |---|---|
        |`colorspace` (Mandatory)|One of the supported colorspaces, with or without alpha|
        |`color-value` (Mandatory)|A color value corresponding to the specified colorspace, specified in hexadecimal|

        Defaults to fully transparent.

        <div style="border: 1px solid #ccc; border-radius: 6px; padding: 16px; background: #fafbfc; margin: 16px 0;">
          <b>Composite Imaging - Usage with <a href="#operation/getAssetSeoFormat!in=query&path=layers&t=request"><code>layers</code></a></b><br>
          <code>background-color</code> can be used with and without addressing a specific, named layer.
          However, based on the operations performed on the implicit <code>base</code> layer, <code>background-color</code>'s behaviour can help achieve additional effects in the composite images.
          <br>
          <br>
          Certain operations can introduce transparent pixels (padding, <a href="#operation/getAssetSeoFormat!in=query&path=fit&t=request">see <code>fit</code></a>) beyond the bounds of the image that forms the <code>base</code> layer. In such cases, specifying <code>background-color</code> without any layer qualifier allows specifying the color to apply to the padding.
          <br>
          More concretely:
          <br>
          <ul>
            <li><code>background-color=rgb,ff0000</code>: apply saturated red to the background of the <code>base</code> layer, including padding beyond the bounding-box of the base layer.
            <li><code>background-color[base]=rgb,ff0000</code>: apply saturated red to the background of the <code>base</code> layer, but only within the bounding-box of the <code>base</code> layer and exclude any padding from being affected by the operation.
          </ul>
        </div>

        Examples without layer name:
        - `background-color=gray,7F` - Gray color
        - `background-color=graya,7FFF` - Gray color with alpha
        - `background-color=rgb,808080` - RGB color
        - `background-color=rgba,32808080` - RGB color with alpha

        Examples with layer name:
        - `background-color[layerName]=gray,7F` - Gray color for specific layer
        - `background-color[layerName]=graya,7FFF` - Gray color with alpha for specific layer
        - `background-color[layerName]=rgb,808080` - RGB color for specific layer
        - `background-color[layerName]=rgba,32808080` - RGB color with alpha for specific layer
      explode: false
      style: form
      schema:
        oneOf:
          - $ref: '#/components/schemas/ColorFormatString'
          - type: object
            properties:
              layerName:
                $ref: '#/components/schemas/ColorFormatString'
    ForegroundColor:
      in: query
      name: foreground-color
      description: |
        Specifies the foreground color for the image or selected layer.

        This operation takes following parameter values:
        |Parameter|Description|
        |---|---|
        |`colorspace` (Mandatory)|One of the supported colorspaces, with or without alpha|
        |`color-value` (Mandatory)|A color value corresponding to the specified colorspace, specified in hexadecimal|

        Defaults to fully transparent.

        Examples without layer name:
        - `foreground-color=gray,7F` - Gray color
        - `foreground-color=graya,7FFF` - Gray color with alpha
        - `foreground-color=rgb,808080` - RGB color
        - `foreground-color=rgba,32808080` - RGB color with alpha

        Examples with layer name:
        - `foreground-color[layerName]=gray,7F` - Gray color for specific layer
        - `foreground-color[layerName]=graya,7FFF` - Gray color with alpha for specific layer
        - `foreground-color[layerName]=rgb,808080` - RGB color for specific layer
        - `foreground-color[layerName]=rgba,32808080` - RGB color with alpha for specific layer
      explode: false
      style: form
      schema:
        oneOf:
          - $ref: '#/components/schemas/ColorFormatString'
          - type: object
            properties:
              layerName:
                $ref: '#/components/schemas/ColorFormatString'
    AutoFormat:
      in: query
      name: auto-format
      description: |
        Controls the behaviour of browser format conversion for Smart Imaging capabilities. When `auto-format` is `true`, the requested `format` is ignored and a web-optimized format based on image-characteristics, browser capabilities, and [license-entitlement](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dm-prime-ultimate) is selected automatically.

        The default value is `true`, which enables automatic format conversion. This can be disabled by specifying `auto-format` as `false`, in which case the requested output-format will be returned.

        For example, 
        - When `true`, an `avif` output is delivered (if the browser supports `avif` and the license-entitlements allow it), even when the requested format is `jpeg`.
        - When `true`, a `webp` output is delivered if the browser doesn't support `avif`, but does support `webp`, even when the requested format is `jpeg`.
        - When `true`, a `jpeg` output is delivered if the browser doesn't support `avif` or `webp` and the image doesn't have an alpha channel (transparency), even when the requested format is `avif`.
        - When `false`, a `jpeg` output is delivered (irrespective of the browser capabilities and license-entitlements) when the requested format is `jpeg`.

        Examples:
        - `auto-format=true` - Enable browser format conversion (default)
        - `auto-format=false` - Disable browser format conversion
      schema:
        type: boolean
    UnsharpMask:
      in: query
      name: unsharp-mask
      description: |
        Applies an <a href="https://en.wikipedia.org/wiki/Unsharp_masking">Unsharp Masking</a> filter on the output image to produce a sharpening effect. The effect can be tuned for intensity, radius (measured in pixels), and a threshold of contrast (beyond which the effect is ignored). This modifier uses the same options as Photoshop's "Unsharp Mask" filter. 

        This operation accepts following parameters in the value:
        | Parameter | Description |
        | --- | --- |
        |`amount` (Mandatory)| Filter strength factor (real `0`-`500`).|
        |`radius` (Mandatory)| Filter kernel radius in pixels (real `0`-`1000`).|
        |`threshold` (Optional, default: `0`)| Filter threshold level (int `0`-`255`).|
        |`monochrome` (Optional, default: `false`)| If `true`, only applies to the image brightness (intensity). If `false`, applies to all color components separately.| 

        Examples without layer:
        - `unsharp-mask=100,10` - apply basic unsharp mask operation to the output image
        - `unsharp-mask=100,10` - apply basic unsharp mask operation to the output image
        - `unsharp-mask=100,10,10,true` - apply the unsharp unsharp mask operation to the output image

        Examples when used with a layer named `layerName`:
        - `unsharp-mask[layerName]=100,10` - apply basic unsharp mask operation to the layer
        - `unsharp-mask[layerName]=100,10` - apply basic unsharp mask operation to the layer
        - `unsharp-mask[layerName]=100,10,10,true` - apply the unsharp unsharp mask operation to `brightness` component of the image
          
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: object
                properties:
                  amount:
                    type: number
                    minimum: 0
                    maximum: 500
                    example: 10
                  radius:
                    type: number
                    minimum: 0
                    maximum: 1000
                    example: 10
                  threshold:
                    type: integer
                    minimum: 0
                    maximum: 255
                    example: 128
                  monochrome:
                    type: boolean
                    example: false
                required:
                  - amount
                  - radius
          - type: object
            properties:
              amount:
                type: number
                minimum: 0
                maximum: 500
                example: 10
              radius:
                type: number
                minimum: 0
                maximum: 1000
                example: 10
              threshold:
                type: integer
                minimum: 0
                maximum: 255
                example: 128
              monochrome:
                type: boolean
                example: false
            required:
              - amount
              - radius
    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'
    Flip:
      name: flip
      in: query
      description: |
        Flips (mirrors) the image or a specific layer horizontally, vertically, or both. This operation is useful for adjusting the orientation of content within layers.

        Supported values:
        - `h` - Horizontal flip (left-to-right mirror)
        - `v` - Vertical flip (top-to-bottom mirror)
        - `hv` - Both horizontal and vertical flip

        Examples without layer:
        - `flip=h` - Flip the final output image horizontally
        - `flip=v` - Flip the final output image vertically
        - `flip=hv` - Flip the final output image both horizontally and vertically

        Examples when used with a layer named `layerName`:
        - `flip[layerName]=h` - Flip a specific layer horizontally
        - `flip[layerName]=v` - Flip a specific layer vertically
        - `flip[layerName]=hv` - Flip a specific layer both horizontally and vertically

        Only one of `flip` or `flip[layerName]` should be used at a time.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: string
                enum:
                  - h
                  - v
                  - hv
          - type: string
            enum:
              - h
              - v
              - hv
    Rotate:
      name: rotate
      in: query
      description: |
        Rotates the image or a specific layer by a fixed angle in clockwise direction. The rotation is performed around the center point of the image or layer.

        Rotation angle must be a multiple of 90 degrees and can be either of '90', '180', or '270' degrees clockwise.

        Examples without layer:
        - `rotate=90` - Rotate final output image 90 degrees clockwise
        - `rotate=180` - Rotate final output image 180 degrees
        - `rotate=270` - Rotate final output image 270 degrees clockwise

        Examples when used with a layer named `layerName`:
        - `rotate[layerName]=90` - Rotate specific layer 90 degrees clockwise
        - `rotate[layerName]=180` - Rotate specific layer 180 degrees
        - `rotate[layerName]=270` - Rotate specific layer 270 degrees clockwise

        Only one of `rotate` or `rotate[layerName]` should be used at a time.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: integer
                enum:
                  - 90
                  - 180
                  - 270
          - type: integer
            enum:
              - 90
              - 180
              - 270
    Fallback:
      in: query
      name: fallback
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Specifies the fallback image to be used when the requested image cannot be found. This is useful for substituting missing images with default images.

        If the original image does not exist and no fallback is specified, an error is returned.

        **Important:** If the fallback image itself does not exist, an error is returned.

        Examples without layer:
        - `fallback=urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75` - Use a specific image as fallback when the requested image is not found

        _NOTE_: When a fallback image is used, it replaces the missing image while maintaining the original request's attributes for the layer.
      schema:
        type: string
        description: Asset ID of the image to be used as fallback when the requested image cannot be found
    Extend:
      in: query
      name: extend
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Adds additional pixels around a layer (e.g., adding a border) or makes the layer smaller by clipping-off pixels. 
        The extend operation is applied to the output image or layer after other modifiers have been applied.

        The default value is `0,0,0,0`, which means no change to the layer rectangle.

        The extended area is filled with `background-color`, or if not specified, remains transparent.

        Can be specified as:
        - Four comma-separated values specifying the number of pixels to add to (positive values) or remove from (negative values) the left, top, right, and bottom edge of the layer rectangle
        - Four comma-separated values followed by 'p' for relative (percent) dimensions relative to the original layer rectangle size

        Examples without layer:
        - `extend=5,5,5,5` - Add 5 pixels margin to all sides
        - `extend=0,30,0,0` - Add 30 pixels margin to top only
        - `extend=-10,-10,-10,-10` - Cut off 10 pixels from all sides
        - `extend=10p,10p,10p,10p` - Add 10% margin to all sides (relative)

        Examples when used with a layer named `layerName`:
        - `extend[layerName]=5,5,5,5` - Add 5 pixels margin to specific layer on all sides
        - `extend[layerName]=10,0,10,0` - Add 10 pixels margin to left and right of specific layer
        - `extend[layerName]=-5,0,-5,0` - Cut off 5 pixels from left and right of specific layer
        - `extend[layerName]=20p,30p,80p,90p` - Apply relative margins to specific layer
      explode: true
      style: deepObject
      schema:
        oneOf:
          - $ref: '#/components/schemas/FourTuple'
          - $ref: '#/components/schemas/FourTupleRelative'
          - type: object
            properties:
              layerName:
                oneOf:
                  - $ref: '#/components/schemas/FourTuple'
                  - $ref: '#/components/schemas/FourTupleRelative'
    ClipPathNames:
      in: query
      name: clip-path-names
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Specifies one or more clipping paths to be applied to the `base` layer (learn more about `base` layer <a href="#operation/getAssetSeoFormat!in=query&path=layers&t=request">here</a>) or the selected layer, with optional inversion.

        A clipping path is a vector path or shape used to isolate a portion of an image. Some image formats (such as TIFFs, PSDs, etc.) can embed clipping paths within the image-binary and identify them by names (ASCII strings). This modifier allows selection of named clipping paths as embedded in the image and applies them to the specified layer.

        _Normal vs Inverted Clipping:_
        - **Normal clipping**: Any parts of the layer that fall outside the area defined by the clipping path are rendered transparent
        - **Inverted clipping**: Any parts of the layer that fall within the area defined by the clipping path are rendered transparent (prefix path name with `~`)

        More than one clipping path name (separated by `,`) can be specified. When multiple clipping paths are specified, each path is processed with its specified behavior (normal or inverted), and the results are combined to determine the final clipping effect on the layer.

        Any clipping path names not found in the image are ignored when generating final output. If the intersection of selected clipping paths is an empty path, then the complete modifier is ignored.

        Examples:
        - `clip-path-names=path1` - Apply normal clipping with path "path1" on the `base` layer
        - `clip-path-names=~path1` - Apply inverted clipping with path "path1" (makes area inside path transparent) on the `base` layer
        - `clip-path-names[layerName]=path1,~path2,path3` - Apply normal clipping for "path1" and "path3", inverted clipping for "path2"
        - `clip-path-names[layerName]=~path1,~path2` - Apply inverted clipping for intersection of "path1" and "path2"
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: string
            pattern: ^~?[a-zA-Z0-9_-]+(?:,~?[a-zA-Z0-9_-]+)*$
            description: Comma-separated list of clipping path names for the base layer (ASCII only). Prefix with ~ to invert the clipping behavior for that path.
          - type: object
            properties:
              layerName:
                type: string
                pattern: ^~?[a-zA-Z0-9_-]+(?:,~?[a-zA-Z0-9_-]+)*$
                description: Comma-separated list of clipping path names for specific layers (ASCII only). Prefix with ~ to invert the clipping behavior for that path.
    Transparency:
      in: query
      name: transparency
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Allows increasing or decreasing the transparency of the output image.

        Examples without layer:
        - `transparency=50` - Set the transparency to 50%

        Examples when used with a layer named `layerName`:
        - `transparency[layerName]=50` - Set the transparency of specific layer to 50%
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: integer
            minimum: 0
            maximum: 100
          - type: object
            properties:
              layerName:
                type: integer
                minimum: 0
                maximum: 100
    HideLayer:
      in: query
      name: hide-layer
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Controls the visibility of a layer without modifying the request URL structure. This is useful for:
        - **Conditional content delivery** - Show/hide layers based on user preferences, device capabilities, etc.
        - **Preset-based workflows** - Use a single URL template with multiple layers and programmatically control which layers are visible

        Examples:
        - `hide-layer[layerName]=false` - The layer will be rendered normally (this is the default behaviour when `hide-layer[layerName]`modifier isn't specified)
        - `hide-layer[layerName]=true` - Hide the specified layer if previously defined (layer will not be rendered). Specifying a `layerName` that doesn't exist makes this modifier a no-op.
      explode: true
      style: deepObject
      schema:
        type: object
        properties:
          layerName:
            type: boolean
        description: Set to true to hide the layer, false to show it
    InvertColor:
      in: query
      name: invert-color
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Inverts each color component for a negative image effect.

        Examples without layer:
        - `invert-color=true` - Invert the colors of the final output image.


        Examples when used with a layer named `layerName`:
        - `invert-color[layerName]=true` -  Invert the colors of the layer.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: boolean
          - type: boolean
    Colorize:
      in: query
      name: colorize
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Colorizes the image data while preserving shadows and highlights.

        Colorize accepts the following parameter values:

        | Parameter | Description |
        | --- | --- |
        | `color` (Mandatory)| Replacement RGB color value. |
        | `autobrightness`/`noautobrightness` (Optional, default `autobrightness`)| Enable/Disable automatic brightness compensation. |
        | `contrast` (Optional, default `contrast`)| Adjusts the contrast level. |

        The second parameter specifies whether the brightness of the source image should be adjusted before colorizing. Specify `noautobrightness` to disable the automatic brightness compensation or `autobrightness` to adjust the brightness automatically so that the median value is at 50% intensity.

        Set the contrast value to `0` to preserve the contrast range of the input image, or specify a desired contrast range with a value greater than 0. A value of `100` maximizes the contrast. Typical values might be between `30` and `70`.
          
        The colorizing algorithm uses only the luminance information in the image data. This conversion to grayscale is simple and not color-managed. `colorize` always outputs RGB data, even if the input is grayscale or CMYK

        Properties:
        - The contrast value is ignored if brightness compensation is turned off.
        - The color-value specified in RGB color parameter is automatically converted to as appropriate to source image's or layer's pixel type before application.
        - CMYK images are converted to RGB before the operation is applied.
          
        Colorization is disabled by default.

        Examples without layer:
        - `colorize=a0b0c0,autobrightness,50` - Colorize the image with a blue tint.

        Examples when used with a layer named `layerName`:
        - `colorize[layerName]=a0b0c0,autobrightness,50` - Colorize the layer with a blue tint.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: object
                properties:
                  color:
                    $ref: '#/components/schemas/RGBColor'
                  brightness:
                    type: string
                    enum:
                      - noautobrightness
                      - autobrightness
                  contrast:
                    type: integer
                    minimum: 0
                    maximum: 100
                required:
                  - color
          - type: object
            properties:
              color:
                $ref: '#/components/schemas/RGBColor'
              brightness:
                type: string
                enum:
                  - noautobrightness
                  - autobrightness
              contrast:
                type: integer
                minimum: 0
                maximum: 100
            required:
              - color
    Brightness:
      in: query
      name: brightness
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Decreases or increases the image brightness. The adjustment range is from -100 to +100, where -100 is the darkest and +100 is the brightest.

        The default value is 0, which means no change in brightness.

        Examples without layer:
        - `brightness=10` - Increase brightness by 10 units
        - `brightness=-10` - Decrease brightness by 10 units

        Examples when used with a layer named `layerName`:
        - `brightness[layerName]=10` - Increase brightness of specific layer by 10 units
        - `brightness[layerName]=-10` - Decrease brightness of specific layer by 10 units

        Only one of `brightness` or `brightness[layerName]` should be used at a time.
      style: deepObject
      schema:
        oneOf:
          - type: integer
            minimum: -100
            maximum: 100
          - type: object
            properties:
              layerName:
                type: integer
                minimum: -100
                maximum: 100
    Contrast:
      in: query
      name: contrast
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Adjusts the image contrast by increasing the brightness of pixels with more than 50% brightness, and reducing the brightness of pixels with less than 50% brightness. The adjustment range is from -100 to +100, where -100 provides the lowest contrast and +100 provides the highest contrast.

        The default value is 0, which means no change in contrast.

        Examples without layer:
        - `contrast=50` - Increase contrast by 50 units
        - `contrast=-12` - Decrease contrast by 12 units

        Examples when used with a layer named `layerName`:
        - `contrast[layerName]=50` - Increase contrast of specific layer by 50 units
        - `contrast[layerName]=-12` - Decrease contrast of specific layer by 12 units

        Only one of `contrast` or `contrast[layerName]` should be used at a time.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: integer
            minimum: -100
            maximum: 100
          - type: object
            properties:
              layerName:
                type: integer
                minimum: -100
                maximum: 100
    Mask:
      in: query
      name: mask
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Specifies how certain operations will behave if the image has a mask. This modifier allows specifying whether the operations that take `mask` into consideration are applied within the masked region (normal) or outside (inverted).

        Following modifiers can alter their output when applied alongside `mask`:
        - `colorize`
        - `hue`
        - `saturation`
        - `brightness`
        - `contrast`
        - `blur`
        - `sharpen`
        - `noise`
        - `invert-color`

        If no value is provided, `mask` modifier is off.

        The following table illustrates the effect depending on availability and type of the mask (alpha channel) associated with the source image:

        **Mask Types:**
        - **Unassociated mask (straight alpha):** RGB values are stored independently of transparency. Full color information is retained regardless of transparency level.
        - **Associated mask (pre-multiplied alpha):** RGB values are multiplied by alpha. Fully transparent areas lose their original color data.

        |Value|Unassociated mask|Associated mask|
        |---|---|---|
        |normal|Foreground area of image|Foreground area of image or layer|
        |inverted|Background area of image|Background area of image or layer filled with solid black|

        Examples without layer:
        - `mask=normal` - Apply normal mask behavior
        - `mask=inverted` - Invert the mask to affect background area

        Examples when used with a layer named `layerName`:
        - `mask[layerName]=normal` - Apply normal mask behavior to specific layer
        - `mask[layerName]=inverted` - Invert mask for specific layer to colorize background

        Only one of `mask` or `mask[layerName]` should be used at a time.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: string
            enum:
              - normal
              - inverted
          - type: object
            properties:
              layerName:
                type: string
                enum:
                  - normal
                  - inverted
    Saturation:
      in: query
      name: saturation
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Changes the saturation of each visible pixel of the layer or output image. This allows for adjusting the color intensity of the image.

        The saturation value can be an integer between -100 and +100:
        - Positive values increase color saturation
        - Negative values decrease color saturation
        - -100 fully desaturates the image (converts to grayscale)
        - 0 leaves the saturation unchanged


        Examples without layer:
        - `saturation=50` - Increase saturation of the output image by 50%
        - `saturation=-60` - Decrease saturation of the output image by 60%
        - `saturation=45` - Increase saturation for a high-key appearance
        - `saturation=-35` - Decrease saturation for a more muted look
        - `saturation=0` - Keep original saturation (no change)

        Examples when used with a layer named `layerName`:
        - `saturation[layerName]=50` - Increase saturation of the specified layer by 50%
        - `saturation[layerName]=-100` - Fully desaturate the specified layer (convert to grayscale)
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: integer
                minimum: -100
                maximum: 100
                description: Saturation adjustment value for the specified layer (-100 to +100)
                example: 50
          - type: integer
            minimum: -100
            maximum: 100
            description: Saturation adjustment value for the output image (-100 to +100)
            example: 50
    Hue:
      in: query
      name: hue
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Shifts the hue of each visible pixel of the layer or output image by the specified amount.

        It takes value adjustment in degrees (-180…+180 int).

        Properties:
        Applies to the current layer or to the output image. CMYK images or layers are converted to RGB before the operation is applied.

        Examples without layer:
        - `hue=50`

        Examples when used with a layer named `layerName`:
        - `hue[layerName]=50`
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: integer
                minimum: -180
                maximum: 180
          - type: integer
            minimum: -180
            maximum: 180
    Noise:
      in: query
      name: noise
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Adds random noise to the foreground image data.

        Default value is 0 (no noise applied).

        This operation takes following parameter values:
        |Parameter|Description|
        |---|---|
        |`amount` (Mandatory)|amount of noise in percent (0-100 int).|
        |`type` (Optional)|type of noise (uniform, gaussian). Default type: `uniform`|
        |`monochrome` (Optional)|monochromaticity of the added noise (`false` for color noise, `true` for monochrome). Default monochrome: `false`|

        Examples without layer:
        - `noise=10` - Add 10% uniform noise to the image
        - `noise=10,gaussian` - Add 10% gaussian noise to the image
        - `noise=10,uniform,true` - Add 10% monochrome uniform noise to the image

        Examples when used with a layer named `layerName`:
        - `noise[layerName]=10` - Add 10% uniform noise to the specified layer
        - `noise[layerName]=10,gaussian` - Add 10% gaussian noise to the specified layer
        - `noise[layerName]=10,uniform,true` - Add 10% monochrome uniform noise to the specified layer

        _Note_: The `monochrome` parameter has no effect for grayscale outputs since color noise is not possible to add.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: string
                pattern: ^(\d{1,2}|100)(,(uniform|gaussian))?(,(true|false))?$
                description: Noise configuration for the specified layer in format "val[,type[,monochrome]]"
                example: 10,gaussian,true
          - type: string
            pattern: ^(\d{1,2}|100)(,(uniform|gaussian))?(,(true|false))?$
            description: Noise configuration for the output image in format "val[,type[,monochrome]]"
            example: 10,gaussian,true
    BlendingMode:
      in: query
      name: blending-mode
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Specifies the type of blending when there are multiple layers. Simulates commonly used blending modes available in Photoshop.

        Value can be one of
        - `dissolve`
        - `lighten`
        - `darken`
        - `multiply`
        - `screen`

        Examples:
        - `blending-mode[layerName]=multiply` - Apply multiply blending mode to specific layer
        - `blending-mode[layerName]=lighten` - Apply lighten blending mode to specific layer
        - `blending-mode[layerName]=screen` - Apply screen blending mode to specific layer
      explode: true
      style: deepObject
      schema:
        type: object
        properties:
          layerName:
            type: string
            enum:
              - dissolve
              - lighten
              - darken
              - multiply
              - screen
    Erode:
      in: query
      name: erode
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Applies [morphological erosion](https://en.wikipedia.org/wiki/Erosion_(morphology)) operation to pixels in the image. The value is in pixels relative to the output image.

        This modifier performs an erosion (contraction) of the features in the image. See `dilate` modifier for a dilation (expansion) of image features.

        _NOTE_: Specifying `erode` and `dilate` at the same time for a given source or layer isn't supported and can result in undefined behaviour.
        Examples without layer:
        - `erode=3` - Contract image features by 3 pixels
        - `erode=10` - Contract image features by 10 pixels
        Examples when used with a layer named `layerName`:
        - `erode[layerName]=5` - Contract features in specific layer by 5 pixels
        - `erode[layerName]=8` - Contract features in specific layer by 8 pixels
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: integer
                minimum: 1
                maximum: 100
                example: 5
                description: Positive values for erosion (contraction) in pixels
          - type: integer
            minimum: 1
            maximum: 100
            example: 5
            description: Positive values for erosion (contraction) in pixels
    Dilate:
      in: query
      name: dilate
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Applies [morphological dilation](https://en.wikipedia.org/wiki/Dilation_(morphology)) operation to pixels in the image. The value is in pixels relative to the output image.

        This modifier performs a dilation (expansion) of the features in the image. See `erode` modifier for an erosion (contraction) of image features.

        _NOTE:_ Specifying `dilate` and `erode` at the same time for a given source or layer isn't supported and can result in undefined behaviour.

        Examples without layer:
        - `dilate=3` - Expand image features by 3 pixels
        - `dilate=10` - Expand image features by 10 pixels
        Examples when used with a layer named `layerName`:
        - `dilate[layerName]=5` - Expand features in specific layer by 5 pixels
        - `dilate[layerName]=8` - Expand features in specific layer by 8 pixels
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: integer
                minimum: 1
                maximum: 100
                example: 5
                description: Positive values for dilation (expansion) in pixels
          - type: integer
            minimum: 1
            maximum: 100
            example: 5
            description: Positive values for dilation (expansion) in pixels
    Position:
      in: query
      name: position
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Specifies the position of the center of a given layer relative to center of the base layer.

        The base layer is the asset specified by `{assetId}` in the API path `/adobe/assets/{assetId}/as/seoname.<extn>` - this is the primary layer onto which all other layers are positioned.

        Can be specified as pixel offset or normalized offset from this layer's center to the base layer's center.

        Can be specified as:
        - Pixel offset from this layer's center to the base layer's center
        - Normalized offset from this layer's center to the base layer's center using 'p' suffix (relative coordinates)

        Positive values move the layer towards the right/bottom, and negative towards the left/top. With relative coordinates, 50p,50p moves the layer by half the base layer width and height down and right.

        Examples:
        - `position[layerName]=100,100` - Position layer 100 pixels right and down from base layer
        - `position[layerName]=50p,50p` - Position layer by half the base layer width and height down and right
        - `position[layerName]=-50,25` - Position layer 50 pixels left and 25 pixels down from base layer
        - `position[layerName]=0p,0p` - Position layer center at same location as base layer center (default)
      explode: true
      style: deepObject
      schema:
        type: object
        properties:
          layerName:
            oneOf:
              - $ref: '#/components/schemas/TwoTuple'
              - $ref: '#/components/schemas/TwoTupleRelative'
    Source:
      in: query
      name: source
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Specifies the assetId to be used as the source for a specific layer. The layer name is case-sensitive.

        Can only be used with a layer.

        Examples:
        - `source[top]=urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75` - Set the source for layer "top" to the specified assetId for this layers=top should exist in the query parameters
        - `source[background]=urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75` - Set the source for layer "background" to the specified assetId for this layers=background should exist in the query parameters

        _NOTE_: This can be only used with `layers` modifier.
      explode: true
      style: deepObject
      schema:
        type: object
        properties:
          layerName:
            type: string
            description: Asset ID to be used as the source for the layer
    CropNames:
      in: query
      name: crop-names
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Crop to the bounding box of one or more embedded named paths in the source image. This cropping, in turn, changes the size of the image.

        Key features:
        - (only) ASCII path names are supported
        - <strong>Intersection operation:</strong> When multiple crop names are specified, the image is cropped to the intersection of all specified path bounding boxes simultaneously
        - The operation changes the actual size of the image


        Examples:
        - `crop-names=border-with-curved-corners` - Crop the final output image to the bounding box of the path named "border-with-curved-corners"
        - `crop-names=border1,border2` - Crop to the intersection of the bounding boxes of "border1" and "border2"
        - `crop-names[layerName]=border-with-curved-corners` - Crop the specified layer to the bounding box of the path named "border-with-curved-corners"
        - `crop-names[layerName]=border1,border2` - Crop the layer to the intersection of the bounding boxes of "border1" and "border2"
        - `crop-names[layerName]=custom-path` - Crop to the bounding box of a custom path named "custom-path"

        Note: This operation is ignored if:
        - No path with the specified name is found in the layer source image
        - The intersection of multiple paths results in an empty region
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: string
                pattern: ^[a-zA-Z0-9_-]+(?:,[a-zA-Z0-9_-]+)*$
                description: Comma-separated list of path names to use for intersection cropping
          - type: string
            pattern: ^[a-zA-Z0-9_-]+(?:,[a-zA-Z0-9_-]+)*$
            description: Comma-separated list of path names to use for intersection cropping
    PrintResolution:
      in: query
      name: print-resolution
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="powderblue">
              <strong>This modifier is currently in Limited Availability.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/assets/dynamicmedia/dynamic-media-open-apis/dynamic-media-open-apis-faqs#use-limited-availability-modifiers">here</a> to learn how to request access.
            </td>
          </tr>
        </tbody></table>

        Defines the print resolution value of the output image.

        Setting the print resolution does not change the pixel size of the output image.

        Examples:
        - `print-resolution=300` - Set the print resolution to 300 dpi
      explode: false
      schema:
        description: Integer number, larger than 0. Expressed in dots per inch.
        type: integer
        minimum: 1
    PlayerMode:
      name: mode
      in: query
      description: |
        Specifies the delivery mode for the video player.

        When set to `smartcrop`, applies intelligent cropping to automatically identify and preserve visually most important areas of the video. This operation uses AI-powered content-aware cropping to ensure that key elements like faces, text, or focal points are retained in the output.

        The smartcrop mode expects that smartcrops exist for the video asset. If smartcrops do not exist for the video asset, the video will be delivered without any cropping.

        If the mode parameter is not specified, the video will be delivered in its original format.
      style: form
      schema:
        type: string
        enum:
          - smartcrop
      examples:
        smartcropMode:
          value: smartcrop
          summary: Enable smart cropping for the video
    Language:
      name: language
      in: query
      description: |
        Specifies the language of the audio and text tracks to be delivered.
        The language is specified as a three-letter ISO 639-3 code.

        The assumption is that the video asset has multiple audio and text tracks, and the specified language track is present in the asset.
        If the specified language tracks are not available, the video will be delivered with the default language tracks.
      style: form
      schema:
        type: string
        pattern: ^[a-z]{3}$
      examples:
        english:
          value: eng
          summary: English language
          description: Deliver the audio and text tracks in English.
        spanish:
          value: spa
          summary: Spanish language
          description: Deliver the audio and text tracks in Spanish.
        french:
          value: fra
          summary: French language
          description: Deliver the audio and text tracks in French.
    PlayerViewerPreset:
      name: viewerPreset
      in: query
      description: |
        Name of the viewer preset applied when delivering the player HTML.
        This value is a reference only; the player loads the preset **userdata JSON** from
        `GET /adobe/assets/viewerPresets/{viewerPresetName}` using the same preset name.

        Example play URL: `?viewerPreset=bluethemed_autoplay_preset`
      style: form
      schema:
        type: string
        minLength: 1
        pattern: ^[.\w-]+$
      examples:
        bluethemedAutoplayPreset:
          summary: Named viewer preset
          value: bluethemed_autoplay_preset
        letterboxedPreset:
          summary: Letterboxed playback preset
          value: letterboxed
    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
    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
    SubjectTokenParam:
      name: X-Adobe-Subject-Token
      in: header
      required: false
      description: |
        Optional opaque token containing user/subject attributes used for user authorization.
      schema:
        $ref: '#/components/schemas/SubjectToken'
    X-Adobe-Accept-Experimental:
      name: X-Adobe-Accept-Experimental
      description: |
        The `X-Adobe-Accept-Experimental` request header is required when a client wants to opt-in into using an experimental
        API endpoint. Not providing this header to an endpoint that requires it will make the server answer with a 400 status
        code.
      in: header
      required: true
      schema:
        type: integer
        enum:
          - 1
    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.
    LinkId:
      in: path
      name: linkId
      description: ID of the link to access
      required: true
      schema:
        type: string
      examples:
        sample-link-id:
          value: 6ba7b8109dad11d180b40002a5d5c51b62xsa4uT0qO_hvyym329pOYFasfPffVM9E-IPgs9KM
    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
  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
    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
    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).
  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.
    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:
      description: Not Modified
      content: {}
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Last-Modified:
          $ref: '#/components/headers/Last-Modified'
    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.
    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.
    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.
    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.
    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.
    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.
    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.
