openapi: 3.0.1
info:
  title: Commerce API
  description: The Commerce Service API
  contact:
    name: BookNordics
    url: https://www.booknordics.com
  version: v0
servers:
  - url: https://aks.nordicadventuregroup.com/commerce
paths:
  /v0/Availabilities/Search:
    post:
      tags:
        - Availabilities
      summary: Availability and price search
      description: "Search for availability and price for a set of bookable products based on a search specification. Consumption of bookable\r\nproducts will <em>start</em> at some time and <em>continue</em> for a duration.  The search specification allows for specifying\r\na time interval for when consumption can start.  The duration is of consumption is always specified as a fixed value in the search specification.\r\n            \r\nReturns a <em>quotation</em> containing information about availability and price for products satisfying the search\r\nspecification.  The returned quotation is valid for a limited period if time, and the response contains the expiration time\r\nfor the quotation.  When the expiration time has passed the client should redo the availability search to ensure that always\r\nvalid information can be presented to the user.\r\n            \r\nThe response can optionally be paginated through the `page` and `maxresults` parameters.  The default value for\r\n`page` returns the first result page. The default value for `maxresults` returns all results.  `page` can\r\nbe set to the value returned in the `nextpage` property of the response to retrieve the next page of results.  There\r\nis no guarantee that `maxpage` results will be returned even if a sufficient number of items are remaining.  The\r\n`nextpage` property is not present in the response for the last result page.\r\n            \r\nThis method supports grouping of products.  Groping is enabled by specifying at least one attribute name in the\r\n`GroupProducts` field.  All products with identical product category and identical values for all of these attributes will be\r\ngrouped together. In the response the grouped products will be represented by a single product and one availability map entry\r\nper requested price and start date for consumption.  The product returned will only contain the category identifier and the values\r\nof the grouping attributes.  Grouping is not supported if pagination is used."
      operationId: Search
      parameters:
        - name: page
          in: query
          description: Token indicating the result page to retrieve, default is first page
          schema:
            type: string
        - name: maxresults
          in: query
          description: Maximum number of availabilities to return for a result page
          schema:
            type: integer
            format: int32
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      requestBody:
        description: Availability search specification
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/QuotationRequest'
          application/json:
            schema:
              $ref: '#/components/schemas/QuotationRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/QuotationRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/QuotationRequest'
      responses:
        '200':
          description: Return response containing list of available products with prices
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/QuotationResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/QuotationResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/QuotationResponse'
        '400':
          description: An input parameter is missing og invalid
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/BadRequestProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/BadRequestProblemDetails'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: A referenced resource does not exist
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '503':
          description: No fulfillment systems are able to handle your search request
      security:
        - oauth2:
            - commerce
  /v0/Products/Categories/{id}:
    get:
      tags:
        - Products
      summary: Get category
      description: Returns a single product category related to the supplied id.
      parameters:
        - name: id
          in: path
          description: Category identifier.
          required: true
          schema:
            type: string
            format: uuid
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      responses:
        '200':
          description: Returns the specific category
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProductCategoryResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ProductCategoryResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ProductCategoryResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: The category is not defined
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
  /v0/Products:Paged:
    get:
      tags:
        - Products
      summary: Get all products with pagination
      description: "Get all products, optionally filtered by a product category.\r\n\r\nResults can optionally be paginated by specifying the `page` and `maxresults` parameters.  The default valye for\r\n`page` returns the first result page.  The default value for `maxresults` returns all results.  `page` can be\r\nset to the value of the `nextpage` property fro a response to return the next page of results.\r\n\r\nThere is no guarantee that `maxresults` results will be returned even if more results are available, but at least one\r\nresult will always be returned.  The `nextpage` property is not defined for the last result page."
      parameters:
        - name: category
          in: query
          description: Optionally return only products from a product category
          schema:
            type: string
            format: uuid
        - name: includeDisabled
          in: query
          description: Include products that are currently disabled
          schema:
            type: boolean
            default: false
        - name: page
          in: query
          description: >-
            Token indicating which result page to retrieve, default is first
            page
          schema:
            type: string
        - name: maxresults
          in: query
          description: >-
            Maximum number of results to return for a result page, default is
            100
          schema:
            type: integer
            format: int32
            default: 100
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      responses:
        '200':
          description: Returns all products
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProductListResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ProductListResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ProductListResponse'
        '400':
          description: One or more request parameters are invalid
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
  /v0/ShoppingCarts/{cartId}:
    get:
      tags:
        - ShoppingCarts
      summary: Get shopping cart
      description: Retrieve a shopping cart based on its identifier.
      operationId: GetShoppingCart
      parameters:
        - name: cartId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartDto'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: The shopping cart could not be found.
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
    delete:
      tags:
        - ShoppingCarts
      summary: Emptiy shopping cart
      description: Remove all products in the cart but retains the empty cart.
      parameters:
        - name: cartId
          in: path
          description: id of the user
          required: true
          schema:
            type: string
            format: uuid
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartDto'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: The shopping cart could not be found.
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
  /v0/ShoppingCarts/{currency}:
    post:
      tags:
        - ShoppingCarts
      summary: Create shopping cart
      description: "Create a new empty shopping cart.  The shopping cart has an ID that can be used in subsequent calls to the\r\nshopping cart APIs to manipulate or inspect the shopping cart.  The shopping cart is valid for 6 hours after\r\ncreation."
      parameters:
        - name: currency
          in: path
          required: true
          schema:
            type: string
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      requestBody:
        content:
          application/json-patch+json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CartOptionDto'
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CartOptionDto'
          text/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CartOptionDto'
          application/*+json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CartOptionDto'
      responses:
        '201':
          description: Created
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartDto'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
  /v0/ShoppingCarts/{cartId}/CheckOut:
    post:
      tags:
        - ShoppingCarts
      summary: Checkout shopping cart
      description: >-
        Checking out the shopping cart places orders for all products in the
        cart.
      parameters:
        - name: cartId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/CartCheckOutDto'
          application/json:
            schema:
              $ref: '#/components/schemas/CartCheckOutDto'
          text/json:
            schema:
              $ref: '#/components/schemas/CartCheckOutDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CartCheckOutDto'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartDto'
        '202':
          description: Accepted
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartDto'
        '207':
          description: One or more items in the cart failed to check out.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartCheckoutErrorDTO'
            application/json:
              schema:
                $ref: '#/components/schemas/CartCheckoutErrorDTO'
            text/json:
              schema:
                $ref: '#/components/schemas/CartCheckoutErrorDTO'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: The shopping cart could not be found or is expired.
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
  /v0/ShoppingCarts/{cartId}/Cancel:
    post:
      tags:
        - ShoppingCarts
      summary: Cancel the shopping cart and reservations
      description: >-
        Cancel the shopping cart and any order that has been placed in the
        corresponding fulfillment system.
      parameters:
        - name: cartId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/CartCancelDto'
          application/json:
            schema:
              $ref: '#/components/schemas/CartCancelDto'
          text/json:
            schema:
              $ref: '#/components/schemas/CartCancelDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CartCancelDto'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartDto'
        '202':
          description: Accepted
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartDto'
        '207':
          description: One or more items in the cart failed to be cancelled.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartCancelErrorDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartCancelErrorDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartCancelErrorDto'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: The shopping cart could not be found.
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
  /v0/ShoppingCarts/{cartId}/Payments:
    post:
      tags:
        - ShoppingCarts
      summary: Register payment
      description: "\nRegister information about a payment transaction on the cart.  Multiple payment transactions can be registered.  A payment transaction is uniquely identified by the combination of the fields cardType and reference. The paymentStatus can be updated from Pending to Paid by calling this method again with the same cardType, reference and amount.\r\n\nNo information is sent to fulfillment systems for pending payments.  Information about paid payments is sent to the fulfillment system to the extent this is supported by the relevant fulfillment system."
      operationId: RegisterPayment/<cartId>
      parameters:
        - name: cartId
          in: path
          description: Shopping cart identifier
          required: true
          schema:
            type: string
            format: uuid
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      requestBody:
        description: Payment to be registered
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/PaymentDto'
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentDto'
          text/json:
            schema:
              $ref: '#/components/schemas/PaymentDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/PaymentDto'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartDto'
        '207':
          description: One or more items in the cart failed.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/CartPaymentErrorDto'
            application/json:
              schema:
                $ref: '#/components/schemas/CartPaymentErrorDto'
            text/json:
              schema:
                $ref: '#/components/schemas/CartPaymentErrorDto'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: The shopping cart could not be found.
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
  /v0/ShoppingCarts/{cartId}/CartItems/{cartItemId}:
    delete:
      tags:
        - ShoppingCarts
      summary: Delete product from cart
      description: Deletes a shopping cart item in the selected cart.
      operationId: DeleteCartItemFromShoppingCart
      parameters:
        - name: cartId
          in: path
          description: id of the cart
          required: true
          schema:
            type: string
            format: uuid
        - name: cartItemId
          in: path
          description: id of the cart item
          required: true
          schema:
            type: string
            format: uuid
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      responses:
        '200':
          description: OK
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: The shopping cart or cart item could not be found.
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
  /v0/ShoppingCarts/{cartId}/CartItems/{availabilityPriceMapId}/{qty}:
    post:
      tags:
        - ShoppingCarts
      summary: Add product to cart
      description: "Adds a product to the cart.  The product is identified by an availability price map identifier obtained from\r\na call to availability and price search.  See the Availabilities API."
      operationId: AddCartItemToShoppingCartFromPriceMapId
      parameters:
        - name: cartId
          in: path
          description: id of the shopping cart
          required: true
          schema:
            type: string
            format: uuid
        - name: availabilityPriceMapId
          in: path
          description: >-
            Availability price map containing information about what we are
            adding to the cart
          required: true
          schema:
            type: string
            format: uuid
        - name: qty
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: Cenium-Tenant-Id
          in: header
          description: Identifier which tenant we are working against.
          schema:
            type: string
        - name: tenantId
          in: query
          description: >-
            Identifier which tenant we are working against. Will be prioritized
            over the Cenium-Tenant-Id
          schema:
            type: string
      responses:
        '200':
          description: OK
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: The shopping cart or product could not be found.
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - oauth2:
            - commerce
components:
  schemas:
    AttributeCategory:
      enum:
        - Internal
        - Accounting
        - Content
        - Distribution
        - Orders
        - Products
        - Suppliers
        - Other
      type: string
    AttributeDefinitionResponse:
      required:
        - id
        - name
      type: object
      properties:
        id:
          type: string
          description: Attribute definition identifier
          format: uuid
        name:
          minLength: 1
          type: string
          description: Attribute name
        description:
          type: string
          description: Attribute description
          nullable: true
        type:
          $ref: '#/components/schemas/AttributeType'
        scope:
          $ref: '#/components/schemas/AttributeScope'
        requirement:
          $ref: '#/components/schemas/RequirementLevel'
        affectsPrice:
          type: boolean
          deprecated: true
        affectsAvailability:
          type: boolean
          deprecated: true
        forSearch:
          type: boolean
          deprecated: true
        defaultValue:
          type: string
          nullable: true
          deprecated: true
        validValues:
          type: array
          items:
            $ref: '#/components/schemas/TypeValueResponse'
          nullable: true
          readOnly: true
          deprecated: true
        category:
          $ref: '#/components/schemas/AttributeCategory'
        subCategory:
          $ref: '#/components/schemas/AttributeSubCategory'
      additionalProperties: false
    AttributeScope:
      enum:
        - Search
        - Product
        - Line
        - Customer
        - Internal
      type: string
    AttributeSearchSpecification:
      type: object
      properties:
        limitedInformationMode:
          type: boolean
          description: >-
            Specify whether search mode needs to limit information preferably
            for caching
        consumerAttributes:
          type: array
          items:
            $ref: '#/components/schemas/Consumer'
          description: >-
            Contains a list of consumers with attributes used to filter the
            search
          nullable: true
        productAttributes:
          type: array
          items:
            $ref: '#/components/schemas/ProductSpecification'
          description: Contains a list of product specifications used to filter the search
          nullable: true
          deprecated: true
        products:
          type: array
          items:
            $ref: '#/components/schemas/FilterProduct'
          description: "Contains a list of product specifications used to filter the search. Attributes values in this\r\ncollection is of type object, to support all types."
          nullable: true
        defaultCurrency:
          type: string
          description: USed to show prices in this default currency
          nullable: true
        filterQuery:
          type: string
          nullable: true
        availabilityAttributes:
          $ref: '#/components/schemas/AvailabilityAttributes'
      additionalProperties: false
      description: "Contains search specifications we need to get the correct products. Attributes defined will be used\r\nto filter products in commerce as well as in the adapter layer."
    AttributeSubCategory:
      enum:
        - Internal
        - Commision
        - TAX
        - Accommodation
        - Activities
        - CarRentals
        - AllProducts
        - Distribution
        - ARI
        - CancellationPolicy
        - Checkout
        - CustomerInformation
        - Suppliers
        - Other
      type: string
    AttributeType:
      enum:
        - String
        - Enumeration
        - Int
        - Decimal
        - Bool
        - Uri
        - ComplexType
        - FlagEnumeration
        - List
        - DateTime
        - TimeSpan
      type: string
    AvailabilityAttributes:
      type: object
      properties:
        priceGroups:
          type: array
          items:
            $ref: '#/components/schemas/PriceGroup'
          nullable: true
        routes:
          type: array
          items:
            $ref: '#/components/schemas/Route'
          nullable: true
      additionalProperties: false
    AvailabilityPriceMapResponse:
      type: object
      properties:
        id:
          type: string
          description: Id of the AvailabilityPriceMap
          format: uuid
        utcExpiryTime:
          type: string
          description: "Expiration time of the quotation\r\nWill be decomissioned soon"
          format: date-time
          deprecated: true
        quoteExpiryTime:
          type: string
          description: Expiration time of the quotation
          format: date-time
        startTime:
          type: string
          description: Start time of availability interval.
          format: date-time
        durationCount:
          type: integer
          description: "Number of Duration Increments in the availability result\r\n\r\nTotal Duration is DurationCount time Duration Increment."
          format: int32
        durationIncrement:
          type: string
          description: "Length of the natural time block of the product.\r\nFor example a hotel room or accommodation package will typically have a duration increment of 1 day."
          format: date-span
        availability:
          type: number
          description: Number of available products.
          format: double
        priceSpecificationId:
          type: string
          description: Price specification identifier.
          format: uuid
        adapterLineAttributes:
          type: array
          items:
            $ref: '#/components/schemas/EntityAttribute'
          description: Attributes Mandated by the Adapter for the given availability.
          nullable: true
        priceAttributes:
          type: array
          items:
            $ref: '#/components/schemas/EntityAttribute'
          description: Attributes used by PriceEngine to arrive at the current price.
          nullable: true
      additionalProperties: false
      description: Provides availability / price mapping for the product.
    AvailableProductResponse:
      type: object
      properties:
        complete:
          type: boolean
          description: >-
            Indicates that the product participates in the quote as a complete
            package.
        id:
          type: string
          description: Unique product identifier.
          format: uuid
        name:
          type: string
          description: Product name.
          nullable: true
        categoryId:
          type: string
          description: Product category Id.
          format: uuid
        packageInclusions:
          type: array
          items:
            $ref: '#/components/schemas/PackageInclusionResponse'
          description: Package inclusions for the package-product
          nullable: true
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/EntityAttribute'
          description: Attributes set on this product.
          nullable: true
      additionalProperties: false
    BadRequestProblemDetails:
      type: object
      properties:
        transient:
          type: boolean
        operationId:
          type: string
          nullable: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorObject'
          nullable: true
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
      additionalProperties: {}
      description: Bad request implementation of status code problem details
    BookingDataTypeDto:
      enum:
        - NA
        - BOOLEAN
        - OPTIONS
        - SHORT_TEXT
        - LONG_TEXT
        - INT
        - DOUBLE
        - DATE
        - DATE_AND_TIME
      type: string
    BookingOptionDto:
      type: object
      properties:
        name:
          type: string
          description: Name of the booking option.
          nullable: true
        value:
          type: string
          description: Option value.
          nullable: true
      additionalProperties: false
    BookingQuestionDto:
      type: object
      properties:
        label:
          type: string
          description: Booking question label.
          nullable: true
        id:
          type: integer
          description: Product identifier.
          format: int64
        personalData:
          type: boolean
          description: Is related personal data.
        help:
          type: string
          description: Booking question help.
          nullable: true
        required:
          type: boolean
          description: Is answer required.
        defaultValue:
          type: string
          description: The default answer.
          nullable: true
        dataType:
          $ref: '#/components/schemas/BookingDataTypeDto'
        selectFromOptions:
          type: boolean
          description: Whether answer should be selected from a list of options.
        selectMultiple:
          type: boolean
          description: Multiple answers can be provided.
        options:
          type: array
          items:
            $ref: '#/components/schemas/BookingOptionDto'
          description: The list of answer options.
          nullable: true
      additionalProperties: false
    CancellationPolicy:
      type: object
      properties:
        unit:
          type: string
          description: Name of the unit
          nullable: true
        fullDescription:
          type: string
          description: Total policy text
          nullable: true
        upperLimitDuration:
          type: integer
          description: Upper limit of the period
          format: int32
          nullable: true
        lowerLimitDuration:
          type: integer
          description: Lower limit of the period
          format: int32
          nullable: true
        percentage:
          type: number
          description: Cancellation percentage
          format: double
          nullable: true
        index:
          type: integer
          description: Cancellation policy ordering
          format: int32
      additionalProperties: false
    CancellationPolicyStructure:
      type: object
      properties:
        cancellationPolicies:
          type: array
          items:
            $ref: '#/components/schemas/CategoryCancellationPolicy'
          nullable: true
      additionalProperties: false
    CartAttributeDto:
      type: object
      properties:
        name:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
      additionalProperties: false
    CartCancelDto:
      required:
        - reason
      type: object
      properties:
        reason:
          minLength: 1
          type: string
      additionalProperties: false
    CartCancelErrorDto:
      type: object
      properties:
        cartItems:
          type: array
          items:
            $ref: '#/components/schemas/CartItemWithStatus'
          nullable: true
        id:
          type: string
          format: uuid
        consumers:
          type: array
          items:
            $ref: '#/components/schemas/CartConsumerDto'
          nullable: true
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PaymentDto'
          nullable: true
        customer:
          $ref: '#/components/schemas/CustomerDto'
        currency:
          type: string
          description: Cart currency.
          nullable: true
        salesChannel:
          type: string
          nullable: true
        salesEntity:
          $ref: '#/components/schemas/SalesEntityType'
        gross:
          type: number
          format: double
          readOnly: true
        net:
          type: number
          format: double
          readOnly: true
        shortId:
          type: string
          nullable: true
        orderId:
          type: string
          format: uuid
          nullable: true
        createdAtUtc:
          type: string
          description: This property is deprecated. Use CreatedAt instead.
          format: date-time
          nullable: true
          deprecated: true
        createdAt:
          type: string
          format: date-time
          nullable: true
        checkedOutAtUtc:
          type: string
          description: This property is deprecated. Use CheckedOutAt instead.
          format: date-time
          nullable: true
          deprecated: true
        checkedOutAt:
          type: string
          format: date-time
          nullable: true
        cartSummary:
          $ref: '#/components/schemas/CartSummaryDto'
      additionalProperties: false
    CartCheckOutDto:
      type: object
      properties:
        profileId:
          type: string
          nullable: true
        primaryGuestName:
          type: string
          description: >-
            Deprecated. PrimaryGuestName is misleading. Use CardholderName
            instead.
          nullable: true
          deprecated: true
        cardholderName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        notes:
          type: string
          nullable: true
        paymentIsOptional:
          type: boolean
        createConfirmedBookings:
          type: boolean
        consumerUpdates:
          type: array
          items:
            $ref: '#/components/schemas/ConsumerUpdateDTO'
          nullable: true
        orderLineUpdates:
          type: array
          items:
            $ref: '#/components/schemas/OrderLineUpdateDto'
          nullable: true
      additionalProperties: false
      description: Holds information needed to check out a shopping cart.
    CartCheckoutErrorDTO:
      type: object
      properties:
        cartItems:
          type: array
          items:
            $ref: '#/components/schemas/CartItemWithStatus'
          nullable: true
        gross:
          type: number
          format: double
          readOnly: true
        net:
          type: number
          format: double
          readOnly: true
        id:
          type: string
          format: uuid
        consumers:
          type: array
          items:
            $ref: '#/components/schemas/CartConsumerDto'
          nullable: true
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PaymentDto'
          nullable: true
        customer:
          $ref: '#/components/schemas/CustomerDto'
        currency:
          type: string
          description: Cart currency.
          nullable: true
        salesChannel:
          type: string
          nullable: true
        salesEntity:
          $ref: '#/components/schemas/SalesEntityType'
        shortId:
          type: string
          nullable: true
        orderId:
          type: string
          format: uuid
          nullable: true
        createdAtUtc:
          type: string
          description: This property is deprecated. Use CreatedAt instead.
          format: date-time
          nullable: true
          deprecated: true
        createdAt:
          type: string
          format: date-time
          nullable: true
        checkedOutAtUtc:
          type: string
          description: This property is deprecated. Use CheckedOutAt instead.
          format: date-time
          nullable: true
          deprecated: true
        checkedOutAt:
          type: string
          format: date-time
          nullable: true
        cartSummary:
          $ref: '#/components/schemas/CartSummaryDto'
      additionalProperties: false
    CartConsumerDto:
      type: object
      properties:
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/CartAttributeDto'
          nullable: true
        externalId:
          type: integer
          format: int32
      additionalProperties: false
    CartDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        consumers:
          type: array
          items:
            $ref: '#/components/schemas/CartConsumerDto'
          nullable: true
        cartItems:
          type: array
          items:
            $ref: '#/components/schemas/CartItemDto'
          nullable: true
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PaymentDto'
          nullable: true
        customer:
          $ref: '#/components/schemas/CustomerDto'
        currency:
          type: string
          description: Cart currency.
          nullable: true
        salesChannel:
          type: string
          nullable: true
        salesEntity:
          $ref: '#/components/schemas/SalesEntityType'
        gross:
          type: number
          format: double
          readOnly: true
        net:
          type: number
          format: double
          readOnly: true
        shortId:
          type: string
          nullable: true
        orderId:
          type: string
          format: uuid
          nullable: true
        createdAtUtc:
          type: string
          description: This property is deprecated. Use CreatedAt instead.
          format: date-time
          nullable: true
          deprecated: true
        createdAt:
          type: string
          format: date-time
          nullable: true
        checkedOutAtUtc:
          type: string
          description: This property is deprecated. Use CheckedOutAt instead.
          format: date-time
          nullable: true
          deprecated: true
        checkedOutAt:
          type: string
          format: date-time
          nullable: true
        cartSummary:
          $ref: '#/components/schemas/CartSummaryDto'
      additionalProperties: false
    CartItemDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        products:
          type: array
          items:
            $ref: '#/components/schemas/CartProductDto'
          nullable: true
        quotationId:
          type: string
          format: uuid
          nullable: true
        orderLineId:
          type: string
          format: uuid
          nullable: true
        gross:
          type: number
          format: double
          readOnly: true
        net:
          type: number
          format: double
          readOnly: true
      additionalProperties: false
    CartItemGroupDto:
      type: object
      properties:
        productName:
          type: string
          nullable: true
        productId:
          type: string
          format: uuid
        startDate:
          type: string
          nullable: true
        priceCategory:
          type: string
          nullable: true
        quantity:
          type: integer
          format: int32
        unitPrice:
          type: number
          format: double
        total:
          type: number
          format: double
        cartItems:
          type: array
          items:
            $ref: '#/components/schemas/ShoppingCartItem'
          nullable: true
      additionalProperties: false
    CartItemWithStatus:
      type: object
      properties:
        products:
          type: array
          items:
            $ref: '#/components/schemas/CartProductWithStatus'
          nullable: true
        gross:
          type: number
          format: double
          readOnly: true
        net:
          type: number
          format: double
          readOnly: true
        id:
          type: string
          format: uuid
        quotationId:
          type: string
          format: uuid
          nullable: true
        orderLineId:
          type: string
          format: uuid
          nullable: true
      additionalProperties: false
    CartOptionDto:
      type: object
      properties:
        salesChannel:
          type: string
          nullable: true
      additionalProperties: false
    CartPaymentErrorDto:
      type: object
      properties:
        cartItems:
          type: array
          items:
            $ref: '#/components/schemas/CartItemWithStatus'
          nullable: true
        id:
          type: string
          format: uuid
        consumers:
          type: array
          items:
            $ref: '#/components/schemas/CartConsumerDto'
          nullable: true
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PaymentDto'
          nullable: true
        customer:
          $ref: '#/components/schemas/CustomerDto'
        currency:
          type: string
          description: Cart currency.
          nullable: true
        salesChannel:
          type: string
          nullable: true
        salesEntity:
          $ref: '#/components/schemas/SalesEntityType'
        gross:
          type: number
          format: double
          readOnly: true
        net:
          type: number
          format: double
          readOnly: true
        shortId:
          type: string
          nullable: true
        orderId:
          type: string
          format: uuid
          nullable: true
        createdAtUtc:
          type: string
          description: This property is deprecated. Use CreatedAt instead.
          format: date-time
          nullable: true
          deprecated: true
        createdAt:
          type: string
          format: date-time
          nullable: true
        checkedOutAtUtc:
          type: string
          description: This property is deprecated. Use CheckedOutAt instead.
          format: date-time
          nullable: true
          deprecated: true
        checkedOutAt:
          type: string
          format: date-time
          nullable: true
        cartSummary:
          $ref: '#/components/schemas/CartSummaryDto'
      additionalProperties: false
    CartProductDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        quoteUtcExpiryTime:
          type: string
          description: This property is deprecated. Use QuoteExpiryTime instead.
          format: date-time
          deprecated: true
        quoteExpiryTime:
          type: string
          format: date-time
        startDate:
          type: string
          format: date-time
        startTime:
          type: string
          format: date-span
        consumerIds:
          type: array
          items:
            type: integer
            format: int32
          nullable: true
        durationIncrement:
          type: string
          format: date-span
        durationCount:
          type: integer
          format: int32
        price:
          $ref: '#/components/schemas/PriceSpecDto'
        quotationId:
          type: string
          format: uuid
          nullable: true
        productId:
          type: string
          format: uuid
        productName:
          type: string
          nullable: true
        gross:
          type: number
          format: double
          readOnly: true
        net:
          type: number
          format: double
          readOnly: true
        fulfillmentId:
          type: string
          format: uuid
          nullable: true
        availabilityPriceMapId:
          type: string
          description: Reference to the availability price map.
          format: uuid
          nullable: true
        supplierId:
          type: string
          format: uuid
          nullable: true
        supplierName:
          type: string
          nullable: true
        products:
          type: array
          items:
            $ref: '#/components/schemas/CartProductDto'
          nullable: true
        productAttributes:
          type: array
          items:
            $ref: '#/components/schemas/CartAttributeDto'
          nullable: true
        orderLineAttributes:
          type: array
          items:
            $ref: '#/components/schemas/CartAttributeDto'
          nullable: true
        state:
          $ref: '#/components/schemas/CartProductState'
        fulfillmentReference:
          type: string
          nullable: true
        cancellationMessage:
          type: string
          nullable: true
        cancellationReason:
          type: string
          nullable: true
        shoppingCartId:
          type: string
          format: uuid
        shoppingCartShortId:
          type: string
          nullable: true
        shoppingCartCreatedAtUtc:
          type: string
          format: date-time
        shoppingCartCheckedOutAtUtc:
          type: string
          format: date-time
      additionalProperties: false
    CartProductState:
      enum:
        - Created
        - OrderProcessing
        - HoldPlaced
        - OrderError
        - OrderCancelled
        - OrderConfirmed
        - Uninitialized
      type: string
      description: "State logic for cart product will be handled by the Commerce.Commerce.Services.ShoppingCart.Domain.Models.ICartProductStateHandler interface\r\nas implemented by Commerce.Commerce.Services.ShoppingCart.Domain.Models.CartProductStateHandler.\r\nCurretly no transition is blocked.\r\nIf validation on cart product state is desired expect this to be replaced by the finite statemachine framework we use elsewhere."
    CartProductWithStatus:
      type: object
      properties:
        problemDetails:
          $ref: '#/components/schemas/StatusCodeProblemDetails'
        products:
          type: array
          items:
            $ref: '#/components/schemas/CartProductDto'
          nullable: true
        id:
          type: string
          format: uuid
        quoteUtcExpiryTime:
          type: string
          description: This property is deprecated. Use QuoteExpiryTime instead.
          format: date-time
          deprecated: true
        quoteExpiryTime:
          type: string
          format: date-time
        startDate:
          type: string
          format: date-time
        startTime:
          type: string
          format: date-span
        consumerIds:
          type: array
          items:
            type: integer
            format: int32
          nullable: true
        durationIncrement:
          type: string
          format: date-span
        durationCount:
          type: integer
          format: int32
        price:
          $ref: '#/components/schemas/PriceSpecDto'
        quotationId:
          type: string
          format: uuid
          nullable: true
        productId:
          type: string
          format: uuid
        productName:
          type: string
          nullable: true
        gross:
          type: number
          format: double
          readOnly: true
        net:
          type: number
          format: double
          readOnly: true
        fulfillmentId:
          type: string
          format: uuid
          nullable: true
        availabilityPriceMapId:
          type: string
          description: Reference to the availability price map.
          format: uuid
          nullable: true
        supplierId:
          type: string
          format: uuid
          nullable: true
        supplierName:
          type: string
          nullable: true
        productAttributes:
          type: array
          items:
            $ref: '#/components/schemas/CartAttributeDto'
          nullable: true
        orderLineAttributes:
          type: array
          items:
            $ref: '#/components/schemas/CartAttributeDto'
          nullable: true
        state:
          $ref: '#/components/schemas/CartProductState'
        fulfillmentReference:
          type: string
          nullable: true
        cancellationMessage:
          type: string
          nullable: true
        cancellationReason:
          type: string
          nullable: true
        shoppingCartId:
          type: string
          format: uuid
        shoppingCartShortId:
          type: string
          nullable: true
        shoppingCartCreatedAtUtc:
          type: string
          format: date-time
        shoppingCartCheckedOutAtUtc:
          type: string
          format: date-time
      additionalProperties: false
    CartSummaryDto:
      type: object
      properties:
        cartItemGroups:
          type: array
          items:
            $ref: '#/components/schemas/CartItemGroupDto'
          nullable: true
        total:
          type: number
          format: double
      additionalProperties: false
    CategoryAttributeResponse:
      type: object
      properties:
        categoryId:
          type: string
          format: uuid
        name:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
      additionalProperties: false
    CategoryCancellationPolicy:
      type: object
      properties:
        unit:
          type: string
          description: Name of the unit
          nullable: true
        upperLimitDuration:
          type: integer
          description: Upper limit of the period
          format: int32
          nullable: true
        lowerLimitDuration:
          type: integer
          description: Lower limit of the period
          format: int32
          nullable: true
        percentage:
          type: number
          description: Cancellation percentage
          format: double
          nullable: true
        index:
          type: integer
          description: Cancellation policy ordering
          format: int32
      additionalProperties: false
    ComparisonType:
      enum:
        - Equals
        - Contains
      type: string
    Consumer:
      type: object
      properties:
        id:
          type: integer
          description: "Consumer identifier assigned by the client.  The client is responsible for not reusing consumer id in availability requests,\r\nresponses to which can be later used to assemble the same shopping cart."
          format: int32
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/EntityAttribute'
          description: Attributes describing this consumer
          nullable: true
      additionalProperties: false
      description: Attributes for a consumer
    ConsumerUpdateDTO:
      type: object
      properties:
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/CartAttributeDto'
          nullable: true
        externalId:
          type: integer
          format: int32
      additionalProperties: false
    CustomerDto:
      type: object
      properties:
        lastName:
          type: string
          nullable: true
        firstName:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        addressOne:
          type: string
          nullable: true
        addressTwo:
          type: string
          nullable: true
        addressCity:
          type: string
          nullable: true
        addressState:
          type: string
          nullable: true
        addressPostalCode:
          type: string
          nullable: true
        addressCountryISO:
          type: string
          nullable: true
        addressCountryName:
          type: string
          nullable: true
        company:
          type: string
          nullable: true
      additionalProperties: false
    DefaultCurrency:
      type: object
      properties:
        net:
          type: number
          format: double
        gross:
          type: number
          format: double
        currency:
          type: string
          nullable: true
      additionalProperties: false
    DynamicTaxBreakDown:
      type: object
      properties:
        taxValues:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/TaxValueDto'
          nullable: true
        gross:
          type: number
          format: double
        net:
          type: number
          format: double
          nullable: true
        vatTotal:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    EntityAttribute:
      type: object
      properties:
        name:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
        comparisonType:
          $ref: '#/components/schemas/ComparisonType'
      additionalProperties: false
      description: A generic attribute with name and value
    ErrorObject:
      type: object
      properties:
        objectName:
          type: string
          nullable: true
        errorReason:
          type: string
          nullable: true
      additionalProperties: false
    ExchangeRateResponse:
      type: object
      properties:
        date:
          type: string
          nullable: true
        base:
          type: string
          nullable: true
        rates:
          type: object
          additionalProperties:
            type: number
            format: double
            nullable: true
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        message:
          type: string
          nullable: true
      additionalProperties: false
    FilterProduct:
      type: object
      properties:
        id:
          type: string
          description: "Category containing matching products when searching for simple products.  For product packages, this can identify the product\r\ncategory of a product in the package if the specification only applies to products in that category."
          format: uuid
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/SearchAttribute'
          description: >-
            Attributes that must be satisfied in the availability search. Will
            be used to filter products in commerce.
          nullable: true
        consumerIds:
          type: array
          items:
            type: integer
            format: int32
          description: "List of consumers that will consume this product. The provided ID must correspond to one of the consumers specified in\r\nthe availability search specification."
          nullable: true
        prices:
          type: array
          items:
            type: array
            items:
              $ref: '#/components/schemas/EntityAttribute'
          description: >-
            A list of different attribute sets to include in the price engine
            calculation.
          nullable: true
      additionalProperties: false
      description: "Attributes applied to an ARI search for products in the category given by the Id.\r\nWhen finding attributes to search for a specification for the given attribute will be preferred.\r\nIf no such specification is found and the product is part of a package, the specification on the package will be used instead."
    GroupAvailability:
      type: object
      properties:
        attributes:
          type: array
          items:
            type: string
          description: List of attribute names for grouping by attributes
          nullable: true
      additionalProperties: false
      description: Specification of how availability should be grouped in the response
    MultiCurrency:
      type: object
      properties:
        net:
          type: number
          format: double
        gross:
          type: number
          format: double
        currency:
          type: string
          nullable: true
        taxBreakDown:
          $ref: '#/components/schemas/TaxBreakDown'
      additionalProperties: false
    OrderLineUpdateDto:
      type: object
      properties:
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/CartAttributeDto'
          description: Order line attributes that should be added to the cart product.
          nullable: true
        cartProductId:
          type: string
          description: Cart product id that attributes should be added to.
          format: uuid
      additionalProperties: false
    PackageInclusionResponse:
      type: object
      properties:
        productId:
          type: string
          format: uuid
        categoryId:
          type: string
          format: uuid
        maxQuantity:
          type: number
          format: double
          nullable: true
        minQuantity:
          type: number
          format: double
        startOffset:
          type: string
          format: date-span
        inclusionStrategy:
          $ref: '#/components/schemas/PackageInclusionStrategy'
      additionalProperties: false
    PackageInclusionStrategy:
      enum:
        - EachIncrement
        - FirstIncrement
        - LastIncrement
        - Inherit
      type: string
    PaymentDto:
      required:
        - amount
        - paymentStatus
        - reference
        - timestamp
      type: object
      properties:
        amount:
          type: number
          description: Payment amount
          format: double
        cardType:
          type: string
          description: >-
            Card type, not used by the platform except together with Reference
            as an indeitifer for the payment
          nullable: true
        reference:
          minLength: 1
          type: string
          description: >-
            Payment reference, not used by the platform except together with
            CardType as an identifier for the payment
          example: >-
            fulfillmentReference value from /v0/ShoppingCarts/{cartId}/Checkout
            response
        timestamp:
          minLength: 1
          type: string
          description: Payment information timestamp, not used by the platform
          format: date-time
        paymentStatus:
          $ref: '#/components/schemas/PaymentStatus'
      additionalProperties: false
      description: Payment information
    PaymentStatus:
      enum:
        - Pending
        - Paid
      type: string
      description: Status of a payment transaction
    PriceGroup:
      type: object
      properties:
        code:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        minAge:
          type: integer
          format: int32
        maxAge:
          type: integer
          format: int32
        quantity:
          type: integer
          format: int32
        type:
          type: string
          nullable: true
      additionalProperties: false
    PriceGroupDto:
      type: object
      properties:
        code:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        type:
          type: string
          nullable: true
        minAge:
          type: integer
          format: int32
        maxAge:
          type: integer
          format: int32
        quantity:
          type: integer
          format: int32
      additionalProperties: false
    PriceSpec:
      type: object
      properties:
        id:
          type: string
          format: uuid
        net:
          type: number
          format: double
        gross:
          type: number
          format: double
        currency:
          type: string
          nullable: true
        taxBreakDown:
          $ref: '#/components/schemas/TaxBreakDown'
        dynamicTaxBreakDown:
          $ref: '#/components/schemas/DynamicTaxBreakDown'
        multiCurrency:
          $ref: '#/components/schemas/MultiCurrency'
        defaultCurrency:
          $ref: '#/components/schemas/DefaultCurrency'
        cancellationPolicies:
          type: array
          items:
            $ref: '#/components/schemas/CancellationPolicy'
          description: Cancellation policies
          nullable: true
      additionalProperties: false
      description: "Represents a price for a single item.\r\nIf a line has a quantity different from 1, the final price should be multiplied by the quantity"
    PriceSpecDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        net:
          type: number
          format: double
        gross:
          type: number
          format: double
        currency:
          type: string
          nullable: true
        unitPrice:
          type: number
          format: double
        quantity:
          type: integer
          format: int32
      additionalProperties: false
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
      additionalProperties: {}
    ProductAvailability:
      type: object
      properties:
        productId:
          type: string
          description: Product identifier.
          format: uuid
        productInformation:
          $ref: '#/components/schemas/ProductInformationDto'
        exchangeRates:
          $ref: '#/components/schemas/ExchangeRateResponse'
        map:
          type: array
          items:
            $ref: '#/components/schemas/AvailabilityPriceMapResponse'
          description: List of availability for the product
          nullable: true
      additionalProperties: false
      description: "Availability for a single product.  Contains one entry for each availability option for this product.  Each avaiability\r\nwill have a different time for starting consumption of the product and/or a different price."
    ProductCategoryResponse:
      type: object
      properties:
        id:
          type: string
          description: Identifier for this product category
          format: uuid
        name:
          type: string
          description: Name of this product category. The name may not be unique.
          nullable: true
        ruleSetId:
          type: string
          description: Reference to an optional rule set
          format: uuid
          nullable: true
        attributeDefinitions:
          type: array
          items:
            $ref: '#/components/schemas/AttributeDefinitionResponse'
          description: >-
            Collection of definitions for all attributes that can be used with
            products in this category.
          nullable: true
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/CategoryAttributeResponse'
          description: >-
            Collection of definitions for all attributes that can be used with
            products in this category.
          nullable: true
        taxStructure:
          $ref: '#/components/schemas/TaxStructure'
        commisionRate:
          type: number
          format: double
          nullable: true
        cancellationPolicyStructure:
          $ref: '#/components/schemas/CancellationPolicyStructure'
        productCount:
          type: integer
          format: int64
      additionalProperties: false
      description: "Products are organized in product categories. A product category defines the attributes\r\nthat products in the category can have."
    ProductInformationDto:
      type: object
      properties:
        bookingQuestions:
          type: array
          items:
            $ref: '#/components/schemas/BookingQuestionDto'
          description: Booking questions.
          nullable: true
        priceGroups:
          type: array
          items:
            $ref: '#/components/schemas/PriceGroupDto'
          nullable: true
        routes:
          type: array
          items:
            $ref: '#/components/schemas/RouteDto'
          nullable: true
        productId:
          type: string
          description: Product identifier.
          format: uuid
      additionalProperties: false
    ProductListResponse:
      type: object
      properties:
        nextPage:
          type: string
          description: "The token to use for the `page` request parameter to retrieve the next result page when using paginated results.\r\nThis property is not set for the last result page."
          nullable: true
        totalCount:
          type: integer
          format: int32
        products:
          type: array
          items:
            $ref: '#/components/schemas/ProductResponse'
          description: Products matching any filtering criteria
          nullable: true
      additionalProperties: false
      description: A list of products supporting pagination
    ProductResponse:
      type: object
      properties:
        id:
          type: string
          description: Unique product identifier.
          format: uuid
        name:
          type: string
          description: Product name.
          nullable: true
        externalId:
          type: string
          description: External Id
          nullable: true
        fulfillmentSchemaId:
          type: string
          description: "Reference to a fulfillment schema. \r\nThe schema tells how the product should be handled in regards to fulfillment system."
          format: uuid
          nullable: true
        categoryId:
          type: string
          description: Category identifier.
          format: uuid
        category:
          $ref: '#/components/schemas/ProductCategoryResponse'
        isEnabled:
          type: boolean
          description: >-
            IsEnabled indicates if the product is visible and can be sold. Based
            on EnabledFrom/EnabledTo DateTime set on a product.
        enabledFrom:
          type: string
          description: "First point in time that this product can be sold.  If not set, the product can be sold from the beginning of time.\r\nNote that this property does not say anythimg about when the product can be <em>consumed</em>.  Availability for consumption\r\nis provided by the availability API."
          format: date-time
          nullable: true
        enabledTo:
          type: string
          description: "Last point in time that this product can be sold.  If not set, the product can be sold until the end of time.\r\nNote that this property does not say anythimg about when the product can be <em>consumed</em>.  Availability for consumption\r\nis provided by the availability API."
          format: date-time
          nullable: true
        packageInclusions:
          type: array
          items:
            $ref: '#/components/schemas/PackageInclusionResponse'
          description: Package inclusions for the package-product
          nullable: true
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/EntityAttribute'
          description: Attributes set on this product.
          nullable: true
        parentExternalId:
          type: string
          nullable: true
        fulfillable:
          type: boolean
          nullable: true
        searchable:
          type: boolean
          nullable: true
        supplierId:
          type: string
          format: uuid
          nullable: true
        hasNewContent:
          type: boolean
      additionalProperties: false
      description: Product Response for retrieving products through products API.
    ProductSpecification:
      type: object
      properties:
        id:
          type: string
          description: "Category containing matching products when searching for simple products.  For product packages, this can identify the product\r\ncategory of a product in the package if the specification only applies to products in that category."
          format: uuid
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/EntityAttribute'
          description: Attributes that must be satisfied in the availability search
          nullable: true
        consumerIds:
          type: array
          items:
            type: integer
            format: int32
          description: "List of consumers that will consume this product. The provided ID must correspond to one of the consumers specified in\r\nthe availability search specification."
          nullable: true
        prices:
          type: array
          items:
            type: array
            items:
              $ref: '#/components/schemas/EntityAttribute'
          description: >-
            A list of different attribute sets to include in the price engine
            calculation.
          nullable: true
      additionalProperties: false
      description: "Attributes applied to an ARI search for products in the category given by the Id.\r\nWhen finding attributes to search for a specification for the given attribute will be preferred.\r\nIf no such specification is found and the product is part of a package, the specification on the package will be used instead."
    QuotationRequest:
      required:
        - productCategoryId
        - searchFrom
        - searchSpecification
        - searchTo
      type: object
      properties:
        productCategoryId:
          type: string
          description: Products in this category will be considered for a match
          format: uuid
        searchFrom:
          minLength: 1
          type: string
          description: >-
            Matching products must be available to start consumption on or after
            this time
          format: date-time
        searchTo:
          minLength: 1
          type: string
          description: >-
            Matching products must be available to start consumption before this
            time
          format: date-time
        productId:
          type: string
          description: Restrict availability search to a specific product.
          format: uuid
          nullable: true
        parentProductId:
          type: string
          description: Obsolete property, do not use
          format: uuid
          nullable: true
          deprecated: true
        parentQuotationId:
          type: string
          description: Obsolete property, do not use
          format: uuid
          nullable: true
          deprecated: true
        durationCount:
          type: integer
          description: >-
            Used to indicate the length of stay. Size of DurationCount is
            defined by DurationIncrement, making it possible to book 2 days or 2
            hours.
          format: int32
          nullable: true
        searchSpecification:
          $ref: '#/components/schemas/AttributeSearchSpecification'
        groupBy:
          $ref: '#/components/schemas/GroupAvailability'
      additionalProperties: false
      description: Search specification for availability search
    QuotationResponse:
      type: object
      properties:
        quotationId:
          type: string
          description: Quotation identifier.
          format: uuid
        parentQuotationId:
          type: string
          description: Parent quotation identifier.
          format: uuid
          nullable: true
          deprecated: true
        createdUtc:
          type: string
          description: "Date and time of quotation creation in Coordinated Universal Time.\r\nThis field is deprecated and should not be used. It will eventually be removed. Use the field createdTime instead."
          format: date-time
          deprecated: true
        createdTime:
          type: string
          description: Date and time of quotation creation
          format: date-time
        products:
          type: array
          items:
            $ref: '#/components/schemas/AvailableProductResponse'
          description: >-
            Complete information about product with availability satisfying the
            search, referenced from ProductAvailabilities.
          nullable: true
        productAvailabilities:
          type: array
          items:
            $ref: '#/components/schemas/ProductAvailability'
          description: Product availability information
          nullable: true
        priceSpecifications:
          type: array
          items:
            $ref: '#/components/schemas/PriceSpec'
          description: Prices for available products referenced by ProductAvailabilities
          nullable: true
        searchSpecification:
          $ref: '#/components/schemas/AttributeSearchSpecification'
        productCategoryId:
          type: string
          description: The product category used in the availability search
          format: uuid
          nullable: true
        productId:
          type: string
          description: Optional product id if we want to search for a specific product.
          format: uuid
          nullable: true
        parentProductId:
          type: string
          description: >-
            Used in refinement search. This is the product containing the
            product we are doing the refinement search for.
          format: uuid
          nullable: true
          deprecated: true
        nextPage:
          type: string
          description: "The token to use for the `page` request parameter to retrieve the next result page when using paginated results.\r\nthis property is not set for the last result page."
          nullable: true
        exchangeRates:
          $ref: '#/components/schemas/ExchangeRateResponse'
        totalProductCount:
          type: integer
          description: Show total number of products
          format: int32
          nullable: true
      additionalProperties: false
      description: >-
        Represents statement of promise to supply available goods or services at
        specified/estimated prices.
    RequirementLevel:
      enum:
        - NotRequired
        - Required
        - RequiredForLine
      type: string
    Route:
      type: object
      properties:
        departureLocationCode:
          type: string
          nullable: true
        departureLocationName:
          type: string
          nullable: true
        arrivalLocationCode:
          type: string
          nullable: true
        arrivalLocationName:
          type: string
          nullable: true
        allowRoundtrip:
          type: boolean
        allowOneWay:
          type: boolean
      additionalProperties: false
    RouteDto:
      type: object
      properties:
        departureLocationCode:
          type: string
          nullable: true
        departureLocationName:
          type: string
          nullable: true
        arrivalLocationCode:
          type: string
          nullable: true
        arrivalLocationName:
          type: string
          nullable: true
        allowRoundtrip:
          type: boolean
        allowOneWay:
          type: boolean
      additionalProperties: false
    SalesEntityType:
      enum:
        - OTA
        - DMC
        - Distribution
      type: string
    SearchAttribute:
      type: object
      properties:
        name:
          type: string
          nullable: true
        value:
          nullable: true
        comparisonType:
          $ref: '#/components/schemas/ComparisonType'
      additionalProperties: false
      description: A attribute used to handle list of values in a keyValuePair
    ShoppingCartItem:
      type: object
      properties:
        cartItemId:
          type: string
          format: uuid
        cartProductIds:
          type: array
          items:
            type: string
            format: uuid
          nullable: true
      additionalProperties: false
    StatusCodeProblemDetails:
      type: object
      properties:
        transient:
          type: boolean
        operationId:
          type: string
          nullable: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorObject'
          nullable: true
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
      additionalProperties: {}
      description: "Base class for handling problem details object.\r\nUsed to set the status, type and title of the problem details object."
    TaxBreakDown:
      type: object
      properties:
        gross:
          type: number
          format: double
        net:
          type: number
          format: double
        vatTotal:
          type: number
          format: double
          nullable: true
        vaT0OutsideAreaPctPortion:
          type: number
          format: double
          nullable: true
        vaT0OutsideAreaShare:
          type: number
          format: double
          nullable: true
        vaT0AbroadPctPortion:
          type: number
          format: double
          nullable: true
        vaT0AbroadShare:
          type: number
          format: double
          nullable: true
        vaT6PctPortion:
          type: number
          format: double
          nullable: true
        vaT6Share:
          type: number
          format: double
          nullable: true
        vaT12PctPortion:
          type: number
          format: double
          nullable: true
        vaT12Share:
          type: number
          format: double
          nullable: true
        vaT15PctPortion:
          type: number
          format: double
          nullable: true
        vaT15Share:
          type: number
          format: double
          nullable: true
        vaT25PctPortion:
          type: number
          format: double
          nullable: true
        vaT25Share:
          type: number
          format: double
          nullable: true
      additionalProperties: false
      description: Show the tax (VAT) breakdown
    TaxEntity:
      type: object
      properties:
        name:
          type: string
          description: Name
          nullable: true
        percentage:
          type: number
          description: Percentage
          format: double
        enabled:
          type: boolean
          description: Enabled
        portion:
          type: number
          format: double
      additionalProperties: false
    TaxStructure:
      type: object
      properties:
        taxEntities:
          type: array
          items:
            $ref: '#/components/schemas/TaxEntity'
          nullable: true
      additionalProperties: false
    TaxValueDto:
      type: object
      properties:
        name:
          type: string
          nullable: true
        pctPortion:
          type: number
          format: double
        share:
          type: number
          format: double
        vat:
          type: number
          format: double
        percentage:
          type: number
          format: double
      additionalProperties: false
    TypeValueResponse:
      type: object
      properties:
        name:
          type: string
          nullable: true
        value:
          type: integer
          format: int32
      additionalProperties: false
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: https://auth.aks.nordicadventuregroup.com/connect/authorize
          scopes:
            commerce: Commerce API
