openapi: 3.0.1
info:
  title: Introduction to the Products and Packaging REST API
  description: API documentation for Product and Packaging service
  version: 1.0.0_Beta
servers:
  - url: https://YourSiteID-uat.flexnetoperations.com/products-api
    description: Generated server url
tags:
  - name: Part Number
    description: API for performing operations on part numbers.
  - name: Product
    description: API for performing operations on products.
  - name: Suite
    description: API for performing operations on suites.
  - name: Feature
    description: API for performing operations on features.
paths:
  /v1/suites:
    get:
      tags:
        - Suite
      summary: Get suites
      operationId: getSuites
      parameters:
        - name: suiteName
          in: query
          description: Filter by suite name
          required: false
          schema:
            type: string
        - name: version
          in: query
          description: Filter by suite version
          required: false
          schema:
            type: string
        - name: description
          in: query
          description: Filter by description
          required: false
          schema:
            type: string
        - name: partNumber
          in: query
          description: Filter by part number
          required: false
          schema:
            type: string
        - name: state
          in: query
          description: Filter by suite state (draft, deployed, obsolete, inactive)
          required: false
          schema:
            type: string
        - name: packageName
          in: query
          description: Filter by package name
          required: false
          schema:
            type: string
        - name: packageVersion
          in: query
          description: Filter by package version
          required: false
          schema:
            type: string
        - name: hostType
          in: query
          description: Filter by host type
          required: false
          schema:
            type: string
        - name: licenseTechnology
          in: query
          description: Filter by license technology
          required: false
          schema:
            type: string
        - name: licenseGenerator
          in: query
          description: Filter by license generator
          required: false
          schema:
            type: string
        - name: usedOnDevice
          in: query
          description: Filter by used on device(true/false)
          required: false
          schema:
            type: boolean
        - name: creationDate
          in: query
          description: Filter by creation date (ISO 8601)
          required: false
          schema:
            type: string
        - name: lastModifiedDate
          in: query
          description: Filter by last update date (ISO 8601)
          required: false
          schema:
            type: string
        - name: sort_by
          in: query
          description: Field to sort by (suiteName, createdOn)
          required: false
          schema:
            type: string
        - name: sort_order
          in: query
          description: Order to sort by (asc/desc)
          required: false
          schema:
            type: string
        - name: page
          in: query
          description: Requested page number
          required: false
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: Number of records per page
          required: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Suites retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
    post:
      tags:
        - Suite
      summary: Create a suite
      operationId: createSuite
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Suite'
        required: true
      responses:
        '201':
          description: Created a suite successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
  /v1/products:
    get:
      tags:
        - Product
      summary: Get products
      operationId: getProducts
      parameters:
        - name: productName
          in: query
          description: Filter by product name
          required: false
          schema:
            type: string
        - name: version
          in: query
          description: Filter by product version
          required: false
          schema:
            type: string
        - name: partNumber
          in: query
          description: Filter by part number
          required: false
          schema:
            type: string
        - name: state
          in: query
          description: Filter by product state
          required: false
          schema:
            type: string
        - name: licenseTechnology
          in: query
          description: Filter by license technology
          required: false
          schema:
            type: string
        - name: hostType
          in: query
          description: Filter by host type
          required: false
          schema:
            type: string
        - name: usedOnDevice
          in: query
          description: Filter by used on device
          required: false
          schema:
            type: boolean
        - name: sort_by
          in: query
          description: >-
            Field to sort by
            (productName,state,partNumber,hosttype,licenseTechnology,version,usedOnDevice)
          required: false
          schema:
            type: string
        - name: sort_order
          in: query
          description: Order to sort by (asc/desc)
          required: false
          schema:
            type: string
        - name: page
          in: query
          description: Requested page number
          required: false
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: Number of records per page
          required: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Products retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
    post:
      tags:
        - Product
      summary: Create a product
      description: >
        Creates a new product with the provided details. <br>

        - **Implementation Notes**: <br>

        - **Mandatory Fields**: `productName`, `version`. <br>

        - **License Technology**: Defaults to 'FlexNet Licensing' if not
        provided. <br>

        - **License Generator**: Automatically fetched based on
        `licenseTechnology` if not provided. <br>

        - **Product Category**: Defaults to 'Uncategorized Products' if not
        specified. <br>

        - **Features**: If `version` is not specified, the feature will be
        associated based on the name, provided only one feature exists with the
        given name. <br>

        - **hostType**: If this parameter is not specified and license
        technology  defaults to the standard license technology with
        `usedOnDevice` set to `false` then default host type 'Certificate or
        Trusted Host' is set  <br>

        - **Part Numbers**: Must be unique across products.<br>

        - **Auto Deploy**: If set to `true`, validations are performed to ensure
        that the product, license models, features, and feature bundles are
        deployed. If any feature or feature bundle is not deployed, during
        product deployment, they will be automatically deployed as part of the
        process. <br>

        - **Date Fields**: `startDate` and `endDate` must be in `YYYY-MM-DD`
        format. <br>

        - **usedOnDevice**: Indicates whether the license is used on a device.
        This flag is only applicable when the license technology is set to the
        default license technology. For custom license technologies, this
        parameter is ignored. <br>

        - **Upgrade Email Template**: Use 'none' for no template or 'default'
        for the default template.<br>
      operationId: saveProducts
      requestBody:
        description: 'Mandatory fields: productName, version'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Product'
        required: true
      responses:
        '201':
          description: Created a product successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '409':
          description: Product id already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
  /v1/part-numbers:
    get:
      tags:
        - Part Number
      summary: Get part numbers
      operationId: getPartNumbers
      parameters:
        - name: partNumber
          in: query
          description: Filter by  partNumber
          required: false
          schema:
            type: string
        - name: productName
          in: query
          description: Filter by productName
          required: false
          schema:
            type: string
        - name: licenseModel
          in: query
          description: Filter by licenseModel
          required: false
          schema:
            type: string
        - name: creationDate
          in: query
          description: Filter by created date
          required: false
          schema:
            type: string
        - name: lastModifiedDate
          in: query
          description: Filter by last modified date
          required: false
          schema:
            type: string
        - name: unmappedWithProduct
          in: query
          description: Filter by unmapped with product
          required: false
          schema:
            type: boolean
        - name: unmappedWithLicenseModel
          in: query
          description: Filter by unmapped with license model
          required: false
          schema:
            type: boolean
        - name: sort_by
          in: query
          description: >-
            Field to sort by (partNumber, productName, licenseModel,
            creationDate and lastModifiedDate)
          required: false
          schema:
            type: string
        - name: sort_order
          in: query
          description: Order to sort by (asc/desc)
          required: false
          schema:
            type: string
        - name: page
          in: query
          description: Requested page number
          required: false
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: Number of records per page
          required: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Part numbers retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
    post:
      tags:
        - Part Number
      summary: Create one or more part numbers
      operationId: saveProducts_1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePartNumberDTO'
        required: true
      responses:
        '201':
          description: Created a part number successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '206':
          description: Created a part number partially successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
  /v1/maintenance:
    get:
      tags:
        - Product
      summary: Get maintenance
      operationId: getMaintenanceProducts
      parameters:
        - name: maintenanceName
          in: query
          description: Filter by  maintenance name
          required: false
          schema:
            type: string
        - name: version
          in: query
          description: Filter by maintenance version
          required: false
          schema:
            type: string
        - name: partNumber
          in: query
          description: Filter by part number
          required: false
          schema:
            type: string
        - name: state
          in: query
          description: Filter by maintenance state
          required: false
          schema:
            type: string
        - name: creationDate
          in: query
          description: Filter by created date
          required: false
          schema:
            type: string
        - name: lastModifiedDate
          in: query
          description: Filter by last modified date
          required: false
          schema:
            type: string
        - name: sort_by
          in: query
          description: >-
            Field to sort by
            (maintenanceName,state,partNumber,version,creationDate and
            lastModifiedDate)
          required: false
          schema:
            type: string
        - name: sort_order
          in: query
          description: Order to sort by (asc/desc)
          required: false
          schema:
            type: string
        - name: page
          in: query
          description: Requested page number
          required: false
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: Number of records per page
          required: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Maintenance retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
    post:
      tags:
        - Product
      summary: Create a maintenance product
      operationId: saveMaintenanceProduct
      requestBody:
        description: 'Mandatory fields: maintenanceName, version'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceProductCreate'
        required: true
      responses:
        '201':
          description: Created a maintenance product successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Duplicate maintenance product
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid format or business rule error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/features:
    get:
      tags:
        - Feature
      summary: Get features
      operationId: getFeatures
      parameters:
        - name: name
          in: query
          description: Filter feature by name
          required: false
          schema:
            type: string
        - name: version
          in: query
          description: Filter feature by version
          required: false
          schema:
            type: string
        - name: versionFormat
          in: query
          description: Filter feature by versionFormat
          required: false
          schema:
            type: string
        - name: state
          in: query
          description: Feature state (for example, DRAFT, DEPLOYED)
          required: false
          schema:
            type: string
        - name: creationDate
          in: query
          description: Creation date (ISO 8601)
          required: false
          schema:
            type: string
        - name: lastModifiedDate
          in: query
          description: Last modified date (ISO 8601)
          required: false
          schema:
            type: string
        - name: vendorAuthString
          in: query
          description: Vendor authorization string
          required: false
          schema:
            type: string
        - name: page
          in: query
          description: Requested page number
          required: false
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: Number of records per page
          required: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Get features
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid search Type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
    post:
      tags:
        - Feature
      summary: Create a feature
      operationId: postFeature
      requestBody:
        description: 'Mandatory fields: featureName, versionFormat'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateFeatureDTO'
        required: true
      responses:
        '201':
          description: Created a feature successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Duplicate feature
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid format or business rule error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/feature-bundles:
    get:
      tags:
        - Feature
      summary: Get feature bundle
      operationId: getFeatureBundles
      parameters:
        - name: featureBundleName
          in: query
          description: Filter by  feature bundle name
          required: false
          schema:
            type: string
        - name: state
          in: query
          description: Filter by feature bundle state
          required: false
          schema:
            type: string
        - name: creationDate
          in: query
          description: Filter by created date
          required: false
          schema:
            type: string
        - name: lastModifiedDate
          in: query
          description: Filter by last modified date
          required: false
          schema:
            type: string
        - name: page
          in: query
          description: Requested page number
          required: false
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: Number of records per page
          required: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Feature bundle retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
    post:
      tags:
        - Feature
      summary: Create a feature bundle
      operationId: postFeatureBundle
      requestBody:
        description: 'Mandatory fields: featureBundleName'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FeatureBundleCreate'
        required: true
      responses:
        '201':
          description: Created a feature bundle successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Duplicate feature bundle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid format or business rule error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/suites/{suiteName}/{suiteVersion}:
    get:
      tags:
        - Suite
      summary: Get a suite
      operationId: getSuites_1
      parameters:
        - name: suiteName
          in: path
          description: Name of the suite
          required: true
          schema:
            type: string
        - name: suiteVersion
          in: path
          description: Version of the suite
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Suite retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid data provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '500':
          description: Internal Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
