Eine dokumentierte REST API, signierte Webhooks und eine kostenlose Sandbox. Verbinden Sie eine Website, ein Küchendisplay, ein CRM oder ein Buchhaltungstool mit jedem Restaurant auf BookNDish, mit Erlaubnis des Inhabers.
Die untenstehende API-Referenz ist auf Englisch verfasst.
Schnellstart
01
Token holen
Der Inhaber oder ein Manager des Restaurants öffnet Einstellungen, dann Entwickler, und erstellt einen Token mit den Berechtigungen, die Ihre Integration braucht, oder einen Sandbox-Token, um mit Beispieldaten zu starten. Ein Token gehört zu genau einem Restaurant und wird nur einmal angezeigt.
02
API aufrufen
Senden Sie den Token als Bearer-Token. Jede Antwort ist JSON mit data, meta und links.
03
Sicher schreiben
Geben Sie jedem POST einen Idempotency-Key. Eine Wiederholung mit demselben Schlüssel erhält die erste Antwort zurück, und nichts wird doppelt ausgeführt.
meta.now says what menus by time of day and happy hours make of the menu right now, on the default branch's clock: whether it and each category are open, and each dish or size a happy hour has cut, at the price charged now.
name and description are a string in the restaurant's default language, or a translation map. A dish is priced by price_minor, or per size by variants.
Only the fields sent change; variants and modifier groups are kept. A price change is recorded in the activity log. A dish priced per size refuses price_minor.
The order is priced from the menu (any price in the body is ignored), the owner's ordering rules apply (types offered, minimum order, delivery zones, opening hours; an order outside hours is held for the next opening), the kitchen gets its tickets and a connected POS gets the order. Dine-in orders need table_code.
placed to accepted or rejected, accepted to ready, ready to completed, and anything not finished to cancelled. Accepting fires the kitchen. A cancel with a reason (3 to 200 characters) also voids the kitchen tickets and keeps the reason.
Guest profiles, with contact details only for guests who agreed to share them.
GET/guests
Guest profiles, a page at a time
Guests who asked to be forgotten never appear. Phone and email are included only for guests who agreed to hear from the restaurant. Staff notes are never included.
Apps from the marketplace: a venue owner allows an app on the consent screen, and the app exchanges the code for an access token (used as the bearer token of every operation above) and a refresh token. Authorization code with PKCE (S256).
POST/oauth/token
Exchange a code, or refresh, for tokens
authorization_code: redeem the code the venue's consent sent to your redirect address, with the PKCE verifier. refresh_token: get a new access token and a new refresh token; the old pair stops working. Authenticate with your client id and secret, as HTTP Basic or as client_id and client_secret in the body. Answers are never cached.
Gives back a refresh token (with its access token) or an access token (RFC 7009). An unknown token is not an error. Authenticate with your client id and secret, as HTTP Basic or as client_id and client_secret in the body. To end the whole grant, the venue uninstalls the app.
Fügen Sie unter Einstellungen, dann Entwickler, eine https-Adresse hinzu und wählen Sie ihre Ereignisse. Jede Zustellung ist ein signierter POST: Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx. Ein Fehlschlag wird nach 1 Minute, 5 Minuten, 30 Minuten, 2 Stunden und 6 Stunden erneut versucht, und das Zustellprotokoll kann ihn wiederholen.
Ereignisse
order.created
Eine Bestellung wird über einen beliebigen Kanal aufgegeben.
order.status_changed
Eine Bestellung wechselt in einen anderen Status.
order.paid
Zahlungen decken die Bestellung ab.
reservation.created
Eine Reservierung wird vom Gast oder vom Personal angelegt.
reservation.updated
Eine Reservierung ändert sich.
reservation.cancelled
Eine Reservierung wird storniert.
menu.item_updated
Ein Gericht ändert sich: Preis, Name, ausverkauft.
payment.refunded
Eine Zahlung wird erstattet.
guest.created
Ein Gastprofil wird angelegt.
guest.updated
Die Daten oder die Einwilligung eines Gastes ändern sich, oder der Gast wird gelöscht.
giftcard.issued
Eine Geschenkkarte wird verkauft oder ausgestellt.
giftcard.redeemed
Eine Geschenkkarte bezahlt eine Bestellung.
review.created
Ein Gast gibt eine Bewertung ab.
stock.below_par
Eine Zutat fällt in einer Filiale unter ihren Sollbestand.
shift.published
Ein Manager veröffentlicht eine Schichtwoche.
experience.booked
Tickets für ein Erlebnis werden bezahlt.
Signatur prüfen
BookNDish-Signature enthält t, eine Unix-Zeit, und v1, den hexadezimalen HMAC-SHA256 aus t, einem Punkt und dem rohen Body, berechnet mit Ihrem Signaturgeheimnis. Vergleichen Sie in konstanter Zeit und lehnen Sie ein t ab, das älter als fünf Minuten ist.
Eine Sandbox ist ein eigenes Beispiellokal mit Speisekarte, Tischen, Gästen, einer Reservierung und einer Bestellung, hinter einem Token mit allen Berechtigungen. Sie antwortet unter derselben Adresse mit einem BookNDish-Sandbox-Header, berührt nie das echte Restaurant und kehrt jede Nacht zu ihren Beispieldaten zurück.
Erstellen Sie eine unter Einstellungen, dann Entwickler, dann Sandbox. Ihr Token beginnt mit bnd_sbx_.
Limits und Fehler
Jeder Token darf standardmäßig 60 Anfragen pro Minute stellen. Jede Antwort enthält X-RateLimit-Remaining, und ein 429 enthält Retry-After.
Ein Fehler antwortet mit error.code, error.message und error.details. Ein Token sieht immer nur sein eigenes Restaurant: Alles andere ist ein 404.
v1 wächst nur: neue Endpunkte, optionale Felder und Ereignisse. Eine Änderung, die einen Client brechen würde, kommt in v2, und v1 bleibt daneben bestehen.