Resy API endpoint
Returns ticketed dining events (fixed-price, fixed-capacity experiences a restaurant hosts and sells tickets for, distinct from a regular reservation) in a Resy location. Read-only discovery -- does not create, hold, or purchase a ticket.
/resy/eventsReturns ticketed dining events in a Resy location — fixed-price, fixed-capacity experiences a restaurant hosts and sells tickets for (e.g. a chef collaboration dinner or a game-day brunch package), distinct from a regular reservation timeslot. Read-only discovery: this endpoint does not create, hold, or purchase a ticket.
Query parameters:
location (required) — same identifier as resy-cuisines's location param: a short city code or numeric id, sourced from a prior resy-search/resy-restaurant response's location_code field.date (optional) — only return events starting on or after this date, YYYY-MM-DD. Defaults to the next UTC calendar day.limit (optional, default 10) — max events returned.offset (optional, default 0) — page past the first limit events.Response includes location, total (the full matching-event count upstream reports, independent of limit), and events[]. Each event has shift_id, name, description, why_we_like_it, date, time, end_time, url_slug, is_presale, general_sale_date, min_party_size/max_party_size, price_min/price_max/currency, restaurant_id/restaurant_name/restaurant_url_slug/neighborhood/city, and images[]. url_slug and restaurant_url_slug, together with this call's own location, are what resy-event-detail needs to fetch this event's full description and ticket packages.
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| shift_id | 10 | |
| name | 10 | “Whisking the Perfect Matcha” and 9 other values |
| description | 10 | median 502 characters |
| why_we_like_it | 8 | median 283 characters |
| date | 10 | 2026-10-14 |
| time | 10 | “10:00:00” and 6 other values |
| end_time | 10 | “10:45:00” and 9 other values |
| url_slug | 10 | |
| general_sale_date | 10 | 2026-08-12 to 2026-10-11 |
| min_party_size | 10 | 1 to 6, median 1 |
| max_party_size | 10 | 4 to 15, median 8 |
| currency | 10 | USD in all 10 |
| restaurant_id | 10 | |
| restaurant_name | 10 | “Matchaful Ritual Bar & Stone Mill” and 8 other values |
| restaurant_url_slug | 10 | |
| neighborhood | 10 | “Williamsburg” and 8 other values |
| city | 10 | New York (6), Brooklyn (4) |
| images | 10 | median 1 entry |
| price_min | 6 | 25 to 345, median 30 |
| price_max | 6 | 25 to 345, median 30 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| location | string | Yes | Resy location code or numeric id (from a prior resy-search/resy-restaurant response's location_code field) | ny | |
| date | string | No | the next calendar day | Only return events starting on or after this date, YYYY-MM-DD; defaults to the next calendar day | 2026-09-21 |
| limit | integer | No | Max events returned, default 10 | 10 | |
| offset | integer | No | Page past the first `limit` events, default 0 | 0 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/resy/events?location=ny&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"location": "ny",
"total": 397,
"events": [
{
"shift_id": 3453602,
"name": "The Bonnie Brunch & Citi Field Trip!",
"date": "2026-09-20",
"time": "09:30:00",
"end_time": "17:00:00",
"min_party_size": 1,
"max_party_size": 8,
"price_min": 85,
"price_max": 85,
"currency": "USD",
"restaurant_id": "6737",
"restaurant_name": "The Bonnie",
"restaurant_url_slug": "the-bonnie",
"neighborhood": "Astoria",
"city": "Queens"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/resy.eventsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | resy.EventsResponse | No | ||||
| data.events | array | No | ||||
| data.events[].city | string | No | ||||
| data.events[].currency | string | No | USD | |||
| data.events[].date | string | No | 2026-09-20 | |||
| data.events[].description | string | No | ||||
| data.events[].end_time | string | No | 17:00:00 | |||
| data.events[].general_sale_date | string | No | ||||
| data.events[].images | array | No | ||||
| data.events[].is_presale | boolean | No | ||||
| data.events[].max_party_size | integer | No | 8 | |||
| data.events[].min_party_size | integer | No | 1 | |||
| data.events[].name | string | No | Breakfast & Citi Field Trip | |||
| data.events[].neighborhood | string | No | ||||
| data.events[].price_max | number | No | 85 | |||
| data.events[].price_min | number | No | 85 | |||
| data.events[].restaurant_id | string | No | ||||
| data.events[].restaurant_name | string | No | ||||
| data.events[].restaurant_url_slug | string | No | RestaurantURLSlug, together with URLSlug and the search/events Location value, is what resy-event-detail needs to fetch this event's full description and ticket packages. | |||
| data.events[].shift_id | integer | No | ||||
| data.events[].time | string | No | 09:30:00 | |||
| data.events[].url_slug | string | No | ||||
| data.events[].why_we_like_it | string | No | ||||
| data.location | 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/events?location=ny&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"