Skip to main content
The waitlist is a granted location’s walk-in queue. It uses the same access as bookings: your app’s location grant, the per-location bookings rollout, and the bookings:* scopes. It is available at Maple-native locations only; a provider-managed location answers 422 capability_unsupported. Maple sends every guest text. Notifying a party sends Maple’s table-ready SMS and starts the venue’s response window. You never message waitlist guests yourself. A guest-facing app usually needs bookings:read and bookings:write. A host-stand or POS app also needs bookings:manage. Set MAPLE_BASE and MAPLE_KEY as in Take bookings.

1. Read the queue

The waitlist lists active entries first in line first, and open says whether remote parties may join. Each waitlist_entry carries its position, the quoted_wait it was given, and the guest’s contact details. To quote a wait before a party joins:
A wait is always a band: parties_ahead counts the parties that compete for the same tables, and wait_minutes gives a min–max range. Parties above 50 answer 422 party_size_out_of_bounds.

2. Add a party

Remote parties can only join an open waitlist. A venue opens it with POST /v1/locations/{locationId}/waitlist/open (bookings:manage).
  • phone is required: it is the only way Maple can tell the guest their table is ready. Maple stores it normalized to E.164 (US numbers may omit +1). A number Maple cannot text, such as one with an extension, answers 400.
  • A closed waitlist answers 409 waitlist_closed.
  • idempotency_key works like booking writes: retry a lost response with the same key and body to get the same entry back, even if the waitlist has closed since. The key is scoped to your app across all its locations: the same key with a different body, or sent to another location, answers 409 idempotency_key_reused. See Idempotency.

3. Notify and seat

When a table is about to free up, notify the party:
The entry becomes notified. If the guest does not respond within the venue’s response window, it expires as expired_no_response. Notifying an entry that is no longer waiting returns it unchanged. A location where Maple is not texting guests answers 422 guest_messaging_unavailable: guest texts aren’t rolled out there yet, or the venue turned them off. Seat or remove the party instead. When the party arrives, seat it:
Maple seats the party at the earliest table that fits it right now, the same way the venue’s host stand seats a walk-in. The entry comes back seated with a booking_id. That walk-in booking (channel: walk_in) reads with GET /v1/bookings/{bookingId} and appears in booking lists like any other booking.
  • No table free now answers 409 slot_unavailable; notify or wait, then try again.
  • An entry that already left the queue answers 409 illegal_transition.

4. Take a party out of line

Both return the entry. An entry that already left the queue, whether seated, removed, or expired, is returned unchanged. POST /v1/locations/{locationId}/waitlist/close stops remote parties from joining. Parties already waiting stay in line.

Entry statuses

position is set while an entry is active (waiting, notified, on_my_way) and null afterwards.

Staying current

Subscribe to the waitlist events (waitlist_entry.created, .notified, .seated, .removed, .expired) to learn about changes the venue or other apps make. Each event embeds the entry’s latest state. To reconcile after a gap, read GET /v1/locations/{locationId}/waitlist; avoid polling it more often than every 15 seconds. Waitlist calls share the bookings budget of 300 requests per minute per app and environment; see Rate limits.