openapi: 3.1.0
info:
  title: BeMyGuest API v2.0
  description: >
    The BeMyGuest API is the industry benchmark preferred by online travel
    agents, designed solely for Asia's attractions, tours and activities. This
    comprehensive API provides real-time access to a vast inventory of travel
    products.


    ### Key Features:

    *   **Product Discovery**: Search and retrieve detailed information for a
    wide range of travel products, including attractions, tours, and activities.

    *   **Real-Time Availability and Pricing**: Check live availability and get
    up-to-date pricing for specific product types and dates.

    *   **End-to-End Booking Management**: Create, confirm, and cancel bookings
    seamlessly.

    *   **Voucher Retrieval**: Access and download booking vouchers directly
    through the API.

    *   **Configuration**: Fetch essential configuration data such as supported
    languages, currencies, and locations to customize your integration.
  contact:
    name: BeMyGuest API Support
    url: https://www.bemyguest.com.sg/contact-us
    email: support@bemyguest.com.sg
  version: '2.1'
jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base
servers:
  - url: https://api.demo.bemyguest.com.sg
    description: Api Demo Server
    variables: {}
  - url: https://api.bemyguest.com.sg
    description: Api Production Server
    variables: {}
paths:
  /v2/products:
    get:
      tags:
        - Products
      summary: Get product list
      description: >
        Retrieves a comprehensive list of all available products. This endpoint
        supports various filtering and sorting options to help you narrow down
        the results. 


        You can filter by product `type`, `category`, `country`, and `city`.
        Pagination is available using the `page` and `per_page` parameters. 


        You can also specify the `sort` order and the `language` for the
        response.
      operationId: getProductList
      parameters:
        - name: type
          in: query
          description: >-
            type - UUID of type of product. Types is the product segregation:
            Activity, Event, Package, Day Tour, Voluntourism, Water Tour,
            Attraction (UUID available in /config)
          style: form
          schema:
            type: string
        - name: category
          in: query
          description: >-
            category - UUID of listing category. Categories are products groups,
            like zoo, aquapark, cooking class, and many many more (UUID
            available in /config)
          style: form
          schema:
            type: string
        - name: country
          in: query
          description: country - UUID of country
          style: form
          schema:
            type: string
        - name: city
          in: query
          description: >-
            city - UUID of city, it will always overwrite country parameter if
            provided
          style: form
          schema:
            type: string
        - name: page
          in: query
          description: page - page number for results
          style: form
          schema:
            type: string
        - name: per_page
          in: query
          description: >-
            per_page - how many results per page - if not provided default value
            from user account will be used
          style: form
          schema:
            type: string
        - name: sort
          in: query
          description: >-
            sort - sorting field - coma separated list of fields e.g.
            date,-price,-date,price
          style: form
          schema:
            type: string
        - name: language
          in: query
          description: language - UUID or code may be provided
          style: form
          schema:
            type: string
        - name: fields
          in: query
          description: >-
            fields - coma separated list of keys (fields) to be returned (Fields
            include
            'uuid','updatedAt','title','titleTranslated','validFrom','validThrough','basePrice','typeName','typeUuid','links')
          style: form
          schema:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/ProductsResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
      deprecated: false
  /v2/products/{uuid}:
    get:
      tags:
        - Products
      summary: Get product details
      description: >
        Fetches detailed information for a specific product using its unique
        identifier (`UUID`). 


        You can specify which `fields` to return and the desired `language` for
        the response content.
      operationId: getProductDetails
      parameters:
        - name: uuid
          in: path
          description: UUID of product
          required: true
          style: simple
          schema:
            type: string
            format: uuid
        - name: language
          in: query
          description: language - UUID or code may be provided
          style: form
          schema:
            type: string
        - name: fields
          in: query
          description: fields - coma separated list of keys (fields) to be returned
          style: form
          schema:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/ProductResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
      deprecated: false
  /v2/products/{uuid}/product-types:
    get:
      tags:
        - Product-Types
      summary: Get product types for product
      description: >
        Returns a list of all available `product-types` for a given product
        `UUID`. 


        This is useful for understanding the different variations or options
        available for a single product.
      operationId: getProductTypesForProduct
      parameters:
        - name: uuid
          in: path
          description: UUID of product
          required: true
          style: simple
          schema:
            type: string
            format: uuid
      responses:
        '200':
          $ref: '#/components/responses/ProductTypesResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
      deprecated: false
    parameters: []
  /v2/product-types/{uuid}:
    get:
      tags:
        - Product-Types
      summary: Get product-type details
      description: >
        Retrieves the full details of a specific `product-type` using its
        `UUID`. 


        This includes information about pricing, availability, and booking
        requirements. You can specify which `fields` to return and the
        `language` for the response.
      operationId: getProductTypeDetails
      parameters:
        - name: uuid
          in: path
          description: UUID of product type
          required: true
          style: simple
          schema:
            type: string
            format: uuid
        - name: fields
          in: query
          description: fields - comma separated list of fields to retrieve
          style: form
          schema:
            type: string
        - name: language
          in: query
          description: language - UUID or code may be provided
          style: form
          schema:
            type: string
      responses:
        '200':
          description: A successful response containing the product type details.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductTypeDetailsResponse'
              examples:
                Success:
                  $ref: '#/components/examples/ProductTypeDetails'
        '400':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
      deprecated: false
    parameters: []
  /v2/product-types/{uuid}/price-lists:
    get:
      tags:
        - Product-Types
      summary: Get price and availability calendar
      description: >
        Provides a calendar view of pricing and availability for a specific
        `product-type`. 


        You must provide a `date_start` and `date_end` to define the period you
        are interested in. The date range cannot exceed six months.
      operationId: getPriceListCalendar
      parameters:
        - name: uuid
          in: path
          description: UUID of product type
          required: true
          style: simple
          schema:
            type: string
            format: uuid
        - name: date_start
          in: query
          description: date_start - product's prices start date, format YYYY-MM-DD
          style: form
          schema:
            type: string
            format: date
        - name: date_end
          in: query
          description: >-
            date_end - product's prices end date, must not be greater than six
            months from the current date, format YYYY-MM-DD
          style: form
          schema:
            type: string
            format: date
      responses:
        '200':
          $ref: '#/components/responses/AvailabilityPriceCalendarResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
        '422':
          $ref: '#/components/responses/UnprocessableResponse'
      deprecated: false
  /v2/product-types/{uuid}/price-lists/{date}:
    get:
      tags:
        - Product-Types
      summary: Check availability and price for a single date
      description: >
        Checks the real-time availability and price for a specific
        `product-type` on a single given `date`. 


        > It is highly recommended to use this endpoint to confirm availability
        before proceeding with a booking.
      operationId: checkAvailabilityAndPrice
      parameters:
        - name: uuid
          in: path
          description: UUID of product type
          required: true
          style: simple
          schema:
            type: string
            format: uuid
        - name: date
          in: path
          description: Date YYYY-MM-DD
          required: true
          style: simple
          schema:
            type: string
            format: date
            examples:
              - '2025-01-01'
      responses:
        '200':
          $ref: '#/components/responses/AvailabilityDateResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
        '422':
          $ref: '#/components/responses/UnprocessableResponse'
      deprecated: false
    parameters: []
  /v2/bookings:
    post:
      tags:
        - Bookings
      summary: Create a booking
      description: >
        Creates a new booking. 


        > Before creating a booking, you should always check the availability
        and price using the `/v2/product-types/{uuid}/price-lists/{date}`
        endpoint. 


        The request body must contain all the necessary information for the
        booking, including customer details and product options.
      operationId: createBooking
      requestBody:
        $ref: '#/components/requestBodies/CreateBookingRequest'
      responses:
        '201':
          $ref: '#/components/responses/BookingDetailsResponse'
        '400':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
        '422':
          $ref: '#/components/responses/UnprocessableResponse'
      deprecated: false
    get:
      tags:
        - Bookings
      summary: Get bookings
      description: >
        Retrieves a list of your bookings. You can filter the results by
        `date_start`, `date_end`, guest information (`first_name`, `last_name`,
        `email`, `phone`), `partner_reference`, and `status`. 


        Pagination is also supported.
      operationId: getBookings
      parameters:
        - name: date_start
          in: query
          description: date_start - As compared with arrivalDate, format YYYY-MM-DD
          style: form
          schema:
            type: string
        - name: date_end
          in: query
          description: date_end - As compared with arrivalDate, format YYYY-MM-DD
          style: form
          schema:
            type: string
        - name: first_name
          in: query
          description: first_name - Guest's first name
          style: form
          schema:
            type: string
        - name: last_name
          in: query
          description: last_name - Guest's last name
          style: form
          schema:
            type: string
        - name: email
          in: query
          description: email - Guest's email address
          style: form
          schema:
            type: string
        - name: phone
          in: query
          description: phone - Guest's contact number
          style: form
          schema:
            type: string
        - name: partner_reference
          in: query
          description: partner_reference - The given unique partnerReference ID of booking
          style: form
          schema:
            type: string
        - name: page
          in: query
          description: page - Page number for results
          style: form
          schema:
            type: integer
            contentEncoding: int32
        - name: per_page
          in: query
          description: >-
            per_page - How many results per page - if not provided default value
            from user account will be used
          style: form
          schema:
            type: integer
            contentEncoding: int32
        - name: query
          in: query
          description: query - Free phrase for text search for example &query=John
          style: form
          schema:
            type: string
        - name: status
          in: query
          description: >-
            status - Filter bookings by status
            reserved|waiting|cancellation_requested|cancelled|approved|expired|rejected|refunded|refund_declined
          style: form
          schema:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/BookingListResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
      deprecated: false
    parameters: []
  /v2/bookings/{uuid}:
    get:
      tags:
        - Bookings
      summary: Get booking status
      description: >-
        Retrieves the current status and details of a specific booking using its
        `UUID`.
      operationId: getBookingStatus
      parameters:
        - name: uuid
          in: path
          description: UUID of booking
          required: true
          style: simple
          schema:
            type: string
            format: uuid
      responses:
        '200':
          $ref: '#/components/responses/BookingDetailsResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
      deprecated: false
    parameters: []
  /v2/bookings/{uuid}/{status}:
    put:
      tags:
        - Bookings
      summary: Confirm or cancel booking
      description: >
        Updates the status of a booking to either `confirm` or `cancel`. 


        - A new booking starts with the `reserved` status. 

        - To confirm the booking and lock the inventory, you must update the
        status to `waiting`. 

        - Bookings in the `waiting` status will expire if not actioned within 5
        days.

        - To cancel a booking, a cancellation request is created and is subject
        to approval.
      operationId: updateBookingStatus
      parameters:
        - name: uuid
          in: path
          description: UUID of booking
          required: true
          style: simple
          schema:
            type: string
            format: uuid
        - name: status
          in: path
          description: Status `confirm` or `cancel`
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/BookingDetailsResponse'
        '400':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
        '409':
          description: Invalid Action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      deprecated: false
    parameters: []
  /v2/bookings/{bookingUuid}/vouchers:
    get:
      tags:
        - Bookings
      summary: Get vouchers
      description: >
        Retrieves the vouchers for a specific booking. 


        > Please note that the download links provided require authorization and
        should not be sent directly to the end customer. You must download the
        vouchers and distribute them yourself.
      operationId: getVouchers
      parameters:
        - name: bookingUuid
          in: path
          description: Booking UUID
          required: true
          style: simple
          schema:
            type: string
            format: uuid
        - name: page
          in: query
          description: >-
            page - Page number for results. By default, the api response will
            only return back the first 15 vouchers on first page.
          style: form
          schema:
            type: string
        - name: per_page
          in: query
          description: >-
            per_page - How many results per page - if not provided default value
            will be 15
          style: form
          schema:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/BookingVouchersResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
      deprecated: false
    parameters: []
  /v2/config:
    get:
      tags:
        - Configuration
      summary: Get configuration
      description: >
        Fetches essential configuration data for the API, including supported
        `languages`, `currencies`, `locations`, `timezones`, and the base URL
        for images.
      operationId: getConfig
      responses:
        '200':
          $ref: '#/components/responses/ConfigurationResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '405':
          $ref: '#/components/responses/MethodNotAllowedResponse'
      deprecated: false
    parameters: []
