Browse documentation
GET

OpenTable Restaurant Menu API

Get every structured menu OpenTable publishes for one restaurant ID.

Overview

Authentication

Send your StayAPI key in the X-API-Key request header. The endpoint is available through the authenticated playground and uses the same request credits as the other OpenTable endpoints.

Pass the stable restaurant_id returned by Restaurant Search or URL to Restaurant ID. The response preserves menu metadata, currency, sections, items, descriptions, price strings, and size or portion variations.

Endpoint URL

GET https://api.stayapi.com/v1/opentable/restaurant/menu

Query Parameter

Parameter Type Required Description
restaurant_id integer Required Positive OpenTable restaurant ID greater than zero, such as 12526.

There are no optional query parameters, defaults, pagination, sorting, locale, or currency overrides.

Response Fields

Field Description
successTrue for a successful menu fetch, including a restaurant with no structured menu.
restaurant_id, restaurant_nameOpenTable identity. The name may be null when OpenTable does not publish it.
source_urlOpenTable restaurant profile URL fetched for this ID.
external_menu_urlRestaurant-supplied menu link when OpenTable provides one, otherwise null.
shows_third_party_menuWhether OpenTable advertises a third-party menu. May be null.
menu_count, section_countAggregate numbers of menus and nested sections.
item_count, variation_countTop-level dishes and nested size or portion choices, counted separately.
menusEvery structured menu OpenTable publishes for the restaurant.
Object Fields
menuname, description, currency_code, sections
sectionname, description, items
itemname, description, price, variations
variationname, price

Prices remain strings

OpenTable can publish numeric prices, null, or nonnumeric values such as MKT. Keep item and variation prices as strings and read currency_code from each menu.

Empty Menus and Limitations

No structured menu is still HTTP 200

A valid restaurant without a structured OpenTable menu returns menus: [] with menu_count, section_count, item_count, and variation_count set to zero.

Structured OpenTable data only

The nested menus array reflects the structured data OpenTable publishes. A restaurant-supplied menu link is returned separately in external_menu_url when available.

Nullable upstream fields stay nullable

Names, descriptions, prices, currency codes, external links, and the third-party-menu flag can be null when OpenTable omits them.

Error Responses

Errors use RFC 7807 Problem Details with application/problem+json, provider: "opentable", and product: "menu".

404 Restaurant not found

RESTAURANT_NOT_FOUND when OpenTable has no restaurant with that ID.

422 Validation error

Returned when restaurant_id is missing, zero, negative, or not an integer.

502 Upstream error

UPSTREAM_ERROR when OpenTable fails or returns an invalid profile.

500 Internal error

INTERNAL_ERROR for an unexpected server error.

Related Workflow

URL to Restaurant ID

Resolve a public OpenTable profile URL before requesting its menus.

View Documentation →

Restaurant Search

Find restaurants and carry each result's stable ID into the menu endpoint.

View Documentation →

Restaurant Details

Combine menu data with cuisine, hours, address, photos, and restaurant features.

View Documentation →

Restaurant Reviews

Pair published menus with paginated guest feedback for the same restaurant ID.

View Documentation →
Request
curl -G "https://api.stayapi.com/v1/opentable/restaurant/menu" \
  -H "X-API-Key: YOUR_API_KEY" \
  --data-urlencode "restaurant_id=12526"
Response
{
  "success": true,
  "restaurant_id": 12526,
  "restaurant_name": "Takami Sushi & Robata Restaurant",
  "source_url": "https://www.opentable.com/restaurant/profile/12526",
  "external_menu_url": "http://www.takamisushi.com/dinnermenu.pdf",
  "shows_third_party_menu": true,
  "menu_count": 2,
  "section_count": 35,
  "item_count": 222,
  "variation_count": 123,
  "menus": [
    {
      "name": "Lunch",
      "description": null,
      "currency_code": "USD",
      "sections": [
        {
          "name": "Hot Appetizer",
          "description": null,
          "items": [
            {
              "name": "Miso Soup",
              "description": "White miso broth with tofu, green onion, and seaweed",
              "price": "7.00",
              "variations": []
            },
            {
              "name": "Bluefin Tuna (Hon-Maguro)*",
              "description": null,
              "price": null,
              "variations": [
                {"name": "2pcs", "price": "11.00"},
                {"name": "4pcs", "price": "20.00"}
              ]
            }
          ]
        }
      ]
    }
  ]
}