OpenTable API: Get restaurant profile
Gets 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.
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.
Los Angeles
- Restaurant, required
restaurant Restaurant name or OpenTable restaurant link, for example Girl & the Goat or https://www.opentable.com/r/girl-and-the-goat-chicago.
Girl & the Goat
Input as JSON
{ "city": "Los Angeles", "restaurant": "Girl & the Goat"}Output
{ "name": "Girl & the Goat L.A.", "website": "http://www.girlandthegoat.com/" , "cuisines": [ "Contemporary American", "Tapas / Small Plates", "Comfort Food" ], "menu_link": "https://www.opentable.com/r/girl-and-the-goat-la-los-angeles#menu" , "dress_code": "Casual Dress", "photo_link": "https://resizer.otstatic.com/v4/photos/42434778-2?width=640&height=640" , "description": "Chef Stephanie Izard and her team are thrilled to have joined LA’s vibrant restaurant community and continue our tradition of serving bold-flavored foods in a fun and lively family-style setting. Stephanie and her team have also crafted new dishes inspired by California produce and local flavors, li…", "food_rating": 4.7, "price_range": "$31 to $50", "dining_style": "Casual Dining", "full_address": "555 Mateo St, Los Angeles, CA, 90013, United States", "phone_number": "(213) 799-4628", "value_rating": 4.2, "neighbourhood": "Downtown", "opening_hours": "Mon, Tue, Sun 5:00 pm–9:30 pm\nWed–Sat 5:00 pm–10:00 pm\nSun 10:00 am–2:00 pm", "opentable_link": "https://www.opentable.com/r/girl-and-the-goat-la-los-angeles" , "service_rating": 4.6, "ambience_rating": 4.7, "parking_details": null, "number_of_reviews": 553, "overall_star_rating": 4.7, "opentable_restaurant_id": 1099237}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"opentable.com/get_restaurant","input":{"city":"Los Angeles","restaurant":"Girl & the Goat"}}' # 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/get_restaurant" , "input": { "city": "Los Angeles", "restaurant": "Girl & the Goat" }})# 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/get_restaurant" , "input": { "city": "Los Angeles", "restaurant": "Girl & the Goat" } }), 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/get_restaurant# with {"city":"Los Angeles","restaurant":"Girl & the Goat"}"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" ], "properties": { "city": { "type": "string", "description": "City where the restaurant is located, for example Chicago." }, "restaurant": { "type": "string", "description": "Restaurant name or OpenTable restaurant link, for example Girl & the Goat or https://www.opentable.com/r/girl-and-the-goat-chicago." } }}Output schema
{ "type": "object", "required": [ "name", "cuisines", "price_range", "overall_star_rating", "food_rating", "service_rating", "ambience_rating", "value_rating", "number_of_reviews", "neighbourhood", "full_address", "phone_number", "opening_hours", "dress_code", "dining_style", "parking_details", "description", "website", "menu_link", "photo_link", "opentable_link", "opentable_restaurant_id" ], "properties": { "name": { "type": [ "string", "null" ] }, "website": { "type": [ "string", "null" ] }, "cuisines": { "type": "array", "items": { "type": "string" } }, "menu_link": { "type": [ "string", "null" ] }, "dress_code": { "type": [ "string", "null" ] }, "photo_link": { "type": [ "string", "null" ] }, "description": { "type": [ "string", "null" ] }, "food_rating": { "type": [ "number", "null" ] }, "price_range": { "type": [ "string", "null" ] }, "dining_style": { "type": [ "string", "null" ] }, "full_address": { "type": [ "string", "null" ] }, "phone_number": { "type": [ "string", "null" ] }, "value_rating": { "type": [ "number", "null" ] }, "neighbourhood": { "type": [ "string", "null" ] }, "opening_hours": { "type": [ "string", "null" ] }, "opentable_link": { "type": "string" }, "service_rating": { "type": [ "number", "null" ] }, "ambience_rating": { "type": [ "number", "null" ] }, "parking_details": { "type": [ "string", "null" ] }, "number_of_reviews": { "type": [ "integer", "null" ] }, "overall_star_rating": { "type": [ "number", "null" ] }, "opentable_restaurant_id": { "type": [ "integer", "null" ], "x-fous-developer": true } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
opentable.com/get_restaurant- Returns
- name, cuisines, price range, ratings, review count, address, phone, hours, dress code, description, website, menu, photo and OpenTable links
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/get_restaurant with the inputs above.
Ask your agent
- What's the dress code and phone number for Carbone in New York?
- Pull up the OpenTable page for Atelier Crenn in San Francisco and tell me its rating and how many reviews it has
- I need the hours, address, and menu link for Uchi in Austin
- https://www.opentable.com/r/bavettes-bar-and-boeuf-chicago — give me the cuisine, price range, and a short description of this place in Chicago
- Find details on The Herbfarm in Woodinville: website, photos, and what kind of food they serve, using its OpenTable listing
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_availabilityFinds 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_tablesLists 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_restaurantsGets 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_menuLists 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_restaurantsLooks up a public Google Maps place by name and location and returns its profile: address, rating, hours, phone, website and photos.
google.com/get_placeFind 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_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_restaurants