# Glovo API — supermarkets, Glovo Express dark stores, restaurants, pharmacies and shops that deliver to a location (delivery fee, time, distance, rating, open now); each store's catalogue or menu with price, promotion, original price, stock limit and barcode; in-store search and Glovo search. ~20 countries, no account, no key.

> Stores Glovo lists for a delivery point in one category — supermarkets & groceries (Glovo Express / El Súper de Glovo dark stores included), restaurants, pharmacy & beauty, shops — with delivery fee, delivery time, distance, rating, open status and promotions. Location (lat+lon) is required and echoed. Narrow with the location's own filter (cuisine or shop type, e.g. Supermarket, Pizza, Sushi), sort the way glovoapp.com sorts, page with `cursor`.
> ReefAPI engine `glovo` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/glovo/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/glovo/v1/stores — 3 credits
Stores Glovo lists for a delivery point in one category — supermarkets & groceries (Glovo Express / El Súper de Glovo dark stores included), restaurants, pharmacy & beauty, shops — with delivery fee, delivery time, distance, rating, open status and promotions. Location (lat+lon) is required and echoed. Narrow with the location's own filter (cuisine or shop type, e.g. Supermarket, Pizza, Sushi), sort the way glovoapp.com sorts, page with `cursor`.

**Parameters:**
- `lat` (number, optional) — Delivery point latitude (with `lon`). Which stores deliver, the delivery fee, time and distance all depend on this point; it is echoed in `location`.
- `lon` (number, optional) — Delivery point longitude (with `lat`).
- `category` (enum, optional, default "groceries") — Which store list. Also accepts a Glovo category id from the `categories` action (some cities have extra lists). [one of: groceries, restaurants, pharmacy, shops]
- `filter` (string, optional) — One value of the location's own filter list (`available_filters` in the response): a title such as Supermarket, Bakery, Pizza, Sushi, or its id. An unknown value is rejected with the list.
- `sort` (enum, optional, default "recommended") — Glovo's own store-list sort. [one of: recommended, distance, rating]
- `limit` (integer, optional, default 24) — Stores per page (1-50; Glovo's own maximum is 50).
- `cursor` (string, optional) — `meta.next_cursor` of the previous call, as is, with the same lat/lon/category/filter/sort.
- `language` (string, optional, default "en") — Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.

**Returns:** location{lat, lon, city_code, country, address, served}, category{category_id, title}, stores[]: store_id, store_address_id, city_code, slug, name, tag, category_id, is_glovo_dark_store, open_now, availability_status, rating_score (percent), rating_text, rating_count_text, delivery_fee_listed, delivery_fee_listed_text, delivery_fee_effective_text, delivery_fee_is_free, delivery_fee_is_discounted, delivery_fee_is_prime, surge_active, currency, delivery_estimate_min/max/text, distance_m, distance_text, promotions[], sponsored, is_new, is_top_rated, in_store_prices, image, logo. available_filters[]{id, title}; meta: total, has_more, next_cursor.

**Example request body:**
```json
{
  "lat": 40.4168,
  "lon": -3.7038,
  "category": "groceries"
}
```

### POST https://api.reefapi.com/glovo/v1/categories — 2 credits
Glovo's categories at a delivery point — the store lists `stores` accepts (groceries, food, pharmacy & beauty, shops, city-specific lists) and single-store entries such as Glovo Express or El Súper de Glovo with their store id — plus the city, country and currency.

**Parameters:**
- `lat` (number, optional) — Delivery point latitude (with `lon`). Which stores deliver, the delivery fee, time and distance all depend on this point; it is echoed in `location`.
- `lon` (number, optional) — Delivery point longitude (with `lat`).
- `language` (string, optional, default "en") — Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.

**Returns:** location{lat, lon, city_code, country, address, served, city_name, currency}, categories[]: category_id, title, group, single_store, store_id, store_slug, open

**Example request body:**
```json
{
  "lat": 40.4168,
  "lon": -3.7038
}
```

### POST https://api.reefapi.com/glovo/v1/store — 2 credits
One store's record for a delivery point: name, address, phone, rating and rating count, delivery fee, service fee rule, distance, open status, promotions, store type, the address id that serves the point, the store's suggested search keywords.

**Parameters:**
- `store_id` (string, required) — Glovo store id — a `stores`/`search` row's `store_id`, as is — or the store slug from a glovoapp.com store URL (superglovo-mad).
- `lat` (number, optional) — Delivery point latitude (with `lon`). Which stores deliver, the delivery fee, time and distance all depend on this point; it is echoed in `location`.
- `lon` (number, optional) — Delivery point longitude (with `lat`).
- `language` (string, optional, default "en") — Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.

**Returns:** store{store_id, store_address_id, slug, name, category, category_id, city_code, address, phone, open_now, availability_status, rating_text, rating_score, rating_count, delivery_fee, service_fee{min_basket, max_basket, fee}, distance_text, distance_m, promotions[], tags[], business_unit, sub_business_unit, vertical, is_glovo_dark_store, cash_supported, prime_available, suggestion_keywords[], image}

**Example request body:**
```json
{
  "store_id": "21033",
  "lat": 40.4168,
  "lon": -3.7038
}
```

### POST https://api.reefapi.com/glovo/v1/catalog — 3 credits
A store's catalogue or menu. Restaurants: the whole menu with prices, promotions and option groups in one call. Supermarkets and Glovo Express: without `category` the category tree; with `category` that category's products (every section) — price, promotion price, original price, discount, Prime price, stock limit, barcode (GTIN) where Glovo publishes it, availability.

**Parameters:**
- `store_id` (string, required) — Glovo store id — a `stores`/`search` row's `store_id`, as is — or the store slug from a glovoapp.com store URL (superglovo-mad).
- `store_address_id` (string, optional) — The store ADDRESS that serves you — a `stores`/`search` row's `store_address_id`, as is. A brand has several addresses and the catalogue belongs to the address. Without it pass `lat`+`lon` and the engine asks Glovo which address delivers there.
- `city_code` (string, optional) — Glovo city code of the store — a `stores`/`search` row's `city_code`, as is. Needed with `store_address_id` when `lat`/`lon` are not given.
- `lat` (number, optional) — Delivery point latitude — needed when `store_address_id` is not given.
- `lon` (number, optional) — Delivery point longitude (with `lat`).
- `category` (string, optional) — A `category` value from this action's `categories` tree, as is: a collection (…-c.<id>) returns all its products section by section, a section (…-s.<id>) only that section, a super-category (…-sc.<id>) its collections.
- `language` (string, optional, default "en") — Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.

**Returns:** store{store_id, store_address_id, layout (menu|grid)}, categories[]{category, name, subcategories[]} (grid stores without `category`), items[]: item_id (string), external_id, store_product_id, name, description, price (what you pay), original_price, discount_pct, member_price{amount, currency, program}, currency, price_text, available, quantity_limit, quantity_limit_reason (STOCK_AMOUNT = units left), gtin, sold_by_weight, sale_type, dietary[], age_restricted, sponsored, promotions[]{type, title, percentage, price, prime_only}, labels[], section, image, options[]{name, min_choices, max_choices, values[]{name, price, selected_by_default}}; meta: sections_loaded, sections_not_loaded[]

**Example request body:**
```json
{
  "store_id": "21033",
  "lat": 40.4168,
  "lon": -3.7038
}
```

### POST https://api.reefapi.com/glovo/v1/store_search — 2 credits
Search inside one store (the search box on a Glovo store page): every matching product with price and Glovo's own total count.

**Parameters:**
- `store_id` (string, required) — Glovo store id — a `stores`/`search` row's `store_id`, as is — or the store slug from a glovoapp.com store URL (superglovo-mad).
- `query` (string, required) — Search words, as typed on glovoapp.com.
- `store_address_id` (string, optional) — The store ADDRESS that serves you — a `stores`/`search` row's `store_address_id`, as is. A brand has several addresses and the catalogue belongs to the address. Without it pass `lat`+`lon` and the engine asks Glovo which address delivers there.
- `city_code` (string, optional) — Glovo city code of the store — a `stores`/`search` row's `city_code`, as is. Needed with `store_address_id` when `lat`/`lon` are not given.
- `lat` (number, optional) — Delivery point latitude — needed when `store_address_id` is not given.
- `lon` (number, optional) — Delivery point longitude (with `lat`).
- `language` (string, optional, default "en") — Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.

**Returns:** store{store_id, store_address_id, city_code}, query, total (Glovo's count), items[]: item_id, external_id, store_product_id, name, description, price, currency, price_text, image

**Example request body:**
```json
{
  "store_id": "21033",
  "query": "leche",
  "lat": 40.4168,
  "lon": -3.7038
}
```

### POST https://api.reefapi.com/glovo/v1/search — 3 credits
Glovo's own search for a delivery point — the same results glovoapp.com shows: matching stores (restaurants, supermarkets, shops) with delivery time and rating, and the matching products/dishes shown under each store with price and original price (compare one product across stores).

**Parameters:**
- `query` (string, required) — Search words.
- `lat` (number, optional) — Delivery point latitude (with `lon`). Which stores deliver, the delivery fee, time and distance all depend on this point; it is echoed in `location`.
- `lon` (number, optional) — Delivery point longitude (with `lat`).
- `language` (string, optional, default "en") — Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.

**Returns:** location{…, currency}, query, stores[]: store_id, store_address_id, slug, name, is_glovo_dark_store, rating_score, rating_text, rating_count_text, delivery_estimate_min/max/text, tags[], promotions[], image; products[]: item_id, external_id, name, price, original_price, discount_pct, currency, price_text, original_price_text, promotions[], store_id, store_address_id, store_slug, store_name

**Example request body:**
```json
{
  "query": "leche",
  "lat": 40.4168,
  "lon": -3.7038
}
```

## 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=glovo
- Human docs page: https://reefapi.com/docs/glovo
- Overview page: https://reefapi.com/glovo-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