components:
  schemas:
    AttributesDTO:
      type: object
      properties:
        name:
          type: string
          description: Attribute name
          example: ca_text
        value:
          type: object
          description: Attribute value, can be text/number/boolean/multiselect/date
          example: testing
      description: Product category custom attributes
    PartNumber:
      type: object
      properties:
        partNumber:
          type: string
          description: Part number associated with product
          example: PN-12345
        licenseModelName:
          type: string
          description: >-
            License Model Name which would be associated with given partNumber
            if value is empty or null then licence model details will not be
            associated with partNumber
          example: Embedded Counted
      description: part number information
    Suite:
      required:
        - suiteName
        - version
      type: object
      properties:
        suiteName:
          maxLength: 128
          minLength: 0
          type: string
          description: Name of the suite
          example: Suite A
        version:
          type: string
          description: Version of the suite
          example: 1.0.0
        description:
          type: string
          description: Description of the suite
          example: This is a sample product description
        autoDeploy:
          type: boolean
          description: Flag to indicate if suite should be auto-deployed
          example: true
        licenseTechnology:
          type: string
          description: License Technology name of the suite
          example: FlexNet Licensing
          default: FlexNet Licensing
        licenseGenerator:
          type: string
          description: License Generator name of the suite
          example: demo
        usedOnDevice:
          type: boolean
          description: >-
            Used on device plays role only when license technology is FlexNet
            Licensing
          example: true
        packageProperties:
          $ref: '#/components/schemas/SuitePackage'
        allowDownloadObsoleteFrInAdmin:
          type: boolean
          description: Allow download of obsolete fulfillment records in Producer Portal
          example: true
        allowDownloadObsoleteFrInPortal:
          type: boolean
          description: Allow download of obsolete fulfillment records in End-User Portal
          example: true
        trustedKey:
          type: string
          description: Trusted Key Configuration name
          example: Trusted Key
        virtualTrustedKey:
          type: string
          description: Virtual Trusted Key Configuration name
          example: Virtual Trusted Key
        products:
          type: array
          description: List of products included in the suite
          items:
            $ref: '#/components/schemas/SuiteProduct'
        licenseModels:
          type: array
          description: List of License Models associated with the suite
          example:
            - Embedded Counted
          items:
            type: string
            description: List of License Models associated with the suite
            example: '["Embedded Counted"]'
        customAttributes:
          type: array
          description: Custom attributes of the suite
          items:
            $ref: '#/components/schemas/AttributesDTO'
        partNumbers:
          type: array
          description: List of part numbers associated with the suite
          items:
            $ref: '#/components/schemas/PartNumber'
        hostTypes:
          type: array
          description: List of host types associated with the suite
          example:
            - FLX_SERVER
          items:
            type: string
            description: List of host types associated with the suite
            example: '["FLX_SERVER"]'
        productCategory:
          type: string
          description: Product category name of the suite
          example: Uncategorized Products
          default: Uncategorized Products
        productCategoryAttributes:
          type: array
          description: Product category custom attributes of the suite
          items:
            $ref: '#/components/schemas/AttributesDTO'
      description: Request object for creating a new suite
    SuitePackage:
      type: object
      properties:
        name:
          type: string
          description: Name of the suite package
          example: Package
        version:
          type: string
          description: Version of the suite package
          example: 1.0.0
        versionFormat:
          type: string
          description: >-
            Version format of the Suite package. Valid values are FIXED or
            DATEBASED
          example: FIXED
      description: Suite package information
    SuiteProduct:
      type: object
      properties:
        name:
          type: string
          description: Name of the product
          example: Product A
        version:
          type: string
          description: Version of the product
          example: 1.0.0
        count:
          type: integer
          description: Count of the product in the suite
          format: int64
          example: 10
      description: Product details in a suite
    Response:
      type: object
      properties:
        message:
          type: string
        status:
          type: string
    Feature:
      type: object
      properties:
        name:
          type: string
          description: Feature name
          example: Demo Feature
        version:
          type: string
          description: Feature version
          example: '1.0'
        count:
          minimum: 1
          type: integer
          description: Feature count
          format: int32
      description: Feature information
    FeatureBundle:
      type: object
      properties:
        name:
          type: string
          description: Name of the feature bundle
          example: Test Bundle
        count:
          minimum: 1
          type: integer
          description: Count of features in the bundle
          format: int32
      description: Feature bundle information
    Product:
      required:
        - productName
        - version
      type: object
      properties:
        productName:
          maxLength: 128
          minLength: 0
          type: string
          description: Name of the product
          example: Product A
        version:
          maxLength: 64
          minLength: 0
          type: string
          description: Version of the product
          example: 1.0.0
        description:
          type: string
          description: Product description
          example: This is a sample product description
        licenseGenerator:
          type: string
          description: >-
            If the license generator name is not provided, it will be determined
            based on the licence technology ID.
          example: TestGenerator
        productCustomAttributes:
          type: array
          description: Product custom attributes
          items:
            $ref: '#/components/schemas/AttributesDTO'
        productCategoryAttributes:
          type: array
          description: Product category custom attributes
          items:
            $ref: '#/components/schemas/AttributesDTO'
        productCategory:
          type: string
          description: |-
            If the product category name is not provided, it will default
             to 'Uncategorized Products'.
          example: Uncategorized Products
          default: Uncategorized Products
        usedOnDevice:
          type: boolean
          description: Applicable only when the licence technology is FlexNet  Licensing.
          example: true
        startDate:
          type: string
          description: ' Start Date in YYYY-MM-DD format'
          example: '2024-01-01'
        endDate:
          type: string
          description: ' End Date in YYYY-MM-DD format'
          example: '2025-02-01'
        allowObsoleteFulfilmentInPP:
          type: boolean
          description: Allow obsolete fulfilment in Producer portal
          example: true
        allowObsoleteFulfilmentInEP:
          type: boolean
          description: Allow obsolete fulfilment in End-User Portal
          example: true
        productUpgradeEmailTemplate:
          type: string
          description: >-
            Upgrade email template associated with product , if no template is
            associated then provide as none , for default template provide as
            default
          example: default
        features:
          type: array
          description: >-
            List of features associated with product , it has feature name,
            version and count .If version not specified then based on feature
            name ,feature will be associated to product provided if only one
            feature exists with provided name else exception will be thrown ,
            count should be positive integer
          items:
            $ref: '#/components/schemas/Feature'
        featureBundles:
          type: array
          description: >-
            List of feature bundles associated with product , it has feature
            bundle name count 
          items:
            $ref: '#/components/schemas/FeatureBundle'
        licenseModels:
          type: array
          description: >-
            List of license model names associated with product , if license
            model not specified then based on license model name ,license model
            will be associated to product provided if only one license model
            exists with provided name else exception will be thrown
          example:
            - Embedded Counted
          items:
            type: string
            description: >-
              List of license model names associated with product , if license
              model not specified then based on license model name ,license
              model will be associated to product provided if only one license
              model exists with provided name else exception will be thrown
            example: '["Embedded Counted"]'
        partNumbers:
          type: array
          description: >-
            List of part numbers associated with product , it should be unique
            across product
          items:
            $ref: '#/components/schemas/PartNumber'
        licenseTechnology:
          type: string
          description: >-
            License technology  name if not provided it would be defaulted to
            'FlexNet Licensing'
          example: Test
          default: FlexNet Licensing
        hostTypes:
          type: array
          description: List of host types
          example:
            - Flexnet Server
          items:
            type: string
            description: List of host types
            example: '["Flexnet Server"]'
        trustedKey:
          type: string
          description: Trusted Key Configuration name
          example: Trusted Key
        virtualTrustedKey:
          type: string
          description: Virtual Trusted Key Configuration name
          example: Virtual Trusted Key
        autoDeploy:
          type: boolean
          description: >-
            Auto Deploy flag to indicate whether the product should be deployed
            or not , if it is true then couple of validation is done on license
            model if license model is not associated with product then product
            cannot be deployed ,if license model is not deployed then product
            cannot be deployed, if feature or feature bundle is not deployed
            then while deploying product even those will be deployed
          example: true
    CreatePartNumberDTO:
      required:
        - partNumbers
      type: object
      properties:
        partNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PartNumberDTO'
    PartNumberDTO:
      required:
        - partNumber
      type: object
      properties:
        partNumber:
          maxLength: 200
          minLength: 0
          pattern: ^(?=.*[A-Za-z0-9_\-.])[ A-Za-z0-9_\-.]+$
          type: string
          description: Name to uniquely identify the part number.
          example: MyPartNumber
        description:
          maxLength: 2000
          minLength: 0
          pattern: ^[^:<>@={}\[\],!/|?"#$%~^`']+$
          type: string
          description: Describe the characteristics of this feature that make it unique.
          example: This feature enables advanced reporting.
        product:
          $ref: '#/components/schemas/PartNumberProductDTO'
        trialAvailability:
          type: boolean
          description: >-
            Trial Availability flag to indicate whether the part number is
            available for trial or not.
          example: false
      description: Represents a part number
    PartNumberProductDTO:
      required:
        - name
        - version
      type: object
      properties:
        name:
          type: string
          description: Name of the product
          example: SampleProduct
        version:
          type: string
          description: Version of the product
          example: SampleVersion-1.0
        licenseModel:
          type: string
          description: License model associated with the product
          example: LicenseModelName
      description: Product associated with part number
    MaintenanceProductCreate:
      required:
        - maintenanceName
        - version
      type: object
      properties:
        maintenanceName:
          maxLength: 128
          minLength: 0
          type: string
          description: Name to uniquely identify the maintenance product.
          example: MyMaintenanceProduct
        version:
          maxLength: 64
          minLength: 0
          type: string
          description: Maintenance product version
          example: '1.0'
        description:
          type: string
          description: >-
            Describe the characteristics of this maintenance product that make
            it unique.
          example: This maintenance product is for advanced maintenance.
        productLine:
          type: string
          description: Maintenance product line.
          example: Uncategorized Products
        allowUpgrades:
          type: boolean
          description: >-
            Allow Upgrades flag to indicate whether the maintenance product
            could be upgrade or not.
        allowUpsells:
          type: boolean
          description: >-
            Allow Upsells flag to indicate whether the maintenance product could
            be upsell or not.
        allowRenewals:
          type: boolean
          description: >-
            Allow Renewals flag to indicate whether the maintenance product
            could be renewal or not.
        partNumberList:
          type: array
          description: Optional part number list for the maintenance product.
          items:
            $ref: '#/components/schemas/MaintenanceProductPartNumber'
        productList:
          type: array
          description: Optional product list for the maintenance product.
          items:
            $ref: '#/components/schemas/MaintenanceProductProduct'
        autoDeploy:
          type: boolean
          description: >-
            Auto Deploy flag to indicate whether the maintenance product should
            be deployed or not.
    MaintenanceProductPartNumber:
      required:
        - partNumber
      type: object
      properties:
        partNumber:
          type: string
          description: Name to uniquely identify the part number.
          example: MyPartNumber
      description: Optional part number list for the maintenance product.
    MaintenanceProductProduct:
      required:
        - productName
        - version
      type: object
      properties:
        productName:
          type: string
          description: Name to uniquely identify the product name.
          example: MyProduct
        version:
          type: string
          description: Version to uniquely identify the product version.
          example: '1.0'
      description: Optional product list for the maintenance product.
    ErrorResponse:
      type: object
      properties:
        status:
          type: string
        message:
          type: string
    CreateFeatureDTO:
      required:
        - featureName
        - versionFormat
      type: object
      properties:
        featureName:
          maxLength: 30
          minLength: 0
          pattern: ^[A-Za-z0-9_-]+$
          type: string
          description: Name to uniquely identify the feature.
          example: MyFeature
        versionFormat:
          type: string
          description: Select a FIXED or DATEBASED version format.
          example: FIXED
        version:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            If a FIXED version format is selected, specify version of the
            feature
          example: '1.0'
        maxVersion:
          pattern: ^\d{4}\.(\d{2}(\d{2}|\.?\d{2})?)$
          type: string
          description: Specify maxVersion of the feature
          example: 2023.10.15
        description:
          maxLength: 2000
          minLength: 0
          pattern: ^[^:<>@={}\[\],!/|?"#$%~^`']+$
          type: string
          description: Describe the characteristics of this feature that make it unique.
          example: This feature enables advanced reporting.
        aggregationType:
          type: string
          description: >-
            Select an Aggregation Type for the feature. Valid values: NONE, SUM,
            MAX
          example: SUM
        featureOverrideParams:
          $ref: '#/components/schemas/FeatureOverrideParamsTypeDTO'
        autoDeploy:
          type: boolean
          description: >-
            Auto Deploy flag to indicate whether the feature should be deployed
            or not.
    DupGroupDTO:
      type: object
      properties:
        dupGroupOption:
          type: string
          description: Enumeration for duplication group options.
          example: GROUPMASK
          enum:
            - NO_OVERRIDE
            - GROUPMASK
            - NONE
        groupMask:
          $ref: '#/components/schemas/GroupMaskDataTypeDTO'
      description: DTO for specifying duplication group details.
    FeatureOverrideParamsTypeDTO:
      type: object
      properties:
        vendorString:
          maxLength: 255
          minLength: 0
          type: string
          description: Vendor string to override the default value.
          example: Vendor123
        notice:
          maxLength: 255
          minLength: 0
          type: string
          description: Notice string to override the default value.
          example: This is a notice.
        borrowable:
          type: boolean
          description: Indicates whether the feature is borrowable.
          example: true
        serialNumber:
          maxLength: 255
          minLength: 0
          type: string
          description: Serial number to override the default value.
          example: SN123456
        dupGroup:
          $ref: '#/components/schemas/DupGroupDTO'
        counted:
          pattern: ^(?i)(Yes|No|Do_Not_Override)$
          type: string
          description: >-
            Determines whether the feature is counted. Valid values: Yes, No,
            Do_Not_Override.
          example: 'Yes'
        reusable:
          pattern: ^(?i)(Yes|No|Do_Not_Override)$
          type: string
          description: >-
            Determines whether the feature is reusable. Valid values: Yes, No,
            Do_Not_Override.
          example: 'No'
      description: DTO for specifying feature override parameters.
    GroupMaskDataTypeDTO:
      type: object
      properties:
        option:
          uniqueItems: true
          type: array
          description: >-
            Set of group mask types defining the uniqueness criteria. Valid
            values: USER, HOST, DISPLAY, VENDOR.
          example:
            - USER
            - HOST
          items:
            type: string
            description: >-
              Enumeration for group mask types used to define the combination of
              criteria that create a unique group.
            example: '["USER","HOST"]'
            enum:
              - USER
              - HOST
              - DISPLAY
              - VENDOR
      description: DTO for specifying group mask details.
    FeatureBundleCreate:
      required:
        - featureBundleName
      type: object
      properties:
        featureBundleName:
          maxLength: 64
          minLength: 0
          pattern: ^[A-Za-z0-9_-]+$
          type: string
          description: Name to uniquely identify the feature bundle.
          example: MyFeatureBundle
        description:
          type: string
          description: >-
            Describe the characteristics of this feature bundle that make it
            unique.
          example: This feature bundle enables advanced reporting.
        autoDeploy:
          type: boolean
          description: >-
            Auto Deploy flag to indicate whether the feature bundle should be
            deployed or not.
        featureList:
          type: array
          description: Optional feature list for the feature bundle.
          items:
            $ref: '#/components/schemas/FeatureBundleFeature'
    FeatureBundleFeature:
      required:
        - featureName
      type: object
      properties:
        featureName:
          maxLength: 64
          minLength: 0
          pattern: ^[A-Za-z0-9_-]+$
          type: string
          description: Name to uniquely identify the feature.
          example: MyFeature
        version:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            If a FIXED version format is selected, specify version of the
            feature
          example: '1.0'
        quantity:
          minimum: 1
          type: integer
          description: Quantity of the feature. Minimum value is 1.
          format: int64
          example: 1
      description: Optional feature list for the feature bundle.
