Zum Inhalt springen

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} Berechtigung: 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.

Pfadparameter

tokenstringErforderlich

Token encoded in the QR code.

Anfrage

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

Get the menu for a QR token

GET /public/qr/{token}/menu Berechtigung: 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.

Pfadparameter

tokenstringErforderlich

Token encoded in the QR code.

Anfrage

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

Place an order from a QR code

POST /public/qr/{token}/orders Berechtigung: 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.

Pfadparameter

tokenstringErforderlich

Token encoded in the QR code.

Body-Parameter

itemsobject[]Erforderlich

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

customerNamestringOptional

Name shown to the staff for this order.

notesstringOptional

Free-text note for the whole order.

Anfrage

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 Berechtigung: 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.

Pfadparameter

tokenstringErforderlich

Token encoded in the QR code.

orderIdstringErforderlich

Order opened from the same token.

Body-Parameter

itemsobject[]Erforderlich

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

Anfrage

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} Berechtigung: 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.

Pfadparameter

tokenstringErforderlich

Token encoded in the QR code.

orderIdstringErforderlich

Order opened from the same token.

Anfrage

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

Read the online waitlist settings

GET /public/restaurants/{slug}/waitlist Berechtigung: 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.

Pfadparameter

slugstringErforderlich

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

Anfrage

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

Join the waitlist

POST /public/restaurants/{slug}/waitlist/join Berechtigung: 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.

Pfadparameter

slugstringErforderlich

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

Anfrage

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} Berechtigung: 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.

Pfadparameter

tokenstringErforderlich

Token returned by the join endpoint.

Anfrage

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

Leave the waitlist

POST /public/waitlist/{token}/leave Berechtigung: 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.

Pfadparameter

tokenstringErforderlich

Token returned by the join endpoint.

Anfrage

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

Submit guest feedback

POST /public/restaurants/{slug}/feedback Berechtigung: 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.

Pfadparameter

slugstringErforderlich

Restaurant slug.

Anfrage

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 Berechtigung: 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.

Anfrage

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

Contact form

POST /public/contact Berechtigung: 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.

Body-Parameter

namestringErforderlich

Sender name.

emailstringErforderlich

Reply-to address.

restaurantNamestringOptional

Restaurant the enquiry is about.

messagestringErforderlich

The enquiry itself.

turnstileTokenstringErforderlich

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

langstringOptional

Language the notification email is sent in.

Anfrage

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"}'