Entwicklerdokumentation

Ressourcen

Jede buchbare Ressource lesen – Tische, Billardtische, Dartscheiben, Bahnen und Eventflächen – mit Kapazität, Dauer und Bepreisung.

Jede buchbare Ressource – Tische, Billardtische, Dartscheiben, Bahnen, Eventflächen – mit Kapazität, der für sie geltenden Buchungsdauer und ihrer Bepreisung. resources listet nur, was der Tarif der Location Gästen zu buchen erlaubt – Billardtische und Dartscheiben einer Starter-Location fehlen hier, sind also nicht nur als nicht verfügbar markiert. Er folgt denselben Schlüsselregeln wie der Rest von /api/venues/** (Schlüssel und Header) und antwortet mit 404 und einem Problem-Body, wenn keine Location diesen Slug hat.

Endpunkte

GET /api/venues/{venueSlug}/resources

Antwort 200 OK

Feld Typ Bedeutung
slug string Die Location
resources[] object[] Eine je Ressource
id, name, description string id ist das, was resourceId überall sonst bedeutet
type string Einer der Ressourcentypen
capacity integer Plätze oder Spieler
slotDurationMinutes integer Die wirksame Buchungsdauer: die eigene Überschreibung der Ressource, sofern gesetzt, sonst der Standard der Location für den Typ
slotDurationOverrideMinutes integer oder null Nur die Überschreibung; null, wenn die Ressource den Standard erbt
pricing object model (Free, PerHour, PerGame, PerSession, FixedFee, Deposit, MinimumSpend), amount, currency, depositAmount (nullable), minimumSpend (nullable), unitLabel (z. B. „pro Stunde“)
allowsFoodOrdering boolean Ob ein sitzender Gast aus der Tischsitzung bestellen kann
active boolean Auf diesem öffentlichen Endpunkt immer true – eine Ressource, die der Tarif der Location Gästen nicht zu buchen erlaubt, fehlt in resources vollständig, statt mit active: false gesendet zu werden
resourceGroupId, resourceGroupName, resourceGroupDescription string (GUID), string, string (alle null, wenn ungruppiert) Die ResourceGroup, zu der diese Ressource gehört – ein Zuhause für die eigenen Verkaufstexte des Betreibers – mitgeliefert als id und als Name/Beschreibung zusammen, da ein öffentlicher Aufrufer keine Betreiber-Sitzung hat, über die er die id nachschlagen könnte. Mit resourceGroupId als ?resourceGroup= auf eine Gruppe filtern, siehe Verfügbarkeit
seatSold boolean false (der Standard für jede Ressource) bedeutet, eine Reservierung belegt die gesamte Ressource für ihre Dauer – zum Beispiel ein Billardtisch. true bedeutet, mehrere Reservierungen können sie sich im selben Zeitfenster teilen, bis zusammen capacity erreicht ist – etwa eine Eventfläche mit 31 Plätzen, bei der eine Gruppe von vier Personen nicht den ganzen Raum blockieren soll. Siehe seatsRemaining unter Verfügbarkeit dafür, wie eine platzweise verkaufte Ressource meldet, wie viel Platz noch frei ist. Wird eine Ressource von platzweise zurück auf exklusiv umgestellt, werden bereits bestehende Reservierungen, die sich einen Termin teilen, nicht storniert – aber keine davon lässt sich mehr bearbeiten (PUT einer Reservierung), solange mehr als eine übrig ist, da eine exklusive Ressource die anderen jetzt als kollidierende Überschneidung sieht. Stornieren ist davon unberührt; auf eine übrig bleibende Reservierung reduzieren (oder andere verschieben), bevor man sich darauf verlässt, die übrigen bearbeiten zu können
{
  "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
    }
  ]
}

Fehler – 404 keine Location mit diesem 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);

Nächste Schritte

  • Venue – die übrigen fünf Lesezugriffe dieser Location.
  • Verfügbarkeit – aus einem Ressourcentyp buchbare Slots machen.
  • .NET-SDK – derselbe Lesezugriff als typisierte Methode.