openapi: 3.0.0
info:
  title: Catalogues
  version: "2023"
  description: The Catalogues service surfaces products and surfaces from any
    provider behind a single API surface, allowing you to build product and
    service browsing interfaces, and driving workflows that lead to customers
    adding products to the basket.
tags:
  - name: Catalogues
  - name: Products
paths:
  /catalogues/availabilitygroups/{id}:
    get:
      tags:
        - Products
      operationId: GetProductAvailabilityGroup
      summary: Get Product Availability Group
      description: Gets a product availability group based, and optionally filters on
        category.
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: page
          in: query
          required: true
          schema:
            type: integer
            default: 1
        - name: pageSize
          in: query
          required: true
          schema:
            type: integer
            default: 50
        - name: category
          in: query
          required: false
          description: Optionally, filter by a given product category
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
        - name: id
          in: path
          required: true
          description: The id of the availability group
          schema:
            type: string
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AvailabilityGroupSearchResult"
        "401":
          description: Access is unauthorized.
  /catalogues/availabilitygroups/{id}/{productId}:
    get:
      tags:
        - Products
      operationId: GetProductFromAvailabilityGroup
      summary: Get Product From Availability Group
      description: Gets a product from a product availability group.
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: id
          in: path
          required: true
          description: The id of the availability group
          schema:
            type: string
        - name: productId
          in: path
          required: true
          description: The product id
          schema:
            type: string
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductDto"
        "401":
          description: Access is unauthorized.
  /catalogues/configuration:
    get:
      tags:
        - Catalogues
      operationId: GetConfiguration
      summary: Get Configuration
      description: Gets store specific configuration for the catalogue.
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
      responses:
        "200":
          description: The configuration for the catalogue
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConfigurationResult"
  /catalogues/products:
    get:
      tags:
        - Products
      operationId: GetProducts
      summary: Search Products
      description: Searches across all products from all providers.
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: page
          in: query
          required: true
          description: Page to get
          schema:
            type: integer
            default: 1
        - name: pageSize
          in: query
          required: true
          description: Number of items per page
          schema:
            type: integer
            default: 50
        - name: includeEligibilities
          in: query
          required: false
          description: Whether the search should include eligibilities on the product.
          schema:
            type: boolean
            default: false
        - name: productType
          in: query
          required: false
          description: Product type to fetch
          schema:
            type: string
            enum:
              - Ticketing
              - Consumable
              - Variable
              - TimeSlot
        - name: subscriptionsOnly
          in: query
          required: false
          description: Limit search to subscribable products only
          schema:
            type: boolean
            default: false
        - name: channel
          in: query
          required: false
          description: Limit search to products and variants sold on this named sales
            channel (e.g. 'web'), matched case-insensitively. Products and
            variants without a matching named channel are excluded. When omitted
            or blank, no channel filtering is applied. Values longer than 50
            characters are rejected with 400.
          schema:
            type: string
            maxLength: 50
        - name: isPreOrder
          in: query
          required: false
          description: Filter to products with active pre-order availability
          schema:
            type: boolean
        - name: isComingSoon
          in: query
          required: false
          description: Filter to products with active coming-soon availability
          schema:
            type: boolean
        - name: excludeUnavailable
          in: query
          required: false
          description: Exclude products with active pre-order or coming-soon availability
            features
          schema:
            type: boolean
        - name: sort
          in: query
          required: false
          description: Field to sort results by (e.g. 'availabilityDate')
          schema:
            type: string
        - name: sortDir
          in: query
          required: false
          description: Sort direction ('asc' or 'desc')
          schema:
            type: string
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductSearchResult"
        "401":
          description: Access is unauthorized.
  /catalogues/products/ticketing/events/lowest-price:
    get:
      tags:
        - Products
      operationId: GetEventsLowestPrices
      summary: Get Events Lowest Price
      description: Gets lowest price for specified events
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: productId
          in: query
          required: true
          description: The Ids of the ticketing events to get lowest prices for
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
        - name: categoryId
          in: query
          required: false
          description: Sending a categoryId will limit the response to the specified
            category
          schema:
            type: string
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LowestPriceResult"
        "401":
          description: Access is unauthorized.
  /catalogues/products/ticketing/lookup:
    get:
      tags:
        - Products
      operationId: GetTicketingProductsLookups
      summary: Get Ticketing Lookups
      description: Gets a lookup for ticketing products
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LookupResult"
        "401":
          description: Access is unauthorized.
  /catalogues/products/ticketing/seat-categories/lookup:
    get:
      tags:
        - Products
      operationId: GetSeatCategoryLookups
      summary: Get Seat Categories Lookups
      description: Gets a lookup for seat categories
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: isHospitality
          in: query
          required: false
          description: When true returns only Hospitality categories
          schema:
            type: boolean
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LookupResult"
        "401":
          description: Access is unauthorized.
  /catalogues/products/ticketing/seat-categories/lowest-price:
    get:
      tags:
        - Products
      operationId: GetCategoriesLowestPrices
      summary: Get Lowest Price for Seat Categories
      description: Get Lowest price Events for specified categories
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: categoryId
          in: query
          required: true
          description: The categories that you want the events for
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
        - name: productId
          in: query
          required: false
          description: Sending a productId will limit the response to the specified Product
          schema:
            type: string
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LowestPriceResult"
        "401":
          description: Access is unauthorized.
  /catalogues/products/{productId}:
    get:
      tags:
        - Products
      operationId: GetProduct
      summary: Get Product
      description: Gets a specific product
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: productId
          in: path
          required: true
          description: The Id of the product
          schema:
            type: string
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductDto"
        "401":
          description: Access is unauthorized.
        "404":
          description: The server cannot find the requested resource.
  /catalogues/products/{productId}/cross-sell-options:
    get:
      tags:
        - Products
      operationId: GetProductCrossSellOptions
      summary: Get Cross-Sell Options
      description: Gets the resolved cross-sell options offered against a product.
        Ineligible options are included — eligibility is evaluated at
        add-to-basket, not here.
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: productId
          in: path
          required: true
          description: The Id of the parent product
          schema:
            type: string
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CrossSellOptionsResult"
        "401":
          description: Access is unauthorized.
        "404":
          description: The server cannot find the requested resource.
  /catalogues/products/{productId}/cross-sells:
    get:
      tags:
        - Products
      operationId: GetProductCrossSells
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: productId
          in: path
          required: true
          description: The Id of the product to get cross-sells for
          schema:
            type: string
        - name: seatCategory
          in: query
          required: false
          description: Optional seat category
          schema:
            type: string
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CrossSellResult"
        "401":
          description: Access is unauthorized.
  /catalogues/products/{productId}/variant/{variantId}/cross-sell-options:
    get:
      tags:
        - Products
      operationId: GetVariantCrossSellOptions
      summary: Get Variant Cross-Sell Options
      description: Gets the resolved cross-sell options offered against a specific
        variant of a product. Cross-sells authored via the management API are on
        the variant, not the product.
      parameters:
        - $ref: "#/components/parameters/StorefrontAuthHeaders.apiKey"
        - $ref: "#/components/parameters/StorefrontAuthHeaders.language"
        - name: productId
          in: path
          required: true
          description: The Id of the parent product
          schema:
            type: string
        - name: variantId
          in: path
          required: true
          description: The Id of the variant carrying the cross-sell feature
          schema:
            type: string
      responses:
        "200":
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CrossSellOptionsResult"
        "401":
          description: Access is unauthorized.
        "404":
          description: The server cannot find the requested resource.
