Developer docs

Resources

Read every bookable resource — tables, billiard tables, dart boards, lanes and event areas — with capacity, duration and pricing.

Every bookable resource — tables, billiard tables, dart boards, lanes, event areas — with capacity, the booking length that applies to it, and how it is priced. resources lists only what the venue's plan lets guests book — a Starter venue's billiard tables and dart boards are left out here, not merely marked unavailable. 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}/resources

Response 200 OK

Field Type Meaning
slug string The venue
resources[] object[] One per resource
id, name, description string id is what resourceId means everywhere else
type string One of the resource types
capacity integer Seats or players
slotDurationMinutes integer The effective booking length: the resource's own override when set, otherwise the venue's default for the type
slotDurationOverrideMinutes integer or null The override alone, null when the resource inherits
pricing object model (Free, PerHour, PerGame, PerSession, FixedFee, Deposit, MinimumSpend), amount, currency, depositAmount (nullable), minimumSpend (nullable), unitLabel (e.g. "per hour")
allowsFoodOrdering boolean Whether a seated guest can order from the table session
active boolean Always true on this public endpoint — a resource the venue's plan doesn't allow guests to book is left out of resources entirely rather than sent with active: false
resourceGroupId, resourceGroupName, resourceGroupDescription string (GUID), string, string (all null when ungrouped) The ResourceGroup this resource belongs to — a home for the operator's own selling copy — carried by id and by name/description together, since a public caller has no operator session to look the id up through. Filter Availability to one group with resourceGroupId as ?resourceGroup=
seatSold boolean false (the default for every resource) means one reservation takes the whole resource for its span — a billiard table, say. true means several reservations may share it in the same window, up to capacity combined — a 31-seat event area where a party of four should not close out the room. See seatsRemaining on Availability for how a seat-sold resource reports how much room is left. Flipping a resource from seat-sold back to exclusive does not cancel any reservation that already shares a slot on it — but none of them can be edited (PUT a reservation) until only one remains, since an exclusive resource now sees the others as a conflicting overlap. Cancelling a reservation is unaffected either way; resolve down to one (or move some elsewhere) before relying on being able to edit the rest
{
  "slug": "demo-sportsbar",
  "resources": [
    {
      "id": "table-2a",
      "name": "Window table",
      "type": "RestaurantTable",
      "capacity": 2,
      "description": "Seats up to 2. Reserved free of charge.",
      "slotDurationMinutes": 120,
      "pricing": {
        "model": "Free",
        "amount": 0,
        "currency": "EUR",
        "depositAmount": null,
        "minimumSpend": null,
        "unitLabel": "booking"
      },
      "allowsFoodOrdering": true,
      "slotDurationOverrideMinutes": null,
      "active": true,
      "seatSold": false
    },
    {
      "id": "table-4a",
      "name": "Table 4",
      "type": "RestaurantTable",
      "capacity": 4,
      "description": "Seats up to 4. Reserved free of charge.",
      "slotDurationMinutes": 120,
      "pricing": {
        "model": "Free",
        "amount": 0,
        "currency": "EUR",
        "depositAmount": null,
        "minimumSpend": null,
        "unitLabel": "booking"
      },
      "allowsFoodOrdering": true,
      "slotDurationOverrideMinutes": null,
      "active": true,
      "seatSold": false
    },
    {
      "id": "table-4b",
      "name": "Table 7",
      "type": "RestaurantTable",
      "capacity": 4,
      "description": "Seats up to 4. Reserved free of charge.",
      "slotDurationMinutes": 120,
      "pricing": {
        "model": "Free",
        "amount": 0,
        "currency": "EUR",
        "depositAmount": null,
        "minimumSpend": null,
        "unitLabel": "booking"
      },
      "allowsFoodOrdering": true,
      "slotDurationOverrideMinutes": null,
      "active": true,
      "seatSold": false
    }
  ]
}

Errors — 404 no venue with that slug.

curl

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

JavaScript

const { resources } = await (await fetch('https://api.bookdineplay.com/api/venues/your-venue/resources', {
  headers: { 'X-BookDinePlay-Key': 'bdp_pk_your_publishable_key' }
})).json();
const lanes = resources.filter(r => r.type === 'BowlingLane');

C#

var resources = await client.GetResourcesAsync("your-venue", cancellationToken);

Next steps

  • Venue — the other five reads for this venue.
  • Availability — turn a resource type into bookable slots.
  • .NET SDK — the same read as a typed method.