Deliveroo API endpoint
Returns the restaurants (or, with collection set, grocery/shopping stores) Deliveroo's own catalog serves for a latitude/longitude in the given market -- the location's entire feed, not a curated subset (confirmed live: up to 2,700+ results for a single coordinate). Each result carries its uname (the value the restaurant and menu endpoints take), name, image, branch_type, and, when available, rating, delivery time, and distance. Optional collection, cuisine, dietary, dish, min_rating, max_delivery_minutes, max_delivery_fee_pounds, has_offer, deliveroos_choice, and sort parameters narrow and order the same feed -- call /deliveroo/search/filters for the current, complete, location-scoped list of every valid cuisine/dietary/dish value with live result counts. A location with no coverage returns an empty list rather than an error.
/deliveroo/searchReturns the restaurants (or, with collection set, grocery/shopping stores) Deliveroo's own home feed serves for a latitude/longitude in the given national market, optionally narrowed and ordered by cuisine, dietary requirement, dish, minimum rating, maximum delivery time/fee, offers, and sort order. Call /deliveroo/search/filters for the current, complete, location-scoped list of every valid cuisine/dietary/dish value with live result counts.
Returns the location's entire feed, not a curated subset -- every restaurant/store Deliveroo's own catalog serves for the coordinate (up to 2,700+ for a single London or Paris coordinate). A small number of locations may fall back to a shorter, curated list if the full source is briefly unavailable; this is automatic and does not change the response shape.
Query parameters:
latitude (required) — search center latitude, e.g. 51.4975.longitude (required) — search center longitude, e.g. -0.1357.market (optional, default uk) — Deliveroo national market to search. One of uk, ie, fr, it, be, ae, kw. Every market shares the exact same response shape and filter/sort catalog; only the currency and the actual restaurants returned differ.limit (optional, default 20, max 100) — results to return.collection (optional) — selects the Deliveroo partner vertical, passed straight through to the upstream. Omit for restaurants and takeaways (the default). grocery returns supermarkets and convenience stores (Sainsbury's, Waitrose, Co-op, Iceland, Whole Foods Market, ...). shopping returns non-food retail (Boots, B&Q, Screwfix, Ryman, The Perfume Shop, ...). Both are confirmed live; other values may exist upstream and are not rejected. Every result -- restaurant, grocery, or shopping -- uses the exact same uname contract for /deliveroo/restaurant and /deliveroo/restaurant/menu; the restaurant response's branch_type tells them apart (RESTAURANT vs ON_DEMAND_CONVENIENCE).cuisine (optional, repeatable) — a Deliveroo cuisine tag, passed straight through to the upstream, e.g. cuisine=american&cuisine=asian. Deliveroo's own filter UI lists at least American, Asian, Asian Fusion, Breakfast, British, Brunch, Café, Chinese, Drinks, Groceries, Healthy, Indian, Italian, Japanese, Shopping (lowercased for the query value, e.g. american) — this is a representative sample of a longer, evolving list, not an exhaustive enum. An unrecognized value is silently ignored by the upstream rather than rejected.dietary (optional, repeatable) — a Deliveroo dietary tag, passed straight through to the upstream, e.g. dietary=vegan. Confirmed live values: gluten free, halal, kosher, organic, paleo, vegan, vegan friendly, vegetarian. An unrecognized value is silently ignored by the upstream rather than rejected.dish (optional, repeatable) — a Deliveroo dish-level tag, passed straight through to the upstream, e.g. dish=pizza&dish=sushi. Call /deliveroo/search/filters for the current, complete, location-scoped list (140+ values, e.g. pizza, sushi, burgers, ramen, bubble tea) -- not an exhaustive enum here. An unrecognized value is silently ignored by the upstream rather than rejected.top_rated (optional, boolean) — when true, only returns results Deliveroo itself marks top-rated (its own 4.5+ threshold). Equivalent to min_rating=4.5; ignored if min_rating is also set.min_rating (optional) — minimum star rating filter. One of 3.5, 4, 4.5 — the only tiers the upstream itself offers; any other value is rejected with 400.max_delivery_minutes (optional) — maximum estimated delivery time in minutes. One of 20, 30, 45 — the only tiers the upstream itself offers; any other value is rejected with 400.max_delivery_fee_pounds (optional) — maximum delivery fee in GBP. One of 1, 2, 3 — the only tiers the upstream itself offers; any other value is rejected with 400.has_offer (optional, boolean) — when true, only returns results currently running an offer/promotion.sort (optional) — result ordering. One of recommended (the upstream's own default), distance, time (quickest delivery), rating (top-rated first); any other value is rejected with 400.deliveroos_choice (optional, boolean) — when true, only returns results in Deliveroo's own "Deliveroo's Choice" curated collection. Confirmed live to combine with collection (e.g. collection=grocery&deliveroos_choice=true narrows to Deliveroo's Choice picks within the grocery vertical) rather than conflict with it, despite both sharing the same underlying upstream query key.Response includes restaurants[]. Each result has restaurant_id, name, uname (the value /deliveroo/restaurant and /deliveroo/restaurant/menu take), image_url, branch_type (RESTAURANT or ON_DEMAND_CONVENIENCE -- lets a caller tell restaurants apart from grocery/shopping results without a follow-up /deliveroo/restaurant call), and, when the upstream card includes it, rating, delivery_time_minutes, and distance_miles.
Example response with collection=shopping:
{"code":200,"msg":"OK","data":{"restaurants":[{"restaurant_id":"349456","name":"Boots","uname":"boots-piccadilly","image_url":"https://rs-menus-api.roocdn.com/images/601b9e6f-62b3-40e5-9f95-6a4bcce2f864/image.jpeg","branch_type":"ON_DEMAND_CONVENIENCE"}]}}
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| restaurant_id | 20 | |
| name | 20 | “Ermine Cafe كافيه ايرماين” and 19 other values |
| uname | 20 | “ermine-cafe” and 19 other values |
| image_url | 20 | rs-menus-api.roocdn.com |
| delivery_time_minutes | 17 | 15 to 35, median 20 |
| distance_miles | 20 | 0.08 to 7.36, median 0.79 |
| branch_type | 20 | ON_DEMAND_CONVENIENCE (11), RESTAURANT (9) |
| rating | 10 | 4.2 to 4.7, median 4.5 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| latitude | number | Yes | Search center latitude | 51.4975 | |
| longitude | number | Yes | Search center longitude | -0.1357 | |
| market | string | No | Deliveroo national market to search (default uk) Allowed values: uk, ie, fr, it, be, ae, kw. | uk | |
| limit | integer | No | Restaurants to return, clamped to 100 (default 20) | 20 | |
| collection | string | No | Optional, passed straight through to the upstream. Selects the Deliveroo partner vertical: omit for restaurants/takeaways (default), grocery for supermarkets and convenience stores, shopping for non-food retail -- both confirmed live; other values may exist and are not rejected. Every result uses the same uname contract for /deliveroo/restaurant and /deliveroo/restaurant/menu. | grocery | |
| cuisine | array<string> | No | Optional, repeatable Deliveroo cuisine filter, e.g. cuisine=american&cuisine=asian. Passed straight through to the upstream; call /deliveroo/search/filters for the current, complete, location-scoped list of valid values. An unrecognized value is silently ignored by the upstream, not rejected. Repeat this query parameter for multiple values. | american | |
| dietary | array<string> | No | Optional, repeatable Deliveroo dietary filter passed straight through to the upstream, e.g. dietary=vegan. Call /deliveroo/search/filters for the current, complete list of valid values. An unrecognized value is silently ignored by the upstream, not rejected. Repeat this query parameter for multiple values. | vegan | |
| dish | array<string> | No | Optional, repeatable Deliveroo dish-level filter passed straight through to the upstream, e.g. dish=pizza&dish=sushi. Call /deliveroo/search/filters for the current, complete, location-scoped list of valid values. An unrecognized value is silently ignored by the upstream, not rejected. Repeat this query parameter for multiple values. | pizza | |
| top_rated | boolean | No | When true, only returns results Deliveroo itself marks top-rated (its own 4.5+ threshold). Equivalent to min_rating=4.5; ignored if min_rating is also set. | true | |
| min_rating | number | No | Minimum star rating filter Allowed values: 3.5, 4, 4.5. | 4 | |
| max_delivery_minutes | integer | No | Maximum estimated delivery time in minutes Allowed values: 20, 30, 45. | 30 | |
| max_delivery_fee_pounds | integer | No | Maximum delivery fee in GBP Allowed values: 1, 2, 3. | 2 | |
| has_offer | boolean | No | When true, only returns results currently running an offer/promotion | true | |
| sort | string | No | Result ordering Allowed values: recommended, distance, time, rating. | distance | |
| deliveroos_choice | boolean | No | When true, only returns results in Deliveroo's own Deliveroo's Choice curated collection. Combines with collection (e.g. collection=grocery&deliveroos_choice=true narrows to Deliveroo's Choice within the grocery vertical) rather than conflicting with it. | true | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/deliveroo/search?latitude=51.4975&longitude=-0.1357&market=uk&limit=10&top_rated=true&min_rating=3.5&max_delivery_minutes=20&max_delivery_fee_pounds=1&has_offer=true&sort=recommended&deliveroos_choice=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"restaurants": [
{
"restaurant_id": "489952",
"name": "Five Guys - Burgers, Fries & Shakes",
"uname": "five-guys-victoria",
"image_url": "https://rs-menus-api.roocdn.com/images/386c4679-3a15-49ec-ad59-59182b2a11fa/image.jpeg",
"rating": 4.8,
"delivery_time_minutes": 15,
"distance_miles": 0.2,
"branch_type": "RESTAURANT"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/deliveroo.searchResponseDoc
| 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 | deliveroo.SearchResponse | No | ||||
| data.restaurants | array | No | ||||
| data.restaurants[].branch_type | string | No | ||||
| data.restaurants[].delivery_time_minutes | integer | No | ||||
| data.restaurants[].distance_miles | number | No | ||||
| data.restaurants[].image_url | string | No | ||||
| data.restaurants[].name | string | No | ||||
| data.restaurants[].rating | number | No | ||||
| data.restaurants[].restaurant_id | string | No | ||||
| data.restaurants[].uname | 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 |
| 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/deliveroo/search?latitude=51.4975&longitude=-0.1357&market=uk&limit=10&top_rated=true&min_rating=3.5&max_delivery_minutes=20&max_delivery_fee_pounds=1&has_offer=true&sort=recommended&deliveroos_choice=true" \
-H "x-api-key: $CRAWLORA_API_KEY"