# Enabling Pickup Source: https://storekit.com/docs/enabling-pickup Turn on click-and-collect pickup in storekit so customers can order ahead for collection at your venue, with pickup managed from store settings. Enable click-and-collect pickup on your storekit store so customers can place orders for collection from your venue. You can turn pickup on or off at any time from your store settings. Pickup is a checkbox in the **Fulfillment types** group on the **Operations** settings page, alongside **Delivery**. The full path is **Stores** → \[your store] → **Settings** → **Operations** → **Fulfillment types**. There is no **Fulfillment** entry in the store settings menu, and no separate collection-point page. **Pickup** is set on **Operations**. ## How Enabling Pickup Works * Pickup appears as a fulfilment option at checkout * Customers can choose pickup/collection before placing an order * Pickup orders appear in your storekit orders dashboard (paper bag icon) * Delivery can remain enabled separately From your storekit dashboard, go to **Stores**, select the store you want to update, and open **Settings**. From the settings menu, open **Operations**. Under **Fulfillment types** — the first group on the **Operations** page — tick **Pickup** ("Offer pickup/collection orders"). You can also untick **Pickup** if you want to disable pickup/collection orders for this store. Click **Save** to apply the change. ## When to Enable Pickup Enable pickup when: * You want customers to place collection orders through your storekit store * The venue is ready to prepare pickup orders * Customers can collect orders directly from the venue * You have the correct address (pickup location) set under **Stores** → \[your store] → **Settings** → **General** ## When to Disable Pickup Disable pickup when: * The venue only wants to accept delivery orders * Pickup/collection is temporarily unavailable * The venue is too busy to handle pickup orders * Pickup setup (pre-orders) is still being configured Pickup only controls whether customers can choose pickup before placing an order. It does not affect whether delivery is enabled for the same store. **On a dine-in store the Fulfillment types checkboxes are not shown.** If the store takes in-store (order-and-pay) orders, the **Fulfillment types** group is not rendered on **Operations** at all, and **Delivery Zones** and **Pre-Orders** are missing from the settings menu too. There is no dashboard control that adds pickup or delivery to such a store — [contact storekit support](/docs/getting-started/contact-support) to have it changed. ## Related * [Enabling Delivery](/docs/guides/fulfillment/delivery/enabling-delivery) — enable delivery orders for your store * [Configure fulfillment methods and order scheduling](/docs/getting-started/launch/configure-fulfillment) — all fulfilment settings in one place * [Managing Live Orders](/docs/guides/orders/managing-live-orders) — handle incoming orders in real time * [Orders Overview](/docs/guides/orders/overview) — how orders flow through storekit # Contact Support Source: https://storekit.com/docs/getting-started/contact-support Reach the storekit support team via live chat, WhatsApp, email, or phone. Find response times, hours of operation, and the best channel for urgent issues. Our support team is available **20 hours a day, 7 days a week** to help you with any questions or issues. ## Contact Methods The fastest way to reach us. Click the chat widget in your storekit dashboard for instant support. Message us on WhatsApp for quick responses and easy communication. Send us an email at **[cs@storekit.com](mailto:cs@storekit.com)** and we'll get back to you as soon as possible. Call us on **020 3318 9890** to speak directly with our team. ## Support Hours | Day | Hours | | --------------- | ----------------------- | | Monday - Sunday | 8:00 AM - 1:00 AM (GMT) | For the fastest response, use **Live Chat** in your dashboard. Our average response time is under 5 minutes during support hours. ## Is storekit Down? Check Platform Status Before you troubleshoot your own setup, check [status.storekit.com](https://status.storekit.com). It shows any incident storekit is currently investigating, and you can subscribe there to get updates by email as the incident progresses. While an incident is active: * The dashboard, **Live Orders** and your customer ordering pages may be slow or fail to load. This is not caused by your device or network, so checking cables, switching browser or clearing your cache will not help. * Your POS and in-store tills keep working — they do not depend on storekit to take payments or serve customers over the counter. * If you already have a support chat open, our replies are also sent to your account email address, so you will see them even if you cannot load the dashboard. * We publish progress on the status page rather than giving individual ETAs, because the timeline usually depends on the upstream provider we are waiting on. After service is restored, things can be intermittent for a short while as systems stabilise — a page that fails on first load may work on a retry. If problems continue for you once the status page shows the incident resolved, contact us with your store name and what you are seeing. ## The Dashboard Says "Something Went Wrong" Sometimes a dashboard action stops with a dialog titled **Something went wrong**, saying "Sorry, something went wrong and our developers have been notified. Try refreshing the page and trying again, or reach out on live chat for help". This means the request your dashboard sent failed on storekit's side, not on your device. Our engineers are alerted automatically when it happens, so you do not need to report it for us to know about it — but telling us still helps, because the alert does not say which store or which action you were working on. The dialog gives you three buttons: * **Refresh Page** — reloads the dashboard. Worth trying first: many of these failures are momentary and the action succeeds on a second attempt. * **Get Help** — opens live chat with the reference already filled into the message. * **Close** — dismisses the dialog and leaves the page as it is. Assume the action did not save. ### Send Us the Reference Code Under the message, the dialog shows a **Reference:** row with a short code in monospaced text, and a copy button next to it (hover it and it reads **Copy reference ID**). That code identifies the exact request that failed, so when you paste it into live chat we can pull up the log for it immediately instead of asking you to reproduce the problem. To send it: 1. Click the copy button next to the code, or select the code and copy it manually. 2. Click **Get Help**, or open live chat from the dashboard. 3. Paste the code, and add what you were doing when it appeared (the store, the page, and the action). The dialog deliberately does not show the technical reason for the failure — that detail is only visible to internal storekit accounts. There is no way to work out the cause from what the dialog shows you, and no setting on your side to change in response to it. If anyone tells you the error means something specific (a missing field, a permission, a browser problem), that is a guess: send us the reference and we will read the actual log. If the dashboard was unreachable or unusually slow when the dialog appeared, also check [status.storekit.com](https://status.storekit.com) — during an incident these failures are a symptom of the incident rather than a separate problem. ## Developers and API Access storekit's API is in early access and is granted case by case, so support cannot enable it for you over chat. Request it with the [storekit MCP/API Access Request](https://t09czsyu90l.typeform.com/to/G6rIJWNv) form, describing what you're building, which stores or account it's for, the data or actions you need, and your expected volume. If you only need to receive events from your stores, [webhooks](/docs/developers/webhooks/overview) are available today without a request — see [Developer Introduction](/docs/developers/introduction). ## Before You Contact Us To help us resolve your issue quickly, please have the following ready: * Your **store name** or **store URL** * A clear description of the issue * Any relevant **order numbers** or **screenshots** * The **Reference** code from any **Something went wrong** error you saw * Steps you've already tried to resolve the issue # 3. Build Your Menu Source: https://storekit.com/docs/getting-started/launch/build-your-menu Add your menu to storekit by importing from another platform, syncing from your POS, uploading a CSV spreadsheet, or building it manually in the dashboard. There are several ways to get your menu into storekit. Choose the method that best fits your situation. Menus are per store, and the choice of how to build a menu only appears while a store has no menu — so pick a method before you create one. If you have already started a menu and want to import instead, see [Managing Menus](/docs/guides/menu/managing-menus). **Using a POS system?** If you're planning to connect a POS like Zonal, Lightspeed, or Deliverect, you may want to skip this step and [set up your POS integration first](/docs/guides/menu/pos-menu-sync). Your menu will sync automatically from the POS. ## Choose Your Method Already on Deliveroo, Toast, Just Eat, or another platform? Import your existing menu. Connect your POS system and sync your menu automatically. Upload a spreadsheet with your products for bulk import. Create your menu from scratch in the dashboard. ## Import from Existing Platforms If you already have a menu on another platform, we can import it for you. Supported sources include: | Delivery Platforms | POS / Ordering Systems | Website Builders | | ------------------ | ---------------------- | ---------------- | | Deliveroo | Clover | Google Business | | Just Eat | Revel | Squarespace | | Uber Eats | Toast | Wix | | Foodhub | SkyTab | | | Ritual | RedCat | | | | Flipdish | | | | Gloria Food | | | | Mr Yum | | | | Popmenu | | This is the fastest way to get started if you have an existing menu on any of these platforms. Contact storekit support or use the menu import option in your dashboard to request an import from your delivery platform. Share the URL of your restaurant on the delivery platform (e.g., your Deliveroo restaurant page). Once imported, review the menu in your dashboard. Check that categories, products, prices, and modifiers are correct. Add high-quality images, update descriptions, and add any missing allergen information. Imported menus may not include all details. Menu imports typically complete within a few minutes. In some cases, imports can take up to 24-48 hours. You can continue setting up other parts of your store while waiting. ## Sync from POS If you use a POS system, sync your menu instead of building it manually: | Integration Type | How It Works | | ---------------------------------------- | ---------------------------------------------------- | | **Push sync** (Deliverect, Stream) | Menu changes sync automatically from your POS | | **Pull sync** (Zonal, Lightspeed, Syrve) | Trigger syncs manually or on a schedule | | **Manual linking** (TISSL, Comtrex) | Create menu in storekit, link products via PLU codes | [Full POS Menu Sync guide →](/docs/guides/menu/pos-menu-sync) ## CSV Import For bulk import from a spreadsheet: 1. Download the CSV template from **Menu > Import** 2. Fill in your products with names, prices, descriptions, and categories 3. Upload the completed CSV file 4. Review and confirm the import [CSV Import guide →](/docs/guides/menu/csv-import) ## Build Manually To create your menu from scratch: 1. Go to **Menu** in the dashboard 2. Create **Categories** to organise your products (e.g., Starters, Mains, Drinks) 3. Add **Products** to each category with name, price, description, and image 4. Set up **Modifier Groups** for customisation options (sizes, toppings, sides) 5. Add **Allergen & Dietary** information for each product For detailed instructions on each step, see the [Menu guide](/docs/guides/menu/overview). ### Quick Tips * **Images matter** - Products with photos convert significantly better. See [Product Photography](/docs/guides/menu-engineering/product-photography). * **Front-load descriptions** - Only the first \~60 characters show on the menu list. * **Allergens are required** - In the UK and EU, allergen information is a legal requirement. ## After Import Whichever method you use, review your menu before going live: * [ ] All products have correct prices * [ ] Images are high-quality and appetising * [ ] Modifiers have correct min/max settings * [ ] Allergen information is complete and accurate * [ ] Products are in the right categories and order ## Next Step With your menu ready, [configure fulfillment options →](/docs/getting-started/launch/configure-fulfillment) # 4. Configure fulfillment methods and order scheduling Source: https://storekit.com/docs/getting-started/launch/configure-fulfillment Configure fulfillment for your storekit store including pickup, delivery, dine-in, and catering. Set delivery zones, prep times, and order method options. Configure how customers receive their orders. You can offer pickup, delivery, dine-in, or any combination. ## Fulfillment Methods storekit supports five fulfillment methods: | Method | Internal Name | Description | | --------------------- | ------------------ | ------------------------------------------ | | **Pickup** | `Pickup` | Customers collect from your location | | **Delivery** | `Delivery` | You deliver to the customer's address | | **Dine-in** | `InStore` | Customers order to their table via QR code | | **Catering Pickup** | `CateringPickup` | Large orders collected by the customer | | **Catering Delivery** | `CateringDelivery` | Large orders delivered to an event | When a customer visits your store, they're prompted to choose their fulfillment method (if multiple are enabled). This selection determines available time slots, minimum order values, and delivery fees. ## Where Pickup and Delivery Are Switched On Both are checkboxes in the **Fulfillment types** group on one page: **Stores** → \[your store] → **Settings** → **Operations**. **Fulfillment types** is the first group on the **Operations** page, and it contains exactly two checkboxes — **Delivery** ("Offer delivery orders (we do not provide drivers or driver management)") and **Pickup** ("Offer pickup/collection orders"). Tick or untick them and click **Save**. There is no **Fulfillment** entry in the store settings menu. The full list is **General**, **Design & Branding**, **Opening Hours**, **Operations**, **Packaging**, **Delivery Zones**, **Store Notices**, **Pre-Orders**, **Direct Printing**, **Tables**, **Payments**, **Kiosks & Terminals**, **Gratuity**, **Translation Overrides**, **Feedback** and **Automations** — pickup and delivery live under **Operations**. Some of those entries are store-dependent: **Delivery Zones** and **Pre-Orders** only on pickup/delivery stores, **Tables** only on dine-in stores, and **Packaging**, **Kiosks & Terminals**, **Translation Overrides** and **Automations** only when the feature is enabled for your account. **On a dine-in store the Fulfillment types checkboxes are not shown at all.** If your store takes in-store (order-and-pay) orders, the whole **Fulfillment types** group is hidden on **Operations**, and **Delivery Zones** and **Pre-Orders** are not in the settings menu either. There is no dashboard control that converts a dine-in store into a pickup or delivery store — the store type is chosen when the store is created (**Takeaway**, **Dine-In** or **Digital Menu** on **Create your store**). To add pickup or delivery to an existing dine-in store, [contact storekit support](/docs/getting-started/contact-support). ## Enable Pickup Pickup is the simplest option: 1. Go to **Stores** → \[your store] → **Settings** → **Operations** 2. Under **Fulfillment types**, tick **Pickup**, then click **Save** 3. Configure pickup settings: | Setting on **Operations** | Description | | -------------------------------------------------- | ----------------------------------------------------------------------- | | **Preparation time** → **Pickup** | How long to prepare pickup orders (affects the earliest available slot) | | **Order limits** → **Pickup orders** → **Minimum** | Minimum basket value for pickup orders | | **Order limits** → **Pickup orders** → **Maximum** | Maximum basket value (leave at 0 for no limit) | ## Enable Delivery To offer delivery: 1. Go to **Stores** → \[your store] → **Settings** → **Operations** 2. Under **Fulfillment types**, tick **Delivery**, then click **Save** 3. Configure delivery settings: | Setting on **Operations** | Description | | ---------------------------------------------------- | ---------------------------------------------------------------- | | **Delivery Fee** | Base fee charged on delivery orders (delivery zones override it) | | **Order limits** → **Delivery orders** → **Minimum** | Minimum basket value for delivery | | **Order limits** → **Delivery orders** → **Maximum** | Maximum basket value (leave at 0 for no limit) | | **Preparation time** → **Delivery** | Estimated time to prepare delivery orders | ### Delivery Zones For distance-based pricing and delivery areas: 1. Go to **Stores** → \[your store] → **Settings** → **Delivery Zones** 2. Click **Add new zone** 3. Configure the zone, then click **Create zone**: | Setting | Description | | ------------------------ | ------------------------------------------------------------------------------ | | **Name** | Name for the zone (e.g. "Zone 1") | | **Driving distance** | Maximum distance from your store, in miles or kilometres based on your country | | **Delivery Fee** | Fee for this zone (enter 0 to not charge a fee) | | **Minimum spend amount** | Minimum basket for this zone | Zones can be drawn by driving distance, as a polygon, or from postcodes — see [Delivery Zones](/docs/guides/fulfillment/delivery/delivery-zones) for the other zone types. When a customer enters their address, the system calculates distance from your store and determines which zone applies. If they're outside all zones, delivery is unavailable for that address. Create multiple zones with increasing fees based on distance. For example: 0-2 miles = free delivery, 2-4 miles = £2.50, 4-6 miles = £4.00. ### Third-Party Delivery If you use a delivery service: 1. Go to **Stores** → \[your store] → **Settings** → **Integrations** 2. Connect your delivery provider ([Uber Direct](/docs/guides/integrations/delivery/uber-direct), [Shipday](/docs/guides/integrations/delivery/shipday), [Nash](/docs/guides/integrations/delivery/nash), etc.) 3. Orders are automatically dispatched to drivers ## Enable Dine-in (InStore) Dine-in is not a checkbox under **Fulfillment types** — there is no **Dine-in** toggle anywhere in store settings. A store accepts in-store orders because it was created as a **Dine-In** store; switching an existing store over is not self-serve, so [contact storekit support](/docs/getting-started/contact-support). On a dine-in store, set up table ordering: 1. Go to **Stores** → \[your store] → **Settings** → **Tables** (this entry only appears on dine-in stores) and set up table areas and tables 2. Generate QR codes for each table When customers scan a table's QR code: * The table is automatically selected * Orders include the table number/name * Pay-at-table can be enabled for bill splitting Table areas can have their own settings (e.g., enable/disable pay-at-table per area). You can configure a **table descriptor** to customise how tables are referred to (e.g., "Table", "Booth", "Room"). ## Enable Catering For large event orders with separate fulfillment options. Catering is not a checkbox under **Fulfillment types** either — the group contains only **Delivery** and **Pickup**. Catering fulfillment is enabled by storekit on request: [contact storekit support](/docs/getting-started/contact-support). Catering orders have their own: * Pickup and delivery options (`CateringPickup` and `CateringDelivery`) * Minimum order values (typically higher) * Lead time requirements * Pre-order date selection ## Order Scheduling Let customers choose when they want their order: | Option | Description | | -------------- | -------------------------------------------- | | **ASAP only** | Orders prepared immediately | | **Pre-orders** | Customers select a future date and time slot | | **Both** | Customer chooses ASAP or scheduled | When ASAP is enabled, customers can place orders up to the configured lead time (default **45 minutes**) before the first available delivery or pickup slot. If your first slot starts before your venue's stated opening time, customers may be able to order before you officially open. For example, if your first delivery slot is 4:00 PM and ASAP is enabled with a 45-minute lead time, a customer could place an order as early as 3:15 PM — even if your venue opens at 5:00 PM. To prevent pre-opening orders, either disable ASAP or set your first slot to at least your opening time plus the lead time (e.g., 5:45 PM for a 5:00 PM opening with a 45-minute lead time). See [How ASAP Delivery Interacts with Opening Hours](/docs/guides/store-settings/opening-hours#how-asap-delivery-interacts-with-opening-hours) for more detail. Pre-order settings are configured separately for pickup and delivery, with different available days for each. ## Minimum Order Values Minimum and maximum spend are set under **Order limits** on **Operations** (turn on **Limit order values**). The rows shown depend on the store type: a pickup/delivery store shows **Delivery orders** and **Pickup orders**, a dine-in store shows **In-store orders**. Each row has a **Minimum** and a **Maximum** column, and there is a separate **Minimum items** limit. Delivery minimums can also be overridden per zone under **Delivery Zones**. If a customer's basket is below the minimum, they see a message showing how much more they need to spend. ## Next Step Now configure your payment methods → [Set up payments](/docs/getting-started/launch/set-up-payments) # 6. Connect a cloud receipt printer Source: https://storekit.com/docs/getting-started/launch/connect-printing Connect a Star Micronics CloudPRNT receipt printer to storekit so kitchen tickets print automatically when new orders arrive at your venue. Connect a cloud printer to automatically print order tickets when orders come in. This step is optional - you can manage orders directly from the dashboard or via POS integration. ## Do You Need a Printer? | Use Case | Recommendation | | ---------------------------- | ----------------------------------------------------------------- | | High volume kitchen | Yes - printed tickets are faster | | Low volume / single operator | Optional - use the dashboard | | Multiple prep stations | Yes - with [split printing](/docs/guides/printing/split-printing) | | POS integration | Often not needed - orders go directly to POS | ## Supported Printers storekit works with **Star Micronics** cloud-enabled thermal printers using CloudPRNT technology. Popular models include: * Star TSP143IV (Ethernet/Wi-Fi) * Star TSP654II (Ethernet) * Star mC-Print3 (Ethernet/Wi-Fi/Bluetooth) When purchasing a printer, ensure it supports CloudPRNT. Look for "CloudPRNT" in the model specifications. The printer must have network connectivity (Wi-Fi or Ethernet) to communicate with storekit's servers. ## Setting Up a Printer Your Star printer must be connected to your router via an ethernet (LAN) cable for reliable cloud printing. WiFi-only setups are not recommended and may fail to connect. A USB connection to a till, laptop or tablet does not connect the printer to storekit — orders are fetched from the cloud over your network, never over USB. Ensure you have a LAN cable available before starting setup. If your router is not near the printer, use a long LAN cable, network switch, or a 4G router with a LAN port. Connect your printer to your network via Ethernet and power it on. The printer needs internet access to receive orders from storekit. Go to **Stores** → your store → **Settings** → **Direct Printing** and click **Add Printer**. Enter your printer's MAC address (found on a test print — hold the FEED button while powering on the printer) and give it a descriptive name (e.g., "Kitchen Printer", "Bar Printer"). Set print options: * Paper width (80mm is standard for receipts) * Number of copies per order * Auto-print or manual print Click **Test Print** to verify the connection and check the output format. ## What Prints Order tickets include: * Order number * Customer name and contact details * Fulfillment type (Pickup, Delivery, Dine-in) and requested time * Table number (for dine-in orders) * Items with modifiers and special instructions * Order notes * Payment status You can customise print names for products using the [Print Name](/docs/guides/printing/print-name) feature. ## Auto Print vs Manual Print | Mode | Description | | ---------------- | -------------------------------------------------- | | **Auto print** | Tickets print automatically when orders are placed | | **Manual print** | Print tickets on-demand from the dashboard | [Learn more about auto vs manual printing →](/docs/guides/printing/auto-vs-manual) ## Split Printing If you have multiple prep stations (e.g., kitchen and bar), set up split printing: 1. Add multiple printers with descriptive names 2. Assign menu categories to each printer 3. Orders automatically split by category **Example:** * Kitchen printer → Food categories * Bar printer → Drinks categories [Learn more about split printing →](/docs/guides/printing/split-printing) ## Fallback Printing Configure a backup printer in case your primary printer goes offline: 1. Add a secondary printer 2. Set it as the fallback for your primary printer 3. If the primary fails, orders automatically route to the fallback [Learn more about fallback printing →](/docs/guides/printing/fallback-printing) ## Troubleshooting ### Printer Not Connecting * Check the printer is powered on and connected to the network * Verify the MAC address is entered correctly * Ensure the printer has internet access (not just local network) * Check your router/firewall isn't blocking outbound connections ### Orders Not Printing * Verify the printer is set as active in settings * Check the printer has paper and no error lights * Send a test print from the dashboard * Check if orders are going to a different printer (if using split printing) [Full troubleshooting guide →](/docs/guides/printing/troubleshooting) ## Next Step You're almost ready! [Test your store and go live →](/docs/getting-started/launch/test-and-go-live) # 1. Create Your Store Source: https://storekit.com/docs/getting-started/launch/create-your-store Create your first storekit store by entering your business name, address, contact details, and branding. The first step in launching your online ordering site. Create your storekit account and set up your first store with your business details. ## Sign Up 1. Go to [dashboard.storekit.com](https://dashboard.storekit.com) 2. Click **Sign Up** 3. Enter your email and create a password 4. Verify your email address ## Create Your First Store After signing up, you'll be prompted to create your first store: Enter your business name as you want customers to see it. This appears in the header of your ordering page and in order confirmation emails. Your store URL is automatically generated from your name (e.g., `order.storekit.com/your-business-name`). Start typing your business name or address to search Google Places. If your business is found, we'll automatically fill in: * Business address * Phone number * Opening hours If your business appears in the Google Places suggestions, select it to save time. You can always edit the details afterwards. Confirm or enter your full business address including street, city, and postcode. This is: * Displayed to customers on your store page * Used as the origin point for delivery distance calculations * Shown on Google Maps for pickup directions Confirm or add your business phone number. This is required for payment provider verification and may be displayed to customers. Currency and timezone are automatically set based on your store address. You can change these if needed. They determine: * How prices are displayed (symbol and formatting) * When your opening hours start and end * Timestamps on orders and reports ## Store Settings After creation, customise your store's appearance and behaviour in **Store Settings**: ### Branding | Setting | Description | | ------------------ | ---------------------------------------------- | | **Logo** | Displayed in the store header and order emails | | **Header Image** | Banner image shown at the top of your menu | | **Primary Colour** | Used for buttons, links, and accent elements | | **Favicon** | Browser tab icon for your store | ### Store Information | Setting | Description | | -------------------- | ----------------------------------- | | **Description** | Short text shown on your store page | | **Meta Title** | Browser tab title and SEO title | | **Meta Description** | SEO description for search results | | **Google Maps URL** | Custom link for directions | ### Checkout Settings Configure what customer information is collected at checkout for each fulfillment method: | Field | Options | | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | | **Email** | **Required**, **Disabled** or **Optional** | | **Phone** | **Enabled**, **Disabled**, **Validated** (with format check) or **Optional** - there is no Required option; Enabled is the mandatory setting | | **First name** / **Last name** | toggle on or off | | **Company Name** | **Required**, **Disabled** or **Optional** | | **VAT Number** | **Disabled**, **Optional (validated)**, **Required (validated)**, **Optional (free text)** or **Required (free text)** | [Full option-by-option behaviour →](/docs/guides/guest-data/overview) You can set different checkout requirements for pickup vs delivery. For example, require phone numbers for delivery orders but make them optional for pickup. ## Multiple Stores If you operate multiple locations, create additional stores from the dashboard. Each store has its own: * Menu and pricing * Opening hours * Fulfillment settings (pickup, delivery, dine-in) * Payment configuration * Branding and design All stores under one account share the same login and can be managed from a single dashboard. You can also set up a [brand page](/docs/guides/integrations/overview) that lets customers select from multiple locations. ## Next Step Once your store is created, [set your opening hours →](/docs/getting-started/launch/set-opening-hours) # 2. Set Opening Hours Source: https://storekit.com/docs/getting-started/launch/set-opening-hours Set storekit opening hours, configure multiple time slots for lunch and dinner service, and customise hours per fulfillment method like delivery or pickup. Configure when customers can place orders. Your store will only accept orders during the hours you set. ## Setting Opening Hours 1. Go to **Store Settings > Opening Hours** 2. For each day of the week (Monday through Sunday), set your opening and closing times 3. Toggle days off if you're closed 4. Click **Save** Hours are stored in `HH:mm:ss` format and displayed to customers in 12-hour format (e.g., "11:00 am - 10:00 pm"). ## Multiple Time Slots If you close during the day (e.g., between lunch and dinner), add multiple time slots per day: * **Lunch:** 11:00 am - 2:30 pm * **Dinner:** 5:00 pm - 10:00 pm Click **Add time slot** to add additional periods for the same day. Customers will see all available time slots when selecting a pickup or delivery time. ## Different Hours by Fulfillment Type You can set different hours for different fulfillment methods: | Fulfillment | Example Use Case | | ------------ | ---------------------------------- | | **Pickup** | Accept pickup orders all day | | **Delivery** | Only deliver during dinner service | | **Dine-in** | Match your restaurant floor hours | To set separate hours: 1. Go to **Store Settings > Opening Hours** 2. Click the fulfillment type tab (Pickup, Delivery, etc.) 3. Configure hours for that specific method If your delivery hours are shorter than pickup, customers outside delivery hours will only see pickup as an option. The system automatically adjusts available fulfillment methods based on current time and configured hours. ## Prep Time Set how long you need to prepare orders: 1. Go to **Store Settings > Fulfillment** 2. Set **Prep time** for pickup/dine-in orders 3. Set **Prep + delivery time** for delivery orders (includes travel time) This affects the earliest time slot customers can select. If it's 12:00 and prep time is 15 minutes, the earliest available slot is 12:15. The estimated time is displayed to customers on the menu and at checkout. ## Pre-orders Allow customers to order ahead for future dates: 1. Go to **Store Settings > Pre-orders** 2. Enable **Pre-orders** 3. Configure available pre-order days separately for pickup and delivery When pre-orders are enabled, customers can: * Select a future date from the available days * Choose a specific time slot within your opening hours * Place orders outside of current opening hours (for future fulfillment) If **Always open for pre-orders** is enabled, customers can place future orders even when your store is currently closed. ## Temporary Closures To temporarily close your store: * **Snooze** - Close for a set period (30 mins, 1 hour, etc.) * **Close for today** - Stop accepting orders for the rest of the day * **Holiday mode** - Close for multiple days Access these from the **Open/Closed** toggle in the dashboard header. When closed, customers see a "Closed" message and cannot place orders. ## Next Step Now that your hours are set, [build your menu →](/docs/getting-started/launch/build-your-menu) # 5. Set Up Payments Source: https://storekit.com/docs/getting-started/launch/set-up-payments Enable storekit Payments powered by Adyen to accept cards, Apple Pay, Google Pay, Klarna, and local methods. Connect a bank account to start receiving payouts. Set up storekit Payments to accept card payments and receive payouts to your bank account. ## storekit Payments storekit Payments is powered by Adyen, a global payment processor. It supports: * **Cards** - Visa, Mastercard, Amex, Maestro * **Digital wallets** - Apple Pay, Google Pay * **Regional methods** - Klarna, iDEAL, Bancontact, TWINT, Alipay, and more For merchants in South Africa, storekit uses [Yoco](/docs/guides/payments/yoco) as the payment provider instead of Adyen. ## Getting Started Go to **Stores** → your store → **Settings** → **Payments** and click **Create a new platform account**. Choose your business type: * **Business** - Limited Company, LLP, or PLC * **Sole Trader** - Self-employed individual Provide your business information. For UK companies, we'll look up details from Companies House automatically. Review and accept the terms of service. Complete identity and business verification. You'll need: * Photo ID (passport or driving licence) * Bank account details for payouts * Business registration details (for companies) ## Verification Verification is required to receive payouts. Most verifications complete within minutes, but some may take 24-48 hours. | What's Verified | For Sole Traders | For Companies | | ------------------------ | ---------------- | ------------- | | Identity | ✓ | ✓ | | Bank account | ✓ | ✓ | | Business registration | - | ✓ | | Beneficial owners (25%+) | - | ✓ | You must complete verification before you can accept payments. [Learn more about verification →](/docs/guides/payments/storekit-payments-setup) ## Payouts Once verified, funds are paid out to your bank account: * **Schedule** - Daily (business days, T+2 settlement) * **Time** - 5:00 AM local time * **Currency** - Your local currency [Learn more about payouts →](/docs/payouts/overview) ## Payment Methods After setup, these payment methods are automatically enabled: | Method | Availability | | --------------------------------- | ------------------ | | Cards (Visa, Mastercard, Maestro) | All stores | | American Express | Enabled by default | | Apple Pay | Apple devices | | Google Pay | Android/Chrome | ### Regional Payment Methods Additional methods can be enabled based on your region: * [**Klarna**](/docs/guides/payments/klarna) - Buy now, pay later (UK, EU) * [**iDEAL**](/docs/guides/payments/ideal) - Netherlands * [**Bancontact**](/docs/guides/payments/bancontact) - Belgium * [**TWINT**](/docs/guides/payments/twint) - Switzerland * [**Alipay**](/docs/guides/payments/alipay) - International customers from China [Contact support](/docs/getting-started/contact-support) to enable regional payment methods. ### Cash / Pay Later For dine-in orders or pickup, your store can be set up with non-card payment options: * **Cash** - Customer pays in person (no online payment required) * **Add to bill** - For pay-at-table, orders are added to an open bill These options appear at checkout based on the fulfillment method and store settings. Neither is a dashboard setting — cash is configured per fulfillment method by [support](/docs/getting-started/contact-support). See [cash and pay-on-collection orders](/docs/guides/payments/cash-payments). ## Tips & Service Charges Optionally enable tips at checkout: 1. Go to **Store Settings > Payments** 2. Enable **Tips** 3. Configure tip settings for regular orders and pay-at-table separately You can set suggested tip percentages or allow custom amounts. Service charges can be added automatically to all orders. [Learn more about tips →](/docs/guides/payments/tips-service-charges) ## Next Step With payments configured, [connect a printer →](/docs/getting-started/launch/connect-printing) or skip to [testing your store](/docs/getting-started/launch/test-and-go-live). # 7. Test & Go Live Source: https://storekit.com/docs/getting-started/launch/test-and-go-live Run through the pre-launch checklist, place a test order to verify your setup, and publish your storekit store so customers can start placing real orders. Before launching, test your store to ensure everything works correctly. Then go live and start accepting real orders. ## Pre-Launch Checklist Before testing, verify these are complete: * [ ] Store details entered (name, address, phone number) * [ ] Opening hours configured for each day * [ ] Menu built with categories, products, and prices * [ ] Fulfillment methods enabled (Pickup, Delivery, Dine-in) * [ ] Payments set up and verification completed * [ ] Printer connected (if using direct printing) * [ ] Allergen information added (legal requirement in UK/EU) ## Testing Your Store ### Place a Test Order 1. Open your store URL: `order.storekit.com/your-store-slug` 2. Select a fulfillment method (you'll be prompted if multiple are enabled) 3. Browse the menu and add items with modifiers 4. Proceed to checkout 5. Enter customer details and complete payment 6. Verify the order confirmation page Use a real card for testing - you'll receive the funds and can refund the test order afterwards. Test payments process the same as real orders. ### What to Check | Area | What to Verify | | ----------------- | ------------------------------------------------------------------ | | **Menu** | Products display correctly with images, prices, descriptions | | **Modifiers** | Required modifiers enforce selection, prices calculate correctly | | **Cart** | Items add/remove properly, totals include modifiers and fees | | **Fulfillment** | Pickup/delivery selection works, delivery zones validate correctly | | **Pre-orders** | Time slot selection works (if enabled) | | **Checkout** | Customer details form works, payment completes | | **Dashboard** | Order appears in your orders list immediately | | **Printing** | Ticket prints automatically (if using auto-print) | | **Notifications** | You receive order notification email | ### Test Different Scenarios * **Fulfillment types** - Test pickup, delivery, and dine-in separately * **Pre-orders** - Select a future date/time if scheduling is enabled * **Delivery zones** - Test addresses inside and outside your delivery area * **Minimum orders** - Try checkout below minimum to verify the warning message * **Payment methods** - Test cards, Apple Pay, Google Pay * **Devices** - Test on mobile (primary) and desktop ## Refunding Test Orders After testing, refund your test orders: 1. Go to **Orders** in the dashboard 2. Find the test order 3. Click **Refund** 4. Confirm the refund amount Funds return to the original payment method within 5-10 business days. [Learn more about refunds →](/docs/guides/payments/refunds-payouts) ## Going Live Once testing is complete: ### 1. Open Your Store Your store is controlled by the **Open/Closed** toggle in the dashboard header. Make sure it's set to **Open** during your operating hours. When closed, customers see a "Closed" message and cannot place orders (unless pre-orders are enabled with "Always open for pre-orders"). ### 2. Share Your Store Link Your store is available at: ``` https://order.storekit.com/your-store-slug ``` Share this link: * On your website (add an "Order Online" button) * In social media bios (Instagram, Facebook, etc.) * On Google Business Profile * Via QR codes printed in-store * In email signatures and marketing materials ### 3. Add to Google Business Profile Add your ordering link to Google so customers can order directly from search results: 1. Go to your Google Business Profile 2. Add the order link under "Order online" 3. Customers see an "Order" button in Google Search and Maps [Learn more about Google Business Profile →](/docs/guides/increasing-sales/google-business-profile) ## After Launch ### Monitor Orders * Keep the dashboard open during service * Enable browser notifications for new orders * Set up email notifications as backup * Configure auto-accept if you want orders confirmed automatically ### Review Analytics Track your store performance: * Order volume and revenue * Popular products * Peak ordering times * Fulfillment method breakdown ### Gather Feedback Enable [customer feedback](/docs/guides/marketing/customer-feedback) to collect reviews after orders. Pay attention to: * Customer questions or confusion * Common modification requests * Delivery time accuracy * Any technical issues ### Iterate Based on feedback: * Adjust menu descriptions for clarity * Tweak prep times based on actual performance * Update product photos * Add frequently requested modifiers * [Snooze unavailable items](/docs/guides/menu/availability-snoozing) rather than deleting them ## Need Help? * Browse the [full documentation](/docs/) for detailed guides * [Contact support](/docs/getting-started/contact-support) for assistance * Check [system status](https://status.storekit.com) if experiencing issues Congratulations - your storekit store is live! # Quick Start Guide Source: https://storekit.com/docs/getting-started/quick-start-guide Step-by-step setup guide to launch your storekit store. Create the store, build a menu, set hours, configure payments and fulfillment, and go live fast. This guide walks you through the essential steps to launch your storekit store. Most stores can be set up and taking orders within an hour. ## What You'll Need Before you start, have these ready: * Your business details (name, address, phone number) * Your menu (products, prices, descriptions) * Bank account details (for receiving payouts) * Logo and brand colour (optional but recommended) ## Setup Steps Sign up at [dashboard.storekit.com](https://dashboard.storekit.com) and create your first store. You'll enter your business name, URL slug, address, currency, and timezone. [Detailed guide →](/docs/getting-started/launch/create-your-store) Configure when your store accepts orders. Set opening and closing times for each day of the week, with support for multiple time slots (e.g., lunch and dinner service). You can set different hours for pickup vs delivery. [Detailed guide →](/docs/getting-started/launch/set-opening-hours) Create categories to organise your products, then add items with prices, descriptions, and images. Set up modifier groups for customisation options (sizes, toppings, etc.) and add allergen/dietary information. [Detailed guide →](/docs/getting-started/launch/build-your-menu) Enable the fulfillment methods you want to offer: * **Pickup** - customers collect from your location * **Delivery** - you deliver to customer addresses (with optional delivery zones) * **Dine-in** - table ordering via QR codes * **Catering** - large orders with separate pickup/delivery options Set prep times, minimum order values, and delivery fees. [Detailed guide →](/docs/getting-started/launch/configure-fulfillment) Connect storekit Payments (powered by Adyen) to accept cards, Apple Pay, and Google Pay. Complete identity verification to receive payouts to your bank account. [Detailed guide →](/docs/getting-started/launch/set-up-payments) Set up a Star Micronics cloud printer to automatically print order tickets. Skip this if you'll manage orders from the dashboard or use a POS integration. [Detailed guide →](/docs/getting-started/launch/connect-printing) Place test orders to verify the customer experience, payment flow, and order notifications. When ready, open your store and share your link. [Detailed guide →](/docs/getting-started/launch/test-and-go-live) ## Your Store URL Once created, your store is available at: ``` https://order.storekit.com/your-store-slug ``` You can also connect a custom domain like `order.yourbusiness.com`. ## Quick Wins After the basics are set up, consider these improvements: Stores with images see higher conversion rates Let customers add tips at checkout Create promo codes and automatic promotions Send orders directly to your till system ## Need Help? * Browse the [full documentation](/docs/) for detailed guides * [Contact support](/docs/getting-started/contact-support) for assistance * Check [system status](https://status.storekit.com) if experiencing issues # Set up a catering store for advance group orders Source: https://storekit.com/docs/getting-started/store-types/catering-services Configure storekit for catering services and large group orders. Enable advance scheduling, lead times, minimum order values, and dedicated catering menus. # Delivery & Pickup Store Source: https://storekit.com/docs/getting-started/store-types/delivery-pickup-store Set up a storekit Delivery & Pickup store so customers can order online for collection, delivery, or both, with ASAP or scheduled fulfilment. ## How Delivery & Pickup Stores Work * Customers order from your online store * You can enable pickup, delivery, or both * Customers can order ASAP or schedule orders in advance if [pre-orders](/docs/guides/orders/advanced/pre-orders) are enabled * Orders appear in your storekit order dashboard * Integrated stores can send orders to a connected POS or delivery partner * Payments can be taken online once storekit Payments is activated ## Before You Start Before going live, make sure you have: * Your store profile and basic store information * Opening hours * Pickup and/or delivery settings * A menu * Payment setup * Delivery zones, if you offer delivery * Drivers or a 3rd-party courier integration (delivery) * A way to receive and manage incoming orders ## How to Set Up a Delivery & Pickup Store From your storekit dashboard, go to **Stores**. Open the store you want to set up, or create a new store if one has not been created yet. Add the key information customers will see on your online store. This can include: * Store name * Store description * Website * Logo * Social links * Store address * Contact details Go to **Store Settings > Opening Hours** and set the days and times your store is open. Opening hours help control when customers can place orders and when fulfilment slots are available. Go to **Store Settings > Operations**. Under fulfilment settings, choose whether this store should accept: * Pickup orders * Delivery orders * Both pickup and delivery Pickup and delivery can be enabled separately, depending on how your venue operates. For the full setup steps, see: * [**Enabling Pickup**](/docs/enabling-pickup) * [**Enabling Delivery**](/docs/guides/fulfillment/delivery/enabling-delivery) Save your changes once updated. Go to **Store Settings > Pre-orders** if you want customers to order in advance. Pre-orders let customers choose a future pickup or delivery time. You can configure pickup and delivery separately, including slot length, capacity, scheduling notice, and available times. More info available [here](/docs/guides/orders/advanced/pre-orders) Set up the menu customers will order from. For standalone stores, you can create your menu in storekit. For integrated stores, your menu may need to be created or synced from your POS or integration partner. Make sure your menu is accurate before going live, including: * Categories * Items * Prices * Modifiers * Availability Go to **Store Settings > Payments** and activate storekit Payments. You may need to submit business, owner, and bank details before payments can be approved. Customers can only pay online once payments have been activated. If your store accepts delivery orders, go to **Store Settings > Delivery Zones**. Delivery zones control where you deliver and can include delivery fees or minimum order values depending on your setup. You can create delivery zones using options such as: * Driving distance * Polygon * Circle * Postcode Before going live, place a test order to confirm the customer journey works as expected. Check that: * The correct fulfilment options appear at checkout * Pickup and delivery slots are available * Menu items and prices are correct * Payment is working * The order appears in the storekit order dashboard * Any connected POS, printer, or integration receives the order correctly Use a real card for testing - you’ll receive the funds and can refund the test order afterwards. Test payments process the same as real orders. [How to place a test order](/docs/getting-started/launch/test-and-go-live) Once the store is ready, share your store URL or QR code with customers. You can use your store URL on your website, social media, email campaigns, or printed materials. When setup and testing are complete, enable the store so customers can start placing orders. ## Integrated Stores If your store is connected to a POS or integration partner, some setup steps may happen outside storekit. For example: * Menus may need to be created or published from your POS * Orders may print from your POS printer * Delivery partners may need separate configuration * Item availability or pricing may be controlled by the integration Check the integration setup before going live. Pickup and delivery are enabled from **Store Settings > Operations**. You can enable either option individually or use both together. Place a test order before going live to confirm orders are received correctly in storekit and any connected POS, printer, or integration. For integrated stores, some menu, printing, and order settings may be controlled by your POS or integration partner rather than storekit. ## Troubleshooting #### Customers cannot choose pickup or delivery Check that the fulfilment type is enabled under **Store Settings > Operations**. Also check your opening hours and pre-order settings if customers are trying to order for a future time. #### Customers cannot place delivery orders Check that delivery is enabled under **Store Settings > Operations**. If delivery zones are configured, make sure the customer’s address is covered by an active delivery zone. If no delivery zones are configured, customers may be able to place delivery orders from any address, depending on your store setup. Also check your opening hours and pre-order settings if customers are trying to place an order for a future time. #### Orders are not printing or reaching the POS Check whether the store is integrated with a POS or order partner. For integrated stores, test orders should be checked in both storekit and the connected POS or integration system. ## Related * [**Enabling Pickup**](/docs/enabling-pickup) — enable collection orders for your store * [**Enabling Delivery**](/docs/guides/fulfillment/delivery/enabling-delivery) — enable delivery orders for your store * [**Pre-orders**](/docs/guides/orders/advanced/pre-orders) — let customers order for a future date or time * [**Delivery Zones**](/docs/guides/fulfillment/delivery/delivery-zones) — configure where delivery is available * [**Tips & Service Charges**](/docs/guides/payments/tips-service-charges) — set up tips, fixed fees, or service charges * [**Refunds & Payouts** ](/docs/guides/payments/refunds-payouts)— process refunds and understand payout impact # Dine-In (Order & Pay) Source: https://storekit.com/docs/getting-started/store-types/dine-in-order-and-pay Set up a dine-in Order & Pay store so customers can scan a QR code, browse the menu, and pay from their phone while seated at the table. An Order & Pay store lets customers scan a QR code, browse the menu, place an order, and pay from their phone while seated at the venue. This store type is best for dine-in venues that want customers to order directly from their table, reduce queueing, and send orders into the venue’s normal preparation workflow. Order & Pay is available on the **storekit+** subscription. If you need to enable Order & Pay or confirm whether your store is eligible, contact storekit Support. Order & Pay requires a **storekit+** subscription. Contact storekit Support if you need to enable this store type or confirm whether your store is eligible. ## How Order & Pay Stores Work * Customers scan a QR code from their table or area * Customers browse the dine-in menu from their phone * Customers place and pay for their order through storekit * Orders appear in the storekit order dashboard * Orders can be sent to a connected POS or printer, depending on your setup * Staff prepare and serve the order as part of the venue’s dine-in workflow ## Before You Start Before going live, make sure you have: * An active **storekit+** subscription * Store profile details ready, including name, description, logo, address, website, and contact details * Opening hours confirmed * Order notification settings confirmed * Fees, tips, and service charge settings confirmed * A dine-in menu ready for customers to order from * Table numbers, zones, or areas confirmed * QR codes created for each table or area (one generic table selector QR is also possible) * storekit Payments activated * POS integration confirmed, if orders need to be sent to your POS * Printing or kitchen routing configured, if used * A staff process for monitoring and managing incoming orders ## How to Set Up an Order & Pay Store From your storekit dashboard, go to **Stores**. Open the store you want to set up, or create a new store if one has not been created yet. Add the key information customers will see on your online store. This can include: * Store name * Store description * Website * Logo * Social links (Instagram) * Store address * Contact details * Opening hours * Order notification settings * Fees, tips, and service charge settings Order & Pay needs to be enabled for your store. If you cannot see the Order & Pay setup options, contact storekit Support to confirm whether your store is eligible and enabled on the correct subscription. Create or sync the menu customers will order from. For standalone stores, you can create your menu directly in storekit by adding items and categories manually. Depending on your setup, menus may also be created from a spreadsheet, PDF, or website import. For integrated stores, your menu may need to be synced or published from your POS or integration partner. Before going live, check: * Categories * Items * Prices * Modifier groups and options * Availability * Images and descriptions, if used * Allergens or dietary information, if used (recommended) Order & Pay orders are paid through **storekit Payments**. Go to **Store Settings > Payments** and activate payments. You may need to submit business, owner, and bank details before payments can be approved. This can include: * Legal business or trading name * Applicant or executive details * Business owner details, if applicable * Bank proof dated within the last 12 months Customers can only pay through Order & Pay once payments have been activated. Go to your store settings and confirm whether tips or service charges should be applied. Tips are optional amounts customers can choose at checkout. Service charges are configured as part of your store setup. Fixed service charges can be managed from **Store Settings > Operations**, while percentage-based service charges for Order & Pay stores need to be configured by storekit Support. Order & Pay stores cannot have both percentage-based service charges and tips enabled at the same time. Set up the table numbers, zones, or areas customers will order from. Each QR code should direct the customer to the correct store and table or area, so staff know where the order should be served. Order & Pay works best when each table or area has a unique QR code. Each QR code should direct the customer to the correct store and table or area, so staff know where the order should be served. Before printing or sharing QR codes, test that each code opens the correct store, menu, and table or area. If you need branded QR codes or printed table materials, contact your account manager or storekit Support. storekit also provides free downloadable QR codes from the dashboard. These are standard QR codes you can download and print yourself. Bespoke QR plaques use dynamic QR codes, which are different from the free downloadable QR codes available in the storekit dashboard. Make sure you are using the correct QR code type before printing or ordering materials. If orders need to be sent to a POS, printer, or kitchen display system, check that routing is configured correctly. This may include: * POS location mapping * Printers * Kitchen display screens * Printing profiles * Production centres * Category or item routing * Table information on printed tickets Before going live, place test orders from different QR codes. Check that: * The QR code opens the correct store * The correct table or area is attached to the order * The menu, prices, modifiers, tips, and service charges are correct * Payment is completed through storekit * The order appears in the storekit order dashboard * The order reaches the POS, printer, or kitchen display system if connected * Staff can identify where the order should be served Once setup and testing are complete, enable your store so customers can start placing orders. Place QR codes on the tables or areas customers will use, and monitor the first live orders closely to confirm the dine-in workflow is working as expected. ## What Customers Can Do With Order & Pay, customers can: * Scan a QR code from their table or area * Browse the menu from their phone * Add items and modifiers to their order * Add tips, if enabled * Pay through storekit * Place additional orders from the same table or area, if needed ## What Staff Need to Check Staff should know how to: * Monitor incoming Order & Pay orders * Check the table or area attached to each order * Confirm whether the order has been paid * Prepare and serve orders through the venue’s normal workflow * Handle failed, cancelled, or refunded orders * Escalate POS, printing, or payment issues if needed Order & Pay requires a **storekit+** subscription. Contact storekit Support if you need to enable this store type or confirm whether your store is eligible. Always test your QR codes before going live to confirm they open the correct store, menu, and table or area selection flow. Order & Pay stores cannot have both percentage-based service charges and tips enabled at the same time. If a percentage-based service charge is enabled, tipping is automatically disabled. ## Troubleshooting #### Customers cannot open the menu Check that the QR code points to the correct store and that the store is live. If the QR code was created for a specific table or area, make sure that table or area still exists and is active. #### The wrong table is showing on the order Check how the QR code is configured. For table-specific QR codes, make sure the QR code is linked to the correct table or area. For a generic table-selector QR code, make sure customers are selecting the correct table or area before placing their order. If QR codes were moved between tables, replace or relabel them so the correct table is attached to each order. #### Orders are not reaching the POS Check that the POS integration is connected and that the correct POS location is mapped. Also check whether the order failed because of missing items, modifier issues, unavailable products, or POS connection errors. #### Orders are reaching the POS but not printing Check your POS printing setup. This may include printers, kitchen display screens, printing profiles, production centres, or item/category routing. #### Customers cannot pay using card/Apple Pay Check that storekit Payments is active and that the available payment methods are configured correctly. If payments are still pending verification, customers will be able to place cash orders only. Once payments are active, cash ordering is normally switched off for the store. There is no cash toggle in the dashboard, so [contact support](/docs/getting-started/contact-support) if cash is still offered at checkout — see [cash and pay-on-collection orders](/docs/guides/payments/cash-payments). #### Tips or service charges look wrong Check your tips and service charge settings. Tips are managed from **Store Settings > Gratuity**. Fixed service charges are managed from **Store Settings > Operations**. Percentage-based service charges for Order & Pay stores need to be configured by [storekit Support](/docs/getting-started/contact-support). ## Related * [**Tips & Service Charges** ](/docs/guides/payments/tips-service-charges)— set up tips, fixed fees, or service charges * [**POS-Connected Store**](/docs/getting-started/store-types/pos-connected-store) — set up a store connected to your POS * [**POS Integration Overview**](/docs/guides/integrations/overview) — understand how POS integrations work * [**Order Injection**](/docs/guides/integrations/pos/order-injection) — send storekit orders to your POS * [**Tables and Areas**](/docs/guides/fulfillment/dine-in-tables) — set up table numbers, zones, or areas * [**Order Batching**](/docs/guides/orders/advanced/order-batching) — control how Order & Pay orders are grouped * [**Refunds & Payouts**](/docs/guides/payments/refunds-payouts) — process refunds and understand payout impact * [**Managing Live Orders**](/docs/guides/orders/managing-live-orders) — handle incoming orders in real time # Dine-In (Pay at Table) Source: https://storekit.com/docs/getting-started/store-types/dine-in-pay-at-table Set up Pay at Table for restaurants and bars so dine-in guests can scan a QR code, view their itemized bill, and pay from their phone via the POS. Pay at Table (PAT) lets dine-in guests scan a QR code at their table, view their bill, and pay from their phone. Orders are placed through your venue's normal workflow (POS, waitstaff), and storekit handles the payment step — no card machines, no waiting for the bill. This is different from [Order & Pay](/docs/getting-started/store-types/dine-in-order-and-pay), where customers also browse the menu and place orders through storekit. With Pay at Table, storekit only handles the bill and payment. Pay at Table requires a **storekit+** subscription and a compatible POS integration. Contact [storekit Support](/docs/getting-started/contact-support) if you need to confirm whether your store is eligible. ## How Pay at Table Works 1. Staff take orders and send them to the POS as normal 2. When ready to pay, the guest scans a QR code at their table 3. The guest sees their itemized bill on their phone in real-time 4. The guest pays using card, Apple Pay, or Google Pay 5. Payment syncs to your POS and the bill closes automatically The entire payment process takes under 30 seconds. ## Before You Start Before enabling Pay at Table, make sure you have: * An active **storekit+** subscription * A compatible POS integration connected and working (see [POS Integration Overview](/docs/guides/integrations/overview)) * Table numbers or areas configured in your POS and in storekit * storekit Payments activated * QR codes ready to generate for each table * A staff process for monitoring payment status ## How to Set Up Pay at Table Pay at Table requires a **storekit+** subscription. If you are not sure whether your store has the correct subscription, contact [storekit Support](/docs/getting-started/contact-support) with your store name and the venues you want to enable. Pay at Table requires a compatible POS integration so that bills can sync to storekit in real-time. Go to **Stores** → your store → **Settings** → **Integrations** and connect your POS system. For POS-specific setup steps, see the relevant guide under [POS Integrations](/docs/guides/integrations/overview). Not all POS systems support Pay at Table. Check the integration guide for your POS to confirm compatibility before proceeding. Go to **Store Settings > Payments** and activate storekit Payments. For the full setup steps, see [**Set Up Payments**](/docs/getting-started/launch/set-up-payments). Guests cannot pay through Pay at Table until payments have been activated. Configure your table numbers, zones, or areas so that each QR code links to the correct table and bill. For detailed setup steps, see [**Dine-in & Tables**](/docs/guides/fulfillment/dine-in-tables). Make sure table numbers in storekit match the table numbers in your POS — mismatched tables will prevent bills from syncing correctly. Go to **Store Settings > Gratuity** and configure whether tips should appear at checkout. Tip suggestions are shown to guests on the payment screen. You can configure the suggested amounts or disable tips entirely. Digital tipping typically increases gratuity compared to traditional card machine prompts. Each table needs a unique QR code that links to that table's bill. From your storekit dashboard, go to the table setup section and generate QR codes for each table. You can download and print these QR codes yourself. Before printing, test that each QR code opens the correct store and table. storekit provides free downloadable QR codes from the dashboard. If you need branded QR plaques, contact your account manager or [storekit Support](/docs/getting-started/contact-support). Bespoke plaques use dynamic QR codes, which are different from the free downloadable codes. Before going live, make sure staff understand: * How to check whether a table has paid (via POS or storekit dashboard) * How to handle partial payments and split bills * What to do if a payment fails or does not appear * That guests pay from their phone — no card machine is needed for Pay at Table orders For more detail on checking payment status, see [**Checking Payments**](/docs/guides/pay-at-table/checking-payments). Before going live, test the full flow with a real card: * Place an order through the POS as normal * Scan the table QR code from a phone * Confirm the correct bill and items appear * Complete a payment using a real card * Verify the payment appears on the POS and in the storekit dashboard * Test split payments, if you plan to offer them Use a real card for testing — you'll receive the funds and can refund the order afterwards. Once setup and testing are complete, place QR codes on every table and enable Pay at Table for your store. Monitor the first live payments closely to confirm the flow is working as expected. ## Customer Experience From the guest's perspective, Pay at Table works like this: 1. **Dine as normal** — order through waitstaff, enjoy the meal 2. **Scan the QR code** — when ready to pay, scan the code on the table with their phone camera 3. **View the bill** — see an itemized bill that updates in real-time as items are added in the POS 4. **Choose how to pay** — pay the full bill, split by item, or split evenly with others at the table 5. **Add a tip** — choose a tip amount, if enabled 6. **Pay** — tap to pay with card, Apple Pay, or Google Pay 7. **Done** — receive a digital receipt by email and leave when ready Guests do not need to download an app or create an account. ## Multi-Store Setup Pay at Table is enabled per store. If you operate multiple venues, you need to set up Pay at Table for each store individually. For each store: 1. Confirm the storekit+ subscription is active 2. Connect the correct POS integration and location 3. Set up tables and generate QR codes specific to that store 4. Activate payments 5. Test the flow at each venue before going live If you need to enable Pay at Table across many locations, contact [storekit Support](/docs/getting-started/contact-support) with the list of store names and venues. The support team can help coordinate a multi-site rollout. ## Troubleshooting #### Guest scans the QR code but no bill appears Check that: * The table has an open bill on the POS * The POS integration is connected and syncing correctly * The QR code is linked to the correct table * The store is live and Pay at Table is enabled #### Payment does not appear on the POS There may be a short sync delay. Check the storekit dashboard to confirm the payment was successful. If the payment shows as complete in storekit but is missing from the POS, see [**Checking Payments**](/docs/guides/pay-at-table/checking-payments) for reconciliation steps. #### Guest paid the wrong table's bill Make sure QR codes are clearly placed and match the correct table number. If QR codes were moved between tables, replace or relabel them. #### Tips or service charges look incorrect Check your tip and service charge settings in **Store Settings > Gratuity** and **Store Settings > Operations**. ## Related * [**Pay at Table Overview**](/docs/guides/pay-at-table/overview) — detailed feature overview and benefits * [**Checking Payments**](/docs/guides/pay-at-table/checking-payments) — verify payment status from POS or dashboard * [**Dine-in & Tables**](/docs/guides/fulfillment/dine-in-tables) — set up table numbers, zones, or areas * [**POS Integration Overview**](/docs/guides/integrations/overview) — understand how POS integrations work * [**Order & Pay**](/docs/getting-started/store-types/dine-in-order-and-pay) — alternative dine-in mode where customers also order through storekit * [**Tips & Service Charges**](/docs/guides/payments/tips-service-charges) — set up tips, fixed fees, or service charges * [**Refunds & Payouts**](/docs/guides/payments/refunds-payouts) — process refunds and understand payout impact * [**Contact Support**](/docs/getting-started/contact-support) — get help from the storekit team # POS-Connected Store Source: https://storekit.com/docs/getting-started/store-types/pos-connected-store Connect storekit to your POS system so orders, menus, printing, and payments flow into your venue workflow. Available on the storekit+ subscription. ## Supported POS Systems storekit supports POS integrations for selected systems, including: * [Centegra](/docs/guides/integrations/pos/centegra) * [Lightspeed K-Series](/docs/guides/integrations/pos/lightspeed/overview) * [PointOne](/docs/guides/integrations/pos/pointone) * [TISSL](/docs/guides/integrations/pos/tissl) * [Toast](/docs/guides/integrations/pos/toast/overview) * [Zonal / Aztec](/docs/guides/integrations/pos/zonal) POS integration availability depends on your store setup, subscription, and the features supported by each POS. For POS-specific setup steps, see the relevant POS integration guide. ## How POS-Connected Stores Work * Customers place orders through storekit or a connected ordering channel * Orders can be sent to your connected POS * The POS may send orders to kitchen printers or a kitchen display system * Menus may be synced from your POS or managed in storekit, depending on the integration * Payments are normally processed through storekit, except for [Pay at Table](/docs/getting-started/store-types/dine-in-pay-at-table) setups where payment may be taken externally through the venue’s POS or card machine. For more detail on integration types and supported POS features, see [**POS Integration Overview**.](/docs/guides/integrations/overview) ## Before You Start Before going live, make sure you have: * An active **storekit+** subscription * Access to your storekit dashboard * Access to your POS account or back office * The correct POS location or site details * A menu ready to import, sync, or link * Payment setup confirmed * Printing or kitchen routing configured in the POS, if used * A process for testing orders before launch ## How to Set Up a POS-Connected Store From your storekit dashboard, go to **Stores**. Open the store you want to connect, or create a new store if one has not been created yet. Go to **Stores** → your store → **Settings** → **Integrations**. Select the POS integration you want to connect and enter the required details. The setup required depends on your POS. Some integrations may need an API key, site ID, location ID, or other account details. For more information, see the relevant POS integration guide. Make sure the storekit store is connected to the correct POS location. This is important for order routing, menu sync, printing, and reporting. Set up the menu customers will order from. Depending on the POS integration, your menu may be: * Synced from your POS * Imported into storekit * Managed directly in storekit * Linked to POS product IDs or PLUs * Managed through an integration partner For more detail, see [**POS Menu Sync**.](/docs/guides/menu/pos-menu-sync) Before going live, check that the menu is correct. Review: * Categories * Items * Prices * Modifier groups and options * Availability * Images and descriptions, if used * Product IDs or PLUs, if required Go to **Store Settings > Operations**. Choose which fulfilment types this store should support, such as: * Pickup * Delivery * Dine-in / Order & Pay Pickup and delivery can be enabled separately. For detailed setup steps, see [**Enabling Pickup**](/docs/enabling-pickup) and [**Enabling Delivery**](/docs/guides/fulfillment/delivery/enabling-delivery). For POS-connected stores, payments are normally processed through **storekit Payments**. The main exception is **Pay at Table**, where the customer may pay externally through the venue’s POS card machine or another in-venue payment method, depending on the setup. Before going live, confirm: * storekit Payments is active * The correct payment methods are available at checkout * Pay at Table payment behaviour is understood, if used * Staff know where to check whether an order or bill has been paid If orders print through your POS, check that printing and routing are configured correctly in the POS. This may include: * Printers * Kitchen display screens * Printing profiles * Production centres * Category or item routing Before going live, place test orders for each order type you plan to support. Test as many items and modifiers from different categories as needed (e.g., drinks and food are routed to the correct printers). Check that: * The order appears in storekit * The order reaches the correct POS location * Items, modifiers, notes, discounts, tips, and service charges are correct * Pickup, delivery, or table details are included * Pre-order times are passed correctly, if used * Order/item notes are displayed * Printing or kitchen routing works as expected * Payment status is correct Once testing is complete, enable the store or connected channel so customers can start placing orders. Continue monitoring the first live orders to confirm the POS integration is working as expected. ## What May Be Controlled by the POS For POS-connected stores, some settings may be controlled outside storekit. This can include: * Menu items * Prices * Modifiers * Availability * Tax settings * Printing * Kitchen routing * Table or bill details If something does not update in storekit, check whether it needs to be changed in the POS first and then synced. POS integrations require a **storekit+** subscription. Contact storekit Support if you need to upgrade your plan or confirm whether your store is eligible. Always place test orders before launch to confirm orders reach the correct POS location and include the right items, modifiers, prices, and fulfilment details. If the wrong POS location is connected, orders may be sent to the wrong venue or fail to send. ## Troubleshooting #### Menu changes are not appearing in storekit Check where the menu is managed. If the menu is controlled by the POS, update the menu in the POS first, then run a menu sync if required. For more detail, see [**POS Menu Sync**](/docs/guides/menu/pos-menu-sync). #### Orders are not reaching the POS Check that the POS integration is connected and that the correct POS location is mapped. Also check whether the order failed because of missing items, modifier issues, unavailable products, or POS connection errors. #### Orders are reaching the POS but not printing Check your POS printing setup. This may include printers, kitchen display screens, printing profiles, production centres, or item/category routing. #### Prices or modifiers look different Check whether prices and modifiers are managed in storekit, the POS, or an integration partner. Some integrations use POS-side pricing, while others use storekit menu settings. #### Pre-orders are not showing correctly in the POS Check whether your POS integration supports pre-orders and whether scheduled order times are passed through. This is often called **order buffering** in storekit and integrated POS systems. Place a test pre-order before going live. ## Related * [**POS Integration Overview**](/docs/guides/integrations/overview) — understand how POS integrations work * [**POS Menu Sync** ](/docs/guides/menu/pos-menu-sync)— import or update menu data from your POS * [**Order Injection**](/docs/guides/integrations/pos/order-injection) — send storekit orders to your POS * [**Fallback Printing** ](/docs/guides/printing/fallback-printing)— automatically print orders when POS order injection fails * [**Enabling Pickup**](/docs/enabling-pickup) — enable pickup/collection orders for your store * [**Enabling Delivery**](/docs/guides/fulfillment/delivery/enabling-delivery) — enable delivery orders for your store * [**Pre-orders**](/docs/guides/orders/advanced/pre-orders) — let customers order for a future date or time # Supported Regions Source: https://storekit.com/docs/getting-started/supported-regions Reference for the countries, languages, and currencies supported by storekit, including which regions support storekit Payments and local payment methods. storekit is available in multiple countries with support for local languages and payment processing. ## Supported Countries | Country | Language Support | Payments | | ------------------- | ------------------------- | -------- | | 🇬🇧 United Kingdom | ✓ English | ✓ GBP | | 🇮🇪 Ireland | ✓ English | ✓ EUR | | 🇩🇪 Germany | ✓ German | ✓ EUR | | 🇦🇹 Austria | ✓ German | ✓ EUR | | 🇨🇭 Switzerland | ✓ German, French, Italian | ✓ CHF | | 🇫🇷 France | ✓ French | ✓ EUR | | 🇧🇪 Belgium | ✓ French, Dutch | ✓ EUR | | 🇳🇱 Netherlands | ✓ Dutch | ✓ EUR | | 🇪🇸 Spain | ✓ Spanish | ✓ EUR | | 🇮🇹 Italy | ✓ Italian | ✓ EUR | | 🇵🇹 Portugal | ✓ Portuguese | ✓ EUR | | 🇬🇷 Greece | ✓ Greek | ✓ EUR | | 🇭🇷 Croatia | ✓ English | ✓ EUR | | 🇨🇾 Cyprus | ✓ English | ✓ EUR | | 🇪🇪 Estonia | ✓ English | ✓ EUR | | 🇱🇻 Latvia | ✓ English | ✓ EUR | | 🇱🇹 Lithuania | ✓ English | ✓ EUR | | 🇱🇺 Luxembourg | ✓ French, German | ✓ EUR | | 🇲🇹 Malta | ✓ English | ✓ EUR | | 🇸🇰 Slovakia | ✓ Slovak | ✓ EUR | | 🇸🇮 Slovenia | ✓ English | ✓ EUR | | 🇸🇪 Sweden | ✓ Swedish | ✓ SEK | | 🇩🇰 Denmark | ✓ English | ✓ DKK | | 🇳🇴 Norway | ✓ English | ✓ NOK | | 🇫🇮 Finland | ✓ English | ✓ EUR | | 🇵🇱 Poland | ✓ Polish | — | | 🇺🇸 United States | ✓ English | ✓ USD | | 🇨🇦 Canada | ✓ English, French | ✓ CAD | | 🇦🇺 Australia | ✓ English | ✓ AUD | | 🇳🇿 New Zealand | ✓ English | ✓ NZD | | 🇲🇽 Mexico | ✓ Spanish | — | | 🇿🇦 South Africa | ✓ English | ✓ ZAR | | 🇦🇱 Albania | ✓ English | ✓ ALL | | 🇧🇬 Bulgaria | ✓ English | ✓ EUR | | 🇹🇷 Turkey | ✓ Turkish | — | | 🇲🇦 Morocco | ✓ French | — | ## Supported Languages storekit's ordering experience is fully translated into: * English (UK, US) * German (Germany, Austria) * French * Spanish (Spain, Mexico) * Italian * Dutch * Portuguese * Swedish * Polish * Greek * Turkish * Chinese (Simplified, Traditional) * Slovak Store dashboards are available in English. The customer-facing ordering experience supports all listed languages. ## Supported Currencies Payment processing is available for the following currencies: | Currency | Code | Regions | | ------------------ | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | British Pound | GBP | United Kingdom | | Euro | EUR | Ireland, Germany, Austria, France, Belgium, Netherlands, Spain, Italy, Portugal, Greece, Finland, Croatia, Cyprus, Estonia, Latvia, Lithuania, Luxembourg, Malta, Slovakia, Slovenia, Bulgaria | | US Dollar | USD | United States | | Canadian Dollar | CAD | Canada | | Australian Dollar | AUD | Australia | | New Zealand Dollar | NZD | New Zealand | | Swiss Franc | CHF | Switzerland | | Swedish Krona | SEK | Sweden | | Danish Krone | DKK | Denmark | | Norwegian Krone | NOK | Norway | | South African Rand | ZAR | South Africa | | Albanian Lek | ALL | Albania | ## Expanding to a New Region If you're looking to launch in a country not listed above, [contact our team](/docs/getting-started/contact-support) to discuss availability and timelines. # What is storekit? Source: https://storekit.com/docs/getting-started/what-is-storekit Learn what storekit is and how the QR code ordering and payment platform helps restaurants, bars, and hospitality venues take orders without an app or download. storekit is a mobile ordering and payment platform built for restaurants, bars, and hospitality venues. Customers place orders through a QR code (in-venue) or a shared link (off-premise) — no app download required. ## How It Works Customers scan a QR code at your venue or open your ordering link on their phone. They browse your digital menu, place an order, and pay — all from their device. ## Ordering Modes storekit supports three core ordering modes: | Mode | Description | | ------------------------- | --------------------------------------------------------------------------------- | | **Order & Pay** | Dine-in ordering where customers order and pay from their table via QR code | | **Collection & Delivery** | Takeaway ordering for pickup or delivery, accessible via a shared link or QR code | | **Pay at Table** | Bill settlement where customers view and pay their bill directly from their phone | ## What You Get * **Fully customisable digital menu** — products, categories, modifiers, images, and allergen information * **Back-office dashboard** — manage orders, view reports, configure settings, and control your menu in real-time * **No customer app required** — your menu works in any mobile browser ## Key Benefits * **Increase revenue** — upsell with modifiers, suggested items, and promotions * **Reduce wait times** — customers order directly without queuing * **Streamline operations** — orders flow straight to your kitchen via dashboard, POS, or printer * **Capture customer data** — collect emails and phone numbers at checkout for marketing * **Integrate with your stack** — connect to POS systems, delivery providers, and analytics tools ## Next Steps Set up your store and start taking orders See where storekit is available # Auto-Applied Discounts Source: https://storekit.com/docs/guides/discounts/auto-applied Set up auto-applied discounts that activate at checkout without requiring a code. Reward customers automatically when their order matches your conditions. Auto-applied discounts activate automatically when a customer's order meets the configured conditions. No code is needed — the discount appears in the cart without any action from the customer. Auto-applied discounts require storekit+ ## How It Works 1. You create a discount and toggle **Auto apply** on 2. While the discount is active — enabled, within its date range, on an allowed day and time, and matching the order type — it attaches to any basket that meets the minimum spend. If several auto-applied discounts qualify at once, only one is attached — storekit picks by type, not by value (see [Buy X Get Y →](/docs/guides/discounts/buy-x-get-y#combining-with-other-settings)) 3. The discount value is then worked out from the basket. Category and product restrictions are applied at that point, so only eligible items are discounted Attaching and calculating are two separate steps, and that ordering matters when the discount is restricted to part of the menu — see [Restricted Discounts and Baskets With No Eligible Items](#restricted-discounts-and-baskets-with-no-eligible-items). ## Benefits * **Frictionless savings** - Customers don't need to find or remember a code * **Encourages bigger baskets** - Customers see the discount potential and add more items * **Perfect for targeted promotions** - Apply to specific items or categories seamlessly * **Higher conversion** - Removing the code entry step reduces checkout friction ## Creating an Auto-Applied Discount 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** 3. Choose the **Type** (**Percentage**, **Fixed**, or **Free delivery**) 4. Enter the **Value** 5. Toggle **Auto apply** on 6. To limit the discount to part of the menu, click **Manage Restrictions** under **Stores** 7. Configure any additional restrictions 8. Click **Create Discount** ## Targeting Options Scope is set per store under **Stores** → **Manage Restrictions** → **Restrict by**: | Scope | Description | Example | | -------------------------------- | ---------------------------------------------------- | --------------------------- | | No restrictions | Discount applies to the entire order | 10% off all orders over £20 | | **Restrict by** → **Categories** | Only items in the selected categories are discounted | 20% off desserts | | **Restrict by** → **Products** | Only the selected products are discounted | 50% off featured item | Redemption limits do not work with auto-applied discounts. If you need to limit the number of times a discount can be used, use a [code-based discount](/docs/guides/discounts/discount-codes) instead. ## Restricted Discounts and Baskets With No Eligible Items A restricted auto-applied discount attaches to the basket whenever it is active, whether or not the basket contains any of the items it covers. Eligibility is applied when the value is calculated, not when the discount is chosen, so a basket with no eligible items gets a discount worth £0.00 rather than no discount at all. **Example:** a Happy Hour discount is 20% off the Cocktails category, auto-applied, valid daily from 5pm. A customer orders two Margherita Pizzas for collection at 6pm and no drinks. The discount attaches to their order, no item is eligible, and the order total is unchanged. What each side sees for that order: | Where | What is shown | | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Customer's basket on the menu | No discount line. The line only appears once the discount reduces the total | | Customer's basket at checkout | A **Discount code** line, with the code shown as applied. For a percentage discount it reads **Discount code** (20%) with a value of £0.00. For a fixed-amount discount it shows the discount's face value (for example -£5.00) even though the total is unchanged | | Merchant's view of the order | A **Discount** line with the discount code and a value of (£0.00) | Nothing is deducted from the items, and the customer pays their full price. The order still counts towards the discount's usage total. In **All Orders**, the **Discounted** filter only returns orders where the discount reduced the total, so a £0.00 order is not counted as discounted. ### Delivery Fees Are Discounted Separately Menu restrictions cover items, not the delivery fee, so on a delivery order the same discount can still reduce the fee when no item is eligible: * A percentage discount takes its percentage off the delivery fee as well, unless **Exclude delivery fee from discount** is toggled on for it. The Happy Hour example ordered for delivery would take 20% off the fee, and the total would drop by that much * A fixed-amount discount larger than the basket subtotal has the remainder taken off the delivery fee, again unless **Exclude delivery fee from discount** is on Turn **Exclude delivery fee from discount** on if a restricted discount should only ever affect the items it covers. There is no setting that makes an auto-applied discount attach only when the basket contains eligible items, and no way to hide the zero-value line at checkout. If the discount must be invisible unless it actually applies, use a [code-based discount](/docs/guides/discounts/discount-codes) instead: nothing is shown until the customer enters the code. ## Combining with Other Settings * [**Minimum spend**](/docs/guides/discounts/minimum-spend-maximum-discount) - Only apply when the order reaches a certain value * [**Maximum discount**](/docs/guides/discounts/minimum-spend-maximum-discount) - Cap the discount amount on larger orders * [**Availability limits**](/docs/guides/discounts/limiting-availability) - Restrict to specific days, hours, or order types * [**Scheduling**](/docs/guides/discounts/scheduling) - Automatically activate and deactivate the promotion ## Auto-Applied vs Code-Based | Feature | Auto-Applied | Code-Based | | ----------------- | -------------------------------- | ------------------------------------ | | Customer action | None | Enter code at checkout | | Visibility | Automatic in cart | Must know the code | | Best for | Site-wide offers, category deals | Targeted campaigns, influencer codes | | Redemption limits | Not supported | Supported | Use auto-applied discounts for promotions you want every eligible customer to receive, and [discount codes](/docs/guides/discounts/discount-codes) for exclusive offers where you want to control distribution. # Buy X Get Y Discounts Source: https://storekit.com/docs/guides/discounts/buy-x-get-y Run buy-one-get-one (BOGO) promotions in storekit. Discount a second item when a customer buys more than one of the same eligible product or category. Buy X Get Y is storekit's buy-one-get-one (BOGO) discount. When a customer buys more than one item from an eligible product or category, the cheaper item is discounted — by a set percentage, or made free. Buy X Get Y discounts require storekit+ ## How It Works You choose a set of eligible items — either specific products or a whole category. The discount only ever applies **within that set**: 1. storekit looks at every eligible item in the basket, counting quantities (three of the same drink counts as three items). 2. Those items are paired up, most expensive first. In each pair the more expensive item is charged at full price and the cheaper item is discounted. 3. The discount on the cheaper item is a percentage you choose — up to 100%, which makes it free. Because the deal pairs items **within the same eligible set**, the reward is always another one of the qualifying items. The customer sees the reduced price in their basket automatically once they have added enough eligible items. ## Examples These are the shapes Buy X Get Y can actually produce. In every case the qualifying item and the reward come from the **same** product or category. | Eligible items | Result | Use case | | -------------------------------------- | ----------------------------------------- | ----------------------- | | Any product in the **Pizzas** category | Buy one pizza, get a second pizza 50% off | Encourage larger orders | | Any product in the **Coffee** category | Buy one coffee, get a second coffee free | Classic 2-for-1 | | A specific cocktail | Two of that cocktail for the price of one | Happy-hour BOGO | | Any product in the **Sides** category | Buy two sides, get the cheaper one free | Move add-on stock | ## What the Kitchen and Your POS Receive The deal changes the price, not the basket. The customer adds both units themselves, so the order line carries the full quantity and the kitchen sees two of the item. Two identical units arrive as one line with a quantity of two; if the customer picks different modifiers or types a different note on each, they arrive as two separate lines. The saving is applied to the order, not to the line. Items are sent to your POS at their full price, and the discount arrives against the order — as an order-level total on most integrations, or as a separate discount line on TISSL. Either way the ticket never reads "second one free" beside the item. There is no way to attach a preparation instruction to an item on an order sent to your POS. Products have no kitchen-note or prep-note field in the dashboard, and a discount cannot add one, so nothing tells the kitchen to "prepare 2" beyond the quantity on the line. The only note that travels with an item is one the customer types: set **Item Notes** to **Expanded** or **Collapsed** at **Stores** → your store → **Settings** → **Operations**, and the note they add is sent with that item — see [Order Injection →](/docs/guides/integrations/pos/order-injection). The real risk is a customer adding one unit and expecting two, so tell them what to do. Add a notice at **Stores** → your store → **Settings** → **Store Notices** explaining that they must add two of the item to get the deal — see [Store notices →](/docs/guides/store-settings/store-notices). Some stores instead duplicate the product and rename the copy ("Buy one get one free") so the offer is spelled out on the ticket. That is a manual workaround rather than a storekit feature: you maintain two versions of the item, sales split across both in your reports, and on a POS-linked menu the duplicate has to exist in your POS as well. ## What Buy X Get Y Cannot Do Buy X Get Y is a buy-one-get-one on the *same* eligible items. It **cannot** give a free or discounted item that is different from the item the customer bought, and there is no "conditional bundle" discount in storekit. In particular, you cannot configure: * **A different reward item** — e.g. "buy 2 pizzas, get a free dip". The reward is always another one of the eligible items, never a separate product. * **A cross-category trigger and reward** — e.g. "buy any main, get a free starter", or "buy a burger, get a free side". The trigger and the reward are the same set. * **A fixed quantity threshold** — e.g. "buy exactly 3, get the 4th free". The deal pairs eligible items automatically (the cheaper of every two is discounted); it is not a "buy N to unlock" rule. * **Auto-adding the reward** — the customer must add the items themselves. The discount recalculates the price of items already in the basket; it never puts an extra item in the cart, so the kitchen only ever receives what the customer added: add one, and the ticket says one. ### Building "buy 2 pizzas, get a free dip" Because that is a *different-item* reward, use one of these instead: * **A bundle product** — create a single menu product (for example "2 Pizzas + Dip") priced as the bundle, using modifiers to let the customer pick their pizzas. This is the reliable way to give a specific free extra with a purchase. * **A [minimum-spend discount](/docs/guides/discounts/minimum-spend-maximum-discount)** — if the goal is simply to reward larger orders, set a percentage or fixed discount that only applies once the basket reaches a spend threshold. This does not add a specific free item, but it rewards the larger order. ## Setting Up The Buy X Get Y type is **not** available to select in the dashboard discount form — it is configured by the storekit team. To set one up: 1. Decide on the eligible product(s) or category 2. Choose whether the cheaper item is free or at a reduced percentage 3. Contact support with your requirements 4. The team will configure the discount for your store Contact your storekit support team to configure Buy X Get Y discounts for your store. ## Combining with Other Settings Buy X Get Y discounts can be combined with: * **[Availability limits](/docs/guides/discounts/limiting-availability)** - Restrict to specific days, hours, or order types * **[Scheduling](/docs/guides/discounts/scheduling)** - Run the promotion for a set period * **[Redemption limits](/docs/guides/discounts/limiting-redemptions)** - Control how many times the deal can be used Only one storekit discount applies per order, so a Buy X Get Y deal does not stack with a code the customer enters or with another eligible promotion. When several automatic discounts qualify, storekit chooses by type rather than by value — free delivery on a delivery order first, then a fixed amount, then a percentage, and Buy X Get Y last — so another automatic promotion wins even when the deal would save the customer more. Rewards from a connected loyalty provider are calculated by that provider and sit outside this rule: a Piggy reward in the basket takes the place of the storekit discount, while a Como benefit is deducted alongside it. # Delivery Fee in Discounts Source: https://storekit.com/docs/guides/discounts/delivery-fee-inclusion Choose whether the delivery fee is included in or excluded from a storekit discount calculation. Control how much customers save and protect your margins. When creating a discount, you can choose whether the delivery fee is included in or excluded from the discount calculation. This setting affects how the discount amount is calculated and what the customer ultimately pays. ## How It Works | Setting | Behaviour | Best For | | ------------------------ | ---------------------------------------------- | ------------------------------------- | | **Include delivery fee** | Delivery fee is part of the discountable total | Maximising perceived customer savings | | **Exclude delivery fee** | Discount applies to product total only | Protecting delivery fee revenue | ## Configuring the Setting 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** or edit an existing discount 3. In the discount settings, choose whether to **include** or **exclude** the delivery fee 4. Click **Create Discount** (or **Save Discount** when editing) ## Impact on Percentage Discounts This setting is most important for [percentage discounts](/docs/guides/discounts/percentage-discounts), where it directly affects the calculated amount. ### Example A 20% discount on an order with a £30 product total and a £5 delivery fee: | Setting | Discountable Amount | Discount (20%) | Customer Pays | | ------------------------ | ------------------------- | -------------- | ------------- | | **Include delivery fee** | £35 (products + delivery) | £7 | £28 | | **Exclude delivery fee** | £30 (products only) | £6 | £29 | ## Impact on Fixed Discounts For [fixed discounts](/docs/guides/discounts/fixed-discounts), this setting affects whether the delivery fee counts toward the order total when evaluating [minimum spend](/docs/guides/discounts/minimum-spend-maximum-discount) requirements. ## Impact on Free Delivery Discounts This setting does not affect [free delivery discounts](/docs/guides/discounts/free-delivery), as those always remove the full delivery fee regardless. Excluding the delivery fee from discount calculations is a simple way to protect your delivery margin while still offering attractive discounts on products. # Discount Codes Source: https://storekit.com/docs/guides/discounts/discount-codes Create percentage, fixed amount, and free delivery discount codes in storekit. Set custom rules, redemption limits, and expiry dates for any promotion. Discount codes let customers enter a code at checkout to receive a discount. This guide covers creating and managing discount codes. ## Creating a Discount Code 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** 3. Enter a **Discount code** (minimum 3 characters, letters and numbers only) — or click **Generate** 4. Choose the **Type**: * **Percentage** (e.g., 10% off) * **Fixed** (e.g., £5 off) * **Free delivery** 5. Enter the **Value** 6. Select the stores the code applies to under **Stores** 7. Configure any restrictions (see below) 8. Click **Create Discount** To change an existing code, open it from the **Discounts** list (click its row) and click **Save Discount**. ## Discount Code Rules * Minimum 3 characters * Letters and numbers only (no spaces or special characters) * Case insensitive (SAVE20 = save20) * Must be unique ## Restrictions ### Availability Limit when the discount can be used: * **Days** - Only valid on specific days (e.g., weekends) * **Time period** - Only valid during certain hours (e.g., 12pm-3pm for lunch deals), or leave **All day** on * **Start date** / **End date** - Valid between specific dates ### Products and Categories Under **Stores**, click **Manage Restrictions** to limit the code to selected products or selected categories in a store. See [Give one product away free](#give-one-product-away-free-with-a-code) for the full walkthrough. ### Order Requirements * **Minimum spend** - Order must meet a minimum value * **Order types** - Limit to **Delivery**, **Pickup**, or **InStore** ### Limits * **Total redemptions** - Maximum times the code can be used across all customers * **Per-customer redemptions** - Maximum times each customer can use the code * **Maximum discount amount** - Caps the cash value of the discount on a single order (shown for **Percentage** codes only) ### Delivery Fee Choose whether the discount: * Applies before or after the delivery fee * Includes the delivery fee in percentage calculations ## Managing Discounts ### Viewing Usage Click on a discount to see: * Total redemptions * Revenue impact * Recent orders using the code ### Editing Discounts Click a discount's row in the **Discounts** list to open it, change its settings, then click **Save Discount**. Changes apply to future orders only. ### Deactivating Discounts Open the discount and click **Deactivate** to stop it being used. It stays in your list (filter the list by **Archived** to find it) and can be brought back with **Activate**. There is no way to delete a discount in the dashboard — **Deactivate** is the only removal action. ## Give One Product Away Free with a Code This recipe covers the common "free coffee" promotion: a code that takes one named product to £0 without giving away anything else in the basket. It is also the safe way to handle products whose price is built out of modifier options. ### 1. Create the code and set the type 1. Go to **Marketing → Discounts** in the sidebar and click **Create Discount** 2. Enter the **Discount code** (for example `RCSEPT2627`) 3. Set **Type** to **Percentage** and **Value** to `100` 4. Under **Stores**, select every store where the code should work ### 2. Restrict the code to the product 1. Under **Stores**, click **Manage Restrictions** 2. Pick the **Store** you are configuring 3. Set **Restrict by** to **Products** (choose **Categories** only if every item in a category should be free) 4. Tick the product(s) that should be free — for example the Americano and the Tea 5. Click **Save Restrictions** and repeat for each store Restrictions can only target products **or** categories on a given store, not both. Choose **Products** when a single named item should be free — a category restriction makes every item in that category free. **Manage Restrictions** is greyed out in two situations: * **No tooltip** — no store is ticked yet. Select at least one store under **Stores** first. * **Tooltip "Product and category restrictions are available on storekit plus"** — restrictions are a storekit+ feature. If you already subscribe to storekit+ and still see this, [contact support](/docs/getting-started/contact-support) to have it enabled on your account, then refresh the page. ### 3. Understand what a product restriction actually discounts A product-restricted percentage discount applies to the **full price of each matching item, including its modifier options** — not just the product's base price. That is deliberate: many menus put the real price in the modifiers (a Tea priced at £0.00 with a required size modifier option that carries the £2.50). Including modifiers is the only way a 100% code takes such an item to £0. The side effect is the trap to watch for: any **paid** extra attached to the same item is discounted too. If the customer adds a £2.50 brownie as a modifier on the Tea, a 100% code makes the brownie free as well. There is no per-modifier control and no "exclude modifiers" switch in the dashboard. ### 4. Cap the damage with Maximum discount amount In the **Limits** section, turn on **Maximum discount amount** and enter the most the code should ever be worth on one order — the highest price the free item can legitimately reach, for example `2.50`. The cap is applied to the calculated discount for the whole order, after the percentage is worked out. So on a 100% Tea code capped at £2.50: | Basket | Discount before cap | Discount applied | Customer pays | | ----------------------------------- | ------------------- | ---------------- | ----------------- | | Tea (£2.50 in modifiers) | £2.50 | £2.50 | £0.00 for the Tea | | Tea + paid brownie modifier (£2.50) | £5.00 | £2.50 | £2.50 | | 2 × Tea | £5.00 | £2.50 | £2.50 | **Maximum discount amount** only appears when **Type** is **Percentage**. Without it, a 100% product-restricted code makes every matching item — and every paid extra on it — free, however many the customer adds. Set a **Minimum spend** in the same **Limits** section if the customer must buy something else to qualify. ### 5. Limit who can use it and when * **Per-customer redemptions** — set this to cap each customer (for example `4` uses each). Leave **Total redemptions** off if any number of customers may use the code. See [Limiting redemptions](/docs/guides/discounts/limiting-redemptions). * **Schedule** — set **Start date** and **End date** to run the code for one month only. See [Scheduling discounts](/docs/guides/discounts/scheduling). * **Availability** — use **Days**, **Time period** / **All day**, and **Order types** to narrow the offer further. ### Worked example A merchant wanted nine monthly codes (`RCSEPT2627` through `RCMAY2627`), each giving a free Americano or Tea over a minimum spend, up to 4 times per customer, with no limit on the number of customers: | Setting | Value | | ----------------------------------------- | ------------------------------------------------- | | **Type** | **Percentage** | | **Value** | `100` | | **Manage Restrictions** → **Restrict by** | **Products** → Americano, Tea | | **Minimum spend** | The qualifying order value | | **Maximum discount amount** | `2.50` (stops a paid brownie modifier being free) | | **Total redemptions** | Off — unlimited customers | | **Per-customer redemptions** | `4` | | **Start date** / **End date** | First and last day of that month | Each monthly code has to be created by hand: [bulk import](/docs/guides/discounts/bulk-import) cannot set product restrictions or **Maximum discount amount**. Open the previous month's code and use **Create Discount** on a fresh form with the same settings, changing only the code and dates. ## Tips * **Use memorable codes** - SUMMER20 is better than XYZ123 * **Set expiry dates** - Prevent old codes from being used indefinitely * **Limit redemptions** - Protect against excessive use * **Track performance** - Review which discounts drive the most orders * **Test before sharing** - Place a test order to verify the discount works as expected ## Troubleshooting Check the following: 1. **Is the code active?** — The discount must be toggled on in Discounts. 2. **Has it exceeded its usage limit?** — Check total redemptions against the configured maximum. 3. **Does the order meet the minimum spend?** — The subtotal must reach the required value. 4. **Is the code within its valid date range?** — Verify the start and end dates are current. Product and category restrictions are a storekit+ feature, and the button stays greyed out with the tooltip **Product and category restrictions are available on storekit plus** until the feature is switched on for your account. If you already subscribe to storekit+, [contact support](/docs/getting-started/contact-support) and ask for product and category restrictions to be enabled, then refresh the page. If the button is greyed out with no tooltip, select at least one store under **Stores** first. If the code is already live, click **Deactivate** while you wait — without restrictions it discounts the whole basket. Once the button is enabled, open the code, add the restrictions, click **Save Discount**, then click **Activate**. See [Editing Discounts](#editing-discounts). The code may be targeting specific products or categories only. Check the targeting settings for the discount — if product-level targeting is enabled, the discount only applies to matching items in the cart, not the entire order total. # Fixed Monetary Discounts Source: https://storekit.com/docs/guides/discounts/fixed-discounts Offer a set monetary amount off the order total with fixed-value discounts in storekit. Predictable cost, easy for customers to understand at a glance. Fixed monetary discounts reduce the order total by a specific amount. They're straightforward for customers to understand and give you predictable control over the discount cost. A fixed discount applies its **full value on every order** it is used on. For example, a £100 discount takes £100 off each qualifying order — it does not work like store credit or deplete a running balance. To limit your total exposure, set a [per-customer or global usage limit](/docs/guides/discounts/limiting-redemptions). ## Creating a Fixed Discount 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** 3. Enter a **discount code** (minimum 3 characters, letters and numbers only) 4. Select **Fixed** as the discount type 5. Enter the **discount amount** (e.g., £5) 6. Configure any restrictions (see below) 7. Click **Create Discount** (or **Save Discount** when editing) ## When to Use Fixed Discounts Fixed discounts are particularly effective for: | Use Case | Example | | -------------------------- | ----------------------------- | | **First order incentive** | £5 off your first order | | **Spend threshold reward** | £10 off orders over £50 | | **Simple promotions** | £3 off any order this weekend | | **Partner deals** | £7 off with a unique code | ## Combining with Other Settings * [**Minimum spend**](/docs/guides/discounts/minimum-spend-maximum-discount) - Require a minimum order value to prevent the discount exceeding the order total * [**Availability limits**](/docs/guides/discounts/limiting-availability) - Restrict to specific days, hours, or order types * [**Redemption limits**](/docs/guides/discounts/limiting-redemptions) - Control how many times the discount can be used * [**Delivery fee inclusion**](/docs/guides/discounts/delivery-fee-inclusion) - Choose whether the delivery fee counts toward the discountable total ## Examples ### First Order Incentive * **Code:** WELCOME5 * **Amount:** £5 off * **Per-customer limit:** 1 * **Use case:** Encourage new customers to place their first order ### Spend Threshold * **Code:** SAVE10 * **Amount:** £10 off * **Minimum spend:** £25 * **Use case:** Increase average order value by rewarding larger orders When using fixed discounts, set a [minimum spend](/docs/guides/discounts/minimum-spend-maximum-discount) that is meaningfully higher than the discount amount. This protects your margins and encourages customers to add more to their order. # Free Delivery Discounts Source: https://storekit.com/docs/guides/discounts/free-delivery Remove the delivery fee at checkout with free delivery discounts in storekit. One of the most effective ways to boost takeaway and delivery conversion. Free delivery discounts remove the delivery fee at checkout, making delivery orders more attractive to customers. They're one of the most effective ways to boost takeaway and delivery sales. ## Creating a Free Delivery Discount 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** 3. Enter a **discount code** (minimum 3 characters, letters and numbers only) 4. Select **Free Delivery** as the discount type 5. Configure any restrictions (see below) 6. Click **Create Discount** (or **Save Discount** when editing) ## How It Works When a customer applies a free delivery discount code (or the discount is [auto-applied](/docs/guides/discounts/auto-applied)), the delivery fee is removed from their order total at checkout. The discount only affects the delivery fee — product prices remain unchanged. ## Combining with Other Settings * [**Auto-applied**](/docs/guides/discounts/auto-applied) - Remove the need for a code so delivery is automatically free when conditions are met * [**Minimum spend**](/docs/guides/discounts/minimum-spend-maximum-discount) - Require a minimum order value before free delivery applies * [**Availability limits**](/docs/guides/discounts/limiting-availability) - Restrict to specific days, hours, or order types * [**Redemption limits**](/docs/guides/discounts/limiting-redemptions) - Control how many times the discount can be used * [**Scheduling**](/docs/guides/discounts/scheduling) - Automatically activate and deactivate free delivery during set periods ## Examples ### Always-on Free Delivery * **Code:** FREEDELIVERY * **Minimum spend:** £15 * **Use case:** Encourage delivery orders above a certain value ### Promotional Free Delivery * **Code:** DELIVER0 * **Availability:** Weekdays only * **Use case:** Boost quieter weekday delivery orders ### Auto-applied Free Delivery * **Auto apply:** On * **Minimum spend:** £30 * **Use case:** Reward larger orders with free delivery automatically Free delivery is especially effective during quieter periods. Combine it with [day and hour restrictions](/docs/guides/discounts/limiting-availability) to target slow times without giving away delivery fees during peak hours. # Government & Seasonal Scheme Discounts Source: https://storekit.com/docs/guides/discounts/government-scheme-discounts Set up auto-applied, scheduled discounts for government schemes like UK Holiday Activities and Food (HAF) or seasonal 'kids eat free' offers. Some local authorities and government bodies run seasonal programmes that subsidise meals — for example the UK **Holiday Activities and Food (HAF)** programme or council-backed **"kids eat free"** summer schemes. You can set these up in storekit so the discount activates and expires automatically, applies at checkout without a code, and only covers qualifying menu items. ## What You'll Need | Requirement | Why | | ------------------------------------- | ----------------------------------------------------------------------------------- | | **storekit+** plan | Scheduling and auto apply are storekit+ features | | **Scheme dates** | The start and end dates provided by the scheme organiser | | **Qualifying products or categories** | Which meals or menu sections are covered by the scheme | | **Discount value** | The amount or percentage the scheme subsidises (e.g. 100% off, or a fixed £ amount) | ## Step 1 — Create the Discount 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** 3. Choose the discount type that matches the scheme: * **Fixed discount** — if the scheme covers a set amount (e.g. £15 per meal). See [Fixed Discounts](/docs/guides/discounts/fixed-discounts). * **Percentage discount** — if the scheme covers a percentage (e.g. 100% off qualifying items). See [Percentage Discounts](/docs/guides/discounts/percentage-discounts). 4. Enter the **discount value** as specified by the scheme ## Step 2 — Schedule the Discount Set the discount to activate and deactivate automatically so it matches the scheme period exactly. 1. In the **Schedule** section, set the **start date** to the first day of the scheme 2. Set the **end date** to the last day of the scheme 3. The discount will only be usable between these dates — no manual toggling needed For full details see [Scheduling Discounts](/docs/guides/discounts/scheduling). If the scheme only runs on certain days of the week (e.g. weekdays only), combine scheduling with [day and hour restrictions](/docs/guides/discounts/limiting-availability) to narrow it further. ## Step 3 — Enable Auto-Apply Turn on auto apply so customers receive the discount automatically at checkout — they won't need to enter a code. 1. Toggle **Auto apply** on 2. The discount will appear in the customer's cart as soon as their order meets the conditions For full details see [Auto-Applied Discounts](/docs/guides/discounts/auto-applied). Auto apply requires storekit+. If you don't see the toggle, check that your venue is on the storekit+ plan. ## Step 4 — Target Qualifying Products Most schemes only cover specific meals. Use targeting to restrict the discount to the right items. ### Option A — Target by Category Best when an entire menu section qualifies (e.g. a "Kids Meals" category). 1. Under **Stores**, click **Manage Restrictions** 2. Set **Restrict by** to **Categories** and tick the categories that contain qualifying items, then click **Save Restrictions** ### Option B — Target by Product Best when only individual items qualify. 1. Under **Stores**, click **Manage Restrictions** 2. Set **Restrict by** to **Products**, search for and tick each qualifying product, then click **Save Restrictions** If you don't already have a dedicated category for scheme-eligible items, consider creating one (e.g. "HAF Eligible Meals"). This makes targeting straightforward and lets you add or remove items in one place. See [Categories](/docs/guides/menu/categories). ## Step 5 — Review and Save Before saving, double-check: * [ ] Discount **type and value** match the scheme requirements * [ ] **Schedule** start and end dates are correct * [ ] **Auto apply** is toggled on * [ ] **Targeting** covers exactly the qualifying products or categories Click **Create Discount**. Place a test order to confirm the discount applies as expected. ## Optional Settings Depending on the scheme rules you may also want to configure: | Setting | When to use | Link | | --------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------- | | **Day / hour restrictions** | Scheme only applies on certain days or during certain hours | [Limiting Availability](/docs/guides/discounts/limiting-availability) | | **Order type restrictions** | Scheme only applies to dine-in, takeaway, or delivery | [Limiting Availability](/docs/guides/discounts/limiting-availability) | | **Minimum spend** | Scheme requires a minimum order value | [Minimum Spend & Maximum Discount](/docs/guides/discounts/minimum-spend-maximum-discount) | | **Maximum discount** | You want to cap the discount amount per order | [Minimum Spend & Maximum Discount](/docs/guides/discounts/minimum-spend-maximum-discount) | ## Troubleshooting Auto apply is a storekit+ feature. There is no subscription or plan page in the dashboard, so you cannot check your plan yourself — [contact support](/docs/getting-started/contact-support) or your account manager to confirm whether your venue is on **storekit+** and to upgrade. Published plans are listed on the [storekit pricing page](https://www.storekit.com/pricing). Work through this checklist: 1. **Is the discount toggled on?** — Open the discount in **Discounts** and check it is active. 2. **Are the schedule dates correct?** — The current date must fall between the start and end dates. Dates use your venue's configured timezone. 3. **Does the order contain qualifying items?** — If targeting is set to specific categories or products, only those items trigger the discount. 4. **Is another discount already applied?** — Only one discount applies per order by default. If a customer has entered a code, the auto-applied scheme discount may not stack. 5. **Are day/hour restrictions blocking it?** — If you added availability limits, make sure the current day and time fall within the allowed window. Check your targeting settings. If you selected **Specific categories**, any product added to that category is automatically included — even items added after the discount was created. Switch to **Specific products** targeting if you need exact control over which items qualify. Verify the **end date** in the schedule section. If the date is correct, clear your browser cache and refresh. Times are interpreted in your venue's configured timezone — ensure the end time accounts for this. # Limiting Discount Availability Source: https://storekit.com/docs/guides/discounts/limiting-availability Restrict storekit discounts to specific days, hours, fulfillment types, or order channels. Target the right customers at the right time without manual toggling. Control when and how customers can use your discounts by setting availability restrictions. Limit discounts to specific days, hours, and order types to target the right customers at the right time. ## Availability Settings | Setting | What It Controls | Example | | ---------------- | ----------------------------------------- | -------------------------------- | | **Days of week** | Which days the discount is valid | Weekends only (Saturday, Sunday) | | **Time range** | Which hours the discount is valid | 4pm - 6pm (happy hour) | | **Order type** | Which order types the discount applies to | Delivery only | ## Configuring Availability 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** or edit an existing discount 3. In the **Availability** section, configure the desired restrictions 4. Click **Create Discount** (or **Save Discount** when editing) ## Day Restrictions Limit the discount to specific days of the week. Useful for: * **Weekend deals** - Saturday and Sunday only * **Weekday lunch specials** - Monday to Friday * **Mid-week boost** - Tuesday and Wednesday to drive quieter days Select one or more days. If no days are selected, the discount is valid every day. ## Hour Restrictions Set a time range during which the discount is valid. Useful for: * **Happy hour** - 4pm to 6pm * **Lunch deals** - 11am to 2pm * **Late night offers** - 9pm to midnight Set both a start time and end time. If no times are set, the discount is valid all day. An auto-applied happy hour discount attaches to every basket inside its time window, including baskets with none of the items it covers. It is worth £0.00 on those items — [what the customer and the order show →](/docs/guides/discounts/auto-applied#restricted-discounts-and-baskets-with-no-eligible-items) ## Order Type Restrictions Restrict the discount to specific order types: | Order Type | Description | | ------------ | ------------------------------------------ | | **InStore** | Orders placed for eating in the restaurant | | **Pickup** | Orders collected by the customer | | **Delivery** | Orders delivered to the customer | Select one or more order types. If none are selected, the discount applies to all order types. ## Combining Restrictions All availability restrictions work together. A discount is only valid when **all** configured conditions are met. **Example:** A discount set to weekends only, 5pm-9pm, delivery orders would only apply to delivery orders placed between 5pm and 9pm on Saturdays and Sundays. Use availability restrictions alongside [scheduling](/docs/guides/discounts/scheduling) for maximum control. Scheduling sets the overall date range, while availability settings control the specific days and times within that range. # Limiting Discount Redemptions Source: https://storekit.com/docs/guides/discounts/limiting-redemptions Cap how many times a discount can be used overall and per customer. Manage promotion spend, prevent abuse, and run limited-time offers without surprise costs. Redemption limits let you control how many times a discount can be used. Set a total cap across all customers, a per-customer limit, or both to manage your promotion spend. Discount limits are **count-based only**. The system tracks how many times a code has been used, not the total monetary amount redeemed. There is no store-credit or balance-tracking feature for discounts. A fixed discount (e.g. €100 off) applies the full amount on every qualifying order — it does not deplete a running balance. ## Redemption Limit Types | Limit | What It Controls | Example | | ---------------------------- | ------------------------------------ | ------------------------ | | **Total redemptions** | Maximum uses across all customers | First 100 customers only | | **Per-customer redemptions** | Maximum uses per individual customer | Once per customer | ## Configuring Redemption Limits 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** or open an existing discount from the list 3. In the **Limits** section, turn on **Total redemptions** and/or **Per-customer redemptions** and set the values 4. Click **Create Discount** (or **Save Discount** when editing) Leave **Total redemptions** off when any number of customers may use the code, and use **Per-customer redemptions** alone to cap each individual. ## Total Redemptions Set a maximum number of times the discount can be used across all customers. Once the limit is reached, the discount can no longer be applied. Use cases: * **Limited offers** - "First 50 orders get 20% off" * **Budget control** - Cap the total number of discounted orders * **Scarcity promotions** - Create urgency with limited availability ## Per-Customer Redemptions Set a maximum number of times each individual customer can use the discount. This prevents a single customer from using the same discount repeatedly. Use cases: * **One-time welcome offers** - £5 off your first order (limit: 1 per customer) * **Monthly rewards** - Use up to 3 times per customer * **Fair usage** - Prevent abuse of generous discounts ## Combining Both Limits You can set both limits together for precise control. **Example:** A discount with 200 total redemptions and a per-customer limit of 2 means the discount can be used up to 200 times in total, but each customer can only use it twice. Redemption limits do not apply to [auto-applied discounts](/docs/guides/discounts/auto-applied). If you need to limit redemptions, use a code-based discount instead. ## Combining with Other Settings * [**Availability limits**](/docs/guides/discounts/limiting-availability) - Restrict to specific days, hours, and order types * [**Scheduling**](/docs/guides/discounts/scheduling) - Set a date range for the discount * [**Minimum spend**](/docs/guides/discounts/minimum-spend-maximum-discount) - Require a minimum order value * [**Give one product away free with a code**](/docs/guides/discounts/discount-codes#give-one-product-away-free-with-a-code) - A free-item promotion that pairs a per-customer cap with a **Maximum discount amount** # Minimum Spend & Maximum Discount Source: https://storekit.com/docs/guides/discounts/minimum-spend-maximum-discount Protect storekit margins with discount thresholds. Require a minimum spend before discounts apply and cap the maximum discount value per order at checkout. Minimum spend and maximum discount settings give you precise control over your discount economics. Require customers to reach a spending threshold before a discount applies, and cap the total discount to protect your margins. ## Minimum Spend Set a minimum order value that must be reached before the discount can be applied. If the order total is below the threshold, the discount will not apply. ### Configuring Minimum Spend 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** or open an existing discount from the list 3. In the **Limits** section, turn on **Minimum spend** and enter the value 4. Click **Create Discount** (or **Save Discount** when editing) ### Use Cases | Minimum Spend | Discount | Purpose | | ------------- | ------------- | --------------------------------------- | | £15 | Free delivery | Encourage larger delivery orders | | £25 | £5 off | Incentivise orders above a target value | | £50 | 20% off | Reward high-value orders | ## Maximum Discount Cap the total discount amount that can be applied to a single order. This is particularly important for [percentage discounts](/docs/guides/discounts/percentage-discounts) where the discount scales with order size. ### Configuring Maximum Discount 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** or open an existing discount from the list 3. In the **Limits** section, turn on **Maximum discount amount** and enter the value 4. Click **Create Discount** (or **Save Discount** when editing) **Maximum discount amount** is only shown when **Type** is **Percentage**. ### Example A 20% discount with a £15 maximum discount cap: | Order Total | Calculated Discount (20%) | Applied Discount | Savings | | ----------- | ------------------------- | ---------------- | ----------------- | | £30 | £6 | £6 | Full 20% | | £50 | £10 | £10 | Full 20% | | £75 | £15 | £15 | Full 20% (at cap) | | £100 | £20 | £15 | Capped at £15 | ## Combining Both Settings Use minimum spend and maximum discount together for well-controlled promotions. **Example:** 20% off with a £50 minimum spend and a £15 maximum discount cap. Customers must spend at least £50 to qualify, and the discount will never exceed £15 regardless of order size. For percentage discounts, always consider setting a maximum discount cap. Without one, a 20% discount on a £200 order would give £40 off, which may exceed your intended promotion budget. ## Combining with Other Settings * [**Availability limits**](/docs/guides/discounts/limiting-availability) - Restrict to specific days, hours, and order types * [**Redemption limits**](/docs/guides/discounts/limiting-redemptions) - Control how many times the discount can be used * [**Delivery fee inclusion**](/docs/guides/discounts/delivery-fee-inclusion) - Choose whether the delivery fee counts toward the minimum spend * [**Give one product away free with a code**](/docs/guides/discounts/discount-codes#give-one-product-away-free-with-a-code) - Using **Maximum discount amount** to stop paid modifier extras being given away # Discounts Overview Source: https://storekit.com/docs/guides/discounts/overview Drive sales and reward customers with the storekit discounts engine. Build percentage, fixed, free delivery, and Buy X Get Y promotions with custom rules. Discounts are a powerful way to drive sales, attract new customers, and reward loyal ones. storekit offers a range of discount options to suit your business needs. ## Types of Discounts ### Percentage Discounts Offer a discount based on a percentage of the order total. Perfect for site-wide sales, seasonal promotions, or customer appreciation deals. **Example:** 20% off all orders ### Fixed Monetary Discounts Provide a set amount off the total order price. Great for offering incentives without affecting your overall margins too much. **Example:** £5 off your order ### Free Delivery Discounts Remove the delivery fee to encourage more online orders. Especially useful for boosting takeaway and delivery sales. ### Buy X Get Y Discounts Buy-one-get-one (BOGO) promotions. When a customer buys more than one item from an eligible product or category, the cheaper item is discounted or made free. The reward is always another one of the same eligible items — it can't be a different product. See [Buy X Get Y](/docs/guides/discounts/buy-x-get-y) for what it can and can't do. **Examples:** * Buy 1 pizza, get a second pizza 50% off * Buy 1 coffee, get a second coffee free Buy X Get Y discounts require storekit+ ### Auto-applied Discounts Discounts that apply automatically at checkout without customers needing to enter a code. Perfect for seamless promotions on specific items or categories. Auto-applied discounts require storekit+ ## Discount Settings Control exactly how your discounts work: | Setting | Description | | ---------------------- | --------------------------------------------------------------------- | | **Availability** | Restrict to specific days and hours (e.g., weekends only, happy hour) | | **Order types** | Limit to **Delivery**, **Pickup**, or **InStore** orders | | **Minimum Spend** | Set a minimum order value required | | **Maximum Discount** | Cap the total discount amount per order | | **Total Redemptions** | Limit how many times the discount can be used overall | | **Per-Customer Limit** | Limit how many times each customer can use the discount | | **Delivery Fee** | Include or exclude delivery fee from the discount calculation | ## Additional Features ### Bulk Import Upload multiple discounts at once using CSV import. Ideal for businesses running multiple promotions simultaneously. ### Scheduled Discounts Plan discounts in advance so they automatically activate and deactivate at specified times. Scheduled discounts require storekit+ ## Creating a Discount 1. Go to **Marketing → Discounts** in your dashboard 2. Click **Create Discount** 3. Choose the discount type 4. Configure settings and restrictions 5. Save and activate The dashboard form's type options are **Percentage**, **Fixed** and **Free delivery**. Buy X Get Y is not selectable there — it's configured by the storekit team (see [Buy X Get Y](/docs/guides/discounts/buy-x-get-y)). See [Discount Codes](/docs/guides/discounts/discount-codes) for step-by-step instructions. ## Troubleshooting ### Can't create a discount * Discount code must be at least 3 characters * Use only letters and numbers * Remove any spaces at the beginning or end ### Discount says it can't be used today Check that your discount availability settings include the current day. Discounts can be limited to specific days of the week. ### Customer says code isn't working Verify: * The discount hasn't reached its redemption limit * The order meets the minimum spend requirement * The order type (**Delivery**/**Pickup**/**InStore**) is eligible * The discount is within its valid date range # Percentage Discounts Source: https://storekit.com/docs/guides/discounts/percentage-discounts Set up percentage-off discounts in storekit. Ideal for site-wide sales, category promotions, customer appreciation offers, and limited-time seasonal campaigns. Percentage discounts reduce the order total by a set percentage. They're ideal for site-wide sales, category promotions, and customer appreciation offers. ## Creating a Percentage Discount 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** 3. Enter a **Discount code** (minimum 3 characters, letters and numbers only) 4. Select **Percentage** as the **Type** 5. Enter the **Value** (e.g., 20 for 20% off) 6. Configure any restrictions (see below) 7. Click **Create Discount** ## Applying to Specific Items Percentage discounts can be scoped to different parts of your menu: | Scope | Description | Example | | ----------------------- | ------------------------------------------------ | ---------------------- | | **Entire order** | Discount applies to all items in the order | 20% off all orders | | **Specific categories** | Only items in selected categories are discounted | 15% off pizzas | | **Specific products** | Only selected products are discounted | 10% off new menu items | Category and product scopes are set under **Stores** → **Manage Restrictions**. If the discount is also auto-applied, the scope does not decide whether it attaches to the basket: it attaches to baskets in its active window and discounts no items when nothing in the basket is eligible — see [Restricted discounts and baskets with no eligible items →](/docs/guides/discounts/auto-applied#restricted-discounts-and-baskets-with-no-eligible-items). A 100% product-scoped discount gives that item away free — see [Give one product away free with a code](/docs/guides/discounts/discount-codes#give-one-product-away-free-with-a-code), which also covers what happens when the item's price sits in its modifier options. ## Combining with Other Settings Percentage discounts work well with additional restrictions to protect your margins: * [**Minimum spend**](/docs/guides/discounts/minimum-spend-maximum-discount) - Require a minimum order value before the discount applies * [**Maximum discount**](/docs/guides/discounts/minimum-spend-maximum-discount) - Cap the total discount amount to prevent excessive reductions on large orders * [**Availability limits**](/docs/guides/discounts/limiting-availability) - Restrict to specific days, hours, or order types * [**Redemption limits**](/docs/guides/discounts/limiting-redemptions) - Control how many times the discount can be used ## Examples ### Site-wide Sale * **Code:** SAVE20 * **Percentage:** 20% * **Scope:** Entire order * **Use case:** A weekend promotion to boost overall sales ### Category Promotion * **Code:** PIZZA15 * **Percentage:** 15% * **Scope:** Pizzas category * **Use case:** Drive sales for a specific menu section ### Controlled Promotion * **Code:** VIP10 * **Percentage:** 10% * **Minimum spend:** £30 * **Maximum discount:** £10 * **Use case:** Reward higher-value orders while capping your discount liability For large percentage discounts, always set a [maximum discount cap](/docs/guides/discounts/minimum-spend-maximum-discount) to protect your margins on high-value orders. # Promotions Source: https://storekit.com/docs/guides/discounts/promotions Run auto-applied promotions that activate at checkout without a code. Configure trigger conditions and roll out seamless offers to every eligible customer. Promotions are discounts that apply automatically at checkout without customers needing to enter a code. They're perfect for seamless offers that you want every eligible customer to receive. Promotions require storekit+ ## How Promotions Work Unlike discount codes, promotions: * Apply automatically when conditions are met * Don't require customers to know or enter a code * Show the discount applied in the cart automatically * Can target specific products or categories ## Creating a Promotion 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** 3. Configure your discount type and value 4. Toggle **Auto apply** on 5. Set your targeting and restrictions 6. Click **Create Discount** (or **Save Discount** when editing) ## Targeting Options Targeting is set per store under **Stores** → **Manage Restrictions** → **Restrict by**. ### No Restrictions The promotion applies to the entire order. Use for site-wide sales. ### Restrict by Categories Target products in selected categories only. Useful for: * "20% off all desserts" * "15% off every starter" Targeting only reduces the price of matching items; it can't give a free *different* item (e.g. a free starter for buying a main). For buy-one-get-one on the same item see [Buy X Get Y](/docs/guides/discounts/buy-x-get-y). ### Restrict by Products Target individual products. Useful for: * Highlighting slow-moving items * New product launches * Loss leaders to drive traffic ## Use Cases ### Happy Hour Create a time-limited promotion: * 20% off drinks * Available 4pm-7pm * Weekdays only ### Lunch Special Encourage midday orders: * £2 off orders over £10 * Available 11am-2pm ### Weekend Deals Boost weekend sales: * 15% off all orders * Saturday and Sunday only ### Category Promotion Promote specific menu sections: * 25% off starters * Encourages add-on purchases ### New Item Launch Draw attention to new products: * 50% off new burger * Limited time only ## Promotion vs Discount Code | Feature | Promotion | Discount Code | | ------------------------ | -------------------------------- | ------------------------------------ | | Customer action required | None | Enter code | | Visibility | Automatic in cart | Must know code | | Best for | Site-wide offers, category deals | Targeted campaigns, influencer codes | | Exclusivity | Available to everyone | Only those with the code | ## Stacking By default, only one discount applies per order. If multiple promotions are eligible, the one providing the greatest value to the customer is applied. Use discount codes for exclusive offers (influencer partnerships, email subscribers) and promotions for offers you want everyone to see. ## Managing Promotions ### Priority When multiple promotions could apply, storekit automatically selects the best one for the customer. You don't need to set priority manually. ### Pausing a Promotion Open the promotion and click **Deactivate** to temporarily disable it (find it again with the **Archived** filter, then click **Activate**). This is useful for: * Seasonal promotions between seasons * Promotions you want to reuse later ### Scheduling Set start and end dates to automatically activate and deactivate promotions. Plan your promotional calendar in advance. ## Tips * **Clear naming** - Name promotions descriptively (e.g., "Summer 2024 - 20% off desserts") * **Set end dates** - Avoid promotions running indefinitely * **Monitor margins** - Track the cost of promotions against increased sales * **Combine with marketing** - Promote your offers on social media and in-store * **Test first** - Place a test order to verify the promotion applies correctly ## Troubleshooting Work through this checklist: 1. **Is the promotion toggled ON?** — Check the promotion status in Discounts. 2. **Does the order meet the minimum spend?** — The subtotal must reach the threshold before the discount applies. 3. **Is the promotion within its scheduled dates?** — Verify the start and end dates haven't passed or aren't in the future. 4. **Does the order contain items from the targeted categories/products?** — If targeting is set, only matching items trigger the promotion. 5. **Is another discount already applied?** — Stacking is disabled by default; only one discount applies per order. Check your category or product targeting settings. If the promotion targets a category, any item added to that category is automatically included — even newly added items. To exclude specific products, switch to product-level targeting instead. Clear your browser cache and refresh the page. If the promotion still appears, verify that the end date is set correctly and accounts for your timezone — times are interpreted in your venue's configured timezone. # Scheduling Discounts Source: https://storekit.com/docs/guides/discounts/scheduling Plan storekit discounts in advance with start and end dates. Schedule promotions to activate and deactivate automatically without staff intervention. Scheduled discounts let you set start and end dates so promotions activate and deactivate automatically. Plan your promotional calendar in advance without needing to manually toggle discounts on and off. Scheduled discounts require storekit+ ## How It Works When you set a schedule on a discount: 1. The discount remains inactive until the **Start date** 2. It activates automatically at the scheduled start 3. It deactivates automatically at the **End date** 4. No manual intervention is needed ## Setting Up a Schedule 1. Go to **Marketing → Discounts** in the sidebar 2. Click **Create Discount** or open an existing discount from the list 3. In the **Schedule** section, turn on **Start date** and set the date and time 4. Turn on **End date** and set the date and time 5. Click **Create Discount** (or **Save Discount** when editing) The discount will only be usable between the start and end dates. ## Use Cases | Scenario | Start | End | Example | | ---------------------- | ------------ | --------------- | ---------------------------------- | | **Flash sale** | Friday 6pm | Sunday midnight | Weekend-only 25% off | | **Seasonal promotion** | 1st December | 31st December | Christmas menu discount | | **Event-based offer** | Event day | Day after event | Match day special | | **New launch** | Launch date | 2 weeks later | 50% off new item for first 2 weeks | ## Combining with Other Settings Scheduling works alongside other discount settings: * [**Availability limits**](/docs/guides/discounts/limiting-availability) - Add day and hour restrictions within the scheduled period * [**Redemption limits**](/docs/guides/discounts/limiting-redemptions) - Cap total uses during the promotion window * [**Minimum spend**](/docs/guides/discounts/minimum-spend-maximum-discount) - Require a minimum order value * [**Give one product away free with a code**](/docs/guides/discounts/discount-codes#give-one-product-away-free-with-a-code) - Run a free-item offer for one month at a time Combine scheduling with [day and hour restrictions](/docs/guides/discounts/limiting-availability) for precise control. For example, schedule a promotion for the entire month of December but restrict it to weekends between 5pm and 9pm. # Catering Setup Source: https://storekit.com/docs/guides/fulfillment/catering-setup Set up catering pickup and delivery in storekit for large orders. Configure lead times, minimum spend, advance scheduling, and dedicated catering menus. Content coming soon. # Delivery Zones Source: https://storekit.com/docs/guides/fulfillment/delivery/delivery-zones Define storekit delivery zones using driving distance, polygon shapes drawn on a map, or postcode lists. Set per-zone delivery fees, minimums, and prep times. # Set Up Delivery Zones Define where you deliver and set fees by area. ## Prerequisites * Delivery is enabled in Operations settings * Your store address is set correctly (zones are calculated from this point) ## Choose Your Zone Type | Type | Best for | | ---------------- | --------------------------------------------- | | Driving distance | Quick setup, circular coverage | | Polygon | Precise boundaries (neighborhoods, postcodes) | | Postcode | UK/IE venues with postcode-based delivery | ## Steps * Enter a radius (e.g., 3 miles) * Set delivery fee and minimum order ## Verify It Works ## Export Delivery Zones You can export your delivery zones in multiple formats for use in mapping tools, logistics planning, or external systems: 1. Go to **Store Settings** > **Delivery Zones** 2. Click **Export** 3. Choose your format: * **GeoJSON** — For mapping applications and GIS tools * **CSV** — For spreadsheets and data analysis * **KML** — For Google Earth and Google Maps Exports are available at both the venue level (single store) and account level (all stores). ## Troubleshooting * **Address shows "out of zone"?** → Check your store coordinates are correct * **Wrong fee applied?** → See [zone priority rules](#) in Reference → *For field definitions, see [Delivery Zones Reference](#)* # Enabling Delivery Source: https://storekit.com/docs/guides/fulfillment/delivery/enabling-delivery Turn on delivery in storekit so customers can order food and drinks to their address, managed alongside pickup in your store's Operations settings. ## How Enabling Delivery Works * Customers can choose pickup or delivery before placing an order * Delivery orders appear in your storekit order dashboard (motorcycle logo) * Pickup/collection can remain enabled separately ## How to Enable Delivery The full path is **Stores** → \[your store] → **Settings** → **Operations** → **Fulfillment types**. From your storekit dashboard, go to **Stores** and select the pickup store you want to update. Open **Settings**. From the settings menu, open **Operations**. There is no **Fulfillment** entry in that menu — fulfilment types live on the **Operations** page. Under **Fulfillment types** — the first group on the **Operations** page — tick **Delivery** ("Offer delivery orders (we do not provide drivers or driver management)"). You can also untick **Delivery** to disable delivery orders for this store. Click **Save** to apply the change. **On a dine-in store the Fulfillment types checkboxes are not shown.** If the store takes in-store (order-and-pay) orders, the **Fulfillment types** group is not rendered on **Operations** at all, and **Delivery Zones** and **Pre-Orders** are missing from the settings menu too. There is no dashboard control that adds delivery or pickup to such a store — [contact storekit support](/docs/getting-started/contact-support) to have it changed. ## When to Enable Delivery Enable Delivery when: * You want to accept delivery orders on your storekit store * The venue is ready to prepare delivery orders * A delivery process, courier setup, or third-party delivery arrangement is already in place 3rd-party courier integrations are available via storekit+. Click [here](https://t09czsyu90l.typeform.com/to/gMpZl4lZ) to get a demo. ## When to Disable Delivery Disable Delivery when: * The venue only wants to accept pickup/collection orders * Delivery is temporarily unavailable * The venue is too busy to handle delivery orders * Delivery setup is still being configured Delivery only controls whether customers can choose delivery before placing their order. storekit does not provide drivers or driver management from this setting. ## Related: * [Enabling Pickup](/docs/enabling-pickup) * [Delivery Zones](/docs/guides/fulfillment/delivery/delivery-zones) * [Configure fulfillment methods and order scheduling](/docs/getting-started/launch/configure-fulfillment) # Set up dine-in tables, areas, and QR codes Source: https://storekit.com/docs/guides/fulfillment/dine-in-tables Create dine-in tables and areas in storekit, print table QR codes for guest ordering and Pay at Table, and request table number redirects. Tables link QR codes to specific seating positions so that dine-in orders and Pay at Table payments are routed to the correct location. Each table has a number, belongs to an area, and has its own QR code. ## How Tables Work 1. **You create tables** in the dashboard and organise them into areas 2. **Each table gets a QR code** that encodes the table number 3. **Customer scans the QR** and their order is automatically tagged with that table 4. **Kitchen and staff see the table number** on incoming orders and bills Tables are used by both **Order & Pay** (customers browse the menu and place orders) and **Pay at Table** (customers view and settle an existing POS bill). ## Setting Up Tables ### Creating Tables 1. Go to **Stores** → your store → **Settings** → **Tables** 2. Click **+ Add area** to create a seating zone (e.g. "Main Floor", "Terrace", "Bar") 3. Inside the area, click the add button — labelled **+ Add** followed by your store's table wording (**Table** by default, or e.g. **Room** if your store renames it) 4. Enter the table number and repeat for each table 5. Click **Save** Use logical numbering that matches the physical labels on your tables. This makes it easier for staff to identify where orders should go. ### Editing Tables You can change both the table number your customers see and the **POS ID** the till uses. 1. Go to **Stores** → your store → **Settings** → **Tables** 2. Click the table's name to edit it, then press Enter to save 3. To change the **POS ID**, switch to **Grid view** with the icon buttons above the list — there are two, **Accordion view** and **Grid view**, named on hover — then click the table's **POS ID** cell, type the new value and press Enter The **POS ID** is the internal POS system table ID, required if your POS uses table IDs to route orders — it is what sends an order to the right table on the till, and it is separate from the name customers see. **Accordion view** shows the current value next to each table as `POS: 12`; an empty **POS ID** cell means none is set. You can also set it when you create a table, in the **POS ID** field, and in bulk through the **Table import** CSV, which has a **POS ID** column. If orders are landing on the wrong table on the till for one part of your venue, correct those tables' POS IDs here. On a POS-synced floorplan this is usually faster and safer than re-importing the floorplan — see [Lightspeed Dine-in: Floor Plan & Tables](/docs/guides/integrations/pos/lightspeed/dine-in). ### Deactivating or Removing Tables 1. Go to **Stores** → your store → **Settings** → **Tables** 2. Click the delete icon next to the table you want to remove 3. Confirm the deletion Deactivating or snoozing a table does not remove it from a generic table-selector QR. Customers can still select it, but they will see that the table is not accepting orders. To hide the table from the selector entirely, delete it. Deleting invalidates any printed QR code for that table, so remove or replace the physical code. Alternatively, use table-specific QR codes, which take customers directly to a pre-selected table instead of showing the generic selector. ### Importing Tables From Your POS If your POS owns the floorplan, import it instead of creating tables by hand. Each integration has its own sync control on its settings page under **Stores** → your store → **Settings** → **Integrations**: | POS | Where | Control | | ----------------------- | ------------------------------ | ------------------ | | **Toast POS** | **Sync Actions** section | **Sync Floorplan** | | **Tissl** | Top of the settings page | **Sync floorplan** | | **Lightspeed K-Series** | **Fetch Lightspeed Floorplan** | **Sync floorplan** | | **Zonal** | Bottom of the settings page | **Sync tables** | For Toast, **Sync Floorplan** imports your tables and service areas from Toast POS on demand — use it after changing the floorplan in Toast instead of re-entering tables by hand. Imported tables then appear under **Settings** → **Tables**. The sync buttons live on the POS integration page, not on the **Tables** page, and are disabled while the integration is switched off. Integrations without a sync control (for example Centegra) need tables created in storekit with the matching POS ID. ## Areas Areas group tables into logical zones. They serve two purposes: * **Organisation** — keep your table list manageable across different sections of the venue * **Category restrictions** — show different menu categories depending on where the customer is seated (e.g. drinks-only at the bar) See [Table Area Category Restrictions](/docs/guides/menu/table-area-restrictions) for details on restricting menu categories by area. ## QR Codes for Tables Each table has a unique QR code that links directly to that table's ordering page. When a customer scans it, their session is automatically associated with the correct table number. ### Downloading Table QR Codes 1. Go to the **QR Codes** section in your dashboard 2. Download individual table QR codes or all at once 3. Print and place them on the corresponding tables For general QR code guidance (store-level codes, printing tips, branded designs), see [QR Codes](/docs/guides/store-settings/qr-codes). Always test each QR code after placing it on a table. Scan with a phone to confirm it links to the correct table number. ### Table Number Redirects If you need to redirect a QR code from one table number to another (e.g. table 23 should now point to table 25), this currently requires a backend change. Table number redirects cannot be done from the dashboard. [Contact storekit support](/docs/getting-started/contact-support) to set up a redirect. Provide the venue name, the current table number on the QR code, and the table number you want it to point to. This is useful when: * You renumber physical tables but don't want to reprint QR codes * You merge or rearrange seating areas * A QR code is permanently affixed (e.g. engraved or embedded in the table) ## Tips * **Match physical and digital** — keep table numbers in the dashboard consistent with physical table markers * **Spare QR codes** — print a few extras for each table in case of damage * **Staff training** — ensure staff know which area each table belongs to, especially when category restrictions are active * **Test after changes** — whenever you add, edit, or remove tables, scan the QR codes to verify everything works ## Related Guides Download and print QR codes for your store and tables Let guests view and pay their bill from their phone Show different menu categories by seating area Configure when customers can place orders # Availability & Snoozing Source: https://storekit.com/docs/guides/menu/availability-snoozing Control when storekit products, categories, and your store are available. Snooze items temporarily, hide out-of-stock products, or pause your store. Control when products, categories, and your entire store are available for ordering. ## Unavailable Product Options By default, an unavailable product still appears on your ordering page — greyed out, not tappable, with **Currently sold out** in place of its description. If you want unavailable items taken off the menu completely instead, change **Unavailable Product Options**. This is a **per-menu** setting. It is not set per product and not set per store, so it changes how *every* unavailable item on that menu is displayed. Go to **Menus** in the left-hand navigation and click **Edit** on the menu. Click **Settings** in the menu builder header. The **Menu Settings** panel slides in from the right. Under **Unavailable Product Options**, pick one of the two options: * **Disable** — *Visible but greyed out*. This is the default. * **Hide** — *Completely removed*. Click **Save changes**. A **Menu Settings saved** confirmation appears. ### What the customer sees | Setting | Unavailable product | Unavailable modifier option | | --------------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------- | | **Disable** (default) | Shown in its category, greyed out and not selectable, described as **Currently sold out** | Shown in the modifier group, not selectable | | **Hide** | Not in the menu at all | Not in the modifier group at all | **Hide** applies whether the item is unavailable permanently or temporarily: the **Available** toggle off, [snoozed](#snoozing-products), an **Available After** date in the future, or **Track Inventory** stock at zero. A snoozed item disappears while the snooze runs and comes back when it ends. The one exception is [Availability by Day](#availability-by-day): items unavailable only because of the day of the week always show greyed out, even on **Hide**. **Hide** removes products and modifier options, not categories. A category whose items are all unavailable still appears on the ordering page, with nothing under it. If you want the whole section gone, use the category's own availability settings — see [Categories](/docs/guides/menu/categories#availability). On **Hide**, unavailable options are taken out of their modifier group. If that empties a required group (minimum of 1 or more), the product cannot be ordered: it stays in its category but shows greyed out as **Currently sold out**, even though its own **Available** toggle is still on. See [Why a product shows as sold out when its modifiers are unavailable](/docs/guides/menu/nested-modifiers#why-a-product-shows-as-sold-out-when-its-modifiers-are-unavailable). ### POS-synced menus **Unavailable Product Options** is a storekit display setting and works the same way on a menu synced from a POS or menu platform — set it in **Menu Settings** as above. What differs is where availability comes from: on a POS-managed menu (Deliverect, Toast, Zonal, Stream, Lightspeed K-Series, 3S POS) the items and their availability are driven by the POS, so to make an item unavailable you mark it unavailable or out of stock there and let it sync. See [POS Menu Sync](/docs/guides/menu/pos-menu-sync). ## Product Availability ### Toggle Available Each product has an **Available** toggle in the menu builder. When off, the product cannot be ordered. Whether it then disappears from your ordering page or stays visible but greyed out depends on [Unavailable Product Options](#unavailable-product-options) for that menu — by default it stays visible and greyed out. Use this for: * Permanently discontinued items * Seasonal items out of season * Items you're not ready to sell yet ### Snoozing Products Snoozing temporarily hides a product for a set period. Unlike toggling availability, snoozing automatically restores the product when the snooze period ends. To snooze a product: 1. Click the **eye icon** next to the product in your menu 2. Select a duration: * 15 minutes * 1 hour * 2 hours * 6 hours * Tomorrow 8AM * Indefinitely 3. Or pick a specific date/time 4. Click **Snooze** Snoozed products show an indicator in the menu builder. Click **Unsnooze** to restore availability immediately. Use snoozing when you've run out of an item temporarily. It's faster than editing the product and remembering to turn it back on later. ### Snooze Reporting All snooze events are automatically logged and available in the **Reports** section. The snooze report shows: * Total number of snoozes in the selected period * Total time items were snoozed * Average snooze duration * Daily breakdown of snooze activity * Individual snooze events with: * Venue and menu item details * User who initiated the snooze (for manual snoozes) * Source (manual, Deliverect, Lightspeed, Zonal) * Start and end times * How the snooze ended (manual, expired, or replaced) Filter the report by: * Date range * Venue * Snooze source (manual vs. automatic) This helps identify: * Frequently out-of-stock items * Peak snooze times * Items that may need inventory adjustments * Integration-triggered snoozes from your POS ### Available After Schedule when a product becomes orderable using **Available After**. Until the specified date and time the product cannot be ordered — greyed out, or removed from the menu if the menu is set to **Hide** (see [Unavailable Product Options](#unavailable-product-options)). Use this for: * Launching new items at a specific time * Preparing seasonal menus in advance * Coordinating with marketing campaigns ### Inventory Tracking Enable **Track Inventory** to set stock levels. When inventory reaches zero, the product automatically shows as unavailable. 1. Toggle **Track Inventory** on 2. Enter the current stock count 3. Stock decreases with each order Use for: * Daily specials with limited quantities * Items with supply constraints * Flash sales with limited stock ### Availability by Day **Beta feature** - This feature is currently in beta. If you'd like to use it, please ask us on live chat. Set which days of the week a product is available. Useful for: * Weekend brunch items * Weekday lunch specials * Items requiring advance preparation Select the days when the product should be available. On other days it cannot be ordered: it shows greyed out as **Currently sold out**, regardless of the menu's [Unavailable Product Options](#unavailable-product-options) setting. ## Store Snoozing Temporarily disable ordering for your entire store: 1. Click the **snooze icon** in the store header 2. Select a duration: * 5 minutes * 10 minutes * 30 minutes * 1 hour * 2 hours * 12 hours 3. Or pick a specific date 4. Select a reason for disabling orders 5. Click **Disable orders** Your store shows as closed to customers until the snooze period ends or you manually re-enable it. Store snoozing affects all order types. Customers cannot place any orders while the store is snoozed, unless pre-orders during snooze is enabled in your pre-order settings. To re-enable early: 1. Click the snooze icon again 2. Click **Enable orders** ### Snooze Reasons When snoozing your store, select a reason: * Too busy * Technical issue * Staff shortage * Emergency * Other This helps track why your store was unavailable. ## Modifier Option Availability Modifier options have an **In Stock** toggle. When off, the option cannot be selected but remains configured — it stays visible and greyed out, or is removed from the modifier group if the menu is set to **Hide** (see [Unavailable Product Options](#unavailable-product-options)). Use for temporarily unavailable toppings, sizes, or add-ons without deleting them. ### A Product Shows as Sold Out After You Made Its Options Unavailable A required modifier group (minimum of 1 or more) with no available options takes the whole **product** out of use, not just the group — and that includes required [nested modifier groups](/docs/guides/menu/nested-modifiers), which belong to the product even though customers only see them after picking the parent option. So turning **In Stock** off for every option of a required nested group affects every product using that group: on **Hide** those products show as **Currently sold out**, and on **Disable** (the default) they still look orderable but cannot be added to the basket. For the full behaviour, how to trace it in the dashboard, and what to change on a POS-managed menu, see [Why a product shows as sold out when its modifiers are unavailable](/docs/guides/menu/nested-modifiers#why-a-product-shows-as-sold-out-when-its-modifiers-are-unavailable). ## Summary | Level | Method | Automatic Restore | Use Case | | ------- | --------------------------- | -------------------- | ------------------------------------------------------------- | | Product | Toggle Available | No | Permanent removal | | Product | Snooze | Yes | Temporarily out of stock | | Product | Available After | Yes (appears) | Scheduled launch | | Product | Track Inventory | Yes (when restocked) | Limited quantities | | Product | Available Days | Yes (daily) | Day-specific items | | Store | Snooze | Yes | Emergency/capacity issues | | Menu | Unavailable Product Options | n/a | Grey out (**Disable**) or remove (**Hide**) unavailable items | For category availability options (Available After, Category Hours), see [Categories](/docs/guides/menu/categories#availability). # Create and schedule menu categories Source: https://storekit.com/docs/guides/menu/categories Group storekit menu products into categories with names, descriptions, images, and time-based hours so sections appear at the right time of day. Categories group your products into sections that customers can browse. They appear as tabs or sections on your menu. ## Creating a Category 1. Go to **Menus** in the sidebar and open a menu with **Edit** 2. Click **Add Category** 3. Enter a name and optional description 4. Click **Create Category** ## Category Fields | Field | Description | | -------------------- | ------------------------------------------------ | | **Name** | Displayed on your menu. Keep it short: 1-3 words | | **Description** | Brief context shown under the category name | | **Image** | Displayed on category cards in the menu | | **Navigation Image** | Displayed in the category navigation bar | | **Available After** | Schedule when the category becomes visible | ### Category Images Categories support two images: * **Image** - Shown on category cards when browsing the menu. Use a larger, detailed image that represents the category. * **Navigation Image** - Shown in the category navigation bar at the top of the menu. Use a smaller, simpler image or icon. Both are optional but help customers navigate your menu visually. ## Editing Categories Click the **settings icon** next to a category name to open the category editor. Here you can update all fields and access additional settings. ### Hide From Navigation On the **Details** tab, toggle **Hide from navigation** to hide a category from the navigation bar while keeping it visible in the main menu. Products remain fully accessible - they just won't have a navigation shortcut. Use this to keep the navigation bar clean and easy to browse, especially for dine-in venues with many categories. ### Category ID Every category has a read-only **Category ID**. Open the category editor and scroll to the bottom of the edit panel - it's the last item, just above the save button. It's a long identifier shown in a monospace font; click it to select the whole value, then copy it. Use it when you need to reference a specific category, for example targeting a **View Category** CTA on a [Menu Story](/docs/guides/marketing/stories), raising a support request, or working with the API. The **Category ID** is generated by storekit and can't be edited. Products have their own [**Product ID**](/docs/guides/menu/products#product-id). ## Availability Control when a category and its products are visible to customers. ### Available After Schedule when a category becomes visible using **Available After**. The category and all its products are hidden until the specified date and time. Use this to: * Prepare seasonal menus in advance * Launch new categories at a specific time * Coordinate with marketing campaigns ### Category Hours Categories can have their own opening hours, independent of your store hours: 1. Click the settings icon next to the category name 2. Go to the **Availability** tab 3. Toggle off **Category always available** 4. Set opening and closing times for each day, or toggle **Closed** for days it should be unavailable When a category is outside its hours, it's hidden from your menu along with all its products, even if the individual products are marked as available. Category hours are a **weekly** schedule: setting a category to **Closed** on Wednesday closes it every Wednesday, not just the coming one. There is no way to close a single category for one specific date. [Special Opening Hours](/docs/guides/store-settings/opening-hours#special-opening-hours) do apply to a single date, but they close the **whole store** on that date, not one category. When you toggle off **Category always available**, you must set opening hours for each day you want the category to be visible. If no hours are configured, the category will be hidden from your menu on all days. **Examples:** * Breakfast menu: 7am-11am * Lunch specials: 12pm-3pm * Happy hour: 4pm-7pm * Late night menu: 10pm-2am Category hours work independently of store hours. If your store is open but a category is outside its hours, that category won't be visible. After creating a new category with custom hours, verify it appears on your live store by placing a test order or previewing the menu during the configured hours. This ensures your hours are set correctly and customers can see the category as expected. You can set multiple time slots per day if needed (e.g., 7am-11am and 5pm-9pm for a brunch category that also serves dinner). #### Category hours vs pickup and delivery time slots Category hours only control **when a category is visible and orderable**. They are evaluated against the **current time** — the moment the customer is browsing — so the category disappears once the clock passes its closing time. Category hours do **not** restrict which pickup or collection time a customer can then choose at checkout. A Breakfast category set to 07:30–10:45 stops the category showing after 10:45, but a customer browsing at 09:00 can still select any pickup slot your store offers that day (for example up to 14:30) unless you also limit the collection times. To limit **when an order can actually be collected**, configure the pickup or delivery time windows under **Pre-Orders** — see [Pre-orders](/docs/guides/orders/advanced/pre-orders). There is no single "this item is only collectable before X" setting; the collection window is the combination of the category's hours and the pickup/delivery time windows. **Customers can still pick a collection time after my category closes.** This is expected — category hours only decide when the category is *shown*, not which collection times are offered. To stop collection after a category closes, set matching pickup or delivery time windows under **Stores** → your store → **Settings** → **Pre-Orders** (for example a **Pickup times** window of 07:30–10:45), or [block specific timeslots](/docs/guides/orders/advanced/block-timeslot). See [Pre-orders](/docs/guides/orders/advanced/pre-orders#limiting-when-an-order-can-be-collected) for the full walkthrough. ### Troubleshooting: items not showing on the menu If products are marked as available but don't appear on your menu, check the category's [Availability settings](#availability). Confirm that the current time is within the category hours and that its **Available After** date and time have passed. For POS-synced menus, products may sync from your POS, but category availability is still controlled in storekit. Check the category settings in storekit when synced products are missing. ### Printing Assign categories to specific printers for split printing. For example, send all "Drinks" orders to the bar printer and "Food" orders to the kitchen printer. See [Split Printing](/docs/guides/printing/split-printing) for setup instructions. ### Table Area Restrictions For dine-in stores, you can restrict categories to specific table areas. This is useful for: * Pool-side menu only available at pool tables * VIP menu only available in VIP section ## Reordering Categories The order categories appear in the menu builder is the order customers see. How you reorder them depends on the device you're using. Open the menu from **Menus** → **Edit** first. ### On a computer (mouse) Drag a category by its row — grab the row where the category name is shown (the drag icon sits to the left of the name) and drop it in the new position. The new order saves automatically as soon as you drop it; you'll see a **Category order updated** confirmation. There is no separate publish step for the order — once it's saved, customers see the new order. ### On a phone, tablet or touchscreen Drag and drop is disabled on phones, tablets and touchscreen laptops. If you try to drag a category on a touch device, nothing moves and no error is shown. On those devices, use the **Sort categories** tool instead: 1. Open the **More actions** menu (the icon with three dots, next to **Settings**) 2. Click **Sort categories** 3. Use the up and down arrows next to each category to move it 4. Click **Save edits** **Sort categories** only appears on touch devices — on a computer you reorder by dragging instead. ### The order is set per menu Category order is stored separately for each menu. If a store has more than one menu — for example an eat-in menu and a collection menu — reordering categories on one menu does **not** change the other. Open each menu from **Menus** → **Edit** and set the order on every menu you want to change. ### Reordering products within a category On a computer, drag a product row up or down within its category to reorder it; like categories, the new order saves automatically on drop. The same touch limitation applies: product drag and drop is disabled on phones, tablets and touchscreen laptops, and there is **no** Sort tool for products (unlike categories). To reorder products, use a computer with a mouse. ### Troubleshooting: I dragged a category and nothing happened Drag and drop is disabled on phones, tablets and touchscreen laptops, so the category won't move and no error appears. Either switch to a computer with a mouse, or use the **Sort categories** tool from the **More actions** menu as described in [On a phone, tablet or touchscreen](#on-a-phone-tablet-or-touchscreen). ## Deleting Categories To delete a category: 1. Click the settings icon next to the category name 2. Go to the **Delete** tab 3. Click **Delete category** Deleting a category will also delete all products within it. This cannot be undone. ## Multi-language Support If you've enabled multiple languages, click the translation icon next to text fields to add translations. See [Translations](/docs/guides/store-settings/translations) for setup. ## Tips * **Keep names short** - "Starters" not "Starters & Small Plates" * **Use descriptions** - Help customers understand what's in each section * **Limit categories** - 5-8 categories is ideal; too many overwhelms customers * **Order strategically** - Put high-margin categories first # Compare At Price Source: https://storekit.com/docs/guides/menu/compare-at-price Show original prices crossed out next to the current price in storekit to highlight discounts. Visual savings cues create urgency and improve conversion rates. Compare at price displays an original price crossed out next to the current price, making discounts more visible to customers. This creates urgency and shows customers exactly how much they're saving. ## How It Works When you set a compare at price on a product: * The compare at price appears struck through * The current price displays next to it * Customers see both prices side by side For example, a product with a £12.00 price and £15.00 compare at price displays as: ~~£15.00~~ £12.00 ## Setting Compare At Price 1. Go to your [storekit dashboard](https://dashboard.storekit.com) 2. Navigate to **Menu** 3. Click into a **Category** 4. Click the product you want to edit 5. In the **Compare At Price** field, enter the original (higher) price 6. Click **Save** The compare at price should be higher than the current price. If they're the same or the compare at price is lower, the display won't make sense to customers. ## Use Cases ### Limited-Time Promotions Run a weekend sale by temporarily lowering your product price and setting the original as the compare at price. After the promotion, remove the compare at price and restore the original price. ### Happy Hour Pricing Highlight happy hour discounts by showing the regular price crossed out next to the reduced price. ### Seasonal Sales During holiday promotions, use compare at price to show customers exactly how much they're saving on featured items. ### Launch Offers When introducing new products, offer an introductory price with the future regular price shown as the compare at price. ## Removing Compare At Price To remove the crossed-out price: 1. Open the product in your dashboard 2. Clear the **Compare At Price** field 3. Click **Save** The product will display only its current price. ## Tips * **Don't overuse** - If every item shows a discount, the effect diminishes * **Be honest** - Only show genuine previous prices to maintain customer trust * **Time-box promotions** - Set calendar reminders to remove compare at prices when promotions end * **Consider perception** - Large discounts (30%+) are more attention-grabbing than small ones # Cost Price Source: https://storekit.com/docs/guides/menu/cost-price Track product cost prices in storekit to enable margin analysis, profitability reporting, and AI-powered menu engineering. Never shown to customers. The cost price field lets you record your cost for each product. This data is never shown to customers and is used for internal reporting and upcoming AI features. ## Setting Cost Price 1. Go to your [storekit dashboard](https://dashboard.storekit.com) 2. Navigate to **Menu** 3. Click into a **Category** 4. Click the product you want to edit 5. Enter your cost in the **Cost** field 6. Click **Save** Include all costs that go into producing the item - ingredients, packaging, and any per-item labour costs. ## Upcoming: AI-Powered Upsells Cost data will power advanced AI upsell models that optimise for margin, not just revenue. By understanding your costs, the AI can: * Recommend high-margin items during checkout * Suggest add-ons that maximise profitability * Prioritise upsells based on contribution margin rather than price alone Adding cost data now means you'll be ready when these features launch. ## Best Practices * **Keep costs updated** - Review and update costs quarterly or when supplier prices change * **Be consistent** - Use the same cost calculation method across all products * **Include everything** - Factor in packaging, waste, and any per-unit costs # Course Assignments Source: https://storekit.com/docs/guides/menu/course-assignments Assign storekit products to courses (starter, main, dessert) for dine-in POS integration. Drive ordered kitchen flow on KDS, printers, and table service. Course assignments control which POS course a product is sent to when orders are placed for dine-in. This allows kitchen display systems and printers to organise items by course (starters, mains, desserts) rather than in the order they were added to the cart. Course assignments only apply to dine-in orders. Delivery and pickup orders ignore this setting. ## Supported POS Systems | POS | How Courses Work | | ----------------------- | ------------------------------------------------------------------------ | | **Lightspeed K-Series** | Item-level course number (0, 1, 2, etc.) sent with each product | | **TISSL** | Venue-level default course applied to all items | | **Zonal (Aztec)** | Item-level course ID, or selectable via a "Select Course" modifier group | ## Setting Course Assignments ### Lightspeed K-Series Each product can have its own course number: 1. Go to your [storekit dashboard](https://dashboard.storekit.com) 2. Navigate to **Menu** 3. Click into a product 4. In the **Course** field, enter the course number (e.g., `0` for starters, `1` for mains, `2` for desserts) 5. Click **Save** Course numbers typically start at 0. Check your Lightspeed configuration to confirm which numbers map to which courses. ### TISSL TISSL uses a venue-level default course for all items. Configure this in your TISSL integration settings, or [contact support](/docs/getting-started/contact-support) for assistance. ### Zonal (Aztec) Zonal (Aztec) supports two approaches: 1. **Item-level**: Set the course ID directly on each product 2. **Modifier-based**: A "Select Course" modifier group lets customers choose when items are served When syncing menus from Zonal (Aztec), course information is imported automatically from your Zonal menu configuration. ## Use Cases ### Multi-Course Dining For restaurants offering set menus or multi-course experiences: * Assign starters to course 0 * Assign mains to course 1 * Assign desserts to course 2 The kitchen receives items grouped by course, allowing proper timing of preparation. ### Fire-on-Demand Some POS systems support "fire on demand" where courses are held until the server triggers them. Course assignments ensure items are grouped correctly for this workflow. ## Troubleshooting **Items not appearing in correct course:** * Verify the course number matches your POS configuration * Check that the order is for dine-in (courses are ignored for delivery/pickup) * Ensure your POS integration is configured to use course data # CSV Import Source: https://storekit.com/docs/guides/menu/csv-import Import a storekit menu from a CSV or Excel spreadsheet: the template, the columns you can map, and why modifiers and tax rates can't be imported. A spreadsheet import builds a store's categories and products in one go, so you don't type a long menu into the dashboard by hand. It covers products only — modifiers, modifier groups and tax rates are added afterwards in the menu builder. The import is only available for a store that has **no menu**. If the store already has one, archive it first — see [Replacing a store's menu](/docs/guides/menu/managing-menus#replacing-a-stores-menu). ## Importing a Menu Go to **Stores**, click **Create a menu** on the store card, then **Spreadsheet Import**. On the **Import from a spreadsheet** page, click **Download Excel file** or **Download CSV file**. One row per product, using the columns in the table below. Keep category names spelled consistently — categories are matched by name, so "Starters" and "Starter" create two categories. Click **Import** on the same page and choose your file. A file is required; you cannot type rows in by hand. The uploader — headed **Menu import** — asks you to match each column in your file to a storekit field, then shows your rows so you can fix anything it flags as invalid. This part of the screen comes from our import tool, so its buttons are its own. Submit the reviewed rows. storekit creates a menu called **CSV Import Menu** for that store and opens it in the menu builder. Rename it from **Settings** → **Name** if you want something else. ## Columns You Can Import | Column | Required | Notes | | --------------------------- | -------- | ------------------------------------------------------------------- | | **Category Name** | Yes | Categories are matched by name, so keep spelling consistent | | **Product Name** | Yes | | | **Product description** | No | | | **Product Price** | Yes | The product's base price. Numbers only — no currency symbol | | **Product Inventory Count** | No | Whole number stock count | | **Product sorting** | No | Whole number; 0 is the top of the category | | **Product PLU / SKU** | No | | | **Allergens** | No | One or more tags from the fixed list below, comma-separated | | **May contain allergens** | No | Same fixed allergen list | | **Dietary tags** | No | One or more tags from the fixed dietary list below, comma-separated | | **Is Popular?** | No | Yes/no — highlights the item on your menu | | **Product Image URL** | No | Link to an image storekit can download | | **Product POS ID** | No | Only needed for direct POS integrations | That list is the whole import. There is no column for modifiers, modifier groups or tax rates. ### Allergen Tags The allergen list is fixed. **Allergens** and **May contain allergens** accept only these values: Celery, Gluten, Crustaceans, Fish, Eggs, Lupin, Milk, Molluscs, Mustard, Nuts, Peanuts, Sesame, Soya, Sulphites, Almonds, Barley, Brazil Nuts, Cashew, Hazelnuts, Kamut, Macadamia, Oats, Pecan, Pistachio, Rye, Spelt, Walnuts, Wheat, Sugared Drink, Dairy, Lentils, Queensland Nuts, Shellfish, Treenuts, Sources of gluten. ### Dietary Tags **Dietary tags** accepts only these values: Alcohol, Halal, Kosher, Vegan, Vegetarian, Tobacco, E-cigarette, Vapes, Smokeless tobacco, No allergens, Gluten Free, Sugar Free, Lactose Free. ## Modifiers Cannot Be Imported Modifiers, modifier groups and tax rates can't be imported from a spreadsheet. The import takes one file of products — a second file of modifiers cannot be uploaded, and there is no modifier or tax column to map. Add them after the import. After the products land: * Add modifier groups per product from **Menus** → **Edit** → the product → **Modifiers**. Groups are shared, so build a group once and attach it to other products with **Use an existing group** — see [Modifiers](/docs/guides/menu/modifiers#reusing-modifier-groups). * Set **Tax Rate** on each product in the product panel — see [Products](/docs/guides/menu/products). * To edit many products at once, use **Grid View** from **More actions** in the menu builder. The menu **Export CSV** does produce a separate `Modifiers_` file, but it is for reviewing your modifiers in a spreadsheet — it cannot be imported back in. See [Seeing All Your Modifier Groups](/docs/guides/menu/modifiers#the-menu-csv-export). ## Troubleshooting The store already has a menu, so the import options are out of reach. Archive the existing menu, reload the **Stores** page, then click **Create a menu** — see [Replacing a store's menu](/docs/guides/menu/managing-menus#replacing-a-stores-menu). Prices must be numbers, so strip currency symbols and thousands separators. **Product Inventory Count** and **Product sorting** must be whole numbers. Allergen and dietary values must match the fixed lists above exactly, comma-separated, with nothing extra in the cell. Header names don't have to match ours — you map each column to a storekit field during the import. Give every column a single header row, and check that **Category Name**, **Product Name** and **Product Price** are all mapped before continuing. Categories are created from **Category Name** as written. Fix the spelling in your file and import again into a fresh menu, or move the products in the menu builder. ## Related Guides Replace, archive and un-archive a store's menu Prices, images, tax rates and product details Add modifier groups after importing How allergen and dietary tags appear to customers # Custom Filters Source: https://storekit.com/docs/guides/menu/custom-filters Help customers find the right items on large menus with custom storekit filters for diet, calorie range, ingredients, and preferences. Reduce abandonment. **Early access** — Custom Filters is currently in early access. If you'd like to enable it for your store, please reach out to us on live chat. **storekit+ required** — Custom Filters are available on storekit+ and higher subscription plans. Large menus can feel overwhelming. Customers scroll past dozens of items looking for something that fits their diet, nutritional goals, or preferences — and sometimes give up before they order. Custom Filters solve this by letting customers instantly narrow down your menu to exactly what they're looking for. Whether your customers are counting calories, avoiding gluten, or looking for high-protein meals, Custom Filters put them in control — and help you turn more browsers into buyers. ## How It Works You define the filters, and storekit takes care of the rest. When a customer taps a filter, the menu instantly updates to show only the products that match. No page reloads, no waiting — it just works. Filters appear in two places: * **Filter bar** — Quick-access buttons shown directly on the menu page for one-tap filtering * **Filters modal** — A dedicated panel where customers can browse and combine multiple filters at once Customers can stack filters to get more specific results. When multiple filters are active, only products matching **all** of them are shown. ## Why It Matters * **Reduce decision fatigue** — Customers find what they want faster, especially on menus with 50+ items * **Increase conversion** — When customers can quickly find dishes that match their needs, they're more likely to order * **Stand out** — Most online ordering platforms don't offer this level of personalisation * **Cater to health-conscious diners** — Nutrition-based filters appeal to the growing number of customers who care about what they eat ## Example Filters Here are some examples of filters you could create: | Filter | What It Does | | ------------------- | ------------------------------------------- | | **Light Bites** | Shows meals below a calorie threshold | | **Protein Packed** | Shows meals meeting a minimum protein level | | **Low Sugar** | Shows meals with sugar below a set amount | | **Plant Based** | Shows items tagged as vegetarian | | **Gluten Friendly** | Shows items tagged as gluten-free | These are just examples — filters are fully customisable to suit your menu and your customers. ## Filter Types Custom Filters support different ways of matching products: * **Nutrition-based** — Filter by calories, protein, sugar, fibre, or any other nutritional value on your products * **Tag-based** — Filter by tags you've already added to your products (e.g. "vegan", "gluten-free") * **Combined** — Create filters that require multiple conditions to be met at once (e.g. a calorie range *and* a minimum protein level) ## What Customers See When Custom Filters are enabled, customers see filter buttons above the menu. Tapping a filter immediately hides products that don't match, making it easy to browse a large menu without scrolling through items that aren't relevant. If no products match the selected filters, a friendly message is shown with an option to clear all filters. ## Getting Started Custom Filters are configured for your store by the storekit team during early access. To get started: 1. **Decide on your filters** — Think about what your customers care about most (nutrition, dietary preferences, meal types, etc.) 2. **Make sure your products have the right data** — Filters work best when your products have complete [nutritional information](/docs/guides/menu/nutrition-info) and [tags](/docs/guides/menu/tags-allergens) 3. **Reach out to us** — Contact us on live chat and we'll set up your filters Custom Filters work alongside the existing dietary and allergen filters. Customers can use both at the same time. # Deposits Source: https://storekit.com/docs/guides/menu/deposits Add bottle deposits, container charges, or Pfand to storekit products. Refundable charge displayed separately from the price for transparency at checkout. The deposit field adds a refundable charge to products, typically used for bottle deposits (Pfand) or reusable container schemes. The deposit amount is displayed separately from the product price, making it clear to customers what portion is refundable. ## How It Works When a product has a deposit: * The deposit amount is added to the product's total price * Customers see "Includes bottle deposit: £X.XX" on the product page * The deposit is included in the order total ## Setting Up Deposits 1. Go to your [storekit dashboard](https://dashboard.storekit.com) 2. Navigate to **Menu** 3. Click into a product 4. In the **Deposit** field, enter the deposit amount 5. Click **Save** Enter the deposit in your currency's main unit (e.g., 0.25 for 25p or €0.25). ## Regional Requirements Bottle deposit schemes are mandatory in several regions: | Region | Typical Deposit | | ---------------------------- | ------------------------------------ | | **Germany** (Pfand) | €0.08 - €0.25 depending on container | | **Netherlands** (Statiegeld) | €0.15 - €0.25 | | **Sweden** (Pant) | 1-2 SEK | | **Norway** | 2-3 NOK | Check your local regulations for specific requirements. ## POS Integration Deposits sync automatically when importing menus from supported POS systems: * **Deliverect**: Imports deposit from `supplementalInfo.deposit` * **PointOne**: Imports deposit field directly For other POS systems, set deposits manually in the dashboard. ## Use Cases ### Bottle Deposits Required by law in many European countries for: * Glass bottles * Plastic bottles * Aluminium cans ### Reusable Container Schemes Some restaurants use deposits for: * Reusable takeaway containers * Reusable coffee cups * Meal prep containers ### Equipment Rental Deposits can also be used for: * Picnic equipment rental * Catering equipment deposits # Free Modifiers Source: https://storekit.com/docs/guides/menu/free-modifiers Offer customers a set number of free modifier selections before charging for additional choices. Common for pizza toppings, salad bars, and bowls. Free modifiers let you offer customers a set number of complimentary selections from a modifier group before charging for additional choices. This is commonly used for pizza toppings, salad add-ons, or drink customisations. ## How It Works When you set a free modifier count on a modifier group: 1. The first N selections are free (no additional charge) 2. Selections beyond the free limit are charged at their listed price 3. Pricing updates automatically as customers add or remove selections ### Example A pizza with `freeModifiers: 3` on the "Extra Toppings" group: | Selection | Price Charged | | -------------------------- | ------------- | | 1st topping (Pepperoni) | Free | | 2nd topping (Mushrooms) | Free | | 3rd topping (Olives) | Free | | 4th topping (Extra Cheese) | £1.50 | | 5th topping (Jalapeños) | £1.50 | ## Setting Up Free Modifiers This feature requires support to enable for your account. [Contact support](/docs/getting-started/contact-support) to request access. Once enabled, provide support with: 1. The modifier group name or ID 2. The number of free selections to allow ## Use Cases ### Pizza Toppings "Choose up to 3 toppings included, additional toppings £1.50 each" * Set `freeModifiers: 3` on the toppings modifier group ### Build-Your-Own Bowls "Includes 4 ingredients, extras charged separately" * Set `freeModifiers: 4` on the ingredients modifier group ### Coffee Customisations "First flavour shot free, additional shots 50p" * Set `freeModifiers: 1` on the flavour shots modifier group ### Salad Bar "Choose 5 toppings with your salad" * Set `freeModifiers: 5` on the toppings modifier group ## POS Integration ### Zonal (Aztec) When importing menus from Zonal (Aztec), the "inclusive" count from choice groups is automatically mapped to `freeModifiers`. If any modifier in the group has a supplemental price, the inclusive count is set to 0 (all selections are charged). ## Pricing Logic The system automatically applies free allocations to the **most expensive** selections first, ensuring customers always get the best deal: 1. All selected modifiers are sorted by price (highest first) 2. Free allocations are applied starting with the most expensive items 3. Cheaper items are charged if selections exceed the free limit ### Example With `freeModifiers: 2` and these selections: * Bacon (£2.00) * Cheese (£1.50) * Peppers (£0.50) Result: * Bacon: **Free** (most expensive) * Cheese: **Free** (second most expensive) * Peppers: **£0.50** (charged) Customers don't need to think about selection order - the system always optimises to give them the maximum discount automatically. # Inventory Management Source: https://storekit.com/docs/guides/menu/inventory-management Track storekit stock levels for products and modifiers to prevent overselling. When inventory hits zero, items show as unavailable to customers online. Inventory tracking lets you set stock levels for products and modifiers. When stock reaches zero, the item automatically shows as unavailable to customers, preventing overselling. ## Enabling Inventory for Products 1. Go to **Menu** > **Edit Menu** 2. Click on the product you want to track 3. Toggle **Track Inventory** on 4. Enter the current stock count 5. Click **Save** Stock decreases automatically with each order. When inventory reaches zero, the product shows as unavailable — by default it stays on the menu greyed out and marked **Currently sold out**, or it is removed entirely if the menu's [Unavailable Product Options](/docs/guides/menu/availability-snoozing#unavailable-product-options) is set to **Hide**. ## Enabling Inventory for Modifiers Modifier options also support inventory tracking: 1. Edit the modifier option 2. Toggle **Track Inventory** on 3. Set the stock count 4. Click **Save** When a modifier option runs out, it becomes unavailable — by default it stays in the modifier group greyed out and not selectable, or it is removed from the group entirely if the menu's [Unavailable Product Options](/docs/guides/menu/availability-snoozing#unavailable-product-options) is set to **Hide**. If it was the only option in a required modifier group on **Hide**, the parent product disappears from the menu too. ## Restocking To reset stock levels: 1. Edit the product or modifier option 2. Update the stock count to the new quantity 3. Click **Save** The item becomes available again immediately once stock is above zero. ## Use Cases | Scenario | Example | | ------------------ | ----------------------------------------------- | | **Daily specials** | Set stock count each morning for limited dishes | | **Limited items** | Track high-demand items with supply constraints | | **Flash sales** | Cap availability for promotional items | | **Seasonal stock** | Manage items with limited seasonal supply | For products that share ingredients (e.g., pizza dough used across multiple pizzas), use shared inventory to track a single stock pool. Counts are manual and don't reset overnight. See [Shared Inventory](/docs/guides/tips-tricks/shared-inventory). ## Inventory vs Snoozing Inventory tracking automatically marks items as unavailable when stock runs out. For manually hiding items temporarily, use [Availability & Snoozing](/docs/guides/menu/availability-snoozing) instead. | Method | Automatic | Use Case | | -------------------- | ------------------------------- | ------------------------ | | **Track Inventory** | Yes — unavailable at zero stock | Quantity-limited items | | **Snooze** | Yes — restores after duration | Temporarily out of stock | | **Toggle Available** | No — manual restore | Permanent removal | # Managing Menus Source: https://storekit.com/docs/guides/menu/managing-menus How menus are assigned to stores in storekit, how to replace a store's menu by archiving the old one, and how to archive or un-archive a menu. Every menu in storekit belongs to **one store**. This page explains where menus are listed, how to replace the menu a store uses, and how archiving works. ## Menus are per store A menu is created for a single store and stays attached to it. You cannot point a second store at a menu built for another store, and a store cannot select a menu from a list of existing menus. To use the same items in another store, build or import the menu again for that store. A [CSV import](/docs/guides/menu/csv-import) is usually the quickest way to recreate the same items in a second store. ## Where menus are listed Go to **Menus** in the left-hand navigation. Each card shows: * The menu name, with an **Archived** or **Inactive** label where it applies * **The store the menu belongs to**, on the line directly underneath the menu name * How many items and categories it has, when it was last synced (POS menus) and when it was created * **Edit** to open the menu builder Use **Search menus...** at the top of the page to filter by menu name. You can also see a store's menus on the **Stores** page: each store card lists its menus, with an **Edit** link next to each one. ### Show archived menus Archived menus are hidden from the **Menus** list. If the account has any, a **Show archived menus** link appears at the bottom of the list — click it to include them. Archived menus stay greyed out and carry an **Archived** label. If you see no such link, there are no archived menus to show. ## Replacing a store's menu The page that asks how you want to build your menu (**Now, let's setup your menu**, with the **Automatic Upload**, **Enter Manually** and **Spreadsheet Import** options) is only reachable while the store has **no menu**. On the **Stores** page, the **Create a menu** link appears on a store card only when that store has no menus. This is why you cannot get back to the import options once a menu exists — even if that menu is the empty one created by **Enter Manually**. To start again: Open the menu from **Menus** → **Edit**, then archive it as described below. Go to **Stores** and refresh the page so the store's menu list is up to date. The **Create a menu** link reappears on the store card. Click **Create a menu** and pick how to build it: **Automatic Upload** (import from an existing online menu or website), **Enter Manually** (build it in the menu builder) or **Spreadsheet Import** (a CSV or Excel file). While a store has no active menu, customers have nothing to order from its ordering page. Archive the old menu only when you are ready to build or import the replacement. ## Menu-level settings Some settings belong to the menu rather than to a product or a store. Open them from **Menus** → **Edit** → **Settings**, which slides in the **Menu Settings** panel: * **Name** — the menu name shown in the dashboard * **Unavailable Product Options** — whether unavailable items are **Disable** (*Visible but greyed out*, the default) or **Hide** (*Completely removed*) on your ordering page. See [Availability & Snoozing](/docs/guides/menu/availability-snoozing#unavailable-product-options) * **Image** — an optional image for the menu * **Archive** / **Un-archive** Menu — see below Click **Save changes** to apply the name, unavailable product option and image. ## Archiving and un-archiving a menu 1. Go to **Menus** and click **Edit** on the menu 2. Click **Settings** 3. At the bottom of the panel, click the **Archive** Menu button 4. Confirm the prompt Archiving removes the menu from the active list — it does not delete it. To bring it back, show archived menus, open the menu, click **Settings** and click the **Un-archive** Menu button. ## Check the store before you build After creating a menu, confirm the store name shown under the menu name on the **Menus** list is the store you meant. Adding a lot of items to a menu attached to the wrong store means rebuilding them. A menu cannot be moved between stores from the dashboard. If a menu ends up attached to the wrong store, [contact support](/docs/getting-started/contact-support) — we can look at it for you. ## Bulk-Editing a Menu in Grid View **Grid View** shows a whole menu as a spreadsheet, one row per product, so you can change the same field on many products without opening each product panel. It is the fastest way to update **Tax Rate %** across a menu — for example when VAT rates change or when the wrong rate was applied on import. To open it, go to **Menus** → **Edit** on the menu, click the **More actions** button at the top of the menu builder and choose **Grid View**. Grid View is enabled per account. If the **Grid View** option is missing from the actions menu, [contact support](/docs/getting-started/contact-support) and ask for it to be turned on. Click a cell to edit it in place. Each change is saved to the product as soon as you leave the cell — you will see **Product updated successfully** confirm each save, and there is no separate save step. Product columns: | Group | Columns | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | Identity | **Category** and **Modifier Groups** (read-only), **Name**, **Description**, **Printer Name**, **Course** | | Pricing and tax | **Price**, **Compare at Price**, **Tax Rate %**, **Delivery Tax Rate %** | | POS codes | **PLU**, **SKU**, **POS ID** | | Availability | **Available**, **Popular**, **Track Inventory**, **Inventory** | | Content | **Image**, **Video**, **Allergens**, **Ingredients** | | Nutrition | **Calories (kcal)**, **Salt (g)**, **Carbs (g)**, **Carbs Sugars (g)**, **Fats (g)**, **Fat Saturates (g)**, **Fibre (g)**, **Protein (g)** | Expand a product row to edit its modifier groups (**Name**, **Description**, **Min Selection**, **Max Selection**, **PLU**, **POS ID**, **Print as Items**) and, under each group, its options (**Name**, **Price**, **POS ID**, **Course**, **PLU**, **Available**, **Popular**, **Track Inventory**, **Inventory**, **Ingredients**, **Image**). On a POS-synced menu, Grid View only lets you change **Available**, **Course**, **Video**, **Ingredients** and the nutrition columns. Other cells are reverted with the message **You cannot edit items here. Please make changes in your POS system** — see [POS Menu Sync](/docs/guides/menu/pos-menu-sync). The [CSV import](/docs/guides/menu/csv-import) has no tax-rate column, so re-importing a spreadsheet is not a way to change tax rates in bulk — use Grid View, or edit each product's **Tax Rate** in its [product settings](/docs/guides/menu/products). ## Related Guides How categories, products, and modifiers fit together Bulk import products from a spreadsheet Sync your menu with your POS system Control when items are available Edit a single product's price, tax rate and settings # Modifiers Source: https://storekit.com/docs/guides/menu/modifiers Let customers customise storekit products with modifier groups. Configure options, min/max selections, free choices, pricing, and required vs optional. Modifiers let customers customise products. They're organised into **modifier groups** - each group contains options and rules about how many can be selected. ## Examples | Modifier Group | Options | Rules | | ---------------- | ------------------------------- | ------------------------ | | Choose your size | Small, Medium, Large | Required, pick exactly 1 | | Add toppings | Pepperoni, Mushrooms, Olives... | Optional, pick up to 5 | | Select your base | White rice, Brown rice, Noodles | Required, pick 1 | | Extra sauces | Ketchup, Mayo, BBQ... | Optional, pick any | ## Creating a Modifier Group 1. Go to **Menus** → **Edit** on the menu, then click a product to open the editor 2. Go to the **Modifiers** tab 3. Under **Add a modifier group**, click **Create a new group** 4. Enter a **Name** (e.g., "Choose your size") 5. Click **Add an option** for each option and give it a name and a **Price** 6. Set how many options customers can choose under **How many options can customers choose?** 7. Click **Save Modifiers** ## Modifier Group Settings ### Name & Description | Field | Description | | --------------- | --------------------------------------------- | | **Name** | Shown to customers (e.g., "Choose your size") | | **Description** | Optional extra context | | **SKU / PLU** | For POS integration | ### Selection Rules Set how many options customers must/can choose: | Setting | Example | Behaviour | | --------------- | --------------- | -------------------------- | | Min: 1, Max: 1 | Choose a size | Required, pick exactly one | | Min: 0, Max: 3 | Add toppings | Optional, pick up to 3 | | Min: 2, Max: 4 | Pick your sides | Required, pick 2-4 | | Min: 0, Max: 10 | Extra sauces | Optional, pick any number | Set **Min: 0** to make a modifier group optional. Set **Min: 1** or higher to make it required. ### Allow Multiple of Same Option Enable **Allow customers to select an option more than once** for cases like: * "2x extra cheese" * "3x bacon" You can optionally set a specific limit per option. ### Free Modifiers Set a number of **Free Modifiers** to give customers a certain number of free selections before charging. Useful for: * "First 3 toppings free, then £0.50 each" * "Includes 2 sauces, extra sauces £0.30" ## Modifier Options Each option within a group has: | Field | Description | | ------------------ | -------------------------------- | | **Name** | Option name shown to customers | | **Price** | Additional cost (can be £0) | | **Original Price** | For showing discounts on options | | **POS ID** | For POS integration | | **Tax Rate** | Override default tax | | **Default Qty** | Pre-select this option | | **In Stock** | Toggle availability | ### Default Quantity Pre-select options by setting a default quantity. The total of all default quantities cannot exceed the group's maximum. ### Option Availability Toggle **In Stock** off to temporarily hide an option without deleting it. ### Tags & Allergens Modifier options can have their own allergen information, dietary tags, and nutrition data. When a customer selects options, the combined allergen information from the product and all selected modifiers is shown. See [Tags & Allergens](/docs/guides/menu/tags-allergens) for details. ## Pricing Variants with Modifiers Some products come in variants that cost different amounts - for example ravioli "classici" at £6 and ravioli "grigliati" at £7. Instead of creating a separate product for each variant, set a base price and use a required modifier group where each option carries the price difference. 1. Set the product's [**Price**](/docs/guides/menu/products) to your cheapest variant (e.g., £6) 2. Add a modifier group named for the choice (e.g., "Type") 3. Set the selection rules to **Min: 1, Max: 1** so it's required and the customer picks exactly one 4. Add one option per variant, with the **Price** set to the difference from the base price: | Option | Price | Customer Pays | | --------- | ----- | -------------------- | | Classici | £0.00 | £6.00 (base only) | | Grigliati | £1.00 | £7.00 (base + £1.00) | The customer always sees the correct total for the variant they choose, and you manage one product instead of several. The option matching your base price should be **£0.00** - its price is already included in the product's base price. ## Display Settings ### Initial Display Setting **Initial display setting** controls how the modifier group appears on the product page: | Setting | Behaviour | | ------------- | ----------------------------------------------------------------------------------------------------- | | **Expanded** | Options visible immediately (default) | | **Collapsed** | Options hidden behind a tap/click | | **Hidden** | Group not shown to the customer at all. Greyed out until storekit support enables it for your account | ### Print as Products Enable **Print modifier options as products** to print each selected modifier on its own line on receipts, rather than as sub-items under the product. ## Reusing Modifier Groups You can attach existing modifier groups to multiple products: 1. Open a product's **Modifiers** tab 2. Under **Add a modifier group**, click **Use an existing group** 3. Find the group in the list and click **Add group to product** Changes to a shared modifier group affect all products using it — the dashboard says so on that screen: "Use an existing modifier group. Note that any changes made to a shared modifier group will be applied against all products". Editing a shared modifier group updates it everywhere it's used. Create a new group if you need different options for specific products. ## Seeing All Your Modifier Groups There is no page in the dashboard that lists every modifier group. Groups belong to the products that use them: you create and edit a group from any product it is on (**Menus** → **Edit** → the product → **Modifiers**), and because groups are shared, editing one from a single product changes it for every product using it — see [Reusing Modifier Groups](#reusing-modifier-groups). Two ways to review your groups without opening every product one by one. ### The Existing-Group List On any product, **Modifiers** → **Use an existing group** lists every modifier group on that menu, with its **SKU** and an **items** link showing the group's options. Groups already on the product you opened read **Already added**. The list is per menu and read-only: use it to check what exists, then open the group from a product that uses it to change anything. Click **Go Back** to leave without attaching a group. ### The Menu CSV Export To review every group and option in a spreadsheet, export the menu: Go to **Menus** → **Edit** on the menu you want. Click **More actions** (the icon with three dots, next to **Settings**). Click **Export CSV**, choose **CSV for Excel, Number, or other spreadsheet programs** or **Plain CSV file**, then confirm with the **Export** button. The download is a `Menu.zip` holding two files. The one whose name starts with `Modifiers_` is the modifier list: one row per modifier option, with the group it belongs to in the **Modifier Group** and **Modifier Group ID** columns and the option's own name, **Price**, **PLU**, **SKU**, allergens and availability alongside it. The other file lists your products, where **Modifier Groups** is the number of groups on each product rather than their names. The columns are fixed — the export dialog only chooses between the two CSV formats. The modifier file covers one menu at a time and only includes groups attached to at least one product on it, so a group you created and never attached will not appear. ## Reordering * Drag modifier groups to change their order on the product * Drag options within a group to change their order ## Deleting Modifier Groups 1. Open the group from a product's **Modifiers** tab 2. Click **Remove Group** This removes the group from the current product. If it's shared with other products, it remains on those products. ## Tips * **Name groups clearly** - "Choose your size" not "Size options" * **Order options logically** - Smallest to largest, or most popular first * **Use £0 options** - For substitutions or preferences (e.g., "No onions") * **Set sensible limits** - Too many options overwhelms customers * **Use free modifiers** - Encourages customisation without complexity # Multi Max Source: https://storekit.com/docs/guides/menu/multi-max Use Multi Max in storekit to control how many of a single modifier option a customer can pick — separate from the group's overall maximum selection limit. Multi Max controls how many of a single modifier option a customer can select. This is different from the group's `max` setting, which limits total selections across the entire group. ## How It Works When `multiMax` is greater than 1 on a modifier group: * A quantity stepper appears next to each selected modifier * Customers can add multiple of the same option (e.g., 3x Extra Cheese) * Each unit is priced and charged individually ### Example A burger with a "Extras" modifier group: | Setting | Value | | ------------ | ---------------------------- | | **max** | 5 (total extras allowed) | | **multiMax** | 3 (max per individual extra) | Customer can select: * 3x Extra Cheese * 2x Extra Bacon * Total: 5 extras ✓ But not: * 4x Extra Cheese (exceeds multiMax of 3) ✗ ## Max vs Multi Max | Setting | Controls | Example | | ------------ | --------------------------------- | ------------------------- | | **max** | Total selections across the group | "Choose up to 4 toppings" | | **multiMax** | Quantity per individual option | "Up to 2 of each topping" | When both are set: * `max: 6, multiMax: 2` → Customer can pick up to 6 total toppings, but no more than 2 of any single topping * `max: 0, multiMax: 3` → No total limit, but max 3 of each option Set `multiMax: 1` (the default) when customers should only be able to add each option once, like pizza base choices or drink sizes. ## Use Cases ### Extra Toppings Allow multiple portions of premium toppings: * "Add up to 3 portions of any topping" * Each portion charged separately ### Shot-Based Drinks Coffee shops offering multiple espresso shots: * `multiMax: 4` for espresso shots * Customer can order a quad-shot latte ### Sauces & Sides Let customers load up on their favourites: * "Extra sauce portions available" * `multiMax: 3` for each sauce option ### Protein Add-Ons Bowl or salad builders: * "Double or triple your protein" * `multiMax: 3` for chicken, tofu, etc. ## Setting Up Multi Max 1. Go to your [storekit dashboard](https://dashboard.storekit.com) 2. Navigate to **Menu** 3. Click into a product, then open a **Modifier Group** 4. Set the **Multi Max** value (e.g., 3 to allow up to 3 of each option) 5. Click **Save** # Nested modifiers: setup, POS support, and nesting depth Source: https://storekit.com/docs/guides/menu/nested-modifiers Configure nested modifier groups in storekit for build-your-own menus, with per-POS support and nesting depth guidance for Toast, Deliverect, Stream, and Zonal. Nested modifiers allow you to display additional modifier groups only when a customer selects a specific option. This keeps your menu clean and guides customers through complex customisation flows. ## How It Works When a customer selects a modifier option that has nested modifiers attached, additional modifier groups appear below. If they change their selection, the nested groups update accordingly. **Example: Build Your Burger** 1. Customer sees "Choose your patty" with options: Beef, Chicken, Veggie 2. Customer selects "Beef" 3. A new modifier group appears: "How would you like it cooked?" with options: Rare, Medium, Well Done 4. If customer changes to "Veggie", the cooking preference disappears (not applicable) ## Common Use Cases | Scenario | Parent Modifier | Nested Modifier | | ----------------------------- | -------------------------------- | ------------------------------------------- | | **Burger cooking preference** | Patty type (Beef/Chicken/Veggie) | Cooking preference (only for Beef) | | **Pizza size extras** | Size (Small/Medium/Large) | Extra toppings (different options per size) | | **Drink customisation** | Drink type (Coffee/Tea/Smoothie) | Milk options (only for Coffee/Tea) | | **Meal deals** | Main course selection | Side options specific to that main | ## Supported Integrations Nested modifiers are supported when syncing menus from: * **Deliverect** * **Stream** * **Toast** * **Zonal Aztec** On a menu synced from a POS or menu management system, nested modifiers are configured there and sync automatically to storekit. On a menu you build in storekit, attach them per option: click the pencil icon on a modifier option to open the **Edit modifier** panel, then use the **Sub-Modifiers** tab. ## Nesting Depth How many levels of nesting sync across depends on the integration. | Integration | Nesting depth | | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Deliverect** | A single level of nesting today (one modifier group nested under a modifier option). Deeper levels are not synced yet. | | **Toast** | Multiple levels — Toast menus sync nested groups recursively, so there is no fixed limit built in. Around two levels is what we've tested and recommend. | | **Stream** | Nested modifier groups sync as configured in Stream. | | **Zonal Aztec** | Nested modifier groups sync as configured in Aztec. | Very deep nesting (three or more levels) is not guaranteed. Even where the integration has no hard limit, deeply nested structures are harder for customers to complete and can behave unexpectedly. Keep nesting shallow — one or two levels — for the most reliable experience. ## Customer Experience Nested modifiers provide a cleaner checkout experience: * Customers only see relevant options based on their selections * Reduces overwhelm from too many choices at once * Guides customers through logical customisation steps * Prevents invalid combinations (e.g., cooking preference for a veggie burger) ## How Selections Are Handled When a parent modifier selection changes: 1. Any nested modifier groups for the previous selection are hidden 2. Selections in those hidden groups are cleared 3. New nested modifier groups for the current selection appear 4. Required nested modifiers must be completed before checkout If a nested modifier group is required, customers must complete it before adding the item to their basket. Make sure your menu structure accounts for this. ## Why a product shows as sold out when its modifiers are unavailable A modifier group with a minimum of 1 or more is required: the customer cannot order the product without a valid selection in it. If a required **top-level** group has **no available options left**, the product itself becomes unavailable — not just that group. Required **nested** groups behave differently. Because nested groups only appear after the customer picks a parent option, the ordering page does not pre-emptively grey out the product. Instead, the product stays orderable — but when the customer picks the parent option that reveals the empty required nested group, they cannot complete the item and cannot add it to the basket. A real case: an "Add Polpette" option on a pasta dish revealed a required nested group with two options, chicken and beef meatballs. Both meatball options went unavailable, which left the required nested group with no options. On **Hide**, every pasta dish using it showed as sold out. On **Disable**, the pasta still looked orderable but customers who selected "Add Polpette" could not add it to their basket. ### What the customer sees What happens on the ordering page depends on the menu's [Unavailable Product Options](/docs/guides/menu/availability-snoozing#unavailable-product-options) setting, because that is what decides whether unavailable options are still listed in the group: | Setting | Behaviour for a required top-level group with no options left | Behaviour for a required nested group with no options left | | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Disable** (default) | Unavailable options stay in the group, greyed out and labelled **(Currently unavailable)**. The product itself shows greyed out with **Currently sold out** in place of its description. | Unavailable options stay in the nested group, greyed out. The product still looks orderable on the product list. Customers who select the parent option that reveals the empty nested group cannot complete the item and cannot add it to the basket. | | **Hide** | Unavailable options are removed from the group. That empties the required group, so the product shows greyed out with **Currently sold out** in place of its description. The product is not removed from the menu. | Unavailable options are removed from the nested group. That empties it, so the product shows greyed out with **Currently sold out** in place of its description. The product is not removed from the menu. | A required group that has no options configured at all — for example a group that synced from the POS with none — is different only on **Hide**: the product is dropped from the menu entirely, rather than shown greyed out with **Currently sold out**. Nothing in the dashboard flags the product: its own availability is untouched, so it still shows as available in the menu builder. The unavailability is worked out when the ordering page loads, from the state of the product's required groups. ### How to spot it Go to **Menus**, click **Edit** on the menu, click the product, and open the **Modifiers** tab of the **Edit product** panel. Each row of the **Group** / **Options** table is a modifier group attached to this product; click **Edit** on a row to open the group. In the group, look under **How many options can customers choose?**. There are two number fields: the first is the minimum, the second the maximum. A minimum of 1 or more makes the group required. Each row of the group's table is an **Option** with an **In Stock** toggle. If every option is toggled off — or the table is empty and only **Add an option** is offered — a required group here cannot be satisfied, and the product is unavailable. Nested groups appear in the product's **Modifiers** list exactly like ordinary groups — the dashboard does not label a group as nested. To see the nesting, click the pencil icon on a modifier option's row to open the **Edit modifier** panel and go to its **Sub-Modifiers** tab. The **Sub-Modifier Group** column lists the groups that option reveals, each with its (minimum - maximum) range; **No sub-modifier groups added** means the option reveals none. ### On POS-managed menus, fix it in the POS On a POS-managed menu (Deliverect, Toast, Zonal, Stream, Lightspeed K-Series, 3S POS) the modifier structure, each group's minimum and each option's availability all come from the POS, and every sync writes the POS values back over anything you change in storekit. So for a Toast menu delivered through Stream, make the change in Toast: * mark at least one option in the required nested group available again, or * set that group's minimum to 0 so it is no longer required, or * restructure it as described below Then let the menu reach storekit again: * **Stream** and **Deliverect** push the menu when it is published in the source system. There is no sync button in storekit for those integrations. * **Lightspeed K-Series**, **Zonal** and **Toast** menus have a **Sync** button on the menu's row in **Menus**. Either way, the menu row in **Menus** shows **Synced** with how long ago the last sync ran — use it to confirm the new data arrived. ### Prefer an optional standalone group to a required nested one Where the nested choice is really part of an optional extra, model the extra as one optional group instead of an option that reveals a required group: | Structure | When both meatball options are unavailable | | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | | "Add Polpette" **option**, revealing a required nested group with chicken / beef meatballs | The nested group cannot be satisfied, so every product using it is unavailable | | "Add Polpette" **group** with a minimum of 0, containing chicken / beef meatballs as its options | Nothing to add, and the product stays orderable | Keep required minimums for choices the customer must make about the product itself (size, base, cooking preference), not for add-ons. ## Troubleshooting ### Nested Modifiers Not Appearing If nested modifiers aren't showing: * Verify your POS/menu system has nested modifiers configured correctly * Check that the menu has synced recently * Ensure you're using a supported integration (Deliverect, Stream, Toast, or Zonal Aztec) ### A Product Shows as Sold Out but Looks Available in the Dashboard Check its required modifier groups, including nested ones — see [Why a product shows as sold out when its modifiers are unavailable](#why-a-product-shows-as-sold-out-when-its-modifiers-are-unavailable). ### Wrong Modifiers Showing If incorrect nested modifiers appear: * Review the parent-child relationships in your POS system * Re-sync your menu after making changes * Check that modifier group IDs are correctly linked For further assistance, [contact support](/docs/getting-started/contact-support). # Nutrition Information Source: https://storekit.com/docs/guides/menu/nutrition-info Add calorie counts and nutritional information to storekit menu items and modifiers to inform customer choices and meet regional menu labelling regulations. Adding nutrition information to your products and modifiers helps customers make informed choices and may be a legal requirement in some regions. ## Adding Nutrition to Products 1. Go to **Menu** > **Edit Menu** 2. Click on the product you want to edit 3. Open the **Tags & Allergens** tab 4. Scroll to the **Nutrition** section and expand the dropdown 5. Fill in the relevant fields 6. Click **Save** ## Adding Nutrition to Modifiers Modifier options can also have nutritional data: 1. Edit the modifier option 2. Open the **Tags & Allergens** section 3. Expand the **Nutrition** dropdown 4. Fill in the relevant fields 5. Click **Save** ## Available Fields | Field | Unit | | ----------------- | ----- | | **Calories** | kcal | | **Fat** | grams | | **Saturated Fat** | grams | | **Carbohydrates** | grams | | **Sugar** | grams | | **Protein** | grams | | **Salt** | grams | Nutritional values are displayed on the product detail page when customers view the item. When a customer selects modifier options, the combined nutritional information from the product and all selected modifiers is shown. In the UK and EU, providing accurate nutritional information may be a legal requirement for certain food businesses. Check your local regulations. ## Tips * **Be accurate** — Ensure values reflect actual serving sizes * **Update regularly** — Adjust when recipes or portions change * **Include modifiers** — Customers rely on complete data when customising items For managing allergens and dietary tags alongside nutrition, see [Tags & Allergens](/docs/guides/menu/tags-allergens). # Menu Overview Source: https://storekit.com/docs/guides/menu/overview Understand the storekit menu hierarchy of categories, products, and modifiers and how they fit together to build the customer ordering experience. Each menu belongs to a single store. For how menus are listed, replaced and archived, see [Managing Menus](/docs/guides/menu/managing-menus). Your menu is built from three components: ``` Menu └── Categories (e.g., "Starters", "Mains", "Drinks") └── Products (e.g., "Margherita Pizza", "Coca Cola") └── Modifiers (e.g., "Choose your size", "Add toppings") ``` ## Categories Categories group your products into sections. Customers see these as tabs or sections on your menu. **Examples:** Starters, Mains, Desserts, Drinks, Sides [Learn more about Categories →](/docs/guides/menu/categories) ## Products Products are the items customers add to their cart. Each product belongs to one category and has a name, price, and optional details like images, allergens, and nutritional information. **Examples:** Margherita Pizza, Chicken Burger, Chocolate Cake [Learn more about Products →](/docs/guides/menu/products) ## Modifiers Modifiers let customers customise products. They're grouped into modifier groups with rules about how many options can be selected. **Examples:** * "Choose your size" (required, pick one) * "Add toppings" (optional, pick up to 5) * "Select your base" (required, pick one) [Learn more about Modifiers →](/docs/guides/menu/modifiers) ## Quick Start 1. **Create a category** - Go to **Menus** → **Edit** → **More actions** → **Add category** 2. **Add products** - Click **Add product** in the category 3. **Add modifiers** - Open a product → **Modifiers** tab → **Create a new group** ## Related Guides Assign, replace, and archive a store's menu Manage allergens, dietary tags, and nutrition Control when items are available Bulk import products from a spreadsheet Sync your menu with your POS system ## Advanced Functionality For more complex menu setups, explore these advanced features: * [Compare At Price](/docs/guides/menu/compare-at-price) - Show promotional pricing with original prices struck through * [Cost Price](/docs/guides/menu/cost-price) - Track internal costs for margin analysis * [Free Modifiers](/docs/guides/menu/free-modifiers) - Offer "first N free" modifier pricing * [Multi Max](/docs/guides/menu/multi-max) - Allow multiple quantities per modifier option * [Nested Modifiers](/docs/guides/menu/nested-modifiers) - Show conditional modifiers based on selections * [Course Assignments](/docs/guides/menu/course-assignments) - Assign items to courses for POS integration * [Deposits](/docs/guides/menu/deposits) - Add bottle deposits (Pfand) to products * [Removal Modifiers](/docs/guides/menu/removal-modifiers) - Let customers remove default ingredients # POS Menu Sync Source: https://storekit.com/docs/guides/menu/pos-menu-sync Sync your storekit menu from your POS using push, pull, or manual linking depending on your provider. Keep prices, items, and stock aligned across systems. If you use a POS system or menu management platform, you can sync your menu to storekit instead of building it manually. How syncing works depends on your integration. ## Is Your Menu Synced From a POS, or Managed in storekit? Answer this first: on a POS-managed menu the POS is the source of truth, so items are fixed in the POS and re-synced — changing product or category settings in storekit will not bring a missing item back. 1. Go to **Menus** in the storekit dashboard 2. Click **Edit** on the menu you want to check 3. Look at the row directly under the menu header If the menu is synced from a POS or menu platform, that row names the provider — for example **Connected to Zonal** or **Managed by Deliverect**. If there is no such row, the menu is managed in storekit (but see [When there is no status row](#when-there-is-no-status-row) below). Most providers also show **Synced** followed by a relative time and the menu version, for example "Synced 3 hours ago · v12". Hover that text to see the exact date and time of the last sync. ### What Each Status Row Means | Status row | Provider | Sync controls in the same row | | --------------------------- | ------------------- | ------------------------------------------------------------------------------------------------- | | **Connected to Lightspeed** | Lightspeed K-Series | **View in POS** and **Sync** | | **Connected to Zonal** | Zonal (Aztec) | **Sync menu** and **Sync price & availability** | | **Connected to Toast** | Toast | **View in POS** and **Sync** | | **Connected to PointOne** | PointOne | **Sync menu** | | **Connected to TISSL** | TISSL | **Sync stock** only — there is no menu sync button for TISSL | | **Connected to 3S POS** | 3S POS | None — where other providers show buttons, this row shows the text **Managed externally** | | **Managed by Deliverect** | Deliverect | None — the row shows the text **Menu synced externally** instead of buttons | | **Synced to OpenTable** | OpenTable | **Sync to OpenTable**. This pushes your storekit menu out to OpenTable; it does not import a menu | The provider text is on the left of the row; for 3S POS and Deliverect the second string (**Managed externally** / **Menu synced externally**) appears in the same row where the sync buttons would be, so both strings are visible at once. Where no sync button is shown for your provider, there is no self-serve way to re-sync the menu from the dashboard — [contact support](/docs/getting-started/contact-support) and ask for a re-sync. ### When There Is No Status Row Stream, Syrve, Comtrex and Centegra menus show no status row above the menu, so the absence of a row does not by itself prove the menu is managed in storekit. To check whether a POS is connected to the store: 1. Go to **Stores** in the storekit dashboard 2. Select your store 3. Click **Settings** 4. Open the **Integrations** tab 5. Look for your POS card (for example **Syrve**, **Comtrex**, **Centegra**, **Tissl**, **Toast POS**, **Zonal**, **Lightspeed K-Series**, **PointOne** or **Deliverect**) and check whether it is marked **Connected** Stream has no merchant-facing integration card. If you believe your menu comes from Stream, [contact support](/docs/getting-started/contact-support) to confirm. ## Items or Whole Categories Missing From the Online Menu Follow [Is Your Menu Synced From a POS, or Managed in storekit?](#is-your-menu-synced-from-a-pos-or-managed-in-storekit) above. Do not start with availability toggles — if the menu is POS-managed, they are not the cause. Use the sync control for your provider in the status row (for Zonal, **Sync menu**; for Lightspeed K-Series and Toast, **Sync**; for PointOne, **Sync menu**). When it finishes, check the **Synced** time and version in the same row to confirm the sync went through — the relative time should now read as just-synced and the version number should have increased. If the items are still missing after a successful sync, they are missing on the POS side: confirm in your POS that each item is on the specific POS menu the store is linked to, is available or in stock, and is assigned to a category. Items that are unmapped or unavailable in the POS do not appear in storekit. If your provider has no sync button (TISSL, 3S POS, Deliverect, Stream), [contact support](/docs/getting-started/contact-support) and ask for a re-sync. For individual items, check product availability, snoozing and **Available After** — see [Availability & Snoozing](/docs/guides/menu/availability-snoozing#product-availability). For a whole category missing at once, check the category's availability and hours — see [Category Availability](/docs/guides/menu/categories#availability) and [items not showing on the menu](/docs/guides/menu/categories#troubleshooting-items-not-showing-on-the-menu). Category availability and hours are always controlled in storekit, even on a POS-managed menu. If a whole section is missing at a particular time of day, check the category hours in storekit first. ## Sync Types Different integrations use different sync methods: | Type | How It Works | Integrations | | ------------------ | ----------------------------------------------------------------- | ---------------------------------------------------------- | | **Push** | The POS or menu platform sends menu changes to storekit | Deliverect, Stream | | **Pull** | storekit fetches the menu from the POS on demand or on a schedule | Lightspeed K-Series, Zonal, Toast, Syrve, PointOne, 3S POS | | **Manual Linking** | Products are created in storekit and linked to POS IDs | TISSL, Comtrex, Centegra | 3S POS menus are pulled by storekit but have no dashboard sync button — the row above the menu shows **Managed externally**. TISSL syncs stock only (**Sync stock**); the menu itself is built in storekit and linked by PLU. OpenTable is not in this table because it is outbound only: storekit pushes your menu to OpenTable with **Sync to OpenTable** and never imports a menu from it. ## Push Integrations With push integrations, menu changes sync automatically whenever you update your menu in the source system. ### Deliverect Deliverect pushes your menu to storekit automatically when changes are published. No action is required on your part. 1. Make menu changes in Deliverect 2. Publish the menu in Deliverect 3. Changes appear in storekit in 10-30 seconds ### Stream Stream pushes menu data to storekit automatically. Menu updates sync when published in the Stream platform. Push integrations provide the fastest sync times since changes are sent immediately when made. ## Pull Integrations With pull integrations, you trigger menu syncs from the storekit dashboard or set up automated schedules. ### Manual Sync To manually sync your menu: 1. Go to **Menus** in the storekit dashboard 2. Click **Edit** on the menu 3. In the row under the menu header, click the sync control for your provider: * Lightspeed K-Series: **Sync** * Zonal: **Sync menu** (or **Sync price & availability** for the lightweight update) * Toast: **Sync** * PointOne: **Sync menu** * TISSL: **Sync stock** (stock levels only) * OpenTable: **Sync to OpenTable** (pushes your menu to OpenTable) 4. Wait for the sync to complete, then check the **Synced** time and version in the same row The sync fetches the latest menu data from your POS and updates storekit accordingly. For Lightspeed K-Series, Zonal and Toast you can also sync from the menu list: go to **Menus** and click **Sync all menus**. There is no menu sync button for 3S POS, Deliverect or Stream. Deliverect and Stream push menus to storekit, and 3S POS menus are synced outside the dashboard — for those, [contact support](/docs/getting-started/contact-support) if a menu looks out of date. ### Automated Sync Schedules For pull integrations, sync schedules keep your menu up to date without manual intervention. **Scheduled sync types:** * **Menu** — a full menu sync, supported for Lightspeed K-Series, Zonal, Syrve and Toast * **Menu Light (Zonal)** — Zonal only; updates prices and availability without rebuilding the menu * **Stock Sync (TISSL)** — TISSL only; updates stock levels Schedules are configured on the **Automations** page: 1. Go to **Stores** in the storekit dashboard 2. Select your store 3. Click **Settings** 4. Click **Automations** 5. Under **Sync Schedules**, click **Add sync schedule** 6. Choose the type (**Menu**, **Menu Light (Zonal)** or **Stock Sync (TISSL)**) and a frequency 7. Click **Save** The frequency list is fixed: **Every hour**, **Every 2 hours**, **Every 4 hours**, **Every 6 hours**, **Every 12 hours**, **Daily at 6 AM**, **Daily at 9 AM**, **Daily at midnight**, or **Custom cron expression**. **Menu Light (Zonal)** and **Stock Sync (TISSL)** also offer **Every 5 minutes**, **Every 15 minutes** and **Every 30 minutes**. **Automations** is only shown to accounts with the automations feature enabled. If you do not see it under **Settings**, [contact support](/docs/getting-started/contact-support) to have a sync schedule set up for you. Schedule syncs for quiet periods like early morning to avoid any disruption during busy service times. ### Zonal Lightweight Sync Zonal supports a "lightweight" sync option that only updates prices and availability without re-syncing the entire menu structure. This is faster and useful for frequent price updates. ## Manual Linking Integrations Some integrations require you to create products in storekit and manually link them to your POS using product IDs (PLUs). ### TISSL 1. Create your menu in storekit 2. For each product, enter the TISSL PLU in the product settings 3. Orders will include the PLU for TISSL to recognise the item ### Comtrex 1. Create your menu in storekit 2. Link products using the Comtrex product ID 3. Orders are sent with the correct IDs for Comtrex processing ### Centegra 1. Create your menu in storekit 2. Link products using the Centegra product ID 3. Orders are sent with the correct IDs for Centegra processing Manual linking gives you full control over your storekit menu design while maintaining POS compatibility for order processing. ## What Syncs Depending on your integration, menu sync includes: | Data | Description | | ---------------- | -------------------------------------------------- | | **Categories** | Menu sections and their order | | **Products** | Items, prices, descriptions, images | | **Modifiers** | Modifier groups and options | | **Availability** | Which items are currently available | | **Allergens** | Allergen and dietary information (where supported) | ## After Syncing After a menu sync: * Review the imported menu for accuracy * Add images if not included from the POS * Check modifier pricing and rules * Set up any storekit-specific features (promotional pricing, deposits, etc.) Some POS systems don't include all data (like images or detailed descriptions). You may need to enhance your menu in storekit after syncing. ## Troubleshooting ### Sync Not Starting * Check your POS credentials are valid * Verify the integration is connected in Store Settings * Ensure you have menu data in your POS system ### Missing Products Start with [Items or Whole Categories Missing From the Online Menu](#items-or-whole-categories-missing-from-the-online-menu) above to work out whether the menu is POS-managed or managed in storekit. For a POS-managed menu: * Confirm products are published/active in your POS * Check the product is assigned to a category in the POS menu the store is linked to * Some integrations only sync specific menu types ### Incorrect Prices * Verify prices in your POS system * Check for tax-inclusive vs tax-exclusive settings * Re-sync after making price changes in the POS ### Deleted Items Keep Reappearing After a Sync For pull integrations (Lightspeed K-Series, Zonal, Toast, Syrve, PointOne, 3S POS), your **POS menu is the source of truth**. Each sync rebuilds the storekit menu from the linked POS menu, so deleting an item in storekit alone does not remove it — if the item still exists on the linked POS menu, the next sync re-adds it. To remove an item permanently: 1. Remove or unpublish the item from the **specific POS menu the store is linked to** (see below) — not just from storekit 2. Make sure the item is off that exact menu, not only from another menu in your POS 3. Re-sync from storekit If deleted items still linger after a re-sync, archive the storekit menu and re-sync to rebuild it cleanly from the POS. ### The Wrong Items Are Syncing / a Store Shows Items From Another Menu Each storekit store is linked to **one specific POS menu**. If you have multiple POS menus and multiple stores, edits only affect the store linked to the POS menu you changed — editing a different POS menu has no effect on the store you're looking at. * Confirm which POS menu the store is linked to, and make your changes on that menu * For Lightspeed K-Series, the linked menu is set in **Stores** → your store → **Settings** → **Integrations** → **Lightspeed K-Series**, via the **Lightspeed Menu** selector * For Toast, the linked menu is the **Toast Menu** selector — see [Choosing Which Toast Menu Your Store Serves](/docs/guides/integrations/pos/toast/menu-sync#choosing-which-toast-menu-your-store-serves) * Other pull integrations expose the linked menu in the same integration settings ### An Item Shows Under the Wrong Name or Category POS items can have both a **button name** (the label shown on the POS/till button) and a separate **display name** (in Lightspeed, the "friendly display name"). storekit shows the display name when one is set, and falls back to the button name otherwise — so what customers see in storekit can differ from the button label in your POS. * If an item's name looks wrong, check the item's display name in the POS * Where an item appears in storekit is controlled by the **category it is assigned to in the POS menu**. If an item shows in an unexpected category, check its category assignment in the POS For further assistance, [contact support](/docs/getting-started/contact-support). # Print Modifiers as Products Source: https://storekit.com/docs/guides/menu/print-modifiers-as-products Send modifier options to printers and POS systems as separate line items in storekit instead of indented under the parent product. Improves ticket clarity. By default, modifiers appear indented under their parent product on tickets and in POS systems. The "Print Modifiers as Products" feature changes this behaviour, sending modifiers as separate line items instead. This feature requires support to enable for your account. [Contact support](/docs/getting-started/contact-support) to request access. ## How It Works When enabled on a modifier group: * Modifiers in that group print as separate products on tickets * The same modifiers are sent as individual items to connected POS systems * Quantities are multiplied correctly (e.g., 2x Burger with Fries = 2x Fries as a separate line) * If a modifier matches an existing product by POS ID or PLU, quantities are combined ### Example **Without the feature:** ``` 1x Burger - Extra Cheese - Fries ``` **With the feature enabled on the "Sides" modifier group:** ``` 1x Burger - Extra Cheese 1x Fries ``` ## Use Cases ### Inventory Tracking When your POS tracks stock at the modifier level, sending modifiers as products ensures accurate inventory counts. Each side dish or add-on decrements stock correctly. ### Kitchen Organisation Some kitchens prefer sides and add-ons as separate ticket lines so different stations can work in parallel without scanning through nested modifiers. ### Combo Meals For meal deals where sides are modifiers but need independent preparation, this feature ensures each component appears as its own line item. ## How Matching Works When a modifier is converted to a product, the system checks if an identical product already exists in the order: 1. **Lookup**: The system searches the order for an existing item with the same identifier (POS ID or PLU, depending on your integration) 2. **Match found**: If a matching product exists and the modifier has the required identifier, quantities are combined. For example, if the order already has "1x Fries" and a burger modifier adds another portion, the result is "2x Fries" 3. **No match**: If no matching product is found, the modifier is added as a new line item ### Identifier Requirements * **POS ID matching**: The modifier's POS ID must match an existing product's POS ID exactly * **PLU matching**: The modifier's PLU must match an existing product's PLU exactly * **Missing identifiers**: If a modifier lacks the required identifier, it always appears as a new line item rather than combining with existing products ### Example A customer orders: * 1x Fries (standalone product, POS ID: `FRIES-001`) * 2x Burger with Fries (modifier POS ID: `FRIES-001`) * 1x Burger with Onion Rings (modifier POS ID: `RINGS-001`) **With matching (modifier POS ID matches product):** ``` 3x Fries ← Combined: 1 standalone + 2 from burgers 2x Burger 1x Burger 1x Onion Rings ← New line: no standalone Onion Rings in order ``` **Without matching (modifier has no POS ID):** ``` 1x Fries ← Standalone only 2x Burger 1x Burger 2x Fries ← Duplicate line: couldn't match to existing 1x Onion Rings ← Separate line ``` For accurate inventory tracking, ensure your modifier options share the same POS ID or PLU as the standalone product they represent. A "Fries" modifier should have the same identifier as your "Fries" product. ## Supported Integrations This feature works with: | Integration | Matching Method | | ----------------------- | --------------- | | **Cloud Printing** | POS ID | | **TISSL** | POS ID | | **Lightspeed K-Series** | PLU | | **Comtrex** | POS ID | | **3S POS** | POS ID | ## Requesting Access [Contact support](/docs/getting-started/contact-support) to enable this feature. Provide: 1. Your account name 2. Which modifier groups should have this enabled 3. Your POS integration (if applicable) Support will configure the setting on the relevant modifier groups. # Add and configure menu products, modifiers, and tags Source: https://storekit.com/docs/guides/menu/products Add and configure products in your storekit menu with names, descriptions, images, prices, modifiers, and tags. The building blocks of your ordering page. Products are the items customers add to their cart. Each product belongs to a category and can have modifiers for customisation. ## Creating Products 1. Click into a category 2. Click **Add Product** 3. Choose **New product** or **Duplicate product** ### Duplicate vs New **Duplicate product** copies values from an existing product: * Name, description, price, image, video * Compare at price * Tags and allergens * Optionally: modifier groups This saves time when creating similar items like burger variants. ## Product Fields ### Required | Field | Description | | ---------- | ----------------------------------------- | | **Name** | The product name shown to customers | | **Price** | In your store's currency | | **POS ID** | Required if using Comtrex or Centegra POS | ### Optional | Field | Description | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Description** | Product details (first \~60 characters show on menu) | | **Print Name** | Override name on printed tickets | | **Image** | Product photo (most image formats supported, up to 100 MB) | | **Video** | Short video that plays on the product page | | **Compare At Price** | Shows original price crossed out (for promotions) | | **SKU / PLU** | Stock keeping unit or price lookup code | | **Cost** | Your cost price (for reporting, not shown to customers) | | **Tax Rate** | Override default tax rate for this product. To change tax rates for many products at once, use [Grid View](/docs/guides/menu/managing-menus#bulk-editing-a-menu-in-grid-view) | | **Deposit** | Bottle deposit or similar charges | ### Product ID Every product has a read-only **Product ID**. Open the product in the menu editor and scroll to the bottom of the edit panel - it's the last item, just above the save button. It's a long identifier shown in a monospace font; click it to select the whole value, then copy it. Use it when you need to reference a specific product: * Targeting a product from a [Menu Story](/docs/guides/marketing/stories) CTA (**Add to Basket** and **View Item** require it) * Giving support an exact product to look at * Working with the API, analytics, or event data * Matching a product to a reward in a loyalty platform - for [Como](/docs/guides/increasing-sales/loyalty-programs#linking-products-to-como-rewards), storekit identifies each purchased product by its **PLU** first, then **SKU / PLU**, then **POS ID**, and uses the **Product ID** only when all three are blank (other platforms match differently - Piggy uses the **PLU** only). On a menu synced from a POS the **PLU** comes from the sync (for Toast it is the item's GUID), so Como usually sees a POS identifier rather than the **Product ID**. Product IDs are also per menu - the same dish listed on two menus is two products with two different Product IDs. The **Product ID** is generated by storekit and can't be edited. It's separate from the **PLU**, **SKU / PLU** and **POS ID** fields - the POS-facing identifiers, which come from a POS menu sync or are entered manually (the **POS ID** field appears on Comtrex, Centegra and Tissl menus). ## Tags & Allergens Add allergen information, dietary tags, and nutritional data in the **Tags & Allergens** tab. See [Tags & Allergens](/docs/guides/menu/tags-allergens) for details on managing allergens, dietary tags, and nutrition. ## Availability ### Available After Schedule when a product becomes visible. Use this to: * Launch new items at a specific time * Prepare seasonal menus in advance * Coordinate with marketing campaigns ### Inventory Tracking Enable **Track Inventory** and set stock levels. When inventory reaches zero, the product shows as unavailable. Use for: * Daily specials with limited quantities * Items with supply constraints * Flash sales ### Availability by Day Set which days of the week a product is available. Useful for: * Weekend brunch items * Weekday lunch specials * Items that require advance preparation ## Images & Media ### Product Images Upload high-quality images for each product. Most image formats are supported (PNG, JPG, GIF, WebP, HEIC, and more) up to 100 MB. Images are automatically optimised and served via CDN. See [Product Photography](/docs/guides/menu-engineering/product-photography) for tips on capturing great food photos. ### Product Videos Upload short videos that autoplay on the product detail page. Videos are automatically encoded for optimal streaming. See [Videos](/docs/guides/menu-engineering/videos) for best practices. ## Organisation ### Reordering On a computer, drag and drop products within a category to change their order. The new order saves automatically as soon as you drop it. Drag and drop is disabled on phones, tablets and touchscreen laptops, and there is no Sort tool for products. To reorder products, use a computer with a mouse. See [Reordering categories](/docs/guides/menu/categories#reordering-categories) for the same limitation on categories. ### Print Order Products can have a different order for printing. See [Print Order](/docs/guides/printing/print-order). ### Popular Flag Mark products as **Popular** to: * Display a "Popular" badge with a star icon on the product * Show the product in a dedicated "Popular Items" section at the top of your menu The **Popular** flag is separate from checkout upsells and algorithmic recommendations: | Placement | How it works | | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Popular** | You mark the product as **Popular**. It receives a badge and can appear in the **Popular Items** section on the menu. | | **Upsell products** | You manually select products under **Stores → \[your store] → Settings → Operations → Upsell products**. They appear in a pre-checkout cross-sell modal. | | **Suggested for you** | storekit generates recommendations algorithmically using the store, customer, and basket context. Marking a product as Popular does not select it for these recommendations. | To choose products shown before checkout, see [Checkout Upsell Products](/docs/guides/store-settings/operations-settings#checkout-upsell-products). For a POS-synced menu, including Lightspeed, create or update the product in the POS and sync it to storekit before selecting it as an upsell. See [POS Menu Sync](/docs/guides/menu/pos-menu-sync). ## Deleting Products 1. Click on the product to open the editor 2. Scroll to the bottom 3. Click **Delete Product** Deleted products cannot be recovered. Order history referencing the product will show "Deleted Item". ## Multi-language Support Click the translation icon next to text fields to add translations for other languages. See [Translations](/docs/guides/store-settings/translations) for setup. ## Tips * **Front-load descriptions** - Important info in first 60 characters * **Complete allergen info** - Legal requirement in many regions * **Use high-quality images** - They increase conversion rates * **Set Compare At Price** for promotions - Shows discount clearly * **Track inventory** for limited items - Prevents overselling * **Share inventory across products** - Use modifiers to [track shared ingredients](/docs/guides/tips-tricks/shared-inventory) like pizza dough # Removal Modifiers Source: https://storekit.com/docs/guides/menu/removal-modifiers Let customers remove default ingredients from storekit products with removal modifier groups. Show 'no onion' or 'no cheese' without cluttering the menu. Removal modifier groups allow customers to remove standard ingredients from a product. Unlike regular modifiers that add options, removal modifiers represent ingredients that are included by default and can be taken away. This feature requires support to enable for your account. [Contact support](/docs/getting-started/contact-support) to request access. ## How It Works When a modifier group is marked as a removal type: * Options represent ingredients that come standard with the product * Customers select items they want **removed** * Selected options are communicated to the kitchen as exclusions ### Example A burger that comes with lettuce, tomato, onion, and pickles by default: **Removal modifier group: "Remove Ingredients"** * Lettuce * Tomato * Onion * Pickles Customer selects "Onion" and "Pickles" → Ticket shows: `No Onion, No Pickles` ## Why Use Removal Groups ### Cleaner Kitchen Tickets Without removal groups, you'd need to list all default toppings as regular modifiers. If a customer orders a pizza with standard toppings, the ticket would list every single topping - even though nothing changed from the default. Kitchen staff would need to scan through a long list to spot any actual customisations. With removal groups, tickets only show **deviations from the default**. A standard pizza prints with no modifiers listed. A customised pizza shows only what was removed: `No Olives, No Anchovies`. ### Clearer Customer Experience Removal groups make it obvious to customers what's already included. Instead of wondering "do I need to add cheese?" they see a list of what comes standard and can simply uncheck anything they don't want. ### Alternative Approach You can achieve similar results with regular modifier groups by pre-selecting all default options. However, removal groups are often clearer because: * The group name signals intent ("Remove Ingredients" vs "Toppings") * Customers immediately understand these items are included * Less cognitive load than a pre-checked list of additions ## Use Cases ### Allergen Accommodation Allow customers to remove allergen-containing ingredients: * No nuts * No dairy * No gluten-containing items ### Dietary Preferences Let customers customise based on preferences: * No onions * No cilantro * No spicy sauce ### Default Toppings For products with standard toppings that some customers may want removed: * Pizza default toppings * Sandwich standard ingredients * Salad default components ## POS Integration ### Zonal (Aztec) When syncing menus from Zonal (Aztec), removal modifier groups are automatically detected based on the presence of default selections in choice groups. The `isRemoval` flag is set automatically during import. ## Compared to Regular Modifiers | Aspect | Regular Modifiers | Removal Modifiers | | ------------------------- | ----------------- | -------------------- | | **Default state** | Nothing selected | All items "included" | | **Customer action** | Add options | Remove options | | **Kitchen communication** | "Add X" | "No X" | | **Typical pricing** | Often charged | Usually free | # Show & Hide Modifier Groups Source: https://storekit.com/docs/guides/menu/show-hide-modifiers Toggle the visibility of storekit modifier groups on individual products. Hide groups from customers without losing the configuration for later use. You can toggle the visibility of modifier groups on individual products. Hidden groups remain configured in the system but are not shown to customers on the menu. ## Toggling Modifier Group Visibility 1. Go to **Menu** > **Edit Menu** 2. Click on the product you want to configure 3. Open the **Modifiers** tab 4. Find the modifier group you want to show or hide 5. Toggle the visibility switch 6. Click **Save** When a modifier group is hidden, customers will not see it when viewing or customising the product. ## Use Cases | Scenario | Example | | --------------------------- | ---------------------------------------------- | | **Seasonal modifiers** | Hide summer toppings during winter | | **Temporarily unavailable** | Hide a sauce group while out of stock | | **Internal-only modifiers** | Keep kitchen notes hidden from customers | | **Gradual rollout** | Prepare new options before making them visible | Hiding a modifier group does not remove it from existing orders. Orders placed while the group was visible are unaffected. ## Hidden vs Deleted Hiding a modifier group is non-destructive: | Action | Visible to Customers | Configured in System | Reversible | | ---------- | -------------------- | -------------------- | -------------------- | | **Hide** | No | Yes | Yes — toggle back on | | **Delete** | No | No | No — must recreate | Prefer hiding over deleting when the modifier group may be needed again. This preserves your configuration and saves setup time. For more on setting up modifier groups, see [Modifiers](/docs/guides/menu/modifiers). # Table Area Category Restrictions Source: https://storekit.com/docs/guides/menu/table-area-restrictions Restrict which storekit menu categories appear in specific table areas. Show different parts of the menu in the bar, garden, or restaurant by QR code. Category restrictions let you control which parts of your menu are visible based on where a customer is seated. Customers scanning a QR code at a restricted table only see the categories assigned to that area. ## Use Cases | Scenario | Example | | ----------------------- | ----------------------------------------------------------- | | **Bar vs restaurant** | Show drinks only at bar tables, full menu in the restaurant | | **Pool or garden area** | Restrict to a limited outdoor menu | | **VIP areas** | Offer an exclusive menu for VIP seating | | **Events** | Show a special event menu for designated tables | ## Setting Up Restrictions 1. Go to your **Table/Area Settings** 2. Select the area you want to configure 3. Choose which categories are available for that area 4. Click **Save** Customers scanning the QR code at tables within the restricted area will only see the allowed categories. All other categories are hidden. ## How It Works * Each table belongs to an area * Each area can have category restrictions applied * When a customer scans a table QR, only the permitted categories for that area are displayed * Products within hidden categories are not visible or orderable Category restrictions require tables and areas to be set up first. See [Dine-in Tables](/docs/guides/fulfillment/dine-in-tables) for setup instructions. ## Unrestricted Areas If no category restrictions are set on an area, all menu categories are shown by default. Restrictions are opt-in — you only need to configure them for areas with limited menus. Combine category restrictions with [Availability by Day](/docs/guides/menu/availability-snoozing) to further refine what's shown at different times and locations. # Tags & Allergens Source: https://storekit.com/docs/guides/menu/tags-allergens Manage allergens, dietary tags (vegan, gluten-free), and nutrition info in storekit at the product and modifier level. Inform customers and meet regs. Allergen and nutritional information can be added to both products and modifier options. This information is displayed to customers and helps them make informed choices. ## Allergens Accurate allergen information is a legal requirement in many regions. ### Allergen States storekit provides a three-state allergen system: | State | Meaning | | --------------- | --------------------------------- | | **Contains** | Definitely contains this allergen | | **May Contain** | May have traces of this allergen | | **Free** | Does not contain this allergen | The allergen summary at the top of the section shows exactly what customers will see. ### Supported Allergens The 14 major allergens (UK/EU regulations): Celery, Gluten, Crustaceans, Fish, Eggs, Lupin, Milk, Molluscs, Mustard, Nuts, Peanuts, Sesame, Soya, Sulphites Plus extended allergens: Almonds, Barley, Brazil Nuts, Cashew, Hazelnuts, Macadamia, Oats, Pecan, Pistachio, Rye, Spelt, Walnuts, Wheat, Dairy, Lentils, Shellfish, Treenuts. ### Quick Actions * **Search allergens** - Filter the allergen list by name * **Mark all Free** - Reset all allergens to "Free" state Allergen regulations vary by country. In the UK and EU, businesses must provide allergen information for the 14 major allergens. For guidance on building an effective allergen management process, see our [Allergen Strategy](/docs/guides/compliance/allergen-strategy) guide. ## Dietary Tags Toggle dietary tags to indicate: * Vegan * Vegetarian * Halal * Kosher * Gluten Free * Sugar Free * Lactose Free These appear as badges on your menu, helping customers quickly identify suitable items. ## Flags Special flags for compliance: * **Alcohol** - Required for age-restricted items. Triggers age verification where required. ## Nutrition Expand the **Nutrition** section to add nutritional values per serving: | Field | Unit | | ---------------------- | ----- | | Calories | kcal | | Salt | grams | | Carbohydrates | grams | | Carbohydrates (sugars) | grams | | Fats | grams | | Fats (saturates) | grams | | Fibre | grams | | Protein | grams | Nutritional information is displayed on the product detail page. ## Ingredients Add ingredients as a comma-separated list. These are displayed on the product detail page below the nutritional information. ## Applies To Tags, allergens, nutrition, and ingredients can be set on: * **Products** - Edit the product → Tags & Allergens tab * **Modifier options** - Edit the modifier option to access allergen settings When a customer selects modifier options, the combined allergen information from the product and all selected modifiers is shown at checkout. # Visual & Digital Menu Source: https://storekit.com/docs/guides/menu/visual-menu Create a view-only digital menu in storekit with no ordering or checkout. Customers browse via QR code or link — ideal for in-venue dine-in menus. A visual menu lets customers browse your full menu without placing orders. It provides a digital menu experience — viewable via QR code or link — without enabling checkout. ## When to Use a Visual Menu | Scenario | Description | | --------------------------------- | ------------------------------------------------------- | | **Not ready for online ordering** | Display your menu digitally while you set up operations | | **In-venue display** | Show your menu on screens or tablets | | **Social media sharing** | Share a browsable menu link with followers | | **Menu preview** | Let customers view your offerings before visiting | ## Setting Up a Visual Menu 1. Create your store and configure your menu as normal — add categories, products, images, and descriptions 2. Go to **Store Settings** 3. Set the store to **Visual Menu** mode Your menu is now live as a view-only experience. Customers can browse all products, view images and descriptions, but cannot add items to a cart or check out. ## How Customers Access It Customers can view your visual menu by: * **Scanning a QR code** printed at your venue * **Clicking a link** shared via your website or social media ## What Customers See All of the following are visible on a visual menu: * Categories and products * Product images and descriptions * Prices * Allergen and dietary information There is no cart, checkout, or payment flow. ## Upgrading to Full Ordering When you're ready to accept orders, you can upgrade your store to a full ordering mode at any time: 1. Go to **Store Settings** 2. Switch from Visual Menu to **Order & Pay** or **Takeaway** 3. Complete your payment setup 4. Your menu is now fully operational with ordering enabled Starting with a visual menu is a low-commitment way to digitise your menu. You can upgrade to ordering whenever you're ready — no need to rebuild anything. # Auto Ready Source: https://storekit.com/docs/guides/orders/advanced/auto-ready Automatically mark storekit orders as ready for pickup at their estimated time. Removes the manual step of staff updating each order during busy service. Auto Ready automatically updates orders to "Ready for Pickup" status when their estimated time arrives. This removes the need for staff to manually mark each order as ready. ## How It Works 1. Customer places an order with an estimated ready time 2. storekit schedules an automatic status update for that time 3. When the time arrives, the order is marked as "Ready" 4. Customer receives their "order ready" notification ### Timing Logic The timing is calculated as follows: | Scenario | When order is marked ready | | --------------------------- | -------------------------------- | | Order has an estimated time | At the estimated time | | No estimated time set | 30 minutes after order is placed | For example: * Order placed at 12:00 with estimated time 12:25 → marked ready at 12:25 * Order placed at 12:00 with no estimated time → marked ready at 12:30 ## When to Use Auto Ready Auto Ready works best for: * **High-volume operations** - When manually marking each order is impractical * **Consistent prep times** - When you reliably hit your estimated times * **Self-service pickup** - Where customers collect without staff interaction Only enable Auto Ready if your kitchen consistently meets estimated times. Customers will be notified their order is ready even if it isn't. ## When NOT to Use Auto Ready Do not enable Auto Ready if: * **You already mark orders as ready manually** - You'll create duplicate "order ready" notifications and confuse customers * **You have a POS integration that manages order status** - POS systems like Lightspeed, Zonal, or Square that sync order lifecycle updates will conflict with Auto Ready * **Your prep times vary significantly** - If some orders take 10 minutes and others take 45, Auto Ready will notify customers at the wrong time If your POS already sends order status updates to storekit, those updates will mark orders as ready at the correct time. Enabling Auto Ready on top of this creates race conditions where customers may receive multiple notifications or see incorrect status. ## Configuration 1. Go to **Store Settings > Operations** 2. Find **Auto Ready** 3. Select which fulfillment methods should use Auto Ready: * Pickup * Delivery * In-Store * Catering Pickup * Catering Delivery 4. Save changes You can enable Auto Ready for some fulfillment methods and not others. For example, enable it for Pickup orders but manually manage Delivery orders. ## Best Practices 1. **Set accurate prep times** - Auto Ready relies on your estimated times being accurate 2. **Monitor during busy periods** - Disable temporarily if you're running behind 3. **Train staff** - Ensure kitchen knows orders will auto-update and customers will be notified 4. **Use with order displays** - Pair with customer-facing displays so customers can see their order status ## Disabling Auto Ready To disable, return to **Store Settings > Operations** and deselect all fulfillment methods from Auto Ready, or remove specific methods you want to manage manually. # Blocking Pre-Order Timeslots Source: https://storekit.com/docs/guides/orders/advanced/block-timeslot Stop pre-orders during periods you can't fulfil, such as bank holidays or private events, by adjusting pre-order times, days, and capacity in storekit. Prevent customers from placing pre-orders during periods when you can't fulfil them by adjusting the days, times, and capacity available in your pre-order settings. There is no way to block a single timeslot on one specific date (for example, only 12:00–12:30 on 1 August). Pre-order availability is controlled by weekly schedules and capacity settings, which repeat every week. To close a **whole date**, use [Special Opening Hours](/docs/guides/store-settings/opening-hours#special-opening-hours) — but read the caveat under [What You Can't Do](#what-you-cant-do) first. See that section for the closest workarounds, or [contact support](/docs/getting-started/contact-support) if you need help with a one-off closure. ## When to Restrict Timeslots Restricting pre-order availability is useful for: * **Fully-booked periods** — no capacity for additional orders * **Special events** — private functions or catered events * **Holidays** — partial closures or reduced service * **Operational constraints** — planned maintenance or staffing gaps ## Where Pre-Order Settings Live All of the options below are on the **Pre-Orders** page ("Slots, capacity & scheduling"): go to **Stores** → your store → **Settings** → **Pre-Orders**. There is no separate timeslot management section. Pickup and delivery are configured separately using the **Pickup** and **Delivery** tabs, and every change must be applied with the **Save** button at the bottom of the page. ## What You Can Do ### Remove a recurring time window from a weekday Under **Pickup times** (or **Delivery times** on the Delivery tab), each weekday has one or more time windows, and slots are only generated inside those windows. Go to **Stores** → your store → **Settings** → **Pre-Orders**. Select the **Pickup** or **Delivery** tab, depending on which fulfilment type you want to restrict. Under **Pickup times** (or **Delivery times**), find the weekday and adjust its windows. To remove a period in the middle of the day, split it into two windows: for example, replace **09:00–17:00** with **09:00–12:00** and use **Add another time interval** to add **14:00–17:00**, leaving 12:00–14:00 with no slots. To remove a whole day, turn on that day's **Unavailable** toggle — closed days show a **Closed** badge. Click **Save** at the bottom of the page. Changes to **Pickup times** and **Delivery times** are part of the weekly schedule, so they repeat **every week**. If you only need the change for one date, remember to restore the original times afterwards. ### Limit orders to specific dates only The **Specific pre-order days** section lets you choose exact dates on which pre-orders are accepted. This is an **allow-list**: once any dates are selected, customers can only pre-order for those dates, and all other days become unavailable — it is not a way to block individual dates while keeping the normal weekly schedule. This works well if you only take pre-orders for a handful of known dates (for example, event days or seasonal openings). ### Limit capacity per slot The slot settings at the top of each tab (**Pickup details** / **Delivery details**) include **Capacity per slot** controls such as the number of orders per slot. These limits apply to **every day** — they can't be changed for a single date. See [Order Limits](/docs/guides/orders/advanced/order-limits) for details. ## What You Can't Do Blocking one timeslot on a single date while keeping your normal schedule is **not currently possible** in the dashboard. The closest workarounds are: * **To close a whole date**, add a dated row under [Special Opening Hours](/docs/guides/store-settings/opening-hours#special-opening-hours) with **Open Time** and **Close Time** both set to 00:00. Every pre-order for that date is then rejected — but the date's slots still appear in the customer's scheduling view, and the order only fails at checkout, so remove that weekday's windows as well if the date is close enough that customers are already booking it. (If **Also accept pre-orders outside of opening hours** is on, the override still rejects dated pre-orders but no longer blocks same-day ordering on that date — see the [Special Opening Hours caveats](/docs/guides/store-settings/opening-hours#special-opening-hours).) * **For a short one-off closure**, snooze your store from the dashboard for the affected period — this pauses new orders while snoozed. Note that if **Allow pre-orders when store is snoozed** is turned on at the top of the Pre-orders page, customers can still place pre-orders during a snooze — turn it off first if you want the snooze to block pre-orders too. See [Disable Ordering](/docs/guides/orders/disable-ordering). * **For a recurring quiet period**, split or shorten the weekday's window under **Pickup times** / **Delivery times** as described above, and restore it after the date has passed. * **If you only fulfil pre-orders on certain dates**, use **Specific pre-order days** to allow only those dates. If none of these fit your situation, [contact support](/docs/getting-started/contact-support) and we'll help you find the best option. ## What Customers See Times outside your configured windows, dates excluded by **Specific pre-order days**, and slots that have reached their capacity all appear as unavailable in the customer's scheduling view — customers cannot select them when placing a pre-order. ## Related * [Pre-orders](/docs/guides/orders/advanced/pre-orders) — full guide to pre-order settings, slots, and troubleshooting * [Order Limits](/docs/guides/orders/advanced/order-limits) — capacity and value limits per slot * [Disable Ordering](/docs/guides/orders/disable-ordering) — temporarily pause all new orders * [Orders Overview](/docs/guides/orders/overview) — learn about order types and fulfillment # Blocked orders log: review rejected checkout attempts Source: https://storekit.com/docs/guides/orders/advanced/blocked-orders Review the storekit Blocked Orders log to see orders rejected at checkout. Understand why customers were blocked and recover lost revenue from edge cases. The Blocked Orders log shows orders that customers attempted to place but were rejected by the system. These are orders that never reached your kitchen - they were blocked at checkout for a specific reason. ## Viewing Blocked Orders Go to **Reports > Logs** in the dashboard to see the blocked orders log. Each entry shows: * **Date** - When the order attempt occurred * **Block reason** - Why the order was rejected * **Order type** - Pickup, Delivery, or Dine-in * **Total** - The order value * **Items** - What was in the cart * **Customer** - Who attempted the order ## Block Reasons ### Availability Issues | Reason | Description | | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | `sold_out` | One or more items are snoozed or out of stock | | `venue_closed` | Store is not accepting orders at this time | | `time_slot_expired` | Pre-order time has passed or is too soon | | `preorder_outside_special_hours` | Pre-order falls outside special opening hours | | `item_unavailable_today` | Item is not available on this day | | `order_cutoff_reached` | The chosen slot is no longer bookable because its scheduling notice or preparation time has elapsed (this is not a configurable cut-off setting) | ### Order Value Issues | Reason | Description | | -------------------------- | ---------------------------------------- | | `min_delivery_value_error` | Order below minimum for delivery | | `min_pickup_value_error` | Order below minimum for pickup | | `min_in_store_value_error` | Order below minimum for dine-in | | `max_delivery_value_error` | Order exceeds maximum for delivery | | `max_pickup_value_error` | Order exceeds maximum for pickup | | `max_in_store_value_error` | Order exceeds maximum for dine-in | | `min_item_quantity_error` | Order doesn't meet minimum item quantity | ### Slot Limits | Reason | Description | | ----------------------------------- | ----------------------------------------- | | `slot_quantity_limit_exceeded` | Too many orders in this time slot | | `slot_monetary_limit_exceeded` | Revenue limit for this slot reached | | `slot_item_quantity_limit_exceeded` | Item quantity limit for this slot reached | ### Payment & Discount Issues | Reason | Description | | --------------------------- | ----------------------------------------------- | | `bad_total` | Cart total doesn't match (usually a sync issue) | | `invalid_discount` | Discount code is invalid or expired | | `gift_card_error` | Gift card processing failed | | `piggy_voucher_error` | Piggy voucher is invalid or expired | | `como_error` | Como loyalty reward issue | | `como_insufficient_balance` | Not enough Como points | ### Other Issues | Reason | Description | | ------------------------- | --------------------------------------- | | `missing_customer_fields` | Required customer info not provided | | `bill_closed` | Dine-in bill is already closed | | `delivery_too_far` | Delivery address outside delivery zones | | `modifier_not_found` | Selected modifier no longer exists | ## Using the Blocked Orders Log The log helps you identify: 1. **Menu sync issues** - Frequent `sold_out` blocks may indicate your menu availability isn't updating correctly 2. **Slot capacity** - `slot_*_exceeded` blocks show when you're hitting operational limits 3. **Pricing mismatches** - `bad_total` blocks can indicate caching or sync issues ## Exporting Data Click **Export** to download the blocked orders as a CSV file for further analysis. # Moving Orders Source: https://storekit.com/docs/guides/orders/advanced/move-orders Reschedule a storekit pre-order to a different date or time when the original schedule no longer works. Keep customers informed without cancelling. Move a pre-order to a different date or time when the original schedule no longer works. ## When to Move an Order Moving an order is useful when: * **Customer requests a change** — the customer contacts you to reschedule * **Operational reasons** — staffing changes or capacity adjustments * **Rescheduling due to issues** — supply problems or unexpected closures ## How to Move an Order Go to **Orders** → **All Orders** and search for the order, then click it to open the order page. On the order page, the fulfillment line shows the scheduled date and time as underlined text (for example `Pickup at Aug 7th, 12:30`). Click it to open **Change this order's date & time slot**. Pick a **Day**, then a **Time slot**. Each slot shows how many orders, items and value are already booked into it, and slots at capacity are marked `(Full)`. Tick the follow-up actions you need: **Cancel pre-order print jobs**, **Re-queue pre-order print jobs**, and — where the integration is connected — **Cancel & rebook orkestro delivery**, **Cancel & rebook PedalMe delivery** or **Reschedule deliverect order**. Click **Save changes**. The customer is emailed (and texted, if SMS notifications are on) about the new time. Other than the integrations listed above, the change is not pushed to external systems. The modal states: *"This won't update any external systems like your POS or delivery system."* ## Limitations Moving an order only changes the scheduled pre-order slot. The following are not possible. ### You Cannot Move an Order to the Past An order can only be moved to a **future** date and time that still has an available slot. The **Day** dropdown only offers today and later dates, and if you save a time that has already passed, the change is rejected with **Time slot expired** — *"Sorry, the time slot you selected is no longer available."* There is no way to move an order onto a date or time that has already passed, and no way to backdate an order so it appears in an earlier day's figures. ### Only Scheduled Pre-Orders Can Be Moved The clickable date and time only appears on orders that have a scheduled pre-order slot. ASAP orders have no scheduled slot, so there is nothing to click and there is no way to turn an ASAP order into a scheduled one — the customer has to place a new order with the slot they want. ### Days and Slots Must Already Be Open You can only choose from days and slots the store is already accepting pre-orders for. If the day you want is missing, or the slot list shows `Sorry, no slots left today`, change the store's availability first (**Stores** → \[your store] → **Settings** → **Pre-Orders**) and then move the order. There is no way to place an order into a closed day or a full slot from this modal. ### Completed Orders Cannot Be Rescheduled Once an order has been completed, rescheduling it has no effect on the fulfillment that already happened — and because the new time must be in the future, there is no way to move a finished order back to when it was actually collected or delivered. Correct a mistake with a refund or a new order instead. ### Orders Cannot Be Merged There is no way to merge two orders into one, and no way to move items from one order into another. Each order stays separate with its own order code, payment and receipt. If a customer wants everything together, cancel and refund one order and ask them to re-order the items on the other. ## Related * [Orders Overview](/docs/guides/orders/overview) — learn about order types and fulfillment * [Managing Live Orders](/docs/guides/orders/managing-live-orders) — handle incoming orders in real-time # Order Batching Source: https://storekit.com/docs/guides/orders/advanced/order-batching Group multiple storekit orders from the same table into a single consolidated kitchen ticket. Reduce ticket noise and give the kitchen a complete table view. Order batching combines multiple orders from the same table into one consolidated order before sending to the kitchen or POS. This reduces ticket noise and gives the kitchen a complete view of what a table has ordered. ## How It Works Without batching, each time a guest at a table orders something, a separate ticket prints in the kitchen. With batching enabled: 1. Guest places first order → order is held in a batch 2. Guest places second order → added to the same batch 3. After the timeout period, the batch closes 4. All orders merge into one ticket and send to kitchen/POS ``` Without batching: With batching: ┌─────────────┐ ┌─────────────┐ │ Ticket #1 │ │ Ticket #1 │ │ 1x Burger │ │ 1x Burger │ └─────────────┘ │ 1x Fries │ ┌─────────────┐ │ 2x Beer │ │ Ticket #2 │ │ 1x Wings │ │ 1x Fries │ → └─────────────┘ └─────────────┘ ┌─────────────┐ (Single consolidated │ Ticket #3 │ ticket after timeout) │ 2x Beer │ └─────────────┘ ┌─────────────┐ │ Ticket #4 │ │ 1x Wings │ └─────────────┘ ``` ## When Orders Are Batched Orders are grouped into the same batch when: * **Same table** - Orders must be from the same table * **Within timeout window** - Orders placed within the configured timeout period * **In-Store fulfillment only** - Batching only applies to dine-in orders Pickup and Delivery orders are never batched - they always go straight to the kitchen. ## Smart Batch Closing storekit uses a smart algorithm to determine when to close a batch, balancing speed with consolidation. ### How It Works The system monitors whether anyone at the table is still browsing the menu or building an order: * **Someone still ordering?** → Batch stays open (up to the timeout limit) * **Everyone finished?** → Batch closes immediately This means if one person places an order and no one else at the table has the menu open, the batch closes straight away - no unnecessary waiting. But if others are still deciding, the system waits for them. ### Example ``` 12:00:00 - Alice orders a burger (batch opens) 12:00:05 - System detects Bob has menu open → batch stays open 12:01:30 - Bob orders fries (added to batch) 12:01:35 - No one else browsing → batch closes immediately 12:01:35 - Merged order sent to kitchen ``` Compare this to a simple 5-minute timeout where the kitchen would wait until 12:05:00 - that's over 3 minutes saved. ### Timeout Limit If guests keep browsing, the batch won't stay open forever. There's a maximum timeout (up to 5 minutes) after which the batch closes regardless. This ensures orders always reach the kitchen in a reasonable time. | Timeout | Best for | | --------------- | -------------------------- | | 1-2 minutes | Fast-casual, quick top-ups | | 3 minutes | Standard table service | | 5 minutes (max) | Groups ordering together | ## Merged Order Contents When a batch closes, orders are intelligently merged: | Element | How it's merged | | ------------------ | ---------------------------------------------------- | | **Items** | Combined, with quantities summed for identical items | | **Modifiers** | Items with different modifiers kept separate | | **Totals** | All order totals, tips, and service charges summed | | **Notes** | Only included when **Include order notes** is on | | **Customer names** | Only listed when **Include customer names** is on | ### Item Merging Example ``` Order 1: 1x Burger (no onions) Order 2: 1x Burger (extra cheese) Order 3: 1x Burger (no onions) Merged result: - 2x Burger (no onions) ← quantities combined - 1x Burger (extra cheese) ← kept separate (different modifier) ``` ## Configuration ### Store-Wide Settings Go to **Stores** → \[your store] → **Settings** → **Operations** and find the **Order batching** section: | Setting | Description | Default | | -------------------------- | ----------------------------------------------------- | ------- | | **Enable order batching** | Turn batching on/off | Off | | **Batch timeout** | Minutes before batch closes | 5 | | **Include order notes** | Show individual customer notes on the combined ticket | Off | | **Include customer names** | List who ordered what on the combined ticket | Off | The **Order batching** section only appears for dine-in stores — batching applies to In-Store orders only. ### Disabling Batching for Specific Tables The store-level **Batch timeout** picker only offers 1–5 minutes; to switch batching off for the whole store, turn off **Enable order batching**. For individual tables or sections, set that table's batch timeout to 0 instead — orders from those tables go straight to the kitchen without waiting, while the rest of the store keeps batching. This is useful for bar seating or quick-service areas where guests typically order one item at a time. ## Customer Notes on Batched Tickets When batching is enabled, customer notes are **stripped from the merged ticket** unless **Include order notes** is turned on. This is the most common reason a kitchen or bar stops seeing notes after batching is switched on: the customer types a note at checkout, the note is saved on the order, but the consolidated ticket sent to the kitchen, printer or POS contains no notes at all. **Include order notes** controls both: * The general order note each guest typed at checkout (prefixed with the guest's first name on the merged ticket) * Item-level notes, which are merged into the same notes block as `Item name: note` ### Order notes aren't reaching the kitchen or bar Work through these in order: Go to **Stores** → \[your store] → **Settings** → **Operations** → **Order Notes** and make sure it is set to **Optional** or **Mandatory**. **Hidden** disables order notes entirely, so customers never get a note field at checkout. In the same page, under **Order batching** → **Merged ticket contents**, turn on **Include order notes**. With batching on and this toggle off, notes are removed from the merged ticket even though they appear on the order in the dashboard. Zonal only accepts customer notes as a line item. Without an **Order Note Product ID** in the Zonal integration settings, notes are dropped on the way to the POS. See [Zonal order notes](/docs/guides/integrations/pos/zonal#order-notes). Open the order in the dashboard and confirm the note is on it. If the note is on the order but missing from the ticket, the problem is in the steps above; if it is missing from the order too, the customer never entered one (or **Order Notes** is set to **Hidden**). Changing **Include order notes** only affects orders batched after you save. Tickets already sent to the kitchen aren't reprinted. ### Notes and split printing A general order note isn't tied to a specific item, so it prints on **every** station ticket for that order. With split printing, each printer receives only the items from its assigned categories, but the order note appears on each of those tickets — so a note like "nut allergy" reaches the kitchen and the bar. A printer that receives none of the order's items doesn't print a ticket at all, so it won't see the note either. ## Integration with POS Systems When a batch closes, the merged order is sent to your connected systems: * **POS systems** - Deliverect, Lightspeed, Zonal, Tissl, PointOne, Comtrex, Ikentoo * **Printers** - CloudPRNT enabled printers The POS receives one order containing all items from the batch, making it easier to manage the table's bill. ## Send to Kitchen When batching is enabled, guests see a **Send to Kitchen** button after placing their order. This allows them to close the batch early instead of waiting for the timeout. The button appears with a countdown timer showing how long until the batch auto-closes. If the guest knows they're done ordering, they can tap the button to immediately send all orders to the kitchen. This is useful when: * A guest is ordering alone and doesn't need the full timeout * The table has finished ordering and wants their food sooner * A quick top-up order that should go straight through ## Best Practices 1. **Match timeout to service style** - Fast-casual needs shorter timeouts than fine dining 2. **Enable customer names** - Helps kitchen identify who ordered what at large tables 3. **Turn on Include order notes** - Otherwise allergy and preparation notes never reach the kitchen 4. **Train staff** - Ensure servers know batches will be held before going to kitchen 5. **Consider bar vs table** - Use table-specific timeouts for different seating areas # Order Limits Source: https://storekit.com/docs/guides/orders/advanced/order-limits Set minimum and maximum order values, quantities, and per-order rules in storekit. Manage kitchen capacity, protect profitability, and prevent abuse. Control checkout eligibility by setting minimum spend, maximum spend, and quantity requirements. These limits help manage kitchen capacity, ensure order profitability, and prevent abuse. ## Monetary Limits Set minimum and maximum order values for each fulfilment method on the **Order limits** card at **Stores** → your store → **Settings** → **Operations**. The card has a **Minimum** and a **Maximum** column, with one row per fulfilment method. Which rows you see depends on how the store takes orders. Order-and-pay stores show a single **In-store orders** row; every other store shows **Delivery orders** and **Pickup orders**. ### Minimum Order Value Require customers to spend a minimum amount before checkout. If their basket is below the minimum, they see a message showing how much more they need to spend. | Row and column | Applies To | | --------------------------------- | ------------------------------------------- | | **Pickup orders** → **Minimum** | Pickup, curbside and catering pickup orders | | **Delivery orders** → **Minimum** | Delivery and catering delivery orders | | **In-store orders** → **Minimum** | Dine-in (in-store) orders | **Use cases:** * Ensure orders are profitable after payment processing fees * Cover fixed costs like packaging * Encourage larger orders Delivery zones can override the store-wide minimum delivery amount. Use this to require higher minimums for distant deliveries where costs are higher. ### Maximum Order Value Cap the maximum order value to prevent unusually large orders that may be fraudulent or exceed your capacity. | Row and column | Applies To | | --------------------------------- | ------------------------------------------- | | **Pickup orders** → **Maximum** | Pickup, curbside and catering pickup orders | | **Delivery orders** → **Maximum** | Delivery and catering delivery orders | | **In-store orders** → **Maximum** | Dine-in (in-store) orders | **Use cases:** * Fraud prevention for high-value orders * Kitchen capacity management * Directing large orders to catering flow ### Configuring Monetary Limits 1. Go to **Stores** → your store → **Settings** → **Operations** 2. Find the **Order limits** card and turn on **Limit order values** 3. Enter the **Minimum** and **Maximum** amounts for each row. Leave a value at 0 for no limit 4. Click **Save** The limits apply to the basket subtotal (before delivery fees, tips, and service charges). Use **Tags excluded from minimum spend** on the same card to stop items carrying a given tag counting towards the minimum order value — useful when you don't want a bottle of water or a bag of crisps to get a customer over the line. ## Quantity Limits ### Minimum Items **Minimum items** on the **Order limits** card requires a minimum number of items in the basket before checkout. It is the only item control on the card, it applies to every fulfilment method, and it is checked before the monetary limits. This is useful for: * Catering orders that require volume * Bundle or meal deal enforcement * Preventing single-item orders during busy periods ### Maximum Items There is no maximum-items-per-order setting in the dashboard. **Order limits** has **Minimum items** and nothing that caps the number of items in a single order — to stop unusually large orders, use the **Maximum** order value instead. The closest control is slot-level throttling for pre-orders, at **Stores** → your store → **Settings** → **Pre-Orders** → the **Pickup** or **Delivery** tab → **Advanced: slot-level throttling**, which caps a time slot at a number of total items. It is not a per-order cap: * It counts every order already in the slot, not one basket. * The first order into an empty slot always goes through, however large it is. Only orders after that one are checked. So a customer can always place a single order of any size, and the cap cannot be used to enforce a per-order item limit. See [Why are some timeslots missing?](/docs/guides/orders/advanced/pre-orders#why-are-some-timeslots-missing) for a worked example. ## How Limits Are Displayed When a customer's basket doesn't meet the requirements, the checkout button is replaced with the reason and disabled until the basket qualifies: * **Below minimum spend** — "Please spend at least £15.00". The basket goal bar can also show "Spend £4.50 more to reach the minimum order" * **Above maximum spend** — "Please spend less than £150.00" * **Below minimum items** — "Minimum 3 items required" ## Per-Fulfillment Limits Different fulfillment methods can have different limits: | Fulfillment | Typical Minimum | Typical Maximum | | ----------- | ----------------------------- | ------------------------ | | Pickup | Lower or none | Standard | | Delivery | Higher (covers delivery cost) | Standard | | Dine-in | Lower or none | Lower (kitchen capacity) | | Catering | Much higher | Much higher | This allows you to: * Make pickup attractive with no minimum * Cover delivery costs with a higher delivery minimum * Set high minimums for catering to ensure order size ## Zone-Specific Minimums For delivery, you can set a different minimum order value per [delivery zone](/docs/guides/fulfillment/delivery/delivery-zones) with **Minimum spend required** and **Minimum spend amount** on the zone: * **Zone 1 (0-2 miles)** - £10 minimum * **Zone 2 (2-4 miles)** - £15 minimum * **Zone 3 (4-6 miles)** - £20 minimum Zone-specific minimums override the store-wide delivery minimum when the customer's address falls within that zone. ## Best Practices 1. **Start lower** - You can always increase minimums; reducing them is easier for customers to accept 2. **Consider your costs** - Factor in payment fees, packaging, and labour when setting minimums 3. **Match delivery effort** - Higher minimums for distant deliveries offset driver costs 4. **Communicate clearly** - Customers see exactly how much more they need to spend 5. **Test the experience** - Place test orders at various basket values to verify messaging # Order Code Generation Source: https://storekit.com/docs/guides/orders/advanced/order-sequence-policy Configure how storekit generates short order codes used at pickup, on tickets, and in customer comms. Choose sequential, daily reset, or randomised. Order codes are short identifiers used to reference orders at pickup, on printed tickets, and in customer communications. storekit supports different generation strategies to suit your operational needs. ## What Are Order Codes? Each order receives a random code (e.g., "A1B2", "7X9K") that: * Appears on the customer's order confirmation screen * Prints on kitchen tickets * Is used to call out orders for collection * Helps staff quickly identify orders ## Code Types storekit offers two order code formats: ### Alphanumeric (Default) Random alphanumeric codes like `A7X2`, `K9B4`, `M3P8`. | Pros | Cons | | -------------------------- | ---------------------------------------- | | Short and easy to call out | Codes can repeat | | No predictable pattern | Some characters sound similar (B/D, M/N) | | Works well at any volume | | **Best for:** Most operations - simple, clean codes that work well for verbal callouts. ### Numeric Sequence Sequential numbers like `0001`, `0002`, `0003`. With numeric codes, you choose a **reset policy** - when the sequence restarts: | Reset | Behaviour | Best For | | ---------- | ---------------------------- | ------------------------------------------------------ | | **Daily** | Resets to 1 each day | High-volume operations, seeing daily order count | | **Weekly** | Resets to 1 each week | Operations referencing orders across days | | **Never** | Never resets, counts forever | Tracking lifetime order count, guaranteed unique codes | | Pros | Cons | | ------------------------------------ | ----------------------------------------- | | Easy to call out verbally | Numbers get long over time (with "Never") | | Shows order volume at a glance | Predictable pattern | | Customers find them easy to remember | | **Best for:** Quick-service restaurants, cafes, and operations that want to see order counts. ## Order Code Prefixes Add a prefix to your order codes to make them instantly identifiable and easier to reconcile across systems. ### Why Use Prefixes? **Distinguish from other platforms** If you receive orders from multiple channels (storekit, Deliveroo, Just Eat, Uber Eats), they may use similar code formats. A prefix makes it immediately clear where an order originated: * `SK-A7X2` - storekit order * `A7X2` - Could be Deliveroo, Just Eat, etc. **Easier reconciliation** When matching orders across your POS, accounting software, or reporting tools, prefixes help filter and identify storekit orders quickly. **Multi-location identification** For brands with multiple sites, prefixes distinguish which location received the order: * `NYC-0042` - New York * `LON-0042` - London * `MAN-0042` - Manchester ### Configuring Prefixes 1. Go to **Store Settings > Operations** 2. Find **Order Code Prefix** 3. Enter your preferred prefix (e.g., "SK", "WEB", or your store code) 4. Save changes The prefix appears before the generated code, typically separated by a hyphen. Keep prefixes short (2-4 characters) to avoid making codes too long to call out or display. ## Configuring Order Codes 1. Go to **Store Settings > Operations** 2. Find **Order Sequence Policy** 3. Choose your code type: * **Alphanumeric** (default) - random codes * **Numeric** - sequential numbers with reset policy (Daily, Weekly, or Never) 4. Optionally set a prefix 5. Save changes ## Multi-Location Considerations For brands with multiple locations: * **Use prefixes** - Add location codes (e.g., "NYC-", "LON-") to distinguish orders * **Separate sequences** - Each location maintains its own sequence * **Shared format** - Keep the same strategy across locations for consistency ## Best Practices 1. **Match your callout method** - If you call order numbers verbally, use short codes 2. **Consider your volume** - High volume needs more unique codes 3. **Avoid ambiguity** - Remove characters that sound alike when called out 4. **Test thoroughly** - Place orders and verify codes appear correctly everywhere 5. **Train staff** - Ensure everyone knows how to read and call out codes ## Troubleshooting ### Duplicate Codes If you're seeing the same codes causing confusion: * **Alphanumeric codes** can repeat - this is normal. Consider adding a prefix to help distinguish orders. * **Numeric codes with Daily/Weekly reset** will repeat after the reset period. Switch to "Never" if you need unique codes. * Verify timezone settings match your operation (affects when daily/weekly resets occur). ### Confusion at Pickup If customers can't find their orders: * Consider adding a prefix to distinguish storekit orders from other platforms * Train staff on clear verbal callout technique * Display codes prominently on tickets and screens # Pre-orders: schedule future pickup and delivery Source: https://storekit.com/docs/guides/orders/advanced/pre-orders Enable pre-orders in storekit so customers can schedule pickup or delivery for a future time, with separate settings and slot throttling per fulfilment. Enable pre-orders to let customers place orders in advance for a future pickup or delivery time. This helps you manage demand, prepare ahead for busy periods, and control how many future orders can be accepted per time slot. Pre-orders are managed from your store settings and can be configured separately for pickup and delivery. ## How Pre-orders Work * Customers can choose a future date and time at checkout * Pickup and delivery have separate pre-order settings * Customers can only choose from the days and times you make available * Pre-orders appear in your storekit order dashboard like regular orders * Advanced slot-level throttling can limit the total number of items and total order value allowed in a slot ## Before You Set Up Pre-orders Before enabling pre-orders, check your store [opening hours](/docs/guides/store-settings/opening-hours). If your opening hours are not set, your store may be treated as open 24 hours by default. ## How to Enable Pre-orders From your storekit dashboard, go to **Stores** and select the store you want to update. From the settings menu, open **Pre-Orders**. Turn on **Accept pre-orders**. This allows customers to order in advance for a future date and time. If **Also accept pre-orders outside of opening hours** is enabled, customers can place future orders even when your store is currently closed. The order must still be for an available pickup or delivery time. Use the **Pickup** and **Delivery** tabs to configure each fulfilment type separately. Pickup and delivery can have different slot lengths, capacity limits, scheduling rules, and available times. Choose how each day should be split into time slots. For example, you can split the day into **15-minute** slots so customers choose from times such as 08:00–08:15, 08:15–08:30, and so on. Use **Also let customers order for ASAP without picking a slot** if you want customers to place immediate orders as well as scheduled pre-orders. If this is turned off, customers must choose an available time slot. The ASAP option only appears on the current day, and only when the next available time slot is within the threshold set just below the toggle: *Show the ASAP option when the next available slot is within \[N] of the current time.* The choices are fixed — **Always (no limit)**, **15 minutes**, **30 minutes**, **45 minutes**, **1 hour**, **1.5 hours**, **2 hours** — and it defaults to **45 minutes**. If the next available slot is further away than the threshold, customers have to choose a scheduled time instead. The threshold applies to every fulfilment type for the store. Because ASAP availability is based on the first fulfillment slot — not your venue's opening time — customers may be able to place ASAP orders up to a full threshold (45 minutes by default) before the first slot. If that slot is earlier than your opening time, orders can arrive before you officially open. See [How ASAP Delivery Interacts with Opening Hours](/docs/guides/store-settings/opening-hours#how-asap-delivery-interacts-with-opening-hours) for how to prevent this. Under **Capacity per slot**, set how many orders can be accepted in each time slot. For example, setting this to **1** means only one order can be accepted per slot. Use **Advanced: Slot-level throttling** if you need more control over how much can be accepted in each slot. This lets you limit a slot by: * total number of items * total order value These limits are checked **across all orders in the slot**, not per individual order. The first order in an empty slot will always go through, even if it exceeds these limits. The limits are then applied to any additional orders placed in the same slot. If you need to restrict the value of a single order, use the **Maximum** value on the **Order limits** card at **Stores** → your store → **Settings** → **Operations** instead. There is no per-order item cap in the dashboard. Under **Scheduling**, choose: * How many days ahead customers can order * How much notice customers need before the earliest available pickup or delivery time The control reads: *Customers can order up to \[N] days ahead and need at least \[N] day(s) notice.* For example, if customers can order up to **7 days ahead** and need at least **1 day notice**, a customer ordering on Monday would see Tuesday as the earliest available fulfilment day. **There is no "order cut-off" setting in storekit.** Same-day availability is controlled by the notice figure above: set it to **0** so *need at least 0 days notice* and customers can order for same-day pickup or delivery. Any value of **1** or more removes today entirely, so nothing can be ordered for the current day. There is no per-store or per-product cut-off time — see [Customers can't order for today](#customers-cant-order-for-today) if same-day orders are unexpectedly unavailable. Use **Preview: what customers will see** to check the time slots that will appear at checkout. The preview generates slots from the slot length and the windows of the first available day, so it shows the most slots a day can offer. It does not apply preparation time, capacity already used, or snoozes — see [Troubleshooting: expected time slots are missing](#troubleshooting-expected-time-slots-are-missing) if the live checkout offers fewer slots than the preview. Under **Pickup times** or **Delivery times**, choose which days and times customers can place pre-orders. You can expand each day and add the available time windows for that fulfilment type. Click **Save** to apply the change. Customers will only see pre-order options once the setting has been saved. ## Pickup and Delivery Settings Pickup and delivery are configured **separately**. Use the **Pickup** tab to control collection pre-orders, including pickup time slots and pickup capacity. Use the **Delivery** tab to control delivery pre-orders, including delivery time slots and delivery capacity. This lets you offer different availability for each fulfilment type. ## Limiting When an Order Can Be Collected A common point of confusion is the difference between **menu category hours** and **pickup or delivery time windows**. They control two different things: * **Category hours** (set per category on the menu — see [Category Hours](/docs/guides/menu/categories#category-hours)) decide **when a category is visible and orderable**. They are evaluated against the **current time**, so they stop customers *placing* new orders for that category outside its hours. This is the setting to use if you want to stop new orders during a period — for example pausing a category during a lunch rush. Category hours do **not** restrict which pickup or collection time the customer can then choose. * **Pickup and delivery time windows** (under **Pre-Orders**) decide **when an order can actually be collected or delivered**. These are the windows customers pick their slot from. To limit when an order can be collected, add the appropriate time windows for each day: 1. Go to **Stores** → your store → **Settings** → **Pre-Orders**. 2. Open the **Pickup** or **Delivery** tab. 3. Under **Pickup times** or **Delivery times**, expand the day and set its time window. You can add more than one window per day with **Add another time interval** — for example **07:30–10:45** and **11:00–14:30** — so slots are only offered inside those intervals. To close a single slot rather than a whole window, [block specific timeslots](/docs/guides/orders/advanced/block-timeslot). There is currently no single "this item is only collectable before X" setting. The times a customer can order for are the combination of the category's hours (when the category can be ordered) and the pickup or delivery time windows (when it can be collected). Set both to match if you want a category to be orderable and collectable only within the same period. For example, Breakfast category hours of 07:30–10:45 stop new breakfast orders after 10:45, but a **Pickup times** window of 07:30–10:45 is what stops customers choosing a later collection time. ## What Customers Can Do When pre-orders are enabled, customers can: * Select a future date and time from the available slots * Choose pickup or delivery if both fulfilment types are enabled * Place orders outside current opening hours if this setting is enabled * Place ASAP orders if ASAP ordering is enabled (based on preparation time) ## When to Use Pre-orders Use pre-orders when: * Customers need to order ahead for pickup or delivery * Your venue prepares food in advance * You want to accept orders outside current opening hours * You need better control over future order volume * You offer catering, large orders, or scheduled fulfilment ## Understanding Slot Times in Your Dashboard When a customer places a pre-order, the time shown in the order details is the **start** of the delivery or pickup window they selected — not the end. For example, if your store uses 30-minute slots and an order shows **12:00**, the customer's delivery window is **12:00–12:30**. This time is referred to as the **requested fulfilment time** — it is the beginning of the slot the customer chose at checkout. You can change the scheduled time for a pre-order by clicking the time shown in the order details and selecting a different available slot. ## Troubleshooting: expected time slots are missing Pre-order slots are **generated from one place only**: the time windows saved for that weekday under **Pickup times** or **Delivery times**. Everything else — preparation time, capacity, snoozes — can only *remove* slots from that list; nothing adds slots back. Walk these checks in order. Unless stated otherwise, every setting is at **Stores** → your store → **Settings** → **Pre-Orders**. Pickup and delivery have completely separate windows, slot lengths and capacity settings — use the **Pickup** and **Delivery** tabs. In-store ordering (QR / table) uses the **Pickup times** windows, but takes its preparation time from the **Delivery** figure in step 4. Under **Pickup times** (or **Delivery times**), expand the day. Slots exist only inside the windows saved there, so two windows leave a hard gap between them — **09:00–12:00** plus **13:00–17:00** offers nothing between 12:00 and 13:00. A day whose **Unavailable** toggle is on shows a **Closed** badge and offers no slots at all. Slots are cut from the **start** of each window in steps of the slot length, and only whole steps are offered: * A window shorter than one slot produces **no slots** — 12:00–12:05 with **10-minute** slots gives nothing. * A remainder too short for another whole slot is dropped — 12:00–12:45 with **10-minute** slots ends with the 12:30–12:40 slot, and the last five minutes are unbookable. For today only, storekit takes the current time, adds your preparation time, and removes every slot that starts before it. Preparation time is not on the Pre-Orders page: it lives at **Stores** → your store → **Settings** → **Operations** → **Preparation time**, which has a **Delivery** row and a **Pickup** row (order-and-pay stores show a single **Average prep time** row instead). * **Pickup** slots use the **Pickup** figure. * **Delivery** slots use the **Delivery** figure **plus a fixed 15 minutes** of travel allowance. That 15 minutes is not configurable and appears nowhere in the dashboard. * Even with a figure of **0**, the earliest slot is still about **5 minutes** away — storekit applies a five-minute floor. * If preparation time pushes the earliest slot past midnight, today has **no** slots at all. **"Capacity is unlimited and my prep time is 0, but the first slots of the day are still missing."** If the missing block is roughly an hour, you are almost certainly looking at delivery: a **Delivery** preparation time of **45** minutes plus the fixed 15-minute travel allowance removes the first hour of the day. The **Pickup** figure has no effect on delivery slots, so setting pickup to 0 changes nothing there — lower the **Delivery** figure instead. Preparation time only trims **today**, so if tomorrow's list is complete and today's starts late, this is the cause. Under **Scheduling**, *Customers can order up to \[N] days ahead and need at least \[N] day(s) notice.* A notice value of **1** or more removes today entirely, and nothing is bookable beyond the days-ahead value. See [Customers can't order for today](#customers-cant-order-for-today). **Specific pre-order days** is an allow-list: as soon as any dates are selected, only those dates are bookable and every other day disappears. Dates in the past are ignored. While the store is snoozed, pre-orders are only offered if **Allow pre-orders when store is snoozed** is on — and then every slot that starts **before the snooze ends** is removed, and the earliest bookable date moves past the snooze. With that setting off, a snoozed store offers no pre-order slots at all. A store that is offline accepts no orders of any kind. See [Disable Ordering](/docs/guides/orders/disable-ordering). A slot disappears once it is full: **Accept up to \[N] orders per slot** under **Capacity per slot**, plus the total-items and revenue caps under **Advanced: slot-level throttling**. * Orders that are rejected or archived stop counting; refunded and cancelled orders still count. * A checkout started in the last **5 minutes** also holds the slot until it completes or drops off. * The item and revenue caps add the **current customer's basket** to the running total, so the same slot can show for a small basket and be hidden for a large one. See [Why are some timeslots missing?](#why-are-some-timeslots-missing) for a worked example. * On the **Delivery** tab an individual day can override the defaults: expand the day and open **Slot overrides** (**Slot duration**, **Max orders per slot**, **Max items per slot**, **Revenue cap per slot**). Days with an override show a **Custom** badge. Weekly [opening hours](/docs/guides/store-settings/opening-hours) and dated [Special Opening Hours](/docs/guides/store-settings/opening-hours#special-opening-hours) are **not** used to build the slot list, so they are never the reason a slot is absent. They are checked when the customer submits the order: a pre-order outside a dated special-hours window is rejected at checkout, and the customer sees no message explaining why. If slots are present but orders fail, look there rather than at your Pre-Orders windows. Hours do block ordering at the store level, though: while your store is closed, it takes no orders at all unless **Also accept pre-orders outside of opening hours** is on. That hides the whole ordering flow rather than individual slots. ASAP is only offered on the **current day**, and only when the first available slot falls inside the threshold. Both controls are on the fulfilment tab: **Also let customers order for ASAP without picking a slot**, then *Show the ASAP option when the next available slot is within \[N] of the current time*. The threshold list is fixed — **Always (no limit)**, **15 minutes**, **30 minutes**, **45 minutes**, **1 hour**, **1.5 hours**, **2 hours** — it defaults to 45 minutes and applies to every fulfilment type for the store. **Preview: what customers will see** renders the slot length against the windows of the **first available day** only. It deliberately ignores preparation time, capacity already used, snoozes and opening hours, so it shows the *maximum* set of slots. If a slot appears in the preview but not at checkout, the cause is one of steps 4–8 — start with preparation time. When a day's slots have all been filtered out, customers see "Sorry, no slots left today" in the time dropdown. Availability is cached in the customer's browser, so after saving a change a customer may need to **hard refresh** the ordering page before the new slots appear. ## Troubleshooting #### Customers can't order for today If same-day orders won't go through, there is no order cut-off setting to change — storekit has no cut-off time control anywhere in the dashboard. Instead, check these settings, in this order, under **Stores** → your store → **Settings** → **Pre-Orders** (check the **Pickup** and **Delivery** tabs separately): 1. **Days notice is 1 or more.** Under **Scheduling** the control reads *Customers can order up to \[N] days ahead and need at least \[N] day(s) notice.* If the notice value is **1** or more, today is removed and the earliest available day is tomorrow (or later). Set it to **0** to allow same-day pickup or delivery. 2. **The day's pickup or delivery end time has already passed.** Each day's time window (the **to** end time under **Pickup times** or **Delivery times**) only generates slots up to that time. If it is already later than the day's end time, no more slots appear for today. 3. **The day is set to Unavailable.** If a day's **Unavailable** toggle is on, no slots are offered for that day at all. 4. **"Specific pre-order days" does not include today.** If you have set specific pre-order days, only those dates are bookable — if today is not listed, it is closed to pre-orders. 5. **Preparation time pushes past the last slot.** The fulfilment prep time is added to the current time to find the earliest slot. If that earliest slot falls after the day's last window, today has no bookable slots left. Pre-order availability is cached in the customer's browser. After you change any of these settings and save, a customer may need to **hard refresh** the ordering page (or reopen it) before the newly available days and slots appear. #### Why are some timeslots missing? For the full list of filters that can remove a slot, walk [Troubleshooting: expected time slots are missing](#troubleshooting-expected-time-slots-are-missing). Two settings are the usual cause: the **slot value cap** in slot-level throttling, and the **per-day pickup or delivery end times**. **1. The slot has hit its value cap (slot-level throttling)** If you set a total order value limit under **Advanced: Slot-level throttling**, storekit adds up the value of **every order already in that slot** and hides the slot when the new customer's basket would push the running total over the limit. Two things make this easy to misread: * The check depends on the **incoming basket's value**, so the same slot can still show for a customer with a small basket while being hidden for a customer with a large one — at the exact same time. * The limit is only enforced **once the slot already has at least one order**. The first order into an empty slot always goes through, even if it alone exceeds the limit. **Worked example — value cap of £100 on a slot** * The 12:00–12:30 slot already holds orders totalling **£80**. * A customer with a **£30** basket does **not** see the slot: £80 + £30 = £110, which is over £100. * A customer with a **£15** basket **does** see it: £80 + £15 = £95, which is under £100. * If the slot had been **empty**, even a £250 basket would have gone through — the cap only starts applying after the first order lands. The same logic applies to the total-items limit. These caps count every non-rejected order in the slot, so a slot can look "empty" to you while still being full by value. To restrict a single order's size instead of a whole slot, use the **Maximum** value on the **Order limits** card at **Stores** → your store → **Settings** → **Operations** — see [Order Limits](/docs/guides/orders/advanced/order-limits#monetary-limits). There is no per-order item cap anywhere in the dashboard, so the total-items limit here cannot stand in for one. **2. The day's pickup or delivery times end before your opening hours** Pre-order slots are generated **only** from the time windows you add per day under the **Pickup times** or **Delivery times** section of each tab — not from your opening hours. If a day's pickup or delivery window ends earlier than your store closes, no slots appear for the rest of the evening, even though the store is open. If evening slots are missing for one fulfilment type or one day, check that day's window under the **Pickup** or **Delivery** tab. For example, a Friday pickup window of **09:00–17:00** produces no slots after 17:00, even if your [opening hours](/docs/guides/store-settings/opening-hours) run until 22:00. Extend that day's end time to cover the evening. Remember pickup and delivery are configured separately, so a gap can affect one but not the other. #### How do I limit how many of one specific product can be pre-ordered? Capacity per slot and slot-level throttling limit every order in a slot **combined** — they cannot cap how many of one specific product are sold. To restrict how many of a single product go out (on pre-orders or otherwise), turn on **Track Inventory** for that product and set its stock count. The product is hidden automatically once it reaches zero, while the rest of your menu stays available. See [Inventory Management](/docs/guides/menu/inventory-management). #### Customers cannot see pre-order slots Check that **Accept pre-orders** is enabled and that the relevant pickup or delivery times have been added. Also check that the fulfilment type is enabled under **Settings > Operations**. #### Customers cannot see delivery pre-order slots Check that delivery is enabled under **Stores** → your store → **Settings** → **Operations** → **Fulfillment**. If the store is set to pickup only, customers will not see delivery as a fulfilment option even if delivery pre-order times have been added. #### Customers cannot select the expected time Check your slot length, capacity per slot, scheduling notice, and pickup or delivery times. If a slot has reached its capacity, it will no longer be available for new orders. Pickup and delivery pre-orders are configured separately. Make sure you check both tabs if your store accepts both fulfilment types. #### Does refunding or cancelling an order free up the slot? **Refunding** an order returns the customer's payment, but it does **not** reopen the pre-order slot. The order still counts towards that slot's capacity, so the slot can stay unavailable even after the refund goes through. **Cancelling** an order does not reopen the slot either — cancelled orders are still counted against the slot. A pre-order slot only stops counting an order when that order is **rejected (declined)** or archived. When an order is rejected, its capacity is released **immediately** on storekit's side, so the slot can be booked again straight away. This is separate from the **3–5 business days** it usually takes for a refunded payment to appear back on the customer's statement. To reopen the exact slot for a test or replacement order, reject the original order rather than only refunding it, or move the order to a different time by clicking its scheduled time in the order details (see [Understanding Slot Times in Your Dashboard](#understanding-slot-times-in-your-dashboard)). Moving the order frees the slot it used to occupy. #### A slot still isn't available after a refund Even once capacity has been released, a slot may still not appear for a new order. Common reasons: * **The slot has been filled by other orders.** Capacity is counted across every order in the slot, including **capacity per slot** and the **slot-level throttling** limits for total items and total order value — not just the refunded order. * **The slot is in the past or too soon.** Slots that have already passed, or that fall inside your scheduling notice (lead time) or preparation time, will not show. Slots also can't be booked beyond how many days ahead you allow. * **Your store is closed right now.** Opening hours don't remove individual slots from the list, but unless **Also accept pre-orders outside of opening hours** is enabled, a closed store takes no orders at all while it is closed. See [Know what opening hours do — and don't do](#troubleshooting-expected-time-slots-are-missing). * **A very recent order is still holding the slot.** An order placed in the last few minutes that hasn't finished payment can briefly reserve the slot before it either completes or drops off. If a slot should be free but still won't appear, [contact support](/docs/getting-started/contact-support). ## Related * [**Opening Hours**](/docs/guides/store-settings/opening-hours) — manage when your store is open for orders * [**Enabling Pickup**](/docs/enabling-pickup) — enable pickup/collection orders for your store * [**Enabling Delivery**](/docs/guides/fulfillment/delivery/enabling-delivery) — enable delivery orders for your store * [**Delivery Zones**](/docs/guides/fulfillment/delivery/delivery-zones) — configure where delivery is available * [**Managing Live Orders**](/docs/guides/orders/managing-live-orders) — handle incoming orders in real time # Archiving Orders Source: https://storekit.com/docs/guides/orders/archiving-orders Archive completed storekit orders to keep your dashboard focused on active orders. Archived orders remain searchable in reports without cluttering live queues. Archiving moves completed orders out of the main order view, keeping your dashboard focused on active orders during busy periods. ## How Archiving Works * Archived orders are removed from the default order list view * Archived orders retain all data — they are not deleted * You can still find archived orders using search and filters ## How to Archive an Order From your order list, click on a completed order to open its details. Click **Archive** to move the order out of the main view. ## When to Archive Archiving is useful for: * Keeping the live orders view clean during busy service periods * Removing completed orders you no longer need to reference immediately * Organising your order history Archived orders are never deleted. You can always find them by searching for the order code, customer name, or filtering by date. ## Related * [Managing Live Orders](/docs/guides/orders/managing-live-orders) — handle incoming orders in real-time * [Orders Overview](/docs/guides/orders/overview) — how orders flow through storekit # Temporarily Disable Ordering Source: https://storekit.com/docs/guides/orders/disable-ordering Temporarily pause your storekit store from accepting new orders without changing opening hours. Ideal for unexpected closures or reaching capacity. You can temporarily stop your store from accepting new orders without changing your opening hours. This is useful when you need to pause operations quickly. ## How to Pause Ordering From your store dashboard, toggle off ordering or use the pause button. Your store will immediately stop accepting new orders. When ordering is paused, customers visiting your store see a message indicating that the store is not currently accepting orders. ## When to Use Temporarily disabling ordering is useful for: * **Unexpected rush** — kitchen is overwhelmed and needs to catch up * **Staff shortage** — not enough team members to handle incoming orders * **Kitchen issues** — equipment problems or supply disruption * **Special events** — private functions or maintenance periods ## Resuming Orders When you're ready to start accepting orders again, toggle ordering back on from your dashboard. Orders will resume immediately. Pausing ordering starts **immediately** — it is not a way to schedule a closure for a future date. For a date you already know about (a bank holiday, a private event, an early close next Friday), add a dated row under [Special Opening Hours](/docs/guides/store-settings/opening-hours#special-opening-hours), which overrides your weekly hours for that date only and leaves the rest of your schedule intact. ## Related * [Opening Hours](/docs/guides/store-settings/opening-hours) — configure your regular operating schedule * [Special Opening Hours](/docs/guides/store-settings/opening-hours#special-opening-hours) — close or change hours for one specific date * [Managing Live Orders](/docs/guides/orders/managing-live-orders) — handle incoming orders in real-time # Kitchen Display Source: https://storekit.com/docs/guides/orders/kitchen-display Run the storekit Kitchen Display: a full-screen ticket board that shows live orders by due time and lets staff bump tickets through each stage. The Kitchen Display is a full-screen ticket board for the kitchen. It shows every open order for the stores you choose, ordered by when it is due, and lets staff move each ticket along with a single tap. Open it on a tablet or wall screen and leave it running — it updates in real time as orders arrive and change.