メインコンテンツへ移動

QR ordering

QR ordering, waitlist and feedback

The unauthenticated guest surface. These routes are called from a diner’s phone, so there is no API key: the QR token or the restaurant slug in the path is what scopes the request, and the order routes additionally assert that the order belongs to the token’s own table.

Resolve a QR token

GET /public/qr/{token} スコープ: public (no key)

Resolves the token printed on a table code into the QR record and the restaurant menu categories behind it. This is the first call the guest flow makes after a scan: it establishes which restaurant, which table and which ordering type (dine-in or takeout) the session belongs to.

パスパラメータ

tokenstring必須

Token encoded in the QR code.

リクエスト

curl 'https://api.tablezio.com/public/qr/4f8c2b1a9d'

Get the menu for a QR token

GET /public/qr/{token}/menu スコープ: public (no key)

Returns the live menu for the token, with the kitchen station attached to each item. It reads the same menu records the POS and the online menu read, so an item marked unavailable is unavailable here in the same request.

パスパラメータ

tokenstring必須

Token encoded in the QR code.

リクエスト

curl 'https://api.tablezio.com/public/qr/4f8c2b1a9d/menu'

Place an order from a QR code

POST /public/qr/{token}/orders スコープ: public (no key)

Creates a self-service order for the table the token belongs to. Prices and item names are not taken from the request: the server looks each menu item up by id and uses its stored price and name, so a tampered payload cannot change what a dish costs. Each item is routed to the station configured on its category, defaulting to the kitchen.

パスパラメータ

tokenstring必須

Token encoded in the QR code.

ボディパラメータ

itemsobject[]必須

Each with menuItemId, quantity, and optional modifiers and notes.

customerNamestring任意

Name shown to the staff for this order.

notesstring任意

Free-text note for the whole order.

リクエスト

curl -X POST 'https://api.tablezio.com/public/qr/4f8c2b1a9d/orders' \
  -H 'Content-Type: application/json' \
  -d '{"customerName":"Ana","items":[{"menuItemId":"5a1b2c3d4e5f6a7b8c9d0e1f","quantity":2}]}'

Add items to an open QR order

POST /public/qr/{token}/orders/{orderId}/items スコープ: public (no key)

Appends items to an order already open on that table — the second round, rather than a second order. Before appending, the service asserts the order belongs to this token’s table, which is what stops a diner from adding items to a neighbouring bill.

パスパラメータ

tokenstring必須

Token encoded in the QR code.

orderIdstring必須

Order opened from the same token.

ボディパラメータ

itemsobject[]必須

Each with menuItemId, quantity, and optional modifiers and notes.

リクエスト

curl -X POST 'https://api.tablezio.com/public/qr/4f8c2b1a9d/orders/507f1f77bcf86cd799439011/items' \
  -H 'Content-Type: application/json' \
  -d '{"items":[{"menuItemId":"5a1b2c3d4e5f6a7b8c9d0e1f","quantity":1}]}'

Read the status of a QR order

GET /public/qr/{token}/orders/{orderId} スコープ: public (no key)

Returns the current state of an order placed from this token, so the guest can follow it from their phone without asking a member of staff. The same table check as the append route applies: only the order tied to this token’s table is exposed.

パスパラメータ

tokenstring必須

Token encoded in the QR code.

orderIdstring必須

Order opened from the same token.

リクエスト

curl 'https://api.tablezio.com/public/qr/4f8c2b1a9d/orders/507f1f77bcf86cd799439011'

Read the online waitlist settings

GET /public/restaurants/{slug}/waitlist スコープ: public (no key)

Returns what a join page needs: restaurant branding, whether the venue is open right now (from its configured opening hours), the largest party accepted online, the owner’s short message, how many parties are waiting with an estimated wait, and which notification channels (email / SMS) are available. Responds 404 with code WAITLIST_DISABLED when the owner has not switched the online waitlist on, and 403 with WAITLIST_NOT_IN_PLAN when the plan does not include it.

