Tables API
Manage restaurant tables, their layout positions, computed occupancy statuses, and self-ordering QR tokens.
Table Object
| Name | Type | Required | Description |
|---|---|---|---|
id | uuid | Required | Unique table identifier |
restaurant_id | uuid | Required | Owning restaurant |
number | integer | Required | Table number (unique per restaurant) |
name | string | Optional | Optional display name |
capacity | integer | Optional | Seating capacity (default 4) |
area | string | Optional | Area or zone (e.g. "Terrace", "Main Hall") |
position_x | number | Optional | X position on the floor-plan canvas |
position_y | number | Optional | Y position on the floor-plan canvas |
is_active | boolean | Required | Whether the table is active (soft-delete flag) |
sort_order | integer | Optional | Custom sort position |
status | string | Required | Computed status: "free", "occupied", or "reserved" |
active_order | object | null | Optional | Currently active order on this table, or null |
List Tables
/api/tablesProtectedRetrieve all tables for the current restaurant. Each table includes a computed status and the active order if one exists.
// Response 200
{
__PH1__: [
{
__PH2__: "a1b2c3d4-...",
__PH4__: 1,
__PH5__: "Window Seat",
__PH7__: 4,
__PH8__: "Main Hall",
__PH10__: "occupied",
__PH12__: {
__PH13__: "order-uuid",
__PH15__: 2450,
__PH16__: 3
}
}
]
}Create Table
/api/tablesProtectedCreate a new table. The table number must be unique within the restaurant.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
number | integer | Required | Table number (must be unique per restaurant) |
name | string | Optional | Optional display name |
capacity | integer | Optional | Seating capacity (defaults to 4) |
area | string | Optional | Area or zone name |
// Request
{
__PH2__: 12,
__PH3__: "Corner Booth",
__PH5__: 6,
__PH6__: "Terrace"
}
// Response 201
{
__PH8__: "a1b2c3d4-...",
__PH10__: 12,
__PH11__: "Corner Booth",
__PH13__: 6,
__PH14__: "Terrace",
__PH16__: true,
__PH17__: "free",
__PH19__: null
}Update Table
/api/tables/{id}ProtectedUpdate an existing table. All mutable fields can be changed.
// Request
{
__PH1__: "VIP Booth",
__PH3__: 8,
__PH4__: "VIP Zone",
__PH6__: 320,
__PH7__: 180
}Delete Table
/api/tables/{id}ProtectedSoft-delete a table by setting is_active to false. The record is retained for GoBD audit compliance.
GoBD Compliance
is_active to false to maintain the full audit trail required by German fiscal law.// Response 200
{
__PH1__: "Table deactivated successfully"
}QR Tokens
QR tokens enable self-ordering for guests. A unique token is generated per table and encoded into a QR code that guests scan to place orders.
/api/tables/{tableId}/qr-tokenAdmin OnlyGenerate a new QR token for the specified table. Any previously active token for the table is automatically deactivated.
// Response 201
{
__PH2__: "token-uuid",
__PH4__: "a1b2c3d4-...",
__PH6__: "pssf_qr_abc123xyz",
__PH8__: "https:__PH1__
"created_at": "2026-03-20T10:__PH12__:00Z"
}/api/qr-tokensAdmin OnlyList all active QR tokens for the restaurant.
// Response 200
{
__PH1__: [
{
__PH2__: "token-uuid",
__PH4__: "a1b2c3d4-...",
__PH6__: 12,
__PH7__: "pssf_qr_abc123xyz",
__PH9__: true,
__PH10__: "2026-03-20T10:30:00Z"
}
]
}/api/qr-tokens/{id}Admin OnlyDeactivate a QR token. The token will no longer allow self-ordering.
// Response 200
{
__PH1__: "QR token deactivated"
}