> ## 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 Form View

> Fetch the unified form view for a specific product based on the provided form state. The form state must be stored client side and provided with every request. Further, if the returned form state in the request response differs from the sent form state, the client must update its persisted form state accordingly.



## OpenAPI

````yaml https://pratiq-docs.s3.eu-west-1.amazonaws.com/open-api/production/public/2025-02-18.json get /api/booking/products/{productId}/journey/unified-view/form
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/form:
    get:
      tags:
        - booking
      summary: Retrieve Unified Form View
      description: >-
        Fetch the unified form view for a specific product based on the provided
        form state. The form state must be stored client side and provided with
        every request. Further, if the returned form state in the request
        response differs from the sent form state, the client must update its
        persisted form state accordingly.
      operationId: getUnifiedFormView
      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
        - name: formState
          in: query
          required: true
          schema:
            type: object
            properties:
              attributes:
                type: object
                additionalProperties:
                  type: string
              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
            required:
              - attributes
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/BookingUnifiedViewForm'
                required:
                  - data
components:
  schemas:
    BookingUnifiedViewForm:
      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
        formBase:
          $ref: '#/components/schemas/FormBase'
        formElements:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/FormElementDatePicker'
              - $ref: '#/components/schemas/FormElementSlotPicker'
              - $ref: '#/components/schemas/FormElementDropdown'
              - $ref: '#/components/schemas/FormElementRadio'
              - $ref: '#/components/schemas/FormElementPersonPicker'
              - $ref: '#/components/schemas/FormElementQuantity'
        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
        isValid:
          type: boolean
        formErrors:
          type: object
          additionalProperties:
            type: string
            enum:
              - SELECTION_REQUIRED
              - SELECTION_NOT_SUPPORTED
              - VALIDITY_DOES_NOT_MATCH_ATTRIBUTE_SELECTION
              - OUT_OF_CAPACITY
              - ALLOCATION_SUBCEED_MIN_QUANTITY
              - ALLOCATION_EXCEED_MAX_QUANTITY
              - ALLOCATION_ZERO_QUANTITY
              - NO_AVAILABLE_VALIDITY
        debugHints:
          type: array
          items:
            type: string
        formState:
          $ref: '#/components/schemas/FormStateWithDateValidity'
        totals:
          type: object
          properties:
            listPrice:
              type: number
            discountedPrice:
              type: number
          required:
            - listPrice
            - discountedPrice
      required:
        - title
        - description
        - media
        - currency
        - banner
        - formElements
        - items
        - isValid
        - formErrors
        - debugHints
        - formState
        - 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
    FormBase:
      type: object
      properties:
        proceedButton:
          type: object
          properties:
            color:
              oneOf:
                - nullable: true
                - type: string
                  enum:
                    - default
                - type: string
                  enum:
                    - primary
                - type: string
                  enum:
                    - secondary
              nullable: true
            variant:
              oneOf:
                - nullable: true
                - type: string
                  enum:
                    - link
                - type: string
                  enum:
                    - solid
                - type: string
                  enum:
                    - outline
                - type: string
                  enum:
                    - ghost
              nullable: true
            label:
              type: string
              nullable: true
          required:
            - color
            - variant
            - label
          nullable: true
      required:
        - proceedButton
    FormElementDatePicker:
      type: object
      properties:
        id:
          type: string
        hasPaginatedOptions:
          type: boolean
        explanation:
          type: string
        isValid:
          type: boolean
        error:
          oneOf:
            - nullable: true
            - type: string
              enum:
                - SELECTION_REQUIRED
            - type: string
              enum:
                - SELECTION_NOT_SUPPORTED
            - type: string
              enum:
                - VALIDITY_DOES_NOT_MATCH_ATTRIBUTE_SELECTION
            - type: string
              enum:
                - OUT_OF_CAPACITY
            - type: string
              enum:
                - ALLOCATION_SUBCEED_MIN_QUANTITY
            - type: string
              enum:
                - ALLOCATION_EXCEED_MAX_QUANTITY
            - type: string
              enum:
                - ALLOCATION_ZERO_QUANTITY
            - type: string
              enum:
                - NO_AVAILABLE_VALIDITY
        kind:
          type: string
          enum:
            - datepicker
        paginationType:
          type: string
          enum:
            - date
            - page
        value:
          type: object
          properties:
            from:
              type: string
            to:
              type: string
          required:
            - from
            - to
      required:
        - id
        - hasPaginatedOptions
        - explanation
        - isValid
        - error
        - kind
        - paginationType
        - value
    FormElementSlotPicker:
      type: object
      properties:
        id:
          type: string
        hasPaginatedOptions:
          type: boolean
        explanation:
          type: string
        isValid:
          type: boolean
        error:
          oneOf:
            - nullable: true
            - type: string
              enum:
                - SELECTION_REQUIRED
            - type: string
              enum:
                - SELECTION_NOT_SUPPORTED
            - type: string
              enum:
                - VALIDITY_DOES_NOT_MATCH_ATTRIBUTE_SELECTION
            - type: string
              enum:
                - OUT_OF_CAPACITY
            - type: string
              enum:
                - ALLOCATION_SUBCEED_MIN_QUANTITY
            - type: string
              enum:
                - ALLOCATION_EXCEED_MAX_QUANTITY
            - type: string
              enum:
                - ALLOCATION_ZERO_QUANTITY
            - type: string
              enum:
                - NO_AVAILABLE_VALIDITY
        kind:
          type: string
          enum:
            - slotpicker
        value:
          type: object
          properties:
            from:
              type: string
            to:
              type: string
          required:
            - from
            - to
        label:
          type: string
      required:
        - id
        - hasPaginatedOptions
        - explanation
        - isValid
        - error
        - kind
        - value
        - label
    FormElementDropdown:
      type: object
      properties:
        id:
          type: string
        hasPaginatedOptions:
          type: boolean
        explanation:
          type: string
        isValid:
          type: boolean
        error:
          oneOf:
            - nullable: true
            - type: string
              enum:
                - SELECTION_REQUIRED
            - type: string
              enum:
                - SELECTION_NOT_SUPPORTED
            - type: string
              enum:
                - VALIDITY_DOES_NOT_MATCH_ATTRIBUTE_SELECTION
            - type: string
              enum:
                - OUT_OF_CAPACITY
            - type: string
              enum:
                - ALLOCATION_SUBCEED_MIN_QUANTITY
            - type: string
              enum:
                - ALLOCATION_EXCEED_MAX_QUANTITY
            - type: string
              enum:
                - ALLOCATION_ZERO_QUANTITY
            - type: string
              enum:
                - NO_AVAILABLE_VALIDITY
        kind:
          type: string
          enum:
            - dropdown
        options:
          type: array
          items:
            type: object
            properties:
              label:
                type: string
              value:
                type: string
              disabled:
                type: boolean
            required:
              - label
              - value
              - disabled
        value:
          type: string
        label:
          type: string
        intent:
          type: string
          enum:
            - attribute
        attributeKey:
          type: string
      required:
        - id
        - hasPaginatedOptions
        - explanation
        - isValid
        - error
        - kind
        - options
        - value
        - label
        - intent
        - attributeKey
    FormElementRadio:
      type: object
      properties:
        id:
          type: string
        hasPaginatedOptions:
          type: boolean
        explanation:
          type: string
        isValid:
          type: boolean
        error:
          oneOf:
            - nullable: true
            - type: string
              enum:
                - SELECTION_REQUIRED
            - type: string
              enum:
                - SELECTION_NOT_SUPPORTED
            - type: string
              enum:
                - VALIDITY_DOES_NOT_MATCH_ATTRIBUTE_SELECTION
            - type: string
              enum:
                - OUT_OF_CAPACITY
            - type: string
              enum:
                - ALLOCATION_SUBCEED_MIN_QUANTITY
            - type: string
              enum:
                - ALLOCATION_EXCEED_MAX_QUANTITY
            - type: string
              enum:
                - ALLOCATION_ZERO_QUANTITY
            - type: string
              enum:
                - NO_AVAILABLE_VALIDITY
        kind:
          type: string
          enum:
            - radio
        options:
          type: array
          items:
            type: object
            properties:
              label:
                type: string
              value:
                type: string
              disabled:
                type: boolean
            required:
              - label
              - value
              - disabled
        value:
          type: string
        label:
          type: string
        intent:
          type: string
          enum:
            - attribute
        attributeKey:
          type: string
      required:
        - id
        - hasPaginatedOptions
        - explanation
        - isValid
        - error
        - kind
        - options
        - value
        - label
        - intent
        - attributeKey
    FormElementPersonPicker:
      type: object
      properties:
        id:
          type: string
        hasPaginatedOptions:
          type: boolean
        explanation:
          type: string
        isValid:
          type: boolean
        error:
          oneOf:
            - nullable: true
            - type: string
              enum:
                - SELECTION_REQUIRED
            - type: string
              enum:
                - SELECTION_NOT_SUPPORTED
            - type: string
              enum:
                - VALIDITY_DOES_NOT_MATCH_ATTRIBUTE_SELECTION
            - type: string
              enum:
                - OUT_OF_CAPACITY
            - type: string
              enum:
                - ALLOCATION_SUBCEED_MIN_QUANTITY
            - type: string
              enum:
                - ALLOCATION_EXCEED_MAX_QUANTITY
            - type: string
              enum:
                - ALLOCATION_ZERO_QUANTITY
            - type: string
              enum:
                - NO_AVAILABLE_VALIDITY
        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
        - hasPaginatedOptions
        - explanation
        - isValid
        - error
        - kind
        - supportsPersonalization
        - options
        - value
    FormElementQuantity:
      type: object
      properties:
        id:
          type: string
        hasPaginatedOptions:
          type: boolean
        explanation:
          type: string
        isValid:
          type: boolean
        error:
          oneOf:
            - nullable: true
            - type: string
              enum:
                - SELECTION_REQUIRED
            - type: string
              enum:
                - SELECTION_NOT_SUPPORTED
            - type: string
              enum:
                - VALIDITY_DOES_NOT_MATCH_ATTRIBUTE_SELECTION
            - type: string
              enum:
                - OUT_OF_CAPACITY
            - type: string
              enum:
                - ALLOCATION_SUBCEED_MIN_QUANTITY
            - type: string
              enum:
                - ALLOCATION_EXCEED_MAX_QUANTITY
            - type: string
              enum:
                - ALLOCATION_ZERO_QUANTITY
            - type: string
              enum:
                - NO_AVAILABLE_VALIDITY
        kind:
          type: string
          enum:
            - quantity
        value:
          type: number
        min:
          type: number
        max:
          type: number
        labels:
          type: object
          properties:
            singular:
              type: string
            plural:
              type: string
          required:
            - singular
            - plural
      required:
        - id
        - hasPaginatedOptions
        - explanation
        - isValid
        - error
        - kind
        - value
    FormStateWithDateValidity:
      type: object
      properties:
        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
        validity:
          type: object
          properties:
            from:
              type: string
              format: date-time
            to:
              type: string
              format: date-time
          required:
            - from
            - to
      required:
        - attributes
    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
    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

````