With the Menus API you can display restaurant menus on your site.
Menus are divided by sections, such as "Appetizers", "Mains", "Desserts", "Drinks" and so on. The sections contains dishes (or items) with their labels and price variants. Additionally, you can upgrade your menu by adding item modifier groups, such as "Extra Toppings" or "Sides".
With the Menus API, you can:
It's important to note the following point before starting to code:
Menu: A list of food and beverage items available for purchase at a restaurant, café, or other dining establishment.
This article presents possible use cases and corresponding sample flows that your app can support. It provides a useful starting point as you plan your app's implementation.
If you have several pizzeria sites that use your app you might need to sync menu across those sites. For example, if there's a completely new menu called "Build-Your-Own-Pizza", this change also needs to be reflected on other sites.
To sync the pizza menu across all sites:
menu
object.The following table shows field support for filters and sorting for the menu object:
Field | Supported Filters | Sortable |
---|---|---|
id | $eq , $ne , $in , $nin | Sortable |
createdDate | $eq , $ne , $gt , $lt , $gte , $lte | Sortable |
updatedDate | $eq , $ne , $gt , $lt , $gte , $lte | Sortable |
name | $eq , $ne , $in , $nin , $begins | Sortable |
description | $eq , $ne , $in , $nin , $empty , $begins | Sortable |
urlQueryParam | $eq , $ne , $in , $nin , $begins | Sortable |
sectionIds | $hasSome | Sortable |
Related content: API Query Language, Query Menus.
Menu ID.
Revision number, which increments by 1 each time the menu is updated. To prevent conflicting changes, the current revision must be passed when updating the menu. Ignored when creating a menu.
Date and time the menu was created.
Date and time the menu was updated.
Menu name.
Menu description.
Is the menu visible to site visitors.
Menu section IDs.
Extended fields.
Part of the site URL, that redirects to the menu. For example, in the URL www.mywebsite.com/our-menus/dinner-menu
, dinner-menu
is the field value.
{
"menu": {
"id": "e11f38cf-0f11-4484-ba44-5b1746aacad0",
"name": "Breakfast Menu",
"description": "Served between 09:00-11:00h",
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"70f12b79-cd30-4750-91ab-1021a16cbbfa"
],
"urlQueryParam": "breakfast-menu",
"revision": "1",
"createdDate": "2024-01-07T15:53:51.106Z",
"updatedDate": "2024-01-07T15:53:51.106Z"
}
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Note: The Menu API only works with the Wix Restaurants Menus (New) app. Make sure you have installed this app from Wix App Market.
Retrieves a list of up to 500 menus.
Menu IDs.
Number of items to load.
Pointer to the next or previous page in the list of results.
You can get the relevant cursor token
from the pagingMetadata
object in the previous call's response.
Not relevant for the first request.
Retrieved menus.
The metadata of the paginated results.
curl -X GET 'https://www.wixapis.com/restaurants/menus-menu/v1/menus' \
-H 'Authorization: <AUTH>' \
{
"menus": [
{
"id": "bbb65621-6338-4837-8fdd-aebc654523e0",
"revision": "2",
"createdDate": "2023-10-15T09:27:01.640Z",
"updatedDate": "2023-10-15T09:27:01.640Z",
"name": "Dinner Menu",
"description": "",
"visible": true,
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"9ea7135d-c232-437f-a9c3-33dd87265542",
"be9330c1-c3c0-4f76-96cc-b69eac8d88da",
"70f12b79-cd30-4750-91ab-1021a16cbbfa"
],
"urlQueryParam": "dinner-menu"
}
],
"pagingMetadata": {
"count": 1,
"cursors": {},
"hasNext": false
}
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Note: The Menus API only works with the Wix Restaurants Menus (New) app. Make sure you have installed this app from Wix App Market.
Creates a menu.
To create multiple menus at once, use Bulk Create Menus.
You can only call this method when authenticated as a Wix app or Wix user identity.
Menu details.
Menu.
curl -X POST 'https://www.wixapis.com/restaurants/menus-menu/v1/menus' \
-H 'Authorization: <AUTH>' \
--data-binary '{
"menu": {
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"70f12b79-cd30-4750-91ab-1021a16cbbfa"
],
"name": "Breakfast Menu",
"description": "Served between 09:00-11:00h"
}
"urlQueryParam": "breakfast-menu"
}'
{
"menu": {
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"70f12b79-cd30-4750-91ab-1021a16cbbfa"
],
"id": "e11f38cf-0f11-4484-ba44-5b1746aacad0",
"name": "Breakfast Menu",
"description": "Served between 09:00-11:00h"
}
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Note: The Menu API only works with the Wix Restaurants Menus (New) app. Make sure you have installed this app from Wix App Market.
Creates multiple menus at once.
You can only call this method when authenticated as a Wix app or Wix user identity.
Menu details.
Whether to receive the created menus in the response.
Information about the created menus.
Metadata for the API call.
curl -X POST 'https://www.wixapis.com/restaurants/menus-menu/v1/bulk/menus/create' \
-H 'Authorization: <AUTH>' \
--data-binary '{
"menus": [
{
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"be9330c1-c3c0-4f76-96cc-b69eac8d88da"
],
"name": "Dinner Menu"
},
{
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8"
],
"name": "Breakfast Menu"
}
],
"returnEntity": true
}'
{
"results": [
{
"menuMetadata": {
"id": "bbb65621-6338-4837-8fdd-aebc654e2361",
"originalIndex": 0,
"success": true
},
"menu": {
"id": "bbb65621-6338-4837-8fdd-aebc654e2361",
"revision": "1",
"createdDate": "2024-01-14T16:22:43.759Z",
"updatedDate": "2024-01-14T16:22:43.759Z",
"name": "Dinner Menu",
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"be9330c1-c3c0-4f76-96cc-b69eac8d88da"
]
}
},
{
"menuMetadata": {
"id": "e11f38cf-0f11-4484-ba44-5b1746aaea50",
"originalIndex": 1,
"success": true
},
"menu": {
"id": "e11f38cf-0f11-4484-ba44-5b1746aaea50",
"revision": "1",
"createdDate": "2024-01-14T16:22:43.759Z",
"updatedDate": "2024-01-14T16:22:43.759Z",
"name": "Breakfast Menu",
"sectionIds": ["a1e247ea-0c57-498e-a9be-4044ed48bda8"]
}
}
],
"bulkActionMetadata": {
"totalSuccesses": 2,
"totalFailures": 0,
"undetailedFailures": 0
}
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Note: The Menu API only works with the Wix Restaurants Menus (New) app. Make sure you have installed this app from Wix App Market.
Retrieve a menu by ID.
Menu ID.
Menu.
curl -X GET 'https://www.wixapis.com/restaurants/menus-menu/v1/menus/e11f38cf-0f11-4484-ba44-5b1746aacad0' \
-H 'Authorization: <AUTH>'
{
"menu": {
"id": "e11f38cf-0f11-4484-ba44-5b1746aacad0",
"revision": "1",
"createdDate": "2024-01-14T15:26:45.192Z",
"updatedDate": "2024-01-14T15:26:45.192Z",
"name": "Breakfast Menu",
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"70f12b79-cd30-4750-91ab-1021a16cbbfa"
],
"urlQueryParam": "breakfast-menu"
}
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Note: The Menu API only works with the Wix Restaurants Menus (New) app. Make sure you have installed this app from Wix App Market.
Deletes a menu.
You can only call this method when authenticated as a Wix app or Wix user identity.
Menu ID.
curl -X DELETE 'https://www.wixapis.com/restaurants/menus-menu/v1/menus/e11f38cf-0f11-4484-ba44-5b1746aacad0' \
-H 'Authorization: <AUTH>' \
{}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Note: The Menu API only works with the Wix Restaurants Menus (New) app. Make sure you have installed this app from Wix App Market.
Retrieves a list of menus given the provided paging, filtering, and sorting. Up to 500 menus can be returned per request.
For a detailed list of supported operations, see the Supported Filters and Sorting article. To learn how to query menus, see API Query Language.
Query options.
Retrieved menus.
The metadata of the paginated results.
curl -X POST https://www.wixapis.com/restaurants/menus-item/v1/items/query \
-H 'Authorization: <AUTH>'
--data-binary '{
"query": {
"sort": [],
"filter": {
"sectionIds": {
"$hasSome": "a1e247ea-0c57-498e-a9be-4044ed48bda8"
}
}
}
}'
{
"menus": [
{
"id": "bbb65621-6338-4837-8fdd-aebc65452011",
"revision": "1",
"createdDate": "2024-01-14T16:17:46.504Z",
"updatedDate": "2024-01-14T16:17:46.504Z",
"name": "Dinner Menu",
"description": null,
"visible": null,
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"be9330c1-c3c0-4f76-96cc-b69eac8d88da"
],
"extendedFields": null,
"urlQueryParam": null
},
{
"id": "bbb65621-6338-4837-8fdd-aebc65452311",
"revision": "1",
"createdDate": "2024-01-14T16:12:33.374Z",
"updatedDate": "2024-01-14T16:12:33.374Z",
"name": "Dinner Menu",
"description": null,
"visible": null,
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"be9330c1-c3c0-4f76-96cc-b69eac8d88da"
],
"extendedDields": null,
"urlQueryParam": null
}
],
"pagingMetadata": {
"count": 2,
"cursors": {
"next": null,
"prev": null
},
"hasNext": false
}
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Note: The Menu API only works with the Wix Restaurants Menus (New) app. Make sure you have installed this app from Wix App Market.
Updates a menu.
To update multiple menus at once, use Bulk Update Menu.
Each time a menu is updated, revision increments by 1. The existing revision must be included when updating a menu. This ensures you're working with the latest menu information, and it prevents unintended overwrites.
You can only call this method when authenticated as a Wix app or Wix user identity.
Menu ID.
Menu to update.
Updated menu.
curl -X PATCH "https://www.wixapis.com/restaurants/menus-menu/v1/menus/e11f38cf-0f11-4484-ba44-5b1746aacad0" \
-H 'Authorization: <AUTH>' \
--data-binary '{
"menu": {
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8"
],
"id": "e11f38cf-0f11-4484-ba44-5b1746aacad0",
"name": "Brunch",
"revision": "2"
},
"mask": {
"paths": [
"name",
"sectionIds"
]
}
}'
{
"menu": {
"id": "e11f38cf-0f11-4484-ba44-5b1746aacad0",
"revision": "3",
"createdDate": "2024-01-14T15:26:45.192Z",
"updatedDate": "2024-01-14T15:59:48.777Z",
"name": "Brunch",
"sectionIds": ["a1e247ea-0c57-498e-a9be-4044ed48bda8"],
"urlQueryParam": "brunch-menu"
}
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Note: The Menu API only works with the Wix Restaurants Menus (New) app. Make sure you have installed this app from Wix App Market.
Updates multiple menus at once.
Each time a menu is updated, revision increments by 1. The existing revision must be included when updating the menu. This ensures you're working with the latest menu information, and it prevents unintended overwrites.
You can only call this method when authenticated as a Wix app or Wix user identity.
Menus to update.
Whether to receive the entity in the response.
Results of bulk menu update.
Metadata for the API call.
curl -X POST 'https://www.wixapis.com/restaurants/menus-menu/v1/bulk/menus/update' \
-H 'Authorization: <AUTH> \
--data-binary '{
"menus": [
{
"menu": {
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8"
],
"id": "bbb65621-6338-4837-8fdd-aebc654e2311",
"revision": "2",
"name": "Dinner Menu"
},
"mask": {
"paths": [
"sectionIds"
]
}
},
{
"menu": {
"sectionIds": [],
"id": "e11f38cf-0f11-4484-ba44-5b1746aaea20",
"revision": "2",
"name": "Brunch Menu"
},
"mask": {
"paths": [
"name"
]
}
}
],
"returnEntity": true
}'
{
"results": [
{
"menuMetadata": {
"id": "bbb65621-6338-4837-8fdd-aebc654e2311",
"originalIndex": 0,
"success": true
},
"menu": {
"id": "bbb65621-6338-4837-8fdd-aebc654e2311",
"revision": "4",
"createdDate": "2024-01-14T16:18:23.418Z",
"updatedDate": "2024-01-14T16:26:33.470Z",
"name": "Dinner Menu",
"sectionIds": ["a1e247ea-0c57-498e-a9be-4044ed48bda8"]
}
},
{
"menuMetadata": {
"id": "e11f38cf-0f11-4484-ba44-5b1746aaea20",
"originalIndex": 1,
"success": true
},
"menu": {
"id": "e11f38cf-0f11-4484-ba44-5b1746aaea20",
"revision": "4",
"createdDate": "2024-01-14T16:18:23.418Z",
"updatedDate": "2024-01-14T16:26:33.473Z",
"name": "Brunch Menu",
"sectionIds": ["a1e247ea-0c57-498e-a9be-4044ed48bda8"]
}
}
],
"bulkActionMetadata": {
"totalSuccesses": 2,
"totalFailures": 0,
"undetailedFailures": 0
}
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Note: The Menu API only works with the Wix Restaurants Menus (New) app. Make sure you have installed this app from Wix App Market.
Updates only the extendedFields
field.
Updates only the extendedFields
field.
ID of the entity to update.
Identifier for the app whose extended fields are being updated.
Data to update. Structured according to the schema defined when the extended fields were configured.
Namespace of the app.
Updated extended fields data.
curl -X POST https://www.wixapis.com/restaurants/menus-menu/v1/menus/d819eb86-0181-4f67-a383-ae1683e9e2fc/updateExtendedFields \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: <AUTH>'
--data-binary '{
"namespace": "@restaurants/menus",
"namespace_data": {
"seoData": {
"tags": [
{
"props": {
"content": "123",
"name": "description"
},
"type": "meta"
},
{
"children": "1",
"type": "title"
}
]
}
}
}'
{
"namespace": "@restaurants/menus",
"namespaceData": {
"seoData": {
"tags": [
{
"type": "meta",
"props": {
"name": "description",
"content": "123"
}
},
{
"type": "title",
"children": "1"
}
]
}
}
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Unique event ID. Allows clients to ignore duplicate webhooks.
Fully qualified domain name of the entity associated with the event. Expected wix.restaurants.menus.v1.menu
.
Event name. Expected created
.
ID of the entity associated with the event.
Event timestamp.
Whether the event was triggered as a result of a privacy regulation application (for example, GDPR).
If present, indicates the action that triggered the event.
Event information.
The data payload will include the following as an encoded JWT:
{
"data": {
"eventType": "wix.restaurants.menus.v1.menu_created",
"instanceId": "<app-instance-id>",
"data": "<stringified-JSON>",
// The identity field is sent as a stringified JSON
"identity": {
"identityType": "<identityType>", // ANONYMOUS_VISITOR, MEMBER, WIX_USER, APP
"anonymousVisitorId": "<anonymousVisitorId>", // in case of ANONYMOUS_VISITOR
"memberId": "<memberId>", // in case of MEMBER
"wixUserId": "<wixUserId>", // in case of WIX_USER
"appId": "<appId>" // in case of APP
}
}
}
{
"id": "c0f581b3-7ceb-4cce-8183-6f9233184cd2",
"entityFqdn": "wix.restaurants.menus.v1.menu",
"slug": "created",
"entityId": "bbb65621-6338-4837-8fdd-aebc654523e0",
"createdEvent": {
"entity": {
"id": "bbb65621-6338-4837-8fdd-aebc654523e0",
"revision": "1",
"createdDate": "2024-01-07T15:53:51.106Z",
"updatedDate": "2024-01-07T15:53:51.106Z",
"name": "Dinner Menu",
"description": "Served between 18:00 - 23:00h",
"visible": true,
"sectionIds": [
"a1e247ea-0c57-498e-a9be-4044ed48bda8",
"9ea7135d-c232-437f-a9c3-33dd87265542",
"be9330c1-c3c0-4f76-96cc-b69eac8d88da",
"70f12b79-cd30-4750-91ab-1021a16cbbfa"
],
"urlQueryParam": "dinner-menu"
}
},
"eventTime": "2024-01-07T15:53:51.156213943Z",
"triggeredByAnonymizeRequest": false,
"entityEventSequence": "1"
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Triggered when a menu is updated.
Unique event ID. Allows clients to ignore duplicate webhooks.
Fully qualified domain name of the entity associated with the event. Expected wix.restaurants.menus.v1.menu
.
Event name. Expected updated
.
ID of the entity associated with the event.
Event timestamp.
Whether the event was triggered as a result of a privacy regulation application (for example, GDPR).
If present, indicates the action that triggered the event.
Event information.
The data payload will include the following as an encoded JWT:
{
"data": {
"eventType": "wix.restaurants.menus.v1.menu_updated",
"instanceId": "<app-instance-id>",
"data": "<stringified-JSON>",
// The identity field is sent as a stringified JSON
"identity": {
"identityType": "<identityType>", // ANONYMOUS_VISITOR, MEMBER, WIX_USER, APP
"anonymousVisitorId": "<anonymousVisitorId>", // in case of ANONYMOUS_VISITOR
"memberId": "<memberId>", // in case of MEMBER
"wixUserId": "<wixUserId>", // in case of WIX_USER
"appId": "<appId>" // in case of APP
}
}
}
{
"id": "1a3b8b22-f420-4e98-a099-fc5898dae385",
"entityFqdn": "wix.restaurants.menus.v1.menu",
"slug": "updated",
"entityId": "5eb0fbd1-09a4-4b11-802d-6e5a59aad8fc",
"updatedEvent": {
"currentEntity": {
"id": "5eb0fbd1-09a4-4b11-802d-6e5a59aad8fc",
"revision": "2",
"createdDate": "2024-01-07T15:55:57.196Z",
"updatedDate": "2024-01-07T15:56:09.681Z",
"name": "Grocery Menu",
"visible": true,
"sectionIds": [
"1a454dab-84c9-451e-94d5-681efeea2e45",
"3df451ac-6873-4ca3-97c4-8a4de696120c",
"fbc0597f-980d-4396-8c96-3f505e66cd10"
],
"urlQueryParam": "grocery-menu"
}
},
"eventTime": "2024-01-07T15:56:09.688970668Z",
"entityEventSequence": "2"
}
This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.
Triggered when a menu is deleted.
Unique event ID. Allows clients to ignore duplicate webhooks.
Fully qualified domain name of the entity associated with the event. Expected wix.restaurants.menus.v1.menu
.
Event name. Expected deleted
.
ID of the entity associated with the event.
Event timestamp.
Whether the event was triggered as a result of a privacy regulation application (for example, GDPR).
If present, indicates the action that triggered the event.
Event information.
The data payload will include the following as an encoded JWT:
{
"data": {
"eventType": "wix.restaurants.menus.v1.menu_deleted",
"instanceId": "<app-instance-id>",
"data": "<stringified-JSON>",
// The identity field is sent as a stringified JSON
"identity": {
"identityType": "<identityType>", // ANONYMOUS_VISITOR, MEMBER, WIX_USER, APP
"anonymousVisitorId": "<anonymousVisitorId>", // in case of ANONYMOUS_VISITOR
"memberId": "<memberId>", // in case of MEMBER
"wixUserId": "<wixUserId>", // in case of WIX_USER
"appId": "<appId>" // in case of APP
}
}
}
{
"id": "2be641f5-8d3f-4416-b448-5fbcad42b1d4",
"entityFqdn": "wix.restaurants.menus.v1.menu",
"slug": "deleted",
"entityId": "bbb65621-6338-4837-8fdd-aebc654523e0",
"deletedEvent": {
"movedToTrash": true
},
"eventTime": "2024-01-14T17:01:07.756425223Z",
"triggeredByAnonymizeRequest": false,
"entityEventSequence": "2"
}