OpenTable API: Search available tables
Finds 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.
Unofficial. Not affiliated with or endorsed by OpenTable.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Date, required
date Reservation date, today or later, such as 2026-10-10.
2026-11-07
- Time optional
time Local reservation time in 24-hour HH:MM format, such as 19:00.
19:00
Default
19:00.- Cuisine optional
cuisine Cuisine to filter by, such as Italian; any for all cuisines.
any (default)
- Location, required
location City or neighborhood to search, such as River North, Chicago.
Chicago
- Party Size optional
party_size Number of diners, for example 2.
2
Whole number from 1 to 20. Default
2.- Max Results optional
max_results Maximum restaurants to return, such as 20.
20 (default)
Whole number from 1 to 50.
Input as JSON
{ "date": "2026-11-07", "time": "19:00", "location": "Chicago", "party_size": 2}Output
{ "restaurants": [ { "name": "Sushi by Bou - Fulton Market Chicago @ Emily Hotel", "cuisine": "Sushi", "photo_link": "https://resizer.otstatic.com/v3/photos/49980171-3?width=320&height=320&webp=true" , "price_range": "$50 and over", "star_rating": 4.9, "booking_link": "https://www.opentable.com/r/sushi-by-bou-fulton-market-chicago-at-emily-hotel-chicago?dateTime=2026-10-10T19%3A00&covers=2" , "review_count": 470, "neighbourhood": "West Loop", "restaurant_id": 1264603, "available_time_slots": [ "17:00", "18:00", "19:00" ] }, { "name": "Maya Del Sol", "cuisine": "Latin American", "photo_link": "https://resizer.otstatic.com/v3/photos/71224753-3?width=320&height=320&webp=true" , "price_range": "$30 and under", "star_rating": 4.8, "booking_link": "https://www.opentable.com/r/maya-del-sol-oak-park?dateTime=2026-10-10T19%3A00&covers=2" , "review_count": 4049, "neighbourhood": "Oak Park", "restaurant_id": 16201, "available_time_slots": [ "18:15", "18:30", "19:00" ] }, { "name": "Sushi by Bou - Gold Coast Chicago at Claridge House", "cuisine": "Sushi", "photo_link": "https://resizer.otstatic.com/v3/photos/48153204-3?width=320&height=320&webp=true" , "price_range": "$50 and over", "star_rating": 4.7, "booking_link": "https://www.opentable.com/r/sushi-by-bou-gold-coast-chicago-at-claridge-house-chicago?dateTime=2026-10-10T19%3A00&covers=2" , "review_count": 324, "neighbourhood": "River North (Chicago)", "restaurant_id": 1238302, "available_time_slots": [ "17:00", "18:00", "19:00" ] } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"opentable.com/search_available_tables","input":{"date":"2026-11-07","time":"19:00","location":"Chicago","party_size":2}}' # 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/search_available_tables" , "input": { "date": "2026-11-07", "time": "19:00", "location": "Chicago", "party_size": 2 }})# 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/search_available_tables" , "input": { "date": "2026-11-07", "time": "19:00", "location": "Chicago", "party_size": 2 } }), 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/search_available_tables# with {"date":"2026-11-07","time":"19:00","location":"Chicago","party_size":2}"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": [ "location", "date" ], "properties": { "date": { "type": "string", "examples": [ "2026-10-10" ], "description": "Reservation date, today or later, such as 2026-10-10." }, "time": { "type": "string", "default": "19:00", "examples": [ "19:00" ], "description": "Local reservation time in 24-hour HH:MM format, such as 19:00." }, "cuisine": { "type": "string", "default": "any", "examples": [ "Italian" ], "description": "Cuisine to filter by, such as Italian; any for all cuisines." }, "location": { "type": "string", "examples": [ "River North, Chicago" ], "description": "City or neighborhood to search, such as River North, Chicago." }, "party_size": { "type": "integer", "default": 2, "maximum": 20, "minimum": 1, "examples": [ 2 ], "description": "Number of diners, for example 2." }, "max_results": { "type": "integer", "default": 20, "maximum": 50, "minimum": 1, "examples": [ 20 ], "description": "Maximum restaurants to return, such as 20.", "x-fous-developer": true } }, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "restaurants" ], "properties": { "restaurants": { "type": "array", "items": { "type": "object", "required": [ "name", "cuisine", "neighbourhood", "price_range", "star_rating", "review_count", "available_time_slots", "photo_link", "booking_link", "restaurant_id" ], "properties": { "name": { "type": "string" }, "cuisine": { "type": [ "string", "null" ] }, "photo_link": { "type": [ "string", "null" ] }, "price_range": { "type": [ "string", "null" ] }, "star_rating": { "type": [ "number", "null" ] }, "booking_link": { "type": "string" }, "review_count": { "type": [ "integer", "null" ] }, "neighbourhood": { "type": [ "string", "null" ] }, "restaurant_id": { "type": "integer", "x-fous-developer": true }, "available_time_slots": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
opentable.com/search_available_tables- Returns
- restaurant name, cuisine, neighbourhood, price range, rating, review count, available time slots, photo, 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/search_available_tables with the inputs above.
Ask your agent
- Find me restaurants in the West Village, New York with a table for 4 around 8pm on 2026-11-14
- Any Italian places in North Beach, San Francisco that have openings for two at 7:30 pm on December 3rd 2026? Check OpenTable please.
- Need a Japanese spot in Capitol Hill, Seattle for a party of 6 on 2026-09-19 around 6:00 PM — what's bookable?
- Search OpenTable for Mexican restaurants in South Congress, Austin with availability for 3 people at 19:00 on 2026-10-22, show up to 10 results
- Where can I get a dinner reservation for 8 in Back Bay, Boston on 2027-02-14 near 20:30? Any cuisine is fine, include ratings and booking links.
See more
All OpenTable methodsChecks 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.
opentable.com/check_restaurant_availabilityGets 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_restaurantLists 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_restaurantsFinds DoorDash restaurants delivering to a street address or ZIP code, optionally for a cuisine or dish, in DoorDash's search order. Fees and times reflect guest offers; the numeric fee is null when DoorDash shows no amount.
doordash.com/search_restaurantsFind restaurants delivering to an address in Uber Eats guest browsing order. Fees can be conditional for new users; displayed rating counts may be rounded.
ubereats.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_restaurantsFind publicly priced Priceline hotels in a place for your travel dates, with guest ratings, nightly and total USD prices, and cancellation information. Excludes hotels hidden behind anonymous deals and sign-in-only prices.
priceline.com/search_hotelsFinds available Agoda stays in a city for your dates, with prices before taxes and fees, star and guest ratings, and free-cancellation status.
agoda.com/search_hotels