Blitz API
Blitz is one source of truth for a restaurant: its opening hours, menu, bookings, reviews and guests. This API lets your own system read and change that data, and lets a web page of your own take bookings.
Base URL: https://api.blitz-app.dk · JSON over HTTPS ·
API reference · MCP server
Authentication
Send an API key as a bearer token:
curl https://api.blitz-app.dk/api/v1/restaurants/<restaurant_id>/reservations \
-H "Authorization: Bearer blitz_sk_test_..."
A key belongs to one restaurant. It is issued in the dashboard under Indstillinger → API-nøgler by someone with team access, and the secret is shown once, at creation. Lost keys cannot be read back: revoke the key (it stops working on the very next call) and issue a new one. Keep it on your server; never put it in a web page.
The Reservation and Review APIs listed below need no key.
Test and live keys
blitz_sk_test_… keys are available from day one, before the
restaurant has gone live. blitz_sk_live_… keys are issued once it has.
Both reach the same endpoints; a test key is safe to wire into CI:
- Writes made with a test key are ephemeral and are deleted by a nightly sweep.
- Test bookings hold no availability, so two can take the same table.
- Nothing reaches a guest — no mail, no reminders, no manage link.
- A test key may make 200 writes per day; the next is refused with
429. Reads are not counted.
Permissions
Every key holds an explicit list of permissions, chosen when it is created
and changed only by editing the key — changing a team role does not change
any key. Each endpoint in the reference lists the permission
it requires (x-blitz-permissions); a call without it is answered
403. A key can hold at most what the person who issued it holds,
and at least one permission. Some permissions can never be given to a key.
| Permission | What it allows (Danish) |
|---|---|
| Reservationer | |
reservations.read | kan se bordbogen og hvem der er ventet ind |
reservations.write | kan tage imod en booking og flytte den til et andet tidspunkt eller bord |
reservations.cancel | kan afbestille en gæsts booking og give bordet fri igen |
floorplan.read | kan se salens borde og hvordan de er sat op |
floorplan.write | kan tegne salen om — flytte borde, ændre antal pladser og oprette nye områder |
| Takeaway | |
orders.read | kan se de takeaway-ordrer der kommer ind, og hvad der er i dem |
orders.advance | kan tage en ordre videre gennem køkkenet — modtaget, i gang, klar, afhentet |
| Menukort | |
menu.read | kan se menukortet og hvad retterne koster |
menu.write | kan ændre retter og kategorier på hjemmesiden og i takeaway |
menu.price.write | kan ændre priser, både på hjemmesiden og i takeaway |
menu.availability.write | kan sætte en ret som udsolgt og sætte den til salg igen |
| Hjemmeside | |
website.read | kan se hjemmesiden som den ser ud nu, og den kladde der ikke er udgivet endnu |
website.draft.write | kan rette tekst, billeder og sider i kladden, uden at det bliver offentligt |
website.publish | kan udgive kladden, så ændringerne står på den offentlige hjemmeside |
website.rollback | kan sætte hjemmesiden tilbage til en tidligere udgave |
| Anmeldelser | |
reviews.read | kan læse anmeldelser og se hvordan bedømmelsen udvikler sig |
reviews.reply | kan svare offentligt på en anmeldelse i restaurantens navn |
reviews.report | kan indberette en anmeldelse der bryder reglerne |
reviews.settings.write | kan ændre hvilke kilder der hentes anmeldelser fra, og hvordan de vises på hjemmesiden |
| Henvendelser | |
henvendelser.read | kan se henvendelser fra gæster og Blitz, og hvem der venter på svar |
henvendelser.reply | kan svare gæster og Blitz, skrive interne noter og markere en henvendelse som løst |
henvendelser.handoff | kan sende en henvendelse videre til Blitz, så Blitz kan læse og svare i den |
henvendelser.settings.write | kan ændre hvilken adresse restauranten får besked på om nye henvendelser |
| Økonomi | |
analytics.read | kan se besøgstal, antal gæster og hvordan travlheden fordeler sig |
revenue.read | kan se omsætningen og hvad en periode har givet |
revenue.write | kan taste en dags omsætning ind og rette den bagefter |
| Vagtplan | |
shifts.read | kan se vagtplanen og om Workfeed er koblet til |
shifts.write | kan oprette, rette, flytte og slette kladdevagter i vagtplanen |
shifts.publish | kan udgive kladdevagter, så medarbejderne ser dem i Workfeed (kan ikke fortrydes) |
shifts.connect | kan koble Workfeed til, skifte nøglen og fjerne forbindelsen |
staff.read | kan se medarbejderlisten fra Workfeed med e-mail og telefon |
staff.manage | kan oprette og rette medarbejdere i Workfeed, som sender dem en invitation |
shifts.costs.read | kan se lønomkostning, omsætning og lønprocent for dage og uger i vagtplanen |
staff.wages.read | kan se hvad den enkelte vagt koster i løn |
| Gæster | |
guests.read | kan se gæstelisten og hvor ofte den enkelte gæst har været her |
contacts.pii.read | kan se navn, telefonnummer og e-mail i klartekst på gæster, takeaway-kunder og anmeldere |
guests.write | kan rette en gæsts navn, telefonnummer og e-mail |
guests.erase | kan slette en gæsts oplysninger for altid, når gæsten beder om det not available to API keys |
| Indstillinger | |
settings.read | kan se restaurantens oplysninger og åbningstider |
hours.write | kan ændre åbningstider og lukkedage — ét sted, og det slår igennem alle steder |
settings.write | kan ændre navn, adresse, kontaktoplysninger og de øvrige indstillinger |
onboarding.run | kan køre opsætningen igennem og hente oplysninger fra restaurantens nuværende hjemmeside |
| Team | |
team.read | kan se hvem der har adgang til restauranten |
team.manage | kan invitere kolleger, sætte en adgang på pause og åbne den igen not available to API keys |
team.password.reset | kan sende en kollega et link til at vælge en ny adgangskode not available to API keys |
roles.manage | kan bygge roller og bestemme hvad kollegerne må not available to API keys |
| Abonnement | |
billing.read | kan se abonnement, fakturaer og hvad Blitz koster |
billing.manage | kan skifte abonnement, rette betalingskortet og opsige not available to API keys |
Guest contact details
Without contacts.pii.read a key sees guests masked: names as
Anders J., phone numbers as a fixed-width string ending in the last two digits,
e-mail addresses as a•••@example.dk. The permission lifts the mask on guests, bookings,
reviews and enquiries alike. Grant it only to systems that genuinely need to contact guests.
Errors
Errors carry an HTTP status and a JSON body with a detail field. The text
is written for the restaurant and is usually Danish — show it, but branch on the status.
| Status | Meaning |
|---|---|
| 400 | The request is understood but refused (for example an invalid combination). |
| 401 | Missing, malformed, unknown or revoked key. |
| 403 | The key lacks the permission, or the restaurant's plan does not include the module. |
| 404 | No such resource — or a resource that belongs to another restaurant. |
| 409 | A conflict with current state, such as a fully booked time. |
| 422 | The body or parameters failed validation; detail lists the fields. |
| 429 | Too many requests. Honour Retry-After. |
Rate limits
The edge allows about 30 requests per second per client address, with a
short burst allowance; beyond that you get 429. Individual endpoints add
their own limits (the public booking endpoint limits per address and per phone
number), and test keys have the daily write cap above.
Public APIs (no key)
Two APIs are open to a guest's browser and send permissive CORS headers, so a
page on a restaurant's own domain can call them directly. Their paths start with
/api/v1/public/restaurants/<restaurant_id>/ and are listed in the
reference under reservations and reviews.
Reservation API
GET .../rules— largest online party, the party size from which a booking becomes a request, the cancellation cut-off. Use it to build your form.GET .../availability?at=&party_size=— advisory; the booking call decides.GET .../privacy-policy— show it as a line with a link under the submit button.POST .../reservations—201withstatusconfirmedorrequested(the restaurant answers a request by e-mail).guest_emailis required,marketing_consentmust be an unticked checkbox and is never inferred. The response carriesmanage_tokenonce.GET .../reservations/{id}?token=andPOST .../reservations/{id}/cancel?token=— the guest's own booking. Wrong token, unknown id and finished bookings all answer404.
Review API
Shows a restaurant's published reviews and takes a guest's review via the link in their invitation. See the reviews tag in the reference.