Documentation
API reference
Menus
Menus arrange products into sections and decide what a storefront shows, and when.
Base URL: https://apiv2.venuerun.com/merchants/:merchantId/menus
text
GET /merchants/:merchantId/menus
POST /merchants/:merchantId/menus
GET /merchants/:merchantId/menus/:menuId
POST /merchants/:merchantId/menus/:menuId
PATCH /merchants/:merchantId/menus/:menuId
DELETE /merchants/:merchantId/menus/:menuIdThe menu object
| Field | Type | Description |
|---|---|---|
id | string (read-only) | Unique identifier, assigned by VenueRun. |
createdAt | string (read-only) | When it was created (ISO 8601). |
updatedAt | string (read-only) | When it last changed (ISO 8601). |
title | string | |
description | string | Defaults to "". |
showSectionNavigation | boolean | Defaults to false. |
visible | boolean | Defaults to false. |
allDayMenu | boolean | Defaults to false. |
begin | string | Defaults to "0800". |
end | string | Defaults to "1700". |
branding | object | |
↳ banner | string | false | Defaults to false. |
↳ icon | string | false | Defaults to false. |
sections | object[] | Defaults to []. |
testMode | boolean | Defaults to false. |
json
{
"id": "LswAaicfHT8BZUSXUd90",
"title": "Test menu A1B2C3",
"description": "",
"showSectionNavigation": false,
"visible": false,
"allDayMenu": false,
"begin": "0800",
"end": "1700",
"branding": {
"banner": false,
"icon": false
},
"sections": [
{
"id": "a-A1B2C3",
"title": "Mains",
"description": "",
"type": "LIST",
"items": [],
"image": ""
}
],
"testMode": true,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}List menus
GET /merchants/:merchantId/menus
javascript
const merchantId = process.env.VENUERUN_MERCHANT_ID;
const response = await fetch(`https://apiv2.venuerun.com/merchants/${merchantId}/menus`, {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.VENUERUN_API_KEY}`,
},
});Response:
json
{
"testMode": true,
"length": 1,
"data": [
{
"id": "LswAaicfHT8BZUSXUd90",
"title": "Test menu A1B2C3",
"description": "",
"showSectionNavigation": false,
"visible": false,
"allDayMenu": false,
"begin": "0800",
"end": "1700",
"branding": {
"banner": false,
"icon": false
},
"sections": [
{
"id": "a-A1B2C3",
"title": "Mains",
"description": "",
"type": "LIST",
"items": [],
"image": ""
}
],
"testMode": true,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}
]
}Create a menu
POST /merchants/:merchantId/menus
Required attributes
| Field | Type | Description |
|---|---|---|
title | string |
Optional attributes
| Field | Type | Description |
|---|---|---|
description | string | Defaults to "". |
showSectionNavigation | boolean | Defaults to false. |
visible | boolean | Defaults to false. |
allDayMenu | boolean | Defaults to false. |
begin | string | Defaults to "0800". |
end | string | Defaults to "1700". |
branding | object | Defaults to {"banner":false,"icon":false}. |
↳ banner | string | false | Defaults to false. |
↳ icon | string | false | Defaults to false. |
sections | object[] | Defaults to []. |
testMode | boolean | Defaults to false. |
javascript
const merchantId = process.env.VENUERUN_MERCHANT_ID;
const response = await fetch(`https://apiv2.venuerun.com/merchants/${merchantId}/menus`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VENUERUN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"title": "Imported A1B2C3",
"testMode": true,
"sections": [
{
"id": "eeb07274-e7e6-09f9-671e-5a344ed037fd",
"title": "Small Plates",
"description": "To share",
"type": "LIST",
"image": "",
"items": [
{
"id": "943267df-74a2-ebe8-e476-9356b16d1c4c",
"title": "Charred Broccolini",
"description": "Chili, lemon",
"images": [],
"visible": true,
"taxRateIds": [],
"calories": 0,
"modifiers": [],
"manageStock": false,
"stockQuantity": 0,
"type": "SIMPLE",
"upc": "",
"sku": "",
"metadata": [],
"testMode": true,
"priceMinor": 1200
},
{
"id": "83239959-f5cb-bae6-2722-aa369a5875c6",
"title": "House Focaccia",
"description": "",
"images": [],
"visible": true,
"taxRateIds": [],
"calories": 0,
"modifiers": [],
"manageStock": false,
"stockQuantity": 0,
"type": "SIMPLE",
"upc": "",
"sku": "",
"metadata": [],
"testMode": true,
"priceMinor": 750
}
]
}
]
}),
});Response:
json
{
"id": "32pAOhO68gDvVM5JG5nf",
"title": "Imported A1B2C3",
"description": "",
"showSectionNavigation": false,
"visible": false,
"allDayMenu": false,
"begin": "0800",
"end": "1700",
"branding": {
"banner": false,
"icon": false
},
"sections": [
{
"id": "eeb07274-e7e6-09f9-671e-5a344ed037fd",
"title": "Small Plates",
"description": "To share",
"type": "LIST",
"items": [
"03wj25PBDwlg1yVzozuL",
"ic161coSElpbKjStalSN"
],
"image": ""
}
],
"testMode": true,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}Retrieve a menu
GET /merchants/:merchantId/menus/:menuId
javascript
const merchantId = process.env.VENUERUN_MERCHANT_ID;
const response = await fetch(`https://apiv2.venuerun.com/merchants/${merchantId}/menus/c11mViVlMwLnTmjMHiOT`, {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.VENUERUN_API_KEY}`,
},
});Response:
json
{
"id": "c11mViVlMwLnTmjMHiOT",
"title": "Test menu A1B2C3",
"description": "",
"showSectionNavigation": false,
"visible": false,
"allDayMenu": false,
"begin": "0800",
"end": "1700",
"branding": {
"banner": false,
"icon": false
},
"sections": [
{
"id": "a-A1B2C3",
"title": "Mains",
"description": "",
"type": "LIST",
"items": [],
"image": ""
}
],
"testMode": true,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}Update a menu (POST alias)
POST /merchants/:merchantId/menus/:menuId
Send only the fields you are changing — every attribute is optional.
javascript
const merchantId = process.env.VENUERUN_MERCHANT_ID;
const response = await fetch(`https://apiv2.venuerun.com/merchants/${merchantId}/menus/OUniSYDdWNeRJzcm898O`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VENUERUN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"description": "Via POST"
}),
});Response:
json
{
"id": "OUniSYDdWNeRJzcm898O",
"title": "Test menu A1B2C3",
"description": "Via POST",
"showSectionNavigation": false,
"visible": false,
"allDayMenu": false,
"begin": "0800",
"end": "1700",
"branding": {
"banner": false,
"icon": false
},
"sections": [],
"testMode": true,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}Update a menu
PATCH /merchants/:merchantId/menus/:menuId
Send only the fields you are changing — every attribute is optional.
javascript
const merchantId = process.env.VENUERUN_MERCHANT_ID;
const response = await fetch(`https://apiv2.venuerun.com/merchants/${merchantId}/menus/4NasRntv7yKY6h6w1XzB`, {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.VENUERUN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"title": "Renamed",
"visible": true
}),
});Response:
json
{
"id": "4NasRntv7yKY6h6w1XzB",
"title": "Renamed",
"description": "",
"showSectionNavigation": false,
"visible": true,
"allDayMenu": false,
"begin": "0800",
"end": "1700",
"branding": {
"banner": false,
"icon": false
},
"sections": [
{
"id": "sec-A1B2C3",
"title": "Mains",
"description": "",
"type": "LIST",
"items": [
"NRgVp5l1rvD1Mwd4pEor"
],
"image": ""
}
],
"testMode": true,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}Delete a menu
DELETE /merchants/:merchantId/menus/:menuId
javascript
const merchantId = process.env.VENUERUN_MERCHANT_ID;
const response = await fetch(`https://apiv2.venuerun.com/merchants/${merchantId}/menus/6cu92GEeFudkiwOToiyy`, {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.VENUERUN_API_KEY}`,
},
});Response:
json
{
"id": "6cu92GEeFudkiwOToiyy",
"object": {
"id": "6cu92GEeFudkiwOToiyy",
"title": "Imported A1B2C3",
"description": "",
"showSectionNavigation": false,
"visible": false,
"allDayMenu": false,
"begin": "0800",
"end": "1700",
"branding": {
"banner": false,
"icon": false
},
"sections": [
{
"id": "ff513b42-90e8-014c-cc14-c6d921559433",
"title": "Small Plates",
"description": "To share",
"type": "LIST",
"items": [
"CMr5as1qhJbfH3cReKUz",
"0GYWvUqfV8tPIrmURW2G"
],
"image": ""
}
],
"testMode": true,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
},
"message": "Menu deleted",
"deleted": true
}Errors
Every error answers with a message. A request that fails validation is a 400:
json
{
"message": "begin: Time must be in HHMM format (0000–2359)"
}
