resy.com, opentable.com APIresy.com, opentable.com ↗
Search restaurants on Resy and OpenTable by cuisine, location, and price. Get ratings, availability, addresses, and contact details via 2 endpoints.
curl -X GET 'https://api.parse.bot/scraper/b3082859-cf6f-4594-835f-67c4ab52d109/search_restaurants?limit=3&query=italian&sort_by=rating&location=new-york' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for restaurants by query and location. Returns restaurants with cuisine type, price range ($-$$$$), ratings, neighborhood, and available reservation times. Results can be sorted by price (cheapest first), rating (highest first), or availability.
| Param | Type | Description |
|---|---|---|
| day | string | Date for availability in YYYY-MM-DD format. Omitting defaults to tomorrow's date (UTC). |
| limit | integer | Maximum number of results (max 50). |
| query | string | Search query (e.g., 'burger', 'sushi', 'italian', 'restaurant'). |
| sort_by | string | Sort order: 'price' (cheapest first), 'rating' (highest first), or 'availability'. |
| location | string | City/area to search. Supported values include: 'new-york', 'los-angeles', 'chicago', 'san-francisco', 'washington-dc'. Unrecognized values default to New York coordinates. |
| party_size | integer | Number of guests for availability check. |
{
"type": "object",
"fields": {
"day": "string — the date used for availability (YYYY-MM-DD)",
"query": "string — the search query used",
"location": "string — the location searched",
"party_size": "integer — party size used",
"restaurants": "array of restaurant objects with venue_id, name, cuisine, price_range_id, price_range, neighborhood, locality, region, rating, review_count, url_slug, image, available_times, currency",
"total_results": "integer — total number of matching restaurants"
},
"sample": {
"data": {
"day": "2026-05-15",
"query": "italian",
"location": "san-francisco",
"party_size": 2,
"restaurants": [
{
"name": "Robin San Francisco",
"image": "https://image.resy.com/3/003/2/1362/124afbc253e4de78566b4f4cff4cc84925de5ea7/jpg/640x360",
"rating": 4.68425,
"region": "CA",
"cuisine": [
"Sushi"
],
"currency": "$",
"locality": "San Francisco",
"url_slug": "robin-san-francisco",
"venue_id": 1362,
"price_range": "$$$$",
"neighborhood": "Hayes Valley",
"review_count": 8988,
"price_range_id": 4,
"available_times": [
"2026-05-15 17:00:00",
"2026-05-15 17:30:00"
]
}
],
"total_results": 141
},
"status": "success"
}
}About the resy.com, opentable.com API
This API exposes 2 endpoints to search and retrieve restaurant data sourced from Resy and OpenTable. The search_restaurants endpoint returns up to 50 restaurants per query with fields including cuisine type, price range, neighborhood, rating, and reservation availability — filterable by date, party size, and location. The get_restaurant_details endpoint returns full venue data including address coordinates, social handles, menu URL, and review counts.
Search Restaurants
The search_restaurants endpoint accepts a free-text query (e.g., 'sushi', 'italian', 'burger') alongside a location slug such as 'new-york', 'chicago', or 'los-angeles'. Pass a day in YYYY-MM-DD format and a party_size integer to filter results to venues with actual reservation availability on that date. Omitting day defaults to tomorrow (UTC). Results can be sorted via the sort_by parameter: 'price' orders cheapest first using the price_range_id field, 'rating' orders by descending score, and 'availability' surfaces venues with open slots first. Each restaurant object in the restaurants array includes venue_id, name, cuisine, price_range, neighborhood, locality, region, rating, and url_slug — the slug used as input to the detail endpoint.
Restaurant Details
The get_restaurant_details endpoint takes a url_slug from search_restaurants results (e.g., 'le-bernardin', 'nobu') and an optional location_slug in city-state format such as 'new-york-ny'. It returns a contact object with phone, website, and menu_url; an address object with street, postal_code, neighborhood, latitude, and longitude; a social object keyed by platform name; and a rating object with score, total_reviews, and scale. The image field provides a primary image URL suitable for display in a UI.
Coverage and Data Shape
Location coverage is city-based. Supported location values include major US markets — 'new-york', 'los-angeles', 'chicago', 'san-francisco', and Washington DC among others. The total_results field in search_restaurants responses indicates how many matching venues exist before any limit is applied, which is useful for pagination planning. Price range is returned as both a human-readable price_range string (e.g., '$$') and a numeric price_range_id for sorting logic.
- Build a restaurant discovery app that lets users filter by cuisine and sort by price using the
sort_by=priceparameter. - Show reservation availability for a specific date and party size by passing
dayandparty_sizetosearch_restaurants. - Populate a venue detail page with address, phone, website, and menu URL from
get_restaurant_details. - Render a restaurant card with rating score and review count from the
ratingobject inget_restaurant_details. - Aggregate social media handles across restaurants using the
socialobject keyed by platform name. - Compare price ranges across neighborhoods in a city by grouping
price_range_idvalues fromsearch_restaurantsresults. - Display map pins using
latitudeandlongitudefrom theaddressobject inget_restaurant_details.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Do Resy and OpenTable have official developer APIs?+
What does the `rating` field in `get_restaurant_details` actually contain?+
rating object contains three fields: score (the numeric rating), total_reviews (the integer count of reviews contributing to that score), and scale (the maximum possible score, e.g., 5 or 10). The search results also surface a top-level rating value per restaurant for quick comparisons without a second request.Does the API return menu items or dish-level data?+
menu_url field in the contact object pointing to the restaurant's menu page, but individual dishes, prices, or menu sections are not parsed into structured fields. You can fork this API on Parse and revise it to add a menu-scraping endpoint.Are reservation booking or cancellation actions supported?+
search_restaurants surfaces available time slots and get_restaurant_details returns venue metadata, but no endpoint exists to create, modify, or cancel a reservation. You can fork this API on Parse and revise it to add booking endpoints if that capability becomes available.How fresh is the availability data returned by `search_restaurants`?+
day you specify (defaulting to tomorrow UTC). Slot availability on both Resy and OpenTable can change frequently as diners book or cancel, so results are a point-in-time snapshot. For live booking decisions, re-querying close to the time of intended reservation is advisable.