Uma API REST documentada, webhooks assinados e uma sandbox gratuita. Ligue um site, um ecrã de cozinha, um CRM ou uma ferramenta de contabilidade a qualquer restaurante na BookNDish, com a autorização do proprietário.
A referência da API abaixo está escrita em inglês.
Início rápido
01
Obtenha um token
O proprietário do restaurante ou um gerente abre Definições, depois Programadores, e cria um token com as permissões de que a sua integração precisa, ou um token de sandbox para começar com dados de exemplo. Um token pertence a um só restaurante e é mostrado uma única vez.
02
Chame a API
Envie o token como token Bearer. Cada resposta é JSON com data, meta e links.
03
Escreva com segurança
Dê a cada POST um Idempotency-Key. Uma nova tentativa com a mesma chave recebe a primeira resposta de volta, e nada é executado duas vezes.
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.
Adicione um endereço https em Definições, depois Programadores, e escolha os seus eventos. Cada entrega é um POST assinado: responda com qualquer 2xx em 10 segundos. Uma falha é repetida após 1 minuto, 5 minutos, 30 minutos, 2 horas e 6 horas, e o registo de entregas pode reenviá-la.
Eventos
order.created
É feito um pedido em qualquer canal.
order.status_changed
Um pedido passa para outro estado.
order.paid
Os pagamentos cobrem o pedido.
reservation.created
É feita uma reserva, pelo cliente ou pela equipa.
reservation.updated
Uma reserva muda.
reservation.cancelled
Uma reserva é cancelada.
menu.item_updated
Um prato muda: preço, nome, esgotado.
payment.refunded
Um pagamento é reembolsado.
guest.created
É criado um perfil de cliente.
guest.updated
Os dados ou o consentimento de um cliente mudam, ou o cliente é apagado.
giftcard.issued
Um cartão-presente é vendido ou emitido.
giftcard.redeemed
Um cartão-presente paga um pedido.
review.created
Um cliente envia uma avaliação.
stock.below_par
Um ingrediente desce abaixo do seu nível mínimo numa unidade.
shift.published
Um gerente publica uma semana de turnos.
experience.booked
Os bilhetes de uma experiência são pagos.
Verifique a assinatura
BookNDish-Signature traz t, uma hora Unix, e v1, o HMAC-SHA256 hexadecimal de t, um ponto e o corpo em bruto, com o seu segredo de assinatura como chave. Compare em tempo constante e recuse um t com mais de cinco minutos.
Uma sandbox é um espaço de exemplo próprio, com menu, mesas, clientes, uma reserva e um pedido, atrás de um token com todas as permissões. Responde no mesmo endereço com um cabeçalho BookNDish-Sandbox, nunca toca no restaurante real e volta aos seus dados de exemplo todas as noites.
Crie uma em Definições, depois Programadores, depois Sandbox. O seu token começa por bnd_sbx_.
Limites e erros
Cada token pode fazer 60 pedidos por minuto por predefinição. Cada resposta inclui X-RateLimit-Remaining, e um 429 inclui Retry-After.
Uma falha responde com error.code, error.message e error.details. Um token só vê o seu próprio restaurante: tudo o resto é um 404.
v1 só cresce: novos endpoints, campos opcionais e eventos. Uma alteração que quebraria um cliente vai para v2, mantendo-se v1 ao lado.