Resy API endpoint
Returns the bookable reservation timeslots Resy currently shows for a restaurant, date, and party size -- the same read-only availability an anonymous visitor sees before signing in. The date is optional and defaults to the current date in UTC; the response echoes the date used. This is discovery only; it does not create, hold, modify, or cancel a reservation.
/resy/availabilityQuery parameters:
restaurant_id (required) — Resy restaurant id (from a search result's id, or restaurant detail's id).date (optional) — reservation date, YYYY-MM-DD. Defaults to the current date in UTC; the response's date field shows which day was used. A value in any other format returns an invalid-parameter error.party_size (optional, default 2).Response includes restaurant_id, date, party_size, and timeslots[], each with start/end (local time, YYYY-MM-DD HH:MM:SS), seating_type (e.g. Dining Room, Bar, Patio), min_party_size/max_party_size for that slot, and token — Resy's own opaque reservation-config identifier for the slot. token is only meaningful back to Resy's own booking flow; it is surfaced here as read-only discovery data and this endpoint does not use it to book, hold, or otherwise act on a reservation. An empty timeslots[] means the restaurant has no availability for that date and party size, not an error.
| Field | In the sample | Value in the sample |
|---|---|---|
| restaurant_id | Has a value | |
| date | Has a value | 2026-10-13 |
| party_size | Has a value | 2 |
| timeslots | Empty |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| restaurant_id | string | Yes | Resy restaurant id | 6194 | |
| date | string | No | the current date in UTC | Reservation date, YYYY-MM-DD. Defaults to the current date in UTC | 2026-09-20 |
| party_size | integer | No | Party size, default 2 | 2 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/resy/availability?restaurant_id=6194" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"restaurant_id": "87134",
"date": "2026-09-20",
"party_size": 2,
"timeslots": [
{
"start": "2026-09-20 16:00:00",
"end": "2026-09-20 17:30:00",
"seating_type": "Dining Room",
"min_party_size": 1,
"max_party_size": 2,
"token": "rgs://resy/87134/3533618/2/2026-09-20/2026-09-20/16:00:00/2/Dining Room"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/resy.availabilityResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | resy.AvailabilityResponse | No | ||||
| data.date | string | No | ||||
| data.party_size | integer | No | ||||
| data.restaurant_id | string | No | ||||
| data.timeslots | array | No | ||||
| data.timeslots[].end | string | No | 2026-09-20 20:30:00 | |||
| data.timeslots[].max_party_size | integer | No | 4 | |||
| data.timeslots[].min_party_size | integer | No | 1 | |||
| data.timeslots[].seating_type | string | No | Dining Room | |||
| data.timeslots[].start | string | No | 2026-09-20 19:00:00 | Start/End are Resy's own local "YYYY-MM-DD HH:MM:SS" strings (not RFC3339 -- kept as upstream returns them since seating-area shifts don't carry a UTC offset in the response). | ||
| data.timeslots[].token | string | No | Token is Resy's opaque reservation-config identifier for this slot (an "rgs://..." string). It is only meaningful back to Resy's own booking flow -- this service does not implement booking, only discovery. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/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/availability?restaurant_id=6194" \
-H "x-api-key: $CRAWLORA_API_KEY"