openapi: 3.0.3
info:
  title: VMware Tanzu Application Catalog Public API
  description: |
    Manage your VMware Tanzu Application Catalog

    ## How to authenticate
    We are going to describe the steps to obtain valid credentials to authenticate against the endpoints of this API.

    ### Generate a CSP API Token
    As a prerequisite, you need a CSP API Token with the Service Role "VMware Tanzu Application Catalog". You need only perform this once (and regenerate it before the token expires).

    You can generate it in the [VMware Cloud Console](https://console.tanzu.broadcom.com/), in My Account -> API Tokens, by clicking on "GENERATE TOKEN" and selecting the Service Role "VMware Tanzu Application Catalog", choosing the right role.

    That will generate an alphanumeric token that you should safely save/store. That token will be the "refresh token" used in next steps.

    ### Obtain an access token
    For obtaining an access token you need to send a POST request to CSP API using the API token from the previous step as refresh token:
    <pre>
      <code class="language-yaml">
        curl -s -X POST "https://console.tanzu.broadcom.com/csp/gateway/am/api/auth/api-tokens/authorize?refresh_token=CSP_TOKEN"
      </code>
    </pre>

    The response JSON will have a property named "access_token". Its value is what you'll need to send as the bearer token to authenticate. By default it expires after 30 min.

    <pre>
      <code class="language-yaml">
        {
          "id_token": null,
          "token_type": "bearer",
          "expires_in": 1799,
          "scope": "[...]",
          "access_token": "eyJhbGc[...]",
          "refresh_token": "[...]"
        }
      </code>
    </pre>

    ### Send the access token in the Authorization header
    Simply send the access token value in the Authorization header when sending a request to one of the endpoints of the VMware Tanzu Application Catalog API:
    <pre>
      <code class="language-yaml">
        curl --location 'https://api.app-catalog.vmware.com/v1/_endpoint_' \
        --header 'Authorization: Bearer _access_token_'
      </code>
    </pre>

    ### Download the API specification
    Download the API specification at https://api.app-catalog.vmware.com/v1/api.yml and you can import to your favorite API tool for running the API queries e.g. Postman.
  contact:
    name: VMware Tanzu Application Catalog
    email: app-catalog@vmware.com
  version: v1
servers:
  - url: https://api.app-catalog.vmware.com/v1
    description: VMware Tanzu Application Catalog public service
security:
  - BearerAuth: []
tags:
  - name: releases
    description: Using these endpoints you can manage the releases that are available in a catalog from TAC
  - name: catalogs
    description: Using these endpoints you can manage the catalogs available for an organization
  - name: applications
    description: Using these endpoints you can manage the applications available for an organization
  - name: baseImages
    description: Using these endpoints you can manage the base images available for an organization
  - name: requests
    description: Using these endpoints you can manage the requests available for an organization
  - name: registries
    description: Using these endpoints you can manage the registries available for an organization
  - name: applicationsOffering
    description: Using theses endpoints you can see the application offering
  - name: customizations
    description: Using these endpoints you can manage the customizations of an application
  - name: operatingSystems
    description: Using these endpoints you can list the operating systems available in TAC
  - name: quotas
    description: Using these endpoints you can list the quotas of an organization
  - name: subscriptions
    description: Using these endpoints you can manage the subscriptions available for an organization
  - name: users
    description: Using these endpoints you can retrieve users information
  - name: daedalus
    description: Using these endpoints you can query Daedalus about CVEs and SBOMs from applications in a catalog
  - name: main-catalog
    description: "Using these endpoints, you'll be able to manage entities present at main catalog such as applications, branches, deprecation policies, distros, licenses, non-support policies, platforms, products and versions, as well as its relationships."
paths:
  /catalogs:
    get:
      tags:
        - catalogs
      summary: Get catalogs in an organization
      description: Return a paginated list of catalogs in an organization. The id of the organization is fetched from CSP token
      operationId: getCatalogs
      parameters:
        - name: shared
          in: query
          description: Objects are private to the organization in the request (shared=false) or shared between organizations (shared=true)
          required: false
          style: form
          explode: true
          schema:
            type: boolean
        - name: owned
          in: query
          description: Object is owned by the organization in the request (owned=true)
          required: false
          style: form
          explode: true
          schema:
            type: boolean
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of catalogs in an organization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogsPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the catalogs
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}:
    get:
      tags:
        - catalogs
      summary: Get a catalog in an organization
      description: Return a specific catalog in an organization. The id of the organization is fetched from CSP token
      operationId: getCatalog
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
      responses:
        "200":
          description: Details of the catalog
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catalog'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the catalog
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The requested catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/application-requests:
    get:
      tags:
        - requests
      summary: Get all application requests for a catalog
      description: |
        Return a paginated list of application requests that match the query params searching for an organization ordered by creation date descending. The id of the organization is fetched from CSP token.
      operationId: getApplicationRequests
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: request_type
          in: query
          description: It distinguish between the add and remove requests
          required: true
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/RequestType'
          example: add
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of application requests of an organization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogApplicationRequestPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the requests
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    post:
      tags:
        - requests
      summary: Create a new request to add or delete applications in a catalog
      description: |
        Create a new request for adding or removing applications to/from an organization's catalog
      operationId: createApplicationRequest
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CatalogApplicationRequestPostBody'
        required: true
      responses:
        "201":
          description: The application request has been created
          headers:
            Location:
              description: Url to request the application request that has been created.
              style: simple
              explode: false
              schema:
                type: string
        "400":
          description: An error related to the application request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to create a new application request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/application-requests/{application_request_id}:
    get:
      tags:
        - requests
      summary: Get an application request from a catalog
      description: |
        Return an application request that match the searching param id for an organization. The id of the organization is fetched from CSP token.
      operationId: getApplicationRequest
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: application_request_id
          in: path
          description: A string as identifier of an application request
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RequestId'
      responses:
        "200":
          description: Details of the application request found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogApplicationRequest'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: Application request not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/applications:
    get:
      tags:
        - applications
      summary: Get applications in an specific catalog
      description: Return a paginated list of applications in a specific catalog for an organization ordered by product name. The id of the organization is fetched from CSP token
      operationId: getApplications
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: packaging_type
          in: query
          description: Packaging type of an application
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/PackagingType'
        - name: base_image_ids
          in: query
          description: A list of strings as the identifier of a base images
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/BaseImageId'
          example:
            - a8de6e15-a21f-45f1-9155-341ab027e79e
            - c105f08b-db43-4c05-b6a5-2195fefd3ce7
        - name: product_name
          in: query
          description: Return applications that matches any part of the name
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: apache
        - name: product_key
          in: query
          description: The key name of the product
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: product_category
          in: query
          description: The category which the product belongs
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: statuses
          in: query
          description: "Return objects based on status flag (PENDING, REMOVED, DEPRECATED, RELEASED, ARCHIVED)"
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
          example:
            - RELEASED
            - PENDING
        - name: order_field
          in: query
          description: "Name of the field to order the applications: PRODUCT_NAME (default), BASE_IMAGE_NAME, LATEST_RELEASE_VERSION, STATUS, LATEST_RELEASE_RELEASED_AT, CREATED_AT, CREATED_BY, DELETED_AT, DELETED_BY"
          required: false
          style: form
          explode: true
          schema:
            type: string
            default: PRODUCT_NAME
          example: BASE_IMAGE_NAME
        - name: order_direction
          in: query
          description: "Order to sort by the selected field: ASC (default) or DESC"
          required: false
          style: form
          explode: true
          schema:
            type: string
            default: ASC
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of applications in an specific catalog
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogApplicationsPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the applications
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The requested catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/applications/{application_id}:
    get:
      tags:
        - applications
      summary: Get an application in a catalog
      description: Return an application in a specific catalog for an organization. The id of the organization is fetched from CSP token
      operationId: getApplication
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: application_id
          in: path
          description: A string as identifier of an application
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogApplicationId'
      responses:
        "200":
          description: Details of the application
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogApplication'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the applications
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The requested catalog or application is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/releases/{release_id}:
    get:
      tags:
        - releases
      summary: Get detailed information about a release in a specific catalog
      description: Returns detailed information of a release in a specific catalog for an organization. The id of the organization is fetched from CSP token.
      operationId: getRelease
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: release_id
          in: path
          description: A string as the identifier of a release
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/ReleaseId'
        - name: expand_relationships
          in: query
          description: Include detailed release payload for the dependencies and dependants of the release
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
      responses:
        "200":
          description: A detailed release in a specific catalog
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Release'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the releases
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The requested catalog or release cannot be found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/releases:
    get:
      tags:
        - releases
      summary: Get releases in an specific catalog order by release date desc
      description: Return a paginated list of minimum information about the releases in a specific catalog for an organization order by release date descending. The id of the organization is fetched from CSP token
      operationId: getReleases
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: application_id
          in: query
          description: |
            Application id of the releases
            Only one of application_id, content_digest and repo_digest should be used at the same time
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/CatalogApplicationId'
        - name: registry_id
          in: query
          description: A string as the identifier of a registry. It can only be used in conjunction with application_id
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/RegistryId'
        - name: content_digest
          in: query
          description: |
            Content digest of the artifact of the release.
            Only one of application_id, content_digest and repo_digest should be used at the same time
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: sha256:81a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb64b
        - name: repo_digest
          in: query
          description: |
            Repo digest of the artifact of the release
            Only one of application_id, content_digest and repo_digest should be used at the same time.
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: sha256:81a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb64b
        - name: minimal_info
          in: query
          description: |
            Return only the required properties of a release
            Mainly intended to be used in conjunction with the application_id query param
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
        - name: expand_relationships
          in: query
          description: Include detailed release payload for the dependencies and dependants of the release
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of releases of an application in an specific catalog
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReleasesPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the releases
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The requested catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    post:
      tags:
        - releases
      summary: Get releases in an specific catalog filtered by large set of values
      description: Return a paginated list releases in a specific catalog for an organization filtered by a potential large set of values order by release date descending. The id of the organization is fetched from CSP token
      operationId: getReleasesByLargeSetValues
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
      requestBody:
        description: List of values that will be searched by
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReleasePostFilter'
        required: true
      responses:
        "200":
          description: Paginated list of releases of an application in an specific catalog
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReleasesPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the releases
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The requested catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/files/{digest}:
    get:
      tags:
        - catalogs
      summary: Get the signed S3 url of a specific file
      description: Returns the signed S3 url to download a file (an artifact or releaseMetadata)
      operationId: getFile
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: digest
          in: path
          description: A digest that identifies the file (artifact or releaseMetadata)
          required: true
          style: simple
          explode: false
          schema:
            type: string
          example: 127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935
        - name: filename
          in: query
          description: The name of the file
          required: true
          style: form
          explode: true
          schema:
            type: string
          example: result.json
      responses:
        "200":
          description: S3 signed downloadable url
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignedUrl'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the file
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The requested file digest cannot be found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/applications/{application_id}/requests:
    get:
      tags:
        - requests
      summary: Get all requests of an application which belongs to a specific catalog.
      description: |
        Return a list of requests that match the application given which belongs to a specific catalog of the organization. The id of the organization is fetched from CSP token.
      operationId: getRequestsFromApplication
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: application_id
          in: path
          description: A string as identifier of an application
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogApplicationId'
        - name: request_type
          in: query
          description: It distinguish between the add and remove requests
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/RequestType'
          example: add
      responses:
        "200":
          description: List of requests of an application. There will be one add request and at most one remove request.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CatalogApplicationRequest'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the requests
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The requested catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /releases:
    get:
      tags:
        - releases
      summary: Get all releases from all the catalogs of an organization
      description: |
        Return a list of releases that match the query params searching in all catalogs for an organization. The id of the organization is fetched from CSP token.
        One of content digest or repo digest must be sent in the request.
      operationId: getReleasesFromAllCatalogs
      parameters:
        - name: content_digest
          in: query
          description: |
            Content digest of the artifact of the release.
            Only one of application_id, content_digest and repo_digest should be used at the same time
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: sha256:81a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb64b
        - name: repo_digest
          in: query
          description: |
            Repo digest of the artifact of the release
            Only one of application_id, content_digest and repo_digest should be used at the same time.
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: sha256:81a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb64b
        - name: expand_relationships
          in: query
          description: Include detailed release payload for the dependencies and dependants of the release
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
      responses:
        "200":
          description: List of releases in all catalogs of an organization
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Release'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the releases
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: No catalogs found for the organization
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    post:
      tags:
        - releases
      summary: "Given a list of digests, get all related releases from all the catalogs of an organization"
      description: |
        Return a list of releases that match the list of digests searching in all catalogs for an organization. The id of the organization is fetched from CSP token.
        The digests are given in the body of the request.
      operationId: bulkGetReleasesFromAllCatalogs
      requestBody:
        description: List of digests that will be searched
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchCriteria'
        required: true
      responses:
        "200":
          description: List of releases in all catalogs of an organization
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Release'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the releases
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: No catalogs found for the organization
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /releases/repo-digests:
    get:
      tags:
        - releases
      summary: Get all digests of the releases of a product
      description: |
        Return a list of digests of the releases that match the query params searching in all catalogs for an organization.
        The id of the organization is fetched from CSP token.
      operationId: getDigests
      parameters:
        - name: product_name
          in: query
          description: The name of the product
          required: true
          style: form
          explode: true
          schema:
            type: string
        - name: branch
          in: query
          description: The branch of the product
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: packaging_type
          in: query
          description: Packaging type of an application
          required: true
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/PackagingType'
      responses:
        "200":
          description: List of digests for that product in all catalogs of the organization
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the digests
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: No catalogs found for the organization
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/release-failures:
    get:
      tags:
        - releases
      summary: Get errors related with a release
      description: |
        Return the failures related with a release that match the search criteria.
        The id of the organization is fetched from CSP token.
      operationId: getReleaseFailures
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: product_key
          in: query
          description: The key name of the product
          required: true
          style: form
          explode: true
          schema:
            type: string
        - name: branch
          in: query
          description: The branch of the product
          required: true
          style: form
          explode: true
          schema:
            type: string
        - name: packaging_type
          in: query
          description: Packaging type of an application
          required: true
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/PackagingType'
        - name: base_image_id
          in: query
          description: A string as the identifier of a base image
          required: true
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/BaseImageId'
      responses:
        "200":
          description: Failure related with the release that match the query parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReleaseFailure'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the failures
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The catalog is not found for the organization or there is no failure in the release process
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /application-requests:
    get:
      tags:
        - requests
      summary: "Deprecated. Use /catalogs/{catalog_id}/application-requests"
      description: "Deprecated. Use /catalogs/{catalog_id}/application-requests"
      operationId: getApplicationRequestsDeprecated
      parameters:
        - name: request_type
          in: query
          description: It distinguish between the add and remove requests
          required: true
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/RequestType'
          example: add
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of application requests of an organization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogApplicationRequestPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the requests
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
      deprecated: true
  /application-requests/{application_request_id}:
    get:
      tags:
        - requests
      summary: "Deprecated. Use /catalogs/{catalog_id}/application-requests/{application_request_id}"
      description: "Deprecated. Use /catalogs/{catalog_id}/application-requests/{application_request_id}"
      operationId: getApplicationRequestDeprecated
      parameters:
        - name: application_request_id
          in: path
          description: A string as identifier of an application request
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RequestId'
      responses:
        "200":
          description: Details of the application request found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogApplicationRequest'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: Application request not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
      deprecated: true
  /catalogs/{catalog_id}/customizations:
    get:
      tags:
        - customizations
      summary: Get all customizations available in a catalog
      description: |
        Return a paginated list of customizations in a catalog that match the query params searching ordered by creation date descending. The id of the organization is fetched from CSP token.
      operationId: getCustomizations
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: product_key
          in: query
          description: The key name of the product
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: base_image_id
          in: query
          description: A string as the identifier of a base image
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/BaseImageId'
        - name: branch
          in: query
          description: The branch of the product
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: active
          in: query
          description: It filters the deleted customizations.
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
          example: true
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of customizations
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomizationDetailedPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the customizations
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    post:
      tags:
        - customizations
      summary: Request a customization in a catalog
      description: |
        Add a customization in a catalog uploading a tar.gz file. The id of the organization is fetched from CSP token.
      operationId: createCustomization
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CustomizationCreate'
      responses:
        "201":
          description: The customization has been created
          headers:
            Location:
              description: Url to request the customization that has been created.
              style: simple
              explode: false
              schema:
                type: string
        "400":
          description: An error related to the customization
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to create new customizations
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "412":
          description: The application has not been released yet
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error412'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /catalogs/{catalog_id}/customizations/{customization_id}:
    get:
      tags:
        - customizations
      summary: Get a customization in a catalog by customization id
      description: |
        Return a customization in a catalog that match the id given in the path. The id of the organization is fetched from CSP token.
      operationId: getCustomization
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: customization_id
          in: path
          description: A string as identifier of an customization
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CustomizationId'
      responses:
        "200":
          description: A customization in a catalog
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomizationDetailed'
        "400":
          description: An error related to the customization
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the customization
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The customization or the catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    delete:
      tags:
        - customizations
      summary: Delete a customization in a catalog by customization id
      description: |
        Delete a customization in a catalog that match the id given in the path. The id of the organization is fetched from CSP token.
      operationId: deleteCustomization
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: customization_id
          in: path
          description: A string as identifier of an customization
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CustomizationId'
      responses:
        "204":
          description: The customization has been deleted in the catalog
        "400":
          description: An error related to the customization
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to delete the customization
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The customization or the catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    patch:
      tags:
        - customizations
      summary: Update a customization for an application
      description: |
        Update a customization uploading a new file. The id of the organization is fetched from CSP token.
      operationId: updateCustomization
      parameters:
        - name: catalog_id
          in: path
          description: A string as the identifier of a catalog
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: customization_id
          in: path
          description: A string as identifier of an customization
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/CustomizationId'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CustomizationUpdate'
      responses:
        "204":
          description: The customization has been updated
        "400":
          description: An error related to the customization
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the requests
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The customization or the catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /base-images:
    get:
      tags:
        - baseImages
      summary: Get base images in an organization
      description: Return a paginated list of base images order by name available for an organization (shared and private ones). The id of the organization is fetched from CSP token
      operationId: getBaseImages
      parameters:
        - name: shared
          in: query
          description: Objects are private to the organization in the request (shared=false) or shared between organizations (shared=true)
          required: false
          style: form
          explode: true
          schema:
            type: boolean
        - name: packaging_type
          in: query
          description: Packaging type of an application
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/PackagingType'
        - name: statuses
          in: query
          description: "Return objects based on status (ACTIVE, DEPRECATED, DELETED)"
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
          example:
            - DEPRECATED
            - DELETED
        - name: name
          in: query
          description: Returns base images matches with the name
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: centos 7
        - name: with_applications
          in: query
          description: Base images whose number of applications is non zero (with_applications=true)
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of base images in an organization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseImagesPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the base images
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    post:
      tags:
        - baseImages
      summary: Create a base image in an organization
      description: Create a new private base image in a registry for the organization
      operationId: createBaseImage
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BaseImageRequest'
      responses:
        "201":
          description: The base image has been created
          headers:
            Location:
              description: Url to request the base image that has been created.
              style: simple
              explode: false
              schema:
                type: string
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to create new base image
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /base-images/{base_image_id}:
    get:
      tags:
        - baseImages
      summary: Get a base image in an organization
      description: Return a specific base image available for an organization. The id of the organization is fetched from CSP token
      operationId: getBaseImage
      parameters:
        - name: base_image_id
          in: path
          description: A string as the identifier of a base image
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/BaseImageId'
      responses:
        "200":
          description: Details of the base image
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseImageDetailed'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the base images
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The requested base image is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    delete:
      tags:
        - baseImages
      summary: Delete a base image in an organization
      description: Delete a private base image in a registry for the organization
      operationId: deleteBaseImage
      parameters:
        - name: base_image_id
          in: path
          description: A string as the identifier of a base image
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/BaseImageId'
      responses:
        "204":
          description: The base image has been deleted
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to delete the base image
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The base image is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    patch:
      tags:
        - baseImages
      summary: Update a base image in an organization
      description: Update a private base image in a registry for the organization
      operationId: updateBaseImage
      parameters:
        - name: base_image_id
          in: path
          description: A string as the identifier of a base image
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/BaseImageId'
      requestBody:
        description: It contains details about the base image updated
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBaseImageRequest'
        required: true
      responses:
        "204":
          description: The base image has been updated
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to update the base image
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The base image is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /registries:
    get:
      tags:
        - registries
      summary: Get registries in an organization
      description: Return a paginated list of registries ordered by name for an organization. The id of the organization is fetched from CSP token
      operationId: getRegistries
      parameters:
        - name: removed
          in: query
          description: It filters registries removed or not
          required: false
          style: form
          explode: true
          schema:
            type: boolean
          example: false
        - name: provider
          in: query
          description: It filters registries by a provider
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: HARBOR
        - name: hosted
          in: query
          description: It filters registries automatically hosted by TAC
          required: false
          style: form
          explode: true
          schema:
            type: boolean
          example: false
        - name: vmware_managed
          in: query
          description: It filters registries manually hosted by TAC
          required: false
          style: form
          explode: true
          schema:
            type: boolean
          example: false
        - name: shared
          in: query
          description: Objects are private to the organization in the request (shared=false) or shared between organizations (shared=true)
          required: false
          style: form
          explode: true
          schema:
            type: boolean
        - name: owned
          in: query
          description: Object is owned by the organization in the request (owned=true)
          required: false
          style: form
          explode: true
          schema:
            type: boolean
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of registries in an organization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistriesPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the registries
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    post:
      tags:
        - registries
      summary: Create a private registry in an organization
      description: Create a private registry in a specific provider belonging to an organization. The id of the organization is fetched from CSP token
      operationId: createPrivateRegistry
      requestBody:
        description: It contains details about the registry requested
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePrivateRegistryRequest'
        required: true
      responses:
        "201":
          description: The private registry has been created
          headers:
            Location:
              description: URL to the created private registry
              style: simple
              explode: false
              schema:
                type: string
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to create registries
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /registries/{registry_id}:
    get:
      tags:
        - registries
      summary: Get registry in an organization
      description: Return a registry by id for an organization. The id of the organization is fetched from CSP token
      operationId: getRegistry
      parameters:
        - name: registry_id
          in: path
          description: A string as the identifier of a registry
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryId'
      responses:
        "200":
          description: The registry
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistryDetailed'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the registry
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The registry is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    delete:
      tags:
        - registries
      summary: Deletes a private registry
      description: Deletes a private registry in an organization. The id of the organization is fetched from CSP token
      operationId: deletePrivateRegistry
      parameters:
        - name: registry_id
          in: path
          description: A string as the identifier of a registry
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryId'
      responses:
        "204":
          description: The registry has been deleted
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to delete the registry
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The registry is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    patch:
      tags:
        - registries
      summary: Updates a private registry in an organization
      description: "Updates the name, description and/or credentials of a private registry. The id of the organization is fetched from CSP token"
      operationId: updatePrivateRegistry
      parameters:
        - name: registry_id
          in: path
          description: A string as the identifier of a registry
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryId'
      requestBody:
        description: It contains details about the registry updated
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePrivateRegistryRequest'
        required: true
      responses:
        "204":
          description: The registry has been updated
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to update the registry
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The registry is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /registries/{registry_id}/credentials:
    get:
      tags:
        - registries
      summary: Get managed registry credentials
      description: Returns a paginated list of credentials for a hosted registry. The id of the organization is fetched from CSP token
      operationId: getManagedRegistryCredentials
      parameters:
        - name: registry_id
          in: path
          description: A string as the identifier of a registry
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryId'
        - name: removed
          in: query
          description: It filters credentials that have been removed or not
          required: false
          style: form
          explode: true
          schema:
            type: boolean
          example: true
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of registry credentials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistryCredentialsPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the credentials
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The registry is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    post:
      tags:
        - registries
      summary: Creates a managed registry credential
      description: Create a new credential for a hosted registry. The id of the organization is fetched from CSP token
      operationId: createManagedRegistryCredential
      parameters:
        - name: registry_id
          in: path
          description: A string as the identifier of a registry
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryId'
      requestBody:
        description: It contains details about the registry credentials to be created
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateManagedRegistryCredentialRequest'
        required: true
      responses:
        "201":
          description: The credentials have been created
          headers:
            Location:
              description: URL to the created managed registry credentials
              style: simple
              explode: false
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateManagedRegistryCredentialResponse'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to create credentials
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The registry is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /organizations/{organization_id}/registries/{registry_id}/credentials:
    post:
      tags:
        - registries
      summary: Creates a managed registry credential
      description: Create a new credential for a hosted registry
      operationId: createManagedRegistryCredentialByOrg
      parameters:
        - name: organization_id
          in: path
          description: A string as the identifier of an organization
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/OrganizationId'
        - name: registry_id
          in: path
          description: A string as the identifier of a registry
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryId'
      requestBody:
        description: It contains details about the registry credentials to be created
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateManagedRegistryCredentialRequest'
        required: true
      responses:
        "201":
          description: The credentials have been created
          headers:
            Location:
              description: URL to the created managed registry credentials
              style: simple
              explode: false
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateManagedRegistryCredentialResponse'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to create credentials
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The registry is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /registries/{registry_id}/credentials/{credential_id}:
    get:
      tags:
        - registries
      summary: Get a registry credential
      description: Retrieves a managed registry credential. The id of the organization is fetched from CSP token
      operationId: getManagedRegistryCredential
      parameters:
        - name: registry_id
          in: path
          description: A string as the identifier of a registry
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryId'
        - name: credential_id
          in: path
          description: String identifier for the managed registry credential
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryCredentialId'
      responses:
        "200":
          description: The registry credential
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistryCredential'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the credential
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The registry or the credential is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    delete:
      tags:
        - registries
      summary: Delete a managed registry credential
      description: Deletes a managed registry credential. The id of the organization is fetched from CSP token
      operationId: deleteManagedRegistryCredential
      parameters:
        - name: registry_id
          in: path
          description: A string as the identifier of a registry
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryId'
        - name: credential_id
          in: path
          description: String identifier for the managed registry credential
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/RegistryCredentialId'
      responses:
        "204":
          description: Managed registry credential has been deleted.
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to delete the credential
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The registry or the credential is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /applications-offering:
    get:
      tags:
        - applicationsOffering
      summary: Get all applications offered in TAC
      description: Returns a paginated list of applications offering
      operationId: getApplicationsOffering
      parameters:
        - name: catalog_id
          in: query
          description: A string as the identifier of a catalog
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/CatalogId'
        - name: operating_system_id
          in: query
          description: A string as the identifier of an operating system
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/OperatingSystemId'
        - name: operating_system_name
          in: query
          description: A string as the name of an operating system
          required: false
          style: form
          explode: true
          schema:
            type: string
            example: Ubuntu
        - name: packaging_types
          in: query
          description: Packaging type of an application
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/PackagingType'
        - name: statuses
          in: query
          description: "Return objects based on status flag (ENABLED, HIDDEN, DEPRECATED)"
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
          example:
            - ENABLED
        - name: product_name
          in: query
          description: Return applications that matches any part of the name
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: apache
        - name: product_key
          in: query
          description: The key name of the product
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: branch
          in: query
          description: The branch of the product
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: order_field
          in: query
          description: "Name of the field to order the applications: PRODUCT_NAME (default), PRODUCT_KEY, STATUS, BRANCH, PACKAGING_TYPE"
          required: false
          style: form
          explode: true
          schema:
            type: string
            default: PRODUCT_NAME
          example: PRODUCT_KEY
        - name: order_direction
          in: query
          description: "Order to sort by the selected field: ASC (default) or DESC"
          required: false
          style: form
          explode: true
          schema:
            type: string
            default: ASC
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of applications offering
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationOfferingPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the applications offering
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /applications-offering/{offering_id}:
    get:
      tags:
        - applicationsOffering
      summary: Get an application offered in TAC
      description: Returns an application offering
      operationId: getApplicationOffering
      parameters:
        - name: offering_id
          in: path
          description: A string as the identifier of an application offering
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/ApplicationOfferingId'
      responses:
        "200":
          description: The application offering
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationOffering'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the application offering
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The application offering is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /operating-systems:
    get:
      tags:
        - operatingSystems
      summary: Get all operating systems in TAC
      description: Returns a paginated list of operating systems
      operationId: getOperatingSystems
      parameters:
        - name: status
          in: query
          description: "Status of the operating system (ACTIVE, DEPRECATED)"
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of operating systems
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatingSystemPage'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the operating systems
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /operating-systems/{operating_system_id}:
    get:
      tags:
        - operatingSystems
      summary: Get operating system
      description: Returns an operating system
      operationId: getOperatingSystem
      parameters:
        - name: operating_system_id
          in: path
          description: A string as the identifier of an operating system
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/OperatingSystemId'
      responses:
        "200":
          description: The operating system
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatingSystemDetailed'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to get the operating system
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The operating system is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /users/me:
    get:
      tags:
        - users
      summary: Get information from user
      description: Get information from user token and organization
      operationId: getUserTokenInfo
      responses:
        "200":
          description: User info response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTokenInfo'
        "403":
          description: The requesting user is not authorized to get user info
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /subscriptions:
    get:
      tags:
        - subscriptions
      summary: Get the subscriptions for an organization order by creation date desc
      description: Returns the subscriptions related with an organization
      operationId: getSubscriptions
      parameters:
        - name: status
          in: query
          description: It filters the subscriptions by the status
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/SubscriptionStatus'
          example: ACTIVE
        - name: page
          in: query
          description: An integer that identifies the page number for a paged response
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            default: 1
        - name: page_size
          in: query
          description: An integer that identifies the maximum page size for a paged response
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            default: 20
      responses:
        "200":
          description: Paginated list of subscriptions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionsPage'
        "403":
          description: The requesting user is not authorized to get subscriptions
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /subscriptions/{subscription_id}:
    get:
      tags:
        - subscriptions
      summary: Get a subscription
      description: Returns the a subscription belonging to the user's org
      operationId: getSubscription
      parameters:
        - name: subscription_id
          in: path
          description: String identifier of the subscription
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/SubscriptionId'
      responses:
        "200":
          description: The subscription
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
        "403":
          description: The requesting user is not authorized to get a subscription
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The subscription is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /quotas:
    get:
      tags:
        - quotas
      summary: Get the quotas for an organization
      description: Returns the quotas related with an organization
      operationId: getQuotas
      responses:
        "200":
          description: The quotas for an organization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Quotas'
        "403":
          description: The requesting user is not authorized to get quotas
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /daedalus/graphql:
    get:
      tags:
        - daedalus
      summary: Get the GraphQL schema
      description: Returns the GraphQL schema of daedalus
      operationId: getDaedalusSchema
      responses:
        "200":
          description: Daedalus response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaedalusResponse'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to query Daedalus
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
    post:
      tags:
        - daedalus
      summary: Sends a GraphQL query to Daedalus
      description: Sends a GraphQL query to Daedalus for a specific catalog. If not catalog_id is sent as query param then the first private catalog of the org is picked by default
      operationId: queryDaedalus
      parameters:
        - name: catalog_id
          in: query
          description: A string as the identifier of a catalog
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/CatalogId'
      requestBody:
        description: It contains the query to send to daedalus
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DaedalusRequest'
        required: true
      responses:
        "200":
          description: Daedalus response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaedalusResponse'
        "400":
          description: An error related to the request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "403":
          description: The requesting user is not authorized to query Daedalus
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error403'
        "404":
          description: The catalog is not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error404'
        "500":
          description: An internal server error object
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error500'
        "503":
          description: The server is temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error503'
  /applications:
    get:
      tags:
        - main-catalog
      summary: List all applications existing in the catalog
      description: Provides all the applications existing in the catalog with filters.
      operationId: getAllApplications
      parameters:
        - name: only_supported
          in: query
          description: "Parameter to query only for supported items. A supported item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_,_DEPRECATION_GRACE_PERIOD_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only supported items.
            example: true
            default: false
        - name: status
          in: query
          description: Status of the item to filter by
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CatalogItemStatus'
        - name: search
          in: query
          description: Filter by the specified text
          required: false
          style: form
          explode: true
          schema:
            maxLength: 30
            minLength: 3
            type: string
            description: Input string to search for
            example: postgresql
        - name: distributable
          in: query
          description: Filter results for distributable products
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Distributable flag to filter products.
            example: false
        - name: scope
          in: query
          description: Scope of the product to filter by
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/ProductScope'
        - name: only_built_versions
          in: query
          description: "Parameter to query only for the applications that actually have a built version. If parameter is set to \"false\" then all related platforms without built version will appear under the same application, with empty version."
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only built versions.
            example: true
            default: true
        - name: only_stable_branches
          in: query
          description: Parameter to query only for the latest stable branch.
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only the latest stable branches.
            example: true
        - name: only_eligible
          in: query
          description: "Parameter to query only for eligible items. An eligible item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only eligible items.
            example: true
            default: false
      responses:
        "200":
          description: A list containing the applications
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationsArray'
        "400":
          description: An error related to the query or path parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "500":
          description: An internal server error object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security: []
  /applications/extended:
    get:
      tags:
        - main-catalog
      summary: List all applications existing in the catalog with extended information
      description: Provides all the applications existing in the catalog with filters and decorated with extended information.
      operationId: getAllApplicationsExtended
      parameters:
        - name: only_supported
          in: query
          description: "Parameter to query only for supported items. A supported item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_,_DEPRECATION_GRACE_PERIOD_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only supported items.
            example: true
            default: false
        - name: status
          in: query
          description: Status of the item to filter by
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CatalogItemStatus'
        - name: search
          in: query
          description: Filter by the specified text
          required: false
          style: form
          explode: true
          schema:
            maxLength: 30
            minLength: 3
            type: string
            description: Input string to search for
            example: postgresql
        - name: distributable
          in: query
          description: Filter results for distributable products
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Distributable flag to filter products.
            example: false
        - name: scope
          in: query
          description: Scope of the product to filter by
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/ProductScope'
        - name: only_built_versions
          in: query
          description: "Parameter to query only for the applications that actually have a built version. If parameter is set to \"false\" then all related platforms without built version will appear under the same application, with empty version."
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only built versions.
            example: true
            default: true
        - name: only_stable_branches
          in: query
          description: Parameter to query only for the latest stable branch.
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only the latest stable branches.
            example: true
        - name: only_eligible
          in: query
          description: "Parameter to query only for eligible items. An eligible item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only eligible items.
            example: true
            default: false
      responses:
        "200":
          description: A list containing the applications with extended information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationsArrayExtended'
        "400":
          description: An error related to the query or path parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "500":
          description: An internal server error object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /applications/product/{product_id_or_key}:
    get:
      tags:
        - main-catalog
      summary: List applications from a product
      description: "Provides all the applications for the specified product, regardless of the status, with optional filters."
      operationId: getProductApplications
      parameters:
        - name: product_id_or_key
          in: path
          description: A string with either UUID format as the identifier of the requested product or its key.
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/ProductIdOrKey'
        - name: only_built_versions
          in: query
          description: "Parameter to query only for the applications that actually have a built version. If parameter is set to \"false\" then all related platforms without built version will appear under the same application, with empty version."
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only built versions.
            example: true
            default: true
        - name: only_stable_branches
          in: query
          description: Parameter to query only for the latest stable branch.
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only the latest stable branches.
            example: true
        - name: status
          in: query
          description: Status of the item to filter by
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CatalogItemStatus'
        - name: only_supported
          in: query
          description: "Parameter to query only for supported items. A supported item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_,_DEPRECATION_GRACE_PERIOD_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only supported items.
            example: true
            default: false
        - name: only_eligible
          in: query
          description: "Parameter to query only for eligible items. An eligible item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only eligible items.
            example: true
            default: false
      responses:
        "200":
          description: Single product applications without pagination
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationProduct'
        "400":
          description: An error related to the query or path parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "500":
          description: An internal server error object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security: []
  /applications/extended/product/{product_id_or_key}:
    get:
      tags:
        - main-catalog
      summary: List applications from a product with extended information
      description: "Provides all the applications for the specified product, regardless of the status, with optional filters and decorated with extended information."
      operationId: getProductApplicationsExtended
      parameters:
        - name: product_id_or_key
          in: path
          description: A string with either UUID format as the identifier of the requested product or its key.
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/ProductIdOrKey'
        - name: only_built_versions
          in: query
          description: "Parameter to query only for the applications that actually have a built version. If parameter is set to \"false\" then all related platforms without built version will appear under the same application, with empty version."
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only built versions.
            example: true
            default: true
        - name: only_stable_branches
          in: query
          description: Parameter to query only for the latest stable branch.
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only the latest stable branches.
            example: true
        - name: status
          in: query
          description: Status of the item to filter by
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CatalogItemStatus'
        - name: only_supported
          in: query
          description: "Parameter to query only for supported items. A supported item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_,_DEPRECATION_GRACE_PERIOD_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only supported items.
            example: true
            default: false
        - name: only_eligible
          in: query
          description: "Parameter to query only for eligible items. An eligible item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only eligible items.
            example: true
            default: false
      responses:
        "200":
          description: Single product applications without pagination containing extended information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationProductExtended'
        "400":
          description: An error related to the query or path parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "500":
          description: An internal server error object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /applications/product/{product_id_or_key}/branch/{branch_id_or_key}:
    get:
      tags:
        - main-catalog
      summary: List applications from a specific branch
      description: "Provides all the applications for the specified branch, regardless of the status, with optional filters."
      operationId: getBranchApplications
      parameters:
        - name: product_id_or_key
          in: path
          description: A string with either UUID format as the identifier of the requested product or its key.
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/ProductIdOrKey'
        - name: branch_id_or_key
          in: path
          description: A string with either UUID format as the identifier of the requested branch or its key
          required: true
          style: simple
          explode: false
          schema:
            maxLength: 100
            type: string
            description: UUID identifier or key of the branch
            example: 2217eb9c-f042-11eb-9a03-0242ac130003
        - name: packaging
          in: query
          description: Packaging type to filter by
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/PackagingType'
        - name: distro
          in: query
          description: Distro ID or key to filter by
          required: false
          style: form
          explode: true
          schema:
            maxLength: 100
            type: string
            description: UUID identifier or key of the distro
            example: d1e6f5ce-1b52-4898-b9ed-8f9f11804cff
        - name: architecture
          in: query
          description: Processor architecture to filter by
          required: false
          style: form
          explode: true
          schema:
            maxLength: 30
            type: string
            description: Key of the processor architecture
            example: arm64
        - name: only_built_versions
          in: query
          description: "Parameter to query only for the applications that actually have a built version. If parameter is set to \"false\" then all related platforms without built version will appear under the same application, with empty version."
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only built versions.
            example: true
            default: true
        - name: status
          in: query
          description: Status of the item to filter by
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CatalogItemStatus'
        - name: only_supported
          in: query
          description: "Parameter to query only for supported items. A supported item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_,_DEPRECATION_GRACE_PERIOD_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only supported items.
            example: true
            default: false
        - name: only_eligible
          in: query
          description: "Parameter to query only for eligible items. An eligible item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only eligible items.
            example: true
            default: false
      responses:
        "200":
          description: A list containing the applications
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationBranch'
        "400":
          description: An error related to the query or path parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "500":
          description: An internal server error object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security: []
  /applications/extended/product/{product_id_or_key}/branch/{branch_id_or_key}:
    get:
      tags:
        - main-catalog
      summary: List applications from a specific branch with extended information
      description: "Provides all the applications for the specified branch, regardless of the status, with optional filters and decorated with extended information."
      operationId: getBranchApplicationsExtended
      parameters:
        - name: product_id_or_key
          in: path
          description: A string with either UUID format as the identifier of the requested product or its key.
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/ProductIdOrKey'
        - name: branch_id_or_key
          in: path
          description: A string with either UUID format as the identifier of the requested branch or its key
          required: true
          style: simple
          explode: false
          schema:
            maxLength: 100
            type: string
            description: UUID identifier or key of the branch
            example: 2217eb9c-f042-11eb-9a03-0242ac130003
        - name: packaging
          in: query
          description: Packaging type to filter by
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/PackagingType'
        - name: distro
          in: query
          description: Distro ID or key to filter by
          required: false
          style: form
          explode: true
          schema:
            maxLength: 100
            type: string
            description: UUID identifier or key of the distro
            example: d1e6f5ce-1b52-4898-b9ed-8f9f11804cff
        - name: architecture
          in: query
          description: Processor architecture to filter by
          required: false
          style: form
          explode: true
          schema:
            maxLength: 30
            type: string
            description: Key of the processor architecture
            example: arm64
        - name: only_built_versions
          in: query
          description: "Parameter to query only for the applications that actually have a built version. If parameter is set to \"false\" then all related platforms without built version will appear under the same application, with empty version."
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only built versions.
            example: true
            default: true
        - name: status
          in: query
          description: Status of the item to filter by
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CatalogItemStatus'
        - name: only_supported
          in: query
          description: "Parameter to query only for supported items. A supported item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_,_DEPRECATION_GRACE_PERIOD_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only supported items.
            example: true
            default: false
        - name: only_eligible
          in: query
          description: "Parameter to query only for eligible items. An eligible item is considered to have one of the following statuses: (_ACTIVE_,_SCHEDULED_DEPRECATION_)"
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            description: Flag to mark if the query should include only eligible items.
            example: true
            default: false
      responses:
        "200":
          description: A list containing the applications with extended information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationBranchExtended'
        "400":
          description: An error related to the query or path parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstraintsViolationsError'
        "500":
          description: An internal server error object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error503:
      type: object
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            status:
              example: 503
            detail:
              example: Server not available
            type:
              example: https://example.com/probs/server-not-available
    Platform:
      type: object
      properties:
        distro:
          $ref: '#/components/schemas/DistroReference'
        applied_policy:
          $ref: '#/components/schemas/AppliedPolicy'
        marked_draft:
          $ref: '#/components/schemas/DraftEntity'
      description: Complete data about a platform.
      allOf:
        - $ref: '#/components/schemas/PlatformBase'
        - $ref: '#/components/schemas/AuditDate'
    RegistryCredentialId:
      type: string
      description: Identifier of a managed registry credential
      example: 149cfa79-352c-4555-9d28-4442de551828
    LicenseRelativePath:
      maxLength: 50
      type: string
      description: path within source code where the license contract file is
      example: licenses/MIT.txt
    ApplicationBranchBase:
      required:
        - branch
        - product
      type: object
      properties:
        product:
          $ref: '#/components/schemas/Product'
        branch:
          type: object
          description: Branch data of the application
          allOf:
            - $ref: '#/components/schemas/Branch'
            - required:
                - latest_discovered_version
              type: object
              properties:
                latest_discovered_version:
                  $ref: '#/components/schemas/VersionReference'
              description: Additional properties for application branch data
      description: Holds the basic information about a single branch of applications.
    Product:
      type: object
      properties:
        applied_policy:
          $ref: '#/components/schemas/AppliedPolicy'
        marked_draft:
          $ref: '#/components/schemas/DraftEntity'
      description: Complete data about a product of the catalog.
      allOf:
        - $ref: '#/components/schemas/ProductReference'
        - $ref: '#/components/schemas/AuditDate'
    ApplicationVersionInfo:
      type: object
      description: |
        Holds the platform information about a version of an application.
      allOf:
        - $ref: '#/components/schemas/ApplicationVersionInfoBase'
        - required:
            - platforms
          type: object
          properties:
            platforms:
              type: array
              description: Array of platforms for the version
              items:
                $ref: '#/components/schemas/ApplicationPlatformInfo'
          description: Regular information for application version info.
    PlatformBase:
      type: object
      description: "Basic information about a platform, incorporating all fundamental properties for its functionality"
      allOf:
        - required:
            - platform_id
            - status
          type: object
          properties:
            platform_id:
              maxLength: 36
              type: string
              description: Identifier of the existing platform
              example: b1471ead-0a0e-4069-b8b5-59780b57d17f
            status:
              $ref: '#/components/schemas/CatalogItemStatus'
          description: Reference information about a platform.
        - $ref: '#/components/schemas/PlatformRequestBase'
    ApplicationVersionInfoExtended:
      type: object
      description: |
        Holds the extended platform information about a version of an application.
      allOf:
        - $ref: '#/components/schemas/ApplicationVersionInfoBase'
        - required:
            - platforms
          type: object
          properties:
            platforms:
              type: array
              description: Array with extended info of platforms for the version
              items:
                $ref: '#/components/schemas/ApplicationPlatformInfoExtended'
          description: Extended information for application version info.
    ProductLicenseReference:
      required:
        - license_id
      type: object
      properties:
        license_id:
          maxLength: 36
          type: string
          description: License identifier in the catalog.
          example: 99a07a3f-25fd-4dcb-9bf1-cdcb375033ca
        license_key:
          maxLength: 100
          type: string
          description: Key for the license.
          example: APACHE2
      description: Reference data about a license of a product.
      allOf:
        - $ref: '#/components/schemas/ProductLicenseRequest'
    ProductLiteReference:
      type: object
      description: Basic data about a parent product for reference purposes.
      allOf:
        - required:
            - key
            - product_id
          type: object
          properties:
            product_id:
              maxLength: 36
              type: string
              description: Product identifier in the item.
              example: 2b2a3f50-1275-4664-a2b8-b13eb08f77d6
            key:
              maxLength: 100
              pattern: "^[a-zA-Z0-9._-]+$"
              type: string
              description: "Key for the product. Only alphanumeric, underscore, dash and dot characters are allowed."
              example: wordpress
          description: Basic identification data of an existing parent product
    PlatformFamily:
      type: object
      properties:
        os_family:
          maxLength: 64
          type: string
          description: Operative system family
          example: linux
        architecture:
          maxLength: 64
          type: string
          description: Architecture
          example: amd64
      description: The platform family an artifact was for
    UpdatePrivateRegistryRequest:
      type: object
      properties:
        name:
          type: string
          description: Name of the registry
          example: My registry
        description:
          type: string
          description: Description of the registry
          example: Registry for storing container releases
        access_key:
          type: string
          description: Access key to authenticate to the registry. For some providers it may be optional (e.g GOOGLE_ARTIFACT_REGISTRY)
          example: robot$user123
        access_secret:
          type: string
          description: Access secret to authenticate to the registry
          example: p4ssw0rd1234
      description: It represents the input payload for updating private registry
    Subscription:
      required:
        - created_at
        - product_id
        - status
      type: object
      properties:
        id:
          $ref: '#/components/schemas/SubscriptionId'
        product_id:
          type: string
          description: Name of the product of the subscription
          example: VTAC_AAORG_CP
        status:
          $ref: '#/components/schemas/SubscriptionStatus'
        quotas:
          type: object
          properties:
            applications:
              type: object
              properties:
                limit:
                  type: integer
                  description: Limit of applications in a private catalog for this subscription
                  example: 25
              description: Quota for applications in a private catalog for this subscription
          description: Quotas for this subscription
        created_at:
          type: string
          description: Date of the creation of the subscription
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        updated_at:
          type: string
          description: Date of the update of the subscription
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        starts_at:
          type: string
          description: Date of the start of the subscription
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        ends_at:
          type: string
          description: Date of the end of the subscription
          format: date-time
          example: 2023-03-03T00:59:52.762Z
      description: Information related with CSP subscription
    Error500:
      type: object
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            status:
              example: 500
            detail:
              example: Internal Server Error
            type:
              example: https://example.com/probs/internal-server-error
    BaseImage:
      required:
        - container_image
        - id
        - name
      properties:
        id:
          type: string
          description: Identifier of the base image
          example: d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
        name:
          type: string
          description: Name of the base image
          example: Debian 11
        description:
          type: string
          description: Description of the base image
          example: Debian 11 base image
        container_image:
          type: string
          description: Container image used
          example: docker.io/library/debian:11
        operating_system:
          $ref: '#/components/schemas/OperatingSystemBase'
      description: It contains information about the base image used for an application
      x-parent: true
    CatalogsPage:
      type: object
      description: It represents a paged response for a collection of catalogs
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/Catalog'
          description: It holds the collection of catalogs for a paged response
    UpdateBaseImageRequest:
      type: object
      properties:
        name:
          type: string
          description: Name of the base image
          example: My base image
        description:
          type: string
          description: Description of the base image
          example: Base image for the new applications
      description: It represents the input payload for updating a base image
    DistroVersion:
      maxLength: 100
      type: string
      description: Version of the operating system distribution.
      example: "11"
    RequestId:
      type: string
      description: Identifier of the request
      example: d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
    DistroBase:
      required:
        - key
        - name
        - os
        - version
      type: object
      properties:
        key:
          $ref: '#/components/schemas/DistroKey'
        os:
          $ref: '#/components/schemas/DistroOs'
        version:
          $ref: '#/components/schemas/DistroVersion'
        name:
          maxLength: 100
          type: string
          description: Name set for the distro.
          example: Debian 11
        fips_compliant:
          type: boolean
          description: "Indicates if the distro is FIPS compliant, false by default."
          example: true
          default: false
        os_family:
          maxLength: 100
          type: string
          description: Name for the operating system family.
          example: linux
          default: linux
        public_offering:
          type: boolean
          description: Distro is also used for public offering.
          example: true
          default: false
      description: "Basic data about a distro to be used as base for any purpose, whether it is reading or updating."
    ReleaseFailureCause:
      type: string
      description: "Cause of the release failure (UNKNOWN, CUSTOMIZATION_BUILD_ERROR, TEST_ERROR, BUILD_ERROR)"
      example: BUILD_ERROR
    BaseImageId:
      type: string
      description: Identifier of the base image
      example: 549cfa79-352c-4555-9d28-4442de551829
    RegistryCredential:
      required:
        - created_at
        - created_by
        - description
        - id
        - name
      type: object
      properties:
        id:
          $ref: '#/components/schemas/RegistryCredentialId'
        name:
          type: string
          description: Name of the credentials
          example: robot$registry-user
        description:
          type: string
          description: Description of the credential
          example: Credentials for testing
        created_at:
          type: string
          description: Date of the creation of the credential
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        created_by:
          type: string
          description: Name of the user that created the credential
          example: johndoe
        removed_at:
          type: string
          description: Date of the removal of the credential
          format: date-time
          example: 2023-03-03T00:59:52.762Z
      description: Credential details of a vmware hosted registry
    CustomizationId:
      type: string
      description: Identifier of the customization
      example: d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
    LicenseReference:
      required:
        - license_id
      type: object
      properties:
        license_id:
          maxLength: 36
          type: string
          description: License identifier in the catalog.
          example: 99a07a3f-25fd-4dcb-9bf1-cdcb375033ca
        name:
          maxLength: 100
          type: string
          description: Human-readable name for the license.
          example: APACHE2
      description: Reference data about a license.
    SignedUrl:
      required:
        - url
      properties:
        url:
          type: string
          description: S3 singed url of artifact or releaseMetadata
          example: https://bitnami-artifacts-0.s3.amazonaws.com/825fa65f-0fe7-4ebc-a9af-d07d6ffb47b2/2407e34f1b74b5easdfasdfdaef8c784392433e?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIASW5XIUJAMGFUSQ%2F20230814%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230814T124806Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3D%22asset-spec.json%22&X-Amz-Signature=be5a079f30fc799b3d40b94e03b9c667142ca95e9774a05bc0012e633938fef8
      description: It contains information about the s3 signed url of artifact or releaseMetadata
    ApplicationVersionInfoBase:
      required:
        - version
      type: object
      properties:
        version:
          $ref: '#/components/schemas/VersionReference'
      description: |
        Holds the basic platform information about a version of an application.
    CatalogApplication:
      required:
        - base_image
        - branch
        - created_at
        - id
        - packaging_type
        - product
        - status
        - updated_at
      type: object
      properties:
        id:
          $ref: '#/components/schemas/CatalogApplicationId'
        product:
          $ref: '#/components/schemas/ProductBasicInfo'
        branch:
          $ref: '#/components/schemas/Branch'
        packaging_type:
          $ref: '#/components/schemas/PackagingType'
        base_image:
          $ref: '#/components/schemas/BaseImage'
        registries:
          type: array
          items:
            $ref: '#/components/schemas/Registry'
        customization:
          $ref: '#/components/schemas/Customization'
        status:
          maxLength: 32
          type: string
          description: "Status of application (PENDING, REMOVED, DEPRECATED, RELEASED, ARCHIVED)"
          example: PENDING
        created_at:
          type: string
          description: The date-time when the application was created
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        created_by:
          type: string
          description: The user that created the application request
          example: john doe
        updated_at:
          type: string
          description: The date-time when the application was updated for the last time
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        deleted_at:
          type: string
          description: The date-time when the application was deleted
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        deleted_by:
          type: string
          description: The user that created the deletion request for the application
          example: john doe
        processing_status:
          $ref: '#/components/schemas/ProcessingStatus'
        processing_status_updated_at:
          type: string
          description: The date-time when the application processing was updated
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        latest_release:
          $ref: '#/components/schemas/LatestRelease'
        _links:
          type: object
          properties:
            catalog:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the catalog this application belongs to
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9
              description: Catalog of the application this release belongs to
            base_image:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the base image of this application
                  example: /v1/base-images/cc6c7f4d-405b-a1ca-3ac0a79418c1
              description: Base image of this application
            requests:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the requests related to this application
                  example: /v1/catalogs/cc6c7f4d-405b-a1ca-3ac0a79418c1/applications/ceb99900-f0fd-466b-96dc-1b9345fcb6ec/requests
              description: Requests related to this application
            releases:
              type: object
              properties:
                href:
                  type: string
                  description: |
                    Hyperlink to the TAC API endpoint to get the releases for the application, returning only required properties of each release
                    as the omitted information is already in the context of the Application
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/releases?application_id=d16c7f4d-b38a-405b-a1ca-3ac0a79418c1&minimal_info=true
              description: Releases generated for an application
            registries:
              type: array
              description: Registries links related to this application
              items:
                type: object
                properties:
                  href:
                    type: string
                    description: Hyperlink to the TAC API endpoint to get the registry related with this application
                    example: /v1/registries/ceb99900-f0fd-466b-96dc-1b9345fcb6ec
                description: Registry related with this application
            customization:
              type: object
              properties:
                href:
                  type: string
                  description: |
                    Hyperlink to the TAC API endpoint to get a customization for the application, only in case that there is a customization applied
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/customizations/d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
              description: Customization for the application
            product:
              type: object
              properties:
                href:
                  type: string
                  description: |
                    Hyperlink to the TAC API endpoint to get detailed information of a product
                  example: /v1/applications/product/wordpress/branch/7?packaging=CONTAINER_IMAGE&distro=photon-4
              description: Detailed information of the product of the application
            latest_release:
              type: object
              properties:
                href:
                  type: string
                  description: |
                    Hyperlink to the TAC API endpoint to get the latest release for the application
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/releases/12sdfe6bd3c480fd58549c03
              description: Latest Release for an application
          description: Section to include hyperlinks based on Hypertext Application Language
      description: It contains information about an application in a catalog
    HelmChart:
      required:
        - content_digest
        - name
        - repo_digest
        - repository
        - url
        - version
      type: object
      properties:
        content_digest:
          maxLength: 255
          type: string
          description: Digest of the content
          example: sha256:81a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb64b
        repo_digest:
          maxLength: 255
          type: string
          description: Digest of the repository
          example: sha256:37a957b541234a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb23f
        name:
          maxLength: 64
          type: string
          description: Name of the Helm chart
          example: argo-cd
        version:
          maxLength: 64
          type: string
          description: This is the version of the chart generated by TAC
          example: 4.5.1
        repository:
          maxLength: 255
          type: string
          description: Location of the Helm chart repository
          example: us-east4-docker.pkg.dev/vmw-app-catalog/registry-03bc486b/charts/ubuntu-22
        url:
          maxLength: 255
          type: string
          description: Location of the Helm chart in the repository
          example: us-east4-docker.pkg.dev/vmw-app-catalog/registry-03bc486b/charts/ubuntu-22/argo-cd:4.5.1
      description: An application release of a Helm Chart which describes a set of Kubernetes resources
    ProductBase:
      required:
        - distributable
        - key
        - name
        - scope
      type: object
      properties:
        key:
          maxLength: 100
          pattern: "^[a-zA-Z0-9._-]+$"
          type: string
          description: "Key for the product. Only alphanumeric, underscore, dash and dot characters are allowed."
          example: wordpress
        name:
          maxLength: 100
          type: string
          description: Name to be set for the product
          example: Wordpress
        legal_overridden_name_bitnami:
          maxLength: 100
          type: string
          description: Overrides the product's name with this value to ensure legal compliance in certain contexts in Bitnami scope
          example: Wordpress packaged By Bitnami
        legal_overridden_name_vmware:
          maxLength: 100
          type: string
          description: Overrides the product's name with this value to ensure legal compliance in certain contexts in VMware scope
          example: Wordpress packaged By VMware
        distributable:
          type: boolean
          description: Mark the product as distributable.
          example: false
        description:
          maxLength: 255
          type: string
          description: General description of the product.
          example: WordPress plugin that links your installation to the WordPress Cloud Management Console and Support
        trademark_disclaimer_bitnami:
          maxLength: 1024
          type: string
          description: This will be a text to be included as a trademark disclaimer per product in Bitnami scope
          example: "Trademarks: This software listing is packaged by Bitnami. The respective trademarks mentioned ..."
        trademark_disclaimer_vmware:
          maxLength: 1024
          type: string
          description: This will be a text to be included as a trademark disclaimer per product in VMware scope
          example: "Trademarks: This software listing is packaged by VMware. The respective trademarks mentioned ..."
        icon_url:
          type: string
          description: Absolute url for product icon
          format: uri
          example: https://myurl.com/myproduct.png
        containers_non_root:
          type: boolean
          description: Building instruction that specifies whether the related platforms of packaging type container are classified as either root or non-root.
          example: false
          default: true
        containers_from_scratch:
          type: boolean
          description: Building information that specifies whether the related platforms of packaging type container are created from scratch when this flag is true.
          example: false
          default: false
        scope:
          $ref: '#/components/schemas/ProductScope'
      description: Product basic data required to identify it.
    RegistryId:
      type: string
      description: Identifier of the registry
      example: 549cfa79-352c-4555-9d28-4442de551829
    CatalogItemStatus:
      maxLength: 30
      type: string
      description: |
        Status for any item in the catalog. It can be applied to products, branches, versions, platforms, applications or distros.
      enum:
        - DRAFT
        - ACTIVE
        - SCHEDULED_DEPRECATION
        - DEPRECATION_GRACE_PERIOD
        - DEPRECATED
        - NON_SUPPORTED
    ApplicationProduct:
      type: object
      description: Holds the information about applications of a single product
      allOf:
        - $ref: '#/components/schemas/ApplicationProductBase'
        - required:
            - branches
          type: object
          properties:
            branches:
              type: array
              description: Array of branches of the product.
              items:
                $ref: '#/components/schemas/ApplicationBranch'
          description: Branches related to the product
    DeprecationPolicyReference:
      required:
        - deprecation_policy_id
      type: object
      properties:
        deprecation_policy_id:
          maxLength: 36
          type: string
          description: Identifier of the deprecation policy
          example: 49b8ee44-2945-4d93-8e87-a608399cfc3a
      description: Reference to an existing deprecation policy.
      allOf:
        - $ref: '#/components/schemas/DeprecationPolicyBase'
    VirtualMachine:
      required:
        - digest
        - image
        - version
      type: object
      properties:
        image:
          $ref: '#/components/schemas/ImageResource'
        version:
          maxLength: 64
          type: string
          description: Version of the virtual machine
          example: "4"
        digest:
          maxLength: 256
          type: string
          description: Unique and inmutable identifier of the virtual machine
          example: 232a180dbcbcfa7250917507f3827d88a9ae89bb1cdd8fe3ac4db7b764ebb25a
      description: An application release of a virtual machine
    Error404:
      type: object
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            status:
              example: 404
            detail:
              example: Resource not found
            type:
              example: https://example.com/probs/not-found
    CustomizationArtifact:
      required:
        - filename
        - id
        - url
      type: object
      properties:
        id:
          maxLength: 64
          type: string
          description: Customization artifact id
          example: 127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935
        url:
          maxLength: 256
          type: string
          description: Endpoint which will return the s3 signed url to download the file
          example: /v1/catalogs/46ba3c35-fb85-44a1-8336-694b4d4f4b91/files/81a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb64b?filename=custom-postgresql-15-15.2.0-r5-debian-11-amd64.ova
        filename:
          maxLength: 64
          type: string
          description: Name of the file related to the customization
          example: script.sh
      description: Tangible asset related with an Customization
    PlatformFamilyReleaseMetadata:
      required:
        - release_metadata
      type: object
      properties:
        platform:
          $ref: '#/components/schemas/PlatformFamily'
        release_metadata:
          type: array
          items:
            $ref: '#/components/schemas/ReleaseMetadata'
      description: |
        Collection of release metadata. It can be related with a specific platform (e.g containers, virtual machines)
        or not (e.g chart metadata or common container metadata)
    ReleasePostFilter:
      type: object
      properties:
        spdx_report_ids:
          type: array
          items:
            $ref: '#/components/schemas/ReleaseMetadataId'
        expand_relationships:
          type: boolean
          description: Include detailed release payload for the dependencies and dependants of the release
          default: false
        applications_only:
          type: boolean
          description: Include only first level releases that are applications in the catalog (exclude dependency releases)
          default: false
        page_number:
          minimum: 1
          type: integer
          description: An integer that identifies the page number for a paged response
          default: 1
        page_size:
          maximum: 100
          minimum: 1
          type: integer
          description: An integer that identifies the maximum page size for a paged response
          default: 20
      description: Filter with potential large set of values to retrieve releases in POST operation
    CreatePrivateRegistryRequest:
      required:
        - access_secret
        - description
        - name
        - provider
        - url
      type: object
      properties:
        name:
          type: string
          description: Name of the registry
          example: My registry
        description:
          type: string
          description: Description of the registry
          example: Registry for storing container releases
        provider:
          type: string
          description: |
            Provider of the registry (platform that hosts it). Supported values are: AMAZON_ELASTIC_CONTAINER_REGISTRY,
            HARBOR, NEXUS_CONTAINER_REGISTRY, AZURE_CONTAINER_REGISTRY, JFROG_CONTAINER_REGISTRY, GITHUB_CONTAINER_REGISTRY,
            GOOGLE_ARTIFACT_REGISTRY
          example: HARBOR
        url:
          type: string
          description: Url of the registry
          example: https://harbor.mydomain.com
        access_key:
          type: string
          description: Access key to authenticate to the registry
          example: robot$user123
        access_secret:
          type: string
          description: Access secret to authenticate to the registry
          example: p4ssw0rd1234
      description: It represents the input payload for creating a new private registry
    CatalogApplicationRequestPostBody:
      type: object
      properties:
        kind:
          $ref: '#/components/schemas/CatalogApplicationRequestKind'
      description: It represents a request for an application
      discriminator:
        propertyName: kind
        mapping:
          CREATION: '#/components/schemas/CatalogApplicationCreationRequestPostBody'
          DELETION: '#/components/schemas/CatalogApplicationDeletionRequestPostBody'
      oneOf:
        - $ref: '#/components/schemas/CatalogApplicationCreationRequestPostBody'
        - $ref: '#/components/schemas/CatalogApplicationDeletionRequestPostBody'
    ApplicationProductBase:
      required:
        - product
      type: object
      properties:
        product:
          $ref: '#/components/schemas/Product'
      description: Holds the base information about applications of a single product
    DeprecationPolicyBase:
      required:
        - deprecation_date
        - key
        - name
      type: object
      properties:
        key:
          maxLength: 100
          pattern: "^[a-zA-Z0-9._-]+$"
          type: string
          description: "Key for the deprecation policy. Only alphanumeric, underscore, dash and dot characters are allowed."
          example: wordpress-6-deprecation
        name:
          maxLength: 100
          type: string
          description: Human-readable name for the deprecation policy.
          example: Deprecation of Wordpress 6
        deprecation_date:
          type: string
          description: Effective date since which the deprecation policy will take effect.
          format: date
          example: 2022-12-14
        grace_period_days:
          type: integer
          description: "Period of time in days **after** the deprecation date in which the support for the catalog item, might be reduced instead of being completely removed."
          format: int32
          example: 30
          default: 0
        reason:
          maxLength: 255
          type: string
          description: Sentence explaining why the deprecation policy is set.
          example: We will only maintain newest versions of Wordpress
        alternative:
          maxLength: 255
          type: string
          description: Sentence pointing to alternatives to the deprecated resource.
          example: Wordpress 7 can be used instead
      description: Basic information for a deprecation policy
    BaseImagesPage:
      type: object
      description: It represents a paged response for a collection of base images
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/BaseImageDetailed'
          description: It holds the collection of base images for a paged response
    SubscriptionId:
      type: string
      description: Identifier of the subscription in CSP. Old subscriptions might have no CSP id.
      example: aa6ce24d-b38a-405b-a1ca-3ac0a79418bb
    ProductScope:
      maxLength: 30
      type: string
      description: "Scope of a product in the catalog, distinguishing between products for VAC's customers and those not to be offered to customers, but publicly available."
      example: ONLY_PUBLIC
      enum:
        - COMMON
        - ONLY_PUBLIC
        - ONLY_CUSTOMERS
    CustomizationDetailedPage:
      type: object
      description: It represents a paged response for a collection of customizations
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/CustomizationDetailed'
          description: It holds the collection of customizations for a paged response
    DaedalusResponse:
      type: string
      description: The GraphQL response from Daedalus
    Error403:
      type: object
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            status:
              example: 403
            detail:
              example: User has no permission to perform the operation
            type:
              example: https://example.com/probs/no-permission
    ProductBasicInfo:
      required:
        - description
        - key
        - name
      type: object
      properties:
        name:
          type: string
          description: Name of product
          example: Argo CD
        key:
          type: string
          description: Internal key/identifier for the product in TAC
          example: argo-cd
        description:
          type: string
          description: Description of the product
          example: "Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes"
        long_display_name:
          type: string
          description: Long name of the application
          example: Argo CD packaged by VMware
        disclaimer:
          type: string
          description: VMware disclaimer for the application
          example: "Trademarks: This software listing is packaged by VMware. The respective trademarks mentioned in the offering are owned by the respective companies, and use of them does not imply any affiliation or endorsement"
        category:
          type: string
          description: Information about the category of a product
          example: Developer Tools
      description: It contains information about the software offered
    ApplicationsArray:
      type: array
      description: Array with all the applications.
      items:
        $ref: '#/components/schemas/ApplicationProduct'
    AppliedPolicy:
      type: object
      properties:
        deprecation_policy:
          $ref: '#/components/schemas/DeprecationPolicyReference'
        nonsupport_policy:
          $ref: '#/components/schemas/NonSupportPolicyReference'
      description: |
        Holds information about policy being applied to the item, which will be defining the current status of the item.
    VersionReference:
      type: object
      properties:
        version:
          type: string
          description: Public identifier for the version as set by the publishers.
          example: "6.1"
        version_id:
          maxLength: 36
          type: string
          description: Identifier of the version in the catalog.
          example: 22303119-5443-40b5-b95f-8914e7709ca5
        license:
          $ref: '#/components/schemas/LicenseReference'
        discovered_at:
          type: string
          description: Original discovery date of the version.
          format: date-time
          example: 2022-11-14T16:00:00Z
      description: |
        Basic data of a version meant only for reference purposes.
    RegistriesPage:
      type: object
      description: It represents a paged response for a collection of registries
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/RegistryDetailed'
          description: It holds the collection of registries for a paged response
    OperatingSystemPage:
      type: object
      description: It represents a paged response for a collection of operating systems
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/OperatingSystemDetailed'
          description: It holds the collection of operating systems for a paged response
    ApplicationBranch:
      type: object
      description: Holds the information about a single branch of applications.
      allOf:
        - $ref: '#/components/schemas/ApplicationBranchBase'
        - required:
            - versions
          type: object
          properties:
            versions:
              type: array
              description: Array of versions and platforms of the branch.
              items:
                $ref: '#/components/schemas/ApplicationVersionInfo'
          description: Versions related to the branch
    ReleaseFailure:
      required:
        - description
      type: object
      properties:
        description:
          type: string
          description: Description of the error
          example: An error happened when a release with customization was tried to be built
        source_url:
          type: string
          description: Endpoint which will return the s3 signed url to download the source code
          example: https://app-catalog.vmware.com/api/v1/artifacts/89a6380a7d010648bad74e4de1c2ef17481a7f4715ff62bb8924e5c0b907bf3d?filename=custom-postgresql-15-15.2.0-r5-debian-11-amd64.ova&namespace=68c0f832-5169-4433-ab2f-40e939e3f1bc
        error_date:
          type: string
          description: The date-time which the attempt of release failed
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        cause:
          $ref: '#/components/schemas/ReleaseFailureCause'
      description: It represents an error when a release was attempted
    ConstraintsViolation:
      required:
        - field
        - message
      type: object
      properties:
        field:
          type: string
          description: The field that is causing the constraints violation
          example: foo_field
        message:
          type: string
          description: The human-readable constraints violation description
          example: Should have more than 24 characters
      description: It represents a constraints violation error
    ApplicationOfferingId:
      type: string
      description: Identifier of the offering
      example: d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
    CreateManagedRegistryCredentialRequest:
      required:
        - description
      type: object
      properties:
        description:
          type: string
          description: Description of the credential requested
          example: Credential for server A
      description: It represents the input payload for creating a new managed registry credential
    TrackingReference:
      required:
        - tracker_id
      type: object
      properties:
        tracker_id:
          $ref: '#/components/schemas/TrackerId'
        name:
          maxLength: 100
          type: string
          description: Human-readable name for the version tracker.
          example: vtracker-mybb
      description: Reference data about a version tracker.
    SearchCriteria:
      type: object
      properties:
        repo_digests:
          maxItems: 100
          type: array
          items:
            maxLength: 255
            type: string
            example: sha256:37a957b541234a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb23f
        content_digests:
          maxItems: 100
          type: array
          items:
            maxLength: 255
            type: string
            example: sha256:81a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb64b
        expand_relationships:
          type: boolean
          description: Include detailed release payload for the dependencies and dependants of the release
          default: false
      description: List of digests split by repo_digest and content_digest
    CustomizationCreate:
      required:
        - file
      type: object
      properties:
        filter:
          $ref: '#/components/schemas/CustomizationFilter'
        name:
          type: string
          example: my customization
        file:
          type: string
          format: binary
    ContainerImage:
      required:
        - digests
        - repository
      type: object
      properties:
        tags:
          type: array
          description: List of full tags added to the image at the moment it was released
          example:
            - registry/repository/image:tag
            - registry/repository/image:latest
          items:
            type: string
        repository:
          maxLength: 255
          type: string
          description: Location of the Container repository
          example: us-east4-docker.pkg.dev/vmw-app-catalog/registry-03bc486b/ubuntu-22
        digests:
          oneOf:
            - $ref: '#/components/schemas/SingleArchDigests'
            - $ref: '#/components/schemas/MultiArchDigests'
      description: An application release of a container
    CVEsSummary:
      type: object
      properties:
        critical:
          type: integer
          description: The number of critical CVEs associated with the application.
          example: 1
        high:
          type: integer
          description: The number of high severity CVEs associated with the application.
          example: 4
        medium:
          type: integer
          description: The number of medium severity CVEs associated with the application.
          example: 7
        low:
          type: integer
          description: The number of low severity CVEs associated with the application.
          example: 2
        minimal:
          type: integer
          description: The number of minimal severity CVEs associated with the application.
          example: 5
        unknown:
          type: integer
          description: The number of CVEs with unknown severity associated with the application.
          example: 0
      description: Represents information about common vulnerabilities and exposures (CVEs) associated with an application.
    Error412:
      type: object
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            status:
              example: 412
            detail:
              example: Precondition failed
            type:
              example: https://example.com/probs/precondition-failed
    RequestStatus:
      type: string
      description: "The status of the request based on the status of all the applications in the same request: PENDING, IN_PROGRESS, COMPLETED, FAILED"
      example: COMPLETED
    UserTokenInfo:
      required:
        - organization
        - service_id
        - user
      type: object
      properties:
        organization:
          required:
            - id
            - name
          type: object
          properties:
            id:
              $ref: '#/components/schemas/OrganizationId'
            name:
              type: string
              description: Name of the organization
              example: My org
        user:
          required:
            - id
            - roles
            - username
          type: object
          properties:
            id:
              type: string
              description: Identifier of the user in CSP
              example: vmware.com:aaa24d36-94a2-63da-9383-8f58c0d12bbb
            username:
              type: string
              description: Alias of the user
              example: johndoe
            roles:
              type: array
              items:
                type: string
                description: Roles of the user in CSP
                example: csp:aa6ce24d-b38a-405b-a1ca-3ac0a79418bb/becs:user
          description: Information related with the user in the token
        service_id:
          type: string
          description: Identifier of the service in CSP
          example: aa6ce24d-b38a-405b-a1ca-3ac0a79418bb
      description: Information extracted from the JWT token related to the user
    Customization:
      required:
        - artifact
        - id
        - version
      type: object
      properties:
        id:
          $ref: '#/components/schemas/CustomizationId'
        version:
          type: string
          description: Version of the customization
          example: v4
        artifact:
          $ref: '#/components/schemas/CustomizationArtifact'
      description: It contains information about a customization in a catalog
    OperatingSystemDetailed:
      type: object
      description: Operating system detailed information
      allOf:
        - $ref: '#/components/schemas/OperatingSystemBase'
        - type: object
          properties:
            status:
              type: string
              description: "Status of the operating system (ACTIVE, DEPRECATED)"
              example: ACTIVE
          description: Detailed properties of an operating system
    Page:
      type: object
      properties:
        page:
          type: integer
          description: It contains the number of the page
          example: 1
        page_size:
          type: integer
          description: It contains the total number of elements in the current page
          example: 5
        total_size:
          type: integer
          description: It contains the total number of elements among all the pages
          example: 10
        total_pages:
          type: integer
          description: It contains the total number of pages for a requested page size
          example: 2
      description: It contains the information on page and size for a paged response
    CatalogApplicationDeletionRequestPostBody:
      required:
        - application_ids
        - name
      type: object
      properties:
        name:
          type: string
          description: Name of the application deletion request
          example: My application deletion request
        description:
          type: string
          description: Description of the application deletion request
          example: Application deletion request with some apps
        application_ids:
          minItems: 1
          type: array
          description: The list of application ids from the catalog to delete
          items:
            $ref: '#/components/schemas/CatalogApplicationId'
      description: It contains the information required to delete applications
    CategoryReference:
      required:
        - category_id
      type: object
      properties:
        category_id:
          maxLength: 36
          type: string
          description: Category identifier in the catalog.
          example: 99a07a3f-25fd-4dcb-9bf1-cdcb375033ca
        name:
          maxLength: 100
          type: string
          description: Human-readable name for the category.
          example: Database
      description: Reference data about a category.
    ReleaseReleasedAt:
      type: string
      description: The date-time which the release was finished at
      format: date-time
      example: 2023-03-03T00:59:52.762Z
    ReleaseVersion:
      maxLength: 64
      type: string
      description: A text identifier for the specific upstream software released
      example: 2.6.7
    BaseImageRequest:
      required:
        - container_image
        - description
        - name
        - operating_system_id
        - registry_id
      properties:
        name:
          type: string
          description: Name of the base image
          example: Debian 11
        description:
          type: string
          description: Description of the base image
          example: Debian 11 base image
        registry_id:
          $ref: '#/components/schemas/RegistryId'
        container_image:
          type: string
          description: The container image described by REPOSITORY_NAME/IMAGE_NAME:TAG
          example: base-images/debian:buster
        operating_system_id:
          type: string
          description: The operating system id used in the base image
          example: 2a4ed7c4-e94f-4cb5-a567-eae98e8efc49
      description: It contains the information required to create a base image for an organization in a registry
    ApplicationBranchExtended:
      type: object
      description: Holds the extended information about a single branch of applications.
      allOf:
        - $ref: '#/components/schemas/ApplicationBranchBase'
        - required:
            - versions
          type: object
          properties:
            versions:
              type: array
              description: Array of versions and platforms of the branch.
              items:
                $ref: '#/components/schemas/ApplicationVersionInfoExtended'
          description: Extended information for the application branch.
    OperatingSystemBase:
      required:
        - distro
        - id
        - name
        - version
      type: object
      properties:
        id:
          type: string
          description: id of operating system
          example: d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
        name:
          type: string
          description: Name of the operating system
          example: Centos 7
        distro:
          type: string
          description: Distro of operating system
          example: centos
        version:
          type: string
          description: version of distro
          example: "7"
      description: Base Operating System information
      x-parent: true
    ProductLicensesReferenceArray:
      type: array
      description: Array with all the licenses related to a product.
      items:
        $ref: '#/components/schemas/ProductLicenseReference'
    ProcessingStatus:
      required:
        - status
      properties:
        status:
          type: string
          description: "The processing status of the application: PENDING, IN_PROGRESS, COMPLETED, FAILED"
          example: COMPLETED
      description: The processing status of an application
    ApplicationPlatformInfo:
      type: object
      description: |
        Holds the information about the application (status) with platform.
      allOf:
        - $ref: '#/components/schemas/AuditDate'
        - required:
            - platform
            - status
          type: object
          properties:
            platform:
              $ref: '#/components/schemas/Platform'
            status:
              $ref: '#/components/schemas/CatalogItemStatus'
            applied_policy:
              $ref: '#/components/schemas/AppliedPolicy'
            testing_environments_features:
              type: array
              description: |
                This is an array of all available features belonging to the testing environments in which that application was tested. This array could be empty. Values could be: "fips-compliant", "arm64-compliant", "amd64-compliant", "airgap-compliant", "non-root-compliant".
              example:
                - fips-compliant
                - arm64-compliant
              items:
                type: string
                description: Feature of the testing environment
                example: fips-compliant
            latest_built_version:
              $ref: '#/components/schemas/VersionReference'
            last_built_at:
              type: string
              description: Date on which the version was last built
              format: date-time
              example: 2023-10-20T13:56:27Z
          description: Information specific for the extended aspect
    ApplicationProductExtended:
      type: object
      description: Holds the extended information about applications of a single product
      allOf:
        - $ref: '#/components/schemas/ApplicationProductBase'
        - required:
            - branches
          type: object
          properties:
            branches:
              type: array
              description: Array of branches of the product.
              items:
                $ref: '#/components/schemas/ApplicationBranchExtended'
          description: Branches related to the product.
    DistroReference:
      required:
        - distro_id
      type: object
      properties:
        distro_id:
          maxLength: 36
          type: string
          description: Identifier of the existing distro
          example: b1471ead-0a0e-4069-b8b5-59780b57d17f
      description: Reference data about a single distro.
      allOf:
        - $ref: '#/components/schemas/DistroBase'
    CatalogApplicationRequestKind:
      type: string
      description: The type of application request
      enum:
        - CREATION
        - DELETION
    Architecture:
      maxLength: 30
      type: string
      description: |
        Processor architecture considering instruction set plus size. Usually `amd64` or `arm64`.
      example: amd64
    ApplicationOffering:
      required:
        - branch
        - id
        - operating_systems
        - packaging_type
        - product
        - status
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ApplicationOfferingId'
        product:
          $ref: '#/components/schemas/ProductBasicInfo'
        packaging_type:
          $ref: '#/components/schemas/PackagingType'
        branch:
          $ref: '#/components/schemas/Branch'
        status:
          type: string
          description: Status of the application offered in TAC
          example: ENABLED
        operating_systems:
          type: array
          description: Operating systems supported by this application
          items:
            $ref: '#/components/schemas/OperatingSystemBase'
        _links:
          type: object
          properties:
            operating_systems:
              type: array
              description: Operating systems links related to this application offering
              items:
                type: object
                properties:
                  href:
                    type: string
                    description: Hyperlink to the TAC API endpoint to get an operating system of this application offering
                    example: /v1/operating-system/351c1739-ca01-4a74-8124-1b99257cd7c9
                description: Operating system link.
          description: Section to include hyperlinks based on Hypertext Application Language
      description: It represents an application offered by TAC
    TrackerId:
      type: string
      description: Unique identifier of the tracker in UUID format.
      example: fd19e602-e9dd-47b8-ab4f-8b9f5b4ee570
    CustomizationFilter:
      type: object
      properties:
        base_image_id:
          $ref: '#/components/schemas/BaseImageId'
        product_key:
          type: string
          description: The product where the customization must be applied
          example: apache_kafka
        branch:
          $ref: '#/components/schemas/Branch'
      description: It has information where a customization must be applied based in a combination of parameters
    ReleaseId:
      maxLength: 255
      type: string
      description: Unique identifier of a release
      example: 64455e6bd3c480fd58546c75
    BaseImagePackagingType:
      type: string
      description: "Packaging type of a base image (OVA, CONTAINER_IMAGE)"
      example: CONTAINER_IMAGE
    DraftEntity:
      type: boolean
      description: Set the entity as draft.
      example: false
      default: false
    CatalogApplicationRequestPage:
      type: object
      description: It represents a paged response for a collection of application requests
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/CatalogApplicationRequest'
          description: It holds the collection of application requests for a paged response
    PlatformRequestBase:
      required:
        - key
        - name
        - packaging
      type: object
      properties:
        key:
          maxLength: 100
          pattern: "^[a-zA-Z0-9._-]+$"
          type: string
          description: "Key for the platform. Only alphanumeric, underscore, dash and dot characters are allowed."
          example: debian-11-multiarch-containerimage
        name:
          maxLength: 100
          type: string
          description: Human-readable name for the platform.
          example: debian-11-multiarch-containerimage
        packaging:
          $ref: '#/components/schemas/PackagingType'
        architecture:
          $ref: '#/components/schemas/Architecture'
        description:
          maxLength: 255
          type: string
          description: Detailed information about the platform's capabilities and characteristics.
          example: Debian 11 multi-architecture platform that supports AMD64 processor architecture and is optimized for deployment as a container image.
        url:
          maxLength: 255
          type: string
          description: "In the case of container images, URI where it is located."
          example: docker.io/bitnami/debian:11
      description: |
        Data of a platform that can be created or updated. This object is intended to be inherited by PlatformBase and PlatformRequest
    Catalog:
      required:
        - id
        - name
        - owned
        - shared
      type: object
      properties:
        id:
          $ref: '#/components/schemas/CatalogId'
        name:
          type: string
          description: Name of the catalog
          example: DefaultCatalog
        created_at:
          type: string
          description: Date when the catalog was registered
          format: date-time
          example: 2017-07-21T17:32:28Z
        updated_at:
          type: string
          description: Last date when the catalog was updated
          format: date-time
          example: 2017-07-21T17:32:28Z
        shared:
          type: boolean
          description: Catalog is (or can be) shared with different organizations
          example: false
          default: false
        owned:
          type: boolean
          description: Organization owns the catalog
          example: true
          default: false
        _links:
          type: object
          properties:
            applications:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the applications of this catalog
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/applications
              description: Applications of this catalog
            customizations:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the customizations available in this catalog
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/customizations
              description: Customizations in this catalog
          description: Section to include hyperlinks based on Hypertext Application Language
      description: It contains information about an catalog in an organization
    LatestRelease:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ReleaseId'
        revision:
          $ref: '#/components/schemas/ReleaseRevision'
        released_at:
          $ref: '#/components/schemas/ReleaseReleasedAt'
        version:
          $ref: '#/components/schemas/ReleaseVersion'
      description: Information of latest release
    ReleaseMetadataId:
      maxLength: 64
      type: string
      description: "Release metadata id, which is the hash of the content"
      example: 127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935
    RegistryCredentialsPage:
      type: object
      description: It represents a paged response for a collection of registry credentials
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/RegistryCredential'
          description: It holds the collection of registry credentials for a paged response
    CatalogApplicationId:
      type: string
      description: Identifier of the application
      example: d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
    ReleasesPage:
      type: object
      description: It represents a paged response for a collection of releases
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/Release'
          description: It holds the collection of releases for a paged response
    ApplicationsArrayExtended:
      type: array
      description: Array with all the applications containing extended data.
      items:
        $ref: '#/components/schemas/ApplicationProductExtended'
    ApplicationPlatformInfoExtended:
      type: object
      description: |
        Holds the extended information about the application (status) with platform.
      allOf:
        - $ref: '#/components/schemas/ApplicationPlatformInfo'
        - type: object
          properties:
            cves_summary:
              $ref: '#/components/schemas/CVEsSummary'
          description: Information specific for the extended aspect
    ProductIdOrKey:
      maxLength: 100
      type: string
      description: Either the identifier (UUID) or the key of an existing product.
      example: 2217eb9c-f042-11eb-9a03-0242ac130003
    DistroKey:
      maxLength: 100
      type: string
      description: Key for identifying the operating system distribution.
      example: debian-11
    RequestType:
      type: string
      description: Type of the request. The possible values are add or remove
      example: add
    CatalogApplicationCreationRequestPostBody:
      required:
        - application_offering_ids
        - base_image_id
        - name
      type: object
      properties:
        name:
          type: string
          description: Name of the application creation request
          example: My application creation request
        description:
          type: string
          description: Description of the application creation request
          example: Application creation request with some apps
        application_offering_ids:
          minItems: 1
          type: array
          description: The list of application ids from the offering
          items:
            $ref: '#/components/schemas/ApplicationOfferingId'
        base_image_id:
          $ref: '#/components/schemas/BaseImageId'
        registry_ids:
          minItems: 1
          type: array
          description: The list of registry ids to distribute the applications
          items:
            $ref: '#/components/schemas/RegistryId'
      description: It contains the information required to create an application request
    CustomizationUpdate:
      type: object
      properties:
        file:
          type: string
          format: binary
        name:
          type: string
          example: my customization
    Quotas:
      type: object
      properties:
        applications:
          type: object
          properties:
            limit:
              type: integer
              description: Limit of applications in private catalog of the organizations
              example: 25
            usage:
              type: integer
              description: "Number of applications (RELEASED, PENDING, DEPRECATED) in private catalog of the organization"
          description: Quotas applied on the applications in the private catalog of the organization
      description: Quotas for an organization
    DaedalusRequest:
      type: string
      description: The GraphQL query to send to Daedalus
    OrganizationId:
      type: string
      description: Identifier of the organization
      example: d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
    CatalogId:
      type: string
      description: Identifier of the catalog
      example: d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
    BaseImageDetailed:
      required:
        - application_count
        - operating_system
        - packaging_type
        - platforms
        - shared
        - status
      type: object
      description: It contains information about the base image
      allOf:
        - $ref: '#/components/schemas/BaseImage'
        - type: object
          properties:
            shared:
              type: boolean
              description: Base image is (or can be) shared with different organizations
              example: false
            application_count:
              type: integer
              description: Total no of Applications which has this base image
              example: 2
            status:
              type: string
              description: "Status of base image (ACTIVE, DEPRECATED, ARCHIVED)"
              example: ACTIVE
            packaging_type:
              $ref: '#/components/schemas/BaseImagePackagingType'
            platforms:
              type: array
              description: List of architectures of the base image
              items:
                $ref: '#/components/schemas/PlatformFamily'
            operating_system:
              $ref: '#/components/schemas/OperatingSystemBase'
            pull_registry:
              $ref: '#/components/schemas/Registry'
            created_at:
              type: string
              description: Date of the creation of the base image
              format: date-time
              example: 2023-03-03T00:59:52.762Z
            updated_at:
              type: string
              description: Date of the update of the base image
              format: date-time
              example: 2023-03-03T00:59:52.762Z
            removed_at:
              type: string
              description: Date of the removal of the base image
              format: date-time
              example: 2023-03-03T00:59:52.762Z
            removed_by:
              type: string
              description: User that requested the removal of the base image
              example: John Doe
            _links:
              type: object
              properties:
                pull_registry:
                  type: object
                  properties:
                    href:
                      type: string
                      description: Hyperlink to the TAC API endpoint to get details of the pull registry
                      example: /v1/registries/cddcfa79-352c-4555-9d28-4442de559876
                  description: Pull registry related with this base image
                operating_system:
                  type: object
                  properties:
                    href:
                      type: string
                      description: Hyperlink to the TAC API endpoint to get details of the operating system
                      example: /v1/operating-system/351c1739-ca01-4a74-8124-1b99257cd7c9
                  description: Operating system link related with this base image.
              description: Section to include hyperlinks based on Hypertext Application Language
      x-parent: true
    NonSupportPolicyBase:
      required:
        - key
        - name
        - reason
      type: object
      properties:
        key:
          maxLength: 100
          pattern: "^[a-zA-Z0-9._-]+$"
          type: string
          description: "Key for the non-support policy. Only alphanumeric, underscore, dash and dot characters are allowed."
          example: memcached-nonsupport
        name:
          maxLength: 100
          type: string
          description: Human-readable name for the non-support policy.
          example: Memcached is not supported anymore
        reason:
          maxLength: 255
          type: string
          description: Sentence explaining why the non-support policy is set.
          example: Upstream project has been discontinued.
      description: Basic information for a non-support policy
    ImageResource:
      required:
        - filename
        - id
        - url
      type: object
      properties:
        id:
          maxLength: 64
          type: string
          description: "Image id, which is the hash of the content"
          example: 127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935
        url:
          maxLength: 256
          type: string
          description: Endpoint which will return the s3 signed url
          example: https://app-catalog.vmware.com/api/v1/artifacts/89a6380a7d010648bad74e4de1c2ef17481a7f4715ff62bb8924e5c0b907bf3d?filename=common-postgresql-15-15.2.0-r5-debian-11-amd64.ova&namespace=68c0f832-5169-4433-ab2f-40e939e3f1bc
        filename:
          maxLength: 64
          type: string
          description: Name of the file related with the image
          example: argo-cd-4.5.1.ova
      description: Tangible asset related with an Virtual Machine image
    NonSupportPolicyReference:
      required:
        - nonsupport_policy_id
      type: object
      properties:
        nonsupport_policy_id:
          maxLength: 36
          type: string
          description: Identifier of the non-support policy
          example: 49b8ee44-2945-4d93-8e87-a608399cfc3a
      description: Reference to an existing non-support policy.
      allOf:
        - $ref: '#/components/schemas/NonSupportPolicyBase'
    DistroOs:
      maxLength: 100
      type: string
      description: Operating system distribution name for Distro.
      example: debian
    Branch:
      maxLength: 32
      type: string
      description: Identifier of the branch
      example: "2"
    OperatingSystemId:
      maxLength: 255
      type: string
      description: Unique identifier of an operating system
      example: 0fd19f43-18da-4777-b044-9a5b046ac104
    ConstraintsViolationsError:
      required:
        - violations
      type: object
      properties:
        violations:
          type: array
          example:
            - field: foo_field
              message: Should have more than 24 characters
          items:
            $ref: '#/components/schemas/ConstraintsViolation'
      description: Error object extension for returning a constraints violation error
      example:
        type: https://example.com/probs/validation-error
        title: Validation error
        status: 400
        detail: There was an error validating the request
        violations:
          - field: amount
            message: It should be greater than zero
      allOf:
        - $ref: '#/components/schemas/Error'
    ProductLicenseRequest:
      required:
        - main
      type: object
      properties:
        main:
          type: boolean
          description: Specifies if the license should be considered as the main license of all licenses related to the product.
          example: false
          default: false
        license_relative_path:
          $ref: '#/components/schemas/LicenseRelativePath'
      description: Reference data required for creation or updating of ProductLicense.
    PackagingType:
      type: string
      description: "Packaging type of the application (HELM_CHART, OVA, CONTAINER_IMAGE)"
      example: HELM_CHART
    Release:
      required:
        - _links
        - artifact
        - id
        - released_at
        - revision
        - version
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ReleaseId'
        branch:
          $ref: '#/components/schemas/Branch'
        version:
          $ref: '#/components/schemas/ReleaseVersion'
        revision:
          $ref: '#/components/schemas/ReleaseRevision'
        released_at:
          $ref: '#/components/schemas/ReleaseReleasedAt'
        packaging_type:
          $ref: '#/components/schemas/PackagingType'
        artifact:
          oneOf:
            - $ref: '#/components/schemas/HelmChart'
            - $ref: '#/components/schemas/VirtualMachine'
            - $ref: '#/components/schemas/ContainerImage'
        latest_release:
          $ref: '#/components/schemas/LatestRelease'
        product:
          $ref: '#/components/schemas/ProductBasicInfo'
        platforms:
          type: array
          items:
            $ref: '#/components/schemas/PlatformFamily'
        platform_release_metadata:
          type: array
          items:
            $ref: '#/components/schemas/PlatformFamilyReleaseMetadata'
        base_image:
          $ref: '#/components/schemas/BaseImage'
        registry:
          $ref: '#/components/schemas/Registry'
        catalog_id:
          $ref: '#/components/schemas/CatalogId'
        application_id:
          $ref: '#/components/schemas/CatalogApplicationId'
        customizations:
          type: array
          items:
            $ref: '#/components/schemas/Customization'
        supports_customizations:
          type: boolean
          description: Whether the release could have customizations or not.
        dependencies:
          type: array
          description: |
            Embebbed releases of the dependencies of the release.
            For example, for a Helm Chart release, the containers or the subcharts.
            Only informed when requesting a release by id with the expand_relationships=true query param.
          items:
            $ref: '#/components/schemas/Release'
        dependants:
          type: array
          description: |
            Embebbed releases of the dependants of the release.
            For example, for a container release, the Helm Charts that use it.
            Only informed when requesting a release by id with the expand_relationships=true query param.
          items:
            $ref: '#/components/schemas/Release'
        _links:
          required:
            - self
          type: object
          properties:
            catalog:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the catalog of the application this release belongs to
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9
              description: Catalog of the application this release belongs to
            application:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the application this release belongs to
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/applications/d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
              description: Application this release belongs to. Not every release belongs to an application (e.g releases of dependencies)
            base_image:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the base image of this release
                  example: /v1/base-images/cc6c7f4d-405b-a1ca-3ac0a79418c1
              description: Base image of this release
            latest_release:
              type: object
              properties:
                href:
                  type: string
                  description: |
                    Hyperlink to the TAC API endpoint to get the latest release for the application
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/releases/12sdfe6bd3c480fd58549c03
              description: Latest Release for an application
            dependencies:
              type: array
              description: Releases of the dependencies of this release
              items:
                type: object
                properties:
                  href:
                    type: string
                    description: Hyperlink to the TAC API endpoint to get the dependency release information
                    example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/releases/2222e6bd3c480fd58549c03
            dependants:
              type: array
              description: Releases of the dependants of this release
              items:
                type: object
                properties:
                  href:
                    type: string
                    description: Hyperlink to the TAC API endpoint to get the dependant release information
                    example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/releases/2222e6bd3c480fd58549c03
            self:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the information of this release by id
                  example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/releases/64455e6bd3c480fd58546c75
              description: This release
            registry:
              type: object
              properties:
                href:
                  type: string
                  description: Hyperlink to the TAC API endpoint to get the information of the registry related with the release
                  example: /v1/registries/64455e6bd3c480fd58546c75
              description: Registry related with the release
            product:
              type: object
              properties:
                href:
                  type: string
                  description: |
                    Hyperlink to the TAC API endpoint to get detailed information of a product
                  example: /v1/applications/product/wordpress/branch/7?packaging=CONTAINER_IMAGE&distro=photon-4
              description: Detailed information of the product of the release
          description: Section to include hyperlinks based on Hypertext Application Language
      description: Information of a release
    SingleArchDigests:
      required:
        - content_digest
        - repo_digest
      type: object
      properties:
        content_digest:
          type: string
          description: The content digest (registry-independent)
          example: sha256:81a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb64b
        repo_digest:
          type: string
          description: Digest of the manifest of the image
          example: sha256:37a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb24b
        platform:
          $ref: '#/components/schemas/PlatformFamily'
      description: Tuples of digests of the image in a platform family
    AuditDate:
      required:
        - created_at
      type: object
      properties:
        created_at:
          type: string
          description: Original creation date of the item
          format: date-time
          example: 2022-11-14T16:00:00Z
        updated_at:
          type: string
          description: Date on which the item was last updated
          format: date-time
          example: 2022-11-14T16:00:00Z
      description: |
        Data meant for auditing dates that apply to any item.
    CustomizationStatus:
      type: string
      description: "Status of the request (CREATED, UPDATED, DELETED, PROCESSING_CREATE_STARTED, PROCESSING_CREATE_SUCCEEDED, PROCESSING_CREATE_FAILED, PROCESSING_UPDATE_STARTED, PROCESSING_UPDATE_SUCCEEDED, PROCESSING_UPDATE_FAILED, PROCESSING_DELETE_STARTED, PROCESSING_DELETE_SUCCEEDED, PROCESSING_DELETE_FAILED)"
      example: CREATED
    ReleaseMetadata:
      required:
        - filename
        - id
        - mimeType
        - url
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ReleaseMetadataId'
        mime_type:
          maxLength: 64
          type: string
          description: Type of metadata
          example: trigger_info
        url:
          maxLength: 256
          type: string
          description: Endpoint which will return the s3 signed url to download the file
          example: https://app-catalog.vmware.com/api/v1/artifacts/89a6380a7d010648bad74e4de1c2ef17481a7f4715ff62bb8924e5c0b907bf3d?filename=common-postgresql-15-15.2.0-r5-debian-11-amd64.ova&namespace=68c0f832-5169-4433-ab2f-40e939e3f1bc
        filename:
          maxLength: 64
          type: string
          description: Name of the file related to the release metadata
          example: result.json
      description: Tangible assets related with a Release
    ProductReference:
      type: object
      description: Basic data about a product for reference purposes.
      allOf:
        - $ref: '#/components/schemas/ProductBase'
        - required:
            - product_id
            - status
            - tracker
          type: object
          properties:
            product_id:
              maxLength: 36
              type: string
              description: Product identifier in the item.
              example: 2b2a3f50-1275-4664-a2b8-b13eb08f77d6
            status:
              $ref: '#/components/schemas/CatalogItemStatus'
            tracking:
              $ref: '#/components/schemas/TrackingReference'
            licenses:
              $ref: '#/components/schemas/ProductLicensesReferenceArray'
            category:
              $ref: '#/components/schemas/CategoryReference'
            parent:
              $ref: '#/components/schemas/ProductLiteReference'
          description: Basic identification data of an existing product
    Error:
      required:
        - title
        - type
      type: object
      properties:
        type:
          type: string
          description: |
            A URI reference that identifies the problem type

            When dereferenced, it provide human-readable documentation for the problem type using HTML
          format: uri
          example: https://example.com/probs/out-of-credit
        title:
          type: string
          description: "A short, human-readable summary of the problem type"
          example: You do not have enough credit.
        status:
          type: integer
          description: The HTTP status code generated by the origin server for this occurrence of the problem
          example: 403
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence of the problem
          example: "Your current balance is 30, but that costs 50"
        instance:
          type: string
          description: |
            A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information
            if dereferenced
          format: uri-reference
          example: /account/2217eb9c-f042-11eb-9a03-0242ac130003/msgs/abc
      description: |
        Note: It follows [RFC-7807](https://tools.ietf.org/html/rfc7807#page-9) **proposed** standard

        Error object returned on any failure. It can be extended to add more params
    Registry:
      required:
        - id
        - name
        - url
      type: object
      properties:
        id:
          $ref: '#/components/schemas/RegistryId'
        name:
          type: string
          description: Name of the registry
          example: Harbor registry for my org
        url:
          type: string
          description: Url of the registry
          example: https://harbor.mydomain.com
        healthy:
          type: boolean
          description: Health of a registry
          example: true
        last_checked_at:
          type: string
          description: The date-time when the pull registry healthy was last checked at for a registry
          format: date-time
          example: 2023-03-03T00:59:52.762Z
      description: Registry where the artifacts of an application release are pushed to
    CustomizationDetailed:
      type: object
      description: "It contains information about a customization in a catalog with the latest releases affected by that customization (succeeded, pending and failed)"
      allOf:
        - $ref: '#/components/schemas/Customization'
        - required:
            - catalog_id
            - created_at
            - created_by
            - name
          type: object
          properties:
            name:
              type: string
              description: The display name of the customization
              example: my customization
            catalog_id:
              $ref: '#/components/schemas/CatalogId'
            version:
              type: string
              description: Version of the customization
              example: v4
            status:
              $ref: '#/components/schemas/CustomizationStatus'
            filter:
              $ref: '#/components/schemas/CustomizationFilter'
            created_by:
              type: string
              description: Name of the user that created the customization
              example: johndoe
            created_at:
              type: string
              description: Date of the creation of the customization
              format: date-time
              example: 2023-03-03T00:59:52.762Z
            updated_by:
              type: string
              description: Name of the user that created the customization
              example: johndoe
            updated_at:
              type: string
              description: Date of the update of the customization
              format: date-time
              example: 2023-03-03T00:59:52.762Z
            succeeded_releases:
              type: array
              description: |
                Contains the list of the latest (finished) releases for which the latest customization succeeded
              items:
                $ref: '#/components/schemas/Release'
            pending_releases:
              type: array
              description: |
                Contains the list of the latest (finished) releases for which the next latest customization is in progress
              items:
                $ref: '#/components/schemas/Release'
            failed_releases:
              type: array
              description: |
                Contains the list of the latest (finished) releases for which the next latest new customization has failed
              items:
                type: object
                properties:
                  release:
                    $ref: '#/components/schemas/Release'
                  failure:
                    $ref: '#/components/schemas/ReleaseFailure'
            _links:
              type: object
              properties:
                catalog:
                  type: object
                  properties:
                    href:
                      type: string
                      description: Hyperlink to the TAC API endpoint to get the catalog this customization belongs to
                      example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9
                  description: Catalog where the customization belongs to
                base_image:
                  type: object
                  properties:
                    href:
                      type: string
                      description: Hyperlink to the TAC API endpoint to get the base image where the customization must be applied
                      example: /v1/base-images/cc6c7f4d-405b-a1ca-3ac0a79418c1
                  description: Base image where the customization must be applied
                succeeded_releases:
                  type: array
                  description: Latest releases successfully customized
                  items:
                    type: object
                    properties:
                      href:
                        type: string
                        description: Hyperlink to the TAC API endpoint to get the release
                        example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/releases/12sdfe6bd3c480fd58549c03
                    description: Release succesfully customized
                pending_releases:
                  type: array
                  description: Latest releases pending to be customized
                  items:
                    type: object
                    properties:
                      href:
                        type: string
                        description: Hyperlink to the TAC API endpoint to get the release
                        example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/releases/12sdfe6bd3c480fd58549c03
                    description: Release pending to be customized
                failed_releases:
                  type: array
                  description: Latest releases with a failed customization
                  items:
                    type: object
                    properties:
                      href:
                        type: string
                        description: Hyperlink to the TAC API endpoint to get the release
                        example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/releases/12sdfe6bd3c480fd58549c03
                    description: Release with a failed customization
    SubscriptionsPage:
      type: object
      description: It represents a paged response for a collection of subscriptions
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/Subscription'
          description: It holds the collection of subscriptions for a paged response
    RegistryDetailed:
      required:
        - application_count
        - base_image_count
        - created_at
        - description
        - hosted
        - owned
        - provider
        - shared
        - vmware_managed
      type: object
      description: It contains details of the registry
      allOf:
        - $ref: '#/components/schemas/Registry'
        - type: object
          properties:
            description:
              type: string
              description: Description of the registry
              example: Registry for storing container releases
            hosted:
              type: boolean
              description: The registry is automatically hosted by internal services of TAC
              example: false
            vmware_managed:
              type: boolean
              description: The Registry is managed by TAC
              example: false
            shared:
              type: boolean
              description: The registry is shared by different orgs
              example: false
            owned:
              type: boolean
              description: The registry is owned by the org
              example: false
            provider:
              type: string
              description: Provider of the registry (platform that hosts it)
              example: HARBOR
            flavor:
              type: string
              description: Kind of the registry (STANDALONE or ADVANCED)
              example: STANDALONE
            created_at:
              type: string
              description: Date of the creation of the registry
              format: date-time
              example: 2023-03-03T00:59:52.762Z
            updated_at:
              type: string
              description: Date of the update of the registry
              format: date-time
              example: 2023-03-03T00:59:52.762Z
            removed_at:
              type: string
              description: Date of the removal of the registry
              format: date-time
              example: 2023-03-03T00:59:52.762Z
            removed_by:
              type: string
              description: User that requested the removal of the registry
              example: John Doe
            base_image_count:
              type: integer
              description: Number of base images stored in this registry
              example: 1
            application_count:
              type: integer
              description: Number of applications pushed into this registry
              example: 2
            credentials_limit:
              type: integer
              description: "For TAC managed registries, max number of credentials that can be created"
              example: 10
            _links:
              type: object
              properties:
                credentials:
                  type: object
                  properties:
                    href:
                      type: string
                      description: Hyperlink to the TAC API endpoint to get the credentials of the vmware hosted registry
                      example: /v1/registries/cddcfa79-352c-4555-9d28-4442de559876/credentials
                  description: Credentials for a vmware hosted registry
              description: Section to include hyperlinks based on Hypertext Application Language
    CreateManagedRegistryCredentialResponse:
      required:
        - password
        - username
      type: object
      properties:
        username:
          type: string
          description: Username of the registry credentials created
          example: _json_key
        password:
          type: string
          description: Password of the registry credentials created
          example: ad00r12ba154mm
      description: It contains the username and password from the registry credentials created
    SubscriptionStatus:
      type: string
      description: "Status of the subscription (ACTIVE, CREATED, EXPIRED, TERMINATED, ERROR, SUBMITTED, PENDING_EXPIRY, SUSPENDED)"
      example: ACTIVE
    CatalogApplicationsPage:
      type: object
      description: It represents a paged response for a collection of applications
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/CatalogApplication'
          description: It holds the collection of applications for a paged response
    ApplicationOfferingPage:
      type: object
      description: It represents a paged response for a collection of application offering
      allOf:
        - $ref: '#/components/schemas/Page'
        - required:
            - items
          type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/ApplicationOffering'
          description: It holds the collection of application offering for a paged response
    ReleaseRevision:
      maxLength: 64
      type: string
      description: Revision of the release for a specific combination of product and version
      example: "0"
    MultiArchDigests:
      type: object
      properties:
        index_repo_digest:
          type: string
          description: The repo digest of the index
          example: sha256:81a957b549848a7424eb434d3d10642dd29b6d0577757c27c09b0b9e967eb64b
        digests:
          type: array
          items:
            $ref: '#/components/schemas/SingleArchDigests'
      description: The digests of a container in each platform family
    CatalogApplicationRequest:
      required:
        - applications
        - id
        - request_type
        - status
        - user
      type: object
      properties:
        id:
          $ref: '#/components/schemas/RequestId'
        name:
          type: string
          description: Name of the request given by the user
          example: apache kafka
        description:
          type: string
          description: Description of the request given by the user
          example: this has testing purpose
        applications:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/CatalogApplication'
        user:
          type: string
          description: Name of the user
          example: john doe
        request_type:
          $ref: '#/components/schemas/RequestType'
        status:
          $ref: '#/components/schemas/RequestStatus'
        created_at:
          type: string
          description: The date-time which the request was created
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        updated_at:
          type: string
          description: The date-time which the request was updated
          format: date-time
          example: 2023-03-03T00:59:52.762Z
        _links:
          type: object
          properties:
            applications:
              type: array
              description: Application links related to this request
              items:
                type: object
                properties:
                  href:
                    type: string
                    description: Hyperlink to the TAC API endpoint to get an application of this request
                    example: /v1/catalogs/351c1739-ca01-4a74-8124-1b99257cd7c9/applications/d16c7f4d-b38a-405b-a1ca-3ac0a79418c1
                description: Application this request belongs to.
          description: Section to include hyperlinks based on Hypertext Application Language
      description: Information of an application request
  parameters: {}
  securitySchemes:
    BearerAuth:
      type: http
      description: Bearer authentication with the CSP JWT token.
      scheme: bearer
      bearerFormat: JWT
