OpenTable API: Check restaurant availability
Checks reservation times at an OpenTable restaurant by name and city or restaurant link. Shows times near the requested time; availability can change, and some restaurants limit online bookings for large parties.
Unofficial. Not affiliated with or endorsed by OpenTable.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- City, required
city City where the restaurant is located, for example Chicago.
Chicago
- Date, required
date Reservation date, today or later, in YYYY-MM-DD, for example 2026-10-15.
2026-11-19
- Time optional
time Preferred local time in HH:MM, for example 19:00.
19:00
Default
19:00.- Party Size optional
party_size Number of guests, for example 2.
20
Whole number from 1 to 20. Default
2.- Restaurant, required
restaurant Restaurant name or OpenTable restaurant link, for example Girl & the Goat.
https://www.opentable.com/r/girl-and-the-goat-chicago
Input as JSON
{ "city": "Chicago", "date": "2026-11-19", "time": "19:00", "party_size": 20, "restaurant": "https://www.opentable.com/r/girl-and-the-goat-chicago" }Output
{ "date": "2026-10-15", "address": "809 W Randolph, Chicago, IL, 60607", "message": "For parties larger than 7, contact Girl & the Goat directly or explore private dining.", "party_size": 20, "booking_link": "https://www.opentable.com/r/girl-and-the-goat-chicago?dateTime=2026-10-15T19%3A00%3A00&covers=20" , "any_table_free": false, "available_times": [], "restaurant_name": "Girl & the Goat"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"opentable.com/check_restaurant_availability","input":{"city":"Chicago","date":"2026-11-19","time":"19:00","party_size":20,"restaurant":"https://www.opentable.com/r/girl-and-the-goat-chicago"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "opentable.com/check_restaurant_availability" , "input": { "city": "Chicago", "date": "2026-11-19", "time": "19:00", "party_size": 20, "restaurant": "https://www.opentable.com/r/girl-and-the-goat-chicago" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "opentable.com/check_restaurant_availability" , "input": { "city": "Chicago", "date": "2026-11-19", "time": "19:00", "party_size": 20, "restaurant": "https://www.opentable.com/r/girl-and-the-goat-chicago" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run opentable.com/check_restaurant_availability# with {"city":"Chicago","date":"2026-11-19","time":"19:00","party_size":20,"restaurant":"https://www.opentable.com/r/girl-and-the-goat-chicago"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "restaurant", "city", "date" ], "properties": { "city": { "type": "string", "description": "City where the restaurant is located, for example Chicago." }, "date": { "type": "string", "description": "Reservation date, today or later, in YYYY-MM-DD, for example 2026-10-15." }, "time": { "type": "string", "default": "19:00", "description": "Preferred local time in HH:MM, for example 19:00." }, "party_size": { "type": "integer", "default": 2, "maximum": 20, "minimum": 1, "description": "Number of guests, for example 2." }, "restaurant": { "type": "string", "description": "Restaurant name or OpenTable restaurant link, for example Girl & the Goat." } }}Output schema
{ "type": "object", "required": [ "restaurant_name", "address", "date", "party_size", "available_times", "any_table_free", "message", "booking_link" ], "properties": { "date": { "type": "string", "description": "Requested reservation date." }, "address": { "type": [ "string", "null" ], "description": "Street address of the restaurant." }, "message": { "type": [ "string", "null" ], "description": "Restaurant notice or unavailability message when no table is free; null when tables are free or no notice is displayed." }, "party_size": { "type": "integer", "description": "Requested number of guests." }, "booking_link": { "type": "string", "description": "OpenTable page for the restaurant with the chosen reservation details." }, "any_table_free": { "type": "boolean", "description": "Whether any requested-date reservation time is available near the preferred time." }, "available_times": { "type": "array", "items": { "type": "string" }, "description": "Available local times near the preferred time, in HH:MM and chronological order." }, "restaurant_name": { "type": "string", "description": "Name listed by OpenTable." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
opentable.com/check_restaurant_availability- Returns
- restaurant name, address, available times near the requested time, notice, booking link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method opentable.com/check_restaurant_availability with the inputs above.
Ask your agent
- Can I get a table for 4 at Gramercy Tavern in New York on 2026-11-20 around 7:30 pm?
- Check OpenTable for open slots at Girl & the Goat in Chicago, party of 2, next Saturday 2026-10-17 at 8:00.
- What reservation times are available near 6pm on December 5, 2026 at State Bird Provisions in San Francisco for 3 people?
- Is there anything open at https://www.opentable.com/r/canlis-seattle for 2026-09-12 at 19:00 for six guests? Use OpenTable.
- Looking to book dinner for 10 at Uchi in Austin on 2026-10-30 around 8:15pm — what times can we get?
See more
All OpenTable methodsFinds OpenTable restaurants with bookable slots within two hours of the selected time in a city or neighborhood, in OpenTable search order, optionally for one cuisine. Examines up to 300 listings; availability may change.
opentable.com/search_available_tablesGets a restaurant's public OpenTable profile by name or OpenTable link and city, including ratings, details, menu and photo links. Ratings and other fields can be missing when the restaurant does not publish them.
opentable.com/get_restaurantFinds room offers and nightly prices for one Agoda hotel on selected dates. Totals are calculated from displayed nightly prices before taxes and fees; final checkout totals may differ.
agoda.com/get_room_pricesFinds Recreation.gov campsites free for every night of a stay at a campground, with site details. Nightly prices are shown only when a campground lists a single nightly rate. Availability can change before booking.
recreation.gov/check_campsite_availabilityLists Michelin Guide restaurants in a city or region, in Guide order, optionally filtered by distinction and cuisine, with each restaurant's address, description and photo. Results may include the surrounding area as labeled by the Guide.
guide.michelin.com/search_restaurantsLists Tripadvisor's ranked restaurants in a city from the first results page, optionally filtered by cuisine and price category. Sponsored listings are left out; up to 30 restaurants with rating, review count, cuisines, price range and address.
tripadvisor.com/list_top_restaurantsConverts a meeting time in one city to local times in other cities, with time zones and 09:00-17:00 working-hours status. Supports dates from 1970 to 2030; ambiguous clock-change times use the first occurrence.
timeanddate.com/convert_time_between_citiesGets the delivery menu, prices, rating and delivery details of the nearest matching Uber Eats restaurant at a city or address. For a city, a central listed address is used; delivery fees may reflect guest promotions, and rating counts may be rounded.
ubereats.com/get_restaurant_menu