Saltar al contenido

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

Parámetros de ruta

tokenstringObligatorio

Token encoded in the QR code.

Solicitud

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

Get the menu for a QR token

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

Parámetros de ruta

tokenstringObligatorio

Token encoded in the QR code.

Solicitud

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

Place an order from a QR code

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

Parámetros de ruta

tokenstringObligatorio

Token encoded in the QR code.

Parámetros del cuerpo

itemsobject[]Obligatorio

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

customerNamestringOpcional

Name shown to the staff for this order.

notesstringOpcional

Free-text note for the whole order.

Solicitud

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

Parámetros de ruta

tokenstringObligatorio

Token encoded in the QR code.

orderIdstringObligatorio

Order opened from the same token.

Parámetros del cuerpo

itemsobject[]Obligatorio

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

Solicitud

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

Parámetros de ruta

tokenstringObligatorio

Token encoded in the QR code.

orderIdstringObligatorio

Order opened from the same token.

Solicitud

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

Read the online waitlist settings

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

Parámetros de ruta

slugstringObligatorio

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

Solicitud

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

Join the waitlist

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

Parámetros de ruta

slugstringObligatorio

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

Solicitud

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

Parámetros de ruta

tokenstringObligatorio

Token returned by the join endpoint.

Solicitud

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

Leave the waitlist

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

Parámetros de ruta

tokenstringObligatorio

Token returned by the join endpoint.

Solicitud

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

Submit guest feedback

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

Parámetros de ruta

slugstringObligatorio

Restaurant slug.

Solicitud

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

Solicitud

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

Contact form

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

Parámetros del cuerpo

namestringObligatorio

Sender name.

emailstringObligatorio

Reply-to address.

restaurantNamestringOpcional

Restaurant the enquiry is about.

messagestringObligatorio

The enquiry itself.

turnstileTokenstringObligatorio

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

langstringOpcional

Language the notification email is sent in.

Solicitud

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