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
Availability
Ask which slots a venue can offer for a resource type, a date, a party size and an optional booking length — the call that precedes every reservation.
Availability turns a resource type, a date and a party size into the list of slots a guest can pick. It already accounts for opening hours, existing reservations, each resource's capacity and booking length, and the venue's pricing — so a slot marked available can be reserved as-is, and a reservation for a slot that was not offered is refused.
Endpoints
GET /api/venues/{venueSlug}/availability
Query parameters
| Parameter | Required | Meaning |
|---|---|---|
date |
yes | Venue-local date, yyyy-MM-dd (Dates, times and time zones) |
partySize |
no, default 2 |
Guests or players. Larger parties may be offered group slots that span several resources |
resourceType |
no, default RestaurantTable |
One of the venue's resourceTypes — RestaurantTable, BilliardTable, DartBoard, Shuffleboard, BowlingLane, EventArea |
durationMinutes |
no | A booking length the venue offers for that type (see bookingDurations on the venue profile). Omitted or 0 means the venue's default |
Response 200 OK
| Field | Type | Meaning |
|---|---|---|
slug, date, resourceType, partySize |
The request, echoed | |
durationMinutes |
integer | The booking length the slots represent — the default when you did not send one |
slots[] |
object[] | Every candidate slot for the day, available or not |
Slots
| Field | Type | Meaning |
|---|---|---|
start, end |
string | Venue-local HH:mm |
resourceId, resourceName |
string | The resource this slot is on — send resourceId back when reserving to get exactly this one |
available |
boolean | false for a slot that exists on the grid but is already taken; show it greyed out, never book it |
priceEstimate, currency |
decimal, string | What the booking would cost under the resource's pricing model; 0 for free resources |
pricingModel |
string or null | Free, PerHour, PerGame, PerSession, FixedFee, Deposit, MinimumSpend — tells you what the estimate is per |
groupResourceCount, groupResourceNames |
integer, string[] (both null for single-resource slots) | A party too large for one resource is offered a group slot across several; resourceId is then the first member |
A closed day, or a party the venue cannot seat at all, is an empty slots list with 200 — not an error.
{
"slug": "demo-sportsbar",
"date": "2026-10-16",
"resourceType": "RestaurantTable",
"partySize": 4,
"slots": [
{
"start": "15:00",
"end": "17:00",
"resourceId": "table-6a",
"resourceName": "Corner table",
"available": true,
"priceEstimate": 0,
"currency": "EUR",
"groupResourceCount": null,
"groupResourceNames": null,
"pricingModel": "Free"
},
{
"start": "15:00",
"end": "17:00",
"resourceId": "table-4a",
"resourceName": "Table 4",
"available": true,
"priceEstimate": 0,
"currency": "EUR",
"groupResourceCount": null,
"groupResourceNames": null,
"pricingModel": "Free"
},
{
"start": "15:00",
"end": "17:00",
"resourceId": "table-4b",
"resourceName": "Table 7",
"available": true,
"priceEstimate": 0,
"currency": "EUR",
"groupResourceCount": null,
"groupResourceNames": null,
"pricingModel": "Free"
}
],
"durationMinutes": 120
}Lists in the example are shortened to three entries.
Errors — 400 with errors.date when date is not yyyy-MM-dd; 404 no venue with that slug; key problems as on Errors.
curl
curl "https://api.bookdineplay.com/api/venues/your-venue/availability?date=2026-10-16&partySize=4&resourceType=RestaurantTable" \
-H "X-BookDinePlay-Key: bdp_pk_your_publishable_key" \
-H "Origin: https://www.your-venue.example"JavaScript
const params = new URLSearchParams({ date: '2026-10-16', partySize: '4', resourceType: 'RestaurantTable' });
const availability = await (await fetch(`https://api.bookdineplay.com/api/venues/your-venue/availability?${params}`, {
headers: { 'X-BookDinePlay-Key': 'bdp_pk_your_publishable_key' }
})).json();
const open = availability.slots.filter(s => s.available);
console.log(`${open.length} slots of ${availability.durationMinutes} min`);C#
var availability = await client.GetAvailabilityAsync(
"your-venue", new DateOnly(2026, 10, 16), partySize: 4, BookableResourceType.RestaurantTable,
cancellationToken: cancellationToken);
var open = availability?.Slots.Where(s => s.Available).ToList() ?? [];Choosing a booking length
When the venue lets guests choose (guestSelectable on the profile's bookingDurations), offer the options list for the type, pass the choice as durationMinutes, and send the same value with the reservation. Asking for a length the venue does not offer is answered with the default, not an error — compare durationMinutes in the response with what you asked for.
Next steps
- Reservations — book the slot the guest picked.
- Venue — the resource types and durations you can ask for.