openapi: 3.1.0
info:
  title: CMP V2
  version: 1.0.0
  description: |
    # GET STARTED
    
    ## Overview
    This is a lightweight API that supports use cases which involve small subsets of asset, project and other data to be presented to a UI layer.

    **Some of the use cases the API does support:**

    * Asset pickers that provides a search, preview and download capability for assets within the DAM
    * Obtaining metadata about a specific asset
    * Obtaining the status of an asset
    * Downloading an asset's derivative
    * The modification of an asset's metadata
    * The creation of workflow projects
    * The modification of a projects data
    * Obtaining the status of a workflow project

    **This API does not support the following:**

    * Bulk data extraction of assets either by wide filters or multiple nested iterations
    * Bulk download or upload of assets
    * Polling in any shape or form
    * The download of binary assets, except for previews

    Please consult the glossary below for definitions of various platform-specific objects and terminology.

    > **NOTE:** If you require bulk operations, please contact the Integrations Team for more information at [cmp_integration@storyteq.com](mailto:cmp_integration@storyteq.com).
    
    ## Using our API
    To access and use our API, please get in touch with your account team who will provide you with the necessary credentials, as well as details of your specific implementation.

    It's important to note that the Storyteq Content Management Platform (CMP) is highly configurable, and in order to use the APIs, CMP must have been configured for your company in order for it to contain any meaningful data. Please request a consultation to understand the configuration for your particular instance of CMP.

    The discovery APIs will help with finding out the classification of your assets as well as IDs to be used in various API calls.
    
    ## Authentication
    Authentication is via OAuth 2.0 bearer tokens. Your account team will provide you with the following credentials:

    * Client ID
    * Username
    * Password
    * CMP-Tenant<sup>*</sup>

    To obtain a token, call the `/token` endpoint with the above credentials as follows:

    Header:
    
    ```
    Content-Type: application/json
    CMP-Tenant: 'xxxxxxxxxx'
    ```

    Body:

    ```json
    {
       "client_id": "cmp-v2-<dev|uat|prd>",
       "username": "xxx",
       "password": "xxx",
       "grant_type": "password"
    }
    ```

    Example cURL:

    ```sh
    curl --location 'https://enterprise.api-dev.storyteq.com/cmp/v2/token' \
    --header 'CMP-Tenant: xxxxx' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --data-raw '{
       "client_id": "cmp-v2-<dev|uat|prd>",
       "username": "xxxxxx",
       "password": "xxxxxx",
       "grant_type": "password"
    }'
    ```

    > <sup>*</sup> _The 'CMP Tenant' is the URL of your Content Marketing Platform instance, e.g.: `https://clinet.storyteq.com`_
    
    ## Discovery
    A number of API calls have been provided to discover classification and structure of the DAM particular to your company. Some API calls require a `domainID`, for example, and the endpoint `/ListDomains` will allow you to search for the domain you need by name and then use the ID in subsequent calls.

    The discovery APIs can be used to retrieve and cache IDs that are required in further API calls.

    It's important to note that while unlikely, these IDs can change if the DAM configuration is changed, and this is usually a result of the business teams requesting changes to support new initiatives.
    
    ## Search
    There are 3 mechanisms for searching and filtering assets:

    * Simple search term
      * Searches for assets by name
    * Filter results by simple parameters
      * List of asset IDs
      * Phase
      * Available
    * Complex filters, which are objects that are passed to and from the API that facilitate faceted search and provide real-time counts of assets returned per filter type
    
    ## Complex Filters
    Note: The JSON array containing the filters must be URL encoded in the API call.

    There are several different types of filters each with particular configuration characteristics. Multiple filters can be combined together.Every available filter has a similar structure but there are differences. The most powerful filter is the search filter.

    ### Search Filter

    The search filter can perform fuzzy or exact matches against resource names, keyword names, field values, metadata and tags.

    ### Search Filter Attributes:

    * `name` - The filter name. The filter name designates the type of filter when the type attribute is not used. When used with the type parameter, name may be used simply as a name/title for the filter. Filter names are included in the response. When not specifying a type attribute, the name must be searchFilter when a search filter is required.
    * `type` - The filter type (optional). Designates the type of the filter instead of using name. For search filters, the type value when used must be searchFilter.
    * `clauses` - specifies criteria for the search filter.

    Multiple search filters may be specified within the filters array. When multiple search filters are included, the relationship between them is an `AND` relationship - i.e. resources must match all the specified filters to be included in the result set.

    ### Clauses

    The clauses array contains 1 or more clauses. A clause has the following structure:

    * `flags` - an array of one or more of the following strings (optional). If not specified, the flags default is a fuzzy style search against resource names.
    * `Fuzzy` - indicates that the matching condition is a "like" style search i.e. the search target contains something like the search value. If not specified, an exact match comparison is performed.
    * `Name` - target the resource name in the search
    * `Keyword` - target resource keyword names in the search
    * `Field` - target resource field values in the search
    * `Metadata` - target resource metadata in the search (note this refers to custom defined metadata, not general resource properties)
    * `Tag` - target resource tags in the search
    * `name` - specifies the name of field when a particular field is the target (optional). If not specified, when there is a Field flag, all fields will be included in the search.
    * `value` - the search term

    When multiple search targets are specified in the flags array, the relationship between them is an `OR` relationship - i.e. if any of the target types specified match the search value, then the associated resource will be included in the result set.

    When multiple clauses are included, the relationship between them is an `AND` relationship - i.e. resources must match all the specified clauses to be included in the result set.

    ### Examples

    (This page does not support code blocks. Please format these in something like Visual Studio Code)

    Search for resources with a keyword like "fashion":

    ```
    filters=[{"name":"searchFilter","clauses":[{"flags":["Keyword","Fuzzy"],"value":"fashion"}]}]
    ```

    Search for resources with any keyword or any field value like "3":

    ```
    filters=[{"name":"searchFilter","clauses":[{"flags":["Keyword","Field","Fuzzy"],"value":"3"}]}]
    ```

    Search for resources that have a keyword like "face" and a "blob_url" field value like "Blob":

    ```
    filters=[{"name":"keyword face filter","type":"searchFilter","clauses":[{"flags":["Keyword","Fuzzy"],"value":"
    face"}]},{"name":"blob url blob filter","type":"searchFilter","clauses":[{"flags":["Field","Fuzzy"],"name":"
    blob_url","value":"Blob"}]}]
    ```


    **The below example shows the use of the combination of a keyword filter, type filter and period filter:**

    ```json
    [ { "name": "keywordFilter", "type": "com.intrepia.luma.KeywordFilter", "ignoreDomains": true, "ignoreApplied": false, "keywordIDs": [ 231 ] }, { "name": "typeFilter", "type": "com.intrepia.luma.TypeFilter", "applied": [ 349 ], "ignoreDomains": true, "ignoreApplied": false, "includeDescendants": true } { "name": "Date", "type": "com.intrepia.luma.PeriodFilter", "instant": "Modified", "from": "2024-02-06 23:59:00 GMT+0000", "until": "2024-02-08 23:59:00 GMT+0000" } ]
    ```
    
    ## Downloading Assets
    
    **Two important considerations when attempting to download an asset are:**
  
    * You cannot download binary files using the API, with the exception of thumbnails.
    * You cannot download the original asset file itself via the API. Instead, you must obtain a temporary signed URL of a derivative.
      
    Derivatives are generated when assets are uploaded, but must have a transform in place beforehand. It's also possible to manually force the creation of derivatives.
    
    Derivatives that are an identical copy of the original asset can be generated by using a 'Passthru' transform.

    **The following process should be followed to search for, identify and download an asset:**

    * ListAssets (domainID) – Get a list of assets, and find the relevant asset.
    * GetAssetDerivativeMenu (assetID) – Identify which derivative (by name) you need and get the transform ID.
    * DownloadAssetDerivative (assetID, transformID, operation=Link [forced]) – Obtain the signed temporary download link.

    > **NOTE: For the creation of transforms and the generation of derivatives please contact your account team.**
    
    ## Asset Previews
    Asset previews are triggered and generated in real-time when requests are made to `/DownloadAssetPreview`.

    If a number of asset previews are requested sequentially the previews may not be immediately available as they are generated asynchronously, in which case the HTTP response will be a 404.

    It's therefore advisable to implement a retry mechanism with an increasing delay between attempts, when writing code to make calls `/DownloadAssetPreview`.
    
    ## Rate Limiting
    To ensure the reliability and stability of our service for all users, we have implemented rate limits on API usage. Rate limits are caps on the number of API requests that you can make within a specified time period. These limits are applied to prevent any single user or service from overloading our systems, ensuring that our services remain highly available and performant for everyone.

    **Our primary goal is to provide a fair and efficient service to all our clients. Rate limiting helps us:**

    * Ensure equitable access: Prevents any single user or application from consuming a disproportionate share of resources.
    * Protect our infrastructure: Helps safeguard against accidental or intentional overuse that could degrade service quality.
    * Maintain service quality: Ensures that our API remains responsive and reliable for all users.

    **As a general guideline, our API allows for:**

    * 5,000 requests per minute per account.
    * 500,000 requests per month per account.
    
    ## Glossary
    ### Domains

    Domains are hierarchical containers that group all configuration for a specific organisation , department, business unit, country, market or any other logical division where you want separation of concerns. There are some basic rules to information and configuration in domains:

    * A user in a given domain has access to configuration and objects in all child domains
    * A user in a given domain has no access to any objects or configuration in a sibling or parent domain.
    * In some cases objects or configuration can inherit from a parent domain or propagate information to a child domain

    This structure allows for real-world organisation, for example having a global team being able to access a parent domain and all child domains, with local markets being able to access the child domain only, but not the reverse. In this example local markets cannot access each other's domains.

    ### Types

    Types are the backbone of asset and workflow organisation. Assets and workflow projects can be typed with rules applied to each type. For example an asset production brief project can be of a specific type, with it's own set of fields, taxonomy, milestones, states, user roles, and workflow processes. We can show assets of a certain type, allow downloads of assets of another type, instantiate different types of projects and move them through specific workflows.

    ### Taxonomy

    Multiple genera can be configured for any given client, domain, and type, each with it's own set of keywords, which are presented as dropdowns in the front-end. Taxonomy is used to categorise assets and projects, and are typically used for assigning things like brand, campaign type, market, country, aspect ratio, colour, production team, and any other business related dimension of an asset or project.

    ### Lenses

    A lens is a pre-configured filter, and is mostly used for providing a specific views of DAM assets to present to the user in the front-end. A lens can be useful for carrying out operations on a predefined set of assets. Via the API lenses can be used to mirror the view of assets a user will see in the front-end.

    Lenses can filter on type, file type, lifecycle phase, and keywords. Logic can be applied to keywords in lenses to include a combination of assets that have all specified keywords, any of the specified keywords, or none of the specified keywords.

    ### Transforms

    Transforms modify assets based on predefined rules to create asset derivatives. They have a scope and use a particular 'engine'. For example using a 'Passthru' engine will create a derivative identical to the original asset, and this is used in the front-end to make the asset available for download. A 'Chaos' engine can be used to modify an images properties, such as DPI, aspect ratio, height and width, format and colour space.

    It's important to note that in order to obtain a download link for an asset via the API, the asset must have a derivative, as that is the actual file that will be downloaded from the link. This is to ensure consistency with the front-end user experience.

    ### Sites

    These are simply the front-end portals that are used by the users to interact with assets and workflow projects. Multiple sites can be configured per domain, and can use different lenses to provide a different view of DAM assets and workflow processes.

    ### Folders

    Folders are used for managing assets in the configuration and management portal Luma, and are not presented to the user in the front-end platform.
    Keywords and types are the main categorisation and filtering mechanisms.

    ### Narratives

    Narratives are a kind of custom field against an asset. Two preconfigured narratives are Description and Usage, but other narratives can be created via the API by simply assigning them a name and value. These fields are not meant to store large amounts of data.

    ### Phase

    Assets have 3 phases, Quarantined, Active and Expired. Assets start their lifecycle with a phase of Quarantined, and are then made active manually or as part of a workflow process. The front-end asset views typically show Active assets only.

    ### Availability

    Assets have a window of time during which they are 'available'. Availability can be set against each asset in a number of ways:

    * Forever
    * A preset amount of time from now
    * A preset time from a point in the future
    * A custom start and optional expiry date

    ### Other Flags and Fields

    There are various other flags and fields that are set for an asset at various points in it's lifecycle, either manually or as part of a workflow.


    ### Assets in the Front-End DAM View

    For assets to appear to users in the front-end, they must be available, active and typically have a one or more keywords assigned that matches the particular lens that has been used for the asset page
    
    ## Fair Use Policy
    
    ### Introduction

    Welcome to Storyteq's API. Our Application Programming Interface (API) is designed to allow developers to create integrations between our platform and third-party platforms, fostering an ecosystem of interconnected applications that enhance user experiences. This API Fair Use Policy outlines the principles and guidelines for the fair and responsible use of our API.

    ### 1. General Principles

    * Use: Our API is provided to 3rd party developers, allowing for the creation and distribution of applications that integrate with our platform without financial obligations to Storyteq.
    * Compliance: Users of the API must comply with all applicable laws, regulations, and this policy. Any use of the API that violates these conditions is strictly prohibited.
    * Security and Privacy: Protecting the security and privacy of our users is paramount. Developers must implement appropriate security measures and respect user privacy in accordance with relevant laws and regulations.

    ### 2. Fair Use Guidelines

    * Rate Limits: To ensure equitable access and maintain the quality of service for all users, we impose rate limits on API requests. Developers must respect these limits and not attempt to circumvent them.
    * Data Usage: Data accessed through our API should be used in a way that adds value to users and should not be exploited for unauthorized purposes. Selling data obtained from our API is strictly prohibited.
    * Attribution: When integrating with third-party platforms, if relevant, appropriate attribution to Storyteq must be given, especially if data from our platform is displayed.
    * No Abuse: The API must not be used for any abusive purposes, including but not limited to spamming, launching Denial of Service (DoS) attacks, or distributing malware.

    ### 3. Modification and Revocation

    * Storyteq reserves the right to modify this policy, the API, or its functionalities at any time. Notice of significant changes will be provided to registered developers.
    * Revocation of Access: Abuse of the API or violation of this policy may result in temporary or permanent revocation of access to the API.

    ### 4. Support and Feedback

    * Support: Developers in need of support or those with questions regarding the API should contact he Storyteq integrations Team at [cmp_integration@storyteq.com](mailto:cmp_integration@storyteq.com).
    * Feedback: We welcome feedback and suggestions for improving our API and this policy. Please submit feedback to the address above.

    ### 5. Disclaimer

    * No Warranty: The API is provided "as is" without any warranties of any kind. Storyteq disclaims all warranties, whether express or implied, including without limitation, warranties of merchantability, fitness for a particular purpose, and non-infringement.

    ### Conclusion

    We aim to foster a vibrant ecosystem around our platform, and we believe that a fair and clear use policy is essential for building trust and encouraging innovation. We look forward to seeing the creative and beneficial ways developers will integrate with our platform.
    
    ## Contact Us
    
    For any of the following, kindly reach out to your account representative:

    * To talk about your needs and how you plan to utilise the API.
    * To gain insight into the particular configuration of your specific Content Marketing Platform instance.

    For any technical questions relating to the use of the API, please contact the Integrations Team at [cmp_integration@storyteq.com](mailto:cmp_integration@storyteq.com).
