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 resourceTypesRestaurantTable, 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.

Errors400 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.