This document describes the Wolt web API endpoints and response models used in this codebase.
- Consumer API:
https://consumer-api.wolt.com/v1/ - Restaurant API:
https://restaurant-api.wolt.com/ - Auth API:
https://authentication.wolt.com/v1/wauth2/access_token
Most calls require latitude and longitude (string values in PyWolt):
lat: latitudelon: longitude
GET https://consumer-api.wolt.com/v1/pages/restaurants
Query parameters:
lat(string, required)lon(string, required)
Response shape (used):
sections(array)sections[1].items-> list of venue entries- if
sections[1]missing, PyWolt raisesValueError(sections[0]["title"])
Mapping: each item is parsed into VenueData.
Verified curl:
curl "https://consumer-api.wolt.com/v1/pages/restaurants?lat=32.081171&lon=34.780663"Example response (trimmed, sections[1].items[0]):
{
"title": "Doron's Jachnun | Tel Aviv",
"venue": {
"id": "5fa3c2044aed93975b5034e8",
"name": "Doron's Jachnun | Tel Aviv",
"slug": "dorons-jachnun-tel-aviv",
"city": "",
"online": true,
"estimate": 25,
"price_range": 1
},
"image": {
"url": "https://imageproxy.wolt.com/assets/673207a063ae2357e7f7bae9"
}
}GET https://restaurant-api.wolt.com/v4/venues/slug/{venue_slug}/menu/data
Path parameters:
venue_slug(string, required)
Query parameters:
unit_prices(bool, defaulttrue)show_weighted_items(bool, defaulttrue)show_subcategories(bool, defaulttrue)
Response shape (used):
items-> list of menu items
Mapping: each item is parsed into MenuItem.
Verified curl (example venue slug):
curl "https://restaurant-api.wolt.com/v4/venues/slug/dorons-jachnun-tel-aviv/menu/data?unit_prices=true&show_weighted_items=true&show_subcategories=true"Example response (illustrative, items[0]):
{
"id": "item-123",
"name": "Jachnun Plate",
"description": "Slow-cooked dough with egg and tomato",
"baseprice": 4500,
"enabled": true,
"category": "Main"
}Note: in this environment the verified curl returned HTTP 200 with an empty body.
The example above reflects the fields used by MenuItem.
POST https://restaurant-api.wolt.com/v1/pages/search
JSON body:
q(string, required)target="venues"lat(string, required)lon(string, required)
Response shape (used):
sections[0]items-> list of venues- if
itemsmissing, PyWolt raisesValueError(sections[0]["title"])
Mapping: each item is parsed into VenueData.
Verified curl:
curl -X POST "https://restaurant-api.wolt.com/v1/pages/search" \
-H "Content-Type: application/json" \
-d '{"q":"pizza","target":"venues","lat":"32.081171","lon":"34.780663"}'Example response (trimmed, sections[0].items[0]):
{
"venue": {
"id": "6391d920eff86a03af7da1dd",
"name": "NonoMimi | Givataim",
"slug": "nono-givaataim"
},
"title": "NonoMimi | Givataim"
}POST https://restaurant-api.wolt.com/v1/pages/search
JSON body:
q(string, required)target="items"lat(string, required)lon(string, required)
Response shape (used):
sections[0].items[].menu_item-> list of menu items- if
itemsmissing, PyWolt raisesValueError(sections[0]["title"])
- if
Mapping: each menu_item is parsed into ItemSearchResult.
Verified curl:
curl -X POST "https://restaurant-api.wolt.com/v1/pages/search" \
-H "Content-Type: application/json" \
-d '{"q":"pizza","target":"items","lat":"32.081171","lon":"34.780663"}'Example response (trimmed, sections[0].items[0].menu_item):
{
"id": "5fa4014fce8409f03cf7f858",
"name": "Tabun Oven Pizza",
"price": 2700,
"currency": "ILS",
"venue_name": "Tabun Ben Yehuda"
}GET https://restaurant-api.wolt.com/v1/cities
Response shape (used):
results-> list of cities
Mapping: each item is parsed into City.
Verified curl:
curl "https://restaurant-api.wolt.com/v1/cities"Example response (trimmed, results[0]):
{
"id": "6567403295041dcfeb69bc23",
"name": "Tirana",
"slug": "tirana",
"timezone": "Europe/Tirane",
"country_code_alpha2": "AL"
}POST https://authentication.wolt.com/v1/wauth2/access_token
Form data:
refresh_token(string, required)grant_type="refresh_token"
Response shape (used):
access_tokenrefresh_token
Mapping: stored on the Wolt instance.
Example omitted here because it requires a valid refresh_token.
The following models are used to parse responses. Fields are listed with their
types as defined in pywolt/data_structures.py.
id:strvalue:int
id:strvalues:List[str]
rating:intscore:float
blurhash:Optional[str]url:str
selected_delivery_method:strtarget:strtarget_sort:strtarget_title:strtitle:strtype:strvenue_mainimage_blurhash:str
icon:Optional[str]primary_text:strsecondary_text:Optional[str]telemetry_status:strvariant:str
High-level wrapper for venue list/search responses.
filtering:Dict[str, List[FilteringFilters]]image:Imagelink:Linksorting:Dicttelemetry_venue_badges:List[str]template:strtitle:strtrack_id:strvenue:Venueoverlay:Optional[str]overlay_v2:Optional[OverlayV2]
Represents a venue (restaurant, grocery shop, etc).
address:strbadges:List[dict]badges_v2:List[str]categories:List[str]city:strcountry:CountryAlpha3currency:ISO4217delivers:booldelivery_price:Optional[Union[str, dict]]delivery_price_highlight:booldelivery_price_int:Optional[int]estimate:intestimate_range:strfranchise:stricon:Optional[str]id:strlocation:Coordinatesname:stronline:boolprice_range:intproduct_line:strpromotions:List[Dict[str, str]]rating:Optional[VenueRating]short_description:Optional[str]show_wolt_plus:boolslug:strtags:List[str]
id:strname:strmaximum_single_selections:intmaximum_total_selections:intminimum_total_selections:intparent:strrequired_option_selections:list
Represents a menu item in a venue menu.
advertising_badge:Optional[str]advertising_metadata:Optional[Dict[str, Any]]alcohol_percentage:floatallowed_delivery_methods:List[str]barcode_gtin:Optional[str]baseprice:intbrand_id:Optional[str]caffeine_content:Optional[dict]category:strchecksum:strdeposit:Optional[float]deposit_type:Optional[str]description:strdietary_preferences:List[str]disabled_info:Optional[Dict[str, Any]]enabled:boolexclude_from_discounts:boolexclude_from_discounts_min_basket:boolfulfillment_lead_time:Optional[int]has_extra_info:boolid:strimages:List[Image]is_cutlery:boollowest_historical_price:Optional[float]mandatory_warnings:List[str]max_quantity_per_purchase:Optional[int]min_quantity_per_purchase:Optional[int]name:strno_contact_delivery_allowed:booloptions:List[MenuItemOption]original_price:Optional[float]quantity_left:Optional[int]quantity_left_visible:boolrestrictions:Optional[List[Dict]]return_policy:Optional[str]sell_by_weight_config:Optional[Dict[str, Any]]tags:List[dict]times:List[Dict[str, Any]]type:strunformatted_unit_price:Optional[Dict]unit_info:Optional[str]unit_price:Optional[str]validity:Optional[dict]vat_percentage:floatwolt_plus_only:bool
background_color:Colorname:strtext_color:Colorvariant:str
Represents a menu item returned from an item search.
country:CountryAlpha3currency:ISO4217delivery_price:Optional[int]delivery_price_highlight:boolestimate_range:strid:strimage:Optional[Image]is_available:boolname:strprice:intprice_type:strshow_wolt_plus:booltags:List[Union[str, dict]]venue_id:strvenue_name:strvenue_rating:VenueRating
Represents a city supported by Wolt.
country_code_alpha2:CountryAlpha2country_code_alpha3:CountryAlpha3has_frontpage:boolid:strlocation:PointModelname:strslug:strsubareas:List[str]timezone:str
- The codebase uses an async HTTP client for API requests; response models are Pydantic.
- Error handling is minimal and mostly relies on missing
sectionsor HTTP errors. - Basket operations are present but commented out in the codebase.