OpenTable APIopentable.com ↗
Search OpenTable restaurants, check real-time reservation availability, resolve locations, and get autocomplete suggestions. Covers US restaurants with ratings, reviews, and pricing.
What is the OpenTable API?
This API exposes 5 endpoints covering OpenTable's US restaurant inventory, returning fields like cuisine, ratings, review counts, photos, pricing bands, and real-time reservation slots. Use search_restaurants to query by keyword, location, date, and party size, or hit restaurant_availability to pull open time slots for one or more venues in a single call.
curl -X GET 'https://api.parse.bot/scraper/f37010d4-cf53-464e-8c5a-8b0fb742720e/search_restaurants?date=2026-08-23&page=1&term=Italian&time=19%3A00&query=pizza&sort_by=RATING&latitude=40.7128&location=chicago&metro_id=0&longitude=-74.006&page_size=25&party_size=2' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for restaurants by keyword, location, date/time, party size, and various filters. Returns paginated results with comprehensive restaurant details including name, cuisine, ratings, reviews, photos, address, phone, and features. Paginates via page number. Each restaurant includes a restaurant_id usable with restaurant_availability.
| Param | Type | Description |
|---|---|---|
| date | string | Date in YYYY-MM-DD format. Defaults to tomorrow. |
| page | integer | Page number (1-based) |
| term | string | Search term (e.g., 'Italian', 'sushi', 'steakhouse', 'pizza'). Leave empty to browse all restaurants. |
| time | string | Time in HH:MM format (24h) |
| prices | string | Comma-separated price band IDs (1=under $15, 2=$30 and under, 3=$31-50, 4=$50+) |
| sort_by | string | Sort order for results |
| latitude | number | Latitude of search center |
| metro_id | integer | Metro ID (auto-resolved from coordinates if not provided). Use location_lookup to find IDs. |
| longitude | number | Longitude of search center |
| page_size | integer | Results per page (max 50) |
| party_size | integer | Number of diners |
| cuisine_ids | string | Comma-separated cuisine filter IDs |
{
"type": "object",
"fields": {
"page": "integer current page number",
"filters": "object with date, time, party_size, sort_by",
"location": "object with latitude, longitude, metro_id",
"page_size": "integer results per page",
"restaurants": "array of restaurant objects with restaurant_id, name, cuisine, rating, review_count, address, phone, photos, features, etc.",
"search_term": "string the search term used",
"total_results": "integer total number of matching restaurants"
},
"sample": {
"data": {
"page": 1,
"filters": {
"date": "2026-06-11",
"time": "19:00",
"sort_by": "WEB_CONVERSION",
"party_size": 2
},
"location": {
"latitude": 40.7128,
"metro_id": 8,
"longitude": -74.006
},
"page_size": 25,
"restaurants": [
{
"name": "Cecconi's Dumbo",
"phone": "+1 (555) 012-3456",
"photos": [
"https://resizer.otstatic.com/v4/photos/24991179-1?width=640&height=360"
],
"rating": 4.6,
"address": {
"city": "Brooklyn",
"line1": "55 Water St",
"state": "NY",
"post_code": "11201"
},
"cuisine": "Contemporary Italian",
"features": {
"bar": true,
"counter": false,
"outdoor": true,
"max_party_size": 9
},
"latitude": 40.7034056,
"longitude": -73.9923495,
"price_range": "$30 and under",
"neighborhood": "DUMBO",
"review_count": 5980,
"price_band_id": 2,
"restaurant_id": 730843
}
],
"search_term": "Italian",
"total_results": 440
},
"status": "success"
}
}About the OpenTable API
Search and Discovery
The search_restaurants endpoint accepts a term (e.g. "sushi" or "steakhouse"), a metro_id, optional latitude/longitude coordinates, date, time, and party_size. Results are paginated via the page parameter and each restaurant object includes restaurant_id, name, cuisine, rating, review_count, address, phone, photos, and a features array. Price filtering uses comma-separated band IDs where 1 = under $15, 2 = $30 and under, 3 = $31–50, and 4 = $50+. total_results tells you how many records matched so you can paginate accordingly.
Location Resolution and Autocomplete
location_lookup converts raw latitude/longitude coordinates into OpenTable's internal geography hierarchy — metro, macro, and neighborhood objects, each carrying a numeric ID and display name. Pass the returned metro_id directly into search_restaurants to scope results. The autocomplete endpoint accepts a term and optional coordinates and returns typed suggestions with type, metro_id, metro_name, macro_name, and neighborhood fields, making it straightforward to build a typeahead search UI that feeds into a subsequent restaurant search.
Availability Checking
restaurant_availability accepts a comma-separated list of restaurant_ids (sourced from search results), a date, time, and party_size, and returns per-restaurant availability_days arrays that include available time slots, no_times_reasons when nothing is open, and slot hashes for booking. This batch design lets you check multiple venues in one request. For name-to-ID resolution plus availability in one step, batch_availability accepts a JSON array of {name, city} pairs and returns each mapped to its resolved restaurant record alongside availability data, reporting total_resolved and total_requested counts.
The OpenTable API is a managed, monitored endpoint for opentable.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when opentable.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official opentable.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a restaurant finder that filters by cuisine, price band, and party size using
search_restaurants. - Add typeahead restaurant and neighborhood search to a dining app with the
autocompleteendpoint. - Check real-time reservation slots across a shortlist of venues using
restaurant_availabilitywith multiple IDs in one call. - Resolve a user's GPS coordinates to an OpenTable metro ID via
location_lookupbefore running a proximity search. - Map a list of restaurant names and cities to OpenTable IDs and availability in one pass with
batch_availability. - Display restaurant ratings, review counts, and photos in a curated dining guide sourced from
search_restaurantsresults. - Surface open time slots for a specific date and party size across multiple competing restaurants for a comparison view.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does OpenTable have an official developer API?+
What does `batch_availability` return that `restaurant_availability` does not?+
batch_availability handles the name-to-ID resolution step for you. You supply a JSON array of {name, city} pairs and it returns each input mapped to a resolved restaurant_id, the matched restaurant object (name, address, cuisine), and availability slots — all in one response. restaurant_availability requires you to already know the numeric restaurant_ids, which you get from search_restaurants first.Does the API cover restaurants outside the United States?+
location_lookup and search_restaurants endpoints resolve to OpenTable's US metro hierarchy. You can fork this API on Parse and revise it to target OpenTable's international metros if you need coverage in Canada, the UK, or other regions.Does the API return menu data or dish-level information?+
How does pagination work in `search_restaurants`?+
page (current page number, 1-based), page_size (results per page), and total_results (total matching records). Pass page=2, page=3, etc. to walk through all results. total_results divided by page_size gives you the page count.