パスパラメータ

slugstring必須

Restaurant slug, the same one used by tablezio.com/r/{slug}.

リクエスト

curl 'https://api.tablezio.com/public/restaurants/casa-pepe/waitlist'

Join the waitlist

POST /public/restaurants/{slug}/waitlist/join スコープ: public (no key)

Adds a party to the restaurant’s live waitlist (it appears in the dashboard tagged “Online”). Requires a name, the party size, a phone and/or an email, and consent to be contacted. Refused outside opening hours (WAITLIST_CLOSED), above the venue’s party cap (WAITLIST_PARTY_TOO_LARGE) or when the same phone/email is already waiting (409 WAITLIST_ALREADY_JOINED). Returns a signed status token — keep it: it is the only handle to the entry.

パスパラメータ

slugstring必須

Restaurant slug, the same one used by tablezio.com/r/{slug}.

リクエスト

curl -X POST 'https://api.tablezio.com/public/restaurants/casa-pepe/waitlist/join' \
  -H 'Content-Type: application/json' \
  -d '{"guestName":"Ana","partySize":2,"phone":"+34600000000","consent":true}'

Check a waitlist position

GET /public/waitlist/{token} スコープ: public (no key)

Returns the party’s state (waiting, notified, seated, cancelled or expired), its position, the parties ahead and an estimated wait in minutes (always an estimate). The token is an HMAC-signed handle to one entry: a tampered or unknown token answers 404 WAITLIST_ENTRY_NOT_FOUND, so entries cannot be enumerated.

パスパラメータ

tokenstring必須

Token returned by the join endpoint.

リクエスト

curl 'https://api.tablezio.com/public/waitlist/{token}'

Leave the waitlist

POST /public/waitlist/{token}/leave スコープ: public (no key)

Removes the party from the queue (the entry is kept as cancelled so staff can see it) and returns the updated status. Answers 409 WAITLIST_NOT_ACTIVE once the party has been seated or already left.

パスパラメータ

tokenstring必須

Token returned by the join endpoint.

リクエスト

curl -X POST 'https://api.tablezio.com/public/waitlist/{token}/leave'

Submit guest feedback

POST /public/restaurants/{slug}/feedback スコープ: public (no key)

Records feedback against the restaurant identified by slug. Because it lands in the same feedback records the platform uses internally, a comment collected from a QR page is visible in the same place as one collected at the table.

パスパラメータ

slugstring必須

Restaurant slug.

リクエスト

curl -X POST 'https://api.tablezio.com/public/restaurants/casa-pepe/feedback' \
  -H 'Content-Type: application/json' \
  -d '{"rating":5,"comment":"Great service"}'

Plan catalogue

GET /public/pricing スコープ: public (no key)

Returns the plans on offer, in euros per month, straight from the same catalogue the pricing page renders and checkout charges from — so it cannot disagree with what you are quoted. It is a platform-level endpoint, not a restaurant one. Plans not currently sold are omitted. What you are actually billed still depends on your account: read this as the public price list, not as a billing API.

リクエスト

curl 'https://api.tablezio.com/public/pricing'

Contact form

POST /public/contact スコープ: public (no key)

Submits the marketing contact form. It requires a valid Turnstile token, which is the same bot check the form on tablezio.com uses; a request without one is rejected before any mail is sent.

ボディパラメータ

namestring必須

Sender name.

emailstring必須

Reply-to address.

restaurantNamestring任意

Restaurant the enquiry is about.

messagestring必須

The enquiry itself.

turnstileTokenstring必須

Cloudflare Turnstile token. Validated server-side against the caller IP.

langstring任意

Language the notification email is sent in.

リクエスト

curl -X POST 'https://api.tablezio.com/public/contact' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Ana","email":"[email protected]","message":"Hi","turnstileToken":"0.xyz"}'