# Deliveroo API — live Deliveroo data for the UK, France, Ireland, Italy, Belgium, UAE and Kuwait: every restaurant, supermarket, Deliveroo HOP and shop delivering to a location with delivery fee, minimum order, delivery time, distance, rating and offers; a store's full menu or grocery catalogue with prices, sale prices, unit prices, availability and stock; and dish/product search with prices across the stores nearby. No login, no API key.

> Restaurants, grocery stores and shops that deliver to a location (latitude+longitude, postcode or geohash) in one Deliveroo market, with delivery fee and minimum order for that location, delivery-time estimate, distance, star rating, price band, current offer and store type. Filter by Deliveroo tab (restaurants / grocery / shopping), cuisine, dish, dietary, name, maximum delivery fee or time, minimum rating, offers; sort and page the complete set.
> ReefAPI engine `deliveroo` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/deliveroo/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/deliveroo/v1/stores — 3 credits
Restaurants, grocery stores and shops that deliver to a location (latitude+longitude, postcode or geohash) in one Deliveroo market, with delivery fee and minimum order for that location, delivery-time estimate, distance, star rating, price band, current offer and store type. Filter by Deliveroo tab (restaurants / grocery / shopping), cuisine, dish, dietary, name, maximum delivery fee or time, minimum rating, offers; sort and page the complete set.

