openapi: 3.0.3
info:
  title: Assets Author API
  description: API definitions for asset management capabilities in AEM Assets.  To configure a client to access to these APIs, visit the Adobe Developer Console and add the "AEM Assets Author API" card to your project.
  version: '2026.07'
servers:
  - url: https://{bucket}.adobeaemcloud.com/adobe/assets
    variables:
      bucket:
        default: ''
        description: The bucket to use for this request, e.g. author-p12345-e123456
security:
  - bearerAuth: []
tags:
  - name: Assets
    description: APIs for working with assets
  - name: Events
    description: Events generated by AEM Assets
  - name: Metadata
    description: APIs for working with asset metadata
  - name: Relations
    description: APIs for working with asset relations
  - name: Import
    description: APIs for importing assets into AEM Assets
  - name: Jobs
    description: APIs for checking status and results of asynchronous asset jobs
paths:
  /{assetId}:
    get:
      summary: Get an asset
      description: |
        Returns an existing web-optimized binary representation of the asset.
      operationId: getAsset
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Web-optimized version of the asset
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
                description: Binary content of the asset
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
    delete:
      summary: Delete asset
      description: |
        Deletes an existing asset from the system. In most cases, a 204 response will be returned immediately,
        but in some cases, a 202 will be returned if the operation may take a long time to complete. This most
        commonly occurs when an asset has a large number of references to update, but can occur for other
        reasons as well.
      operationId: deleteAsset
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - in: query
          name: force
          description: If true, delete the asset even if it is referenced
          schema:
            type: boolean
      responses:
        '202':
          description: Accepted
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetJobStatus'
        '204':
          $ref: '#/components/responses/204_NoContent'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /search:
    post:
      summary: Search for assets based on specified criteria
      operationId: searchAssets
      security:
        - Bearer: []
      tags:
        - Assets
      description: Search Assets in author environment
      parameters:
        - in: query
          name: allowUnindexedSearch
          description: |
            When `true`, allows a search request to reference properties that are not indexed. This parameter is
            optional and defaults to `false`, in which case a request that references one or more unindexed
            properties receives an HTTP 400 response.
          schema:
            type: boolean
            default: false
      requestBody:
        required: true
        description: |
          Use `application/json` for text-only searches.
          Use `multipart/form-data` when uploading a PDF file for enhanced search.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetSearchRequest'
            examples:
              search-with-composite-query-and-facets:
                summary: Search with composite boolean query, range and tag filters, sorting and facets
                value:
                  query:
                    - and:
                        - or:
                            - match:
                                text: blue
                                mode: FULLTEXT
                                fields:
                                  - repositoryMetadata.repo:name
                            - match:
                                text: red
                                mode: FULLTEXT
                                fields:
                                  - repositoryMetadata.repo:name
                            - match:
                                text: assets with file names containing 'green'
                                mode: HYBRID
                        - not:
                            - term:
                                repositoryMetadata.dc:format:
                                  - video/mp4
                    - range:
                        repositoryMetadata.repo:size:
                          gte: '3000000'
                          lte: '9000000'
                    - term:
                        assetMetadata.xcm:keywords.tagId:
                          - <tag-id>
                  sort:
                    - field: repositoryMetadata.repo:size
                      order: DESC
                    - field: repositoryMetadata.repo:createDate
                      order: ASC
                  limit: 3
                  facets:
                    - type: CATEGORY
                      field: repositoryMetadata.dc:format
                      id: file_format
                      size: 100
                    - type: CATEGORY
                      field: assetMetadata.dam:assetStatus
                      id: dam_status
                      size: 25
              search-immediate-children-of-folder:
                summary: Search for assets that are immediate children of a folder
                description: |
                  Use `repositoryMetadata.repo:parent` with the folder identifier to return only the assets
                  located directly in that folder. Assets in its sub-folders are not included.
                value:
                  query:
                    - term:
                        repositoryMetadata.repo:parent:
                          - <folder-id>
              search-all-descendants-of-folder:
                summary: Search for all assets under a folder, including its sub-folders
                description: |
                  Use `repositoryMetadata.repo:ancestors` with the folder identifier to return all assets
                  located anywhere under that folder, at any depth.
                value:
                  query:
                    - term:
                        repositoryMetadata.repo:ancestors:
                          - <folder-id>
              search-asset-by-path:
                summary: Search for the asset at a specific path
                description: |
                  Use `repositoryMetadata.repo:path` with the absolute asset path to return the asset
                  stored at that path.
                value:
                  query:
                    - term:
                        repositoryMetadata.repo:path:
                          - /content/dam/products/blue-shoe.jpg
          multipart/form-data:
            schema:
              type: object
              properties:
                searchRequest:
                  $ref: '#/components/schemas/AssetSearchRequest'
                file:
                  description: |
                    PDF file for enhanced search capabilities:
                    - Visual similarity search: Find visually similar assets
                    - Content extraction: Extract and search text content from the PDF
                    - Metadata extraction: Use PDF metadata to refine search results

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

        ## Async Job Polling Flow

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

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

        ## Job States

        | State | Description |
        |-------|-------------|
        | `PROCESSING` | Job is still running |
        | `COMPLETED` | Job finished successfully |
        | `COMPLETED_WITH_ERRORS` | Job finished with some failures |
        | `FAILED` | Job failed entirely |
      operationId: getJobStatus
      security:
        - Bearer: []
      tags:
        - Jobs
      responses:
        '200':
          description: The current status of the async job (processing, completed, or failed).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetJobStatus'
        '303':
          description: The job has finished executing and results are available at the indicated location.
          headers:
            Location:
              $ref: '#/components/headers/Location'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/metadata:
    parameters:
      - $ref: '#/components/parameters/AssetID'
    head:
      summary: Check asset metadata
      description: Returns headers, including an ETag for the specified asset metadata, which can be a lighter method of checking for the existence of, or validating a cached version of an asset's metadata without sending a full GET request.
      operationId: headAssetMetadata
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Metadata
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: OK
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            Content-Type:
              schema:
                type: string
                enum:
                  - application/json
              required: true
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    get:
      summary: Get asset metadata
      description: Asset metadata contains those metadata values that have been extracted from the asset, configured by the user, or derived from the asset during asset processing.  Repository metadata contains metadata properties that are set and maintained by the repository during system operations.
      operationId: getAssetMetadata
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Metadata
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Metadata for the specified asset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Metadata'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    patch:
      summary: Update asset metadata
      description: |
        Updates the asset's metadata properties using JSON Patch ([RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902)).
        The request body is a JSON Patch document — an array of operations applied in order.

        ### Operations

        - `add`: Adds `value` at `path` — overwrites an existing simple value, creates it if absent, or replaces the whole array if `path` addresses one directly. A `path` ending in `/-` appends to the array; a `path` ending in `/N` inserts at index `N`.
        - `copy`: Copies the entity at `from` to `path`.
        - `move`: Moves the entity at `from` to `path`. Most often used to rename a property.
        - `remove`: Removes the entity at `path`. Errors if no entity exists there.
        - `replace`: Replaces the entity at `path` with `value`. Errors if no entity exists there.
        - `test`: Compares `value` against the entity at `path`. Used to validate a condition before applying the rest of the operations in the request; if any `test` fails, the whole request is rejected with 400 and no changes are applied.

        Some operations may support extensions that modify their behavior; refer to the operation definition below for details.

        ### Response status codes

        Only 400 and 422 are described here: both indicate a rejected request, but which one is
        returned depends on the kind of validation error and cannot be inferred from the schema. The
        other response codes carry their standard HTTP meanings. When a request contains both a
        400-class problem and a 422-class problem, the 400-class problem takes precedence.

        - **400 Bad Request**: The error can be determined from the patch document alone, without
          checking anything specific to the target asset. The following are common causes:
          - Missing `path` or `value` on an operation
          - Invalid `op` value
          - A `test` operation whose comparison fails
          - An extension property used in a combination its own description does not permit
        - **422 Unprocessable Entity**: The document is well-formed but conflicts with the property
          definitions that apply to the target asset. The following are common causes:
          - Operation targets a read-only or computed property (including `repositoryMetadata`). For `move` and `copy`, the read-only check applies to both the source (`from`) and target (`path`).
          - Operation targets a metadata group that does not apply to this asset type
      operationId: patchAssetMetadata
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Metadata
      parameters:
        - $ref: '#/components/parameters/If-Match'
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/MetadataJSONPatch'
      responses:
        '200':
          description: Patch applied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Metadata'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '409':
          $ref: '#/components/responses/409_Conflict'
        '412':
          $ref: '#/components/responses/412_PreconditionFailed'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/422_UnprocessableEntity'
        '428':
          $ref: '#/components/responses/428_PreconditionRequired'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/relations:
    parameters:
      - $ref: '#/components/parameters/AssetID'
    get:
      summary: Get the asset relations for an asset
      description: Get a paginated list of all relations for an asset, optionally filtered by relation types. If the `relationTypes` parameter is provided, only relations for the provided type name(s) will be returned. By default, the response will contain a maximum of 50 items per page. The caller may pass the `limit` query parameter to override this default with a lower limit. To request the next page of items, pass the `cursor` value provided in the response to the `cursor` query parameter.
      operationId: getAssetRelations
      security:
        - Bearer: []
      tags:
        - Relations
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/If-None-Match'
        - name: relationTypes
          description: Comma-delimited list of relation types to filter the asset relations to include only the specified types.
          in: query
          explode: false
          schema:
            type: array
            uniqueItems: true
            items:
              type: string
          example:
            - sources
            - derived
            - others
      responses:
        '200':
          description: Paginated list of relations for the given asset or an empty list if the asset has no relations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetRelationsResponse'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    post:
      summary: Create new asset relations for an asset
      description: Create new asset relations for the given asset. Each asset relation object in the request must include the ID of the related asset and the relation type.
      operationId: createAssetRelations
      security:
        - Bearer: []
      tags:
        - Relations
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAssetRelationsRequest'
      responses:
        '204':
          description: Asset relations created successfully.
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/relations/{relationType}:
    parameters:
      - $ref: '#/components/parameters/AssetID'
      - in: path
        name: relationType
        description: Name of relation type
        required: true
        schema:
          type: string
    get:
      summary: Get the asset relations for an asset filtered by relation type
      description: Get a paginated list of relations for an asset filtered by a relation type. Only relations for the provided type name will be returned. By default, the response will contain a maximum of 50 items per page. The caller may pass the `limit` query parameter to override this default with a lower limit. To request the next page of items, pass the `cursor` value provided in the response to the `cursor` query parameter.
      operationId: getAssetRelationsForRelationType
      security:
        - Bearer: []
      tags:
        - Relations
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Paginated list of relations for the given asset and relation type or an empty list if the asset has no relations for the relation type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetRelationsResponse'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
    delete:
      summary: Delete all asset relations of the given relation type for an asset
      description: Delete all asset relations of type `relationType` for the asset corresponding to the given `assetId` parameter.
      operationId: deleteAssetRelationsForRelationType
      security:
        - Bearer: []
      tags:
        - Relations
      responses:
        '204':
          $ref: '#/components/responses/204_NoContent'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/relations/{relationType}/{relatedAssetId}:
    parameters:
      - $ref: '#/components/parameters/AssetID'
      - in: path
        name: relationType
        description: Name of relation type for asset relation to be deleted.
        required: true
        schema:
          type: string
      - in: path
        name: relatedAssetId
        description: ID of the related asset to be deleted.
        required: true
        schema:
          $ref: '#/components/schemas/AssetId'
    delete:
      summary: Delete an asset relation for an asset
      description: Delete an asset relation for the asset corresponding to the given `assetId` parameter. The `relationType` and `relatedAssetId` parameters must correspond to values from an existing asset relation returned by the `getAssetRelations` operation for the asset.
      operationId: deleteAssetRelation
      security:
        - Bearer: []
      tags:
        - Relations
      responses:
        '204':
          $ref: '#/components/responses/204_NoContent'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/relationTypes:
    parameters:
      - $ref: '#/components/parameters/AssetID'
    get:
      summary: Get the relation types for an asset
      description: Get a paginated list of relation type names that exist for the given asset. The values returned in this response can be used in the `relationTypes` parameter for the `getAssetRelations` operation. By default, the response will contain a maximum of 50 items per page. The caller may pass the `limit` query parameter to override this default with a lower limit. To request the next page of items, pass the `cursor` value provided in the response to the `cursor` query parameter.
      operationId: getAssetRelationTypes
      security:
        - Bearer: []
      tags:
        - Relations
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Paginated list of relation type names for the given asset or an empty list if the asset has no relations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetRelationTypesResponse'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '500':
          $ref: '#/components/responses/500_InternalServerError'
  /{assetId}/original/as/{seoName}:
    get:
      summary: Returns the originally uploaded binary for the asset
      description: The Original Asset Author API accepts an asset ID corresponding to the asset and delivers the bitstream as-is (as it was uploaded). This is a convenience API for `/adobe/assets/{assetId}/renditions/{renditionName}/as/{seoname}` with `renditionName` defaulting to `original`.
      operationId: getAssetOriginal
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/SEOName'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: Original binary of the asset
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /{assetId}/renditions:
    get:
      summary: Returns a list of static renditions of an asset
      description: The List Renditions API accepts an asset ID and returns the static renditions associated with the asset. A success response includes list of available renditions and their attributes. Note that only renditions that support dimensions will return dimension values, otherwise the dimensions will be null.
      operationId: getAssetRenditions
      security:
        - Bearer: []
        - ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: List of available renditions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetRenditionsList'
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /{assetId}/renditions/{renditionName}/as/{seoName}:
    get:
      summary: Returns a pre-generated (on AEM Assets authoring environment) rendition of the asset
      description: The Asset Rendition Author API accepts an asset ID corresponding to the asset and the rendition name, and delivers the selected asset's specified rendition's bitstream as-is (as present on AEM Assets authoring environment).
      operationId: getAssetRendition
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Assets
      parameters:
        - in: path
          name: assetId
          required: true
          schema:
            $ref: '#/components/schemas/AssetId'
        - $ref: '#/components/parameters/RenditionName'
        - $ref: '#/components/parameters/SEOName'
        - $ref: '#/components/parameters/If-None-Match'
        - $ref: '#/components/parameters/Attachment'
      responses:
        '200':
          description: Binary of the specified rendition for the selected asset
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                $ref: '#/components/schemas/FileContentDisposition'
            ETag:
              $ref: '#/components/headers/ETag'
        '304':
          $ref: '#/components/responses/304_NotModified_ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /import/fromUrl:
    post:
      operationId: importFromUrl
      security:
        - Bearer: []
          ApiKeyAuth: []
      summary: Import From Url
      description: |
        Imports the binary found at the specified URL into AEM as an Asset or as a Rendition of an existing Asset.

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

        ## Requirements for Large Files (≥10GB)

        **Files 10GB and larger require:**

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

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

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

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

        ### Technical Reference:
        Full specification available at: [RFC 7233 - HTTP/1.1 Range Requests](https://tools.ietf.org/html/rfc7233)
      tags:
        - Import
      requestBody:
        description: |
          The request body for importing one or more Assets from a URL.
          The request body contains the metadata for the assets
          to be imported and the URLs and descriptive data for the URLs to import.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportFromUrlRequest'
      responses:
        '202':
          description: |
            The response for an accepted import request. The path provided in the Location header can be followed to monitor the import's progress.
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportJobAcceptedStatus'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
        '415':
          $ref: '#/components/responses/415_UnsupportedMediaType'
  /import/jobs/{importJobId}/status:
    head:
      summary: Head request for import job status
      description: |
        Returns headers, including an ETag for the specified import job status, which can be used to check for the existence of, or validate a cached version of the import job status without sending a full GET request.
      operationId: headImportJobStatus
      security:
        - Bearer: []
          ApiKeyAuth: []
      tags:
        - Import
      parameters:
        - in: path
          name: importJobId
          required: true
          schema:
            $ref: '#/components/schemas/ImportJobId'
      responses:
        '200':
          description: OK
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
    get:
      operationId: getImportJobStatus
      security:
        - Bearer: []
          ApiKeyAuth: []
      summary: Get Import Job Status
      description: |
        Retrieves the status of the specified import job. If the job is in progress,
        the response will have a status of 200 and include a Retry-After header with the number
        of seconds to wait before checking the status again. If the job is complete, the response
        will have a status of 200 and the response body will include the final status of the job.
      tags:
        - Import
      parameters:
        - $ref: '#/components/parameters/If-None-Match'
        - in: path
          name: importJobId
          required: true
          schema:
            $ref: '#/components/schemas/ImportJobId'
      responses:
        '200':
          description: A response describing the status of an import job
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportJobStatus'
        '304':
          $ref: '#/components/responses/304_NotModified'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
  /import/jobs/{importJobId}/result:
    head:
      operationId: headImportJobResult
      security:
        - Bearer: []
          ApiKeyAuth: []
      summary: Head request for import job result
      description: |
        Returns headers, including an ETag for the specified import job result, which can be used to check for the existence of, or validate a cached version of the import job result without sending a full GET request.
      tags:
        - Import
      parameters:
        - in: path
          name: importJobId
          required: true
          schema:
            $ref: '#/components/schemas/ImportJobId'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
      responses:
        '200':
          description: OK
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
    get:
      operationId: getImportJobResult
      security:
        - Bearer: []
          ApiKeyAuth: []
      summary: Get Import Job Result
      description: |
        Retrieves the Result of the specified import job.
      tags:
        - Import
      parameters:
        - in: path
          name: importJobId
          required: true
          schema:
            $ref: '#/components/schemas/ImportJobId'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/If-None-Match'
      responses:
        '200':
          description: A response describing the result of an import job
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportJobResult'
        '304':
          $ref: '#/components/responses/304_NotModified'
        '400':
          $ref: '#/components/responses/400_BadRequest'
        '401':
          $ref: '#/components/responses/401_Unauthorized'
        '403':
          $ref: '#/components/responses/403_Forbidden'
        '404':
          $ref: '#/components/responses/404_NotFound'
        '406':
          $ref: '#/components/responses/406_Unacceptable'
x-webhooks:
  asset_processing_completed:
    post:
      operationId: asset_processing_completed
      summary: Asset processing completed event
      description: |
        Event triggered when an asset has completed processing in AEM. This is often used in place of an 'asset created' event for use
        cases that trigger from asset creation for two reasons - many extensions require some amount of asset metadata, which is
        extracted during asset processing and acting upon an asset that is in processing has a high chance of running into conflicts
        and contention issues.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/EventMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.processing_completed
      responses:
        '200':
          description: |
            Asset processing completed event data is received successfully
  asset_deleted:
    post:
      operationId: asset_deleted
      summary: Asset deleted event
      description: |
        An event that is triggered when an asset is deleted from AEM through the Assets View UI or the Assets Open API. It is not triggered when the asset is deleted with the AEM Touch UI or other AEM APIs.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        user:
                          $ref: '#/components/schemas/User'
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                        assetMetadata:
                          $ref: '#/components/schemas/EventAssetMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.deleted
            example:
              specversion: '1.0'
              type: aem.assets.asset.deleted
              source: acct:aem-p56789-e12345@adobe.com
              id: 4fd1cdd8-0898-4d60-90ad-3d442517d3cb
              time: '2021-05-20T20:00:00.000Z'
              datacontenttype: application/json
              data:
                assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                user:
                  imsUserId: 11362B9E62F4CD400A495ECF@09f51d11618ca7b4495ee0.e
                  principalId: testuser@adobe.com
                  displayName: Test User
                repositoryMetadata:
                  aem:assetState: processed
                  aem:checkedOutBy: testuser@test.com
                  dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
                  dc:format: image/jpeg
                  repo:createDate: '2023-04-14T06:31:07.174Z'
                  repo:createdBy: user@adobe.com
                  repo:modifiedBy: dam-writer-service
                  repo:modifyDate: '2023-04-15T05:01:44.229Z'
                  repo:name: city.jpeg
                  repo:path: /content/dam/city.jpeg
                  repo:size: 338049
                  repo:version: oak:1.0::ci:y7ngaf96th56jt62awk8xkoa37c572fe
                  tiff:imageLength: 780
                  tiff:imageWidth: 1000
                  repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
                  repo:ancestors:
                    - urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                  repo:state: ACTIVE
                  aem:published: '2023-04-15T05:03:47.229Z'
                assetMetadata:
                  xcm:machineKeywords:
                    - value: graphic design
                      confidence: 0.926
                    - value: clipart
                      confidence: 0.757
                  pur:expirationDate: '2023-04-17T06:31:07.174Z'
      responses:
        '200':
          description: |
            Asset deleted event data is received successfully
  asset_downloaded:
    post:
      operationId: asset_downloaded
      summary: Asset downloaded event
      description: |
        Event triggered when an asset, folder or collection of assets is downloaded from AEM.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        user:
                          $ref: '#/components/schemas/User'
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        assetMetadata:
                          $ref: '#/components/schemas/EventAssetMetadata'
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                        downloadedRenditions:
                          type: array
                          description: Renditions of the asset that were included in the download.
                          items:
                            $ref: '#/components/schemas/AssetRenditionsItem'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.downloaded
      responses:
        '200':
          description: |
            Asset downloaded event data is received successfully
  asset_metadata_updated:
    post:
      operationId: asset_metadata_updated
      summary: Asset metadata updated event
      description: |
        Event triggered when an asset has had its metadata updated through the Assets View UI or the Assets Open API.  It is not triggered when metadata is updated with the AEM Touch UI or other AEM APIs.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        user:
                          $ref: '#/components/schemas/User'
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        assetMetadata:
                          type: object
                          description: Metadata properties that have been extracted from the asset, derived during asset processing, or applied after ingestion.  These properties are, for the most part, editable.
                          properties:
                            event:created:
                              type: array
                              uniqueItems: true
                              items:
                                type: string
                              description: This contains the names of all properties that were added in the update. This property will only be present if the metadata update contains new properties.
                            event:updated:
                              type: object
                              description: This contains all properties that were updated. The value of each property is their previous state before the update. This property will only be present if the metadata update contains properties that have been updated.
                            event:deleted:
                              type: object
                              description: This contains all properties that were deleted. The value of each property is their previous state before the deletion. This property will only be present if the metadata update contains properties that have been deleted.
                            xcm:machineKeywords:
                              type: array
                              description: Smart Tags that have been predicted for the asset during asset processing
                              items:
                                type: object
                                properties:
                                  value:
                                    type: string
                                    description: The predicted tag for the asset
                                  confidence:
                                    type: number
                                    format: double
                                    description: The model's confidence score for this tag
                            pur:expirationDate:
                              type: string
                              format: date-time
                              description: The date and time when the asset will expire.
                            dc:title:
                              type: string
                              description: A name given to the asset
                          additionalProperties: true
                          example:
                            addedProp: addedValue
                            dc:description: The updated description.
                            event:created:
                              - addedProp
                            event:updated:
                              dc:description: The previous description before the update.
                            event:deleted:
                              removedProp: removedValue
                            xcm:machineKeywords:
                              - value: city
                                confidence: 0.8512217998504639
                            pur:expirationDate: '2023-04-17T06:31:07.174Z'
                            dc:title: Asset name
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.metadata_updated
      responses:
        '200':
          description: |
            Asset metadata updated event data is received successfully
  asset_published:
    post:
      operationId: asset_published
      summary: Asset published event
      description: |
        This event is triggered when an asset is published from an author instance to a publish instance.  This event will be sent whenever an asset is published directly.  Additionally, if an asset is moved using the Assets View UI or the OpenAPI, an asset unpublished event will be sent, followed by an asset published event.  We do not support this behavior when assets are moved from the Admin View UI (aka Touch UI) or from other APIs, such as Java APIs running in-process in the AEM environment.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        user:
                          $ref: '#/components/schemas/User'
                        tier:
                          $ref: '#/components/schemas/Tier'
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                        assetMetadata:
                          $ref: '#/components/schemas/EventAssetMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.published
            example:
              specversion: '1.0'
              type: aem.assets.asset.published
              source: acct:aem-p56789-e12345@adobe.com
              id: 4fd1cdd8-0898-4d60-90ad-3d442517d3cb
              time: '2021-05-20T20:00:00.000Z'
              datacontenttype: application/json
              data:
                assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                user:
                  imsUserId: 11362B9E62F4CD400A495ECF@09f51d11618ca7b4495ee0.e
                  principalId: testuser@adobe.com
                  displayName: Test User
                tier: publish
                repositoryMetadata:
                  aem:assetState: processed
                  aem:checkedOutBy: testuser@test.com
                  dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
                  dc:format: image/jpeg
                  repo:createDate: '2023-04-14T06:31:07.174Z'
                  repo:createdBy: user@adobe.com
                  repo:modifiedBy: dam-writer-service
                  repo:modifyDate: '2023-04-15T05:01:44.229Z'
                  repo:name: city.jpeg
                  repo:path: /content/dam/city.jpeg
                  repo:size: 338049
                  repo:version: oak:1.0::ci:y7ngaf96th56jt62awk8xkoa37c572fe
                  tiff:imageLength: 780
                  tiff:imageWidth: 1000
                  repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
                  repo:ancestors:
                    - urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                  repo:state: ACTIVE
                  aem:published: '2023-04-15T05:03:47.229Z'
                assetMetadata:
                  xcm:machineKeywords:
                    - value: graphic design
                      confidence: 0.926
                    - value: clipart
                      confidence: 0.757
                  pur:expirationDate: '2023-04-17T06:31:07.174Z'
      responses:
        '200':
          description: |
            Asset published event data is received successfully
  asset_unpublished:
    post:
      operationId: asset_unpublished
      summary: Asset unpublished event
      description: |
        An event that is triggered when an asset is unpublished from an AEM publish instance.  This event will be sent whenever an asset is unpublished directly.  Additionally, if an asset is moved or deleted using the Assets View UI or the OpenAPI, an asset unpublished event will be sent.  We do not support this behavior when assets are moved or deleted from the Admin View UI (aka Touch UI) or from other APIs, such as Java APIs running in-process in the AEM environment.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        assetId:
                          $ref: '#/components/schemas/AssetId'
                        user:
                          $ref: '#/components/schemas/User'
                        tier:
                          $ref: '#/components/schemas/Tier'
                        repositoryMetadata:
                          $ref: '#/components/schemas/RepositoryMetadata'
                        assetMetadata:
                          $ref: '#/components/schemas/EventAssetMetadata'
                    type:
                      type: string
                      enum:
                        - aem.assets.asset.unpublished
            example:
              specversion: '1.0'
              type: aem.assets.asset.unpublished
              source: acct:aem-p56789-e12345@adobe.com
              id: 4fd1cdd8-0898-4d60-90ad-3d442517d3cb
              time: '2021-05-20T20:00:00.000Z'
              datacontenttype: application/json
              data:
                assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                user:
                  imsUserId: 11362B9E62F4CD400A495ECF@09f51d11618ca7b4495ee0.e
                  principalId: testuser@adobe.com
                  displayName: Test User
                tier: publish
                repositoryMetadata:
                  aem:assetState: processed
                  aem:checkedOutBy: testuser@test.com
                  dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
                  dc:format: image/jpeg
                  repo:createDate: '2023-04-14T06:31:07.174Z'
                  repo:createdBy: user@adobe.com
                  repo:modifiedBy: dam-writer-service
                  repo:modifyDate: '2023-04-15T05:01:44.229Z'
                  repo:name: city.jpeg
                  repo:path: /content/dam/city.jpeg
                  repo:size: 338049
                  repo:version: oak:1.0::ci:y7ngaf96th56jt62awk8xkoa37c572fe
                  tiff:imageLength: 780
                  tiff:imageWidth: 1000
                  repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
                  repo:ancestors:
                    - urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
                  repo:state: ACTIVE
                  aem:published: '2023-04-15T05:03:47.229Z'
                assetMetadata:
                  xcm:machineKeywords:
                    - value: graphic design
                      confidence: 0.926
                    - value: clipart
                      confidence: 0.757
                  pur:expirationDate: '2023-04-17T06:31:07.174Z'
      responses:
        '200':
          description: |
            Asset unpublished event data is received successfully
  asset_import_completed:
    post:
      operationId: asset_import_completed
      summary: Asset import completed event
      description: |
        Event triggered when an asset import operation is completed in AEM.
      tags:
        - Events
      security:
        - {}
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CloudEvents_3rdParty'
                - type: object
                  properties:
                    data:
                      type: object
                      required:
                        - jobId
                        - startTime
                        - endTime
                        - operation
                        - status
                        - resultEndpoint
                      properties:
                        jobId:
                          $ref: '#/components/schemas/ImportJobId'
                        startTime:
                          type: string
                          format: date-time
                          description: The start time of the import job
                          minLength: 20
                        endTime:
                          type: string
                          format: date-time
                          description: The end time of the import job
                          minLength: 20
                        operation:
                          $ref: '#/components/schemas/ImportOperation'
                        status:
                          $ref: '#/components/schemas/ImportJobStateInEvent'
                        resultEndpoint:
                          type: string
                          format: uri
                          description: URL to retrieve the import job result
                          minLength: 1
                    type:
                      type: string
                      enum:
                        - aem.assets.import.completed
            example:
              specversion: '1.0'
              type: aem.assets.import.completed
              source: acct:aem-p12345-e12345@adobe.com
              id: ffa69f14-4f78-11ed-bdc3-0242ac129992
              time: '2024-08-12T15:29:00Z'
              datacontenttype: application/json
              data:
                jobId: 45a44ed7-f823-4a4c-896c-02b340ee87f0
                startTime: '2025-01-01T00:00:00Z'
                endTime: '2025-01-01T00:01:00.11Z'
                operation: aem.assets.import.fromurl
                status: completed
                resultEndpoint: https://author-p12345-e12345.adobeaemcloud.com/adobe/assets/import/jobs/45a44ed7-f823-4a4c-896c-02b340ee87f0/result
      responses:
        '200':
          description: Asset import completed event data is received successfully
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
    basicAuth:
      type: http
      scheme: basic
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
  schemas:
    AssetId:
      type: string
      description: ID of the asset
      minLength: 1
      example: <asset-id>
    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
    JobState:
      type: string
      description: The state of an asynchronous job. Possible values are `QUEUED`, `PROCESSING`, `COMPLETED`, `COMPLETED_WITH_ERRORS`, or `FAILED`.
      enum:
        - QUEUED
        - PROCESSING
        - COMPLETED
        - COMPLETED_WITH_ERRORS
        - FAILED
    AssetJobStatus:
      type: object
      description: The status of an asset async job.
      properties:
        jobId:
          type: string
          minLength: 1
        state:
          allOf:
            - $ref: '#/components/schemas/JobState'
          description: The state of the async job. Possible values are `QUEUED`, `PROCESSING`, `COMPLETED`, `COMPLETED_WITH_ERRORS`, or `FAILED`. To inspect the errors or warnings, request the job result by following the link provided in the Location header.
        status:
          type: string
          description: Additional information about processing state. If an error occurred, error information will appear here.
      required:
        - jobId
        - state
      example:
        jobId: <job-id>
        state: PROCESSING
    CompositeQuery:
      description: A composite query is a combination of clauses, each of which can itself be a composite query
      anyOf:
        - $ref: '#/components/schemas/OrQuery'
        - $ref: '#/components/schemas/AndQuery'
        - $ref: '#/components/schemas/NotQuery'
        - $ref: '#/components/schemas/MatchQuery'
        - $ref: '#/components/schemas/TermQuery'
        - $ref: '#/components/schemas/RangeQuery'
        - $ref: '#/components/schemas/ExistsQuery'
    OrQuery:
      type: object
      description: |
        Logical or operator. The results must match at least one of the sub-queries.
      additionalProperties: false
      properties:
        or:
          type: array
          minItems: 1
          maxItems: 5
          items:
            $ref: '#/components/schemas/CompositeQuery'
      required:
        - or
      example: '{"or":[{"match":{"text":"blue"}},{"match":{"text":"red"}}]}'
    AndQuery:
      type: object
      description: |
        Logical and operator. The results must match all the sub-queries in this clause.
      additionalProperties: false
      properties:
        and:
          type: array
          minItems: 1
          maxItems: 5
          items:
            $ref: '#/components/schemas/CompositeQuery'
      required:
        - and
      example:
        and:
          - match:
              text: blue
          - match:
              text: white
    NotQuery:
      type: object
      description: |
        Logical not operator. All matches are excluded from the results
      additionalProperties: false
      properties:
        not:
          type: array
          minItems: 1
          maxItems: 1
          items:
            $ref: '#/components/schemas/CompositeQuery'
      required:
        - not
      example:
        not:
          - term:
              metadata.repositoryMetadata.dc:format:
                - video/mp4
    MatchQueryMatch:
      type: object
      description: |
        Search for full text using different search modes.
      properties:
        mode:
          allOf:
            - $ref: '#/components/schemas/MatchMode'
          default: FULLTEXT
        text:
          description: |
            The text to search. An empty string searches for everything.
          type: string
          maxLength: 256
          minLength: 0
      required:
        - text
      discriminator:
        propertyName: mode
        mapping:
          FULLTEXT: '#/components/schemas/FullTextMatchQuery'
          HYBRID: '#/components/schemas/HybridMatchQuery'
          NATURAL_LANGUAGE: '#/components/schemas/NaturalLanguageMatchQuery'
    MatchOperator:
      type: string
      description: Defines how to interpret the `text` input
      enum:
        - startsWith
        - matches
    FullTextMatchQuery:
      allOf:
        - $ref: '#/components/schemas/MatchQueryMatch'
        - type: object
          description: |
            Performs keyword-based search across asset metadata.
          properties:
            fields:
              description: Fields to search text. If this property is omitted, we will search for specified text across all fields enabled by the backend implementation and index configuration.
              type: array
              uniqueItems: true
              minItems: 1
              maxItems: 10
              items:
                type: string
                maxLength: 256
                minLength: 1
            operator:
              allOf:
                - $ref: '#/components/schemas/MatchOperator'
              default: matches
              description: |
                Defines how to interpret the `text` input
                * `startsWith`: Give all results where the asset metadata has one or more attributes (selected via `fields` parameter) with values starting with `text`.
                * `matches`: Give all results where the asset metadata has one or more attributes (selected via `fields` parameter) with values containing `text`.
    HybridMatchQuery:
      allOf:
        - $ref: '#/components/schemas/MatchQueryMatch'
        - type: object
          description: |
            Performs keyword-based search across asset metadata and incorporates semantic matching to improve relevance.
    NaturalLanguageMatchQuery:
      allOf:
        - $ref: '#/components/schemas/MatchQueryMatch'
        - type: object
          description: |
            Performs natural language search by interpreting the intent of the query.
    MatchMode:
      type: string
      description: |
        The mode of the match query
        * `FULLTEXT`: Performs keyword-based search across asset metadata.
        * `HYBRID`: Performs keyword-based search across asset metadata and incorporates semantic matching to improve relevance.
        * `NATURAL_LANGUAGE`: Performs natural language search by interpreting the intent of the query.
      enum:
        - FULLTEXT
        - HYBRID
        - NATURAL_LANGUAGE
    MatchQuery:
      type: object
      description: |
        Search for full text (supports matches/startswith) with support for semantic search.
      properties:
        match:
          $ref: '#/components/schemas/MatchQueryMatch'
      required:
        - match
    TermQuery:
      description: |
        Search for the query-term exactly matching the value of a specific field.

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

        The API supports multi-valued fields.

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

        Term query supports only a single field in term clause. For searching on multiple fields term should be 
        composed with AND, OR, NOT queries as per the need.

        Each value must be a string, a date-time string, a number, or a JSON boolean (`true` or `false`),
        matching the type of the field.
      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
                - type: boolean
          example:
            metadata.repositoryMetadata.dc:format:
              - image/png
              - image/jpeg
      required:
        - term
      example:
        term:
          metadata.repositoryMetadata.dc:format:
            - image/png
            - image/jpeg
    RangeQuery:
      description: |
        Returns documents that contain terms within the provided range. The acceptable types for range includes:
          * numbers (integer, double, long, float)
          * dates (represented as String compliant with [ISO 8601 representation](https://www.w3.org/TR/NOTE-datetime-970915.html))
      additionalProperties: false
      properties:
        range:
          type: object
          additionalProperties:
            type: object
            properties:
              gt:
                type: string
                description: Greater-than
              gte:
                type: string
                description: Greater-than or equal-to
              lt:
                type: string
                description: Less-than
              lte:
                type: string
                description: Less-than or equal-to
          example:
            metadata.repositoryMetadata.repo:size:
              lt: '20000000'
              gte: '50'
      required:
        - range
      example:
        range:
          metadata.repositoryMetadata.repo:createDate:
            lt: '2023-01-04T13:49:00.00Z'
            gte: '2023-02-07T00:00:00.00Z'
    ExistsQuery:
      type: object
      description: |
        Returns items where a specified field has a stored (non-empty) value.
        A field might be missing if it's null, empty, absent in the source data, or ignored due to invalid formatting.
      additionalProperties: false
      properties:
        exists:
          type: object
          additionalProperties: false
          properties:
            field:
              type: string
              description: Name of the field to check for existence
              maxLength: 256
          required:
            - field
          example:
            field: metadata.assetMetadata.dc:title
      required:
        - exists
      example:
        exists:
          field: metadata.assetMetadata.dc:title
    SearchQuery:
      description: |
        List of `CompositeQuery` elements. The elements in this list will be applied using an AND logic.

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

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

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

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

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

            Each facet result contains the field and type from the request,
            along with the corresponding values based on the type.
          items:
            $ref: '#/components/schemas/FacetResponse'
        search_metadata:
          type: object
          properties:
            count:
              description: |
                Number of results on this page.
              type: integer
              format: int64
              minimum: 0
              maximum: 50
            totalCount:
              type: object
              properties:
                total:
                  description: Total number of results.
                  type: integer
                  format: int64
                  minimum: 0
                  maximum: 10000
                relation:
                  description: Total number of results can either be 'eq' (equals to - meaning that this is the total number of results that are available) or 'gte' (greater than or equal to - meaning that there are more than this number of total results available and the precise total number of results has not been calculated, usually for performance reasons).
                  type: string
                  enum:
                    - eq
                    - gte
            searchDuration:
              description: |
                Time taken to execute the search request in nano sec.
              type: integer
              format: int64
      required:
        - hits
    MetadataJSONPatchOperation:
      type: object
      description: Base schema for a JSON Patch operation
      discriminator:
        propertyName: op
        mapping:
          add: '#/components/schemas/MetadataAddOperation'
          copy: '#/components/schemas/MetadataCopyOperation'
          move: '#/components/schemas/MetadataMoveOperation'
          remove: '#/components/schemas/MetadataRemoveOperation'
          replace: '#/components/schemas/MetadataReplaceOperation'
          test: '#/components/schemas/MetadataTestOperation'
      properties:
        op:
          $ref: '#/components/schemas/MetadataJSONPatchOperationType'
      required:
        - op
    PatchValue:
      description: The information to place at the location indicated by the `path` parameter
      oneOf:
        - type: string
        - type: number
        - type: array
          items: {}
        - type: object
        - type: boolean
    MetadataAddOperation:
      type: object
      description: Adds the contents of the `value` parameter to the location indicated by the `path` parameter.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/MetadataJSONPatchOperation'
        - type: object
          properties:
            path:
              description: The location where information should be added
              type: string
              minLength: 1
            value:
              maxLength: 100000
              allOf:
                - $ref: '#/components/schemas/PatchValue'
      required:
        - path
        - value
      example:
        op: add
        path: /assetMetadata/dc:subject/-
        value: landscape
        ifAbsent: true
    MetadataCopyOperation:
      type: object
      description: Copies information from the location described by the `from` parameter to the location described by the `path` parameter.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/MetadataJSONPatchOperation'
        - type: object
          properties:
            from:
              description: A path that points to the entity to be copied
              type: string
              minLength: 1
            path:
              description: A path that points to the location where the entity is to be copied to
              type: string
              minLength: 1
      required:
        - from
        - path
      example:
        op: copy
        from: /assetMetadata/dc:title
        path: /assetMetadata/custom:name
    MetadataMoveOperation:
      type: object
      description: Move an entity from the location described by the `from` parameter to the location described by the `path` parameter. This operation is most often used to rename a property.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/MetadataJSONPatchOperation'
        - type: object
          properties:
            from:
              description: A path that points to the entity to be moved
              type: string
              minLength: 1
            path:
              description: A path that points to the location where the entity is to be moved to
              type: string
              minLength: 1
      required:
        - from
        - path
      example:
        op: move
        from: /assetMetadata/old:property
        path: /assetMetadata/new:property
    MetadataRemoveOperation:
      type: object
      description: Remove the entity at the location pointed to by the `path` parameter.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/MetadataJSONPatchOperation'
        - type: object
          properties:
            path:
              description: A path that points to the entity to be removed
              type: string
              minLength: 1
      required:
        - path
      example:
        op: remove
        path: /assetMetadata/dc:subject
        removeValue: obsolete
    MetadataReplaceOperation:
      type: object
      description: Replaces information at the location indicated by the `path` parameter with the contents of the `value` parameter.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/MetadataJSONPatchOperation'
        - type: object
          properties:
            path:
              description: The location where the information should be replaced
              type: string
              minLength: 1
            value:
              $ref: '#/components/schemas/PatchValue'
      required:
        - path
        - value
      example:
        op: replace
        path: /assetMetadata/dc:title
        value: Updated Title
    MetadataTestOperation:
      type: object
      description: |
        Compares the contents of the `value` parameter with the value at the location indicated by the `path` parameter. `test` operations can be
        included in a `PATCH` request to validate that some condition is true before applying the transformations included in the `test`
        operation(s).  If any of the `test`s evaluate to false, a 400 response will be returned.
      additionalProperties: false
      allOf:
        - $ref: '#/components/schemas/MetadataJSONPatchOperation'
        - type: object
          properties:
            path:
              description: The location of the information to use for comparison
              type: string
              minLength: 1
            value:
              $ref: '#/components/schemas/PatchValue'
      required:
        - path
        - value
      example:
        op: test
        path: /assetMetadata/dc:title
        value: Current Title
    MetadataJSONPatchOperationType:
      type: string
      description: The operation to perform.
      enum:
        - add
        - copy
        - move
        - remove
        - replace
        - test
    MetadataJSONPatch:
      type: array
      description: |
        JSON Patch defines a JSON document structure for expressing a
        sequence of operations to apply to a JavaScript Object Notation
        (JSON) document; it is suitable for use with the HTTP PATCH method.
        The `application/json-patch+json` media type is used to identify such
        patch documents.

        For more details check [RFC 6902](https://www.rfc-editor.org/rfc/rfc6902).

        The number of operations in a single request is capped at 1000 (`maxItems`); requests
        exceeding the cap are rejected with `400 Bad Request`.
      maxItems: 1000
      items:
        $ref: '#/components/schemas/MetadataJSONPatchOperation'
      example:
        - op: add
          path: /assetMetadata/dc:description
          value: New description
        - op: add
          path: /assetMetadata/dc:subject/-
          value: landscape
          ifAbsent: true
        - op: remove
          path: /assetMetadata/custom:title
          ifExists: true
        - op: remove
          path: /assetMetadata/dc:subject
          removeValue: obsolete
        - op: move
          from: /assetMetadata/old:property
          path: /assetMetadata/new:property
        - op: test
          path: /assetMetadata/dc:title
          value: old value
        - op: replace
          path: /assetMetadata/dc:title
          value: new value
        - op: copy
          from: /assetMetadata/dc:title
          path: /assetMetadata/custom:title
    AssetRelationType:
      type: string
      description: The type of the relation
      minLength: 1
      example: sources
    AssetRelation:
      type: object
      description: Properties for a related asset
      properties:
        assetId:
          $ref: '#/components/schemas/AssetId'
        relationType:
          $ref: '#/components/schemas/AssetRelationType'
        repo:path:
          type: string
          description: Absolute path to related asset
          minLength: 1
          example: /content/dam/asset.png
        repo:name:
          type: string
          description: The name of the asset in the repository
          readOnly: true
          minLength: 1
          example: asset.png
      required:
        - assetId
        - relationType
        - repo:path
        - repo:name
    AssetRelationsResponse:
      type: object
      description: Paginated list of relations for this asset
      properties:
        items:
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/AssetRelation'
        cursor:
          $ref: '#/components/schemas/Cursor'
      required:
        - items
      example:
        items:
          - assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
            relationType: sources
            repo:path: /content/dam/test/document.pdf
            repo:name: document.pdf
          - assetId: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
            relationType: derived
            repo:path: /content/dam/test/image.png
            repo:name: image.png
        cursor: wqeaszrdxtgfcyguiohfgytdrsewq
    CreateAssetRelation:
      type: object
      description: Properties for creating a related asset
      properties:
        assetId:
          type: string
          description: The ID of the related asset
          minLength: 1
          example: urn:aaid:aem:1a034bee-ebda-4787-bad3-f924d0772b75
        relationType:
          $ref: '#/components/schemas/AssetRelationType'
      required:
        - assetId
        - relationType
    CreateAssetRelationsRequest:
      type: object
      properties:
        items:
          type: array
          uniqueItems: true
          description: Related assets to be added to the asset
          items:
            allOf:
              - $ref: '#/components/schemas/CreateAssetRelation'
      required:
        - items
    AssetRelationTypesResponse:
      type: object
      description: Paginated list of relation types that exist for this asset
      properties:
        items:
          type: array
          uniqueItems: true
          items:
            type: string
        cursor:
          $ref: '#/components/schemas/Cursor'
      required:
        - items
      example:
        items:
          - sources
          - derived
          - others
        cursor: wqeaszrdxtgfcyguiohfgytdrsewq
    AssetRenditionsItem:
      type: object
      properties:
        name:
          type: string
          description: name of the rendition
          minLength: 1
          example: 2023-lexus-rx-450hl.jpg
        format:
          type: string
          description: mime type of the rendition
          minLength: 1
          example: image/jpeg
        size:
          type: integer
          format: int64
          description: size of the rendition in bytes
          minimum: 1
        dimensions:
          type: object
          properties:
            width:
              type: integer
              format: int32
              minimum: 1
              description: Width of the rendition in pixels
            height:
              type: integer
              format: int32
              minimum: 1
              description: Height of the rendition in pixels
      required:
        - name
        - size
        - format
    AssetRenditionsList:
      type: object
      properties:
        assetId:
          $ref: '#/components/schemas/AssetId'
        repo:name:
          type: string
          description: The name of the asset in the repository
        items:
          type: array
          uniqueItems: true
          items:
            allOf:
              - $ref: '#/components/schemas/AssetRenditionsItem'
      required:
        - assetId
        - items
        - repo:name
    ImportAssetMetadata:
      description: |
        Metadata properties and values that should be applied to assets that are part of the import.
        Client should use the assetMetadata properties as exposed by the metadata API endpoints.
      type: object
      additionalProperties: true
      example:
        dc:title: My Asset
        dc:description: An example asset for import
    ImportTargetFolder:
      type: string
      description: The ID or path for the folder into which to import the assets in AEM.
      minLength: 1
      example: urn:aaid:aem:408646b2-a34d-4656-bf1a-b5a06cc9362f
    ImportFromUrlRequest:
      type: object
      properties:
        assetMetadata:
          $ref: '#/components/schemas/ImportAssetMetadata'
        folder:
          $ref: '#/components/schemas/ImportTargetFolder'
        files:
          type: array
          minItems: 1
          maxItems: 300
          items:
            type: object
            properties:
              assetMetadata:
                $ref: '#/components/schemas/ImportAssetMetadata'
              fileName:
                type: string
                description: Name of the file as it will appear in the repository after upload
              mimeType:
                type: string
                description: The file format of the resource
              fileSize:
                type: integer
                description: The size, in bytes, of the file to be imported
                format: int64
              url:
                type: string
                minLength: 10
                description: The url from which to import
                format: uri
            required:
              - fileName
              - url
        sourceName:
          type: string
          description: A user-friendly display name for the source of the assets
      required:
        - folder
        - files
      example:
        assetMetadata:
          dc:title: My Asset
          xmp:Rating: 5
          prism:expirationDate: '2019-01-01T00:00:00.000Z'
        folder: urn:aaid:aem:8964ca64-b302-5abe-88db-e1729385287b
        files:
          - fileName: My-Asset.jpeg
            assetMetadata:
              custom:test: custom-metadata
            mimeType: image/jpeg
            fileSize: 123456
            url: https://example.com/my-asset.jpg
    ImportJobId:
      description: The identifier for an import job
      type: string
      example: B79F5F05-06E2-4D12-A5AE-AD9BC308FCCF
    ImportOperation:
      type: string
      enum:
        - aem.assets.import.fromurl
    ImportJobProgress:
      type: object
      properties:
        failed:
          type: integer
          minimum: 0
          description: The number of assets that failed to import
        imported:
          type: integer
          minimum: 0
          description: The number of assets that have been imported
        lastImported:
          type: string
          description: The name of the last imported asset
          example: my-file.jpg
        lastUpdated:
          type: string
          minLength: 1
          format: date-time
          description: The date/time the import job was last updated
        skipped:
          type: number
          minimum: 0
          description: The number of assets which were skipped during import
        started:
          type: string
          minLength: 1
          format: date-time
          description: The date/time the import job started
        total:
          type: number
          format: int64
          minimum: 1
          description: The total number of assets to import
        size:
          type: number
          format: int64
          minimum: 0
          description: The total size, in bytes, of the assets to import
        step:
          description: the current import step
          type: string
          minLength: 4
          enum:
            - QUEUED
            - SCANNING
            - IMPORTING
            - DONE
        transferred:
          type: number
          format: int64
          minimum: 0
          description: The total size, in bytes, of the assets that have been transferred
      required:
        - failed
        - imported
        - lastUpdated
        - skipped
        - started
        - size
        - step
        - total
        - transferred
      example:
        failed: 1
        imported: 1
        lastImported: my-file.jpg
        lastUpdated: '2019-01-01T00:00:00.000Z'
        skipped: 0
        started: '2019-01-01T00:00:00.000Z'
        size: 123456
        step: DONE
        total: 2
        transferred: 2345
    CommandResultMessage:
      description: CommandResultMessage Object to encapsulate the result of a command.
      type: object
      properties:
        type:
          type: string
          description: A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) that identifies the message type.
          minLength: 1
        title:
          type: string
          description: A short, human-readable summary of the problem type.
          minLength: 1
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence of the problem.
        context:
          type: object
          description: |
            An optional object containing additional context information about the problem.

            Each command MUST provide its own schema definition for this object, by defining all the properties a client is
            expected to encounter.
      required:
        - type
        - title
    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'
    ImportJobState:
      description: The state of the import job.
      type: string
      enum:
        - PROCESSING
        - COMPLETED
        - FAILED
    ImportJobAcceptedStatus:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ImportJobId'
        operation:
          $ref: '#/components/schemas/ImportOperation'
        data:
          type: object
          properties:
            id:
              $ref: '#/components/schemas/ImportJobId'
            config:
              type: object
              required:
                - folder
                - items
              properties:
                assetMetadata:
                  $ref: '#/components/schemas/ImportAssetMetadata'
                folder:
                  $ref: '#/components/schemas/ImportTargetFolder'
                items:
                  type: array
                  uniqueItems: true
                  minItems: 1
                  description: The list of items to import
                  items:
                    type: string
                    description: URL from which to import
                    minLength: 1
                    format: string
            processedFiles:
              type: array
              description: List of files that have been processed by the import job
              items:
                type: object
            progress:
              $ref: '#/components/schemas/ImportJobProgress'
          required:
            - id
            - config
            - progress
        errors:
          $ref: '#/components/schemas/errors'
        warnings:
          $ref: '#/components/schemas/warnings'
        state:
          $ref: '#/components/schemas/ImportJobState'
      example:
        id: c82f6f05-07e3-5d13-b6bf-be0ac408fddf
        operation: aem.assets.import.fromurl
        data:
          id: c82f6f05-07e3-5d13-b6bf-be0ac408fddf
          config:
            assetMetadata:
              dc:title: My Asset
              xmp:Rating: 5
              prism:expirationDate: '2019-01-01T00:00:00.000Z'
            folder: urn:aaid:aem:8964ca64-b302-5abe-88db-e1729385287b
            items:
              - https://example.com/my-asset.jpg
          processedFiles: []
          progress:
            imported: 0
            failed: 0
            skipped: 0
            started: '2025-03-24T18:23:15.885Z'
            total: 2
            lastUpdated: '2025-03-24T18:23:15.885Z'
            size: 0
            transferred: 0
            step: QUEUED
        errors: []
        warnings: []
        state: PROCESSING
    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
    ImportJobStatus:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ImportJobId'
        operation:
          $ref: '#/components/schemas/ImportOperation'
        state:
          $ref: '#/components/schemas/ImportJobState'
        status:
          $ref: '#/components/schemas/status'
        description:
          $ref: '#/components/schemas/description'
        progress:
          $ref: '#/components/schemas/ImportJobProgress'
        errors:
          $ref: '#/components/schemas/errors'
        warnings:
          $ref: '#/components/schemas/warnings'
      example:
        id: B79F5F05-06E2-4D12-A5AE-AD9BC308FCCF
        description: OK
        operation: aem.assets.import.fromurl
        status: 202
        state: PROCESSING
        progress:
          imported: 1
          failed: 1
          skipped: 0
          started: '2019-01-01T00:00:00.000Z'
          total: 2
          lastUpdated: '2019-01-01T00:00:00.000Z'
          size: 123456
          transferred: 2345
          step: IMPORTING
        errors: []
        warnings: []
    ImportJobResult:
      type: object
      properties:
        cursor:
          $ref: '#/components/schemas/Cursor'
        items:
          type: array
          description: The list of files that have been processed by the import job whether successfully or not
          items:
            type: object
            description: The list of files that have been processed by the import job whether successfully or not
            properties:
              url:
                type: string
                description: The URL of the item
                format: url
                minLength: 1
              fileName:
                type: string
                description: The name of the item
                minLength: 1
              fileSize:
                type: integer
                description: The size of the item in bytes
                format: int64
                minimum: 0
              mimeType:
                type: string
                description: The file format of the resource
                minLength: 1
              assetId:
                $ref: '#/components/schemas/AssetId'
              error:
                type: object
                description: An error object if the item failed to import
                allOf:
                  - $ref: '#/components/schemas/ProblemDetails'
              status:
                type: string
                minLength: 6
                description: The status of the file
                enum:
                  - imported
                  - failed
                  - processing
            required:
              - fileName
      example:
        cursor: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtc2ciOiJZb3UgdGhvdWdodCB0aGlzIG1pZ2h0IGJlIHNvbWV0aGluZyBzZWNyZXQsIHJpZ2h0PyJ9.7xLHh_QS1f6oNd5oy5pXUBjDSQ-brOjBXxLbRDzOXAs
        items:
          - fileName: 000000089948.png
            mimeType: image/png
            fileSize: 150000
            url: https://example.com/images/test-image.png
            status: imported
            assetId: urn:aaid:aem:a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6
          - fileName: neom-ne3RC_Q9UEA-unsplash.jpg
            mimeType: image/jpeg
            fileSize: 324629
            status: failed
            error:
              type: http://api.adobeaemcloud.com/adobe/meta/errors/not_found
              title: Not Found
              status: 404
              detail: 'Could not import file neom-ne3RC_Q9UEA-unsplash.jpg, failed to preprocess: Failed to get download url for id:QqZmUXw658QAAAAAAAAGrw, not found'
    CloudEvents_3rdParty:
      description: |
        AEM Eventing uses the current schema definition for all eventing use cases. The schema definition is based on CloudEvents
        [1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md).

        h2. Changes
        All Events once published MUST be treated like API. Changes to the event schema MUST be backwards compatible,
        i.e. prefer non-breaking changes (adding a field) which don't require an event type change and don't break the consumer.
        However, if there is a breaking change, it MUST be a new event type, while the old one is still sent out until no consumer
        still requires it.
      type: object
      properties:
        id:
          description: |
            An identifier for the event.  When used in combination with the `source` property, it allows for each instance of
            an event to be uniquely identified.  That is to say, the combination of the `source` + `id` properties will be
            unique for each distinct event. If a duplicate event is re-sent (e.g. due to a network error) it may have the same 
            id and should be treated as a duplicate.
          type: string
          minLength: 1
        source:
          description: |
            An instance of the [acct URI scheme](https://www.rfc-editor.org/rfc/rfc7565.html) that uniquely identifies the
            producer of this event, of the format `acct:aem-p<programId>-e<environmentId>@adobe.com`.
          type: string
          format: uri
          pattern: ^acct:aem(-cmstg)?-p\d+-e\d+@adobe\.com$
          minLength: 1
        specversion:
          description: |
            The version of the CloudEvents specification which the event uses.  AEM events use the CloudEvents spec version 
            1.0.2, hence this value will be 1.0.
          type: string
          enum:
            - '1.0'
          minLength: 3
        type:
          description: |
            The type for the event.  This will identify the AEM solution that has dispatched the event and may also include
            the type of entity and the activity that occurred.
          type: string
          pattern: ^aem\..*$
          minLength: 4
        datacontenttype:
          description: |
            The format of the data in the event.  This will always be `application/json` for AEM events.
          type: string
          enum:
            - application/json
          minLength: 1
        dataschema:
          description: |
            An optional attribute, which may point to a JSON schema document that covers the data object.
          type: string
          format: uri
        time:
          description: |
            A timestamp of when the event occurred.
          type: string
          format: date-time
          minLength: 1
        data:
          description: |
            The event payload.
          type: object
      required:
        - id
        - source
        - specversion
        - type
        - datacontenttype
        - time
        - data
      example:
        specversion: '1.0'
        type: aem.assets.asset.created
        source: acct:aem-p56789-e12345@adobe.com
        id: 7c1104e5-4cd7-47d6-a50f-2568c480f2e9
        time: '2018-04-05T17:31:00Z'
        datacontenttype: application/json
        data:
          myProp: myValue
    EventAssetMetadata:
      type: object
      description: Metadata properties that have been extracted from the asset, derived during asset processing, or applied after ingestion.  These properties are, for the most part, editable.
      properties:
        xcm:machineKeywords:
          type: array
          description: Smart Tags that have been predicted for the asset during asset processing
          items:
            type: object
            properties:
              value:
                type: string
                description: The predicted tag for the asset
              confidence:
                type: number
                format: double
                description: The model's confidence score for this tag
        pur:expirationDate:
          type: string
          format: date-time
          description: The date and time when the asset will expire.
        dc:title:
          type: string
          description: A name given to the asset
      additionalProperties: true
      example:
        xcm:machineKeywords:
          - value: graphic design
            confidence: 0.926
          - value: clipart
            confidence: 0.757
        pur:expirationDate: '2023-04-17T06:31:07.174Z'
        dc:title: Asset name
    EventMetadata:
      type: object
      properties:
        assetId:
          $ref: '#/components/schemas/AssetId'
        repositoryMetadata:
          $ref: '#/components/schemas/RepositoryMetadata'
        assetMetadata:
          $ref: '#/components/schemas/EventAssetMetadata'
      example:
        value:
          assetId: urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
          assetMetadata:
            xcm:machineKeywords:
              - value: city
                confidence: 0.8512217998504639
                localeCode: en-US
            pur:expirationDate: '2023-04-17T06:31:07.174Z'
          repositoryMetadata:
            aem:assetState: processed
            aem:checkedOutBy: testuser@test.com
            dam:sha1: 8601cc48d27d85ae274c954286edfde34b907e12
            dc:format: image/jpeg
            repo:createDate: '2023-04-14T06:31:07.174Z'
            repo:createdBy: user@adobe.com
            repo:modifiedBy: dam-writer-service
            repo:modifyDate: '2023-04-15T05:01:44.229Z'
            repo:name: city.jpeg
            repo:path: /content/dam/city.jpeg
            repo:size: 338049
            repo:version: oak:1.0::ci:y7ngaf96th56jt62awk8xkoa37c572fe
            tiff:imageLength: 780
            tiff:imageWidth: 1000
            repo:repositoryId: author-p12345-e123456.adobeaemcloud.com
            repo:ancestors:
              - urn:aaid:aem:abcd1234-ab12-ab12-ab12-abcdef123456
            repo:state: ACTIVE
            aem:published: '2023-04-22T23:26:09.036Z'
    User:
      type: object
      description: Read-only properties of a user who generated an AEM event.
      properties:
        imsUserId:
          type: string
          description: The IMS user ID of the user who performed the action.
        principalId:
          type: string
          description: The AEM principal ID of the user who performed the action.
        displayName:
          type: string
          description: The display name of the user who performed the action.
    Tier:
      type: string
      description: The type of an AEM instance.
      enum:
        - author
        - publish
        - preview
    ImportJobStateInEvent:
      description: The state of the import job.
      type: string
      enum:
        - failed
        - completed
        - processing
  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
    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
    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.
    limit:
      in: query
      name: limit
      description: |
        For a paginated request, this parameter defines the maximum number of items to retrieve.
      schema:
        $ref: '#/components/schemas/Limit'
    cursor:
      in: query
      name: cursor
      description: |
        When the number of results for a request exceeds the allowed limit, the response will include a `cursor`.  That value can then be sent via this parameter on a subsequent request to retrieve the next set of items.
      schema:
        $ref: '#/components/schemas/Cursor'
    SEOName:
      in: path
      name: seoName
      description: any url-encoded or alphanumeric, non-whitespace set of characters. may contain hyphens and dots
      required: true
      schema:
        type: string
        pattern: ([%.\w-]+)
      examples:
        seo-name:
          value: banner
    RenditionName:
      in: path
      name: renditionName
      description: any url-encoded or alphanumeric, non-whitespace set of characters that need to match one of the renditions uploaded/created for the specified asset. may contain hyphens and dots
      required: true
      schema:
        type: string
        pattern: ([%.\w-]+)
      examples:
        seo-name:
          value: banner
    Attachment:
      in: query
      name: attachment
      description: |
        Setting this parameter to `true` forces "download" prompt in browser by adapting the `Content-Disposition` appropriately.

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

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

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

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

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

        For more details, please head over to [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-last-modified).
      required: true
  responses:
    304_NotModified_ETag:
      description: Not Modified
      content: {}
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
    400_BadRequest:
      description: |
        Bad Request.
        Indicates that the server cannot or will not process the request due to something that is perceived to be a client error. The Problem Details object will provide more information about the exact cause.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 400
                  title:
                    type: string
                    default: Bad Request
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/bad_request
            title: Bad Request
            status: 400
            detail: Bad request, please check that you have provided the correct parameters and that they are valid.
    401_Unauthorized:
      description: |
        Unauthorized. Indicates that the request has not been applied because it lacks valid authentication credentials for the target resource.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 401
                  title:
                    type: string
                    default: Unauthorized
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/unauthorized
            title: Unauthorized
            status: 401
            detail: The request did not contain a valid Authorization header.
    403_Forbidden:
      description: |
        Forbidden. Indicates that the server understood the request but refuses to fulfil it.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 403
                  title:
                    type: string
                    default: Forbidden
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/forbidden
            title: Forbidden
            status: 403
            detail: The credentials provided do not have sufficient permissions to access this resource.
    404_NotFound:
      description: |
        Not Found. Indicates that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 404
                  title:
                    type: string
                    default: Not Found
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/not_found
            title: Not Found
            status: 404
            detail: The requested resource could not be found.
    406_Unacceptable:
      description: |
        Not Acceptable.
        Indicates that the target resource does not have a current representation that would be acceptable to the user agent,
        according to the proactive negotiation header fields received in the request.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    example: Unacceptable
                  status:
                    type: integer
                    default: 406
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/not_acceptable
            title: Not Acceptable
            status: 406
            detail: |
              The target resource does not have a current representation that would be acceptable to the user agent, 
              according to the proactive negotiation header fields received in the request.
    204_NoContent:
      description: No Content
    413_ContentTooLarge:
      description: |
        Content Too Large. Indicates that the server is refusing to process a request because the request content is larger than the server is willing or able to process.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    default: Content Too Large
                  status:
                    type: integer
                    default: 413
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/content_too_large
            title: Content Too Large
            status: 413
            detail: The provided conditional header was not fulfilled.
    415_UnsupportedMediaType:
      description: |
        Unsupported Media Type. Indicates that the origin server is refusing to service the request because the content is in a format not supported by this method on the target resource.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    example: Unsupported Media Type
                  status:
                    type: integer
                    default: 415
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/unsupported_media_type
            title: Unsupported Media Type
            status: 415
            detail: This request is not acceptable because the payload is in an unsupported format.
    500_InternalServerError:
      description: |
        Internal Server Error. Indicates that the server encountered an unexpected condition that prevented it from fulfilling the request.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 500
                  title:
                    type: string
                    default: Internal Server Error
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/internal_server_error
            title: Internal Server Error
            status: 500
            detail: The server encountered an unexpected condition that prevented it from fulfilling the request.
    501_NotImplemented:
      description: |
        Not Implemented. Indicates that the server does not support the functionality required to fulfill the request.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 501
                  title:
                    type: string
                    default: Not Implemented
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/not_implemented
            title: Not Implemented
            status: 501
            detail: The server does not support the functionality required to fulfill the request.
    409_Conflict:
      description: |
        Conflict. Indicates that the request could not be completed due to a conflict with the current state of the target resource.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 409
                  title:
                    type: string
                    default: Conflict
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/conflict
            title: Conflict
            status: 409
            detail: The current state of the resource on the server is incompatible with your request.
    412_PreconditionFailed:
      description: |
        Precondition Failed. Indicates that one or more conditions given in the request header fields evaluated to false when tested on the server.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    default: Precondition Failed
                  status:
                    type: integer
                    default: 412
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/precondition_failed
            title: Precondition Failed
            status: 412
            detail: The provided conditional header was not fulfilled.
    422_UnprocessableEntity:
      description: |
        Unprocessable Content. Indicates that the server understands the content type of the request content (hence a 415 (Unsupported Media Type) status code is inappropriate), and the syntax of the request content is correct, but it was unable to process the contained instructions.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  status:
                    type: integer
                    default: 422
                  title:
                    type: string
                    default: Unprocessable Entity
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/unprocessable_entity
            title: Unprocessable Entity
            status: 422
            detail: |
              The syntax of the request entity is correct, but we are unable to process the contained instructions. This
              request should not be repeated without modification.
    428_PreconditionRequired:
      description: |
        Precondition Required. Indicates that the origin server requires the request to be conditional.
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ProblemDetails'
              - type: object
                properties:
                  title:
                    type: string
                    default: Precondition Required
                  status:
                    type: integer
                    default: 428
          example:
            type: http://api.adobeaemcloud.com/adobe/meta/errors/precondition_required
            title: Precondition Required
            status: 428
            detail: This operation requires the use of a conditional header.
    304_NotModified:
      description: Not Modified
      content: {}
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Last-Modified:
          $ref: '#/components/headers/Last-Modified'