webhooks:
  product_available:
    post:
      summary: Product available
      description: This webhook is triggered when a new product becomes available.
      operationId: productAvailable
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookProductAvailable'
      responses:
        '200':
          description: OK
  product_updated:
    post:
      summary: Product updated
      description: This webhook is triggered when a product's information is updated.
      operationId: productUpdated
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookProductUpdated'
      responses:
        '200':
          description: OK
  product_type_available:
    post:
      summary: Product-type available
      description: This webhook is triggered when a new product type becomes available.
      operationId: productTypeAvailable
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookProductTypeAvailable'
      responses:
        '200':
          description: OK
  product_type_not_available:
    post:
      summary: Product-type not available
      description: This webhook is triggered when a product type is no longer available.
      operationId: productTypeNotAvailable
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookProductTypeNotAvailable'
      responses:
        '200':
          description: OK
  product_type_content_updated:
    post:
      summary: Product-type content updated
      description: This webhook is triggered when the content of a product type is updated.
      operationId: productTypeContentUpdated
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookProductTypeContentUpdated'
      responses:
        '200':
          description: OK
  booking_status_updated:
    post:
      summary: Booking status updated
      description: This webhook is triggered when a booking's status is updated.
      operationId: bookingStatusUpdated
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookBookingStatusUpdated'
      responses:
        '200':
          description: OK
  booking_data_updated:
    post:
      summary: Booking data updated
      description: This webhook is triggered when a booking's data is updated.
      operationId: bookingDataUpdated
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookBookingDataUpdated'
      responses:
        '200':
          description: OK
  booking_tickets_updated:
    post:
      summary: Booking tickets updated
      description: This webhook is triggered when a booking's tickets are updated.
      operationId: bookingTicketsUpdated
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookBookingTicketsUpdated'
      responses:
        '200':
          description: OK
