Resy API endpoint
Searches restaurants by free-text term (name, cuisine, or neighborhood) near a latitude/longitude, optionally including live bookable-timeslot availability for a given date and party size.
/resy/searchQuery parameters:
term (optional) — free-text search term. Resy's own search index matches restaurant name, cuisine, and neighborhood against this text, e.g. carbone, italian, greenwich village. Leave empty to browse restaurants near the location instead of text-matching.latitude (required) — search center latitude.longitude (required) — search center longitude.date (optional) — reservation date, YYYY-MM-DD. When set, each result includes live bookable timeslots[] for that day.party_size (optional, default 2) — only used when date is set.size (optional, default 10) — max results.Response includes total (upstream result count), available_cuisines[] (the cuisines present among restaurants near this search location — Resy's own search index has no separate structured cuisine filter, confirmed live: passing a top-level cuisine field is rejected as an unknown field, so use this list to find a cuisine value worth passing back in term), and results[]. Each result has id, name, cuisines[], price_range (1-4 $ tier), rating, review_count, neighborhood, city, region, location_url_slug, location_code (a short city identifier -- pass it as resy-cuisines's or resy-events's location param to discover more about this same city), url_slug, latitude, longitude, phone_number, and timeslots[] when date was set (each with start, end, seating_type, token).
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| id | 10 | |
| name | 10 | “Carbone” and 9 other values |
| cuisines | 10 | median 1 entry |
| price_range | 10 | 2 to 4, median 3 |
| rating | 10 | 4 to 4.75, median 4.49 |
| review_count | 9 | 187 to 34,256, median 2,582 |
| neighborhood | 10 | “Greenwich Village” and 8 other values |
| city | 10 | New York (3), Miami (2), Dallas/Fort Worth (2) and 2 more |
| region | 10 | NY (3), FL (2), TX (2) and 2 more |
| location_url_slug | 10 | |
| location_code | 10 | |
| url_slug | 10 | |
| latitude | 10 | |
| longitude | 10 | |
| phone_number | 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| term | string | No | Free-text search term (name, cuisine, or neighborhood) | carbone | |
| latitude | number | Yes | Search center latitude | 40.7128 | |
| longitude | number | Yes | Search center longitude | -74.006 | |
| date | string | No | Reservation date, YYYY-MM-DD; when set, results include live timeslots | 2026-09-20 | |
| party_size | integer | No | Party size, default 2 | 2 | |
| size | integer | No | Max results, default 10 | 10 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/resy/search?latitude=40.7128&longitude=-74.006" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"term": "carbone",
"total": 1,
"available_cuisines": [
"Italian",
"Steakhouse",
"Kosher"
],
"results": [
{
"id": "6194",
"name": "Carbone",
"cuisines": [
"Italian"
],
"price_range": 4,
"rating": 4.75,
"review_count": 33837,
"neighborhood": "Greenwich Village",
"city": "New York",
"region": "NY",
"location_url_slug": "new-york-ny",
"location_code": "ny",
"url_slug": "carbone",
"latitude": 40.7279891,
"longitude": -74.0002311,
"phone_number": "+12122543000",
"timeslots": [
{
"start": "2026-09-20 19:00:00",
"end": "2026-09-20 20:30:00",
"seating_type": "Dining Room",
"token": "rgs://resy/6194/3533618/2/2026-09-20/2026-09-20/19:00:00/2/Dining Room"
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/resy.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | resy.SearchResponse | No | ||||
| data.available_cuisines | array | No | AvailableCuisines lists the cuisines present among restaurants near this search location (Resy's own search facet) -- use it to discover cuisine values worth passing back in Term, since the upstream search index has no separate structured cuisine filter (confirmed live: a top-level "cuisine" search field is rejected as an unknown field). | |||
| data.results | array | No | ||||
| data.results[].city | string | No | New York | |||
| data.results[].cuisines | array | No | Italian | |||
| data.results[].id | string | No | 6194 | |||
| data.results[].latitude | number | No | ||||
| data.results[].location_code | string | No | ny | LocationCode is Resy's short city code (e.g. "ny") -- pass it as resy-cuisines' or resy-events' location param to discover more about this same city. | ||
| data.results[].location_url_slug | string | No | new-york-ny | |||
| data.results[].longitude | number | No | ||||
| data.results[].name | string | No | Carbone | |||
| data.results[].neighborhood | string | No | Greenwich Village | |||
| data.results[].phone_number | string | No | ||||
| data.results[].price_range | integer | No | 4 | |||
| data.results[].rating | number | No | 4.75 | |||
| data.results[].region | string | No | NY | |||
| data.results[].review_count | integer | No | 33837 | |||
| data.results[].timeslots | array | No | Timeslot record, 6 fields: end, max_party_size, min_party_size, seating_type, start, token. Described under Resy Availability API. | |||
| data.results[].url_slug | string | No | carbone | |||
| data.term | string | No | ||||
| data.total | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/resy/search?latitude=40.7128&longitude=-74.006" \
-H "x-api-key: $CRAWLORA_API_KEY"