Resy API
Read-only live access to Resy restaurant discovery, venue details, and reservation availability. Search is coordinate-scoped and matches restaurant identity and location fields; no reservation is created or modified.
Endpoint health
Loading verification…
Connect your agent
Connect through MCP so your agent can find this API, read its docs, and call its endpoints.
Add the server from your terminal.
claude mcp add --transport http agent-data https://agent-data.motie.dev/mcpIn Claude Code, run /mcp, select agent-data, then Authenticate. Sign in to your agent-data account in the browser.
Then ask your agent to use the Resy API for your task.
Call it over HTTP
Get an API keySign up free, generate an API key, and set it as AGENT_DATA_API_KEY in your environment. Your first 100 calls each month are free.
curl --request GET --get 'https://api.agent-data.dev/resy-com/v1/restaurants/search' \
--header "Authorization: Bearer $AGENT_DATA_API_KEY" \
--data-urlencode 'query=lysee' \
--data-urlencode 'latitude=40.739' \
--data-urlencode 'longitude=-73.988' \
--data-urlencode 'radius=5'Endpoints
Inputs and response fields for every endpoint in this API.
GETRestaurants search/v1/restaurants/search
Search Resy's live text index, enrich venue identity, and retain only venues within the requested coordinate radius.
Input
queryRequiredQuery · stringRestaurant name or text to match against nearby Resy venues.
Example: lysee
latitudeRequiredQuery · number, min: -90, max: 90Latitude of the search location in decimal degrees.
Example: 40.739
longitudeRequiredQuery · number, min: -180, max: 180Longitude of the search location in decimal degrees.
Example: -73.988
radiusRequiredQuery · number, max: 100Maximum distance from the coordinate location in kilometers.
Example: 5
offsetOptionalQuery · integer, min: 0, max: 10000, default: 0Offset in Resy's native text-matched result order, before coordinate/radius filtering.
Example: 0
limitOptionalQuery · integer, min: 1, max: 20, default: 20Maximum number of source text hits to inspect for this offset window; radius filtering can return fewer items.
Example: 20
Response
dataobjectdata.itemsobject[]data.items[].city?string | nulldata.items[].namestringdata.items[].addressobjectdata.items[].address.region?string | nulldata.items[].address.country?string | nulldata.items[].address.latitude?number | nulldata.items[].address.locality?string | nulldata.items[].address.address_1?string | nulldata.items[].address.address_2?string | nulldata.items[].address.longitude?number | nulldata.items[].address.postal_code?string | nulldata.items[].address.neighborhood?string | nulldata.items[].cuisine?string | nulldata.items[].timezone?string | nulldata.items[].venue_idintegerdata.items[].neighborhood?string | nulldata.items[].canonical_urlstring (uri)data.limitintegerdata.offsetintegerdata.source_total?integer | nullrequest_idstringFields marked ? are optional.
GETRestaurants by url/v1/restaurants/by-url
Retrieve live venue details by a canonical Resy URL.
Input
urlRequiredQuery · stringCanonical Resy venue URL.
Example: https://resy.com/cities/new-york-ny/venues/lysee
Response
dataobjectdata.city?string | nulldata.namestringdata.addressobjectdata.address.region?string | nulldata.address.country?string | nulldata.address.latitude?number | nulldata.address.locality?string | nulldata.address.address_1?string | nulldata.address.address_2?string | nulldata.address.longitude?number | nulldata.address.postal_code?string | nulldata.address.neighborhood?string | nulldata.cuisine?string | nulldata.timezone?string | nulldata.venue_idintegerdata.neighborhood?string | nulldata.canonical_urlstring (uri)request_idstringFields marked ? are optional.
GETRestaurants by venue id availability/v1/restaurants/{venue_id}/availability
Return live availability slots only; this read never books or modifies a reservation.
Input
venue_idRequiredPath · integer, min: 1Stable Resy venue ID.
Example: 64549
dateRequiredQuery · stringReservation date in the venue's local calendar, YYYY-MM-DD.
Example: 2026-09-25
party_sizeRequiredQuery · integer, min: 1, max: 20Number of guests.
Example: 2
timeOptionalQuery · string | nullOptional local-time lower filter in HH:MM format.
Example: 19:00
Response
dataobjectdata.datestringdata.slotsobject[]data.slots[].slot_idstringdata.slots[].end_time?string | nulldata.slots[].timezone?string | nulldata.slots[].start_timestringdata.slots[].booking_linkstring (uri)data.slots[].seating_typestringdata.slots[].source_tokenstringdata.party_sizeintegerdata.restaurantobjectdata.restaurant.city?string | nulldata.restaurant.namestringdata.restaurant.addressobjectdata.restaurant.address.region?string | nulldata.restaurant.address.country?string | nulldata.restaurant.address.latitude?number | nulldata.restaurant.address.locality?string | nulldata.restaurant.address.address_1?string | nulldata.restaurant.address.address_2?string | nulldata.restaurant.address.longitude?number | nulldata.restaurant.address.postal_code?string | nulldata.restaurant.address.neighborhood?string | nulldata.restaurant.cuisine?string | nulldata.restaurant.timezone?string | nulldata.restaurant.venue_idintegerdata.restaurant.neighborhood?string | nulldata.restaurant.canonical_urlstring (uri)data.time_filter?string | nullrequest_idstringFields marked ? are optional.
GETRestaurants by venue id/v1/restaurants/{venue_id}
Retrieve live venue details by stable Resy venue ID.
Input
venue_idRequiredPath · integer, min: 1Stable Resy venue ID.
Example: 64549
Response
dataobjectdata.city?string | nulldata.namestringdata.addressobjectdata.address.region?string | nulldata.address.country?string | nulldata.address.latitude?number | nulldata.address.locality?string | nulldata.address.address_1?string | nulldata.address.address_2?string | nulldata.address.longitude?number | nulldata.address.postal_code?string | nulldata.address.neighborhood?string | nulldata.cuisine?string | nulldata.timezone?string | nulldata.venue_idintegerdata.neighborhood?string | nulldata.canonical_urlstring (uri)request_idstringFields marked ? are optional.
Don’t see the endpoint you need?
Ask agent-data to add an endpoint or return more fields. Extensions are free and keep existing endpoints working.
An account is required to submit an extension. Prepare your request, then sign in to build.