Waitlist
Waitlist (walk-in): the queue of guests without a reservation — adding to the queue, statuses and seating.
The waitlist (walk-in / waitlist) is the queue of guests who arrived without a reservation. The host adds the guest to the queue, the system estimates the wait time, and when a table is ready the guest is called and seated. This section covers both sides of the process:
- Restaurant side (tag
WaitingAdmin, path/api/wm/admin/restaurant/{restaurantId}/waitings) — adding to the queue, listing, changing status, calling and seating the guest, messaging with them. - Guest side (tag
WaitingGuest, path/api/rsv/mb/guest/walkins) — the guest joins the queue on their own, tracks their position in line and the time estimates.
All endpoints require a Bearer token (see Authentication). Times are ISO 8601 in the
restaurant’s local time zone. Errors are ProblemDetails (see Errors).
Waitlist entry (key fields)
A queue entry is described by the WaitingContract contract (in responses) and
UpdateWaitingItemContract (when creating/updating). Below are the fields needed in most
integrations.
| Field | Type | Description |
|---|---|---|
id | string | Queue entry identifier |
customerName | string | Guest name |
phone | string | Phone (call notifications are sent to it) |
email | string | |
groupSize | integer | Party size (number of guests) |
areas | string | Preferred area/room |
tableNumber | string | Assigned/requested table |
status | string | Entry status (in queue / called / seated / closed, etc.) |
state | string | Entry state |
type | string | Entry type |
source | string | Source (a marker for your channel) |
autoSeat | boolean | Automatic seating |
specialRequests | string | Guest’s special requests |
internalNotes | string | Internal notes (not shown to the guest) |
aboutGuestNotes | string | Notes about the guest |
created | date-time | Time the guest was added to the queue |
seated | date-time | Seating time |
closed | date-time | Time the entry was closed |
expectedTime | date-time | Expected seating time |
statusTime | date-time | Time of the last status change |
estimatedTurnOverTime | number | Estimated table turnover time, minutes |
estimatedReleaseTime | date-time | Estimated time the table frees up |
unreadMessageCount | integer | Number of unread messages from the guest |
receiptAmount | number | Receipt amount (if linked) |
eventId | integer | Event ID, if the entry is for an event |
createdBy / updatedBy | string | Who created / updated (audit) |
Nested objects
| Field | Object | Contains |
|---|---|---|
customerProfile | ProfileData | Guest profile: allergy[], vegetarian, vip, handicapAccessible, anniversary, birthdate, companyName, delivery address |
additionals | Additionals | Flags/preferences: highChair, vip, booth, highTop, babyChair, stroller, allergy, vegetarian, contactless, dontDisturb, event, eventTypes[], customs[] |
waiters[] | WaiterContract | Assigned servers: id, fullName, email, color, load |
details | Details | Extra details: cancelOptionName, cancelNote, cancelSource, paymentError, paymentLinkUrl |
guestTags[] | TagContract | Guest tags: id, name, color |
Adding a guest to the queue
Add an entry (restaurant side)
POST /waitings
Creates a waitlist entry on behalf of staff. Body — UpdateWaitingItemContract.
| Parameter | In | Type | Description |
|---|---|---|---|
restaurantId * | path | integer | Restaurant identifier |
The most commonly used body fields: customerName, phone, groupSize, areas,
expectedTimeMinutes (wait in minutes), estimatedTurnOverTime, specialRequests,
internalNotes, email, tableNumber, waiterIds[], autoSeat, additionals,
customerProfile.
curl -X POST https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "customerName": "John Parker", "phone": "+16175550123", "groupSize": 2, "areas": "Terrace", "specialRequests": "Window table" }'Guest joins the queue themselves
POST /api/rsv/mb/guest/walkins
Guest endpoint: the guest adds themselves to the queue (for example, via a widget or a kiosk). Body —
CreateMobileWalkinContract.
| Field | Type | Description |
|---|---|---|
restaurantId | integer | Restaurant identifier |
groupSize | integer | Party size |
expectedTime | integer | Desired wait, minutes |
customerName | string | Guest name |
phone | string | Phone |
email | string | |
areas | string | Preferred area |
specialRequests | string | Special requests |
aboutGuestNotes | string | Notes about the guest |
campaignInfo | string | Campaign/source marker |
additionals | object | Flags/preferences (Additionals) |
customerProfile | object | Guest profile (ProfileData) |
curl -X POST https://api.hostmeapp.com/api/rsv/mb/guest/walkins \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "restaurantId": 123, "groupSize": 3, "customerName": "Maria Ivanova", "phone": "+16175550100", "expectedTime": 30 }'Response. Returns the created booking entry as a
BookingContract.
Listing and reading entries
List entries for a period
GET /waitings
Returns all waitlist entries of the restaurant for a period.
| Parameter | In | Type | Description |
|---|---|---|---|
restaurantId * | path | integer | Restaurant identifier |
from | query | date-time | Period start |
to | query | date-time | Period end |
includeEvents | query | boolean | Include event entries |
Response — an array of WaitingContract.
curl -G https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings \ -H "Authorization: Bearer $TOKEN" \ --data-urlencode "from=2026-07-01T00:00:00" \ --data-urlencode "to=2026-07-01T23:59:59"Compact list
GET /waitings/compact
A lightweight list of entries (BookingCompactContract) — handy for a display board or dashboard: contains
id, customerName, phone, groupSize, areas, status, state, tableNumber,
expectedTime, estimatedTurnOver, unreadMessageCount and more, without the full order tree.
| Parameter | In | Type |
|---|---|---|
restaurantId * | path | integer |
from | query | date-time |
to | query | date-time |
Get an entry by ID
GET /waitings/{waitingItemId}
Returns an entry by identifier. Response — WaitingContract.
| Parameter | In | Type |
|---|---|---|
restaurantId * | path | integer |
waitingItemId * | path | string |
Updating and deleting an entry
Update an entry
PUT /waitings/{waitingItemId}
Updates a queue entry (name, phone, party size, area, wait, etc.). Body — the same fields as on
creation (UpdateWaitingItemContract): send the fields you are changing.
| Parameter | In | Type |
|---|---|---|
restaurantId * | path | integer |
waitingItemId * | path | string |
curl -X PUT https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings/ABC_ID \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "groupSize": 4, "areas": "Main Hall", "expectedTimeMinutes": 25 }'Guest removes themselves from the queue
DELETE /api/rsv/mb/guest/walkins/{walkinId}
Guest endpoint: the guest removes their own entry from the queue.
| Parameter | In | Type |
|---|---|---|
walkinId * | path | string |
Changing entry status
The entry lifecycle is driven by separate PUT endpoints. All of them take
restaurantId (path, integer) and waitingItemId (path, string).
| Endpoint | Purpose |
|---|---|
PUT /waitings/{waitingItemId}/sited | Mark the guest as seated (got a table) |
PUT /waitings/{waitingItemId}/close | Close the entry (guest seated/left) |
PUT /waitings/{waitingItemId}/cancel | Cancel the entry |
PUT /waitings/{waitingItemId}/reopen | Reopen a closed entry |
PUT /waitings/{waitingItemId}/rollback | Roll back the last status change |
Seat a guest
PUT /waitings/{waitingItemId}/sited
When the guest gets a table, the host marks the entry as seated. Body —
SeatBookingContract:
| Field | Type | Description |
|---|---|---|
tableNumber | string | Table number |
waiterIds[] | array | IDs of the assigned servers |
updatedBy | string | Who seated the guest |
externalWaiterUserName | string | Server name in the external system |
externalWaiterId | string | Server ID in the external system |
Response — the updated entry (BookingContract).
curl -X PUT https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings/ABC_ID/sited \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "tableNumber": "12", "waiterIds": [42] }'Cancel an entry
PUT /waitings/{waitingItemId}/cancel
| Parameter | In | Type | Description |
|---|---|---|---|
restaurantId * | path | integer | Restaurant identifier |
waitingItemId * | path | string | Entry identifier |
origin | query | string | Cancellation source (who is cancelling) |
Calling a guest
Call a guest
PUT /waitings/{waitingItemId}/call
When a table is ready, the host initiates the call. The guest receives a notification that the table is ready.
| Parameter | In | Type | Description |
|---|---|---|---|
restaurantId * | path | integer | Restaurant identifier |
waitingItemId * | path | string | Entry identifier |
tableNumber | query | string | Number of the ready table |
curl -X PUT "https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings/ABC_ID/call?tableNumber=12" \ -H "Authorization: Bearer $TOKEN"Messaging with the guest
The host and the guest can exchange messages (for example, about the wait or the table being ready).
| Endpoint | Purpose |
|---|---|
GET /waitings/{waitingItemId}/messages | List messages for an entry |
POST /waitings/{waitingItemId}/sendmessage | Send a message |
GET /waitings/messages/unread/count | Number of unread messages (per restaurant) |
POST /waitings/{waitingItemId}/messages/readall | Mark all messages as read |
Messages for an entry
GET /waitings/{waitingItemId}/messages
Returns an array of MessageContract: id, body, time, origin (host/client), phone,
deliveryStatus, deliveryTime, isRead.
Send a message to the guest
POST /waitings/{waitingItemId}/sendmessage
| Parameter | In | Type | Description |
|---|---|---|---|
restaurantId * | path | integer | Restaurant identifier |
waitingItemId * | path | string | Entry identifier |
origin | query | string | Who is sending: host or client |
Body — CreateMessageContract (body — the message text).
curl -X POST "https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings/ABC_ID/sendmessage?origin=host" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "body": "Your table will be ready in 5 minutes" }'Unread messages
GET /waitings/messages/unread/count
Response — CountContract: the overall count and countItems[] (entry id + count of unread
messages per entry).
Wait time estimate (ETA) and statistics
Queue statistics (restaurant side)
GET /waitings/stats
Returns a queue summary and the average wait time estimate. Response — WalkinStatistic:
| Field | Type | Description |
|---|---|---|
inList | integer | Number of guests in the queue |
called | integer | Number of called guests |
tablesAvailable | integer | Number of free tables |
totalCovers | integer | Total capacity (seats) |
coversAvailable | integer | Free seats |
oneTwoGroup | object | Average wait for parties of 1–2 guests (valueMinutes, totalMinutes) |
threeFourGroup | object | Average wait for parties of 3–4 guests |
fiveSixGroup | object | Average wait for parties of 5–6 guests |
waitByGroup[] | array | Estimate by party size (avgSeatTime, tableTop, suggestedTables) |
waitByTable[] | array | Estimate by table type |
| Parameter | In | Type | Description |
|---|---|---|---|
restaurantId * | path | integer | Restaurant identifier |
partySizes | query | string | Filter by party sizes |
areaList | query | string | Filter by areas |
Estimate for the guest
GET /api/rsv/mb/guest/restaurants/{restaurantId}/walkins/expected
Guest endpoint: the expected wait time estimate by party size. Response —
ExpectedTimeContract (expectedMinutesForSizes — a “party size → minutes” map).
| Parameter | In | Type |
|---|---|---|
restaurantId * | path | integer |
partySizes | query | string |
areaList | query | string |
Waitlist settings
GET / PUT /waitings/.../settings
Read and update the queue module settings. Path:
/api/wm/admin/restaurant/{restaurantId}/settings. Body/response — WaitingSettingsContract:
| Field | Type | Description |
|---|---|---|
enabled | boolean | Online waitlist: guests can join the waitlist themselves (widget, apps, QR). When off, a guest join returns 409 |
enableManualHold | boolean | The guest can put themselves “on hold” so the host does not call them |
autoCall | boolean | The panels call the guest as soon as the host assigns them a table. The server only stores the flag |
autoTableAssignment | boolean | A guest who joins the waitlist online gets the table that frees up first right away (with table-availability estimation). No call is made |
autoCallAndTableAssignment | boolean | When a table frees up, the server calls the first fitting waitlist guest and holds the table for them |
adjustEstimatedWaitTime | boolean | Adjust the wait time estimate |
waitEtaRuleEnabled | boolean | Use the ETA calculation rule |
maximumHoldTime | integer | Maximum hold time, minutes |
waitEstimateLookBackMinutes | integer | Look-back window for the wait estimate, minutes |
etaAlgorithm | string | ETA calculation algorithm |
showAdditionalsInAreas | boolean | Show flags/preferences in areas |
positionMessages[] | array | Messages to the guest when their position in line changes (minPos, maxPos, messageTemplate) |
statusMessages[] | array | Messages to the guest on status change (fromStatus, toStatus, depositStatus, messageTemplate) |
curl -G https://api.hostmeapp.com/api/wm/admin/restaurant/123/settings \ -H "Authorization: Bearer $TOKEN"Guest side: tracking the queue
Guest endpoints (/api/rsv/mb/guest/walkins) let the guest track their place in the queue and
manage their entry.
| Endpoint | Purpose |
|---|---|
GET /api/rsv/mb/guest/walkins | The guest’s entries (parameters skip, top, from, to) |
GET /api/rsv/mb/guest/walkins/{walkinId} | Get the guest’s entry (WalkinGuestContract) |
PUT /api/rsv/mb/guest/walkins/{walkinId}/seat | The guest confirms seating |
PUT /api/rsv/mb/guest/walkins/{walkinId}/skip | The guest skips their turn |
DELETE /api/rsv/mb/guest/walkins/{walkinId} | The guest deletes the entry |
GET /api/rsv/mb/guest/restaurants/{restaurantId}/walkins/line | Position in line |
GET /api/rsv/mb/guest/walkins/data | Reference data (restaurants, statuses) |
Walk-in status (guest)
GET /api/rsv/mb/guest/walkins/{walkinId}
Returns the guest’s entry (WalkinGuestContract) with the fields customerName, phone, groupSize,
areas, status, tableNumber, expectedTime, estimatedTurnOverTime, restaurantName,
restaurantImage, timeZone, plus the guest profile and flags.
Position in line
GET /api/rsv/mb/guest/restaurants/{restaurantId}/walkins/line
Returns the entry’s current position in the queue (LineStateContract):
| Field | Type | Description |
|---|---|---|
bookingId | string | Entry identifier |
overallLinePosition | integer | Position in the overall queue |
groupLinePosition | integer | Position in the queue for this party size |
groupLineLength | integer | Queue length for this party size |
areaLinePosition | object | Position in the queue by area |
| Parameter | In | Type |
|---|---|---|
restaurantId * | path | integer |
walkinId | query | string |
groupSize | query | integer |
curl -G "https://api.hostmeapp.com/api/rsv/mb/guest/restaurants/123/walkins/line" \ -H "Authorization: Bearer $TOKEN" \ --data-urlencode "walkinId=ABC_ID" \ --data-urlencode "groupSize=2"Walk-in data (guest)
GET /api/rsv/mb/guest/walkins/data
Reference data for the guest interface (GuestWalkinsDataContract): restaurantIds[],
statuses[].
Related sections. For guests with a reservation, use Reservations. General request rules and the error format are in Conventions and Errors.