components:
  schemas:
    AddProjectResourcesFetchRequest:
      example:
        domainID: 0
        name: Sample Name
        projectID: 0
        schemaID: 0
        typeID: 0
        url: 'https://example.com/image.jpg'
      properties:
        domainID:
          format: int64
          type: integer
        name:
          type: string
        projectID:
          format: int64
          type: integer
        schemaID:
          format: int64
          type: integer
        typeID:
          format: int64
          type: integer
        url:
          format: uri
          type: string
      required:
        - projectID
        - url
        - schemaID
        - domainID
        - name
        - typeID
      type: object
    Affiliation:
      properties:
        assignable:
          type: boolean
        id:
          format: int64
          type: integer
        uuid:
          type: string
        workflowable:
          type: boolean
      type: object
    CreateProjectRootRequest:
      example:
        description: ''
        domainID: 0
        end: string
        fields:
          '0': string
          '1': string
        name: string
        ownerID: 0
        start: string
        typeID: 0
      properties:
        description:
          description: The description of the project
          type: string
        domainID:
          description: The ID of the domain
          format: int64
          type: integer
        end:
          description: End Date
          example: '2024-07-18 16:08:53 GMT+0100'
          type: string
        fields:
          additionalProperties: true
          description: 'Custom fields as key-value pairs:  "id": "value"'
          title: 'ID: value'
          type: object
        name:
          description: The name of the project
          type: string
        ownerID:
          description: The ID of the owner of the project that is being created
          format: int64
          type: integer
        start:
          description: Start date
          example: '2024-07-18 16:08:53 GMT+0100'
          type: string
        typeID:
          description: The ID of the type that the project is configured against
          format: int64
          type: integer
      required:
        - domainID
        - name
        - typeID
      type: object
    DownloadAssetDerivativeLinkResponse:
      properties:
        expires:
          pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT[\+|\-]\d{4}$'
          type: string
        generated:
          pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT[\+|\-]\d{4}$'
          type: string
        name:
          type: string
        url:
          type: string
      type: object
    EditAssetKeywordsRequest:
      properties:
        assetIDs:
          description: Comma separated list of assets to modify
          type: string
        keywordIDs:
          description: Comma separated list of keywords to add or remove
          type: string
        operation:
          description: >-
            Determines whether a keyword should be added or removed from the
            asset
          enum:
            - Add
            - Remove
          type: string
      required:
        - assetIDs
        - keywordIDs
        - operation
      type: object
    Filter:
      properties:
        applied:
          items:
            format: int64
            type: integer
          type: array
        clauses:
          items:
            $ref: '#/components/schemas/SearchClause'
          type: array
        counts:
          type: boolean
        folderID:
          format: int64
          type: integer
        folders:
          items:
            $ref: '#/components/schemas/Folder'
          type: array
        ignoreApplied:
          type: boolean
        ignoreDomains:
          type: boolean
        includeDescendants:
          type: boolean
        includeSubFolders:
          type: boolean
        keywordIDs:
          items:
            format: int64
            type: integer
          type: array
        keywords:
          items:
            $ref: '#/components/schemas/Keyword'
          type: array
        name:
          type: string
        operation:
          type: string
        options:
          items:
            properties:
              count:
                format: int32
                type: integer
              id:
                format: int64
                type: integer
              name:
                type: string
            type: object
          type: array
        taxonomy:
          items:
            $ref: '#/components/schemas/Taxonomy'
          type: array
        type:
          type: string
        types:
          items:
            $ref: '#/components/schemas/FilterType'
          type: array
      type: object
    FilterType:
      properties:
        count:
          format: int32
          type: integer
        id:
          format: int64
          type: integer
        name:
          type: string
        subtypes:
          items:
            $ref: '#/components/schemas/FilterType'
          type: array
      type: object
    Folder:
      properties:
        id:
          format: int64
          type: integer
        name:
          type: string
        subfolders:
          items:
            $ref: '#/components/schemas/Folder'
          type: array
      type: object
    Genus:
      properties:
        id:
          format: int64
          type: integer
        keywords:
          items:
            $ref: '#/components/schemas/Keyword'
          type: array
        name:
          type: string
        type:
          type: string
      type: object
    GetAssetDerivativeMenuResponse:
      properties:
        count:
          format: int64
          type: integer
        description:
          type: string
        id:
          format: int64
          type: integer
        name:
          type: string
        size:
          format: int64
          type: integer
        title:
          type: string
        uuid:
          format: uuid
          type: string
      type: object
    GetAssetFieldsResponse:
      properties:
        domain-title:
          type: string
        domain-uri:
          type: string
        domainID:
          format: int64
          type: integer
        id:
          format: int64
          type: integer
        inherited:
          type: boolean
        name:
          type: string
        nullable:
          type: boolean
        options:
          items:
            properties:
              id:
                type: string
              localisation:
                type: string
              option:
                type: string
              value:
                type: string
            type: object
          type: array
        primitive:
          type: string
        required:
          type: boolean
        title:
          type: string
        type-name:
          type: string
        type-uri:
          type: string
        typeID:
          format: int64
          type: integer
        uuid:
          type: string
      type: object
    GetAssetInfoResponse:
      properties:
        adaptor:
          type: string
        annotations-supported:
          type: boolean
        approved:
          type: boolean
        atom-UUID:
          format: uuid
          type: string
        atomID:
          format: int64
          type: integer
        available:
          type: boolean
        busy:
          type: boolean
        created:
          pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT[\+|\-]\d{4}$'
          type: string
        domain-id:
          type: string
        domain-title:
          type: string
        domain-uri:
          type: string
        embargoed:
          type: boolean
        flagged:
          type: boolean
        folder:
          type: string
        folderID:
          format: int64
          type: integer
        format-name:
          type: string
        hidden:
          type: boolean
        id:
          format: int64
          type: integer
        locked:
          type: boolean
        mirrors:
          format: int64
          type: integer
        modified:
          pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT[\+|\-]\d{4}$'
          type: string
        name:
          type: string
        phase:
          type: string
        placeholder:
          type: boolean
        rejected:
          type: boolean
        reviewing:
          type: boolean
        revision:
          type: string
        subscribed:
          type: boolean
        supertype:
          type: string
        tree:
          type: string
        type-name:
          type: string
        type-uri:
          type: string
        typeID:
          format: int64
          type: integer
        uuid:
          format: uuid
          type: string
      type: object
    GetAssetResponse:
      properties:
        ancestry:
          items:
            properties:
              id:
                type: integer
              name:
                type: string
              supertype:
                type: string
            type: object
          type: array
        approved:
          type: boolean
        archived:
          type: boolean
        atom:
          properties:
            adaptor:
              type: string
            assetID:
              type: integer
            created:
              type: string
            format:
              properties:
                adaptor:
                  type: string
                group:
                  type: boolean
                id:
                  type: integer
                mime:
                  type: string
                name:
                  type: string
                parentID:
                  type: integer
                suffix:
                  type: string
                title:
                  type: string
              required:
                - id
                - parentID
                - adaptor
                - name
                - title
                - mime
                - suffix
                - group
              type: object
            formatID:
              type: integer
            id:
              type: integer
            major:
              type: integer
            micro:
              type: integer
            minor:
              type: integer
            modified:
              type: string
            mutability:
              type: string
            name:
              type: string
            size:
              type: integer
            userID:
              type: integer
            uuid:
              type: string
          type: object
        atomID:
          type: integer
        available:
          type: boolean
        busy:
          type: boolean
        created:
          type: string
        creator:
          properties:
            contactID:
              type: integer
            deleted:
              type: boolean
            disabled:
              type: boolean
            domainID:
              type: integer
            email:
              type: string
            forename:
              type: string
            locked:
              type: boolean
            surname:
              type: string
            userID:
              type: integer
            uuid:
              type: string
          type: object
        deleted:
          type: boolean
        domainID:
          type: integer
        embargoed:
          type: boolean
        flagged:
          type: boolean
        folderID:
          type: integer
        hidden:
          type: boolean
        id:
          type: integer
        importID:
          type: integer
        locked:
          type: boolean
        modified:
          type: string
        name:
          type: string
        phase:
          type: string
        placeholder:
          type: boolean
        rejected:
          type: boolean
        supertype:
          type: string
        type:
          properties:
            created:
              type: string
            domainID:
              type: integer
            extensible:
              type: boolean
            id:
              type: integer
            leaf:
              type: boolean
            modified:
              type: string
            name:
              type: string
            parentID:
              type: integer
            rootable:
              type: boolean
            supertypeID:
              type: integer
            system:
              type: boolean
            uuid:
              type: string
          type: object
        typeID:
          type: integer
        uuid:
          type: string
      type: object
    GetAssetTaxonomyDomainResponse:
      properties:
        genera:
          items:
            properties:
              id:
                type: integer
              keywords:
                items:
                  properties:
                    genus-type:
                      type: string
                    id:
                      type: integer
                    localisation:
                      type: string
                    name:
                      type: string
                  required:
                    - genus-type
                    - id
                    - name
                  type: object
                type: array
              name:
                type: string
            type: object
          type: array
        id:
          type: integer
        title:
          type: string
        uri:
          type: string
      type: object
    GetAssetTaxonomyResponse:
      properties:
        id:
          type: integer
        keywords:
          items:
            properties:
              genus-type:
                type: string
              id:
                type: integer
              localisation:
                type: string
              name:
                type: string
            type: object
          type: array
        name:
          type: string
      type: object
    GetAssetURLsResponse:
      properties:
        description:
          type: string
        id:
          type: integer
        name:
          type: string
        silos:
          items:
            properties:
              id:
                type: integer
              name:
                type: string
              title:
                type: string
              urls:
                items:
                  type: string
                type: array
            required:
              - id
              - name
              - title
              - urls
            type: object
          type: array
        title:
          type: string
    GetGenusResponse:
      properties:
        domainID:
          type: string
        id:
          type: string
        name:
          type: string
        type:
          type: string
        uuid:
          type: string
      required:
        - id
        - domainID
        - uuid
        - name
        - type
      type: object
    GetProjectResponse:
      properties:
        asset:
          properties:
            ancestry:
              items:
                properties:
                  id:
                    type: integer
                  name:
                    type: string
                  supertype:
                    type: string
                type: object
              type: array
            approved:
              type: boolean
            archived:
              type: boolean
            available:
              type: boolean
            busy:
              type: boolean
            created:
              type: string
            creator:
              properties:
                contactID:
                  type: integer
                deleted:
                  type: boolean
                disabled:
                  type: boolean
                domainID:
                  type: integer
                email:
                  type: string
                forename:
                  type: string
                locked:
                  type: boolean
                surname:
                  type: string
                userID:
                  type: integer
                uuid:
                  type: string
              type: object
            deleted:
              type: boolean
            domainID:
              type: integer
            embargoed:
              type: boolean
            flagged:
              type: boolean
            folderID:
              type: integer
            hidden:
              type: boolean
            id:
              type: integer
            locked:
              type: boolean
            modified:
              type: string
            name:
              type: string
            phase:
              type: string
            placeholder:
              type: boolean
            rejected:
              type: boolean
            state:
              type: string
            stateID:
              type: integer
            supertype:
              type: string
            type:
              properties:
                created:
                  type: string
                domainID:
                  type: integer
                extensible:
                  type: boolean
                id:
                  type: integer
                initialStateID:
                  type: integer
                leaf:
                  type: boolean
                modified:
                  type: string
                name:
                  type: string
                parentID:
                  type: integer
                rootable:
                  type: boolean
                supertypeID:
                  type: integer
                system:
                  type: boolean
                uuid:
                  type: string
              type: object
            typeID:
              type: integer
            uuid:
              type: string
          type: object
        id:
          type: integer
        start:
          type: string
      type: object
    GetProjectRootTypesForDomainResponse:
      properties:
        domain-name:
          type: string
        domain-title:
          type: string
        domain-uri:
          type: string
        domainID:
          type: integer
        extensible:
          type: boolean
        id:
          type: integer
        name:
          type: string
        supertype:
          type: string
        system:
          type: boolean
        uri:
          type: string
        uuid:
          type: string
      type: object
    GetWorkflowUserTransitionsResponse:
      properties:
        commented:
          type: boolean
        id:
          format: int64
          type: integer
        stage:
          properties:
            id:
              format: int64
              type: integer
            metadata:
              properties:
                ui:
                  properties:
                    hideCaptureStateFields:
                      type: boolean
                    hideViewStateFields:
                      type: boolean
                    highlight-schema-items:
                      items:
                        type: string
                      type: array
                  type: object
              type: object
            name:
              type: string
            ordinal:
              type: integer
          type: object
      type: object
    Keyword:
      properties:
        applied:
          type: boolean
        count:
          format: int32
          type: integer
        domain-title:
          type: string
        domain-uri:
          type: string
        domainID:
          format: int64
          type: integer
        genus-alias:
          type: string
        genus-localisation:
          type: string
        genus-name:
          type: string
        genus-type:
          type: string
        genusID:
          format: int64
          type: integer
        id:
          format: int64
          type: integer
        localisation:
          type: string
        name:
          type: string
      type: object
    Lens:
      properties:
        created:
          format: date-time
          type: string
        id:
          format: int64
          type: integer
        modified:
          format: date-time
          type: string
        name:
          type: string
        type:
          type: string
        uuid:
          format: uuid
          type: string
      type: object
    ListAssetAvailabilityResponse:
      properties:
        available:
          type: boolean
        end:
          pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT[\+|\-]\d{4}$'
          type: string
        id:
          format: int64
          type: integer
        start:
          pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT[\+|\-]\d{4}$'
          type: string
      type: object
    ListAssetNarrativesResponse:
      properties:
        name:
          type: string
        value:
          type: string
      type: object
    ListAssetWorkflowsResponse:
      properties:
        asset-approved:
          type: boolean
        asset-available:
          type: boolean
        asset-embargoed:
          type: boolean
        asset-locked:
          type: boolean
        asset-name:
          type: string
        asset-state:
          type: string
        asset-supertype:
          type: string
        asset-type:
          type: string
        asset-uuid:
          type: string
        assetID:
          type: integer
        created:
          format: date-time
          type: string
        id:
          type: integer
        modified:
          format: date-time
          type: string
        process-name:
          type: string
        processID:
          type: integer
        stage-name:
          type: string
        stageID:
          type: integer
        state:
          type: string
        user-domain:
          type: string
        user-email:
          type: string
        user-name:
          type: string
        userID:
          type: integer
      type: object
    ListAssetsResponse:
      properties:
        call:
          type: string
        count:
          format: int32
          type: integer
        filters:
          items:
            $ref: '#/components/schemas/Filter'
          type: array
        limit:
          format: int32
          type: integer
        offset:
          format: int32
          type: integer
        order:
          type: string
        sort:
          type: string
        sorting:
          items:
            $ref: '#/components/schemas/Sorting'
          type: array
        table:
          items:
            properties:
              adaptor:
                type: string
              annotations-supported:
                type: boolean
              approved:
                type: boolean
              atomID:
                format: int64
                type: integer
              atomUUID:
                type: string
              available:
                type: boolean
              basketed:
                pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT[\+|\-]\d{4}$'
                type: string
              busy:
                type: boolean
              created:
                pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT[\+|\-]\d{4}$'
                type: string
              domainID:
                format: int64
                type: integer
              embargoed:
                type: boolean
              extension:
                type: string
              folderID:
                format: int64
                type: integer
              id:
                format: int64
                type: integer
              locked:
                type: boolean
              modified:
                pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT[\+|\-]\d{4}$'
                type: string
              name:
                type: string
              phase:
                type: string
              placeholder:
                type: boolean
              size:
                format: int64
                type: integer
              state:
                type: string
              stateID:
                format: int64
                type: integer
              subscribed:
                type: boolean
              supertype:
                type: string
              type:
                type: string
              typeID:
                format: int64
                type: integer
              uuid:
                type: string
            type: object
          type: array
        total:
          format: int32
          type: integer
        vector:
          format: int32
          type: integer
      type: object
    ListFoldersResponse:
      properties:
        id:
          format: int64
          type: integer
        name:
          type: string
        subfolders:
          items:
            $ref: '#/components/schemas/Folder'
          type: array
      type: object
    ListGeneraResponse:
      properties:
        id:
          format: int64
          type: integer
        name:
          type: string
        type:
          type: string
      type: object
    ListKeywordsResponse:
      properties:
        id:
          format: int64
          type: integer
        name:
          type: string
      type: object
    ListLensesForDomainResponse:
      properties:
        id:
          format: int64
          type: integer
        lenses:
          items:
            $ref: '#/components/schemas/Lens'
          type: array
        title:
          type: string
        uri:
          type: string
      type: object
    ListProcessesResponse:
      properties:
        enabled:
          type: boolean
        id:
          format: int64
          type: integer
        name:
          type: string
        type-name:
          type: string
        type-uri:
          type: string
        typeID:
          format: int64
          type: integer
        uuid:
          type: string
      type: object
    ListSiteResponse:
      properties:
        anonymous:
          type: boolean
        enabled:
          type: boolean
        id:
          type: integer
        metadata:
          properties:
            '-styles':
              properties:
                href:
                  type: string
              required:
                - href
              type: object
            '-toolbar':
              type: string
            batches:
              properties:
                default-submit-to-personal-domain:
                  type: boolean
              required:
                - default-submit-to-personal-domain
              type: object
            forms:
              properties:
                use-dropdowns-for-taxonomy:
                  type: boolean
                use-selects-instead-of-radios:
                  type: boolean
              required:
                - use-dropdowns-for-taxonomy
                - use-selects-instead-of-radios
              type: object
            includes:
              properties:
                asset-list:
                  type: object
                footer:
                  type: string
              required:
                - footer
                - asset-list
              type: object
            terms-and-conditions:
              properties:
                path:
                  type: string
                version:
                  type: integer
              required:
                - path
                - version
              type: object
          type: object
        name:
          type: string
        title:
          type: string
        uuid:
          type: string
      type: object
    ListTransformsResponse:
      properties:
        enabled:
          type: boolean
        id:
          type: integer
        kind:
          enum:
            - Derivative
            - Generator
            - Output
            - Recipe
          type: string
        name:
          type: string
        title:
          type: string
      type: object
    ListTypeFieldsByType:
      properties:
        fields:
          items:
            properties:
              created:
                type: string
              enabled:
                type: boolean
              id:
                type: integer
              inherited:
                type: boolean
              modified:
                type: string
              name:
                type: string
              ordinal:
                type: integer
              primitive:
                type: string
              title:
                type: string
              uuid:
                type: string
            type: object
          type: array
        id:
          type: integer
        kingdom:
          type: string
        name:
          type: string
        supertype:
          type: string
        system:
          type: boolean
        uri:
          type: string
        uuid:
          type: string
      type: object
    ListTypeSchemaResponse:
      properties:
        cascade:
          type: boolean
        id:
          format: int64
          type: integer
        inherited:
          type: boolean
        instantiate:
          type: boolean
        label:
          type: string
        name:
          type: string
        parent-type-name:
          type: string
        parent-type-uri:
          type: string
        parent-typeID:
          format: int64
          type: integer
        subtypes:
          type: boolean
        type-name:
          type: string
        type-uri:
          type: string
        typeID:
          format: int64
          type: integer
      type: object
    ListTypeTreeResponse:
      properties:
        domain-name:
          type: string
        domain-title:
          type: string
        domain-uri:
          type: string
        domainID:
          type: integer
        id:
          type: integer
        kingdom:
          type: string
        name:
          type: string
        rootable:
          type: boolean
        subtypes:
          items:
            properties:
              domain-name:
                type: string
              domain-title:
                type: string
              domain-uri:
                type: string
              domainID:
                type: integer
              id:
                type: integer
              kingdom:
                type: string
              name:
                type: string
              rootable:
                type: boolean
              subtypes:
                items:
                  type: string
                type: array
              supertype:
                type: string
              system:
                type: boolean
              uri:
                type: string
              uuid:
                type: string
            type: object
          type: array
        supertype:
          type: string
        system:
          type: boolean
        uri:
          type: string
        uuid:
          type: string
      type: object
    ListUserDomainsResponse:
      properties:
        id:
          format: int64
          type: integer
        title:
          type: string
        type:
          type: string
        uri:
          type: string
        uuid:
          format: uuid
          type: string
        writable:
          type: boolean
      type: object
    ListUserProjectNodesResponse:
      properties:
        accepting-time:
          type: boolean
        annotations-supported:
          type: boolean
        approved:
          type: boolean
        available:
          type: boolean
        busy:
          type: boolean
        created:
          type: string
        domainID:
          type: integer
        embargoed:
          type: boolean
        flagged:
          type: boolean
        folderID:
          type: integer
        hidden:
          type: boolean
        id:
          type: integer
        locked:
          type: boolean
        milestones:
          items:
            type: string
          type: array
        modified:
          type: string
        name:
          type: string
        open-task-count:
          type: integer
        owners:
          items:
            properties:
              domainID:
                type: integer
              email:
                type: string
              name:
                type: string
              node:
                type: string
              type:
                type: string
            type: object
          type: array
        phase:
          type: string
        placeholder:
          type: boolean
        project-start:
          type: string
        rejected:
          type: boolean
        reviewing:
          type: boolean
        state:
          type: string
        stateID:
          type: integer
        subscribed:
          type: boolean
        supertype:
          type: string
        type:
          type: string
        type-leaf:
          type: boolean
        typeID:
          type: integer
        uuid:
          type: string
        workflow:
          properties:
            created:
              type: string
            id:
              type: integer
            modified:
              type: string
            process-name:
              type: string
            processID:
              type: integer
            stage-name:
              type: string
            stageID:
              type: integer
            state:
              type: string
            user-email:
              type: string
            user-forename:
              type: string
            user-surname:
              type: string
            userID:
              type: integer
          required:
            - id
            - state
            - userID
            - user-forename
            - user-surname
            - user-email
            - stageID
            - stage-name
            - processID
            - process-name
            - created
            - modified
          type: object
      type: object
    SearchClause:
      properties:
        affiliations:
          items:
            $ref: '#/components/schemas/Affiliation'
          type: array
        flags:
          items:
            type: string
          type: array
        name:
          type: string
        realm:
          type: string
        value:
          type: string
      type: object
    SetAssetFieldsRequest:
      properties:
        assetID:
          description: The ID of the asset
          format: int64
          type: integer
        fields:
          additionalProperties:
            items:
              type: string
            type: array
          type: object
      required:
        - assetID
        - fields
      type: object
    SetAssetNarrativeRequest:
      properties:
        assetID:
          description: The ID of the asset
          format: int64
          type: integer
        name:
          default: Description
          description: >-
            The name of the narrative field to modify. This should be
            'Description' or 'Usage'.
          type: string
        value:
          description: The value to be stored in the narrative field
          type: string
      required:
        - assetID
        - value
        - name
      type: object
    Sorting:
      properties:
        name:
          type: string
        title:
          type: string
      type: object
    Taxonomy:
      properties:
        domainID:
          format: int64
          type: integer
        genera:
          items:
            $ref: '#/components/schemas/Genus'
          type: array
        genusID:
          format: int64
          type: integer
        id:
          format: int64
          type: integer
        keywords:
          items:
            $ref: '#/components/schemas/Keyword'
          type: array
        name:
          type: string
        title:
          type: string
        type:
          type: string
        uri:
          type: string
      type: object
    TokenResponse:
      properties:
        access_token:
          type: string
        expires_in:
          type: integer
        id_token:
          type: string
        refresh_token:
          type: string
        scope:
          type: string
        token_type:
          type: string
      type: object
    WorkflowStartRequest:
      example:
        assetID: 0
        processID: 0
      properties:
        assetID:
          description: The ID of the project (assetID)
          format: int64
          type: integer
        processID:
          description: The ID of the process to start
          format: int64
          type: integer
      required:
        - assetID
        - processID
      type: object
    WorkflowTransitionRequest:
      example:
        transitionID: 0
        workflowID: 0
      properties:
        transitionID:
          description: The ID of the transition
          format: int64
          type: integer
        workflowID:
          description: The ID of the workflow
          format: int64
          type: integer
      required:
        - workflowID
        - transitionID
      type: object
    refreshTokenRequest:
      properties:
        client_id:
          description: Value provided by ITG account team
          example: ''
          type: string
        grant_type:
          default: refresh_token
          description: Always 'refresh_token'
          enum:
            - refresh_token
          example: ''
          type: string
        refresh_token:
          description: refresh token acquired from prior token request
          example: ''
          type: string
      type: object
    tokenRequest:
      properties:
        client_id:
          description: Value provided by ITG account team
          example: ''
          type: string
        grant_type:
          default: password
          description: Always 'password'
          enum:
            - password
          example: ''
          type: string
        password:
          description: Value provided by ITG account team
          example: ''
          type: string
        username:
          description: Value provided by ITG account team
          example: ''
          type: string
      type: object
  securitySchemes:
    bearer:
      scheme: bearer
      type: http
    jwtAuth:
      bearerFormat: JWT
      scheme: bearer
      type: http
