Skip to content

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-level restaurant key. Both are frozen — v1 promises that code written against it keeps working, and relocating shops would break exactly that.
  • restaurant.venueType is 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 cuisine carries its retail category (Bakery, Butcher, Greengrocer), and its menu is its product catalogue in the same sections-and-items shape.
  • A shop that trades from market pitches rather than a fixed address publishes address: null and an empty hours array. 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.