# Menu file `Menu` — object The menu file at `menu.updated.data.url` / `ping.menuUrl`. Always the full menu, at most 3 MiB, served with `Cache-Control: no-store`. Prices are gross (tax included) in cents. A product with variants comes as one product per variant. Switched-off products and options stay in the file with `available: false`. ## Attributes - `schemaVersion` (string, required, Value: `1`) - `publishedAt` (string, required, format: date-time) The sync that last changed the menu - `currency` (string, required, pattern: `^[A-Z]{3}$`) The currency orders must use - `timeZone` (string, required) IANA time zone, e.g. Europe/Berlin - `priceIncludesTax` (boolean, required, Value: `true`) - `categories` (array of object, required) - `id` (string, required) - `name` (string, required) - `position` (integer, required) Display order - `products` (array of object, required) - `id` (string, required) Send as items[].productId - `name` (string, required) - `categoryIds` (array of string, required) - `position` (integer, required) Display order - `available` (boolean, required) false while the restaurant has it switched off - `prices` (object, required) - `pickup` (integer, required, 0-10000000) Minor units (cents) - `delivery` (integer, required, 0-10000000) Minor units (cents) - `taxRate` (number, required) Take-away rate in percent; send as items[].taxRate - `modifierGroupIds` (array of string, required) - `description` (string, optional) - `imageUrl` (string, optional, format: uri) Absolute https URL only - `modifierGroups` (array of object, required) - `id` (string, required) Send as modifiers[].modifierGroupId - `name` (string, required) - `minQuantity` (integer, required) How many options the customer must choose (not checked on orders) - `maxQuantity` (integer, required) How many options the customer may choose (not checked on orders) - `options` (array of object, required) - `id` (string, required) Send as modifiers[].modifierOptionId - `name` (string, required) - `unitPrice` (integer, required, 0-10000000) Minor units (cents) - `available` (boolean, required) - `maxQuantity` (integer, required) How often the option can be chosen - `openingHours` (array of object, required) For information only; may be empty - `day` (string, required, `MONDAY` | `TUESDAY` | `WEDNESDAY` | `THURSDAY` | `FRIDAY` | `SATURDAY` | `SUNDAY`) - `open` (string, required) Local time HH:mm in timeZone - `close` (string, required) Local time HH:mm in timeZone ## Example ```json { "schemaVersion": "1", "publishedAt": "2026-01-15T10:00:00Z", "currency": "AAA", "timeZone": "string", "priceIncludesTax": true, "categories": [ { "id": "string", "name": "string", "position": 1 } ], "products": [ { "id": "string", "name": "string", "categoryIds": [ "string" ], "position": 1, "available": true, "prices": { "pickup": 1, "delivery": 1 }, "taxRate": 1.5, "modifierGroupIds": [ "string" ], "description": "string", "imageUrl": "https://example.com" } ], "modifierGroups": [ { "id": "string", "name": "string", "minQuantity": 1, "maxQuantity": 1, "options": [ { "id": "string", "name": "string", "unitPrice": 1, "available": true, "maxQuantity": 1 } ] } ], "openingHours": [ { "day": "MONDAY", "open": "string", "close": "string" } ] } ```