paths:
  /AddProjectResourcesFetch:
    post:
      description: >-
        Add resources to a project, by passing in a URL,from which the resource
        will be asynchronously imported.
      operationId: AddProjectResourcesFetch
      parameters:
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddProjectResourcesFetchRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                description: The new asset ID within the project.
                format: uint64
                type: integer
          description: OK
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Add Project Resources From URL
      tags:
        - Projects
  /CreateProjectRoot:
    post:
      description: Create a project of a specified type.
      operationId: CreateProjectRoot
      parameters:
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProjectRootRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                description: The project ID
                format: uint64
                type: integer
          description: OK
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Create Project
      tags:
        - Projects
  /DownloadAssetDerivative:
    get:
      description: Returns a signed download link for the asset.
      operationId: DownloadAssetDerivative
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            type: integer
        - description: The ID of the transform
          in: query
          name: transformID
          required: true
          schema:
            format: int64
            type: integer
        - description: The download response type
          in: query
          name: operation
          required: true
          schema:
            enum:
              - Link
            type: string
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadAssetDerivativeLinkResponse'
          description: The link to the asset derivative file.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Download Asset Derivative
      tags:
        - Assets
  /DownloadAssetPreview:
    get:
      description: Download a binary thumbnail of an asset.
      operationId: DownloadAssetPreview
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            type: integer
        - description: The download response type
          in: query
          name: recipe
          required: true
          schema:
            enum:
              - Icon_512
              - icon_512
              - Icon-512
              - icon-512
              - Icon_256
              - icon_256
              - Icon-256
              - icon-256
              - Icon_128
              - icon_128
              - Icon-128
              - icon-128
              - Icon_64
              - icon_64
              - Icon-64
              - icon-64
            type: string
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
          description: The binary thumbnail of the specified asset.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Download Asset Thumbnail
      tags:
        - Assets
  /EditAssetKeywords:
    post:
      description: Add or remove keywords from an asset.
      operationId: EditAssetKeywords
      parameters:
        - description: Bind to Asset
          in: query
          name: binding
          required: true
          schema:
            enum:
              - Asset
            type: string
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditAssetKeywordsRequest'
      responses:
        '204':
          content:
            application/json:
              schema:
                type: object
          description: >-
            No Content. The server successfully processed the request, but is
            not returning any content.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Edit Asset Keywords
      tags:
        - Assets
  /GetAsset:
    get:
      description: Get metadata for the specified asset.
      operationId: GetAsset
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAssetResponse'
          description: Information on the specified asset.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Get Asset Metadata
      tags:
        - Assets
  /GetAssetDerivativeMenu:
    get:
      description: Get a list of objects representing derivatives.
      operationId: GetAssetDerivativeMenu
      parameters:
        - description: A comma separated list of asset IDs
          in: query
          name: assetIDs
          required: true
          schema:
            type: string
        - description: Specifies the required operation
          in: query
          name: intents
          required: true
          schema:
            enum:
              - Download
            type: string
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/GetAssetDerivativeMenuResponse'
                type: array
          description: >-
            An array of objects that represent the derivative, and contain the
            information about the transform used.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Get Derivative Information
      tags:
        - Assets
  /GetAssetFields:
    get:
      description: Get a list of custom fields and their values for a specified asset.
      operationId: GetAssetFields
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/GetAssetFieldsResponse'
                type: array
          description: >-
            An array of field objects containing the name and values of fields
            associated with the specified asset.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Get Asset Fields
      tags:
        - Assets
  /GetAssetInfo:
    get:
      description: Returns extended metadata for a specific asset.
      operationId: GetAssetInfo
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAssetInfoResponse'
          description: Extended information on the specified asset.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Get Extended Asset Metadata
      tags:
        - Assets
  /GetAssetTaxonomy:
    get:
      description: Get a list of taxonomy objects for a specified asset.
      operationId: GetAssetTaxonomy
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            format: int64
            type: integer
        - description: Whether or not to ignore the domain object in the response.
          example: ''
          in: query
          name: ignoreDomains
          required: true
          schema:
            type: boolean
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  oneOf:
                    - $ref: '#/components/schemas/GetAssetTaxonomyResponse'
                    - $ref: '#/components/schemas/GetAssetTaxonomyDomainResponse'
                type: array
          description: An array of taxonomy objects for the specified asset.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Get Asset Taxonomy
      tags:
        - Assets
  /GetAssetURLs:
    get:
      description: >-
        Returns a list of external storage URLs. External storage must be
        implemented for the specific CMP-Tenant.
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/GetAssetURLsResponse'
                type: array
          description: An array of objects containing the external URLs of the asset.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: 'Get Asset External URLs '
      tags:
        - Assets
  /GetGenus:
    get:
      description: Gets details of a specific genus.
      operationId: GetGenus
      parameters:
        - description: The ID of the genus
          in: query
          name: genusID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/GetGenusResponse'
                type: array
          description: Success
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Server Error
      security:
        - bearer: []
      summary: Get Genus
      tags:
        - Configuration
  /GetProject:
    get:
      description: Gets details of a project.
      operationId: GetProject
      parameters:
        - example: 47642
          in: query
          name: projectID
          required: true
          schema:
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetProjectResponse'
          description: Information on the specified project.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Get Project Metadata
      tags:
        - Projects
  /GetProjectRootTypesForDomain:
    get:
      description: Gets a list of type objects that can initiate a project.
      operationId: GetProjectRootTypesForDomain
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetProjectRootTypesForDomainResponse'
          description: Array of type objects
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetProjectRootTypesForDomainResponse'
          description: Internal Server Error
      security:
        - bearer: []
      summary: Get Project Root Types For Domain
      tags:
        - Projects
  /GetWorkflowUserTransitions:
    get:
      description: >-
        Returns an array of transitions that are available for the specified
        workflow.
      operationId: GetWorkflowUserTransitions
      parameters:
        - description: The ID of the workflow
          in: query
          name: workflowID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/GetWorkflowUserTransitionsResponse'
                type: array
          description: An array of workflows for the specified project.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Get Workflow User Transitions
      tags:
        - Workflows
  /ListAssetAvailability:
    get:
      description: Lists the availabilities for a specified asset.
      operationId: ListAssetAvailability
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListAssetAvailabilityResponse'
                type: array
          description: An array of availabilities for the specified asset.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Asset Availability
      tags:
        - Assets
  /ListAssetNarratives:
    get:
      description: >-
        Return an narrative associated with an asset. Options are Usage and
        Description, although custom narratives can be created.
      operationId: ListAssetNarratives
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListAssetNarrativesResponse'
                type: array
          description: An array of narratives for the specified asset.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Asset Narratives
      tags:
        - Assets
  /ListAssetWorkflows:
    get:
      description: >-
        Returns an array of workflows for the specified project (Projects are a
        type of asset).
      operationId: ListAssetWorkflows
      parameters:
        - description: The ID of the asset
          in: query
          name: assetID
          required: true
          schema:
            format: int64
            type: integer
        - description: Specifies whether to only select active workflows.
          in: query
          name: active
          required: true
          schema:
            type: boolean
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListAssetWorkflowsResponse'
                type: array
          description: An array of workflows for the specified project.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Project Workflows
      tags:
        - Workflows
  /ListAssets:
    get:
      description: >-
        Lists assets using a variety of search terms, complex filters and
        states. The results are returned in sets of 100. In order to retrieve
        the next set, increment the 'listing-offset' parameter by the
        'listing-limit', which is set to 100. Please see the separate
        documentation for the use of complex filters.
      operationId: ListAssets
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - description: Specifies the attribute to sort by
          in: query
          name: listing-sort
          schema:
            default: asset-name
            enum:
              - asset-name
              - asset-created
              - asset-modified
              - asset-type
              - asset-state
            type: string
        - description: The direction of the sort
          in: query
          name: listing-order
          schema:
            default: Ascending
            enum:
              - Ascending
              - Descending
            type: string
        - description: >-
            Specifies the index of the first record of the set of records to be
            returned in multiples of the 'limit', which is set to 100. Used for
            paging.
          in: query
          name: listing-offset
          schema:
            default: 0
            format: int32
            type: integer
        - description: Returns the results in paged format
          in: query
          name: listing-style
          required: true
          schema:
            enum:
              - Page
            type: string
        - description: Specifies the number of results to be returned per page
          in: query
          name: listing-limit
          required: true
          schema:
            enum:
              - '20'
              - '50'
              - '100'
            type: string
        - description: Include assets from all parent domains
          in: query
          name: inherit
          schema:
            default: false
            type: boolean
        - description: >-
            Omit parameter to include all available and unavailable assets -
            only available assets are visible in the CMP platform front-end,
            unless the user permissions (services) are modified.
          in: query
          name: available
          schema:
            default: false
            type: boolean
        - description: >-
            The UUID of the Lens that has been specifically configured to filter
            assets
          in: query
          name: lensID
          schema:
            type: string
        - description: The complex filter objects that determine the assets returned
          example: []
          in: query
          name: filters
          schema:
            type: string
        - description: Simple text search on asset name
          in: query
          name: search
          schema:
            type: string
        - description: Comma separated list of assets to filter on
          in: query
          name: ids
          schema:
            type: string
        - description: The phase of the asset
          in: query
          name: phase
          required: true
          schema:
            enum:
              - Active
            type: string
        - description: Must be set to 'Assets'
          in: query
          name: collation
          required: true
          schema:
            enum:
              - Assets
            type: string
        - description: Must be set to 'Assets'
          in: query
          name: tree
          required: true
          schema:
            enum:
              - Assets
            type: string
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListAssetsResponse'
                type: array
          description: An array of Asset objects that meet the given criteria.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Assets
      tags:
        - Assets
  /ListFolders:
    get:
      description: >-
        List all available folders for the domain. Folders are used to organise
        assets, but are not visible in the user front-end.
      operationId: ListFolders
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListFoldersResponse'
                type: array
          description: A hierarchical array of folder objects.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Folders for Domain
      tags:
        - Configuration
  /ListGenera:
    get:
      description: >-
        Lists all genera for the specified domain. The taxonomy of assets is
        described by keywords, grouped by genera.
      operationId: ListGenera
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListGeneraResponse'
                type: array
          description: An array of Genera objects for the specified domain.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Genera for Domain
      tags:
        - Configuration
  /ListKeywords:
    get:
      description: List all keywords for the specified domain.
      operationId: ListKeywords
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - description: The ID of the genus
          in: query
          name: genusID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListKeywordsResponse'
                type: array
          description: An array of Keyword objects for the specified Genus.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Keywords for Genus
      tags:
        - Configuration
  /ListLensesForDomain:
    get:
      description: >-
        List all lenses for the specified domain and it's parent domains. A lens
        is a type of filter.
      operationId: ListLensesForDomain
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - description: >-
            Ignore the domain object in the response. If true, returns an array
            of lens objects only.
          example: ''
          in: query
          name: ignoreDomains
          required: true
          schema:
            type: boolean
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  oneOf:
                    - $ref: '#/components/schemas/ListLensesForDomainResponse'
                    - $ref: '#/components/schemas/Lens'
                type: array
          description: An array of Lens objects for the specified domain.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Lenses for Domain
      tags:
        - Configuration
  /ListProcesses:
    get:
      description: Lists the workflow processes available for a specified domain.
      operationId: ListProcesses
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListProcessesResponse'
                type: array
          description: An array of workflow processes for the specified domain.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Workflow Processes
      tags:
        - Workflows
  /ListSites:
    get:
      description: >-
        List all sites configured for the domain. Sites are content managed
        presentation layer 'portals' for users to interact with the platform.
      operationId: ListSites
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListSiteResponse'
                type: array
          description: A array of Site objects.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Sites for Domain
      tags:
        - Configuration
  /ListTransforms:
    get:
      description: >-
        List all transforms for the specified domain. Transforms modify assets
        dimensions to create derivatives.
      operationId: ListTransforms
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListTransformsResponse'
                type: array
          description: An array of Transforms for the specified domain.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Transforms for Domain
      tags:
        - Configuration
  /ListTypeFieldsByType:
    get:
      description: 'Lists custom fields by type, and provides a search function.'
      operationId: ListTypeFieldsByType
      parameters:
        - description: The ID of the type
          in: query
          name: typeID
          required: true
          schema:
            format: int64
            type: integer
        - description: Search term for the field name
          in: query
          name: search
          schema:
            type: string
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListTypeFieldsByType'
          description: An array of fields per type
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Type Fields By Type
      tags:
        - Configuration
  /ListTypeSchema:
    get:
      description: >-
        Lists all schemas for a given project type. Schemas are used to tag and
        type the uploaded file.
      operationId: ListTypeSchema
      parameters:
        - description: The ID of the project type
          in: query
          name: typeID
          required: true
          schema:
            format: int64
            type: integer
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListTypeSchemaResponse'
                type: array
          description: An array of schema objects for the specified project type.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Schemas for Project Type
      tags:
        - Configuration
  /ListTypeTree:
    get:
      description: List the hierarchical type tree for the specified domain.
      operationId: ListTypeTree
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - description: Whether to include all subdomain types
          in: query
          name: allSubdomains
          schema:
            default: false
            type: boolean
        - description: Whether to include deleted types in the results
          in: query
          name: includeDeleted
          schema:
            default: false
            type: boolean
        - description: Search term for the type name
          in: query
          name: search
          schema:
            type: string
        - description: Must be set to 'Asset'
          in: query
          name: kingdom
          required: true
          schema:
            enum:
              - Asset
            type: string
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListTypeTreeResponse'
          description: A hierarchical representation of types for the domain
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List Type Tree
      tags:
        - Configuration
  /ListUserDomains:
    get:
      description: >-
        List all available user Domains. Domains are containers for all assets,
        workflows and projects.
      operationId: ListUserDomains
      parameters:
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ListUserDomainsResponse'
                type: array
          description: An array of domain objects.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: List User Domains
      tags:
        - Configuration
  /ListUserProjectNodes:
    get:
      description: >-
        Lists projects using a type, or complex filters. The results are
        returned in sets of 50. In order to retrieve the next set, increment the
        'listing-offset' parameter by the 'listing-limit', which is set to 50.
        Please see the separate documentation for the use of complex filters.
      operationId: ListUserProjectNodes
      parameters:
        - description: The ID of the domain
          in: query
          name: domainID
          required: true
          schema:
            format: int64
            type: integer
        - description: >-
            Specifies the index of the first record of the set of records to be
            returned in multiples of the 'limit', which is set to 50. Used for
            paging.
          in: query
          name: listing-offset
          schema:
            format: int64
            type: integer
        - description: Specifies the attribute to sort by
          in: query
          name: listing-sort
          schema:
            enum:
              - asset-name
              - asset-created
              - asset-modified
              - asset-type
              - asset-state
            type: string
        - description: The direction of the sort
          in: query
          name: listing-order
          schema:
            type: string
        - description: Specifies the number of results to be returned per page
          in: query
          name: listing-limit
          required: true
          schema:
            enum:
              - '20'
              - '50'
              - '100'
            type: string
        - description: Returns the results in paged format
          in: query
          name: listing-style
          required: true
          schema:
            enum:
              - Page
            type: string
        - description: >-
            String specifying the type ID and whether to include subtypes:
            '{"typeID":"186","subtypes":true}'
          in: query
          name: specifier
          schema:
            type: string
        - description: Whether to include subdomain projects in the results
          in: query
          name: include-subdomains
          schema:
            default: false
            type: boolean
        - description: The complex filter objects that determine the assets returned
          in: query
          name: filters
          schema:
            type: string
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListUserProjectNodesResponse'
          description: Returns a project object
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetProjectRootTypesForDomainResponse'
          description: Internal Server Error
      security:
        - bearer: []
      summary: List User Project Nodes
      tags:
        - Projects
  /SetAssetFields:
    post:
      description: Sets a value for one or more asset fields.
      operationId: SetAssetFields
      parameters:
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetAssetFieldsRequest'
      responses:
        '204':
          content:
            application/json:
              schema:
                type: object
          description: >-
            No Content. The server successfully processed the request, but is
            not returning any content.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Set Asset Fields
      tags:
        - Assets
  /SetAssetNarrative:
    post:
      description: 'Sets the Description, Usage or custom values for an asset.'
      operationId: SetAssetNarrative
      parameters:
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetAssetNarrativeRequest'
      responses:
        '204':
          content:
            application/json:
              schema:
                type: object
          description: >-
            No Content. The server successfully processed the request, but is
            not returning any content.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Set Asset Narratives
      tags:
        - Assets
  /WorkflowStart:
    post:
      description: Starts the specified workflow process for a given project ID (assetID).
      operationId: WorkflowStart
      parameters:
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkflowStartRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                description: The workflow ID
                format: uint64
                type: integer
          description: OK
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Start a Workflow
      tags:
        - Workflows
  /WorkflowTransition:
    post:
      description: Transitions the specified workflow using a specified transition ID.
      operationId: WorkflowTransition
      parameters:
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkflowTransitionRequest'
      responses:
        '204':
          description: >-
            No Content - Successfully processed the request, but there is no
            content to return.
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Internal Server Error
      security:
        - bearer: []
      summary: Transition a Workflow
      tags:
        - Workflows
  /token:
    post:
      operationId: token
      parameters:
        - example: ''
          in: header
          name: CMP-Tenant
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/tokenRequest'
                - $ref: '#/components/schemas/refreshTokenRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
          description: Success
        '500':
          content:
            application/json:
              schema:
                type: object
          description: Server Error
      summary: Get JWT Token
      tags:
        - Authentication
security:
  - jwtAuth: []
servers:
  - url: 'https://enterprise.api.storyteq.com/cmp/v2/'
tags:
  - name: Authentication
  - name: Configuration
  - name: Assets
  - name: Projects
