Just Eat API endpoint
Returns one restaurant's full menu grouped into categories. Every item carries a name, description, image, price, and calorie/energy text when the upstream provides it. Items with customization options (e.g. "Dip 1/2") carry a modifier_groups list with each option's own price. Non-restaurant stores (groceries, alcohol, pharmacy, electronics, and similar) return every item under a single "All items" category rather than the site's own finer-grained grouping.
/justeat/restaurant/menuReturns one Just Eat restaurant's full menu, grouped into categories with prices.
Query parameters:
unique_name (required) — restaurant slug, from /justeat/search's unique_name field, e.g. mcdonalds-victorialondon.An unknown unique_name, or a restaurant with no published menu, returns 404.
Response includes restaurant_id, name, unique_name, currency_code (always GBP -- just-eat.co.uk is a UK-only domain), categories[], and item_count. Each category has id, name, and items[]. Each item has id, name, description, image_url, energy_display (a calorie/energy string, when the upstream provides it), price, and, only for items that carry upstream customization options, modifier_groups[].
Each modifier_groups[] entry has id, name (e.g. "Dip 1/2"), min_choices, max_choices (the upstream's own selection-count constraints for the group), and options[]. Each option has id, name (e.g. "Korean BBQ Dip"), addition_price (what selecting this option adds to the item's base price), remove_price, and energy_display. Most items have no customization at all and omit modifier_groups entirely rather than returning an empty array.
Non-restaurant stores (groceries, alcohol, pharmacy, electronics, and similar -- reachable via /justeat/search's filter option, e.g. filter=groceries) are also fully supported, grouped into the site's own real categories (e.g. "Vegetables", "Wine & Sparkling") the same as a food restaurant -- their item catalog comes from a different upstream source than food restaurants, but category names and structure match what the site itself shows.
| Field | Filled in, of 12 checked | Values in the sample |
|---|---|---|
| id | 12 | |
| name | 12 | “World Menu Heist” and 11 other values |
| items | 12 | median 13 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| unique_name | string | Yes | Restaurant slug, from a search response's unique_name field | mcdonalds-victorialondon | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/justeat/restaurant/menu?unique_name=mcdonalds-victorialondon" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"restaurant_id": "120913",
"name": "McDonald's® - Victoria",
"unique_name": "mcdonalds-victorialondon",
"currency_code": "GBP",
"categories": [
{
"id": "09313db0-ebfd-5d2c-80ff-cb203ff60d90",
"name": "What's New",
"items": [
{
"id": "076c474d-0fb0-50e2-b2ab-92afd3f5b85f",
"name": "Mini Hash Browns Sharebox®",
"description": "15 Mini Hash Browns, the perfect side for sharing.",
"image_url": "https://just-eat-prod-eu-res.cloudinary.com/image/upload/v1/uk/dishes/hashbrowns.jpg",
"energy_display": "1318 kJ/316 kcal",
"price": 3.89,
"modifier_groups": [
{
"id": "102f9857-ce3a-5213-bad5-0a4a04dc3d51",
"name": "Dip 1/2",
"min_choices": 1,
"max_choices": 1,
"options": [
{
"id": "16a8b2a8-cd85-506f-a68b-a21214ca22a6",
"name": "Ketchup Dip",
"addition_price": 0,
"energy_display": "114 kJ/27 kcal"
},
{
"id": "a9aad60e-79af-5648-881a-d5b1bd2be70b",
"name": "Korean BBQ Dip",
"addition_price": 0.9,
"energy_display": "333 kJ/78 kcal"
}
]
}
]
}
]
}
],
"item_count": 24
}
}Request schema
No body schema
Response schema
#/definitions/justeat.menuResponseDoc
| 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 | justeat.MenuResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].id | string | No | ||||
| data.categories[].items | array | No | ||||
| data.categories[].items[].description | string | No | ||||
| data.categories[].items[].energy_display | string | No | ||||
| data.categories[].items[].id | string | No | ||||
| data.categories[].items[].image_url | string | No | ||||
| data.categories[].items[].modifier_groups | array | No | ||||
| data.categories[].items[].modifier_groups[].id | string | No | ||||
| data.categories[].items[].modifier_groups[].max_choices | integer | No | ||||
| data.categories[].items[].modifier_groups[].min_choices | integer | No | ||||
| data.categories[].items[].modifier_groups[].name | string | No | ||||
| data.categories[].items[].modifier_groups[].options | array | No | ||||
| data.categories[].items[].modifier_groups[].options[].addition_price | number | No | ||||
| data.categories[].items[].modifier_groups[].options[].energy_display | string | No | ||||
| data.categories[].items[].modifier_groups[].options[].id | string | No | ||||
| data.categories[].items[].modifier_groups[].options[].name | string | No | ||||
| data.categories[].items[].modifier_groups[].options[].remove_price | number | No | ||||
| data.categories[].items[].name | string | No | ||||
| data.categories[].items[].price | number | No | ||||
| data.categories[].name | string | No | ||||
| data.currency_code | string | No | ||||
| data.item_count | integer | No | ||||
| data.name | string | No | ||||
| data.restaurant_id | string | No | ||||
| data.unique_name | string | 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/justeat/restaurant/menu?unique_name=mcdonalds-victorialondon" \
-H "x-api-key: $CRAWLORA_API_KEY"