Cancel a Reservation
Mark an active reservation as Cancelled so it no longer holds tables while the booking record, guest details, timing and notes stay available.
In this article
Use this guide when a reservation should stop occupying physical tables but the team still needs the booking history. Cancellation is different from deletion: the reservation remains in the occurrence and can be reviewed later.
The action starts from the reservation occurrence detail. In the GB demo, Harbor Soho uses the Soho lunch service, and the capture can use Liam Scott only while that reservation is still active.
Before you start
- Harbor Demo Group and Harbor Soho are selected, or another organisation and location context is active.
- The operator has `reservation:view` to open the occurrence and `reservation:manage` to cancel a reservation.
- The reservation occurrence detail is open at `reservations/:occurrenceId` and has loaded its reservations and table assignments.
- There is a reservation that is not already `cancelled`. Already-cancelled reservations show delete or uncancel options instead of another cancellation action.
Instructions
- 1.
Open the occurrence detail
Open the reservation occurrence from the reservations calendar or the deep link route, then wait for the list or timeline to show the service reservations and table assignments.
- 2.
Select an active reservation
Find the guest reservation to cancel, such as Liam Scott in the GB demo, and confirm it is not already marked `Cancelada` or `cancelled`.
- 3.
Open the action modal
Use the row action labelled `Eliminar`, or open the reservation editor and press `Cancelar reserva`. Both entry points open the same choice modal before anything is changed.
- 4.
Choose cancellation instead of deletion
In the modal, choose `Cancelar reserva` when the record should remain. Do not choose `Eliminar` unless the intention is to remove the reservation permanently.
- 5.
Verify the released tables
After the success toast, the modal or editor closes and the occurrence detail refreshes. The reservation remains visible as `Cancelada` and no longer has a physical table assignment such as `Sin asignar`.
- 6.
Handle errors or corrections
If the update fails, stay on the same reservation context, resolve the error and retry. If the reservation was cancelled by mistake, use the available uncancel action only where the occurrence state allows it.
Validations and limits
- View-only access can load the occurrence, but cannot execute the cancellation action.
- The UI does not submit cancellation when the reservation id is missing or the operator lacks `reservation:manage`.
- The implemented update uses `PUT /api/app/{orgId}/{locationId}/reservations/{reservationId}` with status `cancelled` and an empty `table_ids` list.
- Cancelling keeps the reservation record and retained fields such as customer, party size, time, duration and notes.
- Cancelling removes the reservation table assignments and sets `cancelled_at` when it was previously empty.
- The action does not collect a cancellation reason, an internal note requirement or a customer notification confirmation.
- An already-cancelled reservation cannot be cancelled again from the UI.
- In an automatic open occurrence, a post-cancel optimisation refresh may be triggered after the cancellation has already been applied.
Expected result
The reservation remains in the occurrence as Cancelled, is released from physical table assignments, and the refreshed detail lets the floor team see that it no longer consumes capacity.