Developer docs

Floor plan

Read a venue's zones and placed resources with normalized geometry, for drawing a pick-your-table floor plan view.

Zones and placed resources with normalized geometry, for drawing a "pick your table" view. A venue without a plan answers 200 with empty lists — check tables.length before switching your UI to the floor plan. It follows the same key rules as the rest of /api/venues/** (Keys and headers) and answers 404 with a problem body when no venue has that slug.

Endpoints

GET /api/venues/{venueSlug}/floor-plan

Response 200 OK

Field Type Meaning
slug string The venue
zones[] object[] id (GUID), name, ordinal (display order)
tables[] object[] resourceId, name, type, capacity, zoneId, x, y, width, height (all 0–1, relative to the zone), shape (Rectangle or Circle), rotation (degrees)
{
  "slug": "demo-sportsbar",
  "zones": [],
  "tables": []
}

Errors — 404 no venue with that slug.

curl

curl "https://api.bookdineplay.com/api/venues/your-venue/floor-plan" \
  -H "X-BookDinePlay-Key: bdp_pk_your_publishable_key" \
  -H "Origin: https://www.your-venue.example"

JavaScript

const plan = await (await fetch('https://api.bookdineplay.com/api/venues/your-venue/floor-plan', {
  headers: { 'X-BookDinePlay-Key': 'bdp_pk_your_publishable_key' }
})).json();
const hasPlan = plan.tables.length > 0;

C#

var plan = await client.GetFloorPlanAsync("your-venue", cancellationToken);

Next steps

  • Venue — the other five reads for this venue.
  • Booking flow — when to fetch the floor plan in the widget's lifecycle.
  • .NET SDK — the same read as a typed method.