Menus
Browse Restaurant Menu (Public)
Public API
Restaurant browsing endpoints are publicly accessible. No authentication required.
GET /v1/restaurants/:restaurant_id/menu
Browse a restaurant's menu without authentication. Ideal for customer-facing apps and online ordering.
curl https://dev.api.olympuscloud.ai/v1/restaurants/550e8400-e29b-41d4-a716-446655449110/menu
Related Public Endpoints
| Endpoint | Description |
|---|---|
GET /v1/restaurants/:id/menu/categories | List menu categories |
GET /v1/restaurants/:id/menu/items | List all menu items |
GET /v1/restaurants/:id/menu/items/:item_id | Get specific menu item |
GET /v1/restaurants/:id/menu/pricing | Get menu pricing |
Menu Management (Authenticated)
Authenticated API
Menu management endpoints require a valid JWT Bearer token with staff roles.
List Menus
GET /v1/commerce/menus
curl https://dev.api.olympuscloud.ai/v1/commerce/menus \
-H "Authorization: Bearer $TOKEN"
Create Menu
POST /v1/commerce/menus
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Menu name (e.g., "Lunch Menu") |
description | string | No | Menu description |
currency | string | Yes | ISO 4217 currency code |
location_id | string (UUID) | No | Location-specific menu |
metadata | object | No | Custom metadata |
curl -X POST https://dev.api.olympuscloud.ai/v1/commerce/menus \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"name": "Dinner Menu",
"currency": "USD",
"description": "Evening dining selections"
}'
Response
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tenant_id": "550e8400-e29b-41d4-a716-446655449100",
"name": "Dinner Menu",
"description": "Evening dining selections",
"currency": "USD",
"is_active": true,
"metadata": {},
"created_at": "2026-02-19T15:30:00Z",
"updated_at": "2026-02-19T15:30:00Z"
}
Menu Items
Create Menu Item
POST /v1/menu/items
| Field | Type | Required | Description |
|---|---|---|---|
menu_id | string (UUID) | Yes | Parent menu |
name | string | Yes | Item name |
price | number | Yes | Price |
currency | string | Yes | Currency code |
description | string | No | Item description |
category_id | string (UUID) | No | Category to place item in |
tags | array of strings | No | Tags like ["vegetarian", "gluten-free"] |
allergens | array of strings | No | Allergens like ["peanuts", "dairy"] |
sku | string | No | POS SKU code |
plu | string | No | Price Look-Up code |
image_url | string | No | Primary image URL |
display_order | integer | No | Sort order within category |
curl -X POST https://dev.api.olympuscloud.ai/v1/menu/items \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"menu_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Margherita Pizza",
"price": 14.99,
"currency": "USD",
"description": "Fresh mozzarella, tomato sauce, basil",
"tags": ["vegetarian"],
"allergens": ["dairy", "gluten"]
}'
Response
{
"id": "d4e5f6a7-b8c9-0123-defg-456789012345",
"menu_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tenant_id": "550e8400-e29b-41d4-a716-446655449100",
"name": "Margherita Pizza",
"description": "Fresh mozzarella, tomato sauce, basil",
"price": 14.99,
"currency": "USD",
"tags": ["vegetarian"],
"allergens": ["dairy", "gluten"],
"is_active": true,
"is_86ed": false,
"display_order": 0,
"created_at": "2026-02-19T15:30:00Z",
"updated_at": "2026-02-19T15:30:00Z"
}
Get Menu Item
GET /v1/menu/items/:id
curl https://dev.api.olympuscloud.ai/v1/menu/items/d4e5f6a7-b8c9-0123-defg-456789012345 \
-H "Authorization: Bearer $TOKEN"
Update Menu Item
PATCH /v1/menu/items/:id
curl -X PATCH https://dev.api.olympuscloud.ai/v1/menu/items/ITEM_ID \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"price": 15.99}'
Update Availability (86 an Item)
PATCH /v1/menu/items/:id/availability
Mark an item as unavailable ("86'd" in restaurant terminology):
curl -X PATCH https://dev.api.olympuscloud.ai/v1/menu/items/ITEM_ID/availability \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"is_86ed": true, "eighty_six_reason": "Out of fresh basil"}'
Delete Menu Item
DELETE /v1/menu/items/:id
curl -X DELETE https://dev.api.olympuscloud.ai/v1/menu/items/ITEM_ID \
-H "Authorization: Bearer $TOKEN"
Menu Categories
GET /v1/menu/categories
curl https://dev.api.olympuscloud.ai/v1/menu/categories \
-H "Authorization: Bearer $TOKEN"
Response
[
{
"id": "cat-uuid-1",
"menu_id": "menu-uuid",
"name": "Appetizers",
"description": "Start your meal",
"display_order": 1,
"is_active": true,
"children": [],
"items": [...]
},
{
"id": "cat-uuid-2",
"menu_id": "menu-uuid",
"name": "Entrees",
"display_order": 2,
"is_active": true,
"children": [],
"items": [...]
}
]
Categories support nesting via the parent_id field, allowing subcategories like "Entrees > Pasta" or "Drinks > Wine > Red Wine".