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

# Close Booking Ticket

> Closes the ticket and updates the status of the associated booking accordingly.



## OpenAPI

````yaml /public-api.json put /bookings/{bookingUuid}/tickets/close
openapi: 3.1.0
info:
  title: Restoo Public API
  version: 3.0.0-alpha
  description: Connect your App with Restoo.
servers:
  - url: https://api-dev.myrestoo.net/v3
    description: Dev
  - url: https://api.myrestoo.net/v3
    description: Prod
security:
  - http: []
tags:
  - name: Review
paths:
  /bookings/{bookingUuid}/tickets/close:
    put:
      tags:
        - Booking
      summary: Close Booking Ticket
      description: >-
        Closes the ticket and updates the status of the associated booking
        accordingly.
      operationId: booking.closeTicket
      parameters:
        - name: bookingUuid
          in: path
          required: true
          description: The Booking UUID
          schema:
            type: string
            examples:
              - 50b5571be67b477baa9dead4b290c555
        - name: Restoo-Partner-Id
          in: header
          required: true
          description: Unique identifier of your Partner account (defined by Restoo).
          schema:
            type: string
          example: your-restoo-partner-id
        - name: Restoo-Account-Id
          in: header
          required: true
          description: >-
            Unique identifier of the
            [Tenant](/getting-started/key-concepts#tenant).
          schema:
            type: string
          example: best-burger
      requestBody:
        description: '`CloseBookingTicketRequest`'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CloseBookingTicketRequest'
      responses:
        '200':
          description: |-
            `PrivateBookingResponse`

            `PublicBookingResponse`
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/PrivateBookingResponse'
                  - $ref: '#/components/schemas/PublicBookingResponse'
        '409':
          $ref: '#/components/responses/UserNotFoundException'
        '422':
          $ref: '#/components/responses/ValidationException'
components:
  schemas:
    CloseBookingTicketRequest:
      type: object
      description: Request payload for closing a booking ticket.
      properties:
        externalId:
          type: string
          description: >-
            The external identifier of the ticket in the POS or third-party
            system
          examples:
            - TCK-98234
          maxLength: 64
        totalAmount:
          type: integer
          description: The total amount of the ticket in cents
          examples:
            - 12500
          minimum: 0
        discountsAmount:
          type: integer
          description: The discount amount applied to the entire ticket (in cents)
          examples:
            - 250
          minimum: 0
        tipAmount:
          type: integer
          description: The tip amount in cents
          examples:
            - 500
          minimum: 0
        lines:
          type: array
          items:
            $ref: '#/components/schemas/PosTicketLineWithModifiersRequest'
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PosTicketPaymentRequest'
        currency:
          $ref: '#/components/schemas/CurrencyEnum'
          description: |-
            The currency represented as a three-letter ISO 4217 code.

            If not provided, it defaults to the tenant’s configured currency
          examples:
            - EUR
      required:
        - externalId
        - totalAmount
      title: CloseBookingTicketRequest
    PrivateBookingResponse:
      type: object
      description: Full Booking details, including private properties.
      properties:
        privateNotes:
          type:
            - string
            - 'null'
          description: Internal notes visible only to the venue staff
          examples:
            - Customer requested a table near the window.
          maxLength: 2048
        quotedWaitMinutes:
          type:
            - integer
            - 'null'
          description: Estimated waiting time in minutes quoted to the customer
          examples:
            - 15
          minimum: 5
        isWalkIn:
          type: boolean
          description: Indicates whether the booking was created as a Walk-in
          examples:
            - true
        hasFixedTables:
          type: boolean
          description: >-
            Indicates whether the booking has fixed table assignments that
            cannot be changed
          examples:
            - false
        isHighlighted:
          type: boolean
          description: Indicates whether the booking is highlighted
          examples:
            - false
        channel:
          $ref: '#/components/schemas/ChannelEnum'
          description: The booking creation channel
          examples:
            - API
        ticketPartner:
          anyOf:
            - $ref: '#/components/schemas/TicketPartnerEnum'
              description: >-
                The partner system that created or manages the ticket (if
                applicable)
            - type: 'null'
        ticketExternalId:
          type:
            - string
            - 'null'
          description: >-
            The external identifier of the ticket in the POS or third-party
            system
          examples:
            - POS-98234
          maxLength: 64
        ticketTotalAmount:
          type:
            - integer
            - 'null'
          description: The total amount of the ticket in cents
          examples:
            - 12500
          minimum: 0
        tableReadyAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The datetime when the table was ready for the customer in ISO 8601
            format
          examples:
            - '2025-03-20T20:15:00+02:00'
        arrivedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The datetime when the customer arrived in ISO 8601 format
          examples:
            - '2025-03-20T20:25:00+02:00'
        seatedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The datetime when the customer was seated in ISO 8601 format
          examples:
            - '2025-03-20T20:30:00+02:00'
        endedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The datetime when the booking ended in ISO 8601 format
          examples:
            - '2025-03-20T22:15:00+02:00'
        ip:
          type:
            - string
            - 'null'
          description: The IP address of the device or system that created the booking
          examples:
            - 192.168.0.25
        customer:
          anyOf:
            - $ref: '#/components/schemas/PrivateCustomer'
              description: Full Customer details, including private properties
            - type: 'null'
        tables:
          type: array
          description: The list of tables assigned to the booking
          items:
            $ref: '#/components/schemas/BookingTable'
        uuid:
          type: string
          description: UUID of the Booking
          examples:
            - 50b5571be67b477baa9dead4b290c555
        bookingAt:
          type: string
          format: date-time
          description: The Booking date and time in ISO 8601 format
          examples:
            - '2025-03-20T23:00:00+02:00'
        status:
          $ref: '#/components/schemas/BookingStatusEnum'
          description: The Booking status
          examples:
            - CONFIRMED
        isTimeLimited:
          type: boolean
          description: |-
            Indicates whether the Booking has a time limit
            that must be notified and accepted by the customer
          examples:
            - true
        customerSpecialRequests:
          type:
            - string
            - 'null'
          description: >-
            Free-text field for customer special requests.

            The Venue will try to accommodate them but cannot guarantee
            fulfillment
          examples:
            - Table near the window
          maxLength: 1024
        hasAllergies:
          type: boolean
          description: |-
            Indicates whether any of the guests have allergies
            (e.g., peanut, chocolate, nuts, etc.)
          examples:
            - true
        allergiesDescription:
          type:
            - string
            - 'null'
          description: Free-text description of allergies
          examples:
            - Peanuts, shellfish, lactose intolerance
          maxLength: 1024
        specialOccasion:
          anyOf:
            - $ref: '#/components/schemas/BookingSpecialOccasionEnum'
              description: The special occasion associated with the booking
              examples:
                - BIRTHDAY
            - type: 'null'
        needsAccessibleSeating:
          type: boolean
          description: |-
            Indicates whether the guest requires an accessible seating
            (e.g., suitable for wheelchairs or reduced mobility)
          examples:
            - true
        hotelRoom:
          type:
            - string
            - 'null'
          description: Hotel room number or identifier associated with the Booking
          examples:
            - Room 305
          maxLength: 50
        publicNotes:
          type:
            - string
            - 'null'
          description: Public notes defined by the venue and visible to the customer
          examples:
            - Your reservation includes a birthday cake.
          maxLength: 2048
        isReconfirmed:
          type: boolean
          description: >-
            Indicates whether the booking was manually reconfirmed

            by the customer **after** the venue contacted them to request
            reconfirmation
          examples:
            - true
        isReconfirmedByCustomer:
          type: boolean
          description: |-
            Indicates whether the booking was automatically reconfirmed
            by the customer through Restoo’s automated reconfirmation service
          examples:
            - false
        cancelReason:
          anyOf:
            - $ref: '#/components/schemas/BookingCancelReasonEnum'
              description: The reason provided when canceling the booking (if applicable)
              examples:
                - CHANGED_PLANS
            - type: 'null'
        bookingPartner:
          anyOf:
            - $ref: '#/components/schemas/BookingPartnerEnum'
              description: The partner through which the Booking was made (if any)
              examples:
                - GOOGLE
            - type: 'null'
        bookingExternalId:
          type:
            - string
            - 'null'
          description: |-
            The Booking ID provided by the external partner (if applicable).
            Required if `bookingPartner` is present
          examples:
            - book_123456
          maxLength: 64
        shiftType:
          $ref: '#/components/schemas/ShiftType'
          description: The Shift Type in which the Booking takes place
        floorPlanArea:
          anyOf:
            - $ref: '#/components/schemas/BookingFloorPlanArea'
            - type: 'null'
        promo:
          anyOf:
            - $ref: '#/components/schemas/BookingPromo'
            - type: 'null'
        product:
          anyOf:
            - $ref: '#/components/schemas/BookingProduct'
            - type: 'null'
        experience:
          anyOf:
            - $ref: '#/components/schemas/BookingExperience'
            - type: 'null'
        cancellationPolicy:
          anyOf:
            - $ref: '#/components/schemas/BookingCancellationPolicy'
            - type: 'null'
        addOns:
          type: array
          description: List of add-ons associated with the Booking (if any)
          items:
            $ref: '#/components/schemas/BookingAddOn'
        accountId:
          type: string
          description: The unique Restoo Account identifier for the Tenant
          examples:
            - best-burger
        highChairs:
          type: integer
          description: The number of high chairs
          examples:
            - 1
          minimum: 0
        paxChildren:
          type: integer
          description: >-
            The number of children in the Booking.

            Available only if the Tenant setting for differentiating adults and
            children is enabled
          examples:
            - 0
          minimum: 0
          maximum: 100
        pax:
          type: integer
          description: >-
            The number of people (or adults, depending on Tenant settings) in
            the Booking
          examples:
            - 2
          minimum: 1
          maximum: 100
        strollers:
          type: integer
          description: The number of strollers
          examples:
            - 1
          minimum: 0
        turnMinutes:
          type: integer
          description: The duration of the Booking in minutes
          examples:
            - 90
          minimum: 15
          maximum: 720
        createdAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The creation timestamp in ISO 8601 format
          examples:
            - '2025-03-20T18:45:00+02:00'
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The last update timestamp in ISO 8601 format
          examples:
            - '2025-03-21T09:30:00+02:00'
      required:
        - privateNotes
        - quotedWaitMinutes
        - isWalkIn
        - hasFixedTables
        - isHighlighted
        - channel
        - ticketPartner
        - ticketExternalId
        - ticketTotalAmount
        - tableReadyAt
        - arrivedAt
        - seatedAt
        - endedAt
        - ip
        - customer
        - tables
        - uuid
        - bookingAt
        - status
        - isTimeLimited
        - customerSpecialRequests
        - hasAllergies
        - allergiesDescription
        - specialOccasion
        - needsAccessibleSeating
        - hotelRoom
        - publicNotes
        - isReconfirmed
        - isReconfirmedByCustomer
        - cancelReason
        - bookingPartner
        - bookingExternalId
        - shiftType
        - floorPlanArea
        - promo
        - product
        - experience
        - cancellationPolicy
        - addOns
        - accountId
        - highChairs
        - paxChildren
        - pax
        - strollers
        - turnMinutes
        - createdAt
        - updatedAt
      title: PrivateBookingResponse
    PublicBookingResponse:
      type: object
      description: Public Booking details.
      properties:
        customer:
          anyOf:
            - $ref: '#/components/schemas/PublicCustomer'
              description: Public Customer details
            - type: 'null'
        uuid:
          type: string
          description: UUID of the Booking
          examples:
            - 50b5571be67b477baa9dead4b290c555
        bookingAt:
          type: string
          format: date-time
          description: The Booking date and time in ISO 8601 format
          examples:
            - '2025-03-20T23:00:00+02:00'
        status:
          $ref: '#/components/schemas/BookingStatusEnum'
          description: The Booking status
          examples:
            - CONFIRMED
        isTimeLimited:
          type: boolean
          description: |-
            Indicates whether the Booking has a time limit
            that must be notified and accepted by the customer
          examples:
            - true
        customerSpecialRequests:
          type:
            - string
            - 'null'
          description: >-
            Free-text field for customer special requests.

            The Venue will try to accommodate them but cannot guarantee
            fulfillment
          examples:
            - Table near the window
          maxLength: 1024
        hasAllergies:
          type: boolean
          description: |-
            Indicates whether any of the guests have allergies
            (e.g., peanut, chocolate, nuts, etc.)
          examples:
            - true
        allergiesDescription:
          type:
            - string
            - 'null'
          description: Free-text description of allergies
          examples:
            - Peanuts, shellfish, lactose intolerance
          maxLength: 1024
        specialOccasion:
          anyOf:
            - $ref: '#/components/schemas/BookingSpecialOccasionEnum'
              description: The special occasion associated with the booking
              examples:
                - BIRTHDAY
            - type: 'null'
        needsAccessibleSeating:
          type: boolean
          description: |-
            Indicates whether the guest requires an accessible seating
            (e.g., suitable for wheelchairs or reduced mobility)
          examples:
            - true
        hotelRoom:
          type:
            - string
            - 'null'
          description: Hotel room number or identifier associated with the Booking
          examples:
            - Room 305
          maxLength: 50
        publicNotes:
          type:
            - string
            - 'null'
          description: Public notes defined by the venue and visible to the customer
          examples:
            - Your reservation includes a birthday cake.
          maxLength: 2048
        isReconfirmed:
          type: boolean
          description: >-
            Indicates whether the booking was manually reconfirmed

            by the customer **after** the venue contacted them to request
            reconfirmation
          examples:
            - true
        isReconfirmedByCustomer:
          type: boolean
          description: |-
            Indicates whether the booking was automatically reconfirmed
            by the customer through Restoo’s automated reconfirmation service
          examples:
            - false
        cancelReason:
          anyOf:
            - $ref: '#/components/schemas/BookingCancelReasonEnum'
              description: The reason provided when canceling the booking (if applicable)
              examples:
                - CHANGED_PLANS
            - type: 'null'
        bookingPartner:
          anyOf:
            - $ref: '#/components/schemas/BookingPartnerEnum'
              description: The partner through which the Booking was made (if any)
              examples:
                - GOOGLE
            - type: 'null'
        bookingExternalId:
          type:
            - string
            - 'null'
          description: |-
            The Booking ID provided by the external partner (if applicable).
            Required if `bookingPartner` is present
          examples:
            - book_123456
          maxLength: 64
        shiftType:
          $ref: '#/components/schemas/ShiftType'
          description: The Shift Type in which the Booking takes place
        floorPlanArea:
          anyOf:
            - $ref: '#/components/schemas/BookingFloorPlanArea'
            - type: 'null'
        promo:
          anyOf:
            - $ref: '#/components/schemas/BookingPromo'
            - type: 'null'
        product:
          anyOf:
            - $ref: '#/components/schemas/BookingProduct'
            - type: 'null'
        experience:
          anyOf:
            - $ref: '#/components/schemas/BookingExperience'
            - type: 'null'
        cancellationPolicy:
          anyOf:
            - $ref: '#/components/schemas/BookingCancellationPolicy'
            - type: 'null'
        addOns:
          type: array
          description: List of add-ons associated with the Booking (if any)
          items:
            $ref: '#/components/schemas/BookingAddOn'
        accountId:
          type: string
          description: The unique Restoo Account identifier for the Tenant
          examples:
            - best-burger
        highChairs:
          type: integer
          description: The number of high chairs
          examples:
            - 1
          minimum: 0
        paxChildren:
          type: integer
          description: >-
            The number of children in the Booking.

            Available only if the Tenant setting for differentiating adults and
            children is enabled
          examples:
            - 0
          minimum: 0
          maximum: 100
        pax:
          type: integer
          description: >-
            The number of people (or adults, depending on Tenant settings) in
            the Booking
          examples:
            - 2
          minimum: 1
          maximum: 100
        strollers:
          type: integer
          description: The number of strollers
          examples:
            - 1
          minimum: 0
        turnMinutes:
          type: integer
          description: The duration of the Booking in minutes
          examples:
            - 90
          minimum: 15
          maximum: 720
      required:
        - customer
        - uuid
        - bookingAt
        - status
        - isTimeLimited
        - customerSpecialRequests
        - hasAllergies
        - allergiesDescription
        - specialOccasion
        - needsAccessibleSeating
        - hotelRoom
        - publicNotes
        - isReconfirmed
        - isReconfirmedByCustomer
        - cancelReason
        - bookingPartner
        - bookingExternalId
        - shiftType
        - floorPlanArea
        - promo
        - product
        - experience
        - cancellationPolicy
        - addOns
        - accountId
        - highChairs
        - paxChildren
        - pax
        - strollers
        - turnMinutes
      title: PublicBookingResponse
    PosTicketLineWithModifiersRequest:
      type: object
      description: A single POS ticket line item with modifiers.
      properties:
        modifiers:
          type: array
          description: Nested modifiers or child line items associated with this line
          items:
            $ref: '#/components/schemas/PosTicketLineRequest'
        description:
          type: string
          description: Human-readable description of the line item
          examples:
            - Margherita Pizza
          maxLength: 255
        quantity:
          type: integer
          description: The quantity of this line item
          examples:
            - 2
          minimum: 1
        amount:
          type: integer
          description: The amount, in cents
          examples:
            - 1250
          minimum: 0
        type:
          type:
            - string
            - 'null'
          description: The type or category of the line item
          examples:
            - FOOD
          maxLength: 64
        discountAmount:
          type: integer
          description: The discount amount applied to this line item (in cents)
          examples:
            - 250
          minimum: 0
        totalAmount:
          type: integer
          description: |-
            The total amount for this line item (in cents),
            including quantity, discounts, and modifiers
          examples:
            - 2250
          minimum: 0
        sortOrder:
          type:
            - integer
            - 'null'
          description: The display or processing order of the line item within the ticket
          examples:
            - 1
          minimum: 0
      required:
        - description
        - quantity
        - amount
      title: PosTicketLineWithModifiersRequest
    PosTicketPaymentRequest:
      type: object
      properties:
        amount:
          type: integer
          description: The payment amount in cents
          examples:
            - 5000
        method:
          type: string
          description: The payment method or channel used
          examples:
            - CASH
          maxLength: 64
        currency:
          $ref: '#/components/schemas/CurrencyEnum'
          description: |-
            The currency represented as a three-letter ISO 4217 code.

            If not provided, it defaults to the tenant’s configured currency
          examples:
            - EUR
      required:
        - amount
      title: PosTicketPaymentRequest
    CurrencyEnum:
      type: string
      enum:
        - EUR
        - USD
        - GBP
        - MXN
        - DOP
      title: CurrencyEnum
    ChannelEnum:
      type: string
      enum:
        - WIDGET
        - OFFLINE
        - API
      title: ChannelEnum
    TicketPartnerEnum:
      type: string
      enum:
        - DEFAULT
        - REVO
        - HOSTELTACTIL
        - AGORA
        - WINEX
        - SIMPHONY
        - CUINER
        - BDP
        - GLOP
        - FRONT_REST
        - YANTAR
        - MADISA
        - LASTAPP
        - SQUARE
        - HIOPOS
        - API
        - WE_WELCOM
      title: TicketPartnerEnum
    PrivateCustomer:
      type: object
      description: Full Customer details, including private properties.
      properties:
        privateNotes:
          type:
            - string
            - 'null'
          description: Internal notes about the customer, visible only to venue staff
          examples:
            - Customer prefers a table near the terrace.
          maxLength: 2048
        visitFrequency:
          type:
            - integer
            - 'null'
          description: >-
            Average frequency of visits, expressed as the number of days between
            visits
          examples:
            - 30
          minimum: 0
        averageOrderAmountPerPax:
          type:
            - integer
            - 'null'
          description: Average order amount per guest (in cents)
          examples:
            - 4500
          minimum: 0
        bookingReputation:
          type: number
          description: >-
            The customer's reputation score based on their booking behavior.

            Calculated by Restoo from attendance, cancellation, and no-show
            history.

             Interpretation:
             - Negative values: poor reputation.
             - 0: no sufficient history (neutral).
             - Positive values: good reputation
          examples:
            - 0.85
        bookingsCount:
          type: integer
          description: Total number of bookings made by the customer
          examples:
            - 25
          minimum: 0
        visitsCount:
          type: integer
          description: Total number of completed visits by the customer
          examples:
            - 18
          minimum: 0
        cancellationsCount:
          type: integer
          description: Total number of cancellations made by the customer
          examples:
            - 3
          minimum: 0
        noShowsCount:
          type: integer
          description: Total number of no-shows by the customer
          examples:
            - 2
          minimum: 0
        firstVisitAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The date and time of the customer's first visit in ISO 8601 format
          examples:
            - '2023-05-10T20:00:00+02:00'
        lastVisitAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time of the customer's most recent visit in ISO 8601
            format
          examples:
            - '2025-03-15T21:30:00+02:00'
        firstCancellationAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time of the customer's first cancellation in ISO 8601
            format
          examples:
            - '2024-09-12T19:00:00+02:00'
        nextVisitScheduledAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time of the customer's next scheduled visit in ISO 8601
            format
          examples:
            - '2025-04-05T22:00:00+02:00'
        tags:
          type: array
          description: List of customer tags
          items:
            $ref: '#/components/schemas/Tag'
        uuid:
          type: string
          description: The Customer UUID
          examples:
            - 50b5571be67b477baa9dead4b290c555
        email:
          type:
            - string
            - 'null'
          format: email
          description: The Customer's email address
          examples:
            - steve.jobs@restoo.me
        phone:
          type:
            - string
            - 'null'
          description: The Customer's phone number in E.164 format
          examples:
            - '+34600111222'
        birthDate:
          type:
            - string
            - 'null'
          format: date
          description: Date of birth of the Customer in ISO 8601 format (YYYY-MM-DD)
          examples:
            - '1979-03-20'
        postalCode:
          type:
            - string
            - 'null'
          description: The Customer's postal code
          examples:
            - '28045'
          maxLength: 12
        isVip:
          type: boolean
          description: Indicates whether the Customer is marked as VIP
          examples:
            - true
        isBusiness:
          type: boolean
          description: Indicates whether the Customer is associated with a business
          examples:
            - false
        language:
          $ref: '#/components/schemas/CustomerLanguageEnum'
          description: >-
            The preferred language of the Customer, represented as an ISO 639-1
            code
          examples:
            - en
        acceptsImportantAlerts:
          type: boolean
          description: >-
            Indicates whether the customer agrees to receive important alerts
            related to their bookings

            (e.g., cancellations due to weather or unexpected incidents)
          examples:
            - true
        hasGdprConsent:
          type: boolean
          description: Indicates whether the Customer has given GDPR consent
          examples:
            - true
        acceptsMarketing:
          type: boolean
          description: >-
            Indicates whether the Customer has consented to receive marketing
            communications
          examples:
            - true
        country:
          $ref: '#/components/schemas/CountryEnum'
          description: The country represented as a two-letter ISO 3166-1 alpha-2 code
          examples:
            - ES
        name:
          type: string
          description: The full name of the Customer
          examples:
            - Steve Jobs
          minLength: 3
          maxLength: 255
      required:
        - privateNotes
        - visitFrequency
        - averageOrderAmountPerPax
        - bookingReputation
        - bookingsCount
        - visitsCount
        - cancellationsCount
        - noShowsCount
        - firstVisitAt
        - lastVisitAt
        - firstCancellationAt
        - nextVisitScheduledAt
        - tags
        - uuid
        - email
        - phone
        - birthDate
        - postalCode
        - isVip
        - isBusiness
        - language
        - acceptsImportantAlerts
        - hasGdprConsent
        - acceptsMarketing
        - country
        - name
      title: PrivateCustomer
    BookingTable:
      type: object
      properties:
        name:
          type: string
          description: The table name as defined in Restoo
          examples:
            - T101
          maxLength: 16
        floorPlanAreaId:
          type:
            - integer
            - 'null'
          description: The identifier of the floor plan area the table belongs to
          examples:
            - 12
          minimum: 1
        posId:
          type:
            - string
            - 'null'
          description: The table identifier in the POS or external system
          examples:
            - POS-T101
          maxLength: 64
        id:
          type: integer
          description: The unique identifier of the resource
          examples:
            - 101
          minimum: 1
      required:
        - name
        - floorPlanAreaId
        - posId
        - id
      title: BookingTable
    BookingStatusEnum:
      type: string
      enum:
        - REQUESTED
        - PENDING_MERCHANT_CONFIRMATION
        - PENDING_WAIT_LIST_BOOKING
        - CONFIRMED
        - WAIT_LIST_WALK_IN
        - ARRIVED
        - SEATED
        - DESSERTS
        - ACCOUNT_SENT
        - ACCOUNT_PAID
        - ATTENDED
        - CANCELED
        - NO_SHOW
        - DECLINED_BY_MERCHANT
        - DELETED
      title: BookingStatusEnum
    BookingSpecialOccasionEnum:
      type: string
      enum:
        - WEDDING
        - BIRTHDAY
        - ROMANTIC
        - FRIENDS
        - FAMILY
        - BUSINESS
        - OTHER
      title: BookingSpecialOccasionEnum
    BookingCancelReasonEnum:
      type: string
      enum:
        - CALL_TO_CANCEL
        - UPDATE_BOOKING
        - UNEXPECTED_SITUATION
        - BOOKED_ANOTHER_PLACE
        - CHANGED_PLANS
        - OTHER
        - REVOKE_LEGAL_CONSENT
      title: BookingCancelReasonEnum
    BookingPartnerEnum:
      type: string
      enum:
        - DEFAULT
        - GOOGLE
        - BOOKLINE
        - BOOKY_BOT
        - FLIP_EAT
        - FACEBOOK
        - MAYBEIN
        - LASTAPP
        - PRIMA
      title: BookingPartnerEnum
    ShiftType:
      type: object
      description: The Shift Type details.
      properties:
        id:
          $ref: '#/components/schemas/ShiftTypeEnum'
          description: The Shift Type ID
          examples:
            - LUNCH
        name:
          type: string
          description: The Shift name, localized in the preferred response language
          examples:
            - Lunch
          maxLength: 16
      required:
        - id
        - name
      title: ShiftType
    BookingFloorPlanArea:
      type: object
      description: The Floor Plan Area details related to a Booking.
      properties:
        name:
          type: string
          description: >-
            The Floor Plan Area name, localized in the preferred requested
            language
          examples:
            - Terrace
          maxLength: 255
        id:
          type: integer
          description: The unique identifier of the resource
          examples:
            - 101
          minimum: 1
      required:
        - name
        - id
      title: BookingFloorPlanArea
    BookingPromo:
      type: object
      description: The Promotion details related to a Booking.
      properties:
        name:
          type: string
          description: The Promotion name, localized in the preferred requested language
          examples:
            - Summer Discount 2025
          maxLength: 255
        id:
          type: integer
          description: The unique identifier of the resource
          examples:
            - 101
          minimum: 1
      required:
        - name
        - id
      title: BookingPromo
    BookingProduct:
      type: object
      description: The Product details related to a Booking.
      properties:
        orderItemId:
          type: integer
          description: The unique identifier of the related Order Item
          examples:
            - 101
          minimum: 1
        orderUuid:
          type: string
          description: The unique identifier of the related Order
          examples:
            - 50b5571be67b477baa9dead4b290c555
        currency:
          $ref: '#/components/schemas/CurrencyEnum'
          description: The currency represented as a three-letter ISO 4217 code
          examples:
            - EUR
        experienceTickets:
          type:
            - integer
            - 'null'
          description: |-
            The number of experience tickets included.

            This applies only to Products that provide experience access.
            If the Product does not include tickets, this value is `null`
          examples:
            - 1
          minimum: 1
        id:
          type: integer
          description: The unique identifier of the resource
          examples:
            - 101
          minimum: 1
        isGift:
          type: boolean
          description: Indicates whether this item is a gift
          examples:
            - true
        name:
          type: string
          description: The Product name, localized in the preferred requested language
          examples:
            - Gift Card
          maxLength: 255
        quantity:
          type: integer
          description: The quantity of this resource
          examples:
            - 1
          minimum: 1
        taxRate:
          type: integer
          description: |-
            Tax rate, expressed in basis points.

            For example, 10.5% is represented as 1050
          examples:
            - 1050
          minimum: 0
          maximum: 10000
        type:
          $ref: '#/components/schemas/ProductTypeEnum'
          description: |-
            The type of Product.

            Determines how the Product behaves during purchase and how its price
            is interpreted. The following product types are supported:

            - **ITEM** — A fixed-price product.
              The customer selects quantity to purchase.
              Each unit has a predefined price (e.g., menus, experiences).

            - **CREDIT** — A monetary-value product.
              The customer selects the amount of credit to purchase.
              The minimum allowed amount is defined by the Product’s base price
              (e.g., gift cards)
          examples:
            - ITEM
        unitPrice:
          type: integer
          description: |-
            The base price of the Product, expressed in cents.

            Its interpretation depends on the Product type:

            - **ITEM** — Represents the fixed unit price of the product.
              The customer selects a quantity, and the final charge is calculated as
              `quantity × amount`.

            - **CREDIT** — Represents the minimum purchasable credit amount.
              The customer chooses the final amount, which must be **greater than or equal**
              to this value
          examples:
            - 7500
          minimum: 100
      required:
        - orderItemId
        - orderUuid
        - currency
        - experienceTickets
        - id
        - isGift
        - name
        - quantity
        - taxRate
        - type
        - unitPrice
      title: BookingProduct
    BookingExperience:
      type: object
      description: The Experience details related to a Booking.
      properties:
        tickets:
          type: integer
          description: The number of tickets reserved for the Booking Experience
          examples:
            - 1
          minimum: 1
        discount:
          type: number
          description: >-
            Discount applied to the Booking Experience, expressed as a
            percentage
          examples:
            - 10.5
          minimum: 0
          maximum: 100
        experienceId:
          type: integer
          description: The unique identifier of the Experience
          examples:
            - 123
          minimum: 1
        name:
          type: string
          description: The Experience name, localized in the preferred requested language
          examples:
            - Premium Menu
          maxLength: 255
        pricePerTicket:
          type: integer
          description: The Experience price per ticket in cents
          examples:
            - 7500
          minimum: 0
        currency:
          $ref: '#/components/schemas/CurrencyEnum'
          description: The currency represented as a three-letter ISO 4217 code
          examples:
            - EUR
        id:
          type: integer
          description: The unique identifier of the resource
          examples:
            - 101
          minimum: 1
      required:
        - tickets
        - discount
        - experienceId
        - name
        - pricePerTicket
        - currency
        - id
      title: BookingExperience
    BookingCancellationPolicy:
      type: object
      description: |-
        The Cancellation Policy details associated with a Booking.

        Represents the **persisted and authoritative state**
        of the Cancellation Policy for a Booking.
      properties:
        status:
          $ref: '#/components/schemas/BookingCancellationPolicyStatusEnum'
          description: >-
            The current persisted status of the Cancellation Policy for this
            Booking
          examples:
            - PENDING_SIGNATURE
        signDeadlineAt:
          type: string
          format: date-time
          description: >-
            Deadline for the customer to accept the Cancellation Policy,
            expressed in ISO 8601 format.


            If the customer does not complete the acceptance flow before this
            timestamp,

            the Booking will be **automatically cancelled** and the signature
            process

            becomes invalid
          examples:
            - '2025-03-20T22:00:00+02:00'
        signedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Date and time when the customer signed/accepted the Cancellation
            Policy, expressed in ISO 8601 format.


            If `null`, the policy has not been signed yet
          examples:
            - '2025-03-20T21:35:10+02:00'
        signedFromIp:
          type:
            - string
            - 'null'
          description: |-
            IP address from which the Cancellation Policy was signed/accepted.

            If `null`, the policy has not been signed yet
          examples:
            - 203.0.113.10
        endedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Date and time when the Cancellation Policy ended, expressed in ISO
            8601 format.


            If `null`, the policy has not ended yet
          examples:
            - '2025-03-21T23:59:59+02:00'
        endedBy:
          anyOf:
            - $ref: '#/components/schemas/CancellationPolicyEndedByEnum'
              description: >-
                Indicates who or what ended the Cancellation Policy.


                If `null`, the policy has not ended yet.


                Possible values:


                - **GUEST** — The policy was ended by the customer.

                - **STAFF** — The policy was ended by the merchant or venue
                staff.

                - **RESTOO_BOT** — The policy was ended automatically by Restoo
                (system action)
              examples:
                - GUEST
            - type: 'null'
        chargeStatus:
          anyOf:
            - $ref: '#/components/schemas/ChargeStatusEnum'
              description: |-
                Defines the current status of the charge.

                This field is applicable only when `chargedAmount > 0`.
                If no charge was attempted or applied, this field is `null`
              examples:
                - SUCCEEDED
            - type: 'null'
        refundStatus:
          anyOf:
            - $ref: '#/components/schemas/RefundStatusEnum'
              description: |-
                Defines the current status of the refund.

                This field is applicable only when `refundedAmount > 0`.
                If no refund was initiated, this field is `null`
              examples:
                - null
            - type: 'null'
        type:
          $ref: '#/components/schemas/CancellationPolicyTypeEnum'
          description: Type of Cancellation Policy
          examples:
            - GUARANTEE_AUTHORIZATION
        amount:
          type: integer
          description: Base unit amount of the Cancellation Policy, expressed in cents
          examples:
            - 2500
          minimum: 100
          maximum: 200000
        amountType:
          $ref: '#/components/schemas/CancellationPolicyAmountTypeEnum'
          description: >-
            Defines how the Cancellation Policy amount is applied.


            - `PER_PAX` — The policy amount applies **per guest**.
              The final charge is calculated as: `amount × number_of_guests`.

            - `PER_BOOKING` — The policy amount applies **once to the entire
            booking**,
              regardless of the number of guests
          examples:
            - PER_PAX
        cancellationNoticeHours:
          type: integer
          description: |-
            Minimum notice required (in hours) before the booking start time
            for the Cancellation Policy to apply
          examples:
            - 24
          minimum: 0
        currency:
          $ref: '#/components/schemas/CurrencyEnum'
          description: The currency represented as a three-letter ISO 4217 code
          examples:
            - EUR
        cancellationFeeAmount:
          type: integer
          description: |-
            Cancellation fee amount dictated by the agreed policy terms,
            regardless of the amount finally charged to the customer
          examples:
            - 5000
          minimum: 0
          maximum: 200000
        chargedAmount:
          type: integer
          description: >-
            The total amount charged to the customer, expressed in cents.


            This value represents the **amount actually charged** to the
            customer,

            independent of the cancellation fee that **should have been
            applied**

            according to the Cancellation Policy, and regardless of the current

            payment or refund status
          examples:
            - 5000
          minimum: 0
          maximum: 200000
        guaranteedPax:
          type: integer
          description: |-
            The number of guests covered by the Cancellation Policy guarantee.
            Only applies when amountType is "PER_PAX"
          examples:
            - 2
          minimum: 0
        id:
          type: integer
          description: The unique identifier of the resource
          examples:
            - 101
          minimum: 1
        refundedAmount:
          type: integer
          description: >-
            The total amount refunded to the customer, expressed in cents.


            This value represents the **amount to be refunded** to the customer,
            regardless of

            whether the refund has already been issued or fully settled
          examples:
            - 0
          minimum: 0
          maximum: 200000
      required:
        - status
        - signDeadlineAt
        - signedAt
        - signedFromIp
        - endedAt
        - endedBy
        - chargeStatus
        - refundStatus
        - type
        - amount
        - amountType
        - cancellationNoticeHours
        - currency
        - cancellationFeeAmount
        - chargedAmount
        - guaranteedPax
        - id
        - refundedAmount
      title: BookingCancellationPolicy
    BookingAddOn:
      type: object
      description: The Add-ons details related to a Booking.
      properties:
        addOnId:
          type: integer
          description: The unique identifier of the Add-on
          examples:
            - 123
          minimum: 1
        name:
          type: string
          description: The Add-on name localized in the preferred requested language
          examples:
            - Premium wine tasting
          maxLength: 255
        unitPrice:
          type:
            - integer
            - 'null'
          description: The unit price of the Add-on in cents
          examples:
            - 1000
          minimum: 0
        currency:
          $ref: '#/components/schemas/CurrencyEnum'
          description: The currency represented as a three-letter ISO 4217 code
          examples:
            - EUR
        id:
          type: integer
          description: The unique identifier of the resource
          examples:
            - 101
          minimum: 1
        quantity:
          type: integer
          description: The quantity of this resource
          examples:
            - 1
          minimum: 1
      required:
        - addOnId
        - name
        - unitPrice
        - currency
        - id
        - quantity
      title: BookingAddOn
    PublicCustomer:
      type: object
      description: Public Customer details.
      properties:
        uuid:
          type: string
          description: The Customer UUID
          examples:
            - 50b5571be67b477baa9dead4b290c555
        email:
          type:
            - string
            - 'null'
          format: email
          description: The Customer's email address
          examples:
            - steve.jobs@restoo.me
        phone:
          type:
            - string
            - 'null'
          description: The Customer's phone number in E.164 format
          examples:
            - '+34600111222'
        birthDate:
          type:
            - string
            - 'null'
          format: date
          description: Date of birth of the Customer in ISO 8601 format (YYYY-MM-DD)
          examples:
            - '1979-03-20'
        postalCode:
          type:
            - string
            - 'null'
          description: The Customer's postal code
          examples:
            - '28045'
          maxLength: 12
        isVip:
          type: boolean
          description: Indicates whether the Customer is marked as VIP
          examples:
            - true
        isBusiness:
          type: boolean
          description: Indicates whether the Customer is associated with a business
          examples:
            - false
        language:
          $ref: '#/components/schemas/CustomerLanguageEnum'
          description: >-
            The preferred language of the Customer, represented as an ISO 639-1
            code
          examples:
            - en
        acceptsImportantAlerts:
          type: boolean
          description: >-
            Indicates whether the customer agrees to receive important alerts
            related to their bookings

            (e.g., cancellations due to weather or unexpected incidents)
          examples:
            - true
        hasGdprConsent:
          type: boolean
          description: Indicates whether the Customer has given GDPR consent
          examples:
            - true
        acceptsMarketing:
          type: boolean
          description: >-
            Indicates whether the Customer has consented to receive marketing
            communications
          examples:
            - true
        country:
          $ref: '#/components/schemas/CountryEnum'
          description: The country represented as a two-letter ISO 3166-1 alpha-2 code
          examples:
            - ES
        name:
          type: string
          description: The full name of the Customer
          examples:
            - Steve Jobs
          minLength: 3
          maxLength: 255
      required:
        - uuid
        - email
        - phone
        - birthDate
        - postalCode
        - isVip
        - isBusiness
        - language
        - acceptsImportantAlerts
        - hasGdprConsent
        - acceptsMarketing
        - country
        - name
      title: PublicCustomer
    PosTicketLineRequest:
      type: object
      description: A single POS ticket line item.
      properties:
        description:
          type: string
          description: Human-readable description of the line item
          examples:
            - Margherita Pizza
          maxLength: 255
        quantity:
          type: integer
          description: The quantity of this line item
          examples:
            - 2
          minimum: 1
        amount:
          type: integer
          description: The amount, in cents
          examples:
            - 1250
          minimum: 0
        type:
          type:
            - string
            - 'null'
          description: The type or category of the line item
          examples:
            - FOOD
          maxLength: 64
        discountAmount:
          type: integer
          description: The discount amount applied to this line item (in cents)
          examples:
            - 250
          minimum: 0
        totalAmount:
          type: integer
          description: |-
            The total amount for this line item (in cents),
            including quantity, discounts, and modifiers
          examples:
            - 2250
          minimum: 0
        sortOrder:
          type:
            - integer
            - 'null'
          description: The display or processing order of the line item within the ticket
          examples:
            - 1
          minimum: 0
      required:
        - description
        - quantity
        - amount
      title: PosTicketLineRequest
    Tag:
      type: object
      description: Customer tag details.
      properties:
        id:
          type: integer
          description: The tag unique identifier
          examples:
            - 1
        name:
          type: string
          description: The tag display name
          examples:
            - VIP
        color:
          type: string
          description: The tag color in hexadecimal format
          examples:
            - '#FF5733'
      required:
        - id
        - name
        - color
      title: Tag
    CustomerLanguageEnum:
      type: string
      enum:
        - es
        - ca
        - it
        - en
        - de
        - fr
        - pt
        - eu
      title: CustomerLanguageEnum
    CountryEnum:
      type: string
      enum:
        - AF
        - AX
        - AL
        - DZ
        - AS
        - AD
        - AO
        - AI
        - AQ
        - AG
        - AR
        - AM
        - AW
        - AU
        - AT
        - AZ
        - BS
        - BH
        - BD
        - BB
        - BY
        - BE
        - BZ
        - BJ
        - BM
        - BT
        - BO
        - BQ
        - BA
        - BW
        - BV
        - BR
        - IO
        - BN
        - BG
        - BF
        - BI
        - CV
        - KH
        - CM
        - CA
        - KY
        - CF
        - TD
        - CL
        - CN
        - CX
        - CC
        - CO
        - KM
        - CG
        - CD
        - CK
        - CR
        - CI
        - HR
        - CU
        - CW
        - CY
        - CZ
        - DK
        - DJ
        - DM
        - DO
        - EC
        - EG
        - SV
        - GQ
        - ER
        - EE
        - SZ
        - ET
        - FK
        - FO
        - FJ
        - FI
        - FR
        - GF
        - PF
        - TF
        - GA
        - GM
        - GE
        - DE
        - GH
        - GI
        - GR
        - GL
        - GD
        - GP
        - GU
        - GT
        - GG
        - GN
        - GW
        - GY
        - HT
        - HM
        - VA
        - HN
        - HK
        - HU
        - IS
        - IN
        - ID
        - IR
        - IQ
        - IE
        - IM
        - IL
        - IT
        - JM
        - JP
        - JE
        - JO
        - KZ
        - KE
        - KI
        - KP
        - KR
        - XK
        - KW
        - KG
        - LA
        - LV
        - LB
        - LS
        - LR
        - LY
        - LI
        - LT
        - LU
        - MO
        - MG
        - MW
        - MY
        - MV
        - ML
        - MT
        - MH
        - MQ
        - MR
        - MU
        - YT
        - MX
        - FM
        - MD
        - MC
        - MN
        - ME
        - MS
        - MA
        - MZ
        - MM
        - NA
        - NR
        - NP
        - NL
        - NC
        - NZ
        - NI
        - NE
        - NG
        - NU
        - NF
        - MK
        - MP
        - 'NO'
        - OM
        - PK
        - PW
        - PS
        - PA
        - PG
        - PY
        - PE
        - PH
        - PN
        - PL
        - PT
        - PR
        - QA
        - RE
        - RO
        - RU
        - RW
        - BL
        - SH
        - KN
        - LC
        - MF
        - PM
        - VC
        - WS
        - SM
        - ST
        - SA
        - SN
        - RS
        - SC
        - SL
        - SG
        - SX
        - SK
        - SI
        - SB
        - SO
        - ZA
        - GS
        - SS
        - ES
        - LK
        - SD
        - SR
        - SJ
        - SE
        - CH
        - SY
        - TW
        - TJ
        - TZ
        - TH
        - TL
        - TG
        - TK
        - TO
        - TT
        - TN
        - TR
        - TM
        - TC
        - TV
        - UG
        - UA
        - AE
        - GB
        - UM
        - US
        - UY
        - UZ
        - VU
        - VE
        - VN
        - VG
        - VI
        - WF
        - EH
        - YE
        - ZM
        - ZW
      title: CountryEnum
    ShiftTypeEnum:
      type: string
      enum:
        - LUNCH
        - DINNER
        - SNACK
        - BREAKFAST
        - BRUNCH
        - LUNCH_LATAM
        - SUNBED
        - BALINESE_BED
        - COCKTAILS
        - AFTER_HOUR
        - HAPPY_HOUR
        - EVENT
        - VERMOUTH
        - TARDEO
        - APERITIF
        - TASTING
      title: ShiftTypeEnum
    ProductTypeEnum:
      type: string
      description: >
        Representa el tipo de negocio del producto. CREDIT:  - Producto que
        representa valor monetario (gift cards, vouchers, saldo, crédito)  -
        Precio variable (is_fixed_price = false)  - Se trata como un
        pago/crédito, no como un consumo  - En integraciones POS se envía como
        parte de los "cobros_realizados"  ITEM:  - Producto vendible de precio
        fijo (menús, packs, experiencias, artículos)  - is_fixed_price = true  -
        Se trata como un consumo de producto, no como un pago  - NO se incluye
        dentro de "cobros_realizados"
      enum:
        - CREDIT
        - ITEM
      title: ProductTypeEnum
    BookingCancellationPolicyStatusEnum:
      type: string
      enum:
        - PENDING_SIGNATURE
        - SIGNATURE_EXPIRED
        - ACTIVE
        - COMPLETED
        - REVOKED
        - PENALTY_PARTIAL
        - PENALTY_CANCEL
        - PENALTY_NO_SHOW
      title: BookingCancellationPolicyStatusEnum
    CancellationPolicyEndedByEnum:
      type: string
      enum:
        - RESTOO_BOT
        - GUEST
        - STAFF
      title: CancellationPolicyEndedByEnum
    ChargeStatusEnum:
      type: string
      enum:
        - SUCCEEDED
        - PENDING
        - FAILED
      title: ChargeStatusEnum
    RefundStatusEnum:
      type: string
      enum:
        - PENDING
        - SUCCEEDED
      title: RefundStatusEnum
    CancellationPolicyTypeEnum:
      type: string
      enum:
        - NONE
        - GUARANTEE_AUTHORIZATION
        - PREPAYMENT
      title: CancellationPolicyTypeEnum
    CancellationPolicyAmountTypeEnum:
      type: string
      enum:
        - PER_PAX
        - PER_BOOKING
      title: CancellationPolicyAmountTypeEnum
  responses:
    UserNotFoundException:
      description: >-
        Business Logic Error — The request is syntactically correct but cannot
        be processed due to logical constraints. Example: attempting to create a
        booking on a closed day or outside the allowed hours.
      content:
        application/problem+json:
          schema:
            type: object
            properties:
              type:
                type: string
                description: A URI identifier that categorizes the error type.
                examples:
                  - about:blank
              title:
                type: string
                description: A short, human-readable summary of the problem type.
                examples:
                  - Conflict
              status:
                type: integer
                description: >-
                  The HTTP status code generated by the origin server for this
                  occurrence of the problem.
                examples:
                  - 409
              code:
                type: string
                description: >-
                  A short string indicating the error code that could be handled
                  programmatically.
                examples:
                  - BOOKING_IS_NOT_ON_SEATED_GROUP
              detail:
                type: string
                description: >-
                  A human-readable message providing more details about the
                  error.
                examples:
                  - The booking must be on the seated group status to be ended.
            required:
              - type
              - title
              - status
              - code
              - detail
    ValidationException:
      description: >-
        Validation Error — The request structure is correct, but one or more
        fields contain invalid or missing data. Example: missing required
        parameters, invalid formats, or out-of-range values.
      content:
        application/problem+json:
          schema:
            type: object
            properties:
              type:
                type: string
                description: A URI identifier that categorizes the error type.
                examples:
                  - about:blank
              title:
                type: string
                description: A short, human-readable summary of the problem type.
                examples:
                  - Validation Error
              status:
                type: integer
                description: >-
                  The HTTP status code generated by the origin server for this
                  occurrence of the problem.
                examples:
                  - 422
              code:
                type: string
                description: >-
                  A short string indicating the error code that could be handled
                  programmatically.
                examples:
                  - VALIDATION_ERROR
              detail:
                type: string
                description: >-
                  A human-readable message providing more details about the
                  error.
                examples:
                  - The request is not valid.
              errors:
                type: array
                description: >-
                  A detailed description of each parameter that failed
                  validation.
                items:
                  type: object
                  properties:
                    parameter:
                      type: string
                      description: The name of the parameter that failed validation.
                      examples:
                        - status
                    reason:
                      type: string
                      description: A human-readable description of the validation error.
                      examples:
                        - The selected status is invalid.
                  required:
                    - parameter
                    - reason
            required:
              - type
              - title
              - status
              - code
              - detail
              - errors
  securitySchemes:
    http:
      type: http
      description: >-
        All requests must include the static API Key in the Authorization header
        using the Bearer scheme.
      scheme: bearer

````