Resy APIresy.com ↗
Search Resy restaurants, check real-time reservation availability, browse curated city lists, and retrieve full venue profiles via a clean REST API.
What is the Resy API?
This API exposes 5 endpoints covering Resy's restaurant data: search by keyword and coordinates, fetch detailed venue profiles, check slot-level reservation availability, inspect calendar ranges, and pull curated city lists. The search_restaurants endpoint returns paginated results with venue IDs, cuisine types, price ranges, ratings, and neighborhood data that feed directly into downstream detail and availability lookups.
curl -X GET 'https://api.parse.bot/scraper/d97a8bf9-e9ca-473c-b1e6-e66ada7210a0/search_restaurants?date=2026-07-11&page=1&query=italian&latitude=40.7128&per_page=5&longitude=-74.006&party_size=2' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace resy-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
Resy Restaurant Search API – SDK usage example
"""
from parse_apis.Resy_Restaurant_Search_API import Resy, Restaurant, Slot, CalendarDay, TopRestaurant, Venue, City, ListType, VenueNotFound
resy = Resy()
# Search for Italian restaurants in NYC with available time slots
for restaurant in resy.restaurants.search(query="italian", latitude=40.7128, longitude=-74.006, party_size=2, limit=3):
print(restaurant.name, restaurant.neighborhood, restaurant.price_range)
# Each result includes available reservation times for the searched date
for slot in restaurant.available_slots:
print(f" {slot.start} - {slot.end} ({slot.type})")
# Drill into a single restaurant's detailed time slots (with payment info)
restaurant = resy.restaurants.search(query="sushi", party_size=2, limit=1).first()
if restaurant:
for slot in restaurant.slots.list(party_size=2, limit=5):
print(slot.start, slot.end, slot.type, slot.payment.is_paid)
# Check calendar availability over the next month
for day in restaurant.calendar.list(num_seats=2, limit=7):
print(day.date, day.inventory.reservation, day.inventory.walk_in)
# Get full venue details by slug
try:
venue = resy.venues.get(url_slug="i-sodi", location="new-york-ny")
print(venue.name, venue.type, venue.price_range_id)
for block in venue.content:
print(block.name, block.body)
except VenueNotFound as exc:
print(f"Venue not found: {exc}")
# Browse top-rated restaurants in NYC
nyc = resy.city(city_slug="new-york-ny")
for top in nyc.top_restaurants.list(list_type=ListType.TOP_RATED, limit=3):
print(top.name, top.neighborhood, top.address, top.why_we_like_it)
print("exercised: restaurants.search / slots.list / calendar.list / venues.get / top_restaurants.list")
Full-text search over restaurants by keyword, location coordinates, date, and party size. Returns paginated results with restaurant names, cuisine types, ratings, price ranges, neighborhoods, and available reservation time slots for the queried date. Each result carries a venue ID usable for detail/availability lookups. Paginates via integer page counter.
| Param | Type | Description |
|---|---|---|
| date | string | Date for availability check in YYYY-MM-DD format. Omitting defaults to today's date. |
| page | integer | Page number for pagination |
| query | string | Search keyword (e.g., 'italian', 'sushi', 'steakhouse') |
| latitude | number | Latitude of search center (e.g., 40.7128 for NYC) |
| per_page | integer | Results per page (max 50) |
| longitude | number | Longitude of search center (e.g., -74.006 for NYC) |
| party_size | integer | Number of guests |
{
"type": "object",
"fields": {
"date": "string, the date used for the search",
"query": "string, the search keyword used",
"pagination": "object with page, per_page, total, total_pages",
"party_size": "integer, the party size used",
"restaurants": "array of restaurant objects with id, name, cuisine, price_range, rating, neighborhood, region, url_slug, location, images, available_slots, need_to_know, tagline"
},
"sample": {
"data": {
"date": "2026-06-25",
"query": "italian",
"pagination": {
"page": 1,
"total": 2509,
"per_page": 2,
"total_pages": 1255
},
"party_size": 2,
"restaurants": [
{
"id": 92126,
"name": "Eccolo Italian Restaurant",
"images": [
"https://image.resy.com/3/003/2/92126/c4b61fbf0de87f66478b403dcc48c6ce6950c776/jpg/640x360"
],
"rating": {
"count": 95,
"average": 4.30526
},
"region": "NY",
"cuisine": [
"Italian"
],
"tagline": null,
"location": {
"latitude": null,
"longitude": null
},
"url_slug": "eccolo-italian-restaurant",
"price_range": 1,
"need_to_know": null,
"neighborhood": "Hell's Kitchen",
"available_slots": [
{
"end": "2026-06-25 17:30:00",
"type": "Dining Room",
"start": "2026-06-25 16:00:00",
"token": "REDACTED_TOKEN"
},
{
"end": "2026-06-25 17:30:00",
"type": "Patio",
"start": "2026-06-25 16:00:00",
"token": "REDACTED_TOKEN"
}
]
}
]
},
"status": "success"
}
}About the Resy API
Search and Discovery
The search_restaurants endpoint accepts a free-text query (e.g., 'sushi', 'steakhouse'), optional lat/lng coordinates, a target date in YYYY-MM-DD format, and a party_size. It returns paginated restaurant objects — up to 50 per page — each carrying a numeric id, url_slug, cuisine, price_range, rating, neighborhood, and images. The id and url_slug from these results feed the other four endpoints.
Venue Details and Time Slots
get_restaurant_details takes a venue_id, date, and party_size and returns both a full venue profile and a slots array. Each slot object includes start and end times, type (table type), a bookable token, size, and whether a payment is required to hold the reservation. get_restaurant_availability shifts focus to the calendar: given a venue_id, num_seats, and a date range, it returns a calendar array where each date entry shows the inventory status for reservations, events, and walk-ins. The last_calendar_day field reflects the furthest date the venue currently accepts bookings, which may fall before the requested end_date.
Venue Profiles and Curated Lists
get_venue_info requires a url_slug and a location slug (e.g., 'new-york-ny'). It returns content blocks covering the venue's about text, need-to-know notes, tagline, and why-we-like-it blurb, alongside contact info, coordinates, cross-platform IDs (Resy, Google, Foursquare), and the collections the venue belongs to. get_top_restaurants retrieves curated city lists — top-rated, new on Resy, or trending — for a given city_slug. Results include per-venue rating, address, collections, about, and need_to_know fields. The ordering follows Resy's own curation logic and is not user-configurable.
Coverage and Identifiers
All venue lookups hinge on identifiers surfaced by search_restaurants or get_venue_info: the integer venue_id for availability and detail endpoints, and the (url_slug, location) pair for the venue info endpoint. Resy's coverage is US-focused with select international markets; availability data reflects only what Resy manages directly for a given venue.
The Resy API is a managed, monitored endpoint for resy.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when resy.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 resy.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 reservation-finder that surfaces open Resy slots for a party size and date across a city neighborhood.
- Track calendar availability for high-demand restaurants over a rolling 30-day window using
get_restaurant_availability. - Aggregate curated 'top-rated' and 'trending' restaurant lists by city for a dining guide app via
get_top_restaurants. - Display full venue profiles — including about text, need-to-know notes, and images — on a restaurant discovery platform using
get_venue_info. - Power a concierge tool that checks same-day slot availability across multiple venues given a party size and cuisine preference.
- Enrich a dining database with cross-platform IDs (Resy, Google, Foursquare) returned by the
idobject inget_venue_info. - Alert users when a previously unavailable date opens on the restaurant's booking calendar by polling
get_restaurant_availability.
| 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 | 100 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.
Does Resy have an official public developer API?+
What does the `slots` array in `get_restaurant_details` actually contain?+
start and end timestamps, a type field describing the table or seating configuration, a token used to reference the bookable slot, the size (covers), and a payment flag indicating whether a credit card hold or prepayment is required. Slots reflect availability for the specific date and party_size you pass in.How far out does `get_restaurant_availability` return calendar data?+
start_date up to the venue's last_calendar_day, which is the furthest date that venue currently accepts reservations on Resy. If you request an end_date beyond that, the calendar will stop at last_calendar_day. This varies per venue and changes as the booking window advances.