components:
  parameters:
    StorefrontAuthHeaders.apiKey:
      name: x-api-key
      in: header
      required: true
      description: The API key for the given store
      schema:
        type: string
    StorefrontAuthHeaders.language:
      name: Accept-Language
      in: header
      required: false
      schema:
        type: string
        default: en
  schemas:
    AvailabilityGroupSearchResult:
      type: object
      description: Availability Group Search Result
      required:
        - results
        - page
        - pageSize
        - totalResults
        - categories
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/ProductDto"
        page:
          type: integer
        pageSize:
          type: integer
        totalResults:
          type: integer
        categories:
          type: object
          additionalProperties:
            type: integer
    Base64ImageMediaItemDto:
      type: object
      description: An image media item that is encoded as a base64 string
      required:
        - base64
        - type
      allOf:
        - $ref: "#/components/schemas/MediaItemDto"
      properties:
        base64:
          type: string
          format: base64
        type:
          type: string
          enum:
            - ImageBase64
    BaseProductDto:
      type: object
      description: The shared properties of of all products
      required:
        - id
        - name
        - state
        - visibility
        - purchaseLimits
        - saleStartDate
        - media
        - meta
        - features
      properties:
        id:
          type: string
          description: The id of the product
        name:
          type: string
          description: The name of the product. i.e "Coca Cola 375ml"
        description:
          type: string
          description: The description of the product
        shortName:
          type: string
          description: Short name for the consumable
        state:
          allOf:
            - $ref: "#/components/schemas/ProductStateEnum"
          description: The state of the product.
        visibility:
          allOf:
            - $ref: "#/components/schemas/ProductVisibilityEnum"
          description: The visibility of the product.
        purchaseLimits:
          allOf:
            - $ref: "#/components/schemas/PurchaseLimitsDto"
          description: A set of quantities of this product that the customer can purchase
            across different contexts.
        saleStartDate:
          type: string
          description: Date from when the product is available for purchase
        availabilityDate:
          type: string
          format: date-time
          description: Date/time when the product becomes available (release date).
            Optional.
        media:
          type: array
          items:
            $ref: "#/components/schemas/MediaItemDto"
          description: Associated media items
        meta:
          type: array
          items:
            $ref: "#/components/schemas/MetaItemDto"
          description: Additional non-standard properties
        features:
          type: array
          items:
            $ref: "#/components/schemas/Features.ProductFeatureDto"
          description: Additional product features
        seller:
          allOf:
            - $ref: "#/components/schemas/SellerDto"
          description: Seller information, if available
    CompetitionTypeDto:
      type: object
      description: Competition Type
      required:
        - name
        - logoImageUrl
      properties:
        name:
          type: string
        logoImageUrl:
          type: string
    ConfigurationResult:
      type: object
      description: The configuration for a the store's catalogue.
      required:
        - ownTeams
      properties:
        ownTeams:
          type: array
          items:
            $ref: "#/components/schemas/OwnTeamDto"
          description: Enables the store to be configured with a set of sports teams that
            "belong" to the store. For example, a football club can configure
            it's own men's, women's, U18s teams, so that UIs can be built to
            emphasise their own teams.
    ConsumableDto:
      type: object
      description: Represents the additional information that comes on a consumable product
      required:
        - description
        - shortName
        - brand
        - size
        - barcode
        - allergens
        - categories
        - price
        - tax
      properties:
        description:
          type: string
          description: A short description about the consumable.
        shortName:
          type: string
          description: Short name for the consumable
        brand:
          type: string
          description: The brand of the product
        size:
          type: string
          description: The size of the product, for example in ml or grams
        barcode:
          type: string
          description: The scannable barcode of the product
        allergens:
          type: string
          description: Any allergens that the product contains
        categories:
          type: array
          items:
            type: string
          description: The product category that the product belongs to
        price:
          allOf:
            - $ref: "#/components/schemas/MoneyDto"
          description: The price of the product
        tax:
          $ref: "#/components/schemas/MoneyDto"
        imageUrl:
          type: string
          description: Optional product image
          format: uri
        calories:
          type: integer
    CrossSellOptionsResult:
      type: object
      description: The resolved cross-sell options for a product — the purchasable
        cross-sell products offered against it
      required:
        - crossSellOptionsForProductId
        - maxTotal
        - products
      properties:
        crossSellOptionsForProductId:
          type: string
          description: The product these cross-sell options are for
        maxTotal:
          type: integer
          description: The maximum total quantity of cross-sold units permitted against
            one line of the parent product
        products:
          type: array
          items:
            $ref: "#/components/schemas/ProductDto"
          description: The resolved cross-sold products; each carries only the variants
            listed on the parent's cross-sell feature
    CrossSellResult:
      type: object
      description: The results of a cross-sell search
      required:
        - crossSellForProductId
        - products
      properties:
        crossSellForProductId:
          type: string
          description: The product that these cross-sells items are for
        products:
          type: array
          items:
            $ref: "#/components/schemas/ProductDto"
          description: The products that came back in the response
    EligibilityConditionEvaluationEnum:
      type: string
      description: Eligibility Condition Evaluation
      enum:
        - NotEvaluated
        - Eligible
        - Ineligible
        - ContactRequired
        - ProviderSideContactRequired
    EligibilityDto:
      type: object
      description: Eligibility
      required:
        - id
        - type
        - name
        - conditionEvaluation
        - purchaseLimitPerContact
        - purchaseLimitPerOrder
      properties:
        id:
          type: string
        type:
          $ref: "#/components/schemas/EligibilityTypeEnum"
        eligibleFrom:
          type: string
          format: date-time
        eligibleUntil:
          type: string
          format: date-time
        name:
          type: string
        conditionEvaluation:
          $ref: "#/components/schemas/EligibilityConditionEvaluationEnum"
        purchaseLimitPerContact:
          type: integer
        purchaseLimitPerOrder:
          type: integer
    EligibilityTypeEnum:
      type: string
      description: Eligibility Type
      enum:
        - Ticketing
    EmbeddedMediaItemDto:
      type: object
      description: Embedded content that can display some media. Intended for use with
        iframes.
      required:
        - attributes
        - content
        - type
      allOf:
        - $ref: "#/components/schemas/MediaItemDto"
      properties:
        attributes:
          type: object
          additionalProperties:
            type: string
        content:
          type: string
        type:
          type: string
          enum:
            - Embedded
    EventTypeEnum:
      type: string
      description: Sub type of the TicketEvent type.
      enum:
        - SportsMatch
    Features.AgeEligibilityRuleDto:
      type: object
      required:
        - type
      allOf:
        - $ref: "#/components/schemas/Features.EligibilityRuleDto"
      properties:
        type:
          type: string
          enum:
            - Age
        minimumAge:
          type: integer
          description: The minimum age required for eligibility
        maximumAge:
          type: integer
          description: The maximum age allowed for eligibility
    Features.BillingScheduleDto:
      type: object
      discriminator:
        propertyName: type
        mapping:
          Recurring: "#/components/schemas/Features.RecurringBillingScheduleDto"
          FixedTerm: "#/components/schemas/Features.FixedTermBillingScheduleDto"
          Manual: "#/components/schemas/Features.ManualBillingScheduleDto"
      required:
        - type
      properties:
        type:
          allOf:
            - $ref: "#/components/schemas/Features.BillingScheduleType"
          description: The type of the billing schedule
    Features.BillingScheduleType:
      type: string
      description: The types of billing schedule for a subscription
      enum:
        - Recurring
        - FixedTerm
        - Manual
    Features.BooleanFlagDto:
      type: object
      description: A boolean flag for a product
      required:
        - type
        - value
      allOf:
        - $ref: "#/components/schemas/Features.FlagDto"
      properties:
        type:
          type: string
          enum:
            - Boolean
        value:
          type: boolean
          description: The value of the boolean flag
    Features.ComingSoonFeatureDto:
      type: object
      description: Coming soon feature for products not yet available
      required:
        - type
        - until
        - isActive
        - message
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - ComingSoon
        until:
          type: string
          format: date-time
          description: When the coming soon period ends (product becomes available)
        isActive:
          type: boolean
          description: Whether coming soon is currently active (computed from date)
        message:
          type: array
          items:
            $ref: "#/components/schemas/Features.TranslationDto"
          description: Localized messages to display during coming soon period
    Features.CountryPriceDto:
      type: object
      description: Country price for a product
      required:
        - country
        - price
      properties:
        country:
          type: string
        price:
          $ref: "#/components/schemas/Features.FixedPriceDto"
    Features.CountryPriceTableDto:
      type: object
      description: Country prices for a product
      required:
        - default
        - prices
        - type
      allOf:
        - $ref: "#/components/schemas/Features.PriceDto"
      properties:
        default:
          type: array
          items:
            $ref: "#/components/schemas/Features.FixedPriceDto"
        prices:
          type: array
          items:
            $ref: "#/components/schemas/Features.CountryPriceDto"
        type:
          type: string
          enum:
            - Country
    Features.CrossSellFeatureDto:
      type: object
      description: Declares which product variants may be cross-sold onto this product
        and the maximum total quantity across them
      required:
        - type
        - maxTotal
        - products
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - CrossSell
        maxTotal:
          type: integer
          description: The maximum total quantity of cross-sold units permitted against
            one line of this product
        products:
          type: array
          items:
            $ref: "#/components/schemas/Features.CrossSellProductEntryDto"
          description: The product variants that may be cross-sold onto this product
    Features.CrossSellProductEntryDto:
      type: object
      description: An entry in a product's cross-sell list — a specific variant of
        another product that may be cross-sold onto this one
      required:
        - productId
        - variantId
      properties:
        productId:
          type: string
          description: The id of the cross-sold product
        variantId:
          type: string
          description: The id of the specific variant of the cross-sold product
    Features.CustomisationBooleanDto:
      type: object
      description: Boolean customisation option
      required:
        - type
      allOf:
        - $ref: "#/components/schemas/Features.CustomisationDto"
      properties:
        type:
          type: string
          enum:
            - Boolean
        imageUri:
          type: string
    Features.CustomisationDto:
      type: object
      description: Base type for a product customisation option
      discriminator:
        propertyName: type
        mapping:
          Boolean: "#/components/schemas/Features.CustomisationBooleanDto"
          Text: "#/components/schemas/Features.CustomisationTextDto"
          List: "#/components/schemas/Features.CustomisationListDto"
      required:
        - key
        - displayName
        - isMandatory
        - basePrice
        - type
      properties:
        type:
          $ref: "#/components/schemas/Features.CustomisationType"
        key:
          type: string
        displayName:
          type: array
          items:
            type: string
        isMandatory:
          type: boolean
        basePrice:
          $ref: "#/components/schemas/Features.FixedPriceDto"
        dependsOnCustomisationId:
          type: string
          description: The identifier of another customisation that this customisation
            depends on
        dependsOnValues:
          type: array
          items:
            type: string
          description: The values of the dependent customisation for which this
            customisation is applicable
    Features.CustomisationFeatureDto:
      type: object
      description: Customisation feature for a product
      required:
        - type
        - customisations
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - Customisation
        customisations:
          type: array
          items:
            $ref: "#/components/schemas/Features.CustomisationDto"
          description: The list of customisations available for this product
    Features.CustomisationListDto:
      type: object
      description: List customisation option
      required:
        - type
        - options
      allOf:
        - $ref: "#/components/schemas/Features.CustomisationDto"
      properties:
        type:
          type: string
          enum:
            - List
        options:
          type: array
          items:
            $ref: "#/components/schemas/Features.CustomisationListOptionDto"
        minSelectionsRequired:
          type: integer
        maxSelectionsAllowed:
          type: integer
    Features.CustomisationListOptionDto:
      type: object
      description: Option for a list customisation
      required:
        - key
        - displayName
      properties:
        key:
          type: string
        displayName:
          type: array
          items:
            type: string
        basePrice:
          $ref: "#/components/schemas/Features.FixedPriceDto"
    Features.CustomisationTextDto:
      type: object
      description: Text customisation option
      required:
        - type
      allOf:
        - $ref: "#/components/schemas/Features.CustomisationDto"
      properties:
        type:
          type: string
          enum:
            - Text
        minLength:
          type: integer
        maxLength:
          type: integer
        validationRegex:
          type: string
    Features.CustomisationType:
      type: string
      description: Types of customisation
      enum:
        - Boolean
        - Text
        - List
    Features.EligibilityFeatureDto:
      type: object
      required:
        - type
        - rules
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - Eligibility
        rules:
          type: array
          items:
            $ref: "#/components/schemas/Features.EligibilityRuleDto"
          description: The eligibility rules for the product
    Features.EligibilityRuleDto:
      type: object
      discriminator:
        propertyName: type
        mapping:
          Age: "#/components/schemas/Features.AgeEligibilityRuleDto"
      required:
        - key
        - type
      properties:
        type:
          allOf:
            - $ref: "#/components/schemas/Features.EligibilityRuleType"
          description: The type of the eligibility rule
        key:
          type: string
    Features.EligibilityRuleType:
      type: string
      enum:
        - Age
    Features.FieldsFeatureDto:
      type: object
      required:
        - type
        - fields
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - Fields
        fields:
          type: array
          items:
            $ref: "#/components/schemas/Features.ProductFieldDto"
    Features.FixedPriceDto:
      type: object
      description: A fixed price for a product
      required:
        - currency
        - amount
        - tax
        - includesTax
        - type
      allOf:
        - $ref: "#/components/schemas/Features.PriceDto"
      properties:
        currency:
          type: string
        amount:
          type: number
          format: decimal
        tax:
          type: number
          format: decimal
        includesTax:
          type: boolean
        type:
          type: string
          enum:
            - Fixed
    Features.FixedTermBillingScheduleDto:
      type: object
      description: Fixed Term billing schedule details
      required:
        - start
        - end
        - type
      allOf:
        - $ref: "#/components/schemas/Features.BillingScheduleDto"
      properties:
        start:
          type: string
          format: date-time
          description: The start date of the fixed term
        end:
          type: string
          format: date-time
          description: The end date of the fixed term
        type:
          type: string
          enum:
            - FixedTerm
    Features.FlagDto:
      type: object
      discriminator:
        propertyName: type
        mapping:
          Boolean: "#/components/schemas/Features.BooleanFlagDto"
          String: "#/components/schemas/Features.StringFlagDto"
      required:
        - key
        - type
      properties:
        type:
          allOf:
            - $ref: "#/components/schemas/Features.FlagType"
          description: The type of the flag
        key:
          type: string
    Features.FlagType:
      type: string
      enum:
        - Boolean
        - String
    Features.FlagsFeatureDto:
      type: object
      required:
        - type
        - flags
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - Flags
        flags:
          type: array
          items:
            $ref: "#/components/schemas/Features.FlagDto"
    Features.ManualBillingScheduleDto:
      type: object
      description: Manual billing schedule details
      required:
        - type
      allOf:
        - $ref: "#/components/schemas/Features.BillingScheduleDto"
      properties:
        type:
          type: string
          enum:
            - Manual
    Features.OriginalCountryPriceTableFeatureDto:
      type: object
      description: Original country prices for a product (RRP / was-price)
      required:
        - type
        - countryPriceTable
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - OriginalCountryPriceTable
        countryPriceTable:
          $ref: "#/components/schemas/Features.CountryPriceTableDto"
    Features.Period:
      type: object
      description: Represents a time period
      required:
        - value
        - units
        - alignToPeriodEnd
      properties:
        value:
          type: integer
        units:
          $ref: "#/components/schemas/Features.PeriodUnit"
        alignToPeriodEnd:
          type: boolean
    Features.PeriodUnit:
      type: string
      description: The time units for a period
      enum:
        - Hours
        - Days
        - Weeks
        - Months
        - Years
    Features.PreOrderFeatureDto:
      type: object
      description: Pre-order feature for products available for advance purchase
      required:
        - type
        - availableFrom
        - availableUntil
        - isActive
        - message
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - PreOrder
        availableFrom:
          type: string
          format: date-time
          description: When the pre-order period starts
        availableUntil:
          type: string
          format: date-time
          description: When the pre-order period ends
        isActive:
          type: boolean
          description: Whether pre-order is currently active (computed from dates)
        message:
          type: array
          items:
            $ref: "#/components/schemas/Features.TranslationDto"
          description: Localized messages to display during pre-order period
    Features.PriceDropFeatureDto:
      type: object
      description: An active price drop on a variant. The reduced 'now' price is
        applied to totalPrice and the pricing feature; this feature carries the
        'was' price and the drop parameters.
      required:
        - type
        - dropType
        - start
        - end
        - isActive
        - previousTotalPrice
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - PriceDrop
        dropType:
          allOf:
            - $ref: "#/components/schemas/Features.PriceDropTypeDto"
          description: Which kind of drop this is, so the client can render the correct
            treatment
        percentage:
          type: number
          format: double
          description: Percentage off (percentage mode only)
        amountOff:
          type: array
          items:
            $ref: "#/components/schemas/Features.FixedPriceDto"
          description: Per-currency amounts subtracted (fixed mode only)
        absolutePrice:
          allOf:
            - $ref: "#/components/schemas/Features.PriceDto"
          description: The replacement price table (absolute mode only)
        start:
          type: string
          format: date-time
          description: Inclusive window start
        end:
          type: string
          format: date-time
          description: Exclusive window end
        isActive:
          type: boolean
          description: Whether the drop is currently active (computed from the window)
        previousTotalPrice:
          allOf:
            - $ref: "#/components/schemas/MoneyDto"
          description: The pre-drop resolved total, for the client to render the
            struck-through 'was' with no per-country lookup
        previousPrice:
          allOf:
            - $ref: "#/components/schemas/Features.PriceDto"
          description: The full pre-drop price model (Fixed / Country / Regional), so a
            country/regional-priced product keeps its per-country 'was' at the
            same fidelity as the reduced 'now' on the pricing feature
    Features.PriceDropTypeDto:
      type: string
      description: The kind of price drop
      enum:
        - Absolute
        - Percentage
        - Fixed
    Features.PriceDto:
      type: object
      discriminator:
        propertyName: type
        mapping:
          Fixed: "#/components/schemas/Features.FixedPriceDto"
          Regional: "#/components/schemas/Features.RegionalPriceTableDto"
          Country: "#/components/schemas/Features.CountryPriceTableDto"
      required:
        - type
      properties:
        type:
          allOf:
            - $ref: "#/components/schemas/Features.PriceType"
          description: The type of the price
    Features.PriceType:
      type: string
      description: Pricing types
      enum:
        - Fixed
        - Regional
        - Country
    Features.PricingFeatureDto:
      type: object
      description: Pricing details for a product
      required:
        - type
        - price
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - Pricing
        price:
          $ref: "#/components/schemas/Features.PriceDto"
    Features.ProductFeatureDto:
      type: object
      description: A feature of the product
      discriminator:
        propertyName: type
        mapping:
          CrossSell: "#/components/schemas/Features.CrossSellFeatureDto"
          Pricing: "#/components/schemas/Features.PricingFeatureDto"
          OriginalCountryPriceTable: "#/components/schemas/Features.OriginalCountryPriceTableFeatureDto"
          Subscription: "#/components/schemas/Features.SubscriptionFeatureDto"
          Fields: "#/components/schemas/Features.FieldsFeatureDto"
          Eligibility: "#/components/schemas/Features.EligibilityFeatureDto"
          Flags: "#/components/schemas/Features.FlagsFeatureDto"
          Customisation: "#/components/schemas/Features.CustomisationFeatureDto"
          PreOrder: "#/components/schemas/Features.PreOrderFeatureDto"
          ComingSoon: "#/components/schemas/Features.ComingSoonFeatureDto"
          PriceDrop: "#/components/schemas/Features.PriceDropFeatureDto"
      required:
        - key
        - type
      properties:
        type:
          allOf:
            - $ref: "#/components/schemas/Features.ProductFeatureType"
          description: The type of the product feature
        key:
          type: string
    Features.ProductFeatureType:
      type: string
      description: Product Feature
      enum:
        - Subscription
        - Fields
        - Pricing
        - Eligibility
        - Flags
        - Customisation
        - PreOrder
        - ComingSoon
        - PriceDrop
        - OriginalCountryPriceTable
        - CrossSell
    Features.ProductFieldDto:
      type: object
      discriminator:
        propertyName: type
        mapping:
          Text: "#/components/schemas/Features.TextFieldDto"
          RichText: "#/components/schemas/Features.RichTextFieldDto"
      required:
        - type
        - key
      properties:
        type:
          $ref: "#/components/schemas/Features.ProductFieldType"
        key:
          type: string
    Features.ProductFieldType:
      type: string
      enum:
        - Text
        - RichText
    Features.RecurringBillingScheduleDto:
      type: object
      description: Recurring billing schedule details
      required:
        - period
        - type
      allOf:
        - $ref: "#/components/schemas/Features.BillingScheduleDto"
      properties:
        period:
          allOf:
            - $ref: "#/components/schemas/Features.Period"
          description: The period of recurrence
        type:
          type: string
          enum:
            - Recurring
    Features.RegionalPriceDto:
      type: object
      description: Regional price for a product
      required:
        - region
        - price
      properties:
        region:
          type: string
        price:
          $ref: "#/components/schemas/Features.FixedPriceDto"
    Features.RegionalPriceTableDto:
      type: object
      description: Regional prices for a product
      required:
        - default
        - prices
        - type
      allOf:
        - $ref: "#/components/schemas/Features.PriceDto"
      properties:
        default:
          type: array
          items:
            $ref: "#/components/schemas/Features.FixedPriceDto"
        prices:
          type: array
          items:
            $ref: "#/components/schemas/Features.RegionalPriceDto"
        type:
          type: string
          enum:
            - Regional
    Features.RichTextFieldDto:
      type: object
      description: A rich text field for a product
      required:
        - type
        - richText
      allOf:
        - $ref: "#/components/schemas/Features.ProductFieldDto"
      properties:
        type:
          type: string
          enum:
            - RichText
        richText:
          type: string
          description: The default value of the field
    Features.StringFlagDto:
      type: object
      description: A string flag for a product
      required:
        - type
        - value
      allOf:
        - $ref: "#/components/schemas/Features.FlagDto"
      properties:
        type:
          type: string
          enum:
            - String
        value:
          type: string
          description: The value of the string flag
    Features.SubscriptionFeatureDto:
      type: object
      description: Subscription details for a product
      required:
        - type
        - billingschedule
        - price
        - subscriptionUpgrades
      allOf:
        - $ref: "#/components/schemas/Features.ProductFeatureDto"
      properties:
        type:
          type: string
          enum:
            - Subscription
        startDate:
          type: string
          format: date-time
        endDate:
          type: string
          format: date-time
        replaces:
          $ref: "#/components/schemas/Features.SubscriptionReplacementDto"
        billingschedule:
          $ref: "#/components/schemas/Features.BillingScheduleDto"
        price:
          $ref: "#/components/schemas/Features.PriceDto"
        trial:
          type: string
        subscriptionUpgrades:
          type: array
          items:
            $ref: "#/components/schemas/Features.SubscriptionUpgradeTargetDto"
    Features.SubscriptionReplacementDto:
      type: object
      description: Product that replaces this subscription
      required:
        - productId
      properties:
        productId:
          type: string
        variantId:
          type: string
    Features.SubscriptionUpgradeTargetDto:
      type: object
      description: A permitted subscription upgrade product
      required:
        - productId
        - subscriptionKey
      properties:
        productId:
          type: string
        variantId:
          type: string
        subscriptionKey:
          type: string
    Features.TextFieldDto:
      type: object
      description: A plain text field for a product
      required:
        - type
        - text
      allOf:
        - $ref: "#/components/schemas/Features.ProductFieldDto"
      properties:
        type:
          type: string
          enum:
            - Text
        text:
          type: string
          description: The default value of the field
    Features.TranslationDto:
      type: object
      description: A localized text translation
      required:
        - locale
        - text
      properties:
        locale:
          type: string
          description: The locale code (e.g. 'en', 'de')
        text:
          type: string
          description: The translated text
    ImageMediaItemDto:
      type: object
      description: An image media item that can be sourced from a url
      required:
        - url
        - type
      allOf:
        - $ref: "#/components/schemas/MediaItemDto"
      properties:
        url:
          type: string
          format: uri
        type:
          type: string
          enum:
            - ImageUrl
    LinkMediaItemDto:
      type: object
      description: A related media item that is a link to another resource
      required:
        - url
        - type
      allOf:
        - $ref: "#/components/schemas/MediaItemDto"
      properties:
        url:
          type: string
          format: uri
        type:
          type: string
          enum:
            - Link
    LookupItemDto:
      type: object
      description: A generic lookup item
      required:
        - id
        - title
      properties:
        id:
          type: string
          description: The id of the item
        title:
          type: string
          description: The name of the item
    LookupResult:
      type: object
      description: A look up response
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/LookupItemDto"
          description: The look up results
    LowestPriceDto:
      type: object
      description: Lowest Price Item
      required:
        - productId
        - rate
        - ticketsAvailable
      properties:
        productId:
          type: string
          description: The id of the product
        rate:
          allOf:
            - $ref: "#/components/schemas/RateCategoryPriceDto"
          description: The price
        ticketsAvailable:
          allOf:
            - $ref: "#/components/schemas/TicketAvailability"
          description: Level of availability
    LowestPriceResult:
      type: object
      description: Lowest Price Result
      required:
        - prices
      properties:
        prices:
          type: array
          items:
            $ref: "#/components/schemas/LowestPriceDto"
    MediaItemDto:
      type: object
      description: A base media item
      discriminator:
        propertyName: type
        mapping:
          ImageUrl: "#/components/schemas/ImageMediaItemDto"
          ImageBase64: "#/components/schemas/Base64ImageMediaItemDto"
          Link: "#/components/schemas/LinkMediaItemDto"
          Embedded: "#/components/schemas/EmbeddedMediaItemDto"
      required:
        - key
        - sortOrder
        - type
      properties:
        type:
          allOf:
            - $ref: "#/components/schemas/MediaItemType"
          description: The type of the media item
        key:
          type: string
        sortOrder:
          type: integer
        description:
          type: string
        title:
          type: string
        alternativeText:
          type: string
    MediaItemType:
      type: string
      enum:
        - ImageUrl
        - ImageBase64
        - Link
        - Embedded
    MetaItemDto:
      type: object
      description: Represents an additional value on a product
      required:
        - key
        - value
      properties:
        key:
          type: string
        value:
          type: string
    MoneyDto:
      type: object
      description: Money
      required:
        - minorUnits
        - currencyCode
        - precision
      properties:
        minorUnits:
          type: integer
          format: int32
          description: The amount of money, in it's ISO 4217 minor units (i.e. cents,
            pence, etc)
        currencyCode:
          type: string
          description: The currency of the money value
        precision:
          type: integer
          format: int32
          description: The precision of the money value (i.e it's minor units conversion
            factor) based on IOS 4217
    OwnTeamDto:
      type: object
      description: Wich team is the own team for the store
      required:
        - id
        - name
      properties:
        id:
          type: string
          description: The id of the team
        name:
          type: string
          description: The name of the team
    PriceRange:
      type: object
      description: The price range of a product
      required:
        - minimum
        - maximum
      properties:
        minimum:
          $ref: "#/components/schemas/MoneyDto"
        maximum:
          $ref: "#/components/schemas/MoneyDto"
    ProductDto:
      type: object
      description: Represents an individual product in the store catalogue. This
        product can be from any possible product / service provider configured
        for the store.
      required:
        - type
        - ticketingProduct
        - consumableProduct
        - variableProduct
        - eligibilities
        - tags
        - searchFacets
      allOf:
        - $ref: "#/components/schemas/BaseProductDto"
      properties:
        type:
          allOf:
            - $ref: "#/components/schemas/ProductTypeEnum"
          description: the type of the product. This determines the structure of the
            product, and what additional information is available.
        ticketingProduct:
          allOf:
            - $ref: "#/components/schemas/TicketingProductDto"
          description: Ticket product details, if type is 'Ticketing'
        consumableProduct:
          allOf:
            - $ref: "#/components/schemas/ConsumableDto"
          description: Consumable product details, if type is 'Consumable'
        variableProduct:
          allOf:
            - $ref: "#/components/schemas/VariableProductDto"
          description: Variable product details, if type is 'Variable'
        eligibilities:
          type: array
          items:
            $ref: "#/components/schemas/EligibilityDto"
          description: The eligibilities that apply to this product.
        tags:
          type: array
          items:
            type: string
          description: Product Tags
        searchFacets:
          type: object
          description: Product-level search facets for filtering and navigation. These are
            product attributes (not variant differentiators) such as ageGroup,
            kitType, teamId.
          additionalProperties:
            type: string
    ProductSearchResult:
      type: object
      description: The results of a product search
      required:
        - results
        - page
        - pageSize
        - totalResults
        - preOrderCount
        - comingSoonCount
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/ProductDto"
          description: The products that came back in the response
        page:
          type: integer
          description: The current page
        pageSize:
          type: integer
          description: The size of the page
        totalResults:
          type: integer
          description: Total number of results for the search filter
        preOrderCount:
          type: integer
          description: Count of products with active pre-order availability
        comingSoonCount:
          type: integer
          description: Count of products with active coming-soon availability
    ProductStateEnum:
      type: string
      description: Product State
      enum:
        - Inactive
        - Active
    ProductTypeEnum:
      type: string
      description: Product Type
      enum:
        - Ticketing
        - Consumable
        - Variable
        - TimeSlot
    ProductVariantDto:
      type: object
      description: A product variant
      required:
        - variantSelections
        - totalPrice
        - sku
        - ean
        - shippingUnits
        - stock
      allOf:
        - $ref: "#/components/schemas/BaseProductDto"
      properties:
        variantSelections:
          type: array
          items:
            $ref: "#/components/schemas/VariantSelectionDto"
        totalPrice:
          $ref: "#/components/schemas/MoneyDto"
        sku:
          type: string
        ean:
          type: integer
        shippingUnits:
          type: array
          items:
            $ref: "#/components/schemas/ShippingUnitDto"
        supplier:
          $ref: "#/components/schemas/SupplierDto"
        stock:
          type: integer
        winnerProductId:
          type: string
          description: The id of the winning advert/product for this variant when the
            response was produced by per-variant buy-box resolution across
            multiple sellers (e.g. the master-product endpoint). Null on the
            single-advert path. Lets the FE basket-add against the correct
            seller's advert for the chosen variant.
        winnerSeller:
          allOf:
            - $ref: "#/components/schemas/SellerDto"
          description: The marketplace seller that won this variant's buy-box cascade.
            Populated alongside `winnerProductId` by the master-product endpoint
            so the FE can render 'Sold by X' per variant without a second
            lookup. Null on the single-advert path.
    ProductVisibilityEnum:
      type: string
      description: Product Visibility
      enum:
        - IfEligible
        - Anyone
        - Explicit
    PurchaseLimitsDto:
      type: object
      description: Purchase Limits - can be per contact OR per order
      properties:
        perContact:
          type: integer
          description: Limit per contact
        perOrder:
          type: integer
          description: Limit per order
    RateCategoryPriceDto:
      type: object
      description: Rate Category Price Item
      required:
        - id
        - seatCategoryId
        - price
      properties:
        id:
          type: string
          description: The id of the rate
        seatCategoryId:
          type: string
          description: The id of the seat category
        price:
          allOf:
            - $ref: "#/components/schemas/MoneyDto"
          description: The price
    RateDto:
      type: object
      description: A rate for a ticketed event
      required:
        - id
        - seatCategory
        - tariff
        - price
        - available
      properties:
        id:
          type: string
          description: The id of the rate
        seatCategory:
          allOf:
            - $ref: "#/components/schemas/SeatCategoryDto"
          description: The seat category which the rate applies to
        tariff:
          allOf:
            - $ref: "#/components/schemas/TariffDto"
          description: The tariff that the rate applies to
        price:
          allOf:
            - $ref: "#/components/schemas/MoneyDto"
          description: The price of the rate
        available:
          type: integer
    SeatCategoryDto:
      type: object
      description: Seat Category
      required:
        - id
        - name
        - rank
      properties:
        id:
          type: string
          description: The id of the seat category
        name:
          type: string
          description: The name of the seat category, i.e Block A, Block B, etc
        rank:
          type: integer
          description: The sort order of the seat category
    SellerDto:
      type: object
      description: Marketplace seller
      required:
        - id
        - name
      properties:
        id:
          type: string
          description: Seller identifier
        name:
          type: string
          description: Seller display name
        logoUrl:
          type: string
          description: URL to seller logo
        metadata:
          type: object
          description: Seller metadata key-value pairs
          additionalProperties:
            type: string
    ShippingUnitDto:
      type: object
      description: A shipping unit
      required:
        - lengthCm
        - widthCm
        - heightCm
        - weightGrams
      properties:
        lengthCm:
          type: integer
        widthCm:
          type: integer
        heightCm:
          type: integer
        weightGrams:
          type: integer
    SportsCompetitionDto:
      type: object
      description: Represents a sports competition
      required:
        - name
        - season
        - competitionType
      properties:
        name:
          type: string
          description: The name of the competition (Premier League 2021, Champions League
            2021, etc)
        season:
          $ref: "#/components/schemas/SportsSeasonDto"
        competitionType:
          $ref: "#/components/schemas/CompetitionTypeDto"
    SportsMatchDto:
      type: object
      description: Sports Match
      required:
        - competition
        - hostTeam
        - opponentTeam
      properties:
        competition:
          allOf:
            - $ref: "#/components/schemas/SportsCompetitionDto"
          description: Which competition the match is part of
        hostTeam:
          allOf:
            - $ref: "#/components/schemas/SportsTeamDto"
          description: The home team
        opponentTeam:
          allOf:
            - $ref: "#/components/schemas/SportsTeamDto"
          description: The away team
    SportsSeasonDto:
      type: object
      description: Sports Season
      required:
        - name
      properties:
        name:
          type: string
        start:
          type: string
        end:
          type: string
    SportsTeamDto:
      type: object
      description: Represents a sports team (Football, Rugby, Cricket, etc)
      required:
        - id
        - name
      properties:
        id:
          type: string
          description: The id of the team
        name:
          type: string
          description: The name of the team
        logoImageUrl:
          type: string
          description: The team crest
    SupplierDto:
      type: object
      description: A supplier
      required:
        - key
        - name
      properties:
        key:
          type: string
        name:
          type: string
    TariffDto:
      type: object
      description: Tariff
      required:
        - id
        - name
        - rank
      properties:
        id:
          type: string
          description: The id of the tariff
        name:
          type: string
          description: The name of the tarrif, i.e Adult, Junior, Senior, etc
        rank:
          type: integer
          description: The sort order of the tariff
    TicketAvailability:
      type: string
      description: Ticket availability type
      enum:
        - SoldOut
        - LimitedAvailability
        - Available
    TicketingProductDto:
      type: object
      description: Represents the additional information that comes on a ticketing product
      required:
        - type
        - eventType
        - isHospitality
        - name
        - start
        - end
        - sportsMatch
        - rates
        - venue
      properties:
        type:
          allOf:
            - $ref: "#/components/schemas/TicketingTypeEnum"
          description: The type of ticketing product this product represents
        eventType:
          allOf:
            - $ref: "#/components/schemas/EventTypeEnum"
          description: If a TicketEvent type, then this indicates what sort of ticketed
            event.
        isHospitality:
          type: boolean
          description: Whether the ticketing product is a hospitality product or not.
        name:
          type: string
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        sportsMatch:
          allOf:
            - $ref: "#/components/schemas/SportsMatchDto"
          description: The ticketed event represents a sports match. The line item will
            have specific details that are relevant to sports matches.
        rates:
          type: array
          items:
            $ref: "#/components/schemas/RateDto"
          description: The rates that apply to a ticketed event.
        venue:
          allOf:
            - $ref: "#/components/schemas/VenueDto"
          description: The venue that the ticketed event is at.
    TicketingTypeEnum:
      type: string
      description: Ticketing Type
      enum:
        - TicketedEvent
        - SeasonTicket
    VariableProductDto:
      type: object
      description: Represent a variable product and its variants
      required:
        - priceRange
        - variantOptions
        - keywords
        - variants
      properties:
        priceRange:
          $ref: "#/components/schemas/PriceRange"
        variantOptions:
          type: array
          items:
            $ref: "#/components/schemas/VariantOptionDto"
        keywords:
          type: array
          items:
            type: string
        variants:
          type: array
          items:
            $ref: "#/components/schemas/ProductVariantDto"
    VariantOptionDto:
      type: object
      description: A variant option
      required:
        - key
        - text
        - options
      properties:
        key:
          type: string
        text:
          type: string
        options:
          type: array
          items:
            $ref: "#/components/schemas/VariantOptionValueDto"
    VariantOptionValueDto:
      type: object
      description: A variant option value
      required:
        - key
        - value
      properties:
        key:
          type: string
        value:
          type: string
    VariantSelectionDto:
      type: object
      description: A variant selection
      required:
        - key
        - name
        - value
      properties:
        key:
          type: string
        name:
          type: string
        value:
          type: string
    VenueAddressDto:
      type: object
      description: Venue Address
      required:
        - addressLine1
        - addressLine2
        - postCode
        - city
        - countryIso
      properties:
        addressLine1:
          type: string
        addressLine2:
          type: string
        postCode:
          type: string
        city:
          type: string
        countryIso:
          type: string
    VenueCoordinatesDto:
      type: object
      description: Venue Coordinates
      required:
        - longitude
        - latitude
      properties:
        longitude:
          type: string
        latitude:
          type: string
    VenueDto:
      type: object
      description: Venue
      required:
        - name
        - address
        - coordinates
      properties:
        name:
          type: string
        address:
          $ref: "#/components/schemas/VenueAddressDto"
        coordinates:
          $ref: "#/components/schemas/VenueCoordinatesDto"
servers:
  - url: "{baseUrl}"
    description: Your Storefront API host
    variables:
      baseUrl:
        default: https://your-storefront-api-host
        description: The Storefront API base URL for your store. Your Stadion technical
          contact provides it.
