Sign in to see your venue's slug and publishable key in every sample.
Your account has no venue yet, so the samples keep their placeholders. Sign out
Signed in as · . Create a publishable key in the console and reload to see it here. Sign out
Signed in as · . The samples show your venue's publishable key. Sign out
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.