Grubhub API endpoint
Returns current ordering state for up to 20 restaurants in one call, relative to a diner location. Each entry reports whether the restaurant is open overall and per channel (these can differ), whether delivery and pickup are offered at all as distinct from open right now, whether it delivers to the supplied coordinate, blackout and overloaded flags, distance, delivery and pickup time estimates, delivery fee, order minimum, cuisines, and the next time an order can be sent per channel -- useful when a restaurant is currently closed. The response echoes the requested ids so a caller can tell which ones Grubhub returned nothing for.
/grubhub/availabilityReturns current ordering state for up to 20 Grubhub restaurants in a single call, evaluated against a diner location. This is the batch complement to /api/v1/grubhub/restaurant: rather than one restaurant's static detail, it answers "can I order from these right now, from here?" for a whole result set — the same lookup Grubhub's own listings use to grey out closed stores.
Openness is reported three ways because they genuinely differ: open is the restaurant's overall state, while open_delivery and open_pickup are per channel — a restaurant can be open for pickup and closed for delivery. Separately, available_for_delivery / available_for_pickup say whether the channel is offered at all, which is not the same as it being open right now.
delivers_to_location is the answer to whether this restaurant delivers to the coordinate you supplied, so a restaurant can be open_delivery: true and still not reachable from your address.
When a channel is closed, next_delivery_time / next_pickup_time give the next time an order can be sent, which is usually more useful than the closed flag alone.
requested[] echoes the id list as asked for, so a caller can tell which ids Grubhub returned nothing for. If Grubhub returns nothing for every requested id the endpoint fails as an upstream error rather than serving an empty batch as a success.
Query parameters:
restaurant_ids (required) — comma-separated numeric Grubhub restaurant ids, up to 20, e.g. 6238960,14344720. Duplicates are collapsed.latitude (required) — diner location latitude, e.g. 40.7128. Availability is relative to it.longitude (required) — diner location longitude, e.g. -74.0060.Response includes restaurants[], count, requested[], source_url, and fetched_at. Each restaurant has restaurant_id, open, open_delivery, open_pickup, available_for_delivery, available_for_pickup, delivers_to_location, blacked_out, inundated, distance_miles, delivery_estimate_minutes, pickup_estimate_minutes, delivery_fee, order_minimum, cuisines[], next_delivery_time, next_pickup_time, and logo_url.
| Field | Filled in, of 2 checked | Values in the sample |
|---|---|---|
| restaurant_id | 2 | |
| open | 2 | true in 2 of 2 |
| open_delivery | 2 | true in 2 of 2 |
| open_pickup | 2 | true in 2 of 2 |
| available_for_delivery | 2 | true in 2 of 2 |
| available_for_pickup | 2 | true in 2 of 2 |
| delivers_to_location | 2 | true in 2 of 2 |
| blacked_out | 2 | true in 0 of 2 |
| inundated | 2 | true in 0 of 2 |
| distance_miles | 2 | 0.23 to 0.39, median 0.23 |
| delivery_estimate_minutes | 2 | 20 |
| pickup_estimate_minutes | 2 | 10 to 15, median 10 |
| delivery_fee | 2 | |
| order_minimum | 2 | |
| cuisines | 2 | median 2 entries |
| next_delivery_time | 2 | 2026-10-13 |
| next_pickup_time | 2 | 2026-10-13 |
| logo_url | 2 | media-cdn.grubhub.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| restaurant_ids | string | Yes | Comma-separated Grubhub restaurant ids, up to 20 | 6238960,14344720 | |
| latitude | number | Yes | Diner location latitude -- availability is relative to it | 40.7128 | |
| longitude | number | Yes | Diner location longitude | -74.006 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/grubhub/availability?restaurant_ids=6238960%2C14344720&latitude=40.7128&longitude=-74.006" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"restaurants": [
{
"restaurant_id": "6238960",
"open": false,
"open_delivery": false,
"open_pickup": false,
"available_for_delivery": true,
"available_for_pickup": true,
"delivers_to_location": true,
"blacked_out": false,
"inundated": false,
"distance_miles": 0.23,
"delivery_estimate_minutes": 25,
"pickup_estimate_minutes": 10,
"delivery_fee": {
"amount": 299,
"value": 2.99,
"currency": "USD"
},
"order_minimum": {
"amount": 1000,
"value": 10,
"currency": "USD"
},
"cuisines": [
"American",
"Sandwiches"
],
"next_delivery_time": "2026-08-31T15:00:00Z",
"next_pickup_time": "2026-08-31T14:45:00Z",
"logo_url": "https://media-cdn.grubhub.com/image/upload/logo.png"
}
],
"count": 1,
"requested": [
"6238960"
],
"source_url": "https://api-gtm.grubhub.com/restaurants/availability_summaries?location=POINT%28-74.006%2040.7128%29&includeImages=true&ids=6238960",
"fetched_at": "2026-08-31T09:12:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/grubhub.availabilityResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | grubhub.AvailabilityResponse | No | ||||
| data.count | integer | No | 2 | |||
| data.fetched_at | string | No | ||||
| data.requested | array | No | Requested is the id list as asked for, so a caller can tell which ids Grubhub returned nothing for. | |||
| data.restaurants | array | No | ||||
| data.restaurants[].available_for_delivery | boolean | No | true | AvailableFor* is whether the channel is offered at all, as distinct from whether it is open right now. | ||
| data.restaurants[].available_for_pickup | boolean | No | true | |||
| data.restaurants[].blacked_out | boolean | No | false | |||
| data.restaurants[].cuisines | array | No | ||||
| data.restaurants[].delivers_to_location | boolean | No | true | DeliversToLocation is whether this restaurant delivers to the coordinate supplied in the request. | ||
| data.restaurants[].delivery_estimate_minutes | integer | No | 25 | |||
| data.restaurants[].delivery_fee | grubhub.Money | No | ||||
| data.restaurants[].delivery_fee.amount | integer | No | 399 | |||
| data.restaurants[].delivery_fee.currency | string | No | USD | |||
| data.restaurants[].delivery_fee.value | number | No | 3.99 | |||
| data.restaurants[].distance_miles | number | No | 0.23 | |||
| data.restaurants[].inundated | boolean | No | false | Inundated marks a restaurant Grubhub flags as overloaded. | ||
| data.restaurants[].logo_url | string | No | ||||
| data.restaurants[].next_delivery_time | string | No | NextDeliveryTime is when Grubhub says the next delivery order can be sent, useful when open_delivery is false. | |||
| data.restaurants[].next_pickup_time | string | No | ||||
| data.restaurants[].open | boolean | No | false | Open is the restaurant's overall state; the two channel flags below can differ from it and from each other. | ||
| data.restaurants[].open_delivery | boolean | No | false | |||
| data.restaurants[].open_pickup | boolean | No | false | |||
| data.restaurants[].order_minimum | grubhub.Money | No | ||||
| data.restaurants[].order_minimum.amount | integer | No | 399 | |||
| data.restaurants[].order_minimum.currency | string | No | USD | |||
| data.restaurants[].order_minimum.value | number | No | 3.99 | |||
| data.restaurants[].pickup_estimate_minutes | integer | No | 10 | |||
| data.restaurants[].restaurant_id | string | No | 6238960 | |||
| data.source_url | string | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/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/grubhub/availability?restaurant_ids=6238960%2C14344720&latitude=40.7128&longitude=-74.006" \
-H "x-api-key: $CRAWLORA_API_KEY"