OpenTable Restaurant Menu API
Get a restaurant's structured menus, sections, items, descriptions, price strings, and item variations.
Overview
The menu endpoint reads the structured menu published on an OpenTable restaurant profile. A single response can contain multiple menus, such as dinner, drinks, or happy hour, each with its own currency and nested sections.
Endpoint URL
Prices are strings by design
Menu prices can be numeric, ranges, text such as MKT, or unavailable. Keep price and variation price values as strings, and use each menu's currency_code when it is present.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| restaurant_id | integer | Required | Positive OpenTable restaurant ID from search or the URL-to-ID endpoint. |
Response schema
Top-level fields
- restaurant_id and restaurant_name: Restaurant identity
- source_url: Profile URL fetched for the restaurant ID
- external_menu_url: Restaurant-hosted menu link, when OpenTable supplies one
- shows_third_party_menu: Whether OpenTable points to an external menu
- menu_count, section_count, item_count, variation_count: Convenient aggregate counts
- menus: Array of normalized menu objects
| Object | Fields |
|---|---|
| menu | name, description, currency_code, sections |
| section | name, description, items |
| item | name, description, price, variations |
| variation | name, price |
An empty menu is a successful result
A valid restaurant that has no structured OpenTable menu returns HTTP 200 with menus: [] and zero counts. Use 404 only to identify an unknown restaurant ID.
Errors
404 Restaurant not found
No OpenTable profile exists for the requested restaurant ID.
422 Validation error
restaurant_id is missing, is not an integer, or is not positive.
502 Upstream error
The restaurant profile could not be fetched or parsed after retries. In-request errors use RFC 7807 Problem Details.
Try it
Free URL-first explorer
Paste an OpenTable URL. The explorer resolves the restaurant ID and renders the menu for you.
Open the free menu tool →Authenticated playground
Run the menu endpoint with your API key and inspect the complete JSON response.
Open in playground →