Skip to content
Venue MenusDocumentation

Operations and integrations

Developer API

Read published menus from your own server-side tools.

For Owners manage keys; staff can read the documentationReviewed September 15, 2026
Open in Studio

Before you begin

An account owner creates an API key in Developers and stores it on a trusted server.

What changes

API requests are read-only. They cannot edit, publish, expose drafts, or change account state.

Create and protect a key

  1. An owner opens Developers, names a key, and creates it.
  2. Copy the complete value immediately. Venue Menus stores only its hash and later displays the last eight characters.
  3. Keep it in a server-side environment variable such as VENUE_MENUS_API_KEY. Never put it in a browser, URL, public repository, or analytics.
curl --fail-with-body \
  --header "Authorization: Bearer $VENUE_MENUS_API_KEY" \
  'https://venue-menus.com/api/developer/v1/menus?limit=20'

List published menus

GET /api/developer/v1/menus returns the account’s public, published menus across locations, ordered by menu ID. limit defaults to 20 and accepts up to 50. Pass next_after back as after; a null cursor ends the list.

{
  "menus": [{
    "id": 42,
    "name": "On Tap",
    "slug": "on-tap",
    "location": {"id": 7, "name": "Riverside", "slug": "riverside"},
    "revision": 3
  }],
  "next_after": null
}

Read a menu snapshot

GET /api/developer/v1/menus/42 returns the named published menu, location, revision, sections, items, servings, presentation information, and active events available through the public contract. Drafts and private menus are never returned.

{
  "menu": {
    "menu_id": 42,
    "location": "Riverside",
    "menu": "On Tap",
    "revision": 3,
    "sections": [{"name": "Draft Beer", "items": []}],
    "promotions": []
  },
  "promotions_next_change": null,
  "checked_at": 1789480800
}

Prices inside item variants use integer price_cents; availability is boolean and times are Unix seconds in UTC. Refetch at promotions_next_change and hide expired promotions locally when offline. Send HEAD when only status and headers are needed. All other methods return method-not-allowed.

Errors and quotas

  • 400: invalid pagination parameters.
  • 401: missing, malformed, revoked, or unknown bearer key.
  • 403: the account does not permit the request.
  • 404: the menu is outside the account or is not public and published.
  • 405: an editing method was attempted.
  • 429: the account exceeded 60 requests per minute or 10,000 per day; respect Retry-After.
  • 500: temporary service failure; retry with backoff.

Responses report remaining minute/day requests and reset times in rate-limit headers. Error bodies use an error object with a stable code and human-readable message. Revoke suspected keys immediately and create a replacement.

Read the assistant setup guide →

Connect an assistant with MCP

Add https://venue-menus.com/mcp as a remote MCP server in your assistant. Sign in, choose your organization and grant its permissions. MCP supports menu editing, separate menu and flavor-map publication, screens, schedules, websites, imports and other Studio workflows. Existing API keys remain read-only and cannot authenticate MCP.

Routine changes run directly within your permissions. Spending and sensitive account operations open a separate browser approval page. Menu lists, flavor maps, websites and translations publish independently. Owners and staff can connect; your current role still applies.

Open Connected assistants (MCP) to inspect or disconnect access. Owners can disconnect organization connections; staff can disconnect their own. Disconnecting takes effect immediately.

Limits and boundaries

Accounts can have 10 active keys. Shared quotas are 60 requests per minute and 10,000 per day. List pages default to 20 and allow at most 50 records.

If something goes wrong

Use the returned error code and HTTP status. Revoke a suspected key, create a replacement, and update the server-side secret.

Still stuck? Email Venue Menus support with the location, menu or screen name and the action you were taking.