Wolt API endpoint
Searches one restaurant's or store's own items by keyword, using Wolt's own in-venue item search. This is the only way to reach the items of a large grocery or retail store: /wolt/restaurant/menu returns those venues' categories with no items, because Wolt itself only loads such an assortment a slice at a time. Matching works across languages, so an English keyword finds locally-named products. Each item carries a name, description, price, dietary tags, image, and -- for packaged retail products -- a barcode, pack size, and per-unit comparison price. A keyword is required; a no-match keyword returns an empty item list rather than an error.
/wolt/restaurant/menu/searchQuery parameters:
slug (required) — Wolt restaurant/store slug, from /wolt/search's slug field, e.g. mcdonalds-forum-katutaso.query (required) — keyword to match against this venue's own item names and descriptions, e.g. burger. Wolt matches across languages, so an English keyword finds locally-named products (milk matches Finnish maito items). Omitting it returns a 400.limit (optional) — max items returned. Defaults to 30, maximum 100. total_results reports the full count Wolt matched before truncation.An unrecognized slug returns a 404. A keyword with no matches returns an empty items list, not an error.
Response includes slug, query, total_results, and items[]. Each item has id, name, description, price (in the venue's major currency unit, e.g. euros), original_price (only present when the item has a discount), dietary_preferences[] (e.g. vegan, vegetarian, gluten_free, halal, kosher, lactose_free), tags[], image_url, and — for packaged retail products only — barcode_gtin (the product's GTIN/EAN barcode), unit_info (the pack size, e.g. 1 l), and unit_price (the comparison price, with price, base, and unit). Restaurant dishes carry none of those last three.
| Field | Filled in, of 30 checked | Values in the sample |
|---|---|---|
| id | 30 | |
| name | 30 | “Chicken Burger” and 29 other values |
| description | 30 | median 116 characters |
| price | 30 | 2.65 to 16.8, median 7.85 |
| image_url | 30 | wolt-menu-images-cdn.wolt.com |
| tags | 3 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| slug | string | Yes | Wolt restaurant/store slug, from /wolt/search's slug field | mcdonalds-forum-katutaso | |
| query | string | Yes | Keyword to match against this venue's own item names and descriptions | burger | |
| limit | integer | No | 30 | Max items returned. Defaults to 30, maximum 100. | 30 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/wolt/restaurant/menu/search?slug=mcdonalds-forum-katutaso&query=burger&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"slug": "wolt-market-kamppi",
"query": "milk",
"total_results": 270,
"items": [
{
"id": "bb548f646ccfa1046f579b79",
"name": "Valio Eila® kevytmaitojuoma 1 l laktoositon",
"description": "Valio Eila® laktoositon kevytmaitojuoma.",
"price": 2.29,
"dietary_preferences": [
"lactose_free"
],
"image_url": "https://imageproxy.wolt.com/assets/667942345074ed02696566c5",
"barcode_gtin": "06408430000258",
"unit_info": "1 l",
"unit_price": {
"price": 2.29,
"base": 1,
"unit": "litre"
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/wolt.menuSearchResponseDoc
| 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 | wolt.MenuSearchResponse | No | ||||
| data.items | array | No | ||||
| data.items[].barcode_gtin | string | No | BarcodeGTIN, UnitInfo, and UnitPrice are retail/grocery product fields. A restaurant dish carries none of them; a packaged store product usually carries all three. | |||
| data.items[].description | string | No | ||||
| data.items[].dietary_preferences | array | No | ||||
| data.items[].id | string | No | ||||
| data.items[].image_url | string | No | ||||
| data.items[].name | string | No | ||||
| data.items[].original_price | number | No | ||||
| data.items[].price | number | No | ||||
| data.items[].tags | array | No | ||||
| data.items[].unit_info | string | No | ||||
| data.items[].unit_price | wolt.UnitPrice | No | ||||
| data.items[].unit_price.base | integer | No | ||||
| data.items[].unit_price.price | number | No | ||||
| data.items[].unit_price.unit | string | No | ||||
| data.query | string | No | ||||
| data.slug | string | No | ||||
| data.total_results | integer | 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 |
| 404 | Not Found | #/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/wolt/restaurant/menu/search?slug=mcdonalds-forum-katutaso&query=burger&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"