OAC Open Standard
A vendor-neutral JSON spec for venue data — restaurants and shops alike. One endpoint returns everything you need to render, route, or reserve.
Quick example
curl https://www.openalacarte.com/api/standard/v1/restaurants/<slug>
No auth. Cached at the edge for 5 minutes. CORS open — call from a browser.
What's in the response
restaurant.*
Identity, contact, currency, address with lat/lng, opening hours per day, what they accept (reservations / delivery / pickup).
menu.sections[].items[]
The venue's primary active menu (lowest `sortOrder`) — name, description, price, currency, allergens, image — grouped by section. A venue with several menus publishes one; multi-menu payloads are a v2 shape.
spec + fetched
Versioned envelope (`openalacarte.standard/v1`) + ISO timestamp so downstream caches know what they have.
Stable IDs
The venue `slug` is the canonical identifier. Slugs are assigned at creation and never rewritten, so a slug you store stays valid.
restaurant.venueType
Either `restaurant` or `shop`, on every response. Branch on this — not on which other fields happen to be empty.
Restaurants and shops
Bakeries, butchers, delis, greengrocers and wine shops are a distinct class of venue on OpenALaCarte, and this endpoint serves them too:
- Both classes answer on the same
/v1/restaurants/path and arrive under the same top-levelrestaurantkey. Both are frozen — v1 promises that code written against it keeps working, and relocating shops would break exactly that. restaurant.venueTypeis the discriminator. It is present on every response, so you can read it without a fallback.- A shop always reports
acceptsReservations: false. Shops take no bookings at any tier, so this is a fact about the venue class — never a restaurant that switched bookings off. - A shop's
cuisinecarries its retail category (Bakery, Butcher, Greengrocer), and itsmenuis its product catalogue in the same sections-and-items shape. - A shop that trades from market pitches rather than a fixed address publishes
address: nulland an emptyhoursarray. Its address row is a depot and its trading hours belong to a rota, so neither describes a door a customer can arrive at.
Versioning
SemVer at the URL level. v1.* additions are backward-compatible (new fields, never removed/renamed). Breaking changes move to /v2/ with a 12-month overlap.
Deprecations announced in this page's developer changelog + via the Deprecation response header.
Where this data also appears
The same venue facts are published in more than one form. To be precise about it, these are parallel representations rather than consumers of this endpoint:
- Our JSON-LD for Google Maps Reserve and Apple Business Connect — the same facts, generated from the database rather than fetched from this feed.
- Embed widgets (/restaurants/[slug]) — the same payload, rendered as HTML.
- (Future) third-party integrators — DoorDash, Uber Eats, Tock — when they want canonical OAC data
Building on top? Email devs@openalacarte.com and we'll list you here.
Why "Open" Standard?
Because the spec is documented + versioned + stable. We commit to not breaking it. If you write code against /v1/, that code keeps working — even if OAC pivots, even if we're acquired.