Create a table
/api/tablesUnlike services and staff, tables are not part of the cached public booking config; reservation availability is computed live per request, so nothing is revalidated here.
Authorization
sessionCookie The dashboard's Supabase Auth session cookie, set at sign-in. Large sessions are split across
numbered chunks (…auth-token.0, .1), so treat this as a cookie family rather than one name.
Every request re-validates it against the Auth server (getUser()), never by decoding the cookie
locally: a JWT nothing has checked is not a credential. Tenancy is then read from the verified
app_metadata.company_id claim and enforced by row-level security; it is never read from request
input, on any route, ever.
role (admin / staff) is deliberately not in RLS. It gates specific actions in route code,
the operations marked admin below, so hiding a button in the UI is cosmetic only, and a route's
own check is the enforcement.
In: cookie
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/tables" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "seatsMin": 1, "seatsMax": 1 }'{ "ok": true, "table": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08" }}List service periods (API key) GET
The hospitality engine's service periods: which days a venue serves, between which times, on what turn. Engine-guarded, ordered by `id`: see `GET /api/v1/services` for why. This is the endpoint that makes reservation availability **explicable** rather than magic. No active period for a weekday means an empty grid that day, and a program told "no availability" with no way to see why will simply keep asking. `startTime`, `endTime` and `lastSeating` are wall-clock `HH:MM:SS` in the organization's own `timezone` (on `GET /api/v1/organization`), not instants. A service period is a rule about clock time, not a moment, so converting them here would be lossy. Group by `dayOfWeek` for a week grid.
Create a range of tables in one request POST
Generates `prefix + separator + n` for every n from `from` to `to` inclusive (capped at 50 per batch) and inserts them as one atomic statement. Rejects the whole batch; nothing is created; if any generated name already exists in this org; table names are not unique in the schema, so this is an app-level check on a fresh read, not a database constraint.