# Menus Menu categories, items, modifier groups, and pricing. ## Get the full menu for a location - [GET /locations/{location_id}/menu](https://tote.redocly.app/online-ordering/spec/openapi/menus/getmenu.md): Returns the complete menu for a location, including all categories, items, and nested modifier groups. Menu structure: - A menu contains categories (e.g., "Deli & Sandwiches", "Beverages") - Each category contains items (e.g., "Build Your Own Sub Sandwich") - Each item may have modifier groups (e.g., "Bread Choice", "Protein") - Each modifier group contains modifiers (e.g., "White", "Wheat") - Modifiers can have nested modifier groups (up to 3 levels deep) Caching: Use the version_hash field to detect menu changes. For lightweight change detection without downloading the full menu, use the GET /locations/{location_id}/menu/metadata endpoint. Response size: Menu responses can be large (100KB+). Cache aggressively and use the metadata endpoint for polling. ## Get menu metadata for change detection - [GET /locations/{location_id}/menu/metadata](https://tote.redocly.app/online-ordering/spec/openapi/menus/getmenumetadata.md): Returns lightweight metadata about a location's menu, including the last modification timestamp and a version hash. Use case: Poll this endpoint to detect menu changes without downloading the full menu payload. Compare the version_hash with your cached version -- if they differ, re-fetch the full menu. Recommended polling interval: Every 5 minutes during business hours, every 30 minutes outside business hours.