Get Menu
GET /v1/nextrestaurant/locations/{locationId}/menu
The live, orderable menu for a location
Categories of items, in the order arranged in the admin, reflecting live
availability for this branch: unpublished items, items switched off for
the location and 86'd items are absent, and price is the branch's price
where one overrides the base.
Each item carries everything needed to order it — its variations, its
modifier_groups with the per-item min/max overrides already applied, and
its declared allergens.
Request
GET https://your-site.example/api/index.php/v1/nextrestaurant/locations/{locationId}/menu
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
locationId |
integer |
path |
Yes | A published location's id. (min 1, int64) |
Responses
200 — The menu.
{
"data": {
"location_id": 2,
"categories": [
{
"id": 5,
"title": "Pizza",
"items": [
{
"id": 16,
"title": "Margherita Pizza",
"description": "San Marzano tomato, fior di latte and fresh basil.",
"price": 13,
"has_variations": 1,
"image": "images/nextrestaurant/items/16/gallery/ca98f3a212f1aac0.jpg",
"prep_time_minutes": 23,
"calories": null,
"spice_level": 0,
"is_alcohol": 0,
"variations": [
{
"id": 1,
"title": "Regular",
"price": 13,
"is_default": 1
},
{
"id": 2,
"title": "Large",
"price": 17,
"is_default": 0
}
],
"modifier_groups": [
{
"id": 2,
"title": "Extra Toppings",
"selection_type": "multiple",
"is_required": 0,
"min_select": 0,
"max_select": 4,
"free_quantity": 0,
"modifiers": [
{
"id": 5,
"title": "Extra Cheese",
"price": 1.5,
"is_default": 0,
"max_quantity": 1
},
{
"id": 6,
"title": "Mushrooms",
"price": 1,
"is_default": 0,
"max_quantity": 1
}
]
}
],
"allergens": [
{
"id": 5,
"title": "Fish",
"presence": "contains"
}
]
}
]
}
]
}
}
| Field | Type | Meaning |
|---|---|---|
data.location_id |
integer |
(int64) |
data.categories[].id |
integer |
(int64) |
data.categories[].title |
string |
|
data.categories[].items[].id |
integer |
(int64) |
data.categories[].items[].title |
string |
|
data.categories[].items[].description |
string\|null |
|
data.categories[].items[].price |
number |
The branch price for the item ordered with no variation. When variations is non-empty the chosen variation's price replaces this — it is not added to it. |
data.categories[].items[].has_variations |
integer |
1 when the item is sold in sizes or versions. One of 0, 1. |
data.categories[].items[].image |
string\|null |
Path relative to the site root. Prefix with your site URL to display it. |
data.categories[].items[].prep_time_minutes |
integer\|null |
|
data.categories[].items[].calories |
integer\|null |
|
data.categories[].items[].spice_level |
integer\|null |
|
data.categories[].items[].is_alcohol |
integer |
One of 0, 1. |
data.categories[].items[].variations[] |
object[] |
Sizes or versions. Empty when the item has none. When it is non-empty, pick one and send its id — submitting the item without a variation_id is accepted and charged at the base price with no size recorded, which is almost never what a customer meant. |
data.categories[].items[].variations[].id |
integer |
(int64) |
data.categories[].items[].variations[].title |
string |
|
data.categories[].items[].variations[].price |
number |
Replaces the item's price; not added to it. |
data.categories[].items[].variations[].is_default |
integer |
One of 0, 1. |
data.categories[].items[].modifier_groups[].id |
integer |
(int64) |
data.categories[].items[].modifier_groups[].title |
string |
|
data.categories[].items[].modifier_groups[].selection_type |
string |
One of single, multiple. |
data.categories[].items[].modifier_groups[].is_required |
integer |
One of 0, 1. |
data.categories[].items[].modifier_groups[].min_select |
integer |
Per-item overrides are already applied — use as given. |
data.categories[].items[].modifier_groups[].max_select |
integer |
Per-item overrides are already applied — use as given. |
data.categories[].items[].modifier_groups[].free_quantity |
integer |
How many are included before the per-modifier price applies. |
data.categories[].items[].modifier_groups[].modifiers[].id |
integer |
(int64) |
data.categories[].items[].modifier_groups[].modifiers[].title |
string |
|
data.categories[].items[].modifier_groups[].modifiers[].price |
number |
Added to the line. |
data.categories[].items[].modifier_groups[].modifiers[].is_default |
integer |
One of 0, 1. |
data.categories[].items[].modifier_groups[].modifiers[].max_quantity |
integer\|null |
How many times this modifier may be repeated on one line. |
data.categories[].items[].allergens[].id |
integer |
(int64) |
data.categories[].items[].allergens[].title |
string |
|
data.categories[].items[].allergens[].presence |
string |
One of contains, may_contain. |
Errors
| Status | Code | When |
|---|---|---|
401 |
INVALID_TOKEN |
The token is missing, wrong, or none has been generated. |
403 |
MODULE_DISABLED |
This module is disabled. |
403 |
API_DISABLED |
API is disabled |
404 |
UNKNOWN_LOCATION |
No such published location. |
Examples
curl
curl -s "https://your-site.example/api/index.php/v1/nextrestaurant/locations/2/menu" \
-H "Authorization: Bearer $API_TOKEN"