openapi: 3.0.3
info:
  title: Dynamic Media with OpenAPI
  version: 2026.07-experimental
servers:
  - url: https://{bucket}.adobeaemcloud.com/adobe/experimental/advancemodifiers-expires-20251201/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'
        - $ref: '#/components/parameters/Align'
        - $ref: '#/components/parameters/Anchor'
        - $ref: '#/components/parameters/ColorBalance'
        - $ref: '#/components/parameters/ColorSpace'
        - $ref: '#/components/parameters/DilateMask'
        - $ref: '#/components/parameters/IccEmbed'
        - $ref: '#/components/parameters/PathEmbed'
        - $ref: '#/components/parameters/Perspective'
        - $ref: '#/components/parameters/Origin'
        - $ref: '#/components/parameters/Region'
        - $ref: '#/components/parameters/Rectangle'
        - $ref: '#/components/parameters/ResamplingMode'
        - $ref: '#/components/parameters/Scale'
        - $ref: '#/components/parameters/XmpEmbed'
        - $ref: '#/components/parameters/Quantize'
      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.
      operationId: videoPlayerDelivery
      security:
        - {}
        - Bearer: []
      tags:
        - Videos
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
      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, providing details such as dimensions.

        **NOTE**: This API is used by Adobe's Content Hub application. 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. 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
      operationId: search
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Assets
      description: Search Activated Assets
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchOperation'
      responses:
        '200':
          description: Asset Search Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchOperationResponse'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /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: []
      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'
      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'
      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'
      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'
      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'
      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.

        **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'
      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'
    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.

        **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'
      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'
    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'
      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'
  /linkshares:
    x-adobe-experimental: true
    post:
      summary: Create Link
      description: |
        This endpoint allows users to create new link for given assets or collections, with the provided details.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: createLink
      tags:
        - Link Shares
      security:
        - Bearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/LinkShareMetadataRequest'
                - $ref: '#/components/schemas/ShareItem'
      responses:
        '200':
          description: Returns shareable links for the requested assets or collections, along with link metadata
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LinkShareMetadataResponse'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
      x-adobe-experimental: true
    get:
      summary: List Links
      description: |
        Retrieves a list of non-expired shared links.

        This endpoint allows users to retrieve a list of shared links that are currently non-expired and accessible.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: listLinks
      tags:
        - Link Shares
      security:
        - Bearer: []
      responses:
        '200':
          description: Response list of non-expired shared links
          content:
            application/json:
              schema:
                type: object
                properties:
                  links:
                    type: array
                    items:
                      $ref: '#/components/schemas/LinkShareMetadataResponse'
                    minLength: 1
        '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'
      x-adobe-experimental: true
  /linkshares/{linkId}:
    x-adobe-experimental: true
    get:
      summary: Link Details
      description: |
        Get detailed information about a shared link, including associated assets or collections URLs.

        This endpoint allows users to fetch information about a specific shared link by providing its unique identifier.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: getLink
      tags:
        - Link Shares
      security:
        - {}
        - Bearer: []
      parameters:
        - $ref: '#/components/parameters/LinkId'
      responses:
        '200':
          description: Response of shared link containing shared assets or collections
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/LinkShareMetadataResponse'
                  - $ref: '#/components/schemas/ShareItemsResponse'
        '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'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
      x-adobe-experimental: true
    delete:
      summary: Delete Link
      description: |
        This endpoint allows users to delete a shared link by providing its unique identifier.

        **NOTE**: This API is used by Adobe's Content Hub application. Using this API directly isn’t covered in Adobe Support agreements.
      operationId: deleteLink
      tags:
        - Link Shares
      security:
        - Bearer: []
      parameters:
        - $ref: '#/components/parameters/LinkId'
      responses:
        '204':
          description: Link 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'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
      x-adobe-experimental: true
  /search/token:
    x-adobe-experimental: true
    post:
      summary: Create a token for asset search, analytics, and settings.
      description: |
        Create short-lived token with access restrictions for searching assets and performing operations on specified indexes.
      operationId: createToken
      tags:
        - Assets
      security:
        - Bearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/SearchTokenRequest'
      responses:
        '200':
          description: The API returns a token along with its validity.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchTokenResponse'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
      x-adobe-experimental: true
  /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'
  /conversation:
    post:
      x-conversation: true
      summary: Conversations API for assets
      description: |
        Accepts a natural language input and returns a response. Intended for conversational integrations.
      operationId: assetsConversation
      tags:
        - Assets
      security:
        - Bearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConversationRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConversationResponse'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '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:
                      type: object
                      properties:
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                    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
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
  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| `contain` (default) | 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| `constrain` | 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| `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:
                      - contain
                      - constrain
                      - crop
                required:
                  - mode
          - type: object
            properties:
              mode:
                type: string
                enum:
                  - contain
                  - constrain
                  - 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
    Align:
      in: query
      name: align
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Aligns the image (possibly after scaling, if `scale` is specified as well) within the view rectangle defined by `width` and `height`.

        Specify `align=-1,-1` to align the top-left of the image with the top-left of the view, specify `align=1,1` to align the bottom, right of the image with the bottom right of the view. Any area of the view which is not covered by image data is filled with `background-color`.

        **Important**: Ignored if only one of `width` and `height` is specified.

        **Examples:**
        - `align=0,0` - Align the center of the image with the center of the view rectangle
        - `align=-1,-1` - Align the top-left corner
        - `align[layerName]=1,1` - Align the bottom-right corner for a specific layer
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: array
                items:
                  type: integer
                  minimum: -1
                  maximum: 1
                minItems: 2
                maxItems: 2
          - type: array
            items:
              type: integer
            minItems: 2
            maxItems: 2
    Anchor:
      in: query
      name: anchor
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Defines the anchor point of the image before applying transforms (`crop`, `scale`, `rotate`, `flip`). Also serves as the center-of-rotation for `rotate`.

        The anchor point is transformed with the image and becomes the layer origin point (unless `origin` is specified as well, in which case `anchor` is used only as the center-of-rotation for `rotate`).

        Default value: the center of the image rectangle.

        **Anchor Point Options:**
        - Two comma separated values specifying the absolute anchor point (x, y)
          When absolute values are specified, they are interpreted in source coordinates.  
          Additionally, the values MUST result in a valid crop region, else the operation will be ignored
        - Two comma separated values, followed by `p`: similar to above, but specify a relative (percent) dimension

        Use with layerName to apply the transform on a specific layer. Not specifying layerName (eg `anchor=0,0`) will apply the transform on the base layer. The base layer is the asset specified by `{assetId}` in the API path `/adobe/assets/{assetId}/as/seoname.<extn>`.

        **Examples:**
        - `anchor=50p,50p` - Anchor the image at the center of the image rectangle (50% from top-left)
        - `anchor=-50p,-50p` - Anchor the image at the top-left corner
        - `anchor[layerName]=100,100` - Anchor a specific layer at absolute coordinates 100,100
      style: deepObject
      explode: true
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                oneOf:
                  - $ref: '#/components/schemas/TwoTuple'
                  - $ref: '#/components/schemas/TwoTupleRelative'
          - $ref: '#/components/schemas/TwoTuple'
          - $ref: '#/components/schemas/TwoTupleRelative'
    ColorBalance:
      in: query
      name: color-balance
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Adjusts the value of each RGB color component separately as `colorbalance=rAdj,gAdj,bAdj` where rAdj, gAdj, bAdj are integers between -100 and 100.

        Gray and CMYK input image data is converted to RGB using naive conversion which is not accurate when color management is enabled.

        **Examples:**
        - `color-balance=10,20,30` - Increase red by 10%, green by 20%, and blue by 30%
        - `color-balance=-20,0,15` - Decrease red by 20%, keep green unchanged, increase blue by 15%
        - `color-balance[layerName]=5,-10,25` - Apply color balance adjustments to a specific layer
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: array
                minItems: 3
                maxItems: 3
                items:
                  type: integer
                  minimum: -100
                  maximum: 100
          - type: array
            minItems: 3
            maxItems: 3
            items:
              type: integer
              minimum: -100
              maximum: 100
    ColorSpace:
      in: query
      name: color-space
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Specifies the output color space for the image. This parameter can be used to effect output color space conversion.

        Supported color spaces:
        - `rgb` - Return RGB image data
        - `grayscale` - Return gray-scale image data
        - `cmyk` - Return CMYK image data

        Note: Color space support may vary by output format.

        Examples:
        - `color-space=rgb` - Return RGB image data
        - `color-space=grayscale` - Return gray-scale image data
        - `color-space[layerName]=cmyk` - Return CMYK image data for a specific layer
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: string
                enum:
                  - rgb
                  - grayscale
                  - cmyk
          - type: string
            enum:
              - rgb
              - grayscale
              - cmyk
    DilateMask:
      in: query
      name: dilate-mask
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Dilate/erode image. Applies a morphological dilate (radius > 0) or erode (radius < 0) to the mask data.

        Dilate/erode radius in pixels where radius is assumed to apply to the full resolution mask and therefore is scaled down for downsampled masks.

        Primarily used to slightly grow or shrink a mask to avoid artifacts around the edge of the mask.

        **Examples:**
        - `dilate-mask=50` - Dilate (grow) the mask by 50 pixels
        - `dilate-mask=-25` - Erode (shrink) the mask by 25 pixels
        - `dilate-mask[layerName]=10` - Dilate a specific layer's mask by 10 pixels
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: integer
                minimum: -100
                maximum: 100
                example: 50
          - type: integer
            minimum: -100
            maximum: 100
            example: 50
    IccEmbed:
      in: query
      name: icc-embed
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Controls whether ICC color profiles should be embedded in the response image. When enabled, either the working ICC color profile or the profile specified with `icc-profile` modifier will be embedded.

        **Important**: Only ICC color profile data from the base layer is processed. ICC profiles from other layer images are ignored.

        **Important Considerations:**
        - The base layer is the asset specified by `{assetId}` in `/adobe/assets/{assetId}/as/seoname.<extn>`
        - The modifier is ignored if:
          - The source image doesn't contain ICC color profile data
          - The output format doesn't support ICC profile embedding
        - When using with `icc-profile` modifier:
          - If `icc-profile` is specified, that profile will be embedded
          - Otherwise, the working ICC color profile will be embedded

        **Examples:**
        - `icc-embed=true` - Include ICC color profile in the response image
        - `icc-embed=false` - Exclude ICC color profile from the response image
        - `icc-embed[layerName]=true` - Include ICC color profile for a specific layer

        Default: `false` (ICC profiles are not embedded)
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: boolean
                example: true
                description: Whether to embed ICC profile for the specified layer
          - type: boolean
            example: true
            description: Whether to embed ICC profile in the response image
    PathEmbed:
      in: query
      name: path-embed
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Controls whether Photoshop paths from the source image should be included in the response image. When enabled, paths are scaled and rotated along with the image data.

        **Important**: Only closed Photoshop paths are supported. Open paths (paths that don't form closed loops) will not be embedded.

        **Important Considerations:**
        - Only paths from the base layer (specified by `{assetId}` in `/adobe/assets/{assetId}/as/seoname.<extn>`) are processed
        - Paths from other layer images are ignored
        - The modifier is ignored if:
          - The base image doesn't contain path data
          - The output format doesn't support path embedding
        - Paths are automatically scaled and rotated to match any image transformations

        **Examples:**
        - `path-embed=true` - Include paths from the base layer source image
        - `path-embed=false` - Exclude paths from the response image
        - `path-embed[layerName]=true` - Include paths for a specific layer

        Default: `false` (paths are not embedded)
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: boolean
                example: true
                description: Whether to embed paths for the specified layer
          - type: boolean
            example: true
            description: Whether to embed paths in the response image
    Perspective:
      in: query
      name: perspective
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Apply a perspective transform to the layer source image so it fills the region specified with the quadrilateral. Other areas of the layer remain transparent.

        **Parameters:**
        1. **Quadrilateral Coordinates** (`quad`):
           - Four pairs of x,y coordinates defining the quadrilateral corners
           - Can use absolute pixel values or percentages (with 'p' suffix)
           - Format: `x1,y1,x2,y2,x3,y3,x4,y4` or `x1p,y1p,x2p,y2p,x3p,y3p,x4p,y4p`

        2. **Resampling Options** (`resOptions`, optional):
           - Controls the resampling algorithm quality/performance trade-off
           - Available options:
             | Option | Description |
             |--------|-------------|
             | R1 | Nearest neighbor (fastest, lowest quality) |
             | R2 | Bilinear (balanced speed/quality) |
             | R3 | Standard super-sampling (highest quality, default) |
             | R3T n | Super-sampling with adjustable jitter (n: 1-200) |

        **Resolution Control:**
        - For image layers: Use `scale` to adjust source resolution
        - For nested requests: Adjust the nested request output size
        - For text layers: Increase text size to improve resolution

        **Examples:**
        - `perspective=0,0,100,0,100,100,0,100` - Map to rectangle using absolute coordinates
        - `perspective=0,0,100,0,100,100,0,100,R2` - Use bilinear resampling
        - `perspective=0p,0p,100p,0p,100p,100p,0p,100p` - Map using relative coordinates
        - `perspective[layerName]=0,0,200,0,200,150,0,150,R3` - Apply to specific layer with high quality

        Default: No perspective transformation is applied.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: object
                properties:
                  quad:
                    oneOf:
                      - $ref: '#/components/schemas/EightTuple'
                      - $ref: '#/components/schemas/EightTupleRelative'
                  resOptions:
                    type: string
                    enum:
                      - R1
                      - R2
                      - R3
                    description: |
                      R1 - Nearest neighbor
                      R2 - Bilinear  
                      R3 - Standard super-sampling (default)
                    example: R3
          - type: object
            properties:
              quad:
                oneOf:
                  - $ref: '#/components/schemas/EightTuple'
                  - $ref: '#/components/schemas/EightTupleRelative'
              resOptions:
                type: string
                enum:
                  - R1
                  - R2
                  - R3
                description: |
                  R1 - Nearest neighbor
                  R2 - Bilinear  
                  R3 - Standard super-sampling (default)
                example: R3
    Origin:
      in: query
      name: origin
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Defines the reference point (origin) for layer positioning. This point serves as the `0,0` coordinate when positioning the layer relative to other layers using the `position` modifier.

        **Important**: The origin coordinates are specified relative to the layer's center using normalized coordinates with 'p' suffix.

        **Coordinate System:**
        - Uses normalized coordinates with 'p' suffix (relative to layer center)
        - Range: -50p to 50p for both x and y coordinates
        - Common reference points:
          | Coordinates | Position |
          |------------|----------|
          | 0p,0p | Center |
          | -50p,-50p | Top-left corner |
          | 50p,-50p | Top-right corner |
          | -50p,50p | Bottom-left corner |
          | 50p,50p | Bottom-right corner |

        **Layer Positioning:**
        - Works in conjunction with the `position` modifier
        - The base layer is the asset specified by `{assetId}` in `/adobe/assets/{assetId}/as/seoname.<extn>`
        - Other layers are positioned relative to the base layer using these reference points

        **Examples:**
        - `origin=0p,0p` - Set origin to center of layer
        - `origin=-50p,-50p` - Set origin to top-left corner
        - `origin=50p,50p` - Set origin to bottom-right corner
        - `origin[layerName]=0p,0p` - Set specific layer's origin to center
        - `origin[layerName]=-50p,-50p` - Set specific layer's origin to top-left
        - `origin[layerName]=50p,50p` - Set specific layer's origin to bottom-right

        Default: `0p,0p` (center of the layer)
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                oneOf:
                  - $ref: '#/components/schemas/TwoTuple'
                  - $ref: '#/components/schemas/TwoTupleRelative'
          - $ref: '#/components/schemas/TwoTuple'
          - $ref: '#/components/schemas/TwoTupleRelative'
    Region:
      in: query
      name: region
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Defines a rectangular region-of-interest (ROI) in the composite image using pixel coordinates. The region is specified using four integers: x, y, width, height, where (x,y) represents the top-left corner of the region.

        **Important**: The `region` modifier is applied BEFORE any final scaling or fitting operations (`scale`, `width`, `height`, `fit`, `rectangle`, or `align`).

        **Parameters:**
        - `x`: Horizontal coordinate of the top-left corner (in pixels)
        - `y`: Vertical coordinate of the top-left corner (in pixels)
        - `width`: Width of the region (in pixels)
        - `height`: Height of the region (in pixels)

        **Common Use Cases:**
        - Extracting specific portions of an image
        - Focusing on particular areas before applying transformations
        - Creating image thumbnails from specific regions

        **Examples:**
        - `region=0,0,100,100` - Select a 100x100 pixel region from top-left corner
        - `region=50,50,200,150` - Select a 200x150 pixel region starting at (50,50)
        - `region[layerName]=10,20,300,250` - Select region for a specific layer

        Default: If not specified, the entire image is used.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                $ref: '#/components/schemas/FourTuple'
          - $ref: '#/components/schemas/FourTuple'
    Rectangle:
      in: query
      name: rectangle
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Disassemble the final view into several strips or tiles, which can be delivered separately and reassembled by the client seamlessly, with no artifacts along the edges.

        **Parameters:**
        1. **Basic Format** (`rectangle=coord_x,coord_y,size_w,size_h`):
           - `coord_x,coord_y`: Pixel offset from top-left corner of the image to the top-left corner of the rectangle
           - `size_w,size_h`: Size of the region in pixels
           - Areas outside the view image are filled with `background-color` or left transparent for formats with alpha channel

        2. **With Scale** (`rectangle=coord_x,coord_y,size_w,size_h,scale`):
           - Same as basic format, plus:
           - `scale`: Scale factor (values < 1.0 reduce resolution, > 1.0 increase resolution)
           - Coordinates are interpreted after scaling is applied

        **Common Use Cases:**
        - Tiled image delivery for large images
        - Extracting specific regions at different resolutions
        - Creating image strips for progressive loading

        **Examples:**
        - `rectangle=0,600,2000,600` - Extract a horizontal strip at y=600 with width=2000 and height=600
        - `rectangle=0,1200,2000,600` - Extract a second strip (for tiled delivery)
        - `rectangle=100,100,500,300,0.5` - Extract region at half resolution (0.5 scale)

        Default: If not specified, the entire image is returned.
      explode: false
      schema:
        type: array
        items:
          type: integer
        minItems: 4
        maxItems: 5
    ResamplingMode:
      in: query
      name: resampling-mode
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Chooses the resampling and/or interpolation algorithm to be used for scaling image data. Also applies to resizing of composite images during the view transform.

        **Important**: The choice of resampling mode can significantly impact both image quality and processing time.

        **Available Modes:**
        | Mode | Description |
        |------|-------------|
        | bilin | Standard bi-linear interpolation. Fastest resampling method; some aliasing artifacts are noticeable. |
        | bicub | Bi-cubic interpolation. More CPU-intensive than bi-linear interpolation, but yields sharper images with less noticeable aliasing artifacts. |
        | sharp2 | Modified Lanczos Window function. Can produce slightly sharper results than bi-cubic at a higher CPU cost. Replaced 'sharp' with lesser likelihood of aliasing artifacts (Moiré). |
        | bisharp | Photoshop default resampler for reducing image size (called "bicubic sharper" in Adobe Photoshop). |

        **Examples:**
        - `resampling-mode=bilin` - Use standard bi-linear interpolation (fastest)
        - `resampling-mode=bicub` - Use bi-cubic interpolation (higher quality)
        - `resampling-mode[layerName]=sharp2` - Use Lanczos window function for a specific layer

        Default: `bicub` if not specified.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: string
                enum:
                  - bilin
                  - bicub
                  - sharp2
                  - bisharp
                example: bicub
                description: Resampling mode for the specified layer
          - type: string
            enum:
              - bilin
              - bicub
              - sharp2
              - bisharp
            example: bicub
            description: Resampling mode for the image
    Scale:
      in: query
      name: scale
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Scales a layer source image by a specified factor relative to its full-resolution size. The scale factor must be greater than 0.0, where values less than 1.0 reduce the size and values greater than 1.0 increase it.

        **Scale Factor Guidelines:**
        - < 1.0: Reduces image size (e.g., 0.5 = 50% of original)
        - = 1.0: Maintains original size
        - \> 1.0: Increases image size (e.g., 2.0 = 200% of original)

        **Common Use Cases:**
        - Resizing images while maintaining aspect ratio
        - Creating thumbnails with consistent scaling
        - Enlarging specific layers for emphasis
        - Adjusting resolution for perspective transformations

        **Examples:**
        - `scale=1.5` - Enlarge the image to 150% of original size
        - `scale=0.5` - Reduce the image to 50% of original size
        - `scale[layerName]=2.0` - Double the size of a specific layer

        Default: `1.0` (original size)
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: number
                minimum: 0
                example: 1.5
                description: Scale factor for the specified layer (> 0.0)
          - type: number
            minimum: 0
            example: 1.5
            default: 1
            description: Scale factor for the image (> 0.0)
    XmpEmbed:
      in: query
      name: xmp-embed
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Controls whether XMP metadata from the source image should be included in the response image. When enabled, preserves important metadata like copyright information, keywords, and other XMP properties.

        **Important**: Only XMP data from the base layer is processed. XMP metadata from other layer images is ignored.

        **Important Considerations:**
        - The base layer is the asset specified by `{assetId}` in `/adobe/assets/{assetId}/as/seoname.<extn>`
        - The modifier is ignored if:
          - The source image doesn't contain XMP data
          - The output format doesn't support XMP embedding
        - XMP metadata is preserved in its original form without modifications

        **Examples:**
        - `xmp-embed=true` - Include XMP metadata in the response image
        - `xmp-embed=false` - Exclude XMP metadata from the response
        - `xmp-embed[layerName]=true` - Include XMP metadata for a specific layer

        Default: `false` (XMP metadata is not embedded)
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: boolean
                example: true
                description: Whether to embed XMP metadata for the specified layer
          - type: boolean
            example: true
            description: Whether to embed XMP metadata in the response image
    Quantize:
      in: query
      name: quantize
      x-advancemodifiers: true
      description: |
        <table><tbody style=="border-color: silver; border-style: outset; padding: 5px">
          <tr>
            <td bgcolor="gray">
              <strong>This modifier is currently Experimental.</strong>
            </td>
          </tr>
          <tr>
            <td>
              Click <a href="https://developer.adobe.com/experience-cloud/experience-manager-apis/guides/how-to/#experimental-apis">here</a> to learn more about experimental modifiers.
            </td>
          </tr>
        </tbody></table>

        Specifies color-quantization attributes for PNG output image. `auto-format` is set to false automatically when this modifier is specified for PNG output.

        **Parameters:**
        | Parameter | Description |
        |-----------|-------------|
        | dither (Mandatory) | One of: `dither-diffuse`, `dither-off`. Specifies the dithering options. Set to `dither-diffuse` for Floyd-Steinberg error diffusion. Set to `dither-off` to disable dithering. |
        | numColors (Optional, default: 0) | Number of output colors (2-256). Specifies how many colors are included in the adaptive palette. |
        | colorList (Optional) | A comma-separated list of forced RGB colors, each in hex format. Lets you specify the colors to include in an adaptive palette. If the number of colors specified is less than `numColors`, additional colors are automatically calculated based on the image content. |

        The colors specified with colorList must consist of RGB values in hex6 format (without 0x prefix). No other color specifiers are permitted.
        The modifier numColors must be between 2-256.

        **Examples:**
        - `quantize=dither-off` - use the web palette and no dithering
        - `quantize=dither-diffuse,2,000000,ffffff` - Make the image bi-tonal. force colors to black and white.
        - `quantize[layerName]=dither-off` - use the web palette and no dithering
        - `quantize[layerName]=dither-diffuse,2,000000,ffffff` - Make the image bi-tonal. force colors to black and white.
      explode: true
      style: deepObject
      schema:
        oneOf:
          - type: object
            properties:
              layerName:
                type: object
                properties:
                  dither:
                    type: string
                    enum:
                      - dither-diffuse
                      - dither-off
                  numColors:
                    type: integer
                    minimum: 2
                    maximum: 256
                  colorList:
                    type: string
          - type: object
            properties:
              dither:
                type: string
                enum:
                  - dither-diffuse
                  - dither-off
              numColors:
                type: integer
                minimum: 2
                maximum: 256
              colorList:
                type: string
    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
    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
  schemas:
    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]
    EightTuple:
      type: array
      minItems: 8
      maxItems: 8
      items:
        type: integer
      example:
        - 100
        - 200
        - 300
        - 400
        - 500
        - 600
        - 700
        - 800
      description: Eight coordinates defining a quadrilateral [x1, y1, x2, y2, x3, y3, x4, y4]
    EightTupleRelative:
      type: array
      minItems: 8
      maxItems: 8
      items:
        type: string
        pattern: \d+((\.\d+)?p){0,1}
      example:
        - 0p
        - 0p
        - 100p
        - 0p
        - 100p
        - 100p
        - 0p
        - 100p
      description: Eight coordinates with percentage values [x1p, y1p, x2p, y2p, x3p, y3p, x4p, y4p]
    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
          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
    Smartcrop:
      type: object
      properties:
        name:
          type: string
          description: name of the smart crop
          minLength: 1
          example: Large
        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
        - dimensions
    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, 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:
        aem:assetState:
          type: string
          description: The processing state of the asset
          readOnly: true
        aem:checkedOutBy:
          type: string
          description: If the asset has been checked out, the user who has done so
          readOnly: true
        dam:sha1:
          type: string
          description: A SHA1 hash of the asset's binary content
          readOnly: true
        dc:format:
          type: string
          description: The file format of the asset
          readOnly: true
        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:modifiedBy:
          type: string
          description: The user that last modified 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:name:
          type: string
          description: The name of the asset in the repository
          readOnly: true
        repo:size:
          type: integer
          format: int64
          description: The size, in bytes, of the asset binary
          readOnly: true
        repo:version:
          type: string
          description: A UUID that refers to the current repository version of the asset
          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
        repo:repositoryId:
          $ref: '#/components/schemas/RepositoryId'
        repo:ancestors:
          type: array
          description: Absolute Ancestor Asset ID List that starts with id of the root directory of the Repository and ends with id of the immediate parent of the Asset.
          readOnly: true
          items:
            type: string
        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
        aem:published:
          type: string
          format: date-time
          description: The last published date of the asset as maintained by the content repository
          readOnly: true
        repo:assetClass:
          type: string
          description: Asset type
          enum:
            - file
            - directory
            - collection
          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
        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'
        repo:assetClass: file
    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:
              value:
                type: string
                description: the tag for the asset
              repo:ancestors:
                type: array
                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:
              - 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'
    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'
    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
    MatchQuery:
      type: object
      description: |
        Search for Full text (supports matches/startswith)
      additionalProperties: false
      properties:
        match:
          type: object
          properties:
            fields:
              description: Fields to search text
              type: array
              minItems: 1
              maxItems: 10
              items:
                type: string
                maxLength: 256
                minLength: 1
            text:
              description: |
                The text to search. An empty string searches for everything.
              type: string
              maxLength: 256
              minLength: 0
            operator:
              type: string
              enum:
                - startsWith
                - matches
              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`.
          example:
            text: ocean
            fields:
              - metadata.repositoryMetadata.repo:name
            operator: matches
          required:
            - text
            - fields
      required:
        - match
      example:
        match:
          text: crocs
          operator: matches
          fields:
            - metadata.repositoryMetadata.repo:name
    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'
    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
    SearchOperation:
      type: object
      properties:
        query:
          description: |
            List of Composite query. CompositeQueries in this list are AND'd.
          type: array
          minItems: 1
          maxItems: 5
          items:
            $ref: '#/components/schemas/CompositeQuery'
        orderBy:
          $ref: '#/components/schemas/OrderBy'
        limit:
          $ref: '#/components/schemas/Limit'
        cursor:
          $ref: '#/components/schemas/Cursor'
      required:
        - query
      example:
        query:
          - and:
              - or:
                  - match:
                      text: blue
                      fields:
                        - metadata.repositoryMetadata.repo:name
                  - match:
                      text: red
                      fields:
                        - metadata.repositoryMetadata.repo:name
              - not:
                  - term:
                      metadata.repositoryMetadata.dc:format:
                        - video/mp4
          - range:
              metadata.repositoryMetadata.repo:size:
                gte: 3000000
                lte: 9000000
        orderBy: metadata.repositoryMetadata.repo:size desc,metadata.repositoryMetadata.repo:createDate asc
        limit: 50
    SearchOperationResponse:
      type: object
      description: |
        Sample response :
        {
          "hits": {
            "results": [
              //results redacted
            ]
          },
          "search_metadata": {
            "count": 9,
            "totalCount": {
              "total": 9,
              "relation": "eq"
            },
            "searchDuration": 16
          }
        }
      properties:
        hits:
          type: object
          properties:
            results:
              type: array
              items:
                $ref: '#/components/schemas/Metadata'
        cursor:
          $ref: '#/components/schemas/Cursor'
        search_metadata:
          type: object
          properties:
            count:
              description: |
                Number of results on this page.
              type: integer
              format: int64
              minimum: 0
              maximum: 10000
            totalCount:
              type: object
              properties:
                total:
                  description: Total number of results.
                  type: integer
                  format: int64
                  minimum: 0
                  maximum: 10000
                relation:
                  description: Can be either of eq (equals to) or gte (greater than equals to)
                  type: string
                  enum:
                    - eq
                    - gte
            searchDuration:
              description: |
                Time taken to execute the search request in nano sec.
              type: integer
              format: int64
          required:
            - count
            - searchDuration
      required:
        - hits
        - search_metadata
      example:
        hits:
          results:
            - assetId: urn:aaid:aem:9d68909d-378b-4c18-8b9d-0ep0g826e984
              repositoryMetadata:
                repo:name: blue shoe.jpeg
                dc:format: image/webp
                repo:createDate: '2023-05-29T12:54:36.410Z'
                repo:modifyDate: '2023-05-11T14:12:09.304Z'
                repo:size: 434292
                repo:repositoryId: urn:rid:aem:65214-138691
              assetMetadata:
                xcm:machineKeywords:
                  - localeCode: en-US
                    confidence: 0.7371780872344971
                    value: shoe
                  - localeCode: en-US
                    confidence: 0.7185167074203491
                    value: wearable
                tiff:ImageLength: 1800
                tiff:ImageWidth: 2400
            - //other 8 asset metadata: null
        cursor: '["45600323",1478539971]'
        search_metadata:
          count: 50
          totalCount:
            total: 92
            relation: eq
          searchDuration: 16
    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, folder or collection.
      properties:
        repo:repositoryId:
          $ref: '#/components/schemas/RepositoryId'
        repo:createDate:
          type: string
          format: date-time
          description: The created date of the asset, folder or collection as maintained by the content repository
          readOnly: true
        repo:createdBy:
          type: string
          description: The user that created the asset, folder or collection in the content repository
          readOnly: true
        repo:modifiedBy:
          type: string
          description: The user that last modified the asset, folder or collection in the content repository
          readOnly: true
        repo:modifyDate:
          type: string
          format: date-time
          description: The last modified date of the asset, folder or collection as maintained by the content repository
          readOnly: true
      additionalProperties: true
    CollectionMetadata:
      type: object
      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
      required:
        - id
        - repositoryMetadata
        - collectionMetadata
    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.
      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
    LinkShareMetadataResponse:
      properties:
        id:
          type: string
          description: ID of the link
          example: 6ba7b8109dad11d180b40002a5d5c51b62xsa4uT0qO_hvyym329pOYFasfPffVM9E-IPgs9KM
          minLength: 40
        title:
          type: string
          description: Title of the link
          example: Sample link
        access:
          type: string
          enum:
            - public
            - restricted
          description: Specifies the access level for the link.
          example: public
          minLength: 6
        sharedItemsCount:
          type: integer
          description: The count of shared assets or collections by the link.
          minimum: 1
        expiryTime:
          type: string
          format: date-time
          description: The date and time when shared link expires.
          example: '2021-05-20T20:00:00.000Z'
          minLength: 19
        createdDate:
          type: string
          format: date-time
          description: The date and time when the link was created.
          example: '2021-05-15T10:30:00.000Z'
          minLength: 19
          readOnly: true
        owner:
          type: string
          description: EmailId of user, who created this link
          pattern: ^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})
          example: user@adobe.com
          minLength: 6
      required:
        - id
        - title
        - access
        - sharedItemsCount
        - expiryTime
        - createdDate
        - owner
    LinkShareMetadataRequest:
      type: object
      properties:
        title:
          type: string
          description: Title of the link
          example: Sample link
        description:
          type: string
          description: Description of the link
          example: Sample link description
        access:
          type: string
          enum:
            - public
            - restricted
          description: Specifies the access level for the link.
          minLength: 6
        expiryTime:
          type: string
          format: date-time
          description: The date and time when shared link expires.
          example: '2021-05-20T20:00:00.000Z'
      required:
        - title
        - access
    ShareItem:
      type: object
      anyOf:
        - properties:
            collections:
              type: array
              items:
                properties:
                  collectionId:
                    $ref: '#/components/schemas/CollectionId'
                  repo:repositoryId:
                    $ref: '#/components/schemas/RepositoryId'
                required:
                  - collectionId
              minLength: 1
          required:
            - collections
        - properties:
            assets:
              type: array
              items:
                properties:
                  assetId:
                    $ref: '#/components/schemas/AssetId'
                  repo:repositoryId:
                    $ref: '#/components/schemas/RepositoryId'
                required:
                  - assetId
              minLength: 1
          required:
            - assets
    ShareToken:
      type: object
      properties:
        token:
          type: string
          description: Token to access shared assets or collections
          pattern: ^([a-zA-Z0-9_-]{8,64})$
          example: T0lUJUypSG06pJabw3guL6kNRfz6S3wP6nA2gRlXERI
          minLength: 8
        expiryTime:
          type: string
          format: date-time
          description: The date and time when token to access shared assets or collections expires.
          example: '2021-05-20T20:00:00.000Z'
          minLength: 19
      required:
        - token
        - expiryTime
    ShareItemsResponse:
      type: object
      anyOf:
        - properties:
            collections:
              type: array
              items:
                type: object
                allOf:
                  - $ref: '#/components/schemas/CollectionId'
                  - $ref: '#/components/schemas/ShareToken'
              minLength: 1
          required:
            - collections
        - properties:
            assets:
              type: array
              items:
                type: object
                allOf:
                  - $ref: '#/components/schemas/ShareToken'
                properties:
                  assetId:
                    $ref: '#/components/schemas/AssetId'
                required:
                  - assetId
              minLength: 1
          required:
            - assets
    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
      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
    ConversationRequest:
      type: object
      description: Request body for the assets conversation API.
      properties:
        input:
          type: string
          minLength: 3
          description: Natural language input
        metadata:
          type: object
          description: Contextual metadata map for input.
          properties:
            conversationId:
              type: string
              description: Unique identifier for the conversation.
              minLength: 1
          additionalProperties:
            type: string
      required:
        - input
      example:
        input: What assets are available for the 2024 campaign?
        metadata:
          conversationId: '12345'
    ConversationResponse:
      type: object
      description: Response body for the assets conversation API.
      properties:
        result:
          type: string
          description: Natural language response to the input
          minLength: 1
        conversationId:
          type: string
          description: Unique ID for conversation
          minLength: 1
      required:
        - result
      example:
        result: There are 12 assets available for the 2024 campaign.
        conversationId: '12345'
    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'
  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. 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
      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
      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
      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: |
        The server encountered an unexpected error. Retrying the request after a certain time could help.
      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.
    412_PreconditionFailed:
      description: Precondition Failed
      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
      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.
    415_UnsupportedMediaType:
      description: |
        Unsupported Media Type. When provided as a response to a `PATCH` request,
        the response will provide an `Accept-Patch` response header to notify
        the client what patch document media types are supported.
      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.
