Menu API
The endpoints behind the menu manager + the public storefront menu.
1 min read Updated 5/28/2026developer
Read — public storefront
GET /api/public/[tenantId]/menu returns the full live menu:
JSON
{
"categories": [
{ "id": "cat_001", "name": { "en": "Pizza" }, "order": 1, "visible": true }
],
"products": [
{
"id": "p_marg",
"categoryId": "cat_001",
"name": { "en": "Margherita" },
"basePrice": 12.50,
"allergens": ["gluten", "milk"],
"dietaryTags": ["vegetarian"]
}
]
}Inactive / hidden categories + out-of-stock products are filtered out (so customer apps don't accidentally show items that can't be ordered).
Read — tenant view (includes drafts)
GET /api/tenant/[tenantId]/categories and GET /api/tenant/[tenantId]/products return everything including hidden / draft items, in any order, with recipe mappings (for the inventory module).
Create / update / delete
Pattern is consistent across resources:
Shell
# Create category
curl -X POST -b cookies.txt \
-H "Content-Type: application/json" \
-d '{ "name": { "en": "Desserts" }, "order": 99 }' \
https://api.restora360.com/api/tenant/luigi/categories
# Update product
curl -X PATCH -b cookies.txt \
-H "Content-Type: application/json" \
-d '{ "basePrice": 14.99, "discountPrice": 12.99 }' \
https://api.restora360.com/api/tenant/luigi/products/p_marg
# Delete category
curl -X DELETE -b cookies.txt \
https://api.restora360.com/api/tenant/luigi/categories/cat_001Deleting a category that has products returns 409 Conflict. Either delete the products first or move them to another category.
Bulk reorder
PATCH /api/tenant/[tenantId]/categories/reorder and …/products/reorder accept { ids: [orderedIds] } to apply a new ordering atomically. Used by the drag-and-drop UI in the menu manager.