> ## 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.

# Booking Lifecycle

> All booking statuses, what they mean, and who drives each transition.

A booking in Restoo moves through a defined set of [statuses](/getting-started/enums#bookingstatus) from creation to completion. Understanding this lifecycle is essential for reacting correctly to [webhooks](/getting-started/webhooks) and driving status transitions from your integration.

***

## Status transitions

The following flowcharts illustrate the allowed status transitions for bookings in Restoo, depending on whether they belong to the current, past, or future [Work Day](/getting-started/key-concepts#work-day).

<Info>
  Status groups highlighted in blue represent sets of statuses that can freely
  transition among each other.
</Info>

<Tabs>
  <Tab title="Current work day">
    ```mermaid theme={null}
    ---
    description: "Current work day booking status flowchart."
    config:
          fontFamily: monospace
          flowchart:
                nodeSpacing: 40
                rankSpacing: 60
                titleTopMargin: 50
                subGraphTitleMargin:
                      top: 5
                      bottom: 25
    ---
    flowchart

          CONFIRMED["CONFIRMED"]
          ARRIVED["ARRIVED"]
          WAIT_LIST_WALK_IN["WAIT_LIST_WALK_IN"]
          ATTENDED["ATTENDED"]

          subgraph Seated_Group["Seated Group"]
                SEATED["SEATED"]
                DESSERTS["DESSERTS"]
                ACCOUNT_SENT["ACCOUNT_SENT"]
                ACCOUNT_PAID["ACCOUNT_PAID"]
          end

          subgraph Lost_Group["Lost Group"]
                CANCELED["CANCELED"]
                NO_SHOW["NO_SHOW"]
          end

          subgraph Rejected_Group["Rejected Group"]
                DECLINED_BY_MERCHANT["DECLINED_BY_MERCHANT"]
                DELETED["DELETED"]
          end

          subgraph Unattended_Group["Unattended Group"]
                Lost_Group
                Rejected_Group
          end

          subgraph Unconfirmed_Group["Unconfirmed Group"]
                REQUESTED["REQUESTED"]
                Pending_Group
          end

          subgraph Pending_Group["Pending Group"]
                PENDING_MERCHANT_CONFIRMATION["PENDING_MERCHANT_CONFIRMATION"]
                PENDING_WAIT_LIST_BOOKING["PENDING_WAIT_LIST_BOOKING"]
          end

          Unconfirmed_Group --> CONFIRMED
          Unconfirmed_Group --> Rejected_Group
          WAIT_LIST_WALK_IN <-..-> SEATED
          WAIT_LIST_WALK_IN <-..-> Unattended_Group
          ARRIVED <-..-> SEATED
          CONFIRMED <-..-> ARRIVED
          CONFIRMED <-..-> SEATED
          CONFIRMED <-..-> Unattended_Group
          Seated_Group ---> ATTENDED
          ATTENDED --> SEATED
          ATTENDED --> DELETED
          Rejected_Group ---> Pending_Group
          Unconfirmed_Group --> CANCELED

          classDef default color:black,stroke:black,stroke-width:2px,fill:white;
          classDef interchangeable color:white,stroke:white,fill:#246FE5;
          classDef notInterchangeable stroke:#CCC,fill:#B3B3B3,fill-opacity:0.5;

          class Unconfirmed_Group,Pending_Group,Seated_Group,Rejected_Group,Lost_Group interchangeable;
          class Unattended_Group notInterchangeable;

          linkStyle default stroke-width:3;
          linkStyle 2,3,4,5,6,7 stroke-dasharray:5;

    ```
  </Tab>

  <Tab title="Past work day">
    ```mermaid theme={null}
    ---
    description: "Past work day booking status flowchart."
    config:
          fontFamily: monospace
          themeVariables:
                strokeWidth: 3
          flowchart:
                nodeSpacing: 40
                rankSpacing: 60
                titleTopMargin: 50
                subGraphTitleMargin:
                      top: 5
                      bottom: 25
    ---
    flowchart

          subgraph Ended_Group["Ended Group"]
                ATTENDED["ATTENDED"]
                CANCELED["CANCELED"]
                NO_SHOW["NO_SHOW"]
                DECLINED_BY_MERCHANT["DECLINED_BY_MERCHANT"]
                DELETED["DELETED"]
          end

          classDef default color:black,stroke:black,stroke-width:2px,fill:white;
          classDef interchangeable color:white,stroke:white,fill:#246FE5;

          class Ended_Group interchangeable;
    ```
  </Tab>

  <Tab title="Future work day">
    ```mermaid theme={null}
    ---
    description: "Future work day booking status flowchart."
    config:
          fontFamily: monospace
          themeVariables:
                strokeWidth: 3
          flowchart:
                nodeSpacing: 10
                rankSpacing: 80
                titleTopMargin: 50
                subGraphTitleMargin:
                      top: 5
                      bottom: 25
    ---
    flowchart

          subgraph Unconfirmed_Group["Unconfirmed Group"]
                REQUESTED["REQUESTED"]
                Pending_Group
          end

          subgraph Pending_Group["Pending Group"]
                PENDING_MERCHANT_CONFIRMATION["PENDING_MERCHANT_CONFIRMATION"]
                PENDING_WAIT_LIST_BOOKING["PENDING_WAIT_LIST_BOOKING"]
          end

          CONFIRMED["CONFIRMED"]

          subgraph Withdrawn_Group["Withdrawn Group"]
                CANCELED["CANCELED"]
                Rejected_Group
          end

          subgraph Rejected_Group["Rejected Group"]
                DECLINED_BY_MERCHANT["DECLINED_BY_MERCHANT"]
                DELETED["DELETED"]
          end

          Unconfirmed_Group --> CONFIRMED
          Unconfirmed_Group <--> Rejected_Group
          CONFIRMED <-..-> Withdrawn_Group
          Unconfirmed_Group --> CANCELED

          linkStyle default stroke-width:4px;
          classDef default color:black,stroke:black,stroke-width:2px,fill:white;
          classDef interchangeable color:white,stroke:white,fill:#246FE5;
          classDef notInterchangeable stroke:#CCC,fill:#B3B3B3,fill-opacity:0.5;

          class Unconfirmed_Group,Pending_Group,Rejected_Group interchangeable;
          class Withdrawn_Group notInterchangeable;

          linkStyle default stroke-width:3;
          linkStyle 2 stroke-dasharray:5;
    ```
  </Tab>
</Tabs>

## Who drives each transition

### Your integration

Your integration drives status changes by calling Restoo API endpoints directly. The initial status returned when creating a booking depends on the venue configuration and, where applicable, the fallback option selected during the availability check — see [Booking Creation Flow](/booking-channel-api/booking-creation-flow) for the possible outcomes.

Your integration can also cancel a booking from `CONFIRMED`, `REQUESTED`, `PENDING_MERCHANT_CONFIRMATION` or `PENDING_WAIT_LIST_BOOKING` — see [Cancellation Flow](/booking-channel-api/cancellation-flow#which-bookings-can-be-cancelled).

### Restoo platform (you receive a webhook)

Many transitions are triggered by venue staff actions or automated platform logic — your integration does not initiate them. You are notified via `booking.created` or `booking.updated` webhooks when they occur. Both event types are fired for **all** bookings, regardless of how or where they were created.

Common examples include venue staff accepting or declining a pending booking, marking a customer as arrived or a no-show, and platform-driven resolution of wait list and reconfirmation flows.

<Note>
  When a wait list slot opens, the customer is contacted — either automatically
  by Restoo or manually by venue staff. The customer must actively accept or
  decline the offer. Being on the wait list does not guarantee them the slot.
</Note>

### POS integration only

The POS integration drives additional transitions through dedicated endpoints: seating the table, tracking optional service stages, and closing the ticket. See [Ticket Flow](/pos-api/ticket-flow) for details.

***

## Reconfirmation

Some venues require customers to confirm their attendance within a set time window before the reservation date. When this applies, Restoo handles the reconfirmation process automatically — it contacts the customer and updates the booking accordingly. No action is required from your integration.

If you want to trigger reconfirmation manually from your integration, use the [`Reconfirm Booking`](/booking-channel-api/methods/bookings/reconfirm) endpoint.
