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/:menuId

The menu object

FieldTypeDescription
idstring (read-only)Unique identifier, assigned by VenueRun.
createdAtstring (read-only)When it was created (ISO 8601).
updatedAtstring (read-only)When it last changed (ISO 8601).
titlestring
descriptionstringDefaults to "".
showSectionNavigationbooleanDefaults to false.
visiblebooleanDefaults to false.
allDayMenubooleanDefaults to false.
beginstringDefaults to "0800".
endstringDefaults to "1700".
brandingobject
↳ bannerstring | falseDefaults to false.
↳ iconstring | falseDefaults to false.
sectionsobject[]Defaults to [].
testModebooleanDefaults 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

FieldTypeDescription
titlestring

Optional attributes

FieldTypeDescription
descriptionstringDefaults to "".
showSectionNavigationbooleanDefaults to false.
visiblebooleanDefaults to false.
allDayMenubooleanDefaults to false.
beginstringDefaults to "0800".
endstringDefaults to "1700".
brandingobjectDefaults to {"banner":false,"icon":false}.
↳ bannerstring | falseDefaults to false.
↳ iconstring | falseDefaults to false.
sectionsobject[]Defaults to [].
testModebooleanDefaults 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)"
}