Skip to content

Bookings — write

Create a reservation on a brand. Pass the brand slug as `brand`, the guest’s name + party size + date + time. Phone and email are optional (matches the FOH walk-in flow). Backend runs the canonical capacity + large-party + attendance-confirmation gates — same rules as the dashboard form.

Required scope: bookings.write

Parameter Type Required Description
brand string no Brand slug (e.g. ‘il-caminetto’). Optional in JWT mode (auto-resolved from session); required in API-key mode when key grants multiple brands.
name string yes Guest’s name.
phone string no E.164 phone (e.g. +61400123456). Optional for walk-ins.
email string no Email address. Optional.
numberOfPeople number yes
date string yes Display date string (e.g. “Friday, April 4, 2026”).
time string yes Display time string (e.g. “7:00 PM”).
timestamp number no Unix ms-epoch in brand TZ. Optional — backend canonicalizes from `date`+`time` if omitted.
notes string no Optional internal notes.
notifyCustomer boolean no Send a confirmation SMS to the customer. Default true; set false to log a booking silently.
idempotencyKey string no Optional client-supplied dedup key (UUID). Retries within 24h with the same key return the original response without re-creating. Same idea as Stripe / Linear idempotency-key headers.

Update a reservation: change date/time, party size, or notes. Pass at least one mutable field. Backend cascades shrinks/moves to the waitlist trigger — if a freed slot matches a waiting guest, an offer SMS fires automatically.

Required scope: bookings.write

Parameter Type Required Description
brand string no Brand slug. Optional in JWT mode; in API-key mode pass the slug from list_brands. Must match the reservation when supplied.
id string yes Reservation ID (24-char hex).
numberOfPeople number no
date string no New display date (e.g. “Friday, May 1, 2026”).
time string no New display time (e.g. “7:30 PM”).
notes string no Replaces the internal notes.
foodDrinkNotes string no
seatingNotes string no
idempotencyKey string no

Cancel a reservation. Triggers the waitlist “slot freed” engine — a matching waiting guest will be offered the slot via SMS. Customer receives a cancellation notification per brand settings.

Required scope: bookings.write

Parameter Type Required Description
brand string no Brand slug. Optional in JWT mode; required in multi-brand API-key mode.
id string yes
reason string no Optional human reason captured for audit (e.g. “guest changed plans”).
idempotencyKey string no

Mark a reservation as ‘arrived’ — guest has arrived at the restaurant but hasn’t been seated yet.

Required scope: bookings.write

No parameters.

Mark a reservation as ‘seated’ — guest is at their table.

Required scope: bookings.write

No parameters.

Mark a reservation as ‘completed’ — service finished, guest has left.

Required scope: bookings.write

No parameters.

Mark a reservation as ‘no-show’ — guest never arrived. Frees the slot for the waitlist engine.

Required scope: bookings.write

No parameters.

Replace the internal notes on a reservation. Pass `append: true` to keep the existing note and concatenate with a newline. Use `field` to target food/drink or seating tabs; defaults to the main notes field.

Required scope: bookings.write

Parameter Type Required Description
brand string no Brand slug. Optional in JWT mode; required in multi-brand API-key mode.
id string yes
note string yes
field enum no Which notes field to write (notes / foodDrinkNotes / seatingNotes).
append boolean no When true, append to the existing note with a newline. Default replaces.