Menu API

Manage your restaurant menu including categories, items, modifiers, stock levels, and availability.

Categories

Categories group menu items and can include metadata for display such as color and icon.

List Categories

GET/api/menu/categoriesProtected

Retrieve all categories with their nested items array.

json
// Response 200
{
  __PH2__: [
    {
      __PH3__: "cat-uuid",
      __PH5__: "Hauptgerichte",
      __PH7__: "Main courses",
      __PH9__: "__PH1__
      "icon": "utensils",
      "sort_order": 1,
      "items": [
        {
          "id": "item-uuid",
          "name": "Wiener Schnitzel",
          "price": 1890,
          "vat_rate": 19
        }
      ]
    }
  ]
}

Create Category

POST/api/menu/categoriesProtected

Create a new menu category.

Request Body

NameTypeRequiredDescription
namestringRequiredCategory name
descriptionstringOptionalShort description
colorstringOptionalHex color for POS display
iconstringOptionalIcon identifier
json
// Request
{
  __PH2__: "Vorspeisen",
  __PH4__: "Starters and appetizers",
  __PH6__: "__PH1__
  "icon": "soup"
}

Update Category

PUT/api/menu/categories/{id}Protected

Update an existing category.

json
// Request
{
  __PH2__: "Desserts",
  __PH4__: "#ec4899"
}

Delete Category

DELETE/api/menu/categories/{id}Protected

Soft-delete a category. Items within the category are not affected but will no longer appear under this group.

Items

List Items

GET/api/menu/itemsProtected

Retrieve all menu items.

json
// Response 200
{
  __PH2__: [
    {
      __PH3__: "item-uuid",
      __PH5__: "Wiener Schnitzel",
      __PH7__: 1890,
      __PH8__: "cat-uuid",
      __PH10__: "Classic breaded veal cutlet",
      __PH12__: 19,
      __PH13__: false,
      __PH14__: true,
      __PH15__: "__PH1__
      "printer_target": "kitchen",
      "available": true,
      "stock_quantity": null
    }
  ]
}

Create Item

POST/api/menu/itemsProtected

Create a new menu item.

Request Body

NameTypeRequiredDescription
namestringRequiredItem name
priceintegerRequiredPrice in cents
category_iduuidOptionalParent category ID
descriptionstringOptionalItem description
vat_rateintegerOptionalVAT rate in percent (default 19)
is_drinkbooleanOptionalWhether this is a drink (always 19% VAT)
is_takeaway_eligiblebooleanOptionalWhether item can be ordered for takeaway
colorstringOptionalHex color for POS button
printer_targetstringOptionalPrinter routing target (default "kitchen")
json
// Request
{
  __PH1__: "Currywurst",
  __PH3__: 850,
  __PH4__: "cat-uuid",
  __PH6__: 19,
  __PH7__: false,
  __PH8__: true,
  __PH9__: "kitchen"
}

Update Item

PUT/api/menu/items/{id}Protected

Update an existing menu item.

json
// Request
{
  __PH1__: "Currywurst Deluxe",
  __PH3__: 950
}

Delete Item

DELETE/api/menu/items/{id}Protected

Soft-delete a menu item. The item is retained in the database for audit compliance.

Update Stock

PATCH/api/menu/items/{id}/stockProtected

Set the stock quantity for a menu item. Set to null to disable stock tracking.

Request Body

NameTypeRequiredDescription
quantityinteger | nullRequiredStock quantity, or null to disable tracking
json
// Request
{ __PH2__: 25 }

// Response 200
{
  __PH3__: "item-uuid",
  __PH5__: 25
}

Update Availability

PATCH/api/menu/items/{id}/availabilityProtected

Toggle item availability. Unavailable items are hidden from the ordering interface.

Request Body

NameTypeRequiredDescription
availablebooleanRequiredWhether the item is available for ordering
json
// Request
{ __PH2__: false }

// Response 200
{
  __PH3__: "item-uuid",
  __PH5__: false
}

Modifiers

Modifiers represent add-ons or customisations that can be applied to menu items (e.g. extra cheese, no onions). They are grouped by modifier_group.

List Modifiers

GET/api/menu/modifiersProtected

Retrieve all modifiers.

json
// Response 200
{
  __PH1__: [
    {
      __PH2__: "mod-uuid",
      __PH4__: "Extra Cheese",
      __PH6__: 150,
      __PH7__: "Extras"
    }
  ]
}

Create Modifier

POST/api/menu/modifiersProtected

Create a new modifier.

Request Body

NameTypeRequiredDescription
namestringRequiredModifier name
priceintegerRequiredAdditional price in cents
modifier_groupstringRequiredGroup name for categorisation
json
// Request
{
  __PH1__: "Extra Sauce",
  __PH3__: 100,
  __PH4__: "Extras"
}

Update Modifier

PUT/api/menu/modifiers/{id}Protected

Update an existing modifier.

json
// Request
{
  __PH1__: "Extra Sauce (Large)",
  __PH3__: 200
}

Delete Modifier

DELETE/api/menu/modifiers/{id}Protected

Delete a modifier.