> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pricenow.ch/llms.txt
> Use this file to discover all available pages before exploring further.

# Retrieve Unified Items View

> Fetch the unified items view for a specified product based on the provided booking state. This view allows confguring each item individually.



## OpenAPI

````yaml https://pratiq-docs.s3.eu-west-1.amazonaws.com/open-api/production/public/2025-02-18.json post /api/booking/products/{productId}/journey/unified-view/items
openapi: 3.0.0
info:
  title: Pricenow API
  version: '2025-02-18'
servers:
  - url: https://api.pricenow.dev
    description: Production Endpoint
security: []
tags: []
paths:
  /api/booking/products/{productId}/journey/unified-view/items:
    post:
      tags:
        - booking
      summary: Retrieve Unified Items View
      description: >-
        Fetch the unified items view for a specified product based on the
        provided booking state. This view allows confguring each item
        individually.
      operationId: getUnifiedItemsView
      parameters:
        - name: accept-language
          in: header
          description: Language of the response
          required: true
          schema:
            type: string
            enum:
              - en
              - de
              - fr
              - it
        - name: pratiq-channel-uuid
          in: header
          description: UUID of the sales channel
          required: true
          schema:
            type: string
        - name: productId
          in: path
          required: true
          schema:
            type: number
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: number
                      productVariantId:
                        type: number
                      personId:
                        type: number
                        nullable: true
                      validity:
                        type: object
                        properties:
                          from:
                            type: string
                          to:
                            type: string
                        required:
                          - from
                          - to
                        nullable: true
                      parentItemId:
                        type: number
                        nullable: true
                      originatedItemId:
                        type: number
                        nullable: true
                      discountCardTypeId:
                        type: number
                        nullable: true
                    required:
                      - id
                      - productVariantId
                      - personId
                      - validity
                      - parentItemId
                      - originatedItemId
                      - discountCardTypeId
              required:
                - items
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/BookingUnifiedViewItems'
                required:
                  - data
