Making a booking
The guest booking form and the staff phone path: every field, slot states, terms, the DG confirmation code and what happens on submit.
A booking is created in one of two ways: a guest books on the venue’s public booking page, or a member of the venue’s team takes the party by phone or at the door. Both paths run through the same table allocator, so two parties can never hold the same table at the same time. You can try the guest path right now on the live demo booking page — no account needed.
Where guests book
Every published venue with at least one active service has a public page at
/{slug}/book, reached from the venue profile’s Book a table button and
from the View & book → cards on the landing page. The header shows the
venue name and the line “{city}, {country} · times shown in {timezone}” —
every time on the page is the venue’s own time zone, never your device’s. A
venue with no bookable service says so plainly: “Online booking is not
available for this venue yet — please contact the venue directly.”
Step 1 — search for a table
The first form is a plain search. Before you submit it, the page says: “Pick a service, party size and date, then find a table.”
| Field | Limits | Notes |
|---|---|---|
| Service | one of the venue’s active services | options read “{name} (parties {min}–{max})” |
| Party size | integer 1–200 | defaults to 2; the server re-checks it against the service’s own bounds |
| Date | today onward, venue-local | the picker starts at the venue’s local today; how far ahead you may book is decided per service, server-side |
The button reads Find a table. An unknown or retired service answers: “That service is not available — choose another service.”
Step 2 — pick a time
The second step runs a real availability read for that day, service and party. It is a live picture, not a promise — the booking is only certain when the submit in the next section commits. Every miss is stated as plain text:
- “That date is past the venue’s booking window.”
- “The venue is closed on {date}.”
- “No times are bookable on {date} for that party.”
- “Party must be between the offering bounds ({min}-{max}).”
- “Booking terms are not published for this service yet — please contact the venue.”
Bookable times arrive as time chips with two possible states:
| Slot state | What you see | What it means |
|---|---|---|
AVAILABLE |
a selectable time chip | the slot passed the venue’s rules and a physical table fit exists |
NOTICE |
a disabled, greyed chip suffixed “too soon — call us” | the slot sits inside the service’s minimum-notice window; online intake can never take it |
If every remaining slot is inside the notice window the page says: “Every remaining time today is inside the venue’s booking notice window. Please choose another day or call the venue.”
The booking terms panel
Above the guest fields, a Booking terms section shows the venue’s published terms text in the language you are reading (falling back to the venue’s default language). If the service carries a deposit, the panel adds the line “Deposit required at booking: {amount} minor units ({currency}).” — a raw integer in minor units, on purpose, so the number is exact. Free- cancellation windows are not part of this pre-booking display; a cancellation is quoted from the accepted terms at the moment one is made — see Changing & cancelling and Booking policies & cancellation.
Guest details
| Field | Limits | On error |
|---|---|---|
| Your name | required, at most 160 characters | — |
| required, at most 254 characters | “Enter a valid email address.” | |
| Phone (optional) | E.164 format, e.g. +12125550123 |
“Phone numbers are E.164, e.g. +12125550123.” |
| Anything the venue should know? (optional) | free text, at most 1000 characters | stored with the booking for the venue’s team |
The submit button reads Book this table, flips to Booking… while the request is in flight, and stays disabled until an answer comes back.
What the submit actually does
- A
requestKeyis minted once per form and carried as a hidden field. A double click replays the same idempotency identity on the server and returns the same booking — a double submit never books twice. Searching again starts a fresh attempt, which is exactly what it should be. - The server re-runs every check under the venue’s inventory lock: the slot
is still free, the service schedule has not changed since your read
(otherwise
AVAILABILITY_STALE), the accepted terms still govern (otherwisePOLICY_STALE), the notice window, horizon and party bounds hold, and a physical table fit exists. Only then is the table allocated. - If another party took the table first, the answer is
SLOT_UNAVAILABLEwith up to four nearest open alternatives attached: “That time just went to another guest — the nearest open times are attached.” Your form stays filled in; pick an alternative and submit again. - A deposit service refuses honestly during the pilot with
PAID_BOOKING_UNAVAILABLE: “This service requires a deposit, which is not available online yet. Please book by phone.” Nothing is charged and nothing is half-created. - The venue being unusually busy can answer
VENUE_LOCK_TIMEOUT, which is retryable — submit the same request again.
Request-mode services stop here and hand the decision to the venue — see Request-approval bookings.
Your confirmation code
An instant booking answers with the heading “Your table is booked”, the
status line “Booked. Keep your confirmation code.”, and the code itself,
rendered very large: DG- followed by 8 characters. The alphabet omits the
letters I, L, O and U, so codes read aloud cleanly over the phone. Under the
code: “{date}, {time} ({timezone}) · party of {n}”. The screen then states,
verbatim: “Show this code at the venue. Changing or cancelling from this
screen is not available in the pilot yet — contact the venue, which can find
your booking instantly with this code.”
During the unpaid pilot no email provider is connected: a confirmation email is composed and then recorded as a visible failed delivery rather than sent. The code on the screen is the artifact that works — the venue finds your booking by code instantly. Guest self-service (status, calendar file, cancelling) runs through the one-time
/blink described in Guest self-service links.
The staff phone path
From the venue’s Today board, Add booking opens the two-step staff intake. Step one is “Service” and “Party size” with a Show slots button; step two lists “Today’s slots” together with the service’s accepted terms text. Time chips inside the notice window carry a “short notice” tag and are bookable — the minimum-notice rule is an online rule, and the venue taking a party in person satisfies it. Every other rule still binds staff exactly as it binds the website: closed days, the booking horizon, party bounds, table capacity and the published terms. The form asks for “Party name” (required) and “Email (optional)”; Book the walk-in creates the booking and opens its reservation detail page. Door parties with no contact details at all are covered in Walk-ins & staff intake.
Single-market pilot evidence only: one approved country and its listed capabilities do not constitute global support; unlisted countries and capabilities stay disabled. Paid bookings are switched off behind capability gates that require signed evidence, so
PAID_BOOKING_UNAVAILABLEremains the honest answer for deposit services until a gate passes — see Payments (pilot posture).
Errors you may see
| Code | Meaning | What to do |
|---|---|---|
VALIDATION |
a field failed its bounds or format | fix the named field and resubmit |
SLOT_UNAVAILABLE |
the slot went to another party between your read and your submit | pick one of the attached alternative times |
AVAILABILITY_STALE |
the venue’s schedule changed after your read | search the same day again and book from the fresh picture |
POLICY_STALE |
the booking terms changed since you accepted them | review and accept the current terms, then rebook |
IDEMPOTENCY_MISMATCH |
the same request key was replayed with a different payload | start a new search so a fresh key is minted |
PAID_BOOKING_UNAVAILABLE |
the service needs a deposit and the payments gate is closed | book by phone, or choose a free service |
VENUE_LOCK_TIMEOUT |
the venue was too busy to commit in time | retry the same request; it is safe to do so |
RATE_LIMITED |
too many attempts from your address | wait a moment and try again |
The full catalogue with every remedy lives in Error codes & fixes.