**Parameters:**
- `country` (enum, required) — Deliveroo market. Live markets on 2026-10-18: uk, fr, ie, it, be, ae, kw (Qatar, Singapore and Hong Kong answer 'market closed'). Prices and fees are in the market's currency. [one of: uk, fr, ie, it, be, ae, kw]
- `latitude` (number, optional) — Delivery location latitude. Give latitude+longitude, OR postcode, OR geohash (one of the three is required; there is no default location).
- `longitude` (number, optional) — Delivery location longitude (with latitude).
- `postcode` (string, optional) — Delivery postcode, placed by Deliveroo itself in the chosen market (uk 'W1W 5QZ', fr '75004'). Alternative to latitude/longitude.
- `geohash` (string, optional) — Delivery location as a geohash (the `geohash=` value in deliveroo.co.uk URLs). Alternative to latitude/longitude.
- `type` (enum, optional, default "all") — Deliveroo's own tabs. London W1, same minute: all 3,984 · restaurants 3,440 · grocery 364 · shopping 269. A tab the location does not offer is refused. [one of: all, restaurants, grocery, shopping]
- `cuisine` (string, optional) — Deliveroo cuisine key(s) for this location, comma-separated for several (the site's own multi-select), e.g. 'italian', 'japanese'. The valid keys and their counts come from the `filters` action; an unknown key is refused (the site would silently ignore it).
- `dish` (string, optional) — Deliveroo dish key(s), comma-separated, e.g. 'burgers', 'sushi', 'pizza' (London W1: burgers 584 of 3,998). Keys from the `filters` action.
- `dietary` (string, optional) — Deliveroo dietary key(s), comma-separated: e.g. 'vegan', 'vegetarian', 'halal', 'gluten free' (London W1: vegan 39 of 3,999). Keys from `filters`.
- `name` (string, optional) — Keep only stores whose name contains this text (case- and accent-insensitive), e.g. 'tesco', 'carrefour', 'mcdonald'.
- `max_delivery_fee` (number, optional) — Keep stores whose delivery fee to this location is at most this amount, in the market's currency (1 = 1.00 GBP/EUR/AED, 1 KWD).
- `min_rating` (number, optional) — Keep stores rated at least this many stars (0-5, as the site shows them). Unrated stores are dropped when this is set.
- `max_delivery_minutes` (integer, optional) — Keep stores whose current delivery estimate is at most this many minutes.
- `offers_only` (boolean, optional, default false) — Keep only stores showing an offer (e.g. 'Buy 1, get 1 free', 'Spend £15, get 20% off'; London W1: 1,202 of 3,980).
- `sort` (enum, optional, default "distance") — Order of the full result set before paging; ties broken by store id so pages never overlap. 'recommended' is Deliveroo's own order, which changes on every call (0 of the top 100 positions repeated a minute apart), so do not page it. [one of: distance, rating, delivery_time, delivery_fee, name, recommended]
- `page` (integer, optional, default 1) — Page of the sorted result set. For walking all pages prefer `cursor` (pagination.next_cursor), which never repeats a store.
- `limit` (integer, optional, default 50) — Stores per page (1-200, default 50).
- `cursor` (string, optional) — pagination.next_cursor of the previous page (same location, filters and sort). The next page starts right after the last store you received, so no store is repeated. Deliveroo shows one of several stores that share a kitchen on each request (about 16 of 3,965 in London W1), so with page numbers a store can repeat or be skipped at a page edge; the cursor avoids that.

**Returns:** data.stores[]: store_id, drn_id, name, store_type (restaurant | shop), branch_type, url, delivery_fee {amount, currency, display}, minimum_order {amount, currency, display}, delivery_time_minutes, delivery_time_text, eta_range_minutes [from, to], distance_m, latitude, longitude, rating (stars), rating_percentage, rating_count_text ('500+'), price_category ('££'), offer, delivery_status, fulfillment_types[], newly_added, image. data.location {city, neighborhood, country_code, postcode, geohash, latitude, longitude} (where Deliveroo placed the request); data.total (stores after every filter); data.total_at_location (all stores delivering there); data.total_matched_by_deliveroo (after Deliveroo's own type/cuisine/dish/dietary filters); data.pagination {page, limit, total_pages, has_more, next_cursor} (with a cursor: {cursor, limit, has_more, remaining_after_page, next_cursor}); data.filters (what was applied); data.sort; data.notices[].

**Example request body:**
```json
{
  "country": "uk",
  "postcode": "W1W 5QZ",
  "type": "grocery",
  "limit": 20
}
```

### POST https://api.reefapi.com/deliveroo/v1/store — 3 credits
One Deliveroo store's menu or grocery catalogue: store details (address, coordinates, currency, whether it delivers to the given location, next delivery time), every category/aisle with its item count, and the items page by page with price, sale price, discount and offer text, unit price, size, availability, stock count where the store publishes it, calories, dietary tags and image. Filter to one category or to specific item ids.

**Parameters:**
- `store_id` (string, required) — Store/restaurant id (`store_id` of a stores or search row, e.g. 342758), its slug ('waitrose-marylebone'), or its Deliveroo menu URL (https://deliveroo.co.uk/menu/london/marylebone/waitrose-marylebone).
- `country` (enum, optional) — Deliveroo market of the store (uk, fr, ie, it, be, ae, kw). Required unless store_id is a Deliveroo URL, whose host names the market. [one of: uk, fr, ie, it, be, ae, kw]
- `latitude` (number, optional) — Delivery location latitude. Give latitude+longitude, OR postcode, OR geohash (one of the three is required; there is no default location).
- `longitude` (number, optional) — Delivery location longitude (with latitude).
- `postcode` (string, optional) — Delivery postcode, placed by Deliveroo itself in the chosen market (uk 'W1W 5QZ', fr '75004'). Alternative to latitude/longitude.
- `geohash` (string, optional) — Delivery location as a geohash (the `geohash=` value in deliveroo.co.uk URLs). Alternative to latitude/longitude.
- `category_id` (string, optional) — Only the items of this menu/aisle category (`category_id` from the `categories` list of the same store).
- `item_ids` (string, optional) — Only these item ids (comma-separated, up to 250), e.g. the `item_id`s of a `search` result; one request on the source's own by-id option.
- `page` (integer, optional, default 1) — Page of the store's item list, in the store's own category order.
- `limit` (integer, optional, default 100) — Items per page (1-250, default 100).

**Returns:** data.store {store_id, drn_id, menu_id, name, slug, store_type, branch_type, brand_drn_id, address, postcode, neighborhood, city, country_code, latitude, longitude, currency, fulfillment_type, menu_disabled, next_available_delivery_time, url, delivers_to_location}; data.categories[] {category_id, name, description, item_count}; data.items[] {item_id, drn_id, name, description, product_information, category_id, category_name, price {amount, currency, display}, sale_price, member_price {amount, currency, program}, offer_text, available, stock_count, size_text, unit_price_text, calories_text, popular, alcohol, dietary_tags[], max_quantity, image}; data.total_items; data.pagination {page, limit, total_pages, has_more}; data.location (when one was given).

**Example request body:**
```json
{
  "store_id": "342758",
  "country": "uk",
  "limit": 50
}
```

### POST https://api.reefapi.com/deliveroo/v1/search — 3 credits
Search dishes and grocery products by name across the stores delivering to a location, the way Deliveroo's search box does: each match with its price, sale price, offer, unit price, sold-out flag and the store selling it (id, name, type, link). Up to ~50 stores with up to 10 matching items each per query.

**Parameters:**
- `country` (enum, required) — Deliveroo market. Live markets on 2026-10-18: uk, fr, ie, it, be, ae, kw (Qatar, Singapore and Hong Kong answer 'market closed'). Prices and fees are in the market's currency. [one of: uk, fr, ie, it, be, ae, kw]
- `query` (string, required) — Dish or product to look for across the stores delivering to the location, as typed into Deliveroo's search box ('milk', 'pizza', 'lait', 'paracetamol').
- `latitude` (number, optional) — Delivery location latitude. Give latitude+longitude, OR postcode, OR geohash (one of the three is required; there is no default location).
- `longitude` (number, optional) — Delivery location longitude (with latitude).
- `postcode` (string, optional) — Delivery postcode, placed by Deliveroo itself in the chosen market (uk 'W1W 5QZ', fr '75004'). Alternative to latitude/longitude.
- `geohash` (string, optional) — Delivery location as a geohash (the `geohash=` value in deliveroo.co.uk URLs). Alternative to latitude/longitude.
- `type` (enum, optional, default "all") — Search only one Deliveroo tab ('pizza' + grocery: 263 of 264 items from shops). [one of: all, restaurants, grocery, shopping]

**Returns:** data.items[]: item_id, drn_id, name, price {amount, currency, display}, sale_price, member_price, sold_out, availability_text, offer_text, unit_price_text, sponsored, image, url, store_id, store_name, store_type, store_url, rank. data.stores[] {store_id, store_name, store_type, store_url, items}; data.total_items; data.location; data.query.

**Example request body:**
```json
{
  "country": "uk",
  "query": "milk",
  "postcode": "W1W 5QZ"
}
```

### POST https://api.reefapi.com/deliveroo/v1/filters — 2 credits
The filters Deliveroo offers at a location with live store counts: tabs (restaurants, grocery, shopping), cuisines, dishes, dietary options, delivery-time and delivery-fee bands, rating bands. Use the keys with `stores`.

**Parameters:**
- `country` (enum, required) — Deliveroo market. Live markets on 2026-10-18: uk, fr, ie, it, be, ae, kw (Qatar, Singapore and Hong Kong answer 'market closed'). Prices and fees are in the market's currency. [one of: uk, fr, ie, it, be, ae, kw]
- `latitude` (number, optional) — Delivery location latitude. Give latitude+longitude, OR postcode, OR geohash (one of the three is required; there is no default location).
- `longitude` (number, optional) — Delivery location longitude (with latitude).
- `postcode` (string, optional) — Delivery postcode, placed by Deliveroo itself in the chosen market (uk 'W1W 5QZ', fr '75004'). Alternative to latitude/longitude.
- `geohash` (string, optional) — Delivery location as a geohash (the `geohash=` value in deliveroo.co.uk URLs). Alternative to latitude/longitude.

**Returns:** data.types[] {key, label}; data.cuisine[] / data.dish[] / data.dietary[] / data.delivery_time[] / data.delivery_fee[] / data.star_rating[] {key, label, count}; data.total_at_location; data.location.

**Example request body:**
```json
{
  "country": "fr",
  "postcode": "75004"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=deliveroo
- Human docs page: https://reefapi.com/docs/deliveroo
- Overview page: https://reefapi.com/deliveroo-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
