Een gedocumenteerde REST API, ondertekende webhooks en een gratis sandbox. Koppel een website, een keukenscherm, een CRM of een boekhoudtool aan elk restaurant op BookNDish, met toestemming van de eigenaar.
De API-referentie hieronder is in het Engels geschreven.
Snelstart
01
Haal een token op
De eigenaar of een manager van het restaurant opent Instellingen, dan Ontwikkelaars, en maakt een token aan met de rechten die je integratie nodig heeft, of een sandbox-token om met voorbeeldgegevens te beginnen. Een token hoort bij één restaurant en wordt maar één keer getoond.
02
Roep de API aan
Stuur het token mee als bearer-token. Elk antwoord is JSON met data, meta en links.
03
Schrijf veilig
Geef elke POST een Idempotency-Key. Een nieuwe poging met dezelfde sleutel krijgt het eerste antwoord terug, en niets wordt twee keer uitgevoerd.
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.
Voeg een https-adres toe bij Instellingen, dan Ontwikkelaars, en kies de gebeurtenissen. Elke aflevering is een ondertekende POST: antwoord binnen 10 seconden met een willekeurige 2xx. Een mislukte aflevering wordt opnieuw geprobeerd na 1 minuut, 5 minuten, 30 minuten, 2 uur en 6 uur, en het afleverlogboek kan hem opnieuw afspelen.
Gebeurtenissen
order.created
Er wordt een bestelling geplaatst via een willekeurig kanaal.
order.status_changed
Een bestelling gaat naar een andere status.
order.paid
Betalingen dekken de bestelling.
reservation.created
Er wordt een reservering gemaakt, door de gast of het personeel.
reservation.updated
Een reservering verandert.
reservation.cancelled
Een reservering wordt geannuleerd.
menu.item_updated
Een gerecht verandert: prijs, naam, uitverkocht.
payment.refunded
Een betaling wordt terugbetaald.
guest.created
Er wordt een gastprofiel aangemaakt.
guest.updated
De gegevens of toestemming van een gast veranderen, of de gast wordt gewist.
giftcard.issued
Een cadeaukaart wordt verkocht of uitgegeven.
giftcard.redeemed
Een cadeaukaart betaalt een bestelling.
review.created
Een gast geeft een beoordeling.
stock.below_par
Een ingrediënt zakt bij een vestiging onder zijn minimumvoorraad.
shift.published
Een manager publiceert een week met diensten.
experience.booked
Tickets voor een belevenis worden betaald.
Controleer de handtekening
BookNDish-Signature bevat t, een Unix-tijd, en v1, de hexadecimale HMAC-SHA256 van t, een punt en de ruwe body, met jouw ondertekeningsgeheim als sleutel. Vergelijk in constante tijd en weiger een t die ouder is dan vijf minuten.
Een sandbox is een eigen voorbeeldlocatie, met menu, tafels, gasten, een reservering en een bestelling, achter één token met alle rechten. Hij antwoordt op hetzelfde adres met een BookNDish-Sandbox-header, raakt het echte restaurant nooit aan en gaat elke nacht terug naar zijn voorbeeldgegevens.
Maak er een aan bij Instellingen, dan Ontwikkelaars, dan Sandbox. Het token begint met bnd_sbx_.
Limieten en fouten
Elk token mag standaard 60 verzoeken per minuut doen. Elk antwoord bevat X-RateLimit-Remaining, en een 429 bevat Retry-After.
Een fout antwoordt met error.code, error.message en error.details. Een token ziet altijd alleen zijn eigen restaurant: al het andere is een 404.
v1 groeit alleen: nieuwe eindpunten, optionele velden en gebeurtenissen. Een wijziging die een client zou breken komt in v2, met v1 ernaast behouden.