Developer docs

Venue directory

The BookDinePlay app's list of venues that opted in — searchable by name and city, paged, and answered only to BookDinePlay's own app and platform keys.

The venue directory is the list the BookDinePlay app shows guests to find a venue. A venue appears in it only after its operator ticks Show my venue in the BookDinePlay app in the console (Venue → BookDinePlay app), and only while its account is active: a venue that switches the setting off again, or whose subscription is suspended, disappears from the next request.

The directory answers only to BookDinePlay's own app key and platform key. A venue's own publishable or secret key is refused with 403 platform-key-required: a key that belongs to one venue has no business listing others. For your own venue, read GET /api/venues/{venueSlug} instead.

Endpoints

GET /api/venues

Query

Parameter Type Meaning
query string, optional Matches anywhere in the venue's name, ignoring case. At most 100 characters
city string, optional Matches the venue's city exactly, ignoring case. At most 100 characters
page integer, optional 1-based page number, at most 20000; default 1
pageSize integer, optional Venues per page, 1 to 50; default 20

Response 200 OK

Field Type Meaning
venues object[] This page's venues, ordered by name
venues[].slug string The identifier for every other /api/venues/{venueSlug} route
venues[].name, venues[].tagline string Display text, in the venue's own language
venues[].city, venues[].country string Location as shown to guests
venues[].resourceTypes string[] The types a guest can book there, as on the venue profile
page, pageSize integer The page and page size this answer is for
totalCount integer How many venues match across all pages
{
  "venues": [
    {
      "slug": "demo-bowling",
      "name": "Strike Lounge",
      "tagline": "Bowling, kitchen & bar",
      "city": "Hamburg",
      "country": "Germany",
      "resourceTypes": [
        "RestaurantTable",
        "BowlingLane"
      ]
    },
    {
      "slug": "demo-sportsbar",
      "name": "The Neon Tap",
      "tagline": "Sports bar, kitchen & game house",
      "city": "Berlin",
      "country": "Germany",
      "resourceTypes": [
        "RestaurantTable",
        "BilliardTable",
        "DartBoard"
      ]
    }
  ],
  "page": 1,
  "pageSize": 20,
  "totalCount": 2
}

Errors — 400 a page below 1 or above 20000, a pageSize outside 1–50, or a query or city over 100 characters (the problem's errors names the parameter); 403 platform-key-required for a venue's key; 403 app-key-from-browser when the app key arrives with an Origin; 429 rate-limited when the app key is over its limit (Errors).

curl

curl "https://api.bookdineplay.com/api/venues?query=neon&pageSize=10" \
  -H "X-BookDinePlay-Key: $BOOKDINEPLAY_APP_KEY"

JavaScript

// Server-side (Node.js): the app key is refused from a browser.
const response = await fetch('https://api.bookdineplay.com/api/venues?query=neon&pageSize=10', {
  headers: { 'X-BookDinePlay-Key': process.env.BOOKDINEPLAY_APP_KEY }
});
const { venues, totalCount } = await response.json();

C#

var page = await client.ListDirectoryAsync(query: "neon", pageSize: 10, cancellationToken: cancellationToken);
foreach (var venue in page.Venues) { Console.WriteLine($"{venue.Name}, {venue.City}"); }

Next steps

  • Profile — everything about one venue from the directory.
  • Authentication — the key types and what each may call.