POST /api/grubhub/restaurants
Price: 10 credits
Get full Grubhub (grubhub.com) restaurant details by numeric id (or restaurant page URL): name, address, location, phone, cuisines, rating, price tier, delivery and pickup fees and time estimates, service fee, sales tax, opening hours and the complete menu with categories, items, prices and price ranges.
Fetch a single Grubhub (grubhub.com) restaurant by its numeric id (e.g. '4255520') or a full restaurant page URL. Returns id, url, name, alias, brand_name, chain_name, image, cuisines, has_coupons, address (street/city/region/postal_code/country), latitude, longitude, phone, rating, rating_count, price_rating (1-4 dollar tier), premium, is_new, online_ordering_available, pickup_offered, open, available_for_delivery, available_for_pickup, delivery_fee, delivery_minimum, min_delivery_fee, service_fee_percent, service_fee_max, sales_tax, delivery_estimate (+min/max minutes), pickup_estimate (+min/max), time_zone, hours (per day_of_week) and the full menu as categories, each with items (name, description, price, price_min, price_max, popular, available).
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)restaurant string required — Grubhub restaurant numeric id or a full restaurant page URL (examples: "4255520", "https://www.grubhub.com/restaurant/sunset-bagels/4255520"; minLength: 1)@type string (default: "GrubhubRestaurant")id string requiredurl string requiredname string nullablealias string nullablebrand_name string nullablechain_name string nullableimage string nullablecuisines array (default: [])has_coupons boolean (default: false)address object nullable@type string (default: "GrubhubAddress")street string nullablecity string nullableregion string nullablepostal_code string nullablecountry string nullablelatitude number nullablelongitude number nullablephone string nullablerating number nullablerating_count integer nullableprice_rating integer nullablepremium boolean (default: false)is_new boolean (default: false)online_ordering_available boolean (default: false)pickup_offered boolean (default: false)open boolean (default: false)available_for_delivery boolean (default: false)available_for_pickup boolean (default: false)delivery_fee number nullabledelivery_minimum number nullablemin_delivery_fee number nullableservice_fee_percent number nullableservice_fee_max number nullablesales_tax number nullabledelivery_estimate integer nullabledelivery_estimate_min integer nullabledelivery_estimate_max integer nullablepickup_estimate integer nullablepickup_estimate_min integer nullablepickup_estimate_max integer nullabletime_zone string nullablemerchant_uuid string nullablehours array (default: [])@type string (default: "GrubhubRestaurantHours")day_of_week integer requiredtime_ranges array (default: [])category_count integer (default: 0)item_count integer (default: 0)categories array (default: [])@type string (default: "GrubhubMenuCategory")id string requiredname string requireddescription string nullableavailable boolean (default: true)items array (default: [])@type string (default: "GrubhubMenuItem")id string requiredname string requireddescription string nullableprice number nullableprice_min number nullableprice_max number nullablepopular boolean (default: false)available boolean (default: true)category_id string nullablecategory_name string nullable422 — The request body did not validate Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — Restaurant not found (valid id format but no such restaurant on Grubhub) Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.