OpenTable API
Search OpenTable restaurants by name and location, then check available reservation times for a restaurant, date, party size, and time window. Returns restaurant identifiers and booking links; does not make reservations.
Endpoint health
Loading verification…
Connect your agent
Connect through MCP so your agent can find this API, read its docs, and call its endpoints.
Add the server from your terminal.
claude mcp add --transport http agent-data https://agent-data.motie.dev/mcpIn Claude Code, run /mcp, select agent-data, then Authenticate. Sign in to your agent-data account in the browser.
Then ask your agent to use the OpenTable API for your task.
Call it over HTTP
Get an API keySign up free, generate an API key, and set it as AGENT_DATA_API_KEY in your environment. Your first 100 calls each month are free.
curl --request GET --get 'https://api.agent-data.dev/opentable-com/v1/restaurants/search' \
--header "Authorization: Bearer $AGENT_DATA_API_KEY"Endpoints
Inputs and response fields for every endpoint in this API.
GETRestaurants search/v1/restaurants/search
Search Restaurants
Input
textOptionalQuery · string | nullUse this for broad discovery words such as a restaurant name, dining style, or keyword. Do not rely on `text` alone when you need strict cuisine or geography matching.
nameOptionalQuery · string | nullUse this when you are trying to find a specific restaurant by identity rather than category.
cityRequiredQuery · stringProvide the city or platform location name you want to search in. This field is required. If you provide a close synonym or spelling variant, the API may normalize it and echo the resolved value.
stateOptionalQuery · string | nullProvide the two-letter state code when you know it. Include this whenever the city name could be ambiguous.
neighborhoodOptionalQuery · string | nullProvide the neighborhood you want to constrain the search to. Always pair this with `city` and `state` for the most reliable matching.
cuisineOptionalQuery · array | nullProvide one or more cuisine labels you want enforced. The API may normalize close variants and will echo the resolved values it applied.
price_tierOptionalQuery · integer, min: 1, max: 4 | nullProvide an exact canonical price tier from 1 through 4 when you need an exact price match.
min_price_tierOptionalQuery · integer, min: 1, max: 4 | nullProvide the inclusive minimum price tier when you want a price range instead of an exact tier.
max_price_tierOptionalQuery · integer, min: 1, max: 4 | nullProvide the inclusive maximum price tier when you want a price range instead of an exact tier.
page_tokenOptionalQuery · string | nullmax_page_sizeOptionalQuery · integer, min: 1, max: 50, default: 10strict_locationOptionalQuery · boolean, default: trueKeep this as `true` when location fields must match returned restaurant metadata exactly after normalization.
strict_cuisineOptionalQuery · boolean, default: trueKeep this as `true` when cuisine fields must match returned restaurant metadata after normalization.
Response
resultsobject[]results[].idstringresults[].namestringresults[].tags?string[]results[].phone?string | nullresults[].rating?number, min: 0, max: 5 | nullresults[].cuisine?string[]results[].currency?string, default: USDresults[].location?objectresults[].location.lat?number | nullresults[].location.lng?number | nullresults[].location.city?string | nullresults[].location.state?string | nullresults[].location.country?string | nullresults[].location.address1?string | nullresults[].location.address2?string | nullresults[].location.postal_code?string | nullresults[].location.neighborhood?string | nullresults[].platformstringresults[].price_tier?integer, min: 1, max: 4 | nullresults[].description?string | nullresults[].platform_idstringresults[].rating_count?integer, min: 0 | nullresults[].max_party_size?integer | nullresults[].availability_hrefstringresults[].is_global_dining_access?boolean, default: falsewarnings?string[]normalizations?objectnormalizations.input?objectnormalizations.sources?objectnormalizations.resolved?objectnormalizations.confidence?objectapplied_filtersobjectapplied_filters.citystringapplied_filters.name?string | nullapplied_filters.text?string | nullapplied_filters.state?string | nullapplied_filters.cuisine?string[]applied_filters.platformstringapplied_filters.price_tier?integer, min: 1, max: 4 | nullapplied_filters.neighborhood?string | nullapplied_filters.max_price_tier?integer, min: 1, max: 4 | nullapplied_filters.min_price_tier?integer, min: 1, max: 4 | nullapplied_filters.strict_cuisine?boolean, default: trueapplied_filters.strict_location?boolean, default: truenext_page_token?string | nullFields marked ? are optional.
GETAvailability/v1/availability
Get Availability
Input
platform_idOptionalQuery · string | nullUse this when you already know the provider-specific restaurant ID. Prefer this field because it avoids an extra name-resolution step.
queryOptionalQuery · string | nullUse this when `platform_id` is unknown. Provide the restaurant name to resolve before fetching availability.
locationOptionalQuery · string | nullUse this with `query` resolution. Provide the city or market needed to disambiguate the restaurant name.
dateRequiredQuery · string (date)Required. Provide the target dining date in `YYYY-MM-DD` format.
party_sizeRequiredQuery · integer, min: 1, max: 20Required. Provide the total number of diners as an integer from 1 to 20.
time_startOptionalQuery · string (time) | nullOptional. Use this to keep only slots at or after the specified local time.
time_endOptionalQuery · string (time) | nullOptional. Use this to keep only slots at or before the specified local time.
include_rawOptionalQuery · boolean, default: falseOptional. Set this to `true` only when you need provider raw payload fragments for debugging. Leave it `false` for normal agent use.
Response
datestring (date)slotsobject[]slots[].raw?object | nullslots[].datestring (date)slots[].timestring (time)slots[].platformstringslots[].slot_type"standard" | "experience" | "counter" | "outdoor"slots[].party_sizeinteger, min: 1, max: 20slots[].table_type?string | nullslots[].booking_urlstringslots[].restaurant_idstringslots[].deposit_requiredbooleanslots[].duration_minutes?integer, min: 1 | nullslots[].deposit_amount_cents?integer, min: 0 | nullslots[].platform_restaurant_idstringerrors?object[]errors[].messagestringerrors[].platformstringerrors[].retryablebooleanerrors[].error_type"rate_limited" | "blocked" | "timeout" | "parse_error" | "not_found" | "unknown"errors[].retry_after_seconds?integer, min: 0 | nullplatformstringparty_sizeintegerqueried_atstring (date-time)restaurant_namestringFields marked ? are optional.
Don’t see the endpoint you need?
Ask agent-data to add an endpoint or return more fields. Extensions are free and keep existing endpoints working.
An account is required to submit an extension. Prepare your request, then sign in to build.