components:
  schemas:
    ActivityType:
      title: Activity Type
      required:
        - name
        - uuid
      type: object
      properties:
        name:
          type: string
          description: Type name
        uuid:
          type: string
          description: UUID of activity type
    ActivityTypes:
      title: Activity Types
      required:
        - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ActivityType'
          description: Data object
          examples:
            - - name: Activity
                uuid: 922c8611-609d-5f36-bb8a-f92c25e376a7
              - name: Attraction
                uuid: d3c54653-dd05-598f-b193-f6683d1064ab
              - name: Day Tour
                uuid: 5a5682b8-c8d6-5f15-97ef-de4c66ea5695
              - name: Event
                uuid: ac0704a8-b933-5719-91ec-410105530a33
              - name: Package
                uuid: fc8591bd-fa8b-54a8-9ba4-fa012f2fcee5
              - name: Voluntourism
                uuid: 19dd0e08-2fcb-5c66-8698-e92eaa0c7734
      examples:
        - data:
            - name: Activity
              uuid: 922c8611-609d-5f36-bb8a-f92c25e376a7
            - name: Attraction
              uuid: d3c54653-dd05-598f-b193-f6683d1064ab
            - name: Day Tour
              uuid: 5a5682b8-c8d6-5f15-97ef-de4c66ea5695
            - name: Event
              uuid: ac0704a8-b933-5719-91ec-410105530a33
            - name: Package
              uuid: fc8591bd-fa8b-54a8-9ba4-fa012f2fcee5
            - name: Voluntourism
              uuid: 19dd0e08-2fcb-5c66-8698-e92eaa0c7734
    AmountBreakdown:
      type: object
      description: A summary of the ordered items which is shown in a BookingDetails object
      properties:
        name:
          type: string
        price:
          type: string
        quantity:
          type: integer
      required:
        - name
        - price
        - quantity
    AudioHeadsetLanguage:
      title: Audio Headset Language
      required:
        - name
        - uuid
      type: object
      properties:
        name:
          type: string
          description: Language name
          examples:
            - english
        uuid:
          type: string
          description: UUID of language
          examples:
            - 790395c0-23b6-5dd9-8a6b-ca61b95dcfd4
    Availability:
      title: Availability
      type: object
      properties:
        category:
          type: string
          example: adult
        quantity:
          type: integer
          example: 117
        type:
          type: string
          example: shared
    AvailabilityDate:
      description: Availability and Price For Specified Date
      type: object
      properties:
        availability:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Availability'
          description: >-
            For all-day products, this contains the daily number of tickets
            available. For timeslot products, this will be null, and
            availability is found within each timeslot.
          examples:
            - - category: adult
                quantity: 117
                type: shared
              - category: child
                quantity: 117
                type: shared
        date:
          type: string
          description: travel date
          examples:
            - '2025-08-29'
        weekday:
          type: string
          description: weekday of travel
          examples:
            - Monday
        currency:
          type: string
          description: currency UUID
          examples:
            - cd15153e-dfd1-5039-8aa3-115bec58e86e
        cancellationPolicy:
          type: array
          items:
            type: object
          description: Cancellation policy for the product type.
        prices:
          type: array
          description: >-
            An array of price configurations. Different timeslots can be linked
            to a specific price configuration using the priceId.
          items:
            $ref: '#/components/schemas/PriceDetail'
        timeslots:
          type: array
          items:
            type: object
            properties:
              startTime:
                type: string
                format: time
                example: '08:00'
              endTime:
                type: string
                format: time
                example: '08:00'
              uuid:
                type: string
                format: uuid
              priceId:
                type: string
                format: uuid
                description: >-
                  Links to a specific price object in the top-level prices
                  array.
              availability:
                type: array
                items:
                  $ref: '#/components/schemas/Availability'
          description: >-
            Timeslot availability for the travel day. Will be null for all-day
            products.
        timezone:
          type: string
          description: Timezone of the product type
          examples:
            - Europe/Berlin
        options:
          type: array
          items:
            type: object
          description: >-
            booking options for product type for travel date, containing two
            arrays: perBooking (one option per booking) and perPax (one option
            for each pax)
          examples:
            - []
        voucherValidity:
          type: object
          description: >-
            voucher validity for travel date, object containing validity for
            different ticket types
          examples:
            - adults:
                date: '2024-05-13'
              children:
                date: '2024-05-13'
              youth:
                date: '2024-05-13'
              infant:
                date: '2024-05-13'
              seniors:
                date: '2024-05-13'
      examples:
        - availability:
            - category: adult
              quantity: 168
              type: shared
            - category: child
              quantity: 168
              type: shared
          date: '2024-05-13'
          weekday: Monday
          available: true
          currency: cd15153e-dfd1-5039-8aa3-115bec58e86e
          prices:
            - id: cb57b5c6-376c-47f5-ad09-606d6850f5e1
              rates:
                - amount: 98
                  category: adult
                  currency: SGD
                  format: S$98.00
                  meta: {}
                  type: retailPrice
                - amount: 67.6
                  category: adult
                  currency: SGD
                  format: S$67.60
                  meta: {}
                  type: nettPrice
                - amount: 79
                  category: adult
                  currency: SGD
                  format: S$79.00
                  meta:
                    markup: 16.8639
                  type: recommendedPrice
                - type: nettPrice
                  category: child
                  meta: []
                  currency: SGD
                  amount: 12
                  format: S$12.00
                - type: retailPrice
                  category: child
                  meta: []
                  currency: SGD
                  amount: 25
                  format: S$25.00
                - type: recommendedPrice
                  category: child
                  meta:
                    markup: 66.65
                  currency: SGD
                  amount: 20
                  format: S$20.00
          cancellationPolicy: []
          timeslots: []
          options: []
          voucherValidity:
            adults:
              date: '2024-05-13'
            children:
              date: '2024-05-13'
            youth:
              date: '2024-05-13'
            infant:
              date: '2024-05-13'
            seniors:
              date: '2024-05-13'
    BookingCustomer:
      title: Booking Customer
      required:
        - email
        - firstName
        - lastName
        - phone
        - salutation
      type: object
      properties:
        email:
          type: string
          description: email
          examples:
            - example@bemyguest.com.sg
        firstName:
          type: string
          description: First name - accepts alphabets, spaces, hyphen and apostrophe only
          examples:
            - Example
        lastName:
          type: string
          description: Last name - accepts alphabets, spaces, hyphen and apostrophe only
          examples:
            - Customer
        phone:
          type: string
          description: Phone number
          examples:
            - +65 0000 0000
        salutation:
          type: string
          description: Salutation
          examples:
            - Mr.
    BookingDetails:
      type: object
      description: >-
        This object is returned in the response whenever a booking is created,
        modified or viewed in the API
      properties:
        adults:
          type: integer
        amountBreakdown:
          type: array
          items:
            $ref: '#/components/schemas/AmountBreakdown'
        arrivalDate:
          type: string
          format: date
        cancellationRequestAt:
          type:
            - string
            - 'null'
        cancellationRequestStatus:
          type: string
        cancellationStatus:
          type:
            - string
            - 'null'
        children:
          type: integer
        code:
          type: string
        completedAt:
          type:
            - string
            - 'null'
        createdAt:
          type: string
        currencyCode:
          type: string
        currencyUuid:
          type: string
          format: uuid
        email:
          type: string
          format: email
        firstName:
          type: string
        lastName:
          type: string
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        options:
          type: array
        partnerReference:
          type: string
        phone:
          type: string
        productTypeTitle:
          type: string
        productTypeTitleTranslated:
          type: string
        productTypeUuid:
          type: string
          format: uuid
        refundAmount:
          type:
            - number
            - 'null'
        refundDate:
          type:
            - string
            - 'null'
        refundTransaction:
          type:
            - string
            - 'null'
        salutation:
          type: string
        seniors:
          type: integer
        status:
          type: string
        ticketTypes:
          type: array
          items:
            $ref: '#/components/schemas/TicketType'
        timeSlot:
          type: string
        totalAmount:
          type: number
        updatedAt:
          type: string
        uuid:
          type: string
          format: uuid
    BookingDetailsResponse:
      type: object
      x-tags:
        - Responses
      properties:
        data:
          $ref: '#/components/schemas/BookingDetails'
        timestamp:
          type: string
          format: date-time
    BookingListResponse:
      type: object
      x-tags:
        - Responses
      properties:
        data:
          items:
            $ref: '#/components/schemas/BookingSummary'
    BookingOptionValue:
      type: object
      description: >-
        Has a `uuid` and a `value` this is used when creating a booking that has
        booking options
      properties:
        uuid:
          type: string
        value:
          type:
            - string
            - number
      examples:
        - uuid: 46db421e-5727-46fc-9f2c-10679e026582
          value: '1'
    BookingOptions:
      description: >-
        Structure of a booking options object as used when creating a new
        booking
      required:
        - perBooking
        - perPax
      type: object
      properties:
        perBooking:
          type: array
          items:
            $ref: '#/components/schemas/BookingOptionValue'
          description: Options per booking array
          minItems: 0
        perPax:
          type: array
          items:
            $ref: '#/components/schemas/BookingOptionsPerPax'
          minItems: 0
      examples:
        - perBooking: []
          perPax: []
    BookingOptionsPerPax:
      type: array
      description: >
        When a booking has options that are per-pax then you **must** provide an
        array of arrays for this value

        with one array of options for each person on the booking.
      items:
        $ref: '#/components/schemas/BookingOptionValue'
      minItems: 0
    BookingSummary:
      title: Get Bookings Response
      type: object
      properties:
        uuid:
          type: string
          description: UUID of the booking
          examples:
            - 0b00b3ae-4118-5a78-be9f-39fb27561e13
        code:
          type: string
          description: 7 alphanumeric booking code
          examples:
            - HRX1SL5
        partnerReference:
          type: string
          description: External booking reference from partner
          examples:
            - BMG-20240510-001
        status:
          type: string
          description: >-
            booking status (reserved, waiting, approved, canceled, expired,
            rejected)
          examples:
            - reserved
        createdAt:
          type: string
          description: created date/time
          examples:
            - '2015-06-23 02:32:50'
        updatedAt:
          type: string
          description: last updated date/time
          examples:
            - '2016-08-23 19:14:47'
    BookingVoucher:
      type: object
      description: An object that contains information about a booking voucher
      properties:
        uuid:
          type: string
          description: UUID of voucher
          examples:
            - 8aac1884-fc26-4236-bdc5-cfac8d261ac9
        generatedAt:
          type: string
          description: voucher generated date/time
          examples:
            - '2019-09-06 17:53:56'
        downloadedAt:
          type: string
          description: voucher downloaded date/time via API
          examples:
            - '2019-09-06 17:55:33'
        links:
          type: array
          items:
            type: object
          description: >-
            voucher download links - partner is required to download the
            vouchers to their system
          examples:
            - - method: GET
                rel: download
                href: >-
                  https://api.demo.bemyguest.com.sg/v2/bookings/b97a101c-9c27-4370-9023-c6b35f055e79/download-voucher/7cac2304-fc26-4236-bdc5-cfac8d261bb6
              - method: GET
                rel: booking
                href: >-
                  https://api.demo.bemyguest.com.sg/v2/bookings/b97a101c-9c27-4370-9023-c6b35f055e79
        visualId:
          type:
            - string
            - 'null'
          description: visual id of voucher if applicable
          default: 'null'
          examples:
            - abc12345xyz
    BookingVouchersResponse:
      type: object
      x-tags:
        - Responses
      properties:
        data:
          items:
            $ref: '#/components/schemas/BookingVoucher'
    CancellationPolicies:
      title: Cancellation Policies
      required:
        - numberOfDays
        - numberOfHours
        - refundPercentage
        - cancellationFeePercentage
        - serviceFee
        - serviceFeePerBooking
        - serviceFeeCurrency
      type: object
      properties:
        numberOfDays:
          type: integer
          description: Number of days
          contentEncoding: int32
          examples:
            - 1
        numberOfHours:
          type: integer
          description: Number of hours
          contentEncoding: int32
          examples:
            - 24
        refundPercentage:
          type: integer
          description: Refund percentage
          contentEncoding: int32
          examples:
            - 100
        cancellationFeePercentage:
          type: integer
          description: Cancellation fee
          contentEncoding: int32
          examples:
            - 0
        serviceFee:
          type: number
          description: Service fee
          examples:
            - 6.45
        serviceFeePerBooking:
          type: boolean
          description: Service fee per booking true/false. If false, it apply to per pax
          examples:
            - true
        serviceFeeCurrency:
          type: string
          description: Service fee currency
          examples:
            - SGD
      description: cancellation Policies
    Categories:
      title: Categories
      required:
        - data
      type: object
      properties:
        data:
          allOf:
            - $ref: '#/components/schemas/Category'
            - description: Data object
    Category:
      title: Category
      required:
        - Name
        - uuid
      type: object
      properties:
        Name:
          type: string
          description: name of category
          examples:
            - Shopping
        uuid:
          type: string
          description: UUID of category
          examples:
            - 9e637f20-1771-50b3-944d-900881e993ee
        children:
          type: array
          items:
            $ref: '#/components/schemas/SubCategory'
          description: Sub categories
          examples:
            - - name: Water
                uuid: dbaff91a-1960-538b-9eba-e86a1971962f
              - name: Land
                uuid: a46e7f5b-9af2-5784-9c1d-b24988971c5f
              - name: Air
                uuid: cf181545-f754-58e5-8f57-eba44c384737
              - name: Airport Lounge
                uuid: 823d1bf7-283a-5699-837e-b67d890904cd
              - name: Airport Fast Track
                uuid: 6a67e471-a922-5f3a-843b-5d8a3f3e5675
    Cities:
      title: Cities
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/City'
    City:
      title: City
      required:
        - name
        - uuid
      type: object
      properties:
        name:
          type: string
          description: City name
          examples:
            - Activity
        uuid:
          type: string
          description: City UUID
          examples:
            - 922c8611-609d-5f36-bb8a-f92c25e376a7
      description: City details
    Configuration:
      title: Configuration Object
      type: object
      properties:
        now:
          type: string
          description: Time
          examples:
            - '2025-02-20T03:49:13.130670Z'
        version:
          type: integer
          description: API version
          contentEncoding: int32
          examples:
            - 2
        serverUrl:
          type: string
          description: Api Server URL
          examples:
            - http://api.bemyguest.com.sg.local
        photosUrl:
          type: string
          description: Photos URL
          examples:
            - https://s3.amazonaws.com/playground.bemyguest.com.sg
        activitiesSorting:
          type: array
          items:
            type: string
          description: Activities default sorting
          examples:
            - - date
              - '-date'
              - price
              - '-price'
              - distance
              - '-distance'
        user:
          allOf:
            - $ref: '#/components/schemas/User'
            - description: User details (booking contact)
              examples:
                - name: BeMyGuest
                  email: example@bemyguest.com.sg
                  uuid: 30d23074-959f-4179-84c7-4787349828a1
                  continueUrl: ''
                  notifyUrl: ''
                  defaultPagination: 50
                  defaultSortBy: date
                  defaultCurrencyUuid: 'null'
                  defaultCurrencyCode: 'null'
                  defaultLanguageUuid: 790395c0-23b6-5dd9-8a6b-ca61b95dcfd4
                  defaultLanguageCode: EN
                  walletBalance: 18941.98
                  walletBlockedBalance: -10206
                  walletAvailableBalance: 8735.98
                  walletAlertValue: 0
        languages:
          allOf:
            - $ref: '#/components/schemas/Languages'
            - description: Languages object
              examples:
                - data:
                    - name: chinese_simplified
                      code: ZH-HANS
                      uuid: d182fbd9-4520-5c66-a513-94fcd3d46d9b
                    - name: english
                      code: EN
                      uuid: 790395c0-23b6-5dd9-8a6b-ca61b95dcfd4
                    - name: indonesian
                      code: ID
                      uuid: 4aa13583-2d44-54da-b75a-85f39768afe0
                    - name: japanese
                      code: JA
                      uuid: 15cad3bd-034e-57a2-a692-0dd526b8ee5c
                    - name: korean
                      code: KO
                      uuid: a01acd7e-2cc9-507c-8cdd-56a11e292680
                    - name: thai
                      code: TH
                      uuid: be018dec-e4e4-595a-88ed-6c186f36fa07
                    - name: vietnamese
                      code: VI
                      uuid: fa52f395-b143-511b-aa9a-5b35ef0e16e3
        currencies:
          allOf:
            - $ref: '#/components/schemas/Currencies'
            - description: Currencies object
        types:
          allOf:
            - $ref: '#/components/schemas/ActivityTypes'
            - description: Product type
              examples:
                - data:
                    - name: Activity
                      uuid: 922c8611-609d-5f36-bb8a-f92c25e376a7
                    - name: Attraction
                      uuid: d3c54653-dd05-598f-b193-f6683d1064ab
                    - name: Day Tour
                      uuid: 5a5682b8-c8d6-5f15-97ef-de4c66ea5695
                    - name: Event
                      uuid: ac0704a8-b933-5719-91ec-410105530a33
                    - name: Package
                      uuid: fc8591bd-fa8b-54a8-9ba4-fa012f2fcee5
                    - name: Voluntourism
                      uuid: 19dd0e08-2fcb-5c66-8698-e92eaa0c7734
        categories:
          allOf:
            - $ref: '#/components/schemas/Categories'
            - description: Categories object
        locations:
          allOf:
            - $ref: '#/components/schemas/Location'
            - description: Locations object
        optionInputTypes:
          type: array
          items:
            $ref: '#/components/schemas/Link'
          description: Booking Options input types
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
          examples:
            - - method: GET
                rel: self
                href: http://api.bemyguest.com.sg.local/v2/config
    ConfigurationResponse:
      type: object
      x-tags:
        - Responses
      allOf:
        - $ref: '#/components/schemas/SuccessfulResponse'
        - title: Configuration Response
        - properties:
            data:
              $ref: '#/components/schemas/Configuration'
    Countries:
      title: Countries
      required:
        - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Country'
          description: Data object
    Country:
      title: Country
      required:
        - name
        - code
        - uuid
      type: object
      properties:
        name:
          type: string
          examples:
            - Angola
        code:
          type: string
          examples:
            - AO
        uuid:
          type: string
          examples:
            - 78317982-9806-45c9-bdfa-7faea34d4834
        states:
          allOf:
            - $ref: '#/components/schemas/States'
    CreateBookingRequest:
      type: object
      x-tags:
        - Requests
      properties:
        message:
          type: string
          description: message to host
          examples:
            - If you need to call, please consider we are in European time zone
        productTypeUuid:
          type: string
          format: uuid
          description: UUID of product type
          examples:
            - efedb1fc-f150-5eaa-bf6e-fc202f6114bd
        customer:
          allOf:
            - $ref: '#/components/schemas/BookingCustomer'
            - description: Booking person contact data
              examples:
                - email: example@bemyguest.com.sg
                  firstName: Example
                  lastName: Customer
                  phone: +65 0000 0000
                  salutation: Mr.
        adults:
          type: integer
          description: Number of adults, can be 0 when minPax = 0
          contentEncoding: int32
          examples:
            - 1
        children:
          type: integer
          description: Number of children
          contentEncoding: int32
          examples:
            - 0
        seniors:
          type: integer
          description: Number of seniors
          contentEncoding: int32
          examples:
            - 0
        timeSlotUuid:
          type: string
          format: uuid
          description: UUID of timeslot. If timeslots provided.
          examples:
            - cd15153e-dfd1-5077-8aa3-115bec58e86e
        arrivalDate:
          type: string
          format: date
          description: Date
          examples:
            - '2018-03-10'
        partnerReference:
          type: string
          description: Your own id of booking
          examples:
            - OUR_BOOKING_NO_001
        options:
          allOf:
            - $ref: '#/components/schemas/BookingOptions'
            - description: Booking options, please refer to booking options docs page
              examples:
                - perPax:
                    - uuid: 46db421e-5727-46fc-9f2c-10679e026582
                      value: '1'
                  perBooking: []
    Currencies:
      title: Currencies
      required:
        - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Currency'
    Currency:
      description: Currency Details
      required:
        - code
        - symbol
        - uuid
      type: object
      properties:
        code:
          type: string
          examples:
            - SGD
        symbol:
          type: string
          examples:
            - S$
        uuid:
          type: string
          examples:
            - cd15153e-dfd1-5039-8aa3-115bec58e86e
      examples:
        - code: SGD
          symbol: S$
          uuid: cd15153e-dfd1-5039-8aa3-115bec58e86e
    ErrorResponse:
      type: object
      properties:
        message:
          type: string
          description: A human-readable error message.
        code:
          type: string
          description: An internal error code.
        http_code:
          type: integer
          description: Http Status Code
    Language:
      title: Language
      required:
        - name
        - uuid
      type: object
      properties:
        name:
          type: string
          examples:
            - chinese_simplified
        code:
          type: string
          examples:
            - ZH-HANS
        uuid:
          type: string
          examples:
            - d182fbd9-4520-5c66-a513-94fcd3d46d9b
    Languages:
      title: Languages
      required:
        - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Language'
          description: ''
          examples:
            - - name: chinese_simplified
                code: ZH-HANS
                uuid: d182fbd9-4520-5c66-a513-94fcd3d46d9b
              - name: english
                code: EN
                uuid: 790395c0-23b6-5dd9-8a6b-ca61b95dcfd4
              - name: indonesian
                code: ID
                uuid: 4aa13583-2d44-54da-b75a-85f39768afe0
              - name: japanese
                code: JA
                uuid: 15cad3bd-034e-57a2-a692-0dd526b8ee5c
              - name: korean
                code: KO
                uuid: a01acd7e-2cc9-507c-8cdd-56a11e292680
              - name: thai
                code: TH
                uuid: be018dec-e4e4-595a-88ed-6c186f36fa07
              - name: vietnamese
                code: VI
                uuid: fa52f395-b143-511b-aa9a-5b35ef0e16e3
      examples:
        - data:
            - name: chinese_simplified
              code: ZH-HANS
              uuid: d182fbd9-4520-5c66-a513-94fcd3d46d9b
            - name: english
              code: EN
              uuid: 790395c0-23b6-5dd9-8a6b-ca61b95dcfd4
            - name: indonesian
              code: ID
              uuid: 4aa13583-2d44-54da-b75a-85f39768afe0
            - name: japanese
              code: JA
              uuid: 15cad3bd-034e-57a2-a692-0dd526b8ee5c
            - name: korean
              code: KO
              uuid: a01acd7e-2cc9-507c-8cdd-56a11e292680
            - name: thai
              code: TH
              uuid: be018dec-e4e4-595a-88ed-6c186f36fa07
            - name: vietnamese
              code: VI
              uuid: fa52f395-b143-511b-aa9a-5b35ef0e16e3
    Link:
      title: Link
      required:
        - method
        - rel
        - href
      type: object
      properties:
        method:
          type: string
          examples:
            - GET
        rel:
          type: string
          examples:
            - self
        href:
          type: string
          examples:
            - >-
              http://api.bemyguest.com.sg.local/v2/product-types/efedb1fc-f150-5eaa-bf6e-fc202f6114bd
    Location:
      title: Location
      required:
        - city
        - cityUuid
        - state
        - stateUuid
        - country
        - countryUuid
      type: object
      properties:
        city:
          type: string
          examples:
            - Sentosa
        cityUuid:
          type: string
          examples:
            - 29ad1bd7-2000-5321-aff8-f71a6464142b
        state:
          type: string
          examples:
            - Sentosa
        stateUuid:
          type: string
          examples:
            - ab7d9ac9-036d-11e5-a2a9-d07e352b4840
        country:
          type: string
          examples:
            - Singapore
        countryUuid:
          type: string
          examples:
            - 885e90a3-a83d-56d3-b5e8-040b4017c825
    Meta:
      title: Meta
      required:
        - pagination
      type: object
      properties:
        pagination:
          type: object
      description: 'Pagination data: page number, total pages, count per page'
      examples:
        - pagination:
            total: 96
            count: 40
            per_page: 40
            current_page: 1
            total_pages: 3
            links:
              next: https://apidemo.bemyguest.com.sg/v2/products?page=2
    PaginatedResponse:
      type: object
      allOf:
        - $ref: '#/components/schemas/SuccessfulResponse'
        - type: object
          properties:
            links:
              type: array
            meta:
              type: object
              properties:
                pagination:
                  type: object
                  $ref: '#/components/schemas/Pagination'
    Pagination:
      type: object
      properties:
        count:
          type: integer
        current_page:
          type: integer
        links:
          type: object
          properties:
            next:
              type: string
        per_page:
          type: integer
        total_page:
          type: integer
    Paths:
      description: Paths to download various versions of an image
      required:
        - original
        - 75x50
        - 175x112
        - 680x325
        - 1280x720
        - 1920x1080
        - 2048x1536
      type: object
      properties:
        original:
          type: string
          examples:
            - >-
              /images/content/original/137656i500d95fcd6f100de346f53c774e90569.jpg
        75x50:
          type: string
          examples:
            - /images/content/75x50/137656i500d95fcd6f100de346f53c774e90569.jpg
        175x112:
          type: string
          examples:
            - >-
              /images/content/175x112/137656i500d95fcd6f100de346f53c774e90569.jpg
        680x325:
          type: string
          examples:
            - >-
              /images/content/680x325/137656i500d95fcd6f100de346f53c774e90569.jpg
        1280x720:
          type: string
          examples:
            - >-
              /images/content/1280x720/137656i500d95fcd6f100de346f53c774e90569.jpg
        1920x1080:
          type: string
        2048x1536:
          type: string
      examples:
        - original: /images/content/original/137656i500d95fcd6f100de346f53c774e90569.jpg
          75x50: /images/content/75x50/137656i500d95fcd6f100de346f53c774e90569.jpg
          175x112: /images/content/175x112/137656i500d95fcd6f100de346f53c774e90569.jpg
          680x325: /images/content/680x325/137656i500d95fcd6f100de346f53c774e90569.jpg
          1280x720: /images/content/1280x720/137656i500d95fcd6f100de346f53c774e90569.jpg
          1920x1080: 'null'
          2048x1536: 'null'
    Photo:
      description: Photo Details
      required:
        - uuid
        - paths
      type: object
      properties:
        uuid:
          type: string
          examples:
            - d184f229-a517-5bdc-9c0d-3bcd74598c2c
        paths:
          allOf:
            - $ref: '#/components/schemas/Paths'
            - examples:
                - original: >-
                    /images/content/original/137656i500d95fcd6f100de346f53c774e90569.jpg
                  75x50: >-
                    /images/content/75x50/137656i500d95fcd6f100de346f53c774e90569.jpg
                  175x112: >-
                    /images/content/175x112/137656i500d95fcd6f100de346f53c774e90569.jpg
                  680x325: >-
                    /images/content/680x325/137656i500d95fcd6f100de346f53c774e90569.jpg
                  1280x720: >-
                    /images/content/1280x720/137656i500d95fcd6f100de346f53c774e90569.jpg
                  1920x1080: 'null'
                  2048x1536: 'null'
        caption:
          type: string
    PriceDetail:
      title: Price Detail
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: cb57b5c6-376c-47f5-ad09-606d6850f5e1
        rates:
          type: array
          items:
            $ref: '#/components/schemas/RateDetail'
    PriceTypes:
      type: string
      oneOf:
        - const: nettPrice
        - const: retailPrice
        - const: recommendedPrice
        - const: minimumSellingPrice
    Product:
      description: Full version of a Product's Details
      type: object
      properties:
        additionalInfo:
          type: string
        additionalInfoTranslated:
          type: string
        address:
          type: string
          description: Address of the location of the attraction
          examples:
            - Gateway Ave, Singapore
        allProductTypesHaveOptions:
          type: boolean
          description: true/false, when all product types of product have options.
          examples:
            - false
        airportPickup:
          type: boolean
          description: >-
            true/false, Depreciated. When airportPickup is true, customer need
            to provide airport information. This value has been depreciated. It
            may be appear as booking option instead.
          examples:
            - false
        averageDelivery:
          type: number
          description: Average time (in seconds) that is needed to process the booking
          examples:
            - 64
        audioHeadsetLanguages:
          type: array
          items:
            $ref: '#/components/schemas/Language'
          description: Available languages for Audio Headset material
          examples:
            - []
        basePrice:
          type: number
          description: Base price of product
          examples:
            - 69.13
        businessHoursFrom:
          type: string
          description: supplier business hours from
          examples:
            - '10:00'
        businessHoursTo:
          type: string
          description: supplier business hours to
          examples:
            - '20:00'
        categories:
          type: array
          items:
            type: object
          description: Array of categories
          examples:
            - - name: Themeparks
                uuid: 9384f408-a941-58ba-b958-4a814c23d1bc
        covid19Measures:
          type:
            - string
            - 'null'
          deprecated: true
          description: >-
            Information on Covid-19 notice of Safety Standards of visiting the
            attractions
          default: 'null'
          examples:
            - no information
        covid19MeasuresTranslated:
          type:
            - string
            - 'null'
          description: >-
            Information on Covid-19 notice of Safety Standards of visiting the
            attractions on requested language
          default: 'null'
          deprecated: true
          examples:
            - no information
        currency:
          type: object
          description: Currency
          examples:
            - code: SGD
              symbol: S$
              uuid: cd15153e-dfd1-5039-8aa3-115bec58e86e
        description:
          type: string
          description: Description of product. Always in English
          examples:
            - >-
              Experience different cutting-edge rides, shows, and attractions
              based on your favourite blockbuster films and television series at
              Universal Studios Singapore. This skip-the-line e-ticket will let
              guests have access to the seven zones of the park, including
              Hollywood, New York, Sci-Fi City, Ancient Egypt, Lost World, Far
              Far Away, and Madagascar.\r\n\r\nIn Hollywood, ticket holders can
              try rollercoasters and other movie-themed attractions.
        descriptionTranslated:
          type: string
          description: Description of product on requested language
          examples:
            - >-
              在新加坡环球影城体验基于您最喜爱的大片和电视剧的不同尖端游乐设施、表演和景点。这张免排队电子门票将让游客可以进入公园的七个区域，包括好莱坞、纽约、科幻城、古埃及、失落的世界、遥远之地和马达加斯加。\r\n
              \r\n在好莱坞，持票者可以尝试过山车和其他电影主题的景点。
        hasOptions:
          type: boolean
          description: >-
            true/false, when at least one product type of this product has
            options.
          examples:
            - false
        highlights:
          type: string
          description: Highlights of product. Always in English
          examples:
            - >-
              Experience cutting-edge rides, shows, and attractions at Universal
              Studios Singapore\nVisit the seven themed zones of the park like
              Ancient Egypt, Lost World, and Madagascar\nMeet your favourite
              movie and TV characters like Shrek, Puss in Boots, and the
              Madagascar gang
        highlightsTranslated:
          type: string
          description: Highlights of product on requested language
          examples:
            - >-
              在新加坡环球影城体验尖端的游乐设施、表演和景点\n参观公园的七个主题区，如古埃及、失落的世界和马达加斯加\n认识你最喜欢的电影和电视角色，如怪物史莱克、穿靴子的猫和马达加斯加帮派
        hotelPickup:
          type: boolean
          description: >-
            true/false, Depreciated. When hotelPickup is true, customer need to
            provide hotel name and address. This value has been depreciated. It
            may be appear as booking option instead
          examples:
            - false
        isFlatPaxPrice:
          type: boolean
          description: >-
            true/false (An indication to tell if the Product has the same price
            for each pax in all of its productTypes)
          examples:
            - true
          deprecated: true
        isSrvEligible:
          type: boolean
          description: >-
            true/false. indicate whether this product is available for Singapore
            Rediscover Vouchers Promo.
          default: false
          deprecated: true
          examples:
            - false
        itinerary:
          type:
            - string
            - 'null'
          description: >-
            Activity itinerary - only applicable for Package type, will be null
            for others
          default: 'null'
          examples:
            - no itinerary
        itineraryTranslated:
          type:
            - string
            - 'null'
          description: translated version of itinerary on requested language
          default: 'null'
          examples:
            - no itinerary
        latitude:
          type: string
          description: Latitude of location
          examples:
            - '1.2544975'
        locations:
          type: array
          items:
            type: object
          description: Array product location information
          examples:
            - - city: Sentosa
                cityUuid: 29ad1bd7-2000-5321-aff8-f71a6464142b
                state: Sentosa
                stateUuid: ab7d9ac9-036d-11e5-a2a9-d07e352b4840
                country: Singapore
                countryUuid: 885e90a3-a83d-56d3-b5e8-040b4017c825
        longitude:
          type: string
          description: Longitude of location
          examples:
            - '103.8251792'
        maxPax:
          type: integer
          description: Maximum number of pax (adults)
          contentEncoding: int32
          examples:
            - 10
        minPax:
          type: integer
          description: Minimum number of pax (adults)
          contentEncoding: int32
          examples:
            - 1
        photos:
          type: array
          items:
            type: object
          description: >-
            Array of photos in different dimensions (Sizes: original, 75x50,
            175x112, 680x325). Please download the images to your platform. DO
            NOT hotlinking to these images
          examples:
            - $ref: '#/components/examples/PhotoList'
        photosUrl:
          type: string
          description: images base url
          examples:
            - https://s3.amazonaws.com/playground.bemyguest.com.sg
        priceIncludes:
          type: string
          description: What's included in product price
          examples:
            - Admission fee
        priceIncludesTranslated:
          type: string
          description: priceIncludes on requested language
          examples:
            - 入场费
        reviewAverageScore:
          type: number
          description: Average review score
          examples:
            - 4
        reviewCount:
          type: integer
          description: Number of reviews
          contentEncoding: int32
          examples:
            - 1
        safety:
          type:
            - string
            - 'null'
          description: activity safety information
          default: 'null'
          examples:
            - no information
        safetyTranslated:
          type:
            - string
            - 'null'
          description: translated version of safety information on requested language
          default: 'null'
          examples:
            - no information
        title:
          type: string
          description: Title of product. Always in English
          examples:
            - Universal Studios Singapore E-ticket (Test)
        titleTranslated:
          type: string
          description: Title of product on requested language
          examples:
            - 新加坡环球影城电子门票（测试）
        tourType:
          type:
            - string
            - 'null'
          description: Tour type of product private/join/null
          default: 'null'
          examples:
            - join
        typeName:
          type: string
          description: Type of product
          examples:
            - Attraction
        translationLanguages:
          type: array
          items:
            $ref: '#/components/schemas/Language'
          description: Available translated languages for product.
          examples:
            - - code: ID
                name: indonesian
                uuid: 4aa13583-2d44-54da-b75a-85f39768afe0
              - code: KO
                name: korean
                uuid: a01acd7e-2cc9-507c-8cdd-56a11e292680
              - code: ZH-HANS
                name: chinese_simplified
                uuid: d182fbd9-4520-5c66-a513-94fcd3d46d9b
        updatedAt:
          type: string
          description: last update date/time to product
          examples:
            - '2020-03-13 17:31:00'
        uuid:
          type: string
          format: uuid
          description: UUID of product
          examples:
            - d5a03ea2-e06e-5d01-84b7-94530b1059f7
        validFrom:
          type:
            - string
            - 'null'
          description: Start date for product availability (or null when no limit)
          default: 'null'
          examples:
            - '2020-01-01'
        validThrough:
          type:
            - string
            - 'null'
          description: End date if product availability (or null when no limit)
          default: 'null'
          examples:
            - '2024-01-20'
        warnings:
          type:
            - string
            - 'null'
          description: Warnings of the activity (related to safety and insurance)
          default: 'null'
          examples:
            - >-
              - The park shall remain operational in case of light rains. The
              decision to proceed is up to the ticket holder.\r\n\r\nSafety and
              insurance:\r\n- Children below 12 years old must be accompanied by
              a paying adult at all times.\r\n- Detailed information about ride
              restrictions can be found at the Guest Services Windows located at
              the front part of the park. It is also available at the Guest
              Services Lobby inside the park.
        warningsTranslated:
          type:
            - string
            - 'null'
          description: translated version of warnings on requested language
          default: 'null'
          examples:
            - >-
              - 若遇小雨，公园将照常开放。是否继续进行的决定取决于持票人。\r\n\r\n安全和保险：\r\n- 12
              岁以下儿童必须始终由付费成人陪同。\r\n-
              详细信息有关乘车限制的信息，请前往位于公园前部的游客服务窗口。您也可以在公园内的宾客服务大厅购买。
        writtenLanguages:
          type: array
          items:
            $ref: '#/components/schemas/Language'
          description: Available written languages for reading material.
          examples:
            - []
    ProductListResponse:
      type: object
      x-tags:
        - Responses
      allOf:
        - $ref: '#/components/schemas/PaginatedResponse'
        - title: Configuration Response
        - properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ProductSummary'
    ProductPageVisit:
      title: Product Page Visit
      required:
        - code
        - message
      type: object
      properties:
        code:
          type: string
          examples:
            - '200'
        message:
          type: string
          examples:
            - Submission successful.
    ProductResponse:
      type: object
      x-tags:
        - Responses
      allOf:
        - $ref: '#/components/schemas/SuccessfulResponse'
        - title: Product Details Response
        - properties:
            data:
              $ref: '#/components/schemas/Product'
    ProductSummary:
      title: Product Summary
      type: object
      description: >-
        This is the summary view of a Product object that is returned in the
        `/products` endpoint
      properties:
        uuid:
          type: string
          description: UUID of product
          examples:
            - d5a03ea2-e06e-5d01-84b7-94530b1059f7
        updatedAt:
          type: string
          description: last update date/time to product
          examples:
            - '2020-03-13 17:31:00'
        title:
          type: string
          description: Title of product. Always in English
          examples:
            - Universal Studios Singapore E-ticket (Test)
        titleTranslated:
          type: string
          description: Title of product on requested language
          examples:
            - 新加坡环球影城电子门票（测试）
        validFrom:
          type:
            - string
            - 'null'
          description: Start date for product availability (or null when no limit)
          default: 'null'
          examples:
            - '2024-01-01'
        validThrough:
          type:
            - string
            - 'null'
          description: End date if product availability (or null when no limit)
          default: 'null'
          examples:
            - '2024-02-01'
        basePrice:
          type: number
          description: Base price of product
          examples:
            - 69.13
        typeName:
          type: string
          description: Type of product
          examples:
            - Attraction
        typeUuid:
          type: string
          description: Type UUID
          examples:
            - d3c54653-dd05-598f-b193-f6683d1064ab
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
          description: HATEOAS links
    ProductType:
      description: The full ProductType Details information object
      type: object
      properties:
        uuid:
          type: string
          description: UUID of product-type
          examples:
            - d11b9919-4da2-5a4c-bcea-c3b9f688cc62
        title:
          type: string
          description: Title of product type, always in English
          examples:
            - River Safari Admission with Two Boat Rides
        titleTranslated:
          type: string
          description: Title of product type translated on requested language
          examples:
            - River Safari Admission with Two Boat Rides
        description:
          type: string
          description: Description of product type, always in English
          examples:
            - description.... descriptions....
        descriptionTranslated:
          type: string
          description: Description of product translated on requested language
          examples:
            - descriptions...descriptions....
        durationDays:
          type: integer
          description: Duration of activity in days
          contentEncoding: int32
          examples:
            - 0
        durationHours:
          type: integer
          description: Duration of activity in hours
          contentEncoding: int32
          examples:
            - 8
        durationMinutes:
          type: integer
          description: Duration of activity in minutes
          contentEncoding: int32
          examples:
            - 0
        daysInAdvance:
          type:
            - integer
            - 'null'
          description: How many days in advance booking can be made. NULL if not applicable
          contentEncoding: int32
          examples:
            - 1
        cutOffTime:
          type:
            - string
            - 'null'
          description: Booking can't be made after this time. NULL if not applicable
          examples:
            - '17:00'
        firstAvailabilityDate:
          type: string
          description: >-
            First date that is available for booking. 'False' if there is no
            availability date **Use calendar endpoint to check availability**
          examples:
            - '2024-01-20'
          deprecated: true
        isNonRefundable:
          type: boolean
          description: Product type non-refundable true/false
          examples:
            - true
        allowAdults:
          type: boolean
          description: >-
            Is an adult allowed to book this product type true/false. **Use the
            ticketTypes object for this information**
          deprecated: true
          examples:
            - true
        minPax:
          type:
            - integer
            - 'null'
          description: >-
            Minimum number of adults. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 1
        maxPax:
          type:
            - integer
            - 'null'
          description: >-
            Maximum number of adults. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 10
        minAdultAge:
          type:
            - integer
            - 'null'
          description: >-
            Minimum age allowed for an adult. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 13
        maxAdultAge:
          type:
            - integer
            - 'null'
          description: >-
            Maximum age allowed for an adult. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 60
        hasChildPrice:
          type: boolean
          description: Does product has child price
          deprecated: true
          examples:
            - true
        allowChildren:
          type: boolean
          description: Is a child allowed to book this product type
          examples:
            - true
        minChildren:
          type:
            - integer
            - 'null'
          description: >-
            Minimum number of children or null when not allowed. NULL if not
            applicable. **Use the ticketTypes object for this information**
          contentEncoding: int32
          deprecated: true
          examples:
            - 0
        maxChildren:
          type:
            - integer
            - 'null'
          deprecated: true
          description: >-
            Maximum number of children or null when not allowed. NULL if not
            applicable. **Use the ticketTypes object for this information**
          contentEncoding: int32
          examples:
            - 10
        minChildAge:
          type:
            - integer
            - 'null'
          description: >-
            Minimum age allowed for a child. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 6
        maxChildAge:
          type:
            - integer
            - 'null'
          description: >-
            Maximum age allowed for a child. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 12
        allowSeniors:
          type: boolean
          description: >-
            Is a senior allowed to book this product type. **Use the ticketTypes
            object for this information**
          deprecated: true
          examples:
            - true
        minSeniors:
          type:
            - integer
            - 'null'
          description: >-
            Minimum number of seniors. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 0
        maxSeniors:
          type:
            - integer
            - 'null'
          description: >-
            Maximum number of senior. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 10
        minSeniorAge:
          type:
            - integer
            - 'null'
          description: >-
            Minimum age allowed for a senior. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 61
        maxSeniorAge:
          type:
            - integer
            - 'null'
          description: >-
            Maximum age allowed for a senior. NULL if not applicable. **Use the
            ticketTypes object for this information**
          deprecated: true
          contentEncoding: int32
          examples:
            - 90
        allowInfant:
          type: boolean
          description: >-
            Is an infant allowed for this product type (there is no pricing for
            infants!)
          examples:
            - true
        minInfantAge:
          type:
            - integer
            - 'null'
          description: Minimum age allowed for an infant
          contentEncoding: int32
          examples:
            - 0
        maxInfantAge:
          type:
            - integer
            - 'null'
          description: Maximum age allowed for an infant
          contentEncoding: int32
          examples:
            - 2
        maxGroup:
          type:
            - integer
            - 'null'
          description: >-
            Maximum number of group: sum of adults, children and senior or null
            when not applicable
          contentEncoding: int32
          examples:
            - 5
        minGroup:
          type:
            - integer
            - 'null'
          description: >-
            Minimum number of group: sum of adults, children and senior or null
            when not applicable
          contentEncoding: int32
          examples:
            - 2
        instantConfirmation:
          type: boolean
          description: >-
            TRUE then confirmed booking this product should return new Booking
            status = approved, but if we're out of stock of e-tickets it can
            still return a 'Waiting' status
          examples:
            - true
        nonInstantVoucher:
          type: boolean
          description: TRUE = voucher needs manual processing
          examples:
            - false
        directAdmission:
          type: boolean
          description: >-
            TRUE, the voucher allows direct admission, otherwise customer needs
            to redeem vouchers. Information about voucher redemption is showed
            in voucherUse and voucherRedemptionAddress
          examples:
            - true
        voucherUse:
          type:
            - string
            - 'null'
          description: Instruction on how to use the voucher
          default: 'null'
          examples:
            - instruction..instruction....
        voucherUseTranslated:
          type:
            - string
            - 'null'
          description: voucherUser translated on request language
          default: 'null'
          examples:
            - how to use....how to use....
        voucherRedemptionAddress:
          type:
            - string
            - 'null'
          description: Voucher redemption address if client needs to redeem a voucher.
          default: 'null'
          examples:
            - redeem here....redeem here....
        voucherRedemptionAddressTranslated:
          type:
            - string
            - 'null'
          description: voucherRedemptionAddress translated on requested language.
          default: 'null'
          examples:
            - redeem here...redeem here....
        voucherRequiresPrinting:
          type: boolean
          description: >-
            TRUE voucher needs to be printed. Otherwise, it can be presented eg.
            on mobile device
          examples:
            - false
        meetingTime:
          type:
            - string
            - 'null'
          description: Meeting time
          default: 'null'
          examples:
            - '13:00'
        meetingAddress:
          type:
            - string
            - 'null'
          description: Meeting location address
          default: 'null'
          examples:
            - This address...this address
        meetingLocation:
          type:
            - string
            - 'null'
          description: Instructions about meeting location
          default: 'null'
          examples:
            - Meet here....meet here...
        meetingLocationTranslated:
          type:
            - string
            - 'null'
          description: Translated version of meetingLocation on requested language
          default: 'null'
          examples:
            - Meet here....meet here....
        cancellationPolicies:
          type: array
          items:
            type: object
          description: Cancellation Policies only applicable for refundable product
          examples:
            - - numberOfDays: 2
                numberOfHours: 48
                refundPercentage: 100
                cancellationFeePercentage: 0
                serviceFee: 6.45
                serviceFeePerBooking: true
                serviceFeeCurrency: SGD
              - numberOfDays: 1
                numberOfHours: 24
                refundPercentage: 10
                cancellationFeePercentage: 90
                serviceFee: 6.45
                serviceFeePerBooking: true
                serviceFeeCurrency: SGD
        cancellationPolicySummary:
          type:
            - string
            - 'null'
          description: Summary of Cancellation Policies for refundable product
          examples:
            - >-
              Cancellation of at least 48 hrs before arrival: 100%
              refund\nCancellation between 48 hrs and 24 hrs before arrival: 10%
              refund\nExtra cancellation or refund fees may apply. Any
              cancellations falling outside of the above policy are strictly
              non-refundable
        recommendedMarkup:
          type:
            - number
            - 'null'
          description: >-
            Recommended markup to adult prices if you want to match with BMG's
            recommended prices (RRP). Null if not applicable. **Use either the
            calendar endpoint or price-list endpoint to check pricing**
          examples:
            - 66.67
          deprecated: true
        childRecommendedMarkup:
          type:
            - number
            - 'null'
          description: >-
            Recommended markup for child prices if you want to match with BMG's
            recommended prices (RRP). Null if not applicable. **Use either the
            calendar endpoint or price-list endpoint to check pricing**
          examples:
            - 66.67
          deprecated: true
        seniorRecommendedMarkup:
          type:
            - number
            - 'null'
          description: >-
            Recommended markup for senior prices if you want to match with BMG's
            recommended prices (RRP). Null if not applicable. **Use either the
            calendar endpoint or price-list endpoint to check pricing**
          examples:
            - 66.67
          deprecated: true
        adultParityPrice:
          type:
            - number
            - 'null'
          description: >-
            Minimal retail price for adult. Null if not applicable. **Use either
            the calendar endpoint or price-list endpoint to check pricing**
          examples:
            - 60
          deprecated: true
        childParityPrice:
          type:
            - number
            - 'null'
          description: >-
            Minimal retail price for child. Null if not applicable. **Use either
            the calendar endpoint or price-list endpoint to check pricing**
          examples:
            - 60
          deprecated: true
        seniorParityPrice:
          type:
            - number
            - 'null'
          description: >-
            Minimal retail price for senior. Null if not applicable. **Use
            either the calendar endpoint or price-list endpoint to check
            pricing**
          examples:
            - 60
          deprecated: true
        adultGateRatePrice:
          type:
            - number
            - 'null'
          description: >-
            The rate that an adult get directly at the attraction website or
            gate. Null if not applicable. **Use either the calendar endpoint or
            price-list endpoint to check pricing**
          examples:
            - 80
          deprecated: true
        childGateRatePrice:
          type:
            - number
            - 'null'
          description: >-
            The rate that a child get directly at the attraction website or
            gate. Null if not applicable. **Use either the calendar endpoint or
            price-list endpoint to check pricing**
          examples:
            - 80
          deprecated: true
        seniorGateRatePrice:
          type:
            - number
            - 'null'
          description: >-
            The rate that a senior get directly at the attraction website or
            gate. Null if not applicable. **Use either the calendar endpoint or
            price-list endpoint to check pricing**
          examples:
            - 80
          deprecated: true
        ticketTypes:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/TicketTypes'
          description: List of all ticket types for this product type
          examples:
            - - type: adult
                label: Adult
                allowed: true
                min: 1
                max: 60
                minAge: 13
                maxAge: 59
                recommendedMarkup: 66.67
                parityPrice: 60
                gateRatePrice: 80
              - type: child
                label: Child
                allowed: true
                min: 0
                max: 20
                minAge: 3
                maxAge: 12
                recommendedMarkup: 66.67
                parityPrice: 60
                gateRatePrice: 80
              - type: youth
                label: Youth
                allowed: false
                min: null
                max: null
                minAge: null
                maxAge: null
                recommendedMarkup: null
                parityPrice: null
                gateRatePrice: null
              - type: infant
                label: Infant
                allowed: true
                min: null
                max: null
                minAge: 0
                maxAge: 2
                recommendedMarkup: null
                parityPrice: null
                gateRatePrice: null
              - type: senior
                label: Senior
                allowed: true
                min: 0
                max: 10
                minAge: 61
                maxAge: 90
                recommendedMarkup: 66.67
                parityPrice: 60
                gateRatePrice: 80
        validity:
          type: object
          description: 'Four validity types of the e-tickets/vouchers currently available:'
          examples:
            - type: only_visit_date
              days: null
              date: null
              hasBatchValidityDate: false
        timeslots:
          type: array
          items:
            type: object
          description: >-
            Available timeslots for product, might be null. If the ProductType
            has timeslots, the timeslotUUID of the product is REQUIRED in Check
            a Booking and Create a new booking methods
          examples:
            - - uuid: f363ec82-0268-4907-97e7-48b2b0f9f386
                startTime: '16:00:00'
                endTime: '16:30:00'
              - uuid: 8e995a9f-ce4c-4433-a850-f946e8e65c76
                startTime: '16:30:00'
                endTime: '17:00:00'
              - uuid: dab5c5a2-2c01-4cf1-9624-d57294d384e6
                startTime: '17:00:00'
                endTime: '17:30:00'
              - uuid: c660d141-40df-585e-93dd-8eed21657ddf
                startTime: '17:30:00'
                endTime: '18:00:00'
              - uuid: 1b1c747e-ad85-581f-942f-0fc8e6b0f2cf
                startTime: '18:00:00'
                endTime: '18:30:00'
              - uuid: b2507380-1147-5748-bd82-6dcbe27d7e5e
                startTime: '18:30:00'
                endTime: '19:00:00'
              - uuid: c25d6a39-8c49-505e-b34b-27921527a5b8
                startTime: '19:00:00'
                endTime: '19:30:00'
              - uuid: 347d9351-d2d5-497b-8525-9ce48a3472be
                startTime: '19:30:00'
                endTime: '20:00:00'
              - uuid: 71c39163-5094-4a9a-9187-20b66637e6c5
                startTime: '20:00:00'
                endTime: '20:30:00'
        timezone:
          type: string
          description: Timezone of the product type
          examples:
            - Europe/Berlin
        options:
          type: object
          $ref: '#/components/schemas/ProductTypeOptions'
          description: Booking options
          examples:
            - perBooking:
                - uuid: ef821931-a865-42bb-bfb4-361b93b0e646
                  name: Flight Number
                  nameTranslated: Flight Number
                  description: ''
                  descriptionTranslated: ''
                  required: true
                  addOn: false
                  formatRegex: ^[A-Z0-9][A-Z0-9][0-9]{0,4}$
                  inputType: 14
                  minNumber: null
                  maxNumber: null
                  validFrom: null
                  validTo: null
                  price: null
                - uuid: 1e125fd0-9319-4140-999e-6aeefd12ce1a
                  name: Airport Name
                  nameTranslated: Airport Name
                  description: ''
                  descriptionTranslated: ''
                  required: true
                  addOn: false
                  formatRegex: null
                  inputType: 4
                  minNumber: null
                  maxNumber: null
                  validFrom: null
                  validTo: null
                  price: null
                - uuid: fb42877b-b912-40ae-9e53-b2c25294ea76
                  name: Arrival Date/Time
                  nameTranslated: Arrival Date/Time
                  description: ''
                  descriptionTranslated: ''
                  required: true
                  addOn: false
                  formatRegex: null
                  inputType: 11
                  minNumber: null
                  maxNumber: null
                  validFrom: null
                  validTo: null
                  price: null
                - uuid: a867ff62-1d3d-4378-9283-1a97804e8ac5
                  name: Drop-off Address
                  nameTranslated: Drop-off Address
                  description: ''
                  descriptionTranslated: ''
                  required: true
                  addOn: false
                  formatRegex: null
                  inputType: 9
                  minNumber: null
                  maxNumber: null
                  validFrom: null
                  validTo: null
                  price: null
              perPax: []
        hasOptions:
          type: boolean
          description: true/false, indicate whether product type has booking options.
          examples:
            - true
        hasFileUploadOptions:
          type: boolean
          description: >-
            true/false, indicate whether product type has booking option that
            require file upload
          examples:
            - false
        hasPriceOptions:
          type: boolean
          description: >-
            true/false, indicate whether product type has booking option which
            has a price.
          examples:
            - false
        hasRequiredPriceOptions:
          type: boolean
          description: >-
            true/false, indicate whether product type has booking option which
            has a price and required is TRUE
          examples:
            - false
        isBmgVoucher:
          type: boolean
          description: true/false, indicate whether product type using BMG own voucher code
          examples:
            - false
        isSrvEligible:
          type: boolean
          description: >-
            true/false. indicate whether this product type is available for
            Singapore Rediscover Vouchers Promo.
          examples:
            - false
          deprecated: true
    ProductTypeAvailabilityResponse:
      type: object
      x-tags:
        - Responses
      properties:
        data:
          type: object
          $ref: '#/components/schemas/AvailabilityDate'
    ProductTypeCalendarResponse:
      type: object
      x-tags:
        - Responses
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/AvailabilityDate'
    ProductTypeDetailsResponse:
      x-tags:
        - Responses
      properties:
        data:
          type: object
          $ref: '#/components/schemas/ProductType'
    ProductTypeOption:
      description: A booking option that is a available for a ProductType
      required:
        - uuid
        - name
        - nameTranslated
        - description
        - descriptionTranslated
        - required
        - addOn
        - formatRegex
        - inputType
        - minNumber
        - maxNumber
        - validFrom
        - validTo
      type: object
      properties:
        uuid:
          type: string
        name:
          type: string
        nameTranslated:
          type: string
        description:
          type: string
        descriptionTranslated:
          type: string
        required:
          type: boolean
          examples:
            - true
        addOn:
          type: boolean
          examples:
            - false
        formatRegex:
          type: string
        inputType:
          type: integer
          contentEncoding: int32
          examples:
            - 4
        minNumber:
          type: integer
          contentEncoding: int32
        maxNumber:
          type: integer
          contentEncoding: int32
        validFrom:
          type: string
        validTo:
          type: string
    ProductTypeOptions:
      type: object
      properties:
        perBooking:
          type: array
          items:
            $ref: '#/components/schemas/ProductTypeOption'
          description: Options per booking array
          minItems: 0
        perPax:
          type: array
          items:
            $ref: '#/components/schemas/ProductTypeOption'
          description: Options that are required/available for each person on the booking
          minItems: 0
    ProductTypeSummary:
      description: >-
        Short Summary of Product Type displayed when fetching a list of
        available product types
      properties:
        uuid:
          type: string
          examples:
            - efedb1fc-f150-5eaa-bf6e-fc202f6114bd
        title:
          type: string
          examples:
            - Universal Studios Singapore E-ticket
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
    ProductTypesForProductResponse:
      type: object
      x-tags:
        - Responses
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ProductTypeSummary'
    RateDetail:
      title: Rate Detail
      type: object
      properties:
        amount:
          type: number
          example: 98
        category:
          type: string
          example: adult
        currency:
          type: string
          example: SGD
        format:
          type: string
          example: S$98.00
        meta:
          oneOf:
            - type: object
            - type: array
          example:
            markup: 16.8639
        type:
          $ref: '#/components/schemas/PriceTypes'
          example: retailPrice
    State:
      title: State
      required:
        - name
        - uuid
        - cities
      type: object
      properties:
        name:
          type: string
          examples:
            - Bujumbura Mairie Province
        uuid:
          type: string
          examples:
            - 5ddcb6cd-aa8f-54dc-a200-dca71c283576
        cities:
          allOf:
            - $ref: '#/components/schemas/Cities'
            - examples:
                - data:
                    - name: Bujumbura
                      uuid: 839bc146-4850-55de-90ed-ad0392dabfc8
    States:
      title: States
      required:
        - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/State'
          description: ''
          examples:
            - - name: Bujumbura Mairie Province
                uuid: 5ddcb6cd-aa8f-54dc-a200-dca71c283576
                cities:
                  data:
                    - name: Bujumbura
                      uuid: 839bc146-4850-55de-90ed-ad0392dabfc8
      description: State details
      examples:
        - data:
            - name: Bujumbura Mairie Province
              uuid: 5ddcb6cd-aa8f-54dc-a200-dca71c283576
              cities:
                data:
                  - name: Bujumbura
                    uuid: 839bc146-4850-55de-90ed-ad0392dabfc8
    SubCategory:
      title: Sub-Category
      required:
        - name
        - uuid
      type: object
      properties:
        name:
          type: string
          description: Subcategory name
          examples:
            - Water
        uuid:
          type: string
          description: UUID of subcategory
          examples:
            - dbaff91a-1960-538b-9eba-e86a1971962f
    SuccessfulResponse:
      type: object
      properties:
        data:
          type: object
          description: The main payload of the response.
        timestamp:
          type: string
          format: date-time
          description: The timestamp when the response was generated.
      required:
        - data
        - timestamp
    TicketType:
      type: object
      properties:
        quantity:
          type: integer
        type:
          type: string
      required:
        - quantity
        - type
    TicketTypes:
      title: Ticket Types
      required:
        - type
        - label
        - allowed
        - min
        - max
        - minAge
        - maxAge
        - recommendedMarkup
        - parityPrice
        - gateRatePrice
      type: object
      properties:
        type:
          type: string
          examples:
            - adult
        label:
          type: string
          examples:
            - Adult
        allowed:
          type: boolean
          examples:
            - true
        min:
          type: integer
          contentEncoding: int32
          examples:
            - 1
        max:
          type: integer
          contentEncoding: int32
          examples:
            - 10
        minAge:
          type: integer
          contentEncoding: int32
          examples:
            - 13
        maxAge:
          type: integer
          contentEncoding: int32
          examples:
            - 60
        recommendedMarkup:
          type: number
          examples:
            - 22.58
          deprecated: true
        parityPrice:
          type: number
          examples:
            - 76
          deprecated: true
        gateRatePrice:
          type: integer
          contentEncoding: int32
          examples:
            - 78
          deprecated: true
    TimeSlot:
      title: Product Type Timeslot
      required:
        - availability
        - uuid
        - startTime
        - endTime
      type: object
      properties:
        availability:
          type:
            - array
            - 'null'
          items:
            type: object
          description: Ticket availability information per timeslot. Null if no information
          examples:
            - - category: adult
                quantity: 168
                type: shared
              - category: child
                quantity: 168
                type: shared
        uuid:
          type: string
          examples:
            - 5d511911-6704-4ae0-bb00-c13e5b0cf969
        startTime:
          type: string
          examples:
            - '13:00:00'
        endTime:
          type: string
          examples:
            - '19:00:00'
    User:
      title: User
      required:
        - name
        - email
        - uuid
        - continueUrl
        - notifyUrl
        - defaultPagination
        - defaultSortBy
        - defaultCurrencyUuid
        - defaultCurrencyCode
        - defaultLanguageUuid
        - defaultLanguageCode
        - walletBalance
        - walletBlockedBalance
        - walletAvailableBalance
        - walletAlertValue
      type: object
      properties:
        name:
          type: string
          examples:
            - BeMyGuest
        email:
          type: string
          examples:
            - example@bemyguest.com.sg
        uuid:
          type: string
          examples:
            - 30d23074-959f-4179-84c7-4787349828a1
        continueUrl:
          type: string
        notifyUrl:
          type: string
        defaultPagination:
          type: integer
          contentEncoding: int32
          examples:
            - 50
        defaultSortBy:
          type: string
          examples:
            - date
        defaultCurrencyUuid:
          type: string
        defaultCurrencyCode:
          type: string
        defaultLanguageUuid:
          type: string
          examples:
            - 790395c0-23b6-5dd9-8a6b-ca61b95dcfd4
        defaultLanguageCode:
          type: string
          examples:
            - EN
        walletBalance:
          type: number
          examples:
            - 18941.98
        walletBlockedBalance:
          type: integer
          contentEncoding: int32
          examples:
            - -10206
        walletAvailableBalance:
          type: number
          examples:
            - 8735.98
        walletAlertValue:
          type: integer
          contentEncoding: int32
          examples:
            - 0
      examples:
        - name: BeMyGuest
          email: example@bemyguest.com.sg
          uuid: 30d23074-959f-4179-84c7-4787349828a1
          continueUrl: ''
          notifyUrl: ''
          defaultPagination: 50
          defaultSortBy: date
          defaultCurrencyUuid: 'null'
          defaultCurrencyCode: 'null'
          defaultLanguageUuid: 790395c0-23b6-5dd9-8a6b-ca61b95dcfd4
          defaultLanguageCode: EN
          walletBalance: 18941.98
          walletBlockedBalance: -10206
          walletAvailableBalance: 8735.98
          walletAlertValue: 0
    ValidityProduct:
      title: Validity Product
      required:
        - type
        - days
        - date
        - hasBatchValidityDate
      type: object
      properties:
        type:
          type: string
          examples:
            - only_visit_date
        days:
          type: string
        date:
          type: string
        hasBatchValidityDate:
          type: boolean
          examples:
            - false
    WebhookProductAvailable:
      x-tags:
        - Webhooks
      type: object
      properties:
        type:
          type: string
          example: product_available
        data:
          $ref: '#/components/schemas/Product'
        signature:
          type: string
        timestamp:
          type: string
          format: date-time
    WebhookProductUpdated:
      x-tags:
        - Webhooks
      type: object
      properties:
        type:
          type: string
          example: product_updated
        data:
          $ref: '#/components/schemas/Product'
        updatedFields:
          type: array
          items:
            type: string
        signature:
          type: string
        timestamp:
          type: string
          format: date-time
    WebhookProductTypeAvailable:
      x-tags:
        - Webhooks
      type: object
      properties:
        productUuid:
          type: string
          format: uuid
        productTypeUuid:
          type: string
          format: uuid
        endpoint:
          type: string
        type:
          type: string
          example: product_type_available
        timestamp:
          type: string
          format: date-time
        signature:
          type: string
    WebhookProductTypeNotAvailable:
      x-tags:
        - Webhooks
      type: object
      properties:
        productUuid:
          type: string
          format: uuid
        productTypeUuid:
          type: string
          format: uuid
        type:
          type: string
          example: product_type_not_available
        timestamp:
          type: string
          format: date-time
        signature:
          type: string
    WebhookProductTypeContentUpdated:
      x-tags:
        - Webhooks
      type: object
      properties:
        type:
          type: string
          example: product_type_content_updated
        data:
          $ref: '#/components/schemas/ProductType'
        updatedFields:
          type: array
          items:
            type: string
        signature:
          type: string
        timestamp:
          type: string
          format: date-time
    WebhookBookingStatusUpdated:
      x-tags:
        - Webhooks
      type: object
      properties:
        bookingUuid:
          type: string
          format: uuid
        previousStatus:
          type: string
        currentStatus:
          type: string
        type:
          type: string
          example: booking_status_updated
        timestamp:
          type: string
          format: date-time
        signature:
          type: string
    WebhookBookingDataUpdated:
      x-tags:
        - Webhooks
      type: object
      properties:
        type:
          type: string
          example: booking_data_updated
        bookingUuid:
          type: string
          format: uuid
        data:
          $ref: '#/components/schemas/BookingDetails'
        updatedFields:
          type: array
          items:
            type: string
        signature:
          type: string
        timestamp:
          type: string
          format: date-time
    WebhookBookingTicketsUpdated:
      x-tags:
        - Webhooks
      type: object
      properties:
        bookingUuid:
          type: string
          format: uuid
        data:
          type: array
          items:
            $ref: '#/components/schemas/BookingVoucher'
        type:
          type: string
          example: booking_tickets_updated
        timestamp:
          type: string
          format: date-time
        signature:
          type: string
  examples:
    MethodNotAllowed:
      value:
        code: GEN-METHOD-NOT-ALLOWED
        http_code: 405
        message: Method Not Allowed
    Unauthorized:
      value:
        code: GEN-UNAUTHORIZED
        http_code: 401
        message: Unauthorized
    Forbidden:
      value:
        code: insufficient_balance
        http_code: 403
        message: Wallet balance too low to create a booking.
    NotFound:
      value:
        code: not_found
        http_code: 404
        message: '<Requested Resource> not found, provided UUID: <uuid>'
    PhotoList:
      value:
        - - caption: null
            uuid: 7b15b4a0-c1a6-423f-9447-f6ae7be3bbea
            paths:
              original: >-
                /images/content/original/7b15b4a0-c1a6-423f-9447-f6ae7be3bbea.jpg
              75x50: /images/content/75x50/7b15b4a0-c1a6-423f-9447-f6ae7be3bbea.jpg
              175x112: /images/content/175x112/7b15b4a0-c1a6-423f-9447-f6ae7be3bbea.jpg
              680x325: /images/content/680x325/7b15b4a0-c1a6-423f-9447-f6ae7be3bbea.jpg
              1280x720: >-
                /images/content/1280x720/7b15b4a0-c1a6-423f-9447-f6ae7be3bbea.jpg
              1920x1080: >-
                /images/content/1920x1080/7b15b4a0-c1a6-423f-9447-f6ae7be3bbea.jpg
              2048x1536: null
          - caption: null
            uuid: 948a37f6-c071-4081-a003-d130a74a1c0d
            paths:
              original: >-
                /images/content/original/948a37f6-c071-4081-a003-d130a74a1c0d.jpg
              75x50: /images/content/75x50/948a37f6-c071-4081-a003-d130a74a1c0d.jpg
              175x112: /images/content/175x112/948a37f6-c071-4081-a003-d130a74a1c0d.jpg
              680x325: /images/content/680x325/948a37f6-c071-4081-a003-d130a74a1c0d.jpg
              1280x720: >-
                /images/content/1280x720/948a37f6-c071-4081-a003-d130a74a1c0d.jpg
              1920x1080: null
              2048x1536: null
          - caption: null
            uuid: dc421b4f-ca08-4227-9fbb-f46f89dfa261
            paths:
              original: >-
                /images/content/original/dc421b4f-ca08-4227-9fbb-f46f89dfa261.jpg
              75x50: /images/content/75x50/dc421b4f-ca08-4227-9fbb-f46f89dfa261.jpg
              175x112: /images/content/175x112/dc421b4f-ca08-4227-9fbb-f46f89dfa261.jpg
              680x325: /images/content/680x325/dc421b4f-ca08-4227-9fbb-f46f89dfa261.jpg
              1280x720: >-
                /images/content/1280x720/dc421b4f-ca08-4227-9fbb-f46f89dfa261.jpg
              1920x1080: >-
                /images/content/1920x1080/dc421b4f-ca08-4227-9fbb-f46f89dfa261.jpg
              2048x1536: null
    BookingList:
      value:
        data:
          - code: HRX1SL5
            createdAt: '2015-06-22 10:32:50'
            links:
              - href: >-
                  https://api.bemyguest.com.sg/v2/bookings/0b00b3ae-4118-5a78-be9f-39fb27561e13
                method: GET
                rel: self
              - href: >-
                  https://api.bemyguest.com.sg/v2/product-types/2e8c11d8-dec8-5640-9c79-9f0816d4ba8c
                method: GET
                rel: productType
            partnerReference: test.1
            status: canceled
            updatedAt: '2018-05-17 06:15:04'
            uuid: 0b00b3ae-4118-5a78-be9f-39fb27561e13
          - code: 47EGTVP
            createdAt: '2015-06-22 10:39:16'
            links:
              - href: >-
                  https://api.bemyguest.com.sg/v2/bookings/a14b064e-a2ea-5c2b-b5db-ac7ce47ab991
                method: GET
                rel: self
              - href: >-
                  https://api.bemyguest.com.sg/v2/product-types/2e8c11d8-dec8-5640-9c79-9f0816d4ba8c
                method: GET
                rel: productType
            partnerReference: test.2
            status: canceled
            updatedAt: '2018-05-17 06:15:04'
            uuid: a14b064e-a2ea-5c2b-b5db-ac7ce47ab991
        links:
          - href: https://docs.bemyguest.com.sg/openapi/bookings
            method: GET
            rel: docs
        meta:
          pagination:
            count: 2
            current_page: 1
            links:
              next: https://api.bemyguest.com.sg/v2/bookings?page=2
            per_page: 2
            total: 109
            total_pages: 55
        timestamp: '2025-08-18T12:18:09.480+08:00'
    BookingDetails:
      value:
        data:
          adults: 4
          amountBreakdown:
            - name: adult
              price: '31.52'
              quantity: 4
          arrivalDate: '2025-08-08'
          cancellationRequestAt: null
          cancellationRequestStatus: none
          cancellationStatus: null
          children: 0
          code: CDAQ91W
          completedAt: '2025-08-08 13:04:07'
          createdAt: '2025-08-08 13:01:57'
          currencyCode: SGD
          currencyUuid: cd15153e-dfd1-5039-8aa3-115bec58e86e
          email: example@bemyguest.com.sg
          firstName: Example
          lastName: Customer
          links:
            - href: >-
                https://api.bemyguest.com.sg/v2/bookings/5139352b-b761-4275-951d-1d47f05e9b04
              method: GET
              rel: self
            - href: >-
                https://api.bemyguest.com.sg/v2/bookings/5139352b-b761-4275-951d-1d47f05e9b04/vouchers
              method: GET
              rel: vouchers
          options: []
          partnerReference: BMG90700965
          phone: '+650123456'
          productTypeTitle: Example Product Type Title
          productTypeTitleTranslated: Example Product Type Title
          productTypeUuid: ec8906df-9d13-4c78-a358-cb756fce31fc
          refundAmount: null
          refundDate: null
          refundTransaction: null
          salutation: Mr.
          seniors: 0
          status: approved
          ticketTypes:
            - quantity: 4
              type: adult
            - quantity: 0
              type: child
            - quantity: 0
              type: senior
          timeSlot: 14:00 - 14:00
          totalAmount: 126.08
          updatedAt: '2025-08-08 13:04:07'
          uuid: 8139352b-b761-4275-951d-1d47f05e9b04
    ProductList:
      value:
        data:
          - basePrice: 18.93
            links:
              - href: >-
                  https://api.bemyguest.com.sg/v2/products/52d1b30f-9314-432a-9ec8-406b525a4f5c
                method: GET
                rel: self
              - href: >-
                  https://api.bemyguest.com.sg/v2/products/52d1b30f-9314-432a-9ec8-406b525a4f5c/product-types
                method: GET
                rel: productTypes
            title: Hong Kong Disneyland Park Ticket
            titleTranslated: Hong Kong Disneyland Park Ticket
            typeName: Attraction
            typeUuid: d3c54653-dd05-598f-b193-f6683d1064ab
            updatedAt: '2025-08-18 08:00:09'
            uuid: 52d1b30f-9314-432a-9ec8-406b525a4f5c
            validFrom: null
            validThrough: null
          - basePrice: 25.88
            links:
              - href: >-
                  https://api.bemyguest.com.sg/v2/products/4dd77d8e-043b-4edb-b32a-0776043143ad
                method: GET
                rel: self
              - href: >-
                  https://api.bemyguest.com.sg/v2/products/4dd77d8e-043b-4edb-b32a-0776043143ad/product-types
                method: GET
                rel: productTypes
            title: MINT Museum of Toys Ticket
            titleTranslated: MINT Museum of Toys Ticket
            typeName: Attraction
            typeUuid: d3c54653-dd05-598f-b193-f6683d1064ab
            updatedAt: '2025-08-11 08:02:32'
            uuid: 4dd77d8e-043b-4edb-b32a-0776043143ad
            validFrom: null
            validThrough: null
        links:
          - href: https://docs.bemyguest.com.sg/openapi/products
            method: GET
            rel: docs
        meta:
          pagination:
            count: 2
            current_page: 1
            links:
              next: >-
                https://api.bemyguest.com.sg/v2/products?per_page=2&currency=10&page=2
            per_page: 2
            total: 2740
            total_pages: 1370
        timestamp: '2025-08-18T12:04:54.742+08:00'
    ProductDetails:
      value:
        data:
          additionalInfo: "IMPORTANT NOTICE:\r\n- Adults may only visit the attraction when accompanied by a child. Entry will be denied otherwise, and no refunds will be issued.\r\n\r\nChild policy:\r\n- Children under 2 years are free of charge when accompanied by a paying adult. \r\n- Children below 8 years must be accompanied by a paying adult at all times.\r\n- Children between 8 to 17 years are allowed to enter without an adult but must have an adult present upon entrance and exit of the attraction."
          additionalInfoTranslated: "IMPORTANT NOTICE:\r\n- Adults may only visit the attraction when accompanied by a child. Entry will be denied otherwise, and no refunds will be issued.\r\n\r\nChild policy:\r\n- Children under 2 years are free of charge when accompanied by a paying adult. \r\n- Children below 8 years must be accompanied by a paying adult at all times.\r\n- Children between 8 to 17 years are allowed to enter without an adult but must have an adult present upon entrance and exit of the attraction."
          address: >-
            KidZania Kuala Lumpur Mutiara Damansara Petaling Jaya Selangor
            Malaysia
          airportPickup: false
          allProductTypesHaveOptions: false
          audioHeadsetLanguages: []
          averageDelivery: 8
          basePrice: 17.48
          businessHoursFrom: '10:00'
          businessHoursTo: '18:00'
          categories:
            - name: Themepark
              uuid: 9384f408-a941-58ba-b958-4a814c23d1bc
          covid19Measures: null
          covid19MeasuresTranslated: null
          currency:
            code: SGD
            symbol: S$
            uuid: cd15153e-dfd1-5039-8aa3-115bec58e86e
          description: >-
            KidZania Kuala Lumpur is an interactive indoor theme park, where
            children can experience real-life jobs in a role-playing
            environment. The child-geared activity centre comes complete with a
            functioning economy, paved streets, moving vehicles, and buildings.
            KidZania offers around 70 role-playing activities where they'll
            learn all about jobs, money and the real world while developing life
            skills that simply cannot be taught in the classroom.
          descriptionTranslated: >-
            KidZania Kuala Lumpur is an interactive indoor theme park, where
            children can experience real-life jobs in a role-playing
            environment. The child-geared activity centre comes complete with a
            functioning economy, paved streets, moving vehicles, and buildings.
            KidZania offers around 70 role-playing activities where they'll
            learn all about jobs, money and the real world while developing life
            skills that simply cannot be taught in the classroom.
          guideLanguages: []
          hasOptions: false
          highlights: >-
            Teach your kids about the real world of business, the economy, and
            responsibilities in a fun and interactive way.

            Step into a kid-centric theme park, offering a range of role-playing
            opportunities for your child.

            Immerse your kids in grown-up responsibilities and the functioning
            of a modern city.
          highlightsTranslated: >-
            Teach your kids about the real world of business, the economy, and
            responsibilities in a fun and interactive way.

            Step into a kid-centric theme park, offering a range of role-playing
            opportunities for your child.

            Immerse your kids in grown-up responsibilities and the functioning
            of a modern city.
          hotelPickup: false
          isFlatPaxPrice: true
          isSrvEligible: false
          itinerary: null
          itineraryTranslated: null
          latitude: '3.1579860'
          links:
            - href: >-
                https://api.bemyguest.com.sg/v2/products/a9e0c99f-0140-5070-b7e5-c27f46b863d9
              method: GET
              rel: self
            - href: >-
                https://api.bemyguest.com.sg/v2/products/a9e0c99f-0140-5070-b7e5-c27f46b863d9/product-types
              method: GET
              rel: productTypes
            - href: https://docs.bemyguest.com.sg/openapi/products
              method: GET
              rel: docs
          locations:
            - city: Kuala Lumpur
              cityUuid: 93039b61-5798-5ff8-93f1-4af5ff22239c
              country: Malaysia
              countryUuid: 57d665cd-1c86-59bf-a99a-19b10a5ae1ea
              state: Kuala Lumpur
              stateUuid: ab574343-036d-11e5-a2a9-d07e352b4840
          longitude: '101.6137710'
          maxPax: 50
          minPax: 0
          photos:
            - caption: null
              paths:
                1280x720: >-
                  /images/content/1280x720/338ddc70-3220-59bc-bad8-9dc7b6dc8a18.jpg
                175x112: >-
                  /images/content/175x112/338ddc70-3220-59bc-bad8-9dc7b6dc8a18.jpg
                1920x1080: null
                2048x1536: null
                680x325: >-
                  /images/content/680x325/338ddc70-3220-59bc-bad8-9dc7b6dc8a18.jpg
                75x50: /images/content/75x50/338ddc70-3220-59bc-bad8-9dc7b6dc8a18.jpg
                original: >-
                  /images/content/original/338ddc70-3220-59bc-bad8-9dc7b6dc8a18.jpg
              uuid: d445f563-fb23-11e9-9d08-029860b28508
          photosUrl: https://cdn.bemyguest.com.sg
          priceExcludes: null
          priceExcludesTranslated: null
          priceIncludes: Admission
          priceIncludesTranslated: Admission
          reviewAverageScore: 0
          reviewCount: 0
          safety: ''
          safetyTranslated: ''
          title: KidZania Kuala Lumpur Ticket
          titleTranslated: KidZania Kuala Lumpur Ticket
          typeName: Attraction
          typeUuid: d3c54653-dd05-598f-b193-f6683d1064ab
          updatedAt: '2025-08-18 08:02:44'
          uuid: a9e0c99f-0140-5070-b7e5-c27f46b863d3
          validFrom: null
          validThrough: null
          warnings: null
          warningsTranslated: null
          writtenLanguages: []
        timestamp: '2025-08-18T12:04:54.742+08:00'
    UnprocessableEntity-InvalidData:
      value:
        code: invalid_data
        http_code: 422
        message: Arrival date is unavailable. Please choose another one.
    UnprocessableEntity-NoProduct:
      value:
        code: no_product
        http_code: 422
        message: 'ProductType not found, UUID: xxxxx'
    UnprocessableEntity-PaxMismatch:
      value:
        code: no_product
        http_code: 422
        message: >-
          Number of elements in 'perPax' array must be equal to number of
          guests.
    UnprocessableEntity-NotAvailable:
      value:
        code: no_product
        http_code: 422
        message: Product is not available for booking via API
    UnprocessableEntity-PriceMismatch:
      value:
        code: prices_mismatch
        http_code: 422
        message: Arrival date is not available anymore. Please choose another one.
    UnprocessableEntity:
      value:
        errors:
          date_end:
            - The date end must be a date after or equal to date start.
        message: The given data was invalid.
    InvalidArguments:
      value:
        error:
          code: invalid_params
          http_code: 400
          message: 'City not found, provided UUID: 2abdffd'
        links:
          - href: https://docs.bemyguest.com.sg/openapi/products
            method: GET
            rel: docs
        timestamp: '2025-08-15T13:07:59.001+08:00'
    ProductTypeList:
      value:
        data:
          - links:
              - href: >-
                  https://api.bemyguest.com.sg/v2/product-types/80590844-e665-4fdc-843c-ffc6fe893403
                method: GET
                rel: self
              - href: >-
                  https://api.bemyguest.com.sg/v2/product-types/80590844-e665-4fdc-843c-ffc6fe893403/price-lists
                method: GET
                rel: priceLists
              - href: >-
                  https://api.bemyguest.com.sg/v2/products/4dd77d8e-043b-4edb-b32a-0776043143ad
                method: GET
                rel: product
            title: MINT Museum of Toys - Admission with Complimentary Guided Tour
            uuid: 80590844-e665-4fdc-843c-ffc6fe893403
          - links:
              - href: >-
                  https://api.bemyguest.com.sg/v2/product-types/c1483d3d-ec7f-45fc-ae29-acc706b6122e
                method: GET
                rel: self
              - href: >-
                  https://api.bemyguest.com.sg/v2/product-types/c1483d3d-ec7f-45fc-ae29-acc706b6122e/price-lists
                method: GET
                rel: priceLists
              - href: >-
                  https://api.bemyguest.com.sg/v2/products/4dd77d8e-043b-4edb-b32a-0776043143ad
                method: GET
                rel: product
            title: MINT Museum of Toys - Around the World in 60 Minutes Guided Tour
            uuid: c1483d3d-ec7f-45fc-ae29-acc706b6122e
    VoucherList:
      value:
        data:
          - uuid: 8aac1884-fc26-4236-bdc5-cfac8d261ac9
            downloadedAt: null
            generatedAt: '2025-08-08 13:04:06'
            links:
              - href: >-
                  https://api.bemyguest.com.sg/v2/bookings/5139352b-b761-4275-951d-1d47f05e9c05/download-voucher/93da6244-e636-47fa-82dc-2e7a42da2001
              - method: GET
              - rel: download
        meta:
          pagination:
            total: 1
            count: 1
            per_page: 15
            current_page: 1
            total_pages: 1
    AvailabilityDate:
      value:
        data:
          date: '2025-08-20'
          weekday: Wednesday
          cancellationPolicy: []
          currency: a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d
          availability:
            - category: adult
              type: exclusive
              quantity: 40
            - category: child
              type: exclusive
              quantity: 20
          timezone: Asia/Singapore
          options: []
          voucherValidity:
            adults:
              date: '2025-08-20'
            children:
              date: '2025-08-20'
          prices:
            - id: c3d4e5f6-a7b8-9c0d-1e2f-3a4b5c6d7e8f
              rates:
                - type: retailPrice
                  category: adult
                  currency: SGD
                  amount: 36
                  format: S$36.00
                - type: nettPrice
                  category: adult
                  currency: SGD
                  amount: 31.59
                  format: S$31.59
                - type: minimumSellingPrice
                  category: adult
                  currency: SGD
                  amount: 35
                  format: S$35.00
                - type: retailPrice
                  category: child
                  currency: SGD
                  amount: 30
                  format: S$30.00
                - type: nettPrice
                  category: child
                  currency: SGD
                  amount: 25.59
                  format: S$25.59
    AvailabilityPricingCalendar:
      value:
        data:
          - date: '2025-08-20'
            weekday: Wednesday
            cancellationPolicy: []
            currency: a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d
            timeslots:
              - startTime: '09:00'
                endTime: '09:00'
                uuid: b2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e
                availability:
                  - category: adult
                    type: exclusive
                    quantity: 0
                  - category: child
                    type: exclusive
                    quantity: 0
                priceId: c3d4e5f6-a7b8-9c0d-1e2f-3a4b5c6d7e8f
              - startTime: '09:15'
                endTime: '09:15'
                uuid: d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f9a
                availability:
                  - category: adult
                    type: exclusive
                    quantity: 40
                  - category: child
                    type: exclusive
                    quantity: 0
                priceId: c3d4e5f6-a7b8-9c0d-1e2f-3a4b5c6d7e8f
            timezone: Asia/Kuala_Lumpur
            options: []
            voucherValidity:
              adults:
                date: '2025-08-20'
              children:
                date: '2025-08-20'
            prices:
              - id: c3d4e5f6-a7b8-9c0d-1e2f-3a4b5c6d7e8f
                rates:
                  - type: retailPrice
                    category: adult
                    meta:
                      convertedFrom:
                        currency: MYR
                        amount: 118
                        format: RM118.00
                        rate: 3.2924
                    currency: SGD
                    amount: 35.84
                    format: S$35.84
                  - type: nettPrice
                    category: adult
                    meta:
                      convertedFrom:
                        currency: MYR
                        amount: 104
                        format: RM104.00
                        rate: 3.2924
                    currency: SGD
                    amount: 31.59
                    format: S$31.59
    ProductTypeDetails:
      value:
        data:
          adultGateRatePrice: 68
          allowAdults: true
          allowChildren: false
          allowInfant: false
          allowSeniors: false
          cancellationPolicies: []
          cancellationPolicySummary: ''
          childGateRatePrice: null
          childParityPrice: null
          childRecommendedMarkup: null
          cutOffTime: null
          daysInAdvance: null
          description: Enjoy 5% Off for 2nd Pax!
          descriptionTranslated: Enjoy 5% Off for 2nd Pax!
          directAdmission: true
          durationDays: 0
          durationHours: 2
          durationMinutes: 0
          firstAvailabilityDate: '2025-09-01'
          hasChildPrice: false
          hasFileUploadOptions: false
          hasOptions: true
          hasPriceOptions: false
          hasRequiredPriceOptions: false
          instantConfirmation: true
          isBmgVoucher: true
          isNonRefundable: true
          links:
            - href: >-
                https://api.bemyguest.com.sg/v2/product-types/542dc2dc-1fc6-499d-895a-108029cfba41
              method: GET
              rel: self
          maxAdultAge: 99
          maxChildAge: null
          maxChildren: null
          maxGroup: null
          maxInfantAge: null
          maxPax: 2
          maxSeniorAge: null
          maxSeniors: null
          meetingAddress: null
          meetingLocation: Make your own way
          meetingLocationTranslated: Make your own way
          meetingTime: null
          minAdultAge: 13
          minChildAge: null
          minChildren: null
          minGroup: null
          minInfantAge: null
          minPax: 1
          minSeniorAge: null
          minSeniors: null
          nonInstantVoucher: false
          options: []
          maxNumber: null
          minNumber: null
          name: null
          nameTranslated: null
          price: null
          required: true
          uuid: null
          validFrom: null
          validTo: null
  responses:
    ConfigurationResponse:
      description: Successful Configuration Response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ConfigurationResponse'
    ProductsResponse:
      description: Successful Paginated Response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProductListResponse'
          examples:
            success:
              $ref: '#/components/examples/ProductList'
    ProductResponse:
      description: Successful Product Details Response
      content:
        application:json:
          schema:
            $ref: '#/components/schemas/ProductResponse'
          examples:
            success:
              $ref: '#/components/examples/ProductDetails'
    ProductTypesResponse:
      description: Successful Response Listing all Product Types for a Product
      content:
        application:json:
          schema:
            $ref: '#/components/schemas/ProductTypesForProductResponse'
          examples:
            Success:
              $ref: '#/components/examples/ProductTypeList'
    AvailabilityPriceCalendarResponse:
      description: A successful response containing a calendar of pricing and availability.
      headers: {}
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProductTypeCalendarResponse'
          examples:
            Success:
              $ref: '#/components/examples/AvailabilityPricingCalendar'
    AvailabilityDateResponse:
      description: >-
        A successful response containing availability and pricing for a specific
        date
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProductTypeAvailabilityResponse'
          examples:
            Success:
              $ref: '#/components/examples/AvailabilityDate'
    BookingListResponse:
      description: A successful response containing a paginated list of bookings.
      headers: {}
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BookingListResponse'
          examples:
            Success:
              $ref: '#/components/examples/BookingList'
    BookingDetailsResponse:
      description: A successful response containing booking information.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BookingDetailsResponse'
          examples:
            Success:
              $ref: '#/components/examples/BookingDetails'
    BookingVouchersResponse:
      description: >-
        A successful response showing a list of vouchers and download links for
        a booking
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BookingVouchersResponse'
          examples:
            Success:
              $ref: '#/components/examples/VoucherList'
    MethodNotAllowedResponse:
      description: HTTP Method Not Allowed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            MethodNotAllowed:
              $ref: '#/components/examples/MethodNotAllowed'
    NotFoundResponse:
      description: The requested resource(s) could not be found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            NotFound:
              $ref: '#/components/examples/NotFound'
    UnauthorizedResponse:
      description: Not Authorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            MethodNotAllowed:
              $ref: '#/components/examples/Unauthorized'
    UnprocessableResponse:
      description: Request could not be processed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            Unprocessable:
              $ref: '#/components/examples/UnprocessableEntity'
    BadRequestResponse:
      description: Wrong or Invalid Arguments
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            Invalid:
              $ref: '#/components/examples/InvalidArguments'
  requestBodies:
    CreateBookingRequest:
      description: Create Booking Request
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateBookingRequest'
  securitySchemes:
    Authorization:
      type: apiKey
      description: Api Key
      name: X-Authorization
      in: header
security:
  - Authorization: []
tags:
  - name: Products
    description: Endpoints for searching and retrieving product details.
  - name: Product-Types
    description: >-
      Endpoints for retrieving product type information, pricing, and
      availability.
  - name: Bookings
    description: Endpoints for creating and managing bookings.
  - name: Configuration
    description: Endpoints for retrieving API configuration data.
  - name: Requests
    description: Schemas that define requests.
  - name: Responses
    description: Schemas that define API responses.
