DineGlobeDocs

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.

GuestHostManager

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 —
Email 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 requestKey is 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 (otherwise POLICY_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_UNAVAILABLE with 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 /b link 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_UNAVAILABLE remains 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.