# Wolt API — restaurants, Wolt Market and shops that deliver to a location, with delivery fee, delivery time, rating and opening status; every menu and grocery catalogue with price, discount, unit price, barcode and live stock; Wolt search across all venues. 30 countries, no account, no key.

> Every venue Wolt lists for a delivery point: restaurants (type=restaurant) or shops (type=retail — Wolt Market dark stores, supermarkets, pharmacies, florists, electronics …). Location is required (lat+lon or a Wolt city slug) and echoed. Filter by product line (grocery, pharmacy …), by Wolt's own cuisine/category filter, price range and open-now; sort the way wolt.com sorts. Rows are paged from Wolt's complete list for that point.
> ReefAPI engine `wolt` · 7 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/wolt/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/wolt/v1/venues — 3 credits
Every venue Wolt lists for a delivery point: restaurants (type=restaurant) or shops (type=retail — Wolt Market dark stores, supermarkets, pharmacies, florists, electronics …). Location is required (lat+lon or a Wolt city slug) and echoed. Filter by product line (grocery, pharmacy …), by Wolt's own cuisine/category filter, price range and open-now; sort the way wolt.com sorts. Rows are paged from Wolt's complete list for that point.

**Parameters:**
- `lat` (number, optional) — Delivery point latitude. Required together with `lon` unless `city` is given. Delivery fee, delivery time and which venues appear depend on this point.
- `lon` (number, optional) — Delivery point longitude. Required together with `lat` unless `city` is given.
- `city` (string, optional) — Instead of lat/lon: a Wolt city slug (helsinki, berlin, warsaw, tel-aviv, almaty …; the `cities` action lists all). Resolved to Wolt's own city centre point, echoed in `location`.
- `country` (string, optional) — Only with `city`, when the same city slug exists in two countries (ISO 3166 alpha-2 or alpha-3).
- `type` (enum, optional, default "retail") — Which Wolt list to read. Echoed in the response. [one of: retail, restaurant]
- `product_line` (enum, optional) — Keep only venues of this Wolt product line (type=retail: grocery, pharmacy, florist …). [one of: restaurant, grocery, pharmacy, pet_supply, health_and_beauty, electronics, toys_games_and_kids, home_and_diy, florist, general_merchandise]
- `category` (string, optional) — Wolt's own venue filter value for that location (restaurants: pizza, sushi, burgers, vegan …; shops: grocery, pharmacy …). The response lists the values Wolt offers there; an unknown value is rejected with that list.
- `price_range` (integer, optional) — Wolt's price level (1 = €, 4 = €€€€).
- `open_now` (boolean, optional) — true = only venues open now; false = only closed ones.
- `sort` (enum, optional, default "recommended") — Row order — Wolt's own sort keys for each venue. [one of: recommended, distance, rating, delivery_fee, delivery_time]
- `page` (integer, optional, default 1) — Page of the filtered list; meta.has_more says if there is another.
- `limit` (integer, optional, default 50) — Rows per page (1-100).

**Returns:** location{lat, lon, source, served, wolt_city, country}, type, venues[]: venue_id, slug, name, product_line, venue_kind (restaurant|store), is_wolt_market, address, country, currency, lat, lon, distance_m, open_now, delivers_to_location, delivery_fee_listed, delivery_fee_listed_text, delivery_estimate_min/max/text, rating_score (0-10), rating_count, price_range, tags[], categories[], promotions[], short_description, image, url. available_filters{category[], product_line[]}; meta: total, page, has_more.

**Example request body:**
```json
{
  "lat": 60.1699,
  "lon": 24.9384,
  "type": "retail",
  "product_line": "grocery"
}
```

### POST https://api.reefapi.com/wolt/v1/search — 3 credits
Wolt's own search for a delivery point — the same results wolt.com shows. target=items searches products and dishes across every venue that delivers there (compare one product's price across shops), target=venues searches venues. Filter by product line, sort by distance, rating, delivery fee or delivery time. Wolt returns at most 200 items or 100 venues per search and publishes no further pages.

**Parameters:**
- `query` (string, required) — Search words, as typed on wolt.com.
- `lat` (number, optional) — Delivery point latitude. Required together with `lon` unless `city` is given. Delivery fee, delivery time and which venues appear depend on this point.
- `lon` (number, optional) — Delivery point longitude. Required together with `lat` unless `city` is given.
- `city` (string, optional) — Instead of lat/lon: a Wolt city slug (helsinki, berlin, warsaw, tel-aviv, almaty …; the `cities` action lists all). Resolved to Wolt's own city centre point, echoed in `location`.
- `country` (string, optional) — Only with `city`, when the same city slug exists in two countries (ISO 3166 alpha-2 or alpha-3).
- `target` (enum, optional, default "items") — What to search. [one of: items, venues]
- `product_line` (enum, optional) — Wolt's own product-line filter (grocery = supermarket and Wolt Market products only). [one of: restaurant, grocery, pharmacy, pet_supply, health_and_beauty, electronics, toys_games_and_kids, home_and_diy, florist, general_merchandise]
- `sort` (enum, optional, default "recommended") — Wolt's own search sort. [one of: recommended, distance, rating, delivery_fee, delivery_time]
- `language` (string, optional, default "en") — Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).

