Skip to content

Tables & pricing

The floorplan model: tables belong to a floor and (optionally) a seating area. You can block tables for a window, combine them for larger parties, let smart tables auto-optimise assignment, and attach price lists that set a default deposit/min-spend per table. Every endpoint is under /api/my-venues/:venueId/… and is operator (client role, venue-scoped) - send an Authorization: Bearer token from the Authentication flow. All prices are integer pence.

Method Path Purpose Auth
GET /api/my-venues/:venueId/tables List tables operator
GET /api/my-venues/:venueId/tables/:id Get a table operator
POST /api/my-venues/:venueId/tables Create a table operator
PUT /api/my-venues/:venueId/tables/:id Update a table operator
DELETE /api/my-venues/:venueId/tables/:id Delete a table operator
POST /api/my-venues/:venueId/tables/set-type Bulk set table type operator
POST /api/my-venues/:venueId/tables/set-area Bulk assign seating area operator
GET /api/my-venues/:venueId/tables/blocks List table blocks operator
POST /api/my-venues/:venueId/tables/block Block tables for a window operator
PATCH /api/my-venues/:venueId/tables/blocks/:id Edit a block operator
DELETE /api/my-venues/:venueId/tables/blocks/:id Delete a block operator
POST /api/my-venues/:venueId/tables/unblock Clear all blocks for tables operator
GET /api/my-venues/:venueId/tables/combos List combinations operator
POST /api/my-venues/:venueId/tables/combos Create a combination operator
DELETE /api/my-venues/:venueId/tables/combos/:id Delete a combination operator
GET /api/my-venues/:venueId/floors List floors operator
GET /api/my-venues/:venueId/floors/:id Get a floor + its tables operator
POST /api/my-venues/:venueId/floors Create a floor operator
PUT /api/my-venues/:venueId/floors/:id Update a floor (canvas) operator
DELETE /api/my-venues/:venueId/floors/:id Delete a floor operator
GET /api/my-venues/:venueId/seating-areas List seating areas operator
POST /api/my-venues/:venueId/seating-areas Create a seating area operator
PUT /api/my-venues/:venueId/seating-areas/:id Rename a seating area operator
DELETE /api/my-venues/:venueId/seating-areas/:id Delete a seating area operator
GET /api/my-venues/:venueId/smart-tables Get smart-table settings operator
PUT /api/my-venues/:venueId/smart-tables Update smart-table settings operator
GET /api/my-venues/:venueId/pricelists List price lists operator
POST /api/my-venues/:venueId/pricelists Create a price list operator
PUT /api/my-venues/:venueId/pricelists/:id Update a price list operator
DELETE /api/my-venues/:venueId/pricelists/:id Delete a price list operator
PUT /api/my-venues/:venueId/pricelists/:id/tables/:tableId Per-table price override operator

POST /api/my-venues/:venueId/tables takes table_number (required), capacity (default 4) and status (default active). Position, shape and type are synced through the floor canvas (below) or set in bulk with set-type / set-area.

Terminal window
curl -X POST "https://thesidedoor.co/api/my-venues/VENUE_ID/tables" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"table_number":"12","capacity":6,"status":"active"}'
{ "success": true, "id": "tbl_12" }

Update with PUT /api/my-venues/:venueId/tables/:id (table_number, capacity, status) and remove with DELETE /api/my-venues/:venueId/tables/:id. GET /api/my-venues/:venueId/tables accepts ?date=&time=&duration= to decorate each row with is_blocked / is_taken.

POST /api/my-venues/:venueId/floors takes name and optional sort_order.

Terminal window
curl -X POST "https://thesidedoor.co/api/my-venues/VENUE_ID/floors" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Ground Floor","sort_order":0}'
{ "success": true, "id": "flr_1" }
Terminal window
curl -X PUT "https://thesidedoor.co/api/my-venues/VENUE_ID/floors/flr_1" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Ground Floor","canvas_data":[{"type":"table","tableNumber":"12","tableType":"booth","minCovers":2,"maxCovers":6,"shape":"rect","size":"large","x":120,"y":80}]}'
{ "success": true }

POST /api/my-venues/:venueId/seating-areas creates a named area (only name); PUT renames it and DELETE detaches its tables then removes it. Assign tables to an area in bulk with POST /api/my-venues/:venueId/tables/set-area (table_ids, seating_area_id - send null to detach), and set their type with POST /api/my-venues/:venueId/tables/set-type (table_ids, table_type one of standard, low, high, booth, bar).

Terminal window
curl -X POST "https://thesidedoor.co/api/my-venues/VENUE_ID/seating-areas" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Garden"}'
{ "success": true, "id": "area_1", "name": "Garden" }

POST /api/my-venues/:venueId/tables/block reserves one or more tables for a window. table_ids, from and to are required; reason defaults to “Venue Reserved”. Edit a block with PATCH .../tables/blocks/:id (reason, blocked_from, blocked_to), delete one with DELETE .../tables/blocks/:id, or clear every block on given tables with POST .../tables/unblock (table_ids).

Terminal window
curl -X POST "https://thesidedoor.co/api/my-venues/VENUE_ID/tables/block" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"table_ids":["tbl_12","tbl_13"],"from":"2026-07-04T18:00:00","to":"2026-07-04T23:00:00","reason":"Private event"}'
{ "success": true, "ids": ["blk_1", "blk_2"] }

POST /api/my-venues/:venueId/tables/combos joins two or more tables into one bookable unit; combined_capacity is computed from the members. Remove one with DELETE .../tables/combos/:id.

Terminal window
curl -X POST "https://thesidedoor.co/api/my-venues/VENUE_ID/tables/combos" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Booth A+B","table_ids":["tbl_12","tbl_13"]}'
{ "success": true, "id": "cmb_1", "combined_capacity": 8 }

GET /api/my-venues/:venueId/smart-tables returns the auto-assignment settings; PUT updates them. reassign_enabled runs a daily pass that moves unlocked reservations to optimal tables at reassign_time; duration_enabled extends the hold for larger parties. reassign_last_run is cron-managed and read-only.

Terminal window
curl -X PUT "https://thesidedoor.co/api/my-venues/VENUE_ID/smart-tables" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reassign_enabled":true,"reassign_time":"06:30","duration_enabled":true}'
{
"success": true,
"data": {
"reassign_enabled": true,
"reassign_time": "06:30",
"reassign_last_run": null,
"duration_enabled": true
}
}

A price list sets a default_price_pence (the deposit/min-spend) that applies to every table, plus optional per-table overrides. POST /api/my-venues/:venueId/pricelists creates one (name required); PUT updates name/default; DELETE clears its overrides and detaches it from any access rules.

Terminal window
curl -X POST "https://thesidedoor.co/api/my-venues/VENUE_ID/pricelists" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Weekend","default_price_pence":5000}'
{ "success": true, "id": "pl_weekend" }

PUT /api/my-venues/:venueId/pricelists/:id/tables/:tableId sets a table’s price within a list. Send price_pence to set it, or null (or "") to clear the override so the list default applies again.

Terminal window
curl -X PUT "https://thesidedoor.co/api/my-venues/VENUE_ID/pricelists/pl_weekend/tables/tbl_12" \
-H "Authorization: Bearer $SIDEDOOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"price_pence":7500}'
{ "success": true }