components:
  schemas:
    BookingUnifiedViewItems:
      type: object
      properties:
        title:
          type: string
        description:
          type: array
          items:
            $ref: '#/components/schemas/RichText'
        media:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/ExternalImage'
              - $ref: '#/components/schemas/ExternalVideo'
        currency:
          type: string
        banner:
          type: object
          properties:
            text:
              type: string
              nullable: true
            enabled:
              type: boolean
            backgroundColor:
              type: string
              nullable: true
            icon:
              type: object
              properties:
                _type:
                  type: string
                  enum:
                    - iconPicker
                name:
                  type: string
                provider:
                  type: string
                  enum:
                    - mdi
              required:
                - _type
                - name
                - provider
              nullable: true
            cta:
              type: object
              properties:
                title:
                  type: string
                  nullable: true
                color:
                  type: string
                  enum:
                    - default
                    - primary
                    - secondary
                variant:
                  type: string
                  enum:
                    - link
                    - solid
                    - outline
                    - ghost
                newTab:
                  type: boolean
                product:
                  type: object
                  properties:
                    slug:
                      type: object
                      properties:
                        current:
                          type: string
                      required:
                        - current
                  required:
                    - slug
                  nullable: true
                link:
                  type: string
                  nullable: true
                page:
                  type: object
                  properties:
                    slug:
                      type: object
                      properties:
                        current:
                          type: string
                      required:
                        - current
                  required:
                    - slug
                  nullable: true
              required:
                - title
                - color
                - variant
                - newTab
              nullable: true
          required:
            - text
            - enabled
          nullable: true
        items:
          type: array
          items:
            $ref: '#/components/schemas/BookingStateConfigurationItem'
        itemsSerialized:
          type: array
          items:
            type: object
            properties:
              id:
                type: number
              productVariantId:
                type: number
              personId:
                type: number
                nullable: true
              validity:
                type: object
                properties:
                  from:
                    type: string
                  to:
                    type: string
                required:
                  - from
                  - to
                nullable: true
              parentItemId:
                type: number
                nullable: true
              originatedItemId:
                type: number
                nullable: true
              discountCardTypeId:
                type: number
                nullable: true
            required:
              - id
              - productVariantId
              - personId
              - validity
              - parentItemId
              - originatedItemId
              - discountCardTypeId
        crossSellingOptions:
          type: array
          items:
            $ref: '#/components/schemas/CrossSellingOption'
        totals:
          type: object
          properties:
            listPrice:
              type: number
            discountedPrice:
              type: number
          required:
            - listPrice
            - discountedPrice
      required:
        - title
        - description
        - media
        - currency
        - banner
        - items
        - itemsSerialized
        - crossSellingOptions
        - totals
    RichText:
      type: object
      properties:
        children:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/ArbitraryTypedObject'
              - $ref: '#/components/schemas/PortableTextSpan'
        markDefs:
          type: array
          items:
            $ref: '#/components/schemas/PortableTextMarkDefinition'
        style:
          type: string
        listItem:
          type: string
        level:
          type: number
      required:
        - children
    ExternalImage:
      type: object
      properties:
        kind:
          type: string
          enum:
            - image
        url:
          type: string
        alt:
          type: string
      required:
        - kind
        - url
        - alt
    ExternalVideo:
      type: object
      properties:
        kind:
          type: string
          enum:
            - video
        url:
          type: string
        alt:
          type: string
        fallback:
          $ref: '#/components/schemas/ExternalImage'
          nullable: true
      required:
        - kind
        - url
        - alt
        - fallback
    BookingStateConfigurationItem:
      type: object
      properties:
        id:
          type: number
        productId:
          type: number
        title:
          type: string
        subtitle:
          type: string
        description:
          type: array
          items:
            $ref: '#/components/schemas/RichText'
        shortDescription:
          type: string
        images:
          type: array
          items:
            $ref: '#/components/schemas/ExternalImage'
        price:
          $ref: '#/components/schemas/FinalPrice'
        formElements:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/BookingStateItemFormElementDropdown'
              - $ref: '#/components/schemas/BookingStateItemFormElementRadio'
              - $ref: '#/components/schemas/BookingStateItemFormElementSlotPicker'
              - $ref: '#/components/schemas/BookingStateItemFormElementPersonPicker'
        person:
          $ref: '#/components/schemas/APIRestInterface_Person'
        validity:
          type: object
          properties:
            from:
              type: string
            to:
              type: string
          required:
            - from
            - to
        discounts:
          type: array
          items:
            $ref: '#/components/schemas/ItemDiscount'
        productVariantId:
          type: number
        discountCardTypeId:
          type: number
        merchant:
          $ref: '#/components/schemas/Catalog_Merchant'
        requiredProducts:
          type: array
          items:
            $ref: '#/components/schemas/BookingStateRequiredItem'
        optionalProducts:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/BookingStateOptionalCheckboxItem'
              - $ref: '#/components/schemas/BookingStateOptionalRadioItem'
      required:
        - id
        - productId
        - title
        - subtitle
        - description
        - shortDescription
        - images
        - price
        - formElements
        - person
        - validity
        - discounts
        - productVariantId
        - discountCardTypeId
        - merchant
        - requiredProducts
        - optionalProducts
    CrossSellingOption:
      type: object
      properties:
        title:
          type: string
        shortDescription:
          type: string
          nullable: true
        description:
          type: array
          items:
            $ref: '#/components/schemas/RichText'
        media:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/ExternalImage'
              - $ref: '#/components/schemas/ExternalVideo'
        currency:
          type: string
        price:
          $ref: '#/components/schemas/PriceRange'
          nullable: true
        isAvailable:
          type: boolean
        productId:
          type: number
        productSlug:
          type: string
        initialFormState:
          type: object
          properties:
            validity:
              type: object
              properties:
                from:
                  type: string
                to:
                  type: string
              required:
                - from
                - to
            allocation:
              oneOf:
                - type: object
                  properties: {}
                - type: object
                  properties:
                    kind:
                      type: string
                      enum:
                        - quantity
                    value:
                      type: number
                  required:
                    - kind
                    - value
                - type: object
                  properties:
                    kind:
                      type: string
                      enum:
                        - persontype
                    values:
                      type: array
                      items:
                        oneOf:
                          - type: object
                            properties:
                              kind:
                                type: string
                                enum:
                                  - anonymous
                              quantity:
                                type: number
                              personType:
                                type: string
                            required:
                              - kind
                              - quantity
                              - personType
                          - type: object
                            properties:
                              kind:
                                type: string
                                enum:
                                  - personalized
                              personIds:
                                type: array
                                items:
                                  type: number
                              personType:
                                type: string
                            required:
                              - kind
                              - personIds
                              - personType
                          - type: object
                            properties:
                              kind:
                                type: string
                                enum:
                                  - discounted
                              quantity:
                                type: number
                              personType:
                                type: string
                              discountCardTypeId:
                                type: number
                            required:
                              - kind
                              - quantity
                              - personType
                              - discountCardTypeId
                  required:
                    - kind
                    - values
            attributes:
              type: object
              additionalProperties:
                type: string
      required:
        - title
        - shortDescription
        - description
        - media
        - currency
        - price
        - isAvailable
        - productId
        - productSlug
        - initialFormState
    ArbitraryTypedObject:
      type: object
      properties:
        _type:
          type: string
        _key:
          type: string
      required:
        - _type
    PortableTextSpan:
      type: object
      properties:
        _type:
          type: string
          enum:
            - span
        _key:
          type: string
        text:
          type: string
        marks:
          type: array
          items:
            type: string
      required:
        - _type
        - text
    PortableTextMarkDefinition:
      type: object
      properties:
        _type:
          type: string
        _key:
          type: string
      required:
        - _type
        - _key
    FinalPrice:
      type: object
      properties:
        listPrice:
          type: number
        discountedPrice:
          type: number
      required:
        - listPrice
        - discountedPrice
    BookingStateItemFormElementDropdown:
      type: object
      properties:
        id:
          type: string
        explanation:
          type: string
        kind:
          type: string
          enum:
            - dropdown
        label:
          type: string
        options:
          type: array
          items:
            type: object
            properties:
              label:
                type: string
              value:
                type: string
              disabled:
                type: boolean
            required:
              - label
              - value
              - disabled
        intent:
          type: string
          enum:
            - attribute
        value:
          type: string
        attributeKey:
          type: string
      required:
        - id
        - explanation
        - kind
        - label
        - options
        - intent
        - value
        - attributeKey
    BookingStateItemFormElementRadio:
      type: object
      properties:
        id:
          type: string
        explanation:
          type: string
        kind:
          type: string
          enum:
            - radio
        label:
          type: string
        options:
          type: array
          items:
            type: object
            properties:
              label:
                type: string
              value:
                type: string
              disabled:
                type: boolean
            required:
              - label
              - value
              - disabled
        intent:
          type: string
          enum:
            - attribute
        value:
          type: string
        attributeKey:
          type: string
      required:
        - id
        - explanation
        - kind
        - label
        - options
        - intent
        - value
        - attributeKey
    BookingStateItemFormElementSlotPicker:
      type: object
      properties:
        id:
          type: string
        explanation:
          type: string
        kind:
          type: string
          enum:
            - slotpicker
        label:
          type: string
        hasPaginatedOptions:
          type: boolean
        value:
          type: object
          properties:
            from:
              type: string
            to:
              type: string
          required:
            - from
            - to
      required:
        - id
        - explanation
        - kind
        - label
        - hasPaginatedOptions
        - value
    BookingStateItemFormElementPersonPicker:
      type: object
      properties:
        id:
          type: string
        explanation:
          type: string
        kind:
          type: string
          enum:
            - personpicker
        supportsPersonalization:
          type: boolean
        options:
          type: array
          items:
            type: object
            properties:
              label:
                type: string
              value:
                type: string
              personalizedOptions:
                type: array
                items:
                  type: object
                  properties:
                    label:
                      type: string
                    value:
                      type: number
                  required:
                    - label
                    - value
              supportedDiscountCardTypes:
                type: array
                items:
                  $ref: '#/components/schemas/SupportedDiscountCardType'
              restrictions:
                type: object
                properties:
                  quantity:
                    type: object
                    properties:
                      min:
                        type: number
                      max:
                        type: number
                  age:
                    oneOf:
                      - type: object
                        properties: {}
                      - $ref: '#/components/schemas/PersonPickerRestrictionAge'
                      - $ref: '#/components/schemas/PersonPickerRestrictionBirthyear'
            required:
              - label
              - value
              - supportedDiscountCardTypes
        value:
          type: array
          items:
            oneOf:
              - type: object
                properties:
                  kind:
                    type: string
                    enum:
                      - anonymous
                  quantity:
                    type: number
                  personType:
                    type: string
                required:
                  - kind
                  - quantity
                  - personType
              - type: object
                properties:
                  kind:
                    type: string
                    enum:
                      - personalized
                  personIds:
                    type: array
                    items:
                      type: number
                  personType:
                    type: string
                required:
                  - kind
                  - personIds
                  - personType
              - type: object
                properties:
                  kind:
                    type: string
                    enum:
                      - discounted
                  quantity:
                    type: number
                  personType:
                    type: string
                  discountCardTypeId:
                    type: number
                required:
                  - kind
                  - quantity
                  - personType
                  - discountCardTypeId
      required:
        - id
        - explanation
        - kind
        - supportsPersonalization
        - options
        - value
    APIRestInterface_Person:
      type: object
      properties:
        id:
          type: number
        fields:
          type: object
          additionalProperties:
            oneOf:
              - nullable: true
              - type: string
              - type: number
        createdAt:
          type: string
        lastUpdateAt:
          type: string
        isOwner:
          type: boolean
      required:
        - id
        - createdAt
        - lastUpdateAt
        - isOwner
    ItemDiscount:
      type: object
      properties:
        discount:
          type: number
        label:
          type: string
      required:
        - discount
        - label
    Catalog_Merchant:
      type: object
      properties:
        identifier:
          type: string
        timezone:
          type: string
      required:
        - identifier
        - timezone
    BookingStateRequiredItem:
      type: object
      properties:
        id:
          type: number
        productId:
          type: number
        title:
          type: string
        subtitle:
          type: string
        description:
          type: array
          items:
            $ref: '#/components/schemas/RichText'
        shortDescription:
          type: string
        images:
          type: array
          items:
            $ref: '#/components/schemas/ExternalImage'
        price:
          $ref: '#/components/schemas/FinalPrice'
        formElements:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/BookingStateItemFormElementDropdown'
              - $ref: '#/components/schemas/BookingStateItemFormElementRadio'
              - $ref: '#/components/schemas/BookingStateItemFormElementSlotPicker'
              - $ref: '#/components/schemas/BookingStateItemFormElementPersonPicker'
        person:
          $ref: '#/components/schemas/APIRestInterface_Person'
        validity:
          type: object
          properties:
            from:
              type: string
            to:
              type: string
          required:
            - from
            - to
        discounts:
          type: array
          items:
            $ref: '#/components/schemas/ItemDiscount'
        productVariantId:
          type: number
        discountCardTypeId:
          type: number
        merchant:
          $ref: '#/components/schemas/Catalog_Merchant'
        displayPrice:
          type: boolean
      required:
        - id
        - productId
        - title
        - subtitle
        - description
        - shortDescription
        - images
        - price
        - formElements
        - person
        - validity
        - discounts
        - productVariantId
        - discountCardTypeId
        - merchant
        - displayPrice
    BookingStateOptionalCheckboxItem:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
          enum:
            - checkbox
        value:
          type: boolean
        isAvailable:
          type: boolean
        unavailabilityReason:
          oneOf:
            - nullable: true
            - type: string
              enum:
                - OUT_OF_CAPACITY
            - type: string
              enum:
                - NO_VALIDITY
            - type: string
              enum:
                - NO_MATCHING_VALIDITY_FOUND
            - type: string
              enum:
                - MULTIPLE_SLOTS_FOUND_FOR_VALIDITY
            - type: string
              enum:
                - MISSED_AVAILABILITY_CHECK
          nullable: true
        product:
          $ref: '#/components/schemas/BookingStateBaseItem'
        displayPrice:
          type: boolean
        displayImage:
          type: boolean
      required:
        - id
        - type
        - value
        - isAvailable
        - unavailabilityReason
        - product
        - displayPrice
        - displayImage
    BookingStateOptionalRadioItem:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
          enum:
            - radio
        title:
          type: string
        value:
          type: number
          nullable: true
        isAvailable:
          type: boolean
        unavailabilityReason:
          oneOf:
            - nullable: true
            - type: string
              enum:
                - OUT_OF_CAPACITY
            - type: string
              enum:
                - NO_VALIDITY
            - type: string
              enum:
                - NO_MATCHING_VALIDITY_FOUND
            - type: string
              enum:
                - MULTIPLE_SLOTS_FOUND_FOR_VALIDITY
            - type: string
              enum:
                - MISSED_AVAILABILITY_CHECK
          nullable: true
        labelNoSelection:
          type: string
        products:
          type: array
          items:
            $ref: '#/components/schemas/BookingStateBaseItem'
        displayPrice:
          type: boolean
      required:
        - id
        - type
        - title
        - value
        - isAvailable
        - unavailabilityReason
        - labelNoSelection
        - products
        - displayPrice
    PriceRange:
      type: object
      properties:
        minPrice:
          type: number
        maxPrice:
          type: number
      required:
        - minPrice
        - maxPrice
    SupportedDiscountCardType:
      type: object
      properties:
        id:
          type: number
        label:
          type: string
        discountInformation:
          type: object
          properties:
            type:
              type: string
              enum:
                - ABSOLUTE
                - RELATIVE
                - FIXED_PRICE
            amount:
              type: number
          required:
            - type
            - amount
      required:
        - id
        - label
        - discountInformation
    PersonPickerRestrictionAge:
      type: object
      properties:
        kind:
          type: string
          enum:
            - age
        minAge:
          type: number
        maxAge:
          type: number
      required:
        - kind
    PersonPickerRestrictionBirthyear:
      type: object
      properties:
        kind:
          type: string
          enum:
            - birthyear
        minYear:
          type: number
        maxYear:
          type: number
      required:
        - kind
    BookingStateBaseItem:
      type: object
      properties:
        id:
          type: number
        productId:
          type: number
        title:
          type: string
        subtitle:
          type: string
          nullable: true
        description:
          type: array
          items:
            $ref: '#/components/schemas/RichText'
          nullable: true
        shortDescription:
          type: string
          nullable: true
        images:
          type: array
          items:
            $ref: '#/components/schemas/ExternalImage'
        price:
          $ref: '#/components/schemas/FinalPrice'
          nullable: true
        formElements:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/BookingStateItemFormElementDropdown'
              - $ref: '#/components/schemas/BookingStateItemFormElementRadio'
              - $ref: '#/components/schemas/BookingStateItemFormElementSlotPicker'
              - $ref: '#/components/schemas/BookingStateItemFormElementPersonPicker'
        person:
          $ref: '#/components/schemas/APIRestInterface_Person'
          nullable: true
        validity:
          type: object
          properties:
            from:
              type: string
            to:
              type: string
          required:
            - from
            - to
          nullable: true
        discounts:
          type: array
          items:
            $ref: '#/components/schemas/ItemDiscount'
        productVariantId:
          type: number
        discountCardTypeId:
          type: number
          nullable: true
        merchant:
          $ref: '#/components/schemas/Catalog_Merchant'
      required:
        - id
        - productId
        - title
        - subtitle
        - description
        - shortDescription
        - images
        - price
        - formElements
        - person
        - validity
        - discounts
        - productVariantId
        - discountCardTypeId
        - merchant

````