R
Docs
API Documentation

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_001
Deleting 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.