**Returns:** location{…}, query, target, items[]: item_id, name, description, price, currency, price_type, sold_by_weight, available, image, product_line, venue_id, venue_slug, venue_name, venue_rating_score, delivery_fee_listed, delivery_estimate_text, url — or venues[] (same shape as the venues action). Pass item_id + venue_slug to `items`.

**Example request body:**
```json
{
  "query": "milk",
  "lat": 60.1699,
  "lon": 24.9384
}
```

### POST https://api.reefapi.com/wolt/v1/venue — 2 credits
One venue's record: name, brand, address, coordinates, phone, website, opening hours, delivery hours, base delivery fee, order minimum, service fee rule, bag fee, rating, price level, categories, payment methods, the legal seller (DSA trader block). With lat+lon also whether it is open now and the delivery estimate to that point.

**Parameters:**
- `venue` (string, required) — Venue slug — a `venues`/`search` row's `slug` or `venue_slug`, as is — or a wolt.com venue URL.
- `lat` (number, optional) — Optional delivery point latitude for the live open status and delivery estimate (with `lon`).
- `lon` (number, optional) — Optional delivery point longitude (with `lat`).
- `language` (string, optional, default "en") — Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).

**Returns:** venue{venue_id, slug, name, brand, product_line, secondary_product_line, address, post_code, city, country, currency, timezone, lat, lon, phone, website, description, rating_score, rating_count, price_range, delivery_base_fee, order_minimum, service_fee{min, max, percentage, text}, bag_fee, delivery_methods[], opening_hours[], delivery_hours[], categories[], payment_methods[], seller{…}, url, live{open_now, status_text, next_open, next_close, delivery_estimate{min, max}, for_lat, for_lon}}

**Example request body:**
```json
{
  "venue": "wolt-market-kamppi"
}
```

### POST https://api.reefapi.com/wolt/v1/menu — 3 credits
A venue's menu or product catalogue. Restaurants: the full menu with prices and option groups. Shops and Wolt Market (catalogue loaded per category): without `category` the category tree with item counts; with `category` that category's products — price, original price, discount, lowest price of the last 30 days, unit price, barcode (GTIN), live stock count, availability.

**Parameters:**
- `venue` (string, required) — Venue slug — a `venues`/`search` row's `slug` or `venue_slug`, as is — or a wolt.com venue URL.
- `category` (string, optional) — Category slug from this action's `categories` tree. Needed for shop catalogues (`loading: partial`); optional for restaurants (filters the full menu).
- `page_token` (string, optional) — `meta.next_page_token` of the previous call, as is, for the next page of a large category.
- `language` (string, optional, default "en") — Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).

**Returns:** venue{slug, currency, language, available_languages[], loading (full|partial), lowest_price_interval_days}, categories[]{category_id, slug, name, listed_items, subcategories[]}, items[]: item_id, name, description, price, original_price, discount_pct, discount_valid, lowest_price_30d, currency, unit_info, unit_price, unit_price_per, gtin, stock, available, unavailable_reason, sold_by_weight, price_per_kg, deposit, vat_pct, age_restricted, dietary[], tags[], images[], category_ids[], options[]{name, type, min_choices, max_choices, values[]{name, price}}

**Example request body:**
```json
{
  "venue": "wolt-market-kamppi"
}
```

### POST https://api.reefapi.com/wolt/v1/venue_search — 3 credits
Search inside one venue's catalogue (the search box on a Wolt Market or supermarket page): every matching product with price, discount, unit price, barcode and stock.

**Parameters:**
- `venue` (string, required) — Venue slug — a `venues`/`search` row's `slug` or `venue_slug`, as is — or a wolt.com venue URL.
- `query` (string, required) — Search words.
- `language` (string, optional, default "en") — Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).

**Returns:** venue{slug, currency}, query, items[] (same shape as menu items).

**Example request body:**
```json
{
  "venue": "wolt-market-kamppi",
  "query": "coffee"
}
```

### POST https://api.reefapi.com/wolt/v1/items — 2 credits
Read products/dishes of one venue by item id — e.g. ids from `search` (item_id + venue_slug) or `menu`. Up to 50 ids in one call (Wolt's own multi-id read). Ids Wolt does not currently sell come back in `not_returned`.

**Parameters:**
- `venue` (string, required) — Venue slug — a `venues`/`search` row's `slug` or `venue_slug`, as is — or a wolt.com venue URL.
- `item_ids` (array, required) — Wolt item ids (24 hex characters), a list or comma-separated, max 50.
- `language` (string, optional, default "en") — Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).

**Returns:** venue{slug, currency}, items[] (same shape as menu items), not_returned[]

**Example request body:**
```json
{
  "venue": "wolt-market-kamppi",
  "item_ids": [
    "4660b15711616001d9a48b39"
  ]
}
```

### POST https://api.reefapi.com/wolt/v1/cities — 3 credits
Every city Wolt operates in, with Wolt's city slug, country and centre coordinates — the values `city` accepts. Filter by country.

**Parameters:**
- `country` (string, optional) — ISO 3166 alpha-2 or alpha-3 country code (FI, DE, PL, IL, KZ …).

**Returns:** cities[]: city, name, country, country_iso3, lat, lon, timezone; countries{code: count}

**Example request body:**
```json
{
  "country": "FI"
}
```

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