# POS Cafe documentation
Every article from https://poscafe.app/docs/ in sidebar order.
---
# App Overview
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/app-overview/
A tour of the POS Cafe app and its navigation for selling customisable products in Shopify POS.
POS Cafe allows products that require multiple options or modifications, such as barista drinks, to be easily managed and sold via Shopify POS.
POS Cafe offers the ability to change and 'add on' modifications at Point of Sale, using the **POS Cafe** or **POS Cafe - Lite** tile. See [Using the App in Shopify POS](/docs/shopify-pos-setup/using-the-app-in-shopify-pos/).
POS Cafe allows product modifications to be printed on order tickets and receipts, and sent to Fresh KDS, for ease of use of baristas and cafe staff.
The Quick Start Guide video walks through setting up POS Cafe from start to finish.
Video: POS Cafe - Quick Start Guide - October 2026 (https://www.youtube-nocookie.com/embed/06N9jGG3Bvw)
## The POS Cafe navigation
The POS Cafe menu in your Shopify admin has these pages: **Shop Information** (the app's home page, where setup warnings appear), **Modifier Sets**, **Prep Areas**, **Cafe Discounts**, **Cafe Collections**, **Locations** and **Settings**.
### Modifier Sets
- In POS Cafe, modifier sets house options that can be applied to products. For example, modifier set titles may be groups of options like 'milk', 'heat' or 'other options'.
- Within modifier sets, merchants add modifier options that may be used to customise their POS products, such as 'Full Cream', 'Skim' and 'Soy'.
- Modifier options may be configured to incur an additional charge.
- You may record a SKU for each modifier option. SKUs count in inventory and reports only for items sold with the **POS Cafe** tile; see [POS Cafe vs POS Cafe - Lite](/docs/shopify-pos-setup/choosing-a-tile/).
- Modifier sets can be configured to accept a single modifier option (i.e. 'Full Cream Milk') or multiple options (i.e. 'Sugar' AND 'Marshmallows'), and a selection can be required or optional.
- A modifier set can be assigned to more than one product, and products may have multiple modifier sets assigned to them.
See [Modifier Sets Page](/docs/getting-started/modifier-sets-page/).
### Prep Areas
- Prep areas allow you to configure different food preparation areas within your business (such as 'barista', 'kitchen' and 'sandwich bar').
- Prep areas are assigned to cafe items, and to your receipt printers and Fresh KDS screens, so each item is sent to the right place.
### Cafe Discounts
- Create discounts (fixed amount or percentage) that staff can apply to individual items from the POS Cafe tile. See [Cafe Discounts](/docs/getting-started/cafe-discounts/).
### Cafe Collections
- POS Cafe uses Shopify product management to create your initial, unmodified products and to sort them into the collections you will use in POS Cafe. See [Adding Products](/docs/getting-started/adding-products/) and [Setting Up Collections](/docs/getting-started/setting-up-collections/).
- In the POS Cafe app, merchants add the Shopify collections containing the products that require modification.
- Products requiring no modification (i.e. café products such as pre-packaged drinks, etc) do not need to be added to POS Cafe, rather can be sold directly in the Shopify POS system. If you want some of these products to print on your order tickets or appear on Fresh KDS, see [Native Product Routing](/docs/order-tickets-kds/native-product-routing/).
- From the Cafe Collections page you can click into each of your cafe collections and assign modifier sets & prep areas to your products one-by-one or in bulk.
### Locations
- Activate a POS Cafe license for each location, and set up its store hours, menu, order types, devices (Fresh KDS screens and receipt printers), tables and online ordering. See [Locations](/docs/getting-started/locations/).
### Settings
- The **Settings** page holds the POS tile options, online ordering settings, integrations (Fresh KDS, Zapiet, Cloudshelf), the admin settings POS Cafe relies on (your sales channels and the modifier collection, where modifier sets are stored as Shopify products), and your account. See [General Settings](/docs/getting-started/general-settings/).
---
# Locations
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/locations/
Manage multiple physical locations, each configured independently.
POS Cafe allows you to manage multiple physical locations tied to your Shopify store. Each location can be configured independently with its own license, timezone, store hours, menu, order types, devices (including Fresh KDS screens and receipt printers), tables and online ordering.
## Locations overview
**Where to find it:** From the POS Cafe admin panel, navigate to **Locations** in the main menu.
Here, you'll see a list of all your **Shopify-connected locations**, with these columns:
- **Name**: the location name (as defined in your Shopify settings)
- **License**: whether a **POS Cafe license** is currently active at that location
- **Order Types**: the order types the location offers
You can select several locations and use **Update location license** or **Update order types** to change them together.
:::note
Your subscription plan determines how many locations can be licensed at once. The page shows how many licenses your subscription allows and how many locations are enabled. You can view and manage your plan by clicking **Manage Subscription**.
:::
## Managing a location
Click on any location in the list to open its location page. From here, you can configure the settings specific to that location.
| Section | Settings |
| :-- | :-- |
| **Location Setup** | **POS Cafe License**, **Location Timezone**, **Store Hours** and **Location Menu** |
| **Order Types** | Which order types the location offers, and its default order type |
| **Devices** | **Registered Devices**, **Fresh KDS Screens** and **Receipt Printers** |
| **Table Management** | Add, edit and arrange your tables |
| **Online Ordering** | How this location accepts online orders |
### License activation
- Use the toggle under **POS Cafe License** to activate or deactivate the license.
- Only licensed locations can use POS Cafe features on their Shopify POS devices.
### Location Timezone
Choose the timezone for the location. It is used for store hours and order scheduling at this location.
### Store hours
Click **Store Hours** to open the location's opening hours.
- Under **Weekly hours**, use the toggle on each day to mark it as **Open** or **Closed**, then set the start and end time. You can add more than one time period to a day, and use **Copy Schedule** to copy one day's hours to other days.
- Under **Date overrides**, click **Add an override** to set **Custom hours**, or mark a date as **Unavailable all day**, for holidays or special events.
### Location menu (collections)
Click **Location Menu** to choose which cafe collections this location shows.
- By default, each location uses your global menu (the collections on the **Cafe Collections** page).
- Turn on **Custom Location Menu** to give this location its own menu, then click **Add / Edit Collections** to manage which collections are visible.
- Each collection displays the number of products currently included. You can remove a collection by clicking **Remove**.
:::tip
Collections are managed in Shopify, so changes there will reflect in POS Cafe.
:::
### Order Types
Turn each order type on or off for this location, and click **Set Default** to choose the default. See [Order Types](/docs/getting-started/order-types/).
While **Drive Thru** or **Curbside** is on, an **Ask for vehicle details** switch also appears here. It controls whether online customers are asked for their vehicle make, model and colour. See [Asking for vehicle details](/docs/online-ordering/locations-hours-order-types-and-pickup/#asking-for-vehicle-details).
### Devices
- **Registered Devices**: view and manage the POS devices registered to this location. Devices appear here once they are registered from the POS app (**Register** under **Register Device** in the POS Cafe tile's **Settings**).
- **Fresh KDS Screens**: connect kitchen display screens and choose which prep areas each screen receives. See [Fresh KDS](/docs/order-tickets-kds/fresh-kds/).
- **Receipt Printers**: set up and manage the receipt printers for this location (Epson, Star or a Shopify POS printer), check their status, and pause or resume them. Each printer needs at least one prep area. See [Receipt Printers Page](/docs/order-tickets-kds/receipt-printers-page/), [Star CloudPRNT](/docs/order-tickets-kds/star-cloudprnt/), [Epson Server Direct Print](/docs/order-tickets-kds/epson-server-direct-print/) and [Shopify POS Printer](/docs/order-tickets-kds/shopify-pos-printer/).
### Table Management
Click **Table Management** to add, edit and arrange your tables. See [Table Management: Getting Started](/docs/table-management/getting-started/).
### Online Ordering
Control how this location accepts online orders. See [Locations: Hours, Order Types & Pickup](/docs/online-ordering/locations-hours-order-types-and-pickup/).
---
# Adding Products
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/adding-products/
Set up your cafe items as Shopify products ready for POS Cafe, with sizes as variants, the Point of Sale channel on, and no shipping or inventory to worry about.
POS Cafe sells your Shopify products, so every cafe item starts as a product in Shopify admin. This guide shows what to fill in for a typical cafe item, such as a coffee with sizes, and what you can leave alone. Options like milks and syrups are not variants; they come later as POS Cafe [modifier sets](/docs/getting-started/modifier-sets-page/).
Video: POS Cafe - Entering your products into Shopify (https://www.youtube-nocookie.com/embed/dOjhhDM3DBA)
## Create the product
1. **Open Products.** In Shopify admin, click **Products** in the left menu.
2. **Click Add product.**
3. **Enter the details.** Give the product a **Title**. A **Description** and **Media** matter if you also sell it online; for in-store only items they're optional. Leave **Category** empty for cafe items (see [Tax Calculation Issues](/docs/reports-taxes/tax-calculation-issues/)).
4. **Set the price.** Under **Pricing**, enter what customers pay and whether tax applies. **Cost per item** is optional and feeds Shopify's profit reports.
5. **Decide on inventory.** For items made to order, such as barista coffee, leave **Track quantity** off. Turn it on for items you count, such as bottled drinks or pastries, so Shopify can warn you when stock is low. Add a **SKU** or **Barcode** only if you scan or reorder the item.
6. **Skip shipping.** Leave shipping settings alone for items sold in store.
## Add sizes as variants
If the item comes in sizes that change the base price, add them as Shopify variants. Options that don't change the base price, or that can be combined, belong in POS Cafe modifier sets instead.
1. **Click Add options like size or color** in the **Variants** section.
2. **Name the option.** Type the option name, for example **Size**, and click **Create custom option**.
3. **Enter the values**, for example **Small**, **Regular** and **Large**, then click **Done**.
4. **Price each variant.** Shopify lists the new variants; set the price for each one.
## Make it available in Shopify POS
1. **Set the status.** In the top right, set **Status** to **Active** when the item is ready to sell, or **Draft** to keep working on it.
2. **Choose the sales channels.** Under **Publishing**, click the **…** menu, then **Manage sales channels**. Tick **Point of Sale**, plus **Online Store** if you use POS Cafe online ordering, and click **Done**.
3. **Organise the product (optional).** **Product type** and **Tags** are useful for building automated collections; a **Vendor** is the brand. Under **Collections**, add the product to any manual collections you've already created. See [Setting Up Collections](/docs/getting-started/setting-up-collections/).
4. **Click Save** at the top of the page.
## Next step
Group your products into collections, which become the sections of your POS Cafe menu. See [Setting Up Collections](/docs/getting-started/setting-up-collections/).
---
# Setting Up Collections
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/setting-up-collections/
Create the manual and automated Shopify collections that organise your POS Cafe menu, with a video walkthrough.
POS Cafe builds your menu from Shopify collections, such as Hot Coffee, Tea and Food. This guide shows how to create those collections in Shopify admin. Once they exist, add them to POS Cafe on the [Cafe Collections page](/docs/getting-started/cafe-collections-page/).
Video: POS Cafe - Setting up your Cafe Collections (https://www.youtube-nocookie.com/embed/bie6YscJGos)
## Open the Collections page
1. **Go to Collections.** In Shopify admin, click **Products → Collections**.
2. **Remove the default collection (optional).** To remove Shopify's default **Home page** collection, tick the box next to it, click the three dots at the top right, then click **Delete collection**.
3. **Create a collection.** Click **Create collection**, then follow the steps for a manual or automated collection below.
## Creating a manual collection
In a manual collection, you choose each product yourself, from either the collection or the product page.
1. **Name it.** Enter a title for your collection and select **Manual**.
2. **Choose where it's sold.** Click **Manage** next to **Publishing** and choose the sales channels where these products are sold, for example **Point of Sale**, plus **Online Store** if you use POS Cafe online ordering.
3. **Save.** Click **Save** at the top of the page.
4. **Browse for products.** Once the collection is saved, a **Products** box appears. Click **Browse**.
5. **Add products.** Search for the products you want, tick the box next to each, then click **Add**.
6. **Set the order.** Products appear in the **Products** box in the order they'll be shown. To change it, set **Sort** to **Manually**, then drag the products into place.
## Creating an automated collection
In an automated collection, Shopify adds products for you based on conditions you set. When a new product meets the conditions, it joins the collection automatically, and a product that stops meeting them is removed.
1. **Name it.** Enter a title for your collection and select **Automated**.
2. **Set your conditions.** For example, **Product tag** **is equal to** **Coffee**. Tags must match the tags on your products exactly.
3. **Choose where it's sold.** Click **Manage** next to **Publishing** and choose the sales channels where these products are sold, for example **Point of Sale**, plus **Online Store** if you use POS Cafe online ordering.
4. **Save.** Click **Save** at the top of the page.
5. **Set the order.** Products appear in the **Products** box in the order they'll be shown. To change it, set **Sort** to **Manually**, then drag the products into place.
## Next step
Add your new collections to POS Cafe on the [Cafe Collections page](/docs/getting-started/cafe-collections-page/), then assign [modifiers and prep areas](/docs/getting-started/assigning-modifiers-prep-areas/) to their products.
---
# Cafe Collections Page
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/cafe-collections-page/
Add the Shopify collections that need modifiers to POS Cafe and set the order they appear in on the POS tile.
The POS Cafe **Cafe Collections** page is where you choose which Shopify collections POS Cafe sells, and the order they appear in on the POS Cafe tile. From each collection you then assign modifier sets, prep areas and online availability to its products, one at a time or in bulk.
:::note
Only add a collection to POS Cafe if its products need modifiers. Products that don't, such as packaged drinks, can be sold from the normal Shopify POS grid. To send those to your printers or Fresh KDS as well, see [Native Product Routing](/docs/order-tickets-kds/native-product-routing/).
:::
## Add your collections
1. **Open Cafe Collections.** Click **Cafe Collections** in the POS Cafe navigation.
2. **Click Add Collections** in the top right corner (or **Add collection** in the main window if you haven't added any yet).
3. **Select the collections** whose products need modifiers, then click **Select**. If your products aren't in collections yet, see [Adding Products](/docs/getting-started/adding-products/) and [Setting Up Collections](/docs/getting-started/setting-up-collections/) first.
4. **Set the order and save.** Drag the six dots next to each collection to reorder them. This is the order staff see on the POS Cafe tile. Then click **Save**.
:::note
The collections on this page are your global menu, used by every location. To give a location its own menu, turn on **Custom Location Menu** on that location's **Location Menu** page. See [Locations](/docs/getting-started/locations/).
:::
## Next step
Open a collection to assign modifier sets and prep areas to its products. See [Assigning Modifiers & Prep Areas](/docs/getting-started/assigning-modifiers-prep-areas/).
---
# Modifier Sets Page
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/modifier-sets-page/
Create the modifier sets that give customers choices on each product, from scratch or by importing existing Shopify products.
**Modifiers** are the options customers choose when they buy a cafe item: milk, size of the shot, sugar, extras. A **modifier set** groups the options for one choice (for example, "Milk" with Full Cream, Skim and Soy), and each option can carry an extra charge. Manage them on the **Modifier Sets** page in POS Cafe, where you can create sets from scratch or import products you've already set up in Shopify.
:::note
POS Cafe stores each modifier set as a Shopify product, with each option as a variant of that product. These products live in your modifier collection ('POS Cafe - Modifiers' by default), which you can change in **Settings → Admin Settings → Modifier Collection**.
:::
## Create a modifier set from scratch
1. **Click Create modifier set** on the **Modifier Sets** page. The button is unavailable until a modifier collection and a default online sales channel are set in **Settings → Admin Settings**.
2. **Give the set a title** that describes the choice it covers, such as **Milk** or **Extras**.
3. **Choose the selection rules.** Tick **Allow multiple Modifier options to be selected** if a customer can pick more than one option from this set on the same item. **Require a modifier option to be selected** is ticked by default; untick it to make the set optional.
4. **Add the options.** Each option has a **Title**, an **Additional charge** and an optional **SKU**. Click **Add option** for each one.
:::note
Put the option you want selected by default first, for example **No sugar** or **Full Cream Milk**. When the set is required, staff and customers must choose at least one option from it on every product it's assigned to.
:::
5. **Set the status.** **Product Status** can be **Active**, **Draft** or **Unlisted**. New modifier sets start as **Unlisted**.
6. **Set the online sales channel.** **Online Sales Channel** (**Enabled** or **Disabled**) controls whether the set is available in your online store. New sets start as **Disabled**.
7. **Click Save.**
8. **Refresh POS Cafe on your devices.** The POS Cafe tile picks up the new set when it next refreshes its menu; to see it straight away, refresh POS Cafe on the device. See [Refreshing POS Cafe](/docs/shopify-pos-setup/refreshing-pos-cafe/).
## Import modifier sets from Shopify
Use this if you've already created modifier products in Shopify, or imported them from another store.
1. **Click Import from Shopify** in the top right corner of the **Modifier Sets** page.
2. **Select the products** to use as modifier sets.
3. **Convert each one.** A product that wasn't created in POS Cafe shows a **Convert to POS Cafe modifier set** banner when you open it. Check the set and its options, save, then click **Convert to POS Cafe modifier set**. To convert several at once, select them on the **Modifier Sets** page, choose **Bulk Convert Modifier**, set the selection rules and click **Convert**.
## Bulk actions on the Modifier Sets page
Select one or more modifier sets on the **Modifier Sets** page to use these bulk actions:
| Bulk action | What it does |
| :-- | :-- |
| **Update status** | Change the status of the selected modifier sets. |
| **Remove from Modifier Collection** | Remove the selected products from your modifier collection. |
| **Update online sales channel** | Make the selected modifier sets available in, or remove them from, your online store. Requires an online sales channel in **Settings**. |
| **Bulk Convert Modifier** | Convert selected products that aren't POS Cafe modifier sets yet. Only shown when the selection includes such products, and needs a modifier collection set in **Settings**. |
## Next step
Assign your modifier sets to products from the Cafe Collections page. See [Assigning Modifiers & Prep Areas](/docs/getting-started/assigning-modifiers-prep-areas/).
---
# Prep Areas
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/prep-areas/
Organise products into prep areas such as the kitchen or barista.
POS Cafe's prep areas feature allows you to assign products to different areas of your cafe where they are prepared, such as meals in the kitchen or drinks by the barista.
Prep areas also control where each item is sent. Each receipt printer and Fresh KDS screen at a location is assigned one or more prep areas, so items print or display only where they are prepared. A receipt printer needs at least one prep area.
Once your prep areas are set up, assign them to products (see [Assigning Modifiers & Prep Areas](/docs/getting-started/assigning-modifiers-prep-areas/)) and to your devices on each location's page (see [Locations](/docs/getting-started/locations/)).
## Steps to set up your prep areas in POS Cafe
1. Click **Prep Areas** in the POS Cafe navigation.
2. Click **Add**, then type the prep area's name.
3. Click **Save**.
---
# Assigning Modifiers & Prep Areas
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/assigning-modifiers-prep-areas/
Attach modifier sets and prep areas to your products from the Cafe Collections page, one product at a time or in bulk.
Once your modifier sets and prep areas exist in POS Cafe, assign them to your products from the **Cafe Collections** page, one product at a time or in bulk. Modifier sets give staff the options to choose; the prep area decides which printer or Fresh KDS screen each item is sent to.
:::note[Before you start]
Bulk modifier actions need a modifier collection, and online store actions need a sales channel. If either is missing, the collection page shows a **Finish setup to use all bulk actions** banner with a **Go to settings** button. See [General Settings](/docs/getting-started/general-settings/).
:::
## Add modifier sets to products
1. **Create your modifier sets** on the [Modifier Sets](/docs/getting-started/modifier-sets-page/) page if you haven't already.
2. **Open a cafe collection.** Click **Cafe Collections**, then click a collection. The page lists its products with columns for **Assigned modifier sets**, **Prep area**, **Online sales channel** and **Status**. Click a product to edit it on its own, or **Edit Collection** in the top right to edit the collection in Shopify.
3. **Select the products** with the tick boxes, then click **Modifiers → Add modifiers**.
4. **Choose the modifier sets.** Pick **Add to existing modifiers** to add to what each product already has, or **Replace all modifiers** to see everything currently assigned and add, remove or swap sets for a fresh start. Tick the sets you want and click **Add** (or **Replace**). The change applies straight away, and a progress window shows while POS Cafe updates the products.
5. **Reorder the sets on a product (optional).** To change the order the sets appear in Shopify POS, click the product to open its page. In the **Modifier Sets** section, drag the dots next to each set into order. **Add Modifier Set** here adds sets to just this product.
6. **Save** with the **Save** button in the save bar at the top of the product page, then use the back arrow to return to the collection.
To take modifier sets off several products, select them and click **Modifiers → Remove modifiers**. The list shows only the sets currently assigned to the selected products; tick the ones to remove and click **Remove**.
:::tip
The same bulk actions bar also sets online availability for the selected products: **Online → Show in online store** or **Hide from online store**. See [Building Your Menu](/docs/online-ordering/building-your-menu/).
:::
## Add prep areas to products
1. **Set up your prep areas** on the [Prep Areas](/docs/getting-started/prep-areas/) page if you haven't already.
2. **Open a cafe collection.** Click **Cafe Collections**, then click a collection. The **Prep area** column shows what each product has now.
3. **Select the products** with the tick boxes, then click **Assign prep area**.
4. **Choose the prep area** in the **Prep Areas** window and click **Add**. The change applies straight away; there's no separate save step.
To change one product's prep area, click the product to open its page, click **Edit Prep Area** in the **Prep Area** section, then click **Save** in the save bar.
## Next step
Add the POS Cafe tile to Shopify POS and sell your first customised item. See [Using the App in Shopify POS](/docs/shopify-pos-setup/using-the-app-in-shopify-pos/).
---
# Order Types
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/order-types/
Define order types like For Here, To Go, and Pickup, per location.
Order types tell your team how each order will be fulfilled: For Here, To Go, Pickup, Drive Thru, Delivery or Curbside. This guide covers turning them on per location, setting a default, and choosing whether staff pick an order type per item or once per order.
## What are Order Types?
Order Types allow you to clearly indicate how an order should be fulfilled. This information appears at the top of **Order Tickets** and on your **KDS**, ensuring your team knows exactly how to prepare and package each order. For online **Drive Thru** and **Curbside** orders, tickets and Fresh KDS can also show the customer's vehicle. See [Asking for vehicle details](/docs/online-ordering/locations-hours-order-types-and-pickup/#asking-for-vehicle-details).
The order types are:
| Order type | Meaning |
| :-- | :-- |
| **For Here** | Customers dine in at this location. |
| **To Go** | Customers take their order away. |
| **Pickup** | Customers collect their order in-store. |
| **Drive Thru** | Customers order and collect from their vehicle. |
| **Delivery** | Orders are delivered to the customer's address. |
| **Curbside** | Staff bring orders out to the customer's car. |
## Turn order types on or off per location
By default, all locations are set to accept **For Here** and **To Go**. You can customise which Order Types each location offers.
1. Log into your **Shopify admin**, and go to **Apps → POS Cafe**.
2. Click on **Locations** in the POS Cafe menu.
3. Choose the location you would like to manage.
4. In the **Order Types** section, use the toggle next to each type to make it **Active** or **Inactive** at that location.
5. Click **Save** in the save bar at the top of the page.
:::note[Turning Order Types off]
If you turn off every order type for a location, staff won't be asked to choose an order type in the POS Cafe tile, and no order type will be recorded on orders.
:::
## Set a default order type
You can choose which Order Type should be selected by default for new orders at each location. This speeds up the checkout process for your most common order type.
1. On the same location page, click **Set Default** in the **Order Types** section.
2. In the **Set Default Order Type** window, select your preferred default (e.g., "For Here" or "To Go") and click **Save**.
3. Click **Save** in the save bar at the top of the page. The default type shows a **Default** badge.
## Choose item-level or order-level order types
In **Settings → POS Extension**, two options control how staff choose order types in the POS Cafe tile. Both apply to all locations and save as soon as you click them.
| Setting | Options | What it controls |
| :-- | :-- | :-- |
| **Order Types Level** | **Item** (default) or **Order** | **Item**: staff choose an order type for each item on the customise screen. **Order**: staff choose one order type for the whole order on the **Cafe Collections** screen. |
| **Order Types Placement** | **Bottom** (default) or **Top** | Where the Order Type selector appears in the POS Cafe tile. |
## Per-item Order Types
With **Order Types Level** set to **Item** (the default), Order Types are set **per item**, giving you the flexibility to mix types within a single order. This is perfect for customers who want to enjoy a drink in the cafe but take a sandwich to go.
For example, a single order can contain:
- **Coffee** - For Here
- **Sandwich** - To Go
---
# Cafe Discounts
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/cafe-discounts/
Create and manage custom discounts directly within POS Cafe.
The **POS Cafe Discounts** feature allows you to create and manage custom discounts directly within POS Cafe. You can assign specific discounts to individual cafe items straight from the POS Cafe tile in Shopify POS.
## How does this differ from Shopify Discounts?
Unlike standard Shopify Discounts, which apply to the entire cart or rely on complex eligibility rules, POS Cafe discounts can be seamlessly applied to individual items while you are customising an order.
## Cafe discount reporting
POS Cafe applies each cafe discount to the item in the Shopify POS cart as a standard line item discount, using your discount's title.
## How to set up
To start using cafe discounts, you first need to configure them within the POS Cafe app in your Shopify admin.
1. Log into your **Shopify admin**, and go to **Apps → POS Cafe → Cafe Discounts**.
2. Click **Create Discount**.
3. Enter a descriptive **Discount Title** (e.g., 'STAFF', 'BYO CUP'), choose the **Discount Type** (**Fixed amount** or **Percentage**), and enter the **Value**.
- **Fixed amount**: Deducts a specific value from the item. For example, a $1.00 'BYO CUP' discount for customers keeping it eco-friendly.
- **Percentage**: Deducts a percentage from the item's price. For example, a 50% 'STAFF' discount for employee meals.
4. Click **Save** to save your discount.
:::tip
Cafe discounts can be set to **Active** or **Inactive** with the **Status** setting. To change several at once, select them on the **Cafe Discounts** page and click **Update Status**.
:::
## Using cafe discounts in POS
After creating or updating a discount, refresh POS Cafe on your Shopify POS device to sync the latest changes: open the POS Cafe tile, tap **Settings**, then tap **Refresh** next to **Refresh Data**. See [Refreshing POS Cafe](/docs/shopify-pos-setup/refreshing-pos-cafe/).
Once refreshed, your new discounts will be available on the item customisation screen of the **POS Cafe** and **POS Cafe - Lite** tiles:
---
# General Settings
Section: Getting Started
URL: https://poscafe.app/docs/getting-started/general-settings/
A guide to the POS Cafe Settings page, covering the POS tile, online ordering, integrations, admin settings and your account.
The POS Cafe **Settings** page is where you configure the POS Cafe tile in Shopify POS, online ordering, integrations, the admin settings POS Cafe needs to work correctly, and your account. Open it from **Apps → POS Cafe → Settings** in your Shopify admin.
## POS Extension
Settings for the POS Cafe tile in Shopify POS (the "smart grid extension"). These apply to both the **POS Cafe** and **POS Cafe - Lite** tiles. Each option saves as soon as you click it.
| Setting | Options | What it controls |
| :-- | :-- | :-- |
| **Order Types Level** | **Item** (default) or **Order** | Whether staff choose an order type for each item, or once for the whole order. See [Order Types](/docs/getting-started/order-types/). |
| **Order Types Placement** | **Bottom** (default) or **Top** | Where the Order Type selector appears in the POS Cafe tile. |
| **Add & Order More returns to** | **Collections list** (default) or **Current collection** | Which screen staff return to after tapping **Add & Order More**. |
| **Line item attributes** | **Show** (default) or **Hide** | Whether POS Cafe's routing and table-marker attributes are shown on cart items for custom receipts, or hidden as private Shopify properties. Hiding them prevents custom receipt rules from using `poscafe_item_type` to identify $0 table lines. |
Click **POS Extension Translations** to rename the POS tile and translate the text it shows. See [POS Cafe Tile Translations](/docs/shopify-pos-setup/translations/).
## Online Ordering
Settings for POS Cafe online ordering:
- **General Online Ordering Settings**: your online ordering page, scheduling and cart options. See [General Online Ordering Settings](/docs/online-ordering/general-online-ordering-settings/).
- **Online Ordering Translations**: translate the storefront text customers see when ordering online.
Per-location online ordering options live on each location's page. See [Locations](/docs/getting-started/locations/).
## Integrations
Connect POS Cafe with third-party platforms and apps:
- **Fresh KDS**: a kitchen display system for faster, paperless order handling. See [Fresh KDS](/docs/order-tickets-kds/fresh-kds/).
- **Zapiet Pickup & Delivery**: hand off online orders to Zapiet for advanced pickup and delivery. See [Zapiet Pickup & Delivery](/docs/integrations/zapiet-pickup-and-delivery/).
- **Cloudshelf**: publish and check your Cloudshelf menu data. See [Cloudshelf Kiosks](/docs/integrations/cloudshelf-kiosks/).
## Admin Settings
General settings that ensure POS Cafe works correctly with your Shopify store.
- **Sales Channels**: POS Cafe detects your Online Store and Point of Sale sales channels automatically. If products are missing from your POS or online menu, click **Re-detect channels**. You can also click **Override** to choose the **Online Store Sales Channel** or **Point of Sale Sales Channel** manually.
- **Modifier Collection**: change or edit the Shopify collection that contains your modifier products.
- **Native Shopify Products**: send selected Shopify POS products (products you don't sell through the POS Cafe tile) to your receipt printers and Fresh KDS. See [Native Product Routing](/docs/order-tickets-kds/native-product-routing/).
:::note
The sales channels and modifier collection are required for POS Cafe to work correctly with your Shopify store. Some actions on the **Cafe Collections** and **Modifier Sets** pages are unavailable until they are set.
:::
## Account
Manage your subscription and get support:
- **Subscription**: view and manage your POS Cafe subscription.
- **Get Support**: create a new support ticket with our team.
- **Knowledgebase**: visit our help centre for how-to articles and guidance.
- **Changelog**: stay up to date with the latest features and improvements.
---
# Using the App in Shopify POS
Section: Shopify POS Setup
URL: https://poscafe.app/docs/shopify-pos-setup/using-the-app-in-shopify-pos/
The POS Cafe, POS Cafe - Lite and Send to prep tiles for Shopify POS, which to add, how to add them, and how to sell a customised item.
POS Cafe adds tiles to the Shopify POS Home screen so your staff can sell customisable items, such as barista drinks, with every modifier on one screen. This guide covers the three tiles, how to add them, and how to sell an item. POS Cafe works on both Shopify POS Lite and Shopify POS Pro.
## The three tiles
| Tile | What it does | Add it when |
| :-- | :-- | :-- |
| **POS Cafe** | Sells your cafe items with modifiers. Adds the real Shopify product to the cart, so stock, reports and loyalty apps see every product and modifier sold. | You want Shopify to track inventory, report by product or run a loyalty program. The right choice for most cafes. |
| **POS Cafe - Lite** | The same screens as **POS Cafe**, but adds each item as one custom sale line. Slightly quicker at the counter, with shorter customer receipts. | You don't rely on Shopify's stock, product reports or loyalty for cafe items. |
| **Send to prep** | Sends the items in the current cart to your receipt printers and Fresh KDS before the customer pays. | You run table service or open tabs, or a location prints on a [Shopify POS printer](/docs/order-tickets-kds/shopify-pos-printer/). Add it alongside one of the two tiles above. |
For a detailed overview of the differences between **POS Cafe** and **POS Cafe - Lite**, including inventory, reporting, loyalty, receipts and speed, see [POS Cafe vs POS Cafe - Lite](/docs/shopify-pos-setup/choosing-a-tile/). Add one of those two tiles for selling, not both: mixing them splits your reporting.
:::note
**POS Cafe - Lite** is one of the POS Cafe tiles. It is not related to Shopify's POS Lite plan.
:::
### What the selling tiles look like
**POS Cafe** and **POS Cafe - Lite** share every screen and setting: your cafe collections, product search, modifiers, customer name and notes, order types, tables, cafe discounts and editing items in the cart. When staff choose a product, all of its modifiers are shown on a single page, so an order with several customisations takes a few taps.
### Send to prep
The **Send to prep** tile sends the items in the current cart to your printers and Fresh KDS before checkout, so the kitchen can start while a table is still open. Tap it again later and only the new items are sent. The tile shows **Add items to the cart** when the cart is empty, and **Not set up at this location · tap to check again** when the current location has no printer or Fresh KDS screen it can send to. At a location with a Shopify POS printer, keep the tile on every device's Home screen even if you don't use open tabs: it prints tickets after staff tap **Done** and lists any that didn't print. See [Send to Prep](/docs/shopify-pos-setup/send-to-prep/) for the full guide.
## Adding a POS Cafe tile
1. **Add a tile.** In Shopify POS, tap **Add tile** on the Home screen.
2. **Tap App.**
3. **Choose POS Cafe.**
4. **Pick your tile.** Choose **POS Cafe**, **POS Cafe - Lite** or **Send to prep**, and tap **Add** on each tile you want. Add one of the two POS Cafe tiles for selling items, plus **Send to prep** if you run open tabs or print on a Shopify POS printer.
5. **Tap Save.**
:::tip
You can rename the tile and change its subtitle (**Modify cafe items** by default) in **Settings → POS Extension Translations**. See [POS Cafe Tile Translations](/docs/shopify-pos-setup/translations/).
:::
## Selling an item
1. **Open the tile.** Tap the **POS Cafe** (or **POS Cafe - Lite**) tile on the Home screen.
2. **Select the collection** that holds the product. The **Cafe Collections** screen also has a **Search for a product** field. If you use table management, the **Table** bar on this screen lets you **Assign** a table to the order.
3. **Select the product.**
4. **Choose the modifiers.** Every modifier available for the product is on one screen. Tap the options the customer wants. Required modifier sets are marked with an asterisk (*), and sets that allow more than one choice show **multiple allowed**.

5. **Add to cart.** Optionally enter a **Customer Name** and **Notes**. To order more products with modifiers, select **Add & Order More**. To check out, select **Add & Go to Cart**.
6. **Check out.** Check the customer out as normal on Shopify POS.
:::note
Depending on your [Order Types](/docs/getting-started/order-types/) settings, staff choose an order type for each item on the customise screen, or once for the whole order on the **Cafe Collections** screen. You can also choose where **Add & Order More** returns to (the collections list or the current collection) in **Settings → POS Extension**.
:::
## After the sale
To change an item that's already in the cart, use the tile's **Edit item** button (see [Editing Items in the Cart](/docs/shopify-pos-setup/editing-items-in-the-cart/)). If a menu change in Shopify admin isn't showing on the device yet, [refresh POS Cafe](/docs/shopify-pos-setup/refreshing-pos-cafe/).
---
# POS Cafe vs POS Cafe - Lite
Section: Shopify POS Setup
URL: https://poscafe.app/docs/shopify-pos-setup/choosing-a-tile/
Compare the POS Cafe and POS Cafe - Lite tiles for Shopify POS, how each adds items to the cart, and which one to choose for your cafe.
POS Cafe gives you two tiles for selling cafe items in Shopify POS: **POS Cafe** and **POS Cafe - Lite**. Staff use exactly the same screens in both. The difference is what each one puts in the Shopify POS cart, and that one difference decides whether Shopify can track stock, report on each product and modifier, and feed loyalty apps. This guide explains both, side by side, and helps you choose.
:::note
**POS Cafe - Lite** is one of the POS Cafe tiles. It is not related to Shopify's POS Lite plan. Both tiles work on Shopify POS Lite and POS Pro.
:::
## The short version
- Choose **POS Cafe** if you want Shopify to track inventory, report sales by product and modifier, record cost of goods, or run a loyalty program. This is the right choice for most cafes.
- Choose **POS Cafe - Lite** if you want the quickest possible add to cart and the shortest customer receipts, and you don't rely on Shopify's stock, product reports or loyalty for your cafe items.
Whichever you pick, your menu, modifiers, prep areas, printers and kitchen screens work the same way.
## What each tile adds to the cart
**POS Cafe** adds the real Shopify product to the cart, with the chosen modifiers attached. Shopify then prices the line as a bundle: the cafe product plus one component for each modifier that carries a charge. Every part of the sale is a real product in your store, so Shopify treats it like any other product sale.
**POS Cafe - Lite** adds one custom sale line for the whole item. POS Cafe works out the price on the device (the product plus any charged modifiers) and records the modifier choices as item details on that line. Shopify sees a single custom item with a title and a price, not your products.
## Side by side
| Feature | **POS Cafe** | **POS Cafe - Lite** |
| :-- | :-- | :-- |
| What goes in the cart | The real Shopify product, with modifiers attached. Shopify prices it as a bundle of the product plus each charged modifier. | One custom sale line per item, priced on the device. Modifier choices are saved as item details. |
| Inventory | Tracked. Stock comes off the product and each charged modifier, and staff are warned when an item is out of stock. | Not tracked. Custom sales have no stock to deduct. |
| Shopify reports | Sales by product and by variant show your cafe items and each modifier. SKUs on modifiers are used. | Reports show each sale as a custom item by its title. Nothing is attributed to a product or SKU. |
| Cost of goods and margin | Works. Each component carries its own cost. | Not available. Custom sales have no cost. |
| Loyalty and rewards apps | Work as they do for any product sale: the app sees the products sold. | Apps that look at products sold can't see cafe items. Apps that only use the order total still work. |
| Returns and exchanges | Standard. Refunds can restock the products. | Refunds work, but there is nothing to restock. |
| Customer receipt | Longer: the product and each charged modifier print as separate lines. | Shorter: one line per item, with the modifier details beneath it. |
| Speed at the counter | A moment slower. Shopify's bundle pricing runs after each add. | A little quicker. The line is added fully priced in one step. |
| Order tickets and kitchen screens | Same. | Same. |
| Editing items in the cart | With the **Edit item** button of either tile. | With the **Edit item** button of either tile. The item stays a single custom sale line. |
## What's the same in both
Both tiles share every screen and setting, so switching between them doesn't change how staff work:
- Your cafe collections, product search, modifier sets and required modifiers.
- Customer name and notes on each item.
- [Order types](/docs/getting-started/order-types/) and [cafe discounts](/docs/getting-started/cafe-discounts/).
- Tables, open tabs and the [Send to prep](/docs/shopify-pos-setup/send-to-prep/) tile.
- Order tickets to Epson and Star printers, Shopify POS printers and Fresh KDS, routed by prep area.
- [Translations](/docs/shopify-pos-setup/translations/), [general settings](/docs/getting-started/general-settings/) and [refreshing the menu](/docs/shopify-pos-setup/refreshing-pos-cafe/).
## Things to know before you choose
**Pick one tile per cafe.** You can add both tiles to the Home screen, but mixing them splits your reporting: some sales attach to products and others don't. Either tile can edit any POS Cafe item in the cart, whichever tile added it, but staff would see two **Edit item** buttons. See [Editing Items in the Cart](/docs/shopify-pos-setup/editing-items-in-the-cart/).
**Switching later is easy.** Both tiles read the same menu and settings. To switch, add the other tile to the Home screen and remove the first one. Sales already made keep the form they were recorded in.
**Modifier SKUs only count with POS Cafe.** SKUs you record on modifier options (see [App Overview](/docs/getting-started/app-overview/)) appear in reports and inventory only when the real products reach the cart.
**Inventory is optional with POS Cafe.** Using the POS Cafe tile doesn't force you to track stock. Most cafes leave inventory tracking off for options like milks and syrups and turn it on only for items they count, such as bottled drinks or pastries.
**Receipt length.** With POS Cafe, Shopify prints the product and each charged modifier as its own receipt line, so a drink with three extras takes four lines. Shopify no longer lets merchants customise the receipt layout, so this can't be changed in Shopify POS.
---
# Editing Items in the Cart
Section: Shopify POS Setup
URL: https://poscafe.app/docs/shopify-pos-setup/editing-items-in-the-cart/
Give POS Cafe permission to edit cart items, then edit them directly in Shopify POS.
To set up the ability to edit items in the cart, Shopify requires you to manually give the POS Cafe extension permission.
## Give POS Cafe permission to edit cart items
1. **Open the POS app settings.** In your Shopify admin area, go to **Sales Channels → Point of Sale → Settings** in the left column, then choose **POS app** in the main window of the screen.
2. **Enable POS Cafe.** On the next screen, click the app icon at the top, then enable POS Cafe.
3. **Resync your data.** You may need to resync your data in the **Shopify POS** app by tapping the connectivity icon, then **Store data**, and **Refresh all**.
## Edit an item in the cart
1. **Tap the item.** Tap on a POS Cafe item that has been added to the cart to open its information pop-up.
2. **Tap Edit item.** A menu will slide up from beneath the cart. Tap **Edit item**.
3. **Update the item.** Edit your item as desired and tap **Update Item**, or tap **Cancel** to leave it unchanged.

:::note
Either POS Cafe tile can edit any POS Cafe item in the cart, whichever tile added it. If you have both the **POS Cafe** and **POS Cafe - Lite** tiles installed, you'll see an **Edit item** button for each one, and either works. The item keeps the form it was added in: an item added with **POS Cafe - Lite** stays a single custom sale line.
:::
---
# Open Orders
Section: Shopify POS Setup
URL: https://poscafe.app/docs/shopify-pos-setup/open-orders/
Take orders before payment with Shopify POS draft orders, send each round to the kitchen, and check out when the customer is ready.
Open orders (also called open tabs or open cheques) let you take a customer's order, send it to the kitchen, and keep adding to it before they pay. POS Cafe uses Shopify POS **draft orders** for this: save the cart as a draft, load it again to add the next round, then check out when the customer is ready.
## What you need
- **The Save as draft tile** on the Shopify POS Home screen. Add it with **Add tile → Action → Save as draft**, then tap **Save**.
- **Somewhere for tickets to go.** Epson and Star receipt printers and Fresh KDS screens receive the items each time a draft is saved or updated. A [Shopify POS printer](/docs/order-tickets-kds/shopify-pos-printer/) and Shopify's built-in receipts don't print when a draft is saved; to print a round on those before payment, use the [Send to prep](/docs/shopify-pos-setup/send-to-prep/) tile.
- **Tables (optional).** Set up dining areas and tables so staff can assign a table from the POS Cafe tile and every open tab is listed by table. See [Table Management: Getting Started](/docs/table-management/getting-started/).
## Start an open order
1. **Open the POS Cafe tile** and, if you use table management, tap **Assign** in the **Table** bar to choose the customer's table.
2. **Add the items** as usual.
3. **Tap Save as draft.** The items are sent to the printers and Fresh KDS screens for their prep areas. If the table's dining area has **Add tables to POS draft orders** turned on, the table name is added to the order so it's easy to find in the drafts list. See [POS Draft Orders](/docs/table-management/pos-draft-orders/).
## Add to an open order
1. **Tap Load draft** and choose the order.
2. **Add the next round** with the POS Cafe tile.
3. **Tap Update draft.** Only the new items are sent to your printers and screens.
:::tip
With the **Send to prep** tile you can send a round to the kitchen without saving the draft first, and send again later for only the new items. See [Send to Prep](/docs/shopify-pos-setup/send-to-prep/).
:::
## Check out an open order
1. **Tap Load draft** and choose the order.
2. **Tap Checkout** and take payment as normal. To split the bill, use Shopify's [split payment](https://help.shopify.com/en/manual/sell-in-person/shopify-pos/payment-management/multiple-partial-payments) at checkout.
Items already sent to the kitchen aren't printed again at checkout.
## See every open tab
The [Open Tabs](/docs/table-management/open-tabs/) page in POS Cafe lists the open draft orders at a location, grouped by table.
:::note[If you don't use table management]
You can still tell drafts apart by adding a customer to the cart. Create a customer for each table (first name **Table**, last name the table number) and tap **Add customer** before saving the draft. Table management is the better option: it records the table on the order, lists tabs by table, and gives each table a QR ordering link.
:::
---
# Refreshing POS Cafe
Section: Shopify POS Setup
URL: https://poscafe.app/docs/shopify-pos-setup/refreshing-pos-cafe/
Refresh POS Cafe to sync the latest menu and settings changes to your device.
To open quickly, the POS Cafe tile keeps a copy of your menu data on each POS device. Once that copy is more than 4 hours old, the tile refreshes it in the background and your changes appear the next time the tile is opened. If you update your cafe collections, items, modifiers or cafe discounts in the Shopify admin and want to see the changes immediately on your POS device, refresh POS Cafe manually.
Additionally, we recommend re-syncing your entire Shopify POS app whenever significant changes are made to your Shopify products.
## How to refresh POS Cafe
1. **Tap on the POS Cafe tile** (or the **POS Cafe - Lite** tile).
2. **Tap on Settings** on the **Cafe Collections** screen.
3. **Tap Refresh.** In the **Actions** section, tap **Refresh** next to **Refresh Data** (Reload products and clear cache). A **Refreshed** message confirms it worked, and the tile closes. If you see "Couldn't refresh the menu. Still using the menu saved on this device.", check the device's internet connection and try again.

## How to refresh Shopify POS
1. **Tap on the Connectivity icon.**

2. **Tap on Store Data.**

3. **Tap on Refresh All.**

4. **Wait for the sync to complete.** Your Shopify POS app is now fully up to date with the latest changes from your Shopify admin.
---
# Registering POS Devices
Section: Shopify POS Setup
URL: https://poscafe.app/docs/shopify-pos-setup/registering-pos-devices/
Register your Shopify POS devices with POS Cafe so a receipt printer can print orders from specific POS devices only.
Registering a POS device links that Shopify POS device to its location in POS Cafe. Registered devices are listed on the location's **POS Devices** page, and they are the devices you can choose when you set a receipt printer to **Print from specific POS devices only (advanced)**. You only need to register devices if you want a printer to print orders from particular POS devices rather than from every device at the location.
## Why register a POS device?
By default, each receipt printer receives orders from all POS devices at its location (**Print from all POS devices (recommended)**). This advanced option is for venues with more than one prep area of the same name at one location. In that case you can tell each printer which POS devices it should print for. A printer can only be limited to devices that have been registered.
:::note
A printer set to specific POS devices still respects prep area filtering: it only prints items from the prep areas assigned to it.
:::
## Register a device in Shopify POS
Register each device from the POS Cafe tile on that device, while it is logged in to the location it belongs to. The device is registered to the location of the current Shopify POS session.
1. **Open the tile.** On the Shopify POS Home screen, tap the **POS Cafe** (or **POS Cafe - Lite**) tile.
2. **Open Settings.** On the **Cafe Collections** screen, tap **Settings**.
3. **Tap Register.** In the **Actions** section, find **Register Device** (Link this device to the current location) and tap **Register**.
The button shows a loading state while POS Cafe registers the device. When it finishes, you'll see **Device registered successfully**.
POS Cafe records the device's name (as set in Shopify POS), its device ID, and whether it is a tablet. Registering the same device again, with the same name, updates its existing entry rather than adding a duplicate.
:::tip
The **Device Info** section at the bottom of the tile's **Settings** screen shows this device's **Device Name** and **Device ID**. Use them to match the device with the list on the **POS Devices** page.
:::
The **Register Device** text and the **Register** button can be renamed or translated in **Settings → POS Extension Translations**. See [POS Cafe Tile Translations](/docs/shopify-pos-setup/translations/).
## View and manage registered devices
1. In your Shopify admin, go to **Apps → POS Cafe → Locations** and choose the location.
2. In the **Devices** section, click **Registered Devices** (View and manage the POS devices registered to this location).
The **POS Devices** page lists the POS devices registered to this location:
| Column | What it shows |
| :-- | :-- |
| **Device** | The device name from Shopify POS. |
| **Device ID** | The device's Shopify POS device ID. |
| **Type** | **Tablet** or **Desktop**. |
| **Label** | An optional label you can type in (**Enter label**) to make the device easier to recognise. |
| **Actions** | A delete button to remove the device from this location. |
After you add a label or remove a device, click **Save** in the save bar at the top of the page. You'll see **Devices updated successfully**.
If no devices are registered yet, the page shows **No Registered Devices**. Devices appear here once they are registered from the POS app.
Click **View Printer Devices** to go straight to the location's **Receipt Printers** page.
## Print from specific POS devices
Once your devices are registered, you can limit a receipt printer to orders from particular POS devices. For printer setup itself, see [Epson Server Direct Print](/docs/order-tickets-kds/epson-server-direct-print/).
1. In your Shopify admin, go to **Apps → POS Cafe → Locations**, choose the location, and click **Receipt Printers**.
2. Click **Add printer**, or click **Edit** in an existing printer's details or its **…** menu.
3. Under **Device Source**, choose **Print from specific POS devices only (advanced)**. (Device Source is only shown for Epson and Star printers.)
4. Under **Select devices:**, tick each device this printer should print for. Devices with a label show it in brackets after the device name. The list also includes **POSCafe Online (Web)**.
5. Click **Add printer** (for a new printer) or **Save**. The change is saved straight away; there's no save bar on the Receipt printers page.
To go back to printing from every device, choose **Print from all POS devices (recommended)**. If you choose specific devices but don't tick any, the printer is saved as printing from all POS devices.
## Troubleshooting
### A device is missing from the Select devices list
Only registered devices appear. If none are registered for the location, the printer window shows **No registered POS devices found**. Register the device from the POS Cafe tile (see above), making sure the device is logged in to the right location, then reopen the printer.
### Registering shows "Failed to get location ID"
POS Cafe couldn't read the current location from Shopify POS, so the device wasn't registered. Check the device is logged in to a location and try again.
### Registering shows "Failed to register device"
The message ends with the reason registration failed. The device wasn't registered, so try **Register** again.
### A device is registered to the wrong location
Devices are registered to the location of the current Shopify POS session. Switch the device to the correct location in Shopify POS and tap **Register** again. Then remove the old entry from the other location's **POS Devices** page and click **Save**.
### Send to prep says a printer or KDS setting needs fixing
The **Send to prep** tile can't yet send to a receipt printer that uses **Print from specific POS devices only (advanced)**. If any active printer at the location uses this setting, Send to prep shows: "A printer or KDS setting for this location needs fixing in POS Cafe before Send to prep can use it." Nothing is sent from the tile, but the items still print when the order is saved or paid. To use Send to prep at this location, change the printer's **Device Source** to **Print from all POS devices (recommended)**. See [Send to Prep](/docs/shopify-pos-setup/send-to-prep/).
---
# Send to Prep
Section: Shopify POS Setup
URL: https://poscafe.app/docs/shopify-pos-setup/send-to-prep/
Use the Send to prep tile in Shopify POS to send items to your receipt printers and Fresh KDS before the customer pays, and re-send completed orders.
The POS Cafe **Send to prep** tile in Shopify POS sends the items in the current cart to your receipt printers and Fresh KDS screens before the customer pays. It's designed for table service and open tabs: send the first round now, keep adding to the cart, and tap again to send only the new items.
## What Send to prep sends
When you tap **Send to prep**, POS Cafe sends each item to the printers and Fresh KDS screens set up for its prep area at the current location, using the same prep areas as your other order tickets.
| Item in the cart | Sent? |
| :-- | :-- |
| POS Cafe items added with the **POS Cafe** tile | Yes, to the printers and screens for the item's prep area. |
| Shopify products set up with [Native Product Routing](/docs/order-tickets-kds/native-product-routing/) | Yes, to the printers and screens for the product's prep area. |
| POS Cafe items without a prep area | Not on the tap. They print on your usual printers when the order is saved or paid. |
| Other custom sales and Shopify products | No. They stay in the cart but aren't sent. |
Each ticket includes the table assigned to the cart (if any) and the cart note, so the preparation team knows where the order is going.
## Before you start
Send to prep uses your existing printer and Fresh KDS setup:
- Receipt printers: [Epson Server Direct Print](/docs/order-tickets-kds/epson-server-direct-print/), [Star CloudPRNT](/docs/order-tickets-kds/star-cloudprnt/) or a [Shopify POS Printer](/docs/order-tickets-kds/shopify-pos-printer/).
- Kitchen screens: [Fresh KDS](/docs/order-tickets-kds/fresh-kds/).
Send to prep is available at a location that has at least one of these:
- an active Epson or Star printer that has connected to the POS Cafe print server in the last 3 days;
- an active Shopify POS printer;
- a Fresh KDS screen with a prep area selected for this location.
At any other location the tile shows **Not set up at this location · tap to check again**, and kitchen tickets print as usual when the order is saved or paid.
:::caution[Device Source]
Every active printer at the location needs its **Device Source** set to **Print from all POS devices (recommended)**. A printer set to **Print from specific POS devices only (advanced)** stops Send to prep at that location (see [Troubleshooting](#troubleshooting-send-to-prep-messages)).
:::
## Add the Send to prep tile
Add the tile to the Shopify POS Home screen the same way as the other POS Cafe tiles:
1. **Add a tile.** In Shopify POS, tap **Add tile** on the Home screen.
2. **Tap App**, then choose **POS Cafe**.
3. **Choose Send to prep** and tap **Add**.
4. **Tap Save.**
See [Using the App in Shopify POS](/docs/shopify-pos-setup/using-the-app-in-shopify-pos/) for screenshots of each step.
## Send items to prep
1. **Build the cart.** Add items with the **POS Cafe** tile as usual. If you use table service, assign the table and add any cart note first, because they're included on the ticket.
2. **Tap Send to prep.** You'll see **Sent to prep** straight away. There's nothing to wait for: you can switch to another cart or check out at once.
3. **Glance at the tile.** Its subtitle shows the cart reference followed by **Sending…**, then **Sent**, for example **Cart #1A2B3C · Sent**.
POS Cafe keeps the send on the POS device and delivers it in the background, retrying automatically if the connection drops for a moment. Each ticket shows the table (if assigned), a short cart reference such as **Cart #1A2B3C** and a ticket number that goes up with each send from the same cart. On Fresh KDS, the ticket name appears as the order name and the cart note appears as the order's special instructions.
If the location has a [Shopify POS printer](/docs/order-tickets-kds/shopify-pos-printer/), this POS device prints its own copy on its connected printer, usually about a second after the tap. If the copy can't print, the tile shows **Sent · not printed on this device** and the ticket is listed on the tile so you can print it (see [Tickets waiting on the Send to prep tile](/docs/order-tickets-kds/shopify-pos-printer/#tickets-waiting-on-the-send-to-prep-tile)).
## Send more items later
Tap **Send to prep** again whenever you add to the cart. POS Cafe only sends what hasn't been sent yet:
- **New items** are sent.
- **Increased quantities** send only the extra quantity. For example, if 2 flat whites were sent and the cart now has 3, one flat white is sent.
- **Changed items**, for example an item whose modifiers changed after it was sent, are sent again in full.
- **Nothing new?** You'll still see **Sent to prep**, and nothing prints again.
This works well with [open tabs](/docs/table-management/open-tabs/): send each round as it's ordered, then check out when the customer is ready to pay.
## Removing items after they've been sent
Send to prep never cancels a ticket that has already been sent. If you remove or reduce an item, or change the cart note, after sending, the tile's subtitle shows a short warning so you can tell the preparation team:
| Tile shows | What happened |
| :-- | :-- |
| **Removed item not cancelled – tell the kitchen** | A sent item was removed from the cart. |
| **Reduced qty not cancelled – tell the kitchen** | A sent quantity was reduced. |
| **Removals not cancelled – tell the kitchen** | Items were removed and quantities reduced. |
| **Note change not sent – tell the kitchen** | The cart note changed. Earlier tickets keep the original note. |
## Paused printers
If you've [paused a printer](/docs/order-tickets-kds/receipt-printers-page/#pause-and-resume-a-printer), Send to prep skips it and the rest of the cart still goes to your other printers and screens. Items that only the paused printer prints go out on a later tap after you resume it, or print at checkout.
If every item in the send is for a paused printer, nothing is sent. The tile shows **Not sent · tap to send again**, and the send is listed on the **Send to prep** screen with the reason "The printer for these items is paused, so nothing was sent. Resume it in POS Cafe to send them."
## If a send isn't delivered
Sends are retried automatically in the background. If one still hasn't been delivered, the tile tells you:
- With the cart open: **Not sent · tap to send again**, or **Sent · 1 station still busy · tap to send rest** when one printer or screen hasn't taken it yet.
- With an empty cart: **1 send not delivered · tap to send**.
- When the POS device has no internet connection: **Offline · 1 waiting**. Waiting sends go out when the connection returns.
Tap the tile to open the **Send to prep** screen. Under **Sends not delivered**, each entry shows when it was tapped, how many items it has and why it wasn't delivered. Tap **Send now** to send it, or, once you've checked the preparation team has the items, tap **It's with the prep team — dismiss** and then **Confirm: dismiss**.
:::caution[Sends older than 30 minutes]
A send that still hasn't been delivered 30 minutes after the tap isn't sent automatically, so a late ticket doesn't surprise the kitchen. It stays listed with "Not sent automatically: it wasn't delivered within 30 minutes of the tap." Check with the preparation team, then tap **Send now** or dismiss it.
:::
## Carts that can't be sent
Some carts can't be sent with a tap. You'll see **Can't send this cart – prints when paid**, and the kitchen tickets print as usual when the order is saved or paid. This happens when the cart has a gift card or a bundle, or more than 50 lines.
If POS Cafe can't find a cart's earlier send history, it sends the whole cart again and shows **Cart history lost – all items sent again**. The preparation team may receive items they've already made.
## What happens at checkout
You can check out straight after tapping **Send to prep**. When a cart that used Send to prep is checked out (or saved again as an open tab), POS Cafe prints only the items that haven't already been sent. Items already sent aren't printed again.
POS Cafe never holds a ticket back. If it can't confirm what was already sent, for example because a send was still on its way when the order was paid, it prints those items anyway. A repeated ticket is better than a missed one, so in rare cases the preparation team may receive a duplicate. Orders that never used Send to prep print exactly as before.
If the tile shows **Prints automatically when saved or paid**, this cart has already been checked out or handed over to normal printing, and its remaining tickets print through your usual printers and Fresh KDS when the order is saved or paid.
At locations with a Shopify POS printer, staff can tap **Done** on the Order Complete screen straight away: the Send to prep tile prints the ticket after checkout. See [Tap Done straight away](/docs/order-tickets-kds/shopify-pos-printer/#tap-done-straight-away).
## Re-send a completed order
You can send a completed order to prep again from Shopify POS:
| Where | Button | What it does |
| :-- | :-- | :-- |
| The order's details in Shopify POS | **Re-send to prep** | Sends the whole order again to every printer and Fresh KDS screen at the location, including this device's Shopify POS printer. You'll see **Re-sent to prep**. |
| The **Order Complete** screen, at locations with a [Shopify POS printer](/docs/order-tickets-kds/shopify-pos-printer/) | **Re-send all to prep** | Sends every item again, for example if the automatic ticket after checkout is missing. You'll see "Re-sent all items to 2 prep destinations." |
A re-send prints the whole order again, so the preparation team gets a repeat of anything already made. If a printer misses a re-send, you'll see **Re-sent – 1 printer(s) missed it; re-send repeats all**. The order must belong to the POS device's current location. Where Send to prep isn't set up, the order's details show a disabled button: **Send to prep isn't set up here**.
## Send to prep tile states
With items in the cart, the tile's subtitle starts with the cart reference, for example **Cart #1A2B3C · Sent**.
| Tile shows | What it means |
| :-- | :-- |
| **Add items to the cart** | The cart is empty and nothing is waiting. |
| **Add items to the cart · tap for printer setup** | The cart is empty and this location's Shopify POS printer is paused. Tap to open the **Send to prep** screen and check printer setup. |
| **Not set up at this location · tap to check again** | This location has nothing Send to prep can send to (see [Before you start](#before-you-start)). Tap to check again after you set up a printer or screen. |
| **Unavailable at this location** | Send to prep can't be used at the current POS location. |
| **Tap to send new items** | Ready to send. |
| **Sending…** then **Sent** | The send is on its way, then delivered. |
| **No items assigned to a prep area** | None of the items in the cart has a prep area. Give them a prep area in POS Cafe, or set Shopify products up with [Native Product Routing](/docs/order-tickets-kds/native-product-routing/). |
| **Not sent · tap to send again** | The last send wasn't delivered. Tap to send it again; items already sent aren't sent twice. |
| **Sent · not printed on this device** | The send was delivered, but this device's Shopify POS copy didn't print. It's listed on the tile so you can print it. |
| **Sent · 1 station still busy · tap to send rest** | One printer or screen hasn't taken the send yet. Tap to send the rest. |
| **Earlier ticket unconfirmed – prints again later** | POS Cafe couldn't confirm an earlier ticket, so those items will print again later rather than risk being missed. |
| **POS reprint limit – check kitchen got ticket** | This device's copy reached its print limit. Check the preparation team has the ticket. |
| **Removed item not cancelled – tell the kitchen** (and the other warnings) | See [Removing items after they've been sent](#removing-items-after-theyve-been-sent). |
| **Prints automatically when saved or paid** | This cart was already checked out or handed over to normal printing. Its tickets print when the order is saved or paid. |
| **Send to prep off – prints when saved or paid** | Send to prep isn't available on this device right now. Tickets print when the order is saved or paid. |
| **1 send not delivered · tap to send** | With an empty cart: a send from an earlier cart wasn't delivered. Tap to review it. |
| **Offline · 1 waiting** | The POS device has no internet connection. Waiting sends and tickets go out when it reconnects. |
| **1 ticket waiting for printer**, **1 ticket not printed · tap to print** | Shopify POS printer tickets waiting on the tile. See [Tickets waiting on the Send to prep tile](/docs/order-tickets-kds/shopify-pos-printer/#tickets-waiting-on-the-send-to-prep-tile). |
## Check printer setup again
POS devices check the location's printer setup regularly: within about an hour where Send to prep is already available, and within 4 hours where it isn't set up yet. After you add a printer, add or resume a [Shopify POS printer](/docs/order-tickets-kds/shopify-pos-printer/), or set up a Fresh KDS screen, you can update a device straight away:
- **Tap the tile** when it shows **Not set up at this location · tap to check again**; or
- **Open the Send to prep screen** and tap **Check printer setup again**. The screen opens when you tap the tile with an empty cart at a location without an active Shopify POS printer, or when something is listed on it; or
- **Fully close and reopen Shopify POS**. POS Cafe checks the printer setup again when POS opens. At a location with an active Shopify POS printer and nothing waiting, this is the way to check again.
You'll see **Printer setup updated.**, **Setup updated – still not set up here**, **No change – still not set up here** or **Couldn't check printer setup – try again**. Checking again never delays a send.
## The Send to prep screen
A normal send is one tap. The **Send to prep** screen opens only when you tap the tile and something needs your review. Depending on the situation, it offers:
| Button | What it does |
| :-- | :-- |
| **Send now** | Sends a send that wasn't delivered (see [If a send isn't delivered](#if-a-send-isnt-delivered)). Items already sent aren't sent twice. |
| **Print now** and **Print all** | Print Shopify POS printer tickets waiting on the tile. See [Tickets waiting on the Send to prep tile](/docs/order-tickets-kds/shopify-pos-printer/#tickets-waiting-on-the-send-to-prep-tile). |
| **Use** [printer] and **Refresh connected printers** | Chooses which connected printer this POS device uses for Shopify POS printing. The device remembers the choice. |
| **It's with the prep team — dismiss**, **It printed — dismiss** | Removes an entry once you've checked the preparation team has the items. Tap **Confirm: dismiss** to finish. |
| **Check printer setup again** | Checks this location's printer setup now (see above). |
| **Done** | Closes the screen. |
## Troubleshooting Send to prep messages
When a send isn't delivered, the **Send to prep** screen lists it with one of these reasons:
| Reason | What to do |
| :-- | :-- |
| "The printer for these items is paused, so nothing was sent. Resume it in POS Cafe to send them." | Resume the printer on the [Receipt Printers Page](/docs/order-tickets-kds/receipt-printers-page/), then tap **Send now**. |
| "A printer or KDS setting for this location needs fixing in POS Cafe before Send to prep can use it." | Usually a printer at this location uses **Print from specific POS devices only (advanced)**. Change its **Device Source** to **Print from all POS devices (recommended)**. If no printer uses it, contact POS Cafe support to check the Fresh KDS setup. |
| "An item's prep area has no printer or KDS. Assign one in POS Cafe." | Add the prep area to a printer's **Prep Areas** or a Fresh KDS screen. |
| "Product prep-area routing is not turned on, or is still updating, for this shop." | The cart only has Shopify products that aren't POS Cafe items. Add POS Cafe items, or set the products up with [Native Product Routing](/docs/order-tickets-kds/native-product-routing/). |
| "POS Cafe couldn't read the printer or KDS setup for this location. Check the printers page in POS Cafe." | Check the location has at least one printer or Fresh KDS screen, and that every printer has at least one prep area. |
| "This POS location is not active or does not belong to the current shop." | Check the POS device is signed in to the right location, then try again. |
| "Not sent automatically: it wasn't delivered within 30 minutes of the tap." | Check with the preparation team, then tap **Send now** or dismiss it. |
If you see **Sends when online – 30+ min old needs a tap**, the POS device is offline. Waiting sends go out when it reconnects; any older than 30 minutes need you to tap **Send now**.
Nothing is lost when a send isn't delivered: tap **Send now**, and anything that still isn't sent prints when the order is saved or paid.
---
# POS Cafe Tile Translations
Section: Shopify POS Setup
URL: https://poscafe.app/docs/shopify-pos-setup/translations/
Translate or reword any of the text shown in the POS Cafe tile, with no code required.
Every label in the POS Cafe tile can be translated into your language or reworded to match your business's own terms, with no code required. The same translations apply to both the **POS Cafe** and **POS Cafe - Lite** tiles, so a custom tile title replaces the title on both.
## Open the translation settings
1. In your Shopify admin, open **Apps → POS Cafe**.
2. Go to **Settings**.
3. In the **POS Extension** section, select **POS Extension Translations**.
The **POS extension translations** page lists every piece of text the POS Cafe tile displays. Use the fields to translate the tile into your language, or to change the wording to suit your business.
:::note
**Leave a field blank to keep the default.** Any field you don't fill in falls back to the app's built-in English text, shown under each field as **English default**.
:::
## Change a piece of text
1. Find the field you want to change. Use the **Search POS translations...** box to jump straight to it; you can search by key, English default or current value.
2. Enter your replacement wording.
3. Click **Save**.
## Find untranslated text
Turn on **Show only values using defaults** to list every field that still uses the default, so you can work through them. The badge at the top shows how many fields are **using defaults**, and each of those fields is marked **Default**.
## Apply your changes
Once you've saved, refresh the POS Cafe tile on your device to pull in the new text.
*The tile now shows your custom text.*
:::caution
**Changed the tile title or subtitle?** Those need a full hard-refresh of the Shopify POS app. See the [Refreshing POS Cafe](/docs/shopify-pos-setup/refreshing-pos-cafe/) guide for the steps.
:::
---
# Online Ordering: Getting Started
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/getting-started/
A fast, branded online ordering menu for your store, with live prices, modifiers, pickup and checkout on any device.
POS Cafe Online Ordering adds a fast, branded ordering menu to your online store. Customers browse your live menu, customise items with modifiers, schedule pickup, and check out, all in your store's currency, on any device.
*The customer-facing online ordering menu.*
## What you can do
- Show a **live, market-correct menu** with up-to-date prices and availability.
- Let customers **customise items** with sizes, milk, syrups and other modifiers.
- Offer **pickup now or scheduled for later**, with your own prep time and time slots.
- Run **multiple locations**, each with its own menu, hours and stock.
- Generate **table QR codes** that deep-link customers straight to the right location and table.
- **Match your brand** with colours, layout, corner radius and density, with no code required.
## How it fits together
There are two halves to the extension, and it helps to keep them straight:
| Where | What it controls | Examples |
| :-- | :-- | :-- |
| Admin (your POS Cafe app) | Your *data* and ordering rules | Locations, menus, products, modifiers, hours, prep time, translations |
| Theme editor (the storefront block) | How the menu *looks* on your store | Colours, layout, content width, navigation style, density |
:::note
**Rule of thumb:** if it's a *price, item, rule or hour*, you set it in Admin. If it's *colour, spacing or layout*, you set it in the theme editor.
:::
*Admin holds the data; the theme block presents it.*
## Before you start
- You have the POS Cafe app installed and at least one **location** with an active POS Cafe licence. Only licensed locations are published to the online menu.
- You can edit your online store's theme (to add the ordering block to a page).
- The Storefront API key that powers live pricing is created automatically when you install the app, so there's nothing to connect. You can check it on the **Online ordering connection** card in **Settings → General Online Ordering Settings**.
---
# Installation & Connecting Your Store
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/installation-and-connecting-your-store/
The one-time steps to get online ordering live: check the automatic connection, add the block, and set your page URL.
Getting POS Cafe online ordering live on your store takes three one-time steps: check the Storefront API connection (it's set up for you), add the ordering block to a page, and set your ordering page URL.
## 1. Check the Storefront API connection
The POS Cafe online ordering menu loads live prices and availability directly from your store through Shopify's Storefront API. This keeps customers on current, market-correct pricing (including the right currency for their region).
The secure key that powers this connection is **created automatically** when you install POS Cafe, so there's nothing to connect. To check it:
1. Go to **Settings → General Online Ordering Settings**.
2. Find the **Online ordering connection** card and check its badge.
| Badge | What it means |
| :-- | :-- |
| **Active** | The key is working. No action needed. |
| **Needs attention** | The connection isn't working. Select **Regenerate** to fix it. |
| **Not set up** | No key was found yet. Select **Regenerate** to set it up now. |
| **Unknown** | The status couldn't be checked. |
Only regenerate the key (**Regenerate key** when the card is active) if online ordering isn't loading the right prices.
:::note
If the automatic setup ever fails, POS Cafe shows an **Online ordering pricing setup needs attention** banner in the app with a **Try again** button. See [Pricing, Currency & Markets](/docs/online-ordering/pricing-currency-and-markets/) for how prices behave without the connection.
:::
## 2. Add the ordering block to a page
The storefront menu is delivered by the **"POS Cafe Online"** block, which you add in your theme editor. We recommend a dedicated page (for example, an "Order" page).
1. In Shopify admin, open **Online Store → Themes → Customize**.
2. Navigate to (or create) the page you want to use for ordering.
3. Choose **Add section / block** and select **POS Cafe Online**.
4. Save.
:::tip
The block hides your theme's own cart icon on this page by default so customers check out through the app cart (required for order details to apply). See [Theme Editor: Advanced](/docs/online-ordering/theme-editor-advanced/) if your cart icon still shows.
:::
## 3. Set your ordering page URL
Back in **Settings → General Online Ordering Settings**, paste the full URL of the page where you added the block into **Online ordering page URL**. This powers table QR codes that deep-link customers to the correct location and table.
:::caution
**Use the full URL,** starting with `https://`, for example `https://your-store.com/pages/order`. If it isn't a complete URL, the page won't save and QR codes won't generate.
:::
---
# General Online Ordering Settings
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/general-online-ordering-settings/
Store-wide settings that control scheduling, the cart, troubleshooting, menu publishing, live sold-out updates and the connection that powers your menu.
POS Cafe's store-wide online ordering settings control scheduling, the cart, the troubleshooting panel, menu publishing, live sold-out updates and the connection that powers your online ordering menu. Find them under **Settings → General Online Ordering Settings**.
## Online ordering page URL
The full URL of the page where you placed the ordering block. Used to build table QR codes that deep-link customers to the right location and table. Enter a complete URL starting with `https://`. A preview of the generated QR link ("Table QR codes will look like: ...") appears beneath the field. The page won't save if the URL isn't complete.
Learn more in [QR Codes & Table Ordering](/docs/online-ordering/qr-codes-and-table-ordering/).
## Time Slot Interval
The spacing between available pickup time slots when a customer schedules an order for later. Choose **10 minutes**, **15 minutes** or **30 minutes**.
## Prep Time (minutes)
The minimum preparation time added before the first available time slot, so customers can't pick a slot sooner than you can prepare the order.
## Show cart note field
When enabled, customers can add a note to their order from the cart (for example, "extra hot" or allergy notes).
## Show customer name field
When enabled, customers can add a customer name to individual items.
## Require table name / number
When enabled, customers must enter a table name or number before checkout. This is useful for dine-in / "For Here" service.
:::note
Time slot interval, prep time, cart note, customer name and the table-name requirement are the single source of truth for the storefront. The menu reads them directly, so changes apply without re-styling the theme.
:::
## Troubleshooting
**Show debug information on the ordering page** is off by default. When it's on, a diagnostics panel with technical details appears on your online ordering page, and anyone who visits the page can see it. Turn it on only when POS Cafe support asks you to, and turn it off again afterwards.
## Online ordering menu
The **Online ordering menu** card shows whether your menu is published to the storefront. Your menu is published automatically when you update locations, collections or settings. When it's published, the card shows when it was last published, how many locations have a menu, and how many collections it contains.
| Badge | What it means |
| :-- | :-- |
| **Published** | Your menu is live on the storefront. |
| **No Online Store menu** | The menu was published but has no licensed locations, or no collections available to the Online Store. |
| **Not published** | Your online ordering menu hasn't been published yet. |
| **Unknown** | The status couldn't be checked. |
Select **Re-publish menu** if the storefront looks out of date, or **Publish menu** if it hasn't been published yet. Only locations with an active POS Cafe licence are included in the published menu.
## Live menu data and sold-out updates
The **Live menu data and sold-out updates** card is an optional setting, off by default. When it's on, POS Cafe keeps a live list of the items sold out at each location, and online ordering and Cloudshelf kiosks stop selling them until they're back in stock. The card shows an **On** or **Off** badge. See [Live Sold-Out Updates](/docs/online-ordering/live-sold-out-updates/) for how it works and which items count as sold out.
## Online ordering connection
The **Online ordering connection** card shows the status of the secure key that powers live, market-correct pricing. The key is set up automatically, so you only need to select **Regenerate** if the card shows **Needs attention** or **Not set up**, or if online ordering isn't loading the right prices. See [Installation & Connecting Your Store](/docs/online-ordering/installation-and-connecting-your-store/).
---
# Locations: Hours, Order Types & Pickup
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/locations-hours-order-types-and-pickup/
Set each location's ordering availability, order types, opening hours, and live stock display.
Each POS Cafe location has its own online ordering settings: whether ordering is on, which order types you accept, opening hours, and how stock is shown on the online ordering menu. Open a location from the **Locations** list to manage these.
:::note
Only locations with an active POS Cafe licence are published to the online ordering menu. The location page shows an **Active POS Cafe License** or **Inactive POS Cafe License** badge next to its name.
:::
## Online Ordering settings for a location
The **Online Ordering** section of the location page ("Control how this location accepts online orders") has three toggles:
| Setting | What it does |
| :-- | :-- |
| **Enable online ordering for this location** | When disabled, this location is completely hidden from the online ordering location picker. If you have several locations, customers can pick one (or scan a QR code for a specific location). |
| **Enable "order for later" (scheduling)** | Allows customers to schedule orders for a future date and time. When disabled, all orders are treated as immediate (ASAP). |
| **Show out of stock / sold out items** | When enabled, products with no inventory at this location still appear in the menu (customers see them as unavailable). When disabled, out-of-stock products are hidden from the catalogue. |
The scheduling and out-of-stock settings only apply when online ordering is enabled for the location. The section also shows an **Online ordering menu** row with the location's publish status (for example **Published**).
## Order types
Order types (For Here, To Go, Pickup, Drive Thru, Delivery and Curbside) are managed in the separate **Order Types** section of the location page, where you turn each type on or off for the location. When at least one order type is active, a **Set Default** link lets you choose the location's default order type. The online ordering menu respects each location's default order type. See [Order Types](/docs/getting-started/order-types/) for more on how order types work across POS Cafe.
### Asking for vehicle details
For online **Drive Thru** and **Curbside** orders, the POS Cafe online ordering menu can ask customers about their vehicle, so staff can find the right car. The **Ask for vehicle details** switch sits at the bottom of the location's **Order Types** section. It only appears while **Drive Thru** or **Curbside** is turned on for the location.
The switch is **on by default**, so customers see the vehicle fields at every location that offers Drive Thru or Curbside online. To stop asking, turn off **Ask for vehicle details** and click **Save** in the save bar at the top of the page.
When a customer chooses Drive Thru or Curbside in the POS Cafe cart, two optional fields appear below the date and time:
| Field | Example shown in the field | Maximum length |
| :-- | :-- | :-- |
| **Vehicle make and model (Optional)** | e.g. Toyota Corolla | 80 characters |
| **Vehicle colour (Optional)** | e.g. Blue | 40 characters |
*Captured September 2026.*
Customers can leave both fields blank and still check out. If a customer switches between Drive Thru and Curbside, what they typed is kept. If they switch to any other order type, the vehicle details are removed from the order.
Vehicle details only appear on Drive Thru and Curbside orders:
| Where | What staff see |
| :-- | :-- |
| Receipt printer tickets | A large, bold line with the colour and then the make and model, for example "Vehicle: Blue Toyota Corolla". |
| Fresh KDS | The vehicle make, model and colour on the order. See [Fresh KDS](/docs/order-tickets-kds/fresh-kds/). |
| Shopify order | The order's additional details, as **Vehicle Model** and **Vehicle Color**. |
:::note
- The switch only affects the POS Cafe online ordering menu. Orders from kiosk apps aren't affected by it: if a kiosk sends vehicle details with an order, they still reach your tickets and Fresh KDS.
- The vehicle fields don't appear when the Zapiet integration is on, because Zapiet handles the cart. See [Zapiet Pickup & Delivery](/docs/integrations/zapiet-pickup-and-delivery/).
- To reword or translate the field labels and examples, go to **Settings → Online Ordering → Online Ordering Translations**. See [Online Ordering Translations](/docs/online-ordering/translations/).
:::
## Store hours & date overrides
Open **Location Setup → Store Hours** on the location page to set weekly opening hours and add date overrides for holidays or special events (for example, closing early on a public holiday). A location's opening hours drive its **Open / Closed** status and the time slots offered for scheduled orders.
:::note
Hours are evaluated in the location's own time zone (set with **Location Timezone** under **Location Setup**), so "Open until 5:00 PM" always reflects local time, even for customers browsing from elsewhere.
:::
## Local pickup & live inventory
To show **live, per-location stock** (so a sold-out item at one cafe isn't shown as available at another), enable **local pickup** for the location under **Settings → Shipping and delivery → Local pickup** in Shopify. With local pickup on, the menu reads real-time availability per location.
If online ordering is on but local pickup is off, the location's Online Ordering section shows an **Enable local pickup for live stock levels** banner. Without local pickup, the menu relies on the optional live sold-out list, or on the sold-out items captured at the last publish. See [Live Sold-Out Updates](/docs/online-ordering/live-sold-out-updates/) for how the menu chooses between them.
## When changes go live
Saving location settings, store hours or the location menu re-publishes your online ordering menu automatically. If the menu can't be fully published, you'll see a message such as "Location updated, but menu data could not be fully published", so you can try again. See [Building Your Menu](/docs/online-ordering/building-your-menu/) for details.
---
# Building Your Menu
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/building-your-menu/
How collections, products, and modifier sets fit together to build your online menu, and how to make them available online.
Your POS Cafe online ordering menu is assembled from three building blocks: **collections** (the sections), **products** (the items), and **modifier sets** (the options customers choose). Here's how they fit together, and what's needed for them to appear online.
## Collections = menu sections
Each collection becomes a section on the menu (for example, "Coffee", "Tea", "Cafe Food"), shown as tabs at the top. The **order of your collections** is the order customers see, so arrange them the way you'd read a menu.
Each location uses your global menu by default. To give a location its own menu, open the location and go to **Location Setup → Location Menu**, then turn on the custom menu (the card reads "Using your global menu. Turn on to customise this location's menu.") and use **Add / Edit Collections**. The location shows a **Custom Menu Enabled** or **Using Global Menu** badge.
## Products = menu items
Products are the items in each collection. Their name, description, image and price all appear on the menu card. Prices and availability are shown live from your store.
## Modifier sets = customisation
Modifier sets are the choices a customer makes when adding an item, such as size, milk, syrups and strength. Assign modifier sets to your products and they appear in the product window when a customer taps an item.
*How modifiers look to a customer.*
## Making items available online
The online ordering menu only shows what's available on your Shopify **Online Store** sales channel:
- **Products:** open a collection from **Cafe Collections**, select the products, then choose **Online → Show in online store** (or **Hide from online store**) from the bulk actions.
- **Modifier sets:** open the modifier set and set its **Online Sales Channel** card to **Enabled**.
- **Collections:** a collection's products only appear online when the collection is available to the Online Store. If none are, the **Online ordering menu** card in **Settings → General Online Ordering Settings** shows **No Online Store menu**.
The **Show in online store** and **Hide from online store** actions need your sales channel to be set. Check the **Online Store Sales Channel** row in **Settings → Admin Settings**, and use **Re-detect channels** if it isn't set.
## When changes go live
When you save a change that affects the menu (reordering collections, editing products or modifiers, or updating location settings), the app re-publishes your menu to the storefront automatically. Collection, product and modifier edits publish a few moments later, and several quick edits are batched so they publish together.
:::tip
**Don't see a change yet?** Give it a moment for the automatic re-publish, then refresh the storefront page. You can also select **Re-publish menu** on the **Online ordering menu** card in **Settings → General Online Ordering Settings**. See [Troubleshooting & FAQ](/docs/online-ordering/troubleshooting-and-faq/) if it still doesn't appear.
:::
---
# Online Ordering Translations
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/translations/
Translate or reword the text in the POS Cafe online ordering menu for every language you sell in, with no code required.
The POS Cafe online ordering menu ships with English default wording, and you can translate or reword any of it (buttons, labels, prompts) for every language your store sells in, without touching code. Use it to translate the menu, or to change the wording to match your own business terms. Find it under **Settings → Online Ordering → Online Ordering Translations**.
## How it works
- Each piece of storefront text has a built-in **English default** shipped with the app.
- You only need to enter a value where you want to **override** the default.
- Anything you leave blank falls back to your store's **primary language** value, then to the English default. So you can change just the few phrases you care about.
- Blank values are flagged as **Missing**, and a count of missing translations appears at the top of the list.
The page lists every piece of text you can change, and every language set up in your store.
## Translating or rewording text
1. **Open the page.** Go to **Settings → Online Ordering → Online Ordering Translations**.
2. **Choose a language.** Your store's primary language is selected first. To reword the English text to match your business terms, choose English; to translate, choose another language.
3. **Find the text.** Text is grouped by where it appears (for example Cart, Product, Modifiers and Errors). Use **Search translations** to find a phrase, or tick **Show only missing translations** to focus on blanks.
4. **Enter your wording.** Type the new text for each item you want to change.
5. **Save.** Your changes publish to the storefront in that language.

*The translated cart title on the storefront.*
:::tip
Keep custom labels short so they fit buttons and chips on mobile. Check the storefront in each language after editing.
:::
## Restore defaults
**Restore defaults** fills in any missing text in your store's primary language with POS Cafe's default wording. Text you've already changed is kept.
---
# Theme Editor: Layout
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/theme-editor-layout/
Control the menu's structure and spacing: width, navigation, density, corner roundness, and the item pop-up image.
The **Layout** settings on the "POS Cafe Online" block control the structure and spacing of the POS Cafe online ordering menu: width, how the location header and navigation look, the product image in the item pop-up, density, and corner roundness. Open them in **Online Store → Themes → Customize**.
## Content width
Controls how wide the menu is on large screens:
- **Full width:** spans the available space.
- **Centered:** a comfortable centred column (default).
- **Custom max width:** set your own maximum.
When you choose **Custom max width**, a **Custom max width** slider appears (960 to 1800px, default 1320px). It only shows for the custom option.
## Break out of theme container
Off by default. Turn this on to stretch the ordering app to the full page width even when your theme's page template is narrow or centred. Use it if the menu appears squeezed or pushed to one side.
## Show location details
Toggles the location header (name, address and opening hours) at the top of the menu. On multi-location stores, a compact "Change location" link is kept either way so customers can still switch.
## Product image in item pop-up
Controls how the product photo appears when a customer taps an item to customise it:
- **Small thumbnail** (default): a small square photo beside the product name. The pop-up is more compact and the options start higher up, which suits phones and longer option lists.
- **Large banner:** a wide photo across the top of the pop-up.
- **Hidden:** no photo. The pop-up opens straight to the product name and options.
Products without a photo show no image in any of these styles.
## Show section background
This toggle switches between two looks:
- **On:** the whole menu sits inside a contained, rounded **section panel**. You can colour it with **Section background color** (default #F4F4F5, a light grey), which appears just below this toggle. Best with a Centered or Custom content width.
- **Off:** the menu sits directly on the page, and the collection tabs become their own **nav card** for definition. In this layout you can tint that card with **Navbar background**, set under **Element Colors** (see [Colors & Theming](/docs/online-ordering/colors-and-theming/)).
*The two layout styles.*
## Menu navigation style
Choose how the collection tabs look:
- **Pills:** rounded, filled active tab (default).
- **Underline:** an underline under the active tab.
- **Plain text:** minimal text links.
- **Buttons:** bordered button-style tabs.
*Navigation style options.*
## Content density
Sets the spacing between products and menu sections (and the nav card spacing): **Compact**, **Comfortable** (default), or **Spacious**. Compact fits more on screen; Spacious gives a roomier feel.
*Density options.*
## Corner radius
The roundness of cards, buttons and inputs: **Sharp**, **Small**, **Default**, **Rounded**, or **Extra rounded**. This applies consistently across the menu.
---
# Colors & Theming
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/colors-and-theming/
Match the ordering menu to your brand from the theme editor with a layered colour system.
You can match the POS Cafe online ordering menu to your brand entirely from the theme editor, with no code. This page explains how the colour system is layered so you can get predictable results and understand why some swatches are left blank.
## Two tiers of colour
The colour settings come in two layers, and they work together:
1. **Base colours:** the core palette. These have real default values and define most of the look.
2. **Element Colors:** optional per-element overrides. These are blank by default and *inherit* from the base colours until you set them.
## Base colours
Found under the **Colors** heading. These drive the overall palette:
| Setting | What it affects | Default |
| :-- | :-- | :-- |
| Primary / accent color | Buttons, highlights, active states (e.g. the selected collection tab) | `#1F2937` |
| Button text color | Text and icons on top of the primary colour (e.g. button labels) | `#FFFFFF` |
| Surface color | The surface behind the nav, cart and inputs | `#FFFFFF` |
| Text color | Body text | `#1F2937` |
| Border / divider color | Card, divider and chip borders | `#E5E7EB` |
:::tip
Keep strong contrast between text and its background (aim for at least **4.5:1**) so the menu stays readable and meets accessibility standards.
:::
## Element Colors (overrides)
Found under the **Element Colors** heading. These let you fine-tune individual elements. They're intentionally left **blank**, which the theme editor shows as an empty swatch labelled **Select**.
:::note
**Blank does not mean see-through.** It means *"no override set, so use the sensible default."* A blank element still renders a real colour, inherited from your base colours. You only set one of these when you want that element to differ from the default.
:::
Here's what each one falls back to when left blank:
| Element setting | When blank, it matches... |
| :-- | :-- |
| Card background | The page background |
| Card border | The global **Border / divider color** |
| Navbar background | The product cards. Only shown, and only used, when **Show section background** is off. |
| Menu link color | The **Text color** (or the muted text colour for the **Plain text** navigation style). Sets the colour of unselected collection links. |
| Cart panel background | The page background |
| Cart button background | The product cards |
| Cart button border | The global **Border / divider color** |
## Why blanks are powerful: the cascade
Leaving an Element Color blank means it **follows** your base colours. Change a base colour (say the **Border / divider color**) and every element left blank updates to match automatically.
The moment you put a colour into an Element Color, that element is **pinned** and stops following the base colours. So set element overrides only when you specifically want an element to stand apart.
:::tip
**Recommended:** set your *base colours* first and leave the Element Colors blank. Reach for an override only when one element needs to differ.
:::
*Changing one base colour cascades across the menu.*
## Section background vs Navbar background
Two background settings interact with the **Show section background** layout toggle in the **Layout** section:
- **Section background** (on the *Layout* section) wraps the whole menu in a contained, rounded panel. When it's **on**, you can set its colour with **Section background color**.
- **Navbar background** only appears when **Show section background is off**. In that layout the collection tabs become their own card, and this setting tints that nav card. Leave it blank to match your product cards.
:::note
That's why you'll only see **Navbar background** in the editor when **Show section background** is switched off: it has no effect in the section-panel layout.
:::
---
# Theme Editor: Advanced
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/theme-editor-advanced/
Advanced block settings for checkout compatibility and custom styling.
The **Advanced** settings on the POS Cafe Online block (the theme editor block for the POS Cafe online ordering menu) handle checkout compatibility and custom styling. Most stores only need the first one.
## Hide theme cart icon (recommended)
On by default. This hides your theme's own cart icon on the ordering page so customers check out through the app cart. That's important: the app cart is what applies order details (modifiers, order type, table, scheduling) to the order.
It works automatically with the free Shopify themes (Dawn, Horizon and family).
:::caution
**If your theme's cart icon still shows,** customers could bypass the app cart and lose their order details. Use the option below to hide it.
:::
### Additional cart selector (advanced)
Appears when **Hide theme cart icon (recommended)** is on. If your theme's cart icon isn't hidden automatically, enter a CSS selector for it (for example, `.site-header__cart`). If you're not sure of the selector, your theme developer or our support team can help.
## Custom CSS
Add your own CSS to fine-tune the look of this block. Use sparingly: most styling is better handled by the **Colors** and **Layout** settings, which stay consistent across updates.
Use only POS Cafe's supported CSS variables and `pc-` hook classes. Always scope selectors to `.poscafe-app.poscafe-app`, and avoid generic theme classes such as `.modal-content` that can affect unrelated components.
See the [Custom CSS Reference](/docs/online-ordering/custom-css-reference/) for the complete supported class list, examples, and troubleshooting guidance.
## Debug information has moved
The **Show debug information** setting is no longer on this block. It's now in the POS Cafe app under **Settings → General Online Ordering Settings → Troubleshooting**. See [General Online Ordering Settings](/docs/online-ordering/general-online-ordering-settings/#troubleshooting).
---
# Custom CSS Reference
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/custom-css-reference/
Safely customise the POS Cafe online ordering menu with supported CSS variables, classes, states, and practical examples.
POS Cafe includes supported CSS variables and `pc-` classes for merchants and theme developers who need more control than the theme editor provides. Using these hooks keeps your customisations contained to the ordering menu and compatible with future updates.
:::tip
Use the built-in **Colors** and **Layout** settings first. They are easier to maintain and are tested with every release. Add custom CSS only when the theme editor does not provide the change you need.
:::
## Where to add custom CSS
In the Shopify theme editor, open the page containing the **POS Cafe Online** block, select the block, then paste your CSS into **Advanced → Custom CSS**.
CSS entered there is printed only on the ordering page. You can also use your Shopify theme's global custom CSS, but you must scope every rule as shown below.
## Always scope CSS to POS Cafe
Start every selector with `.poscafe-app.poscafe-app`:
```css
.poscafe-app.poscafe-app .pc-product-tile__title {
font-size: 1.1rem;
font-weight: 600;
}
```
The repeated class gives your rule enough priority to override the app's normal styling without relying on `!important`. It also prevents your changes from affecting other parts of the Shopify theme.
:::caution[Use only the supported hooks on this page]
Do not target generic or internal classes such as `.modal-content`, `.card`, `.btn`, `.d-flex`, or `.container`. Shopify themes and other apps commonly use those names, and their meaning can change between releases.
For example, customise the product dialog with `.pc-product-modal`, not `.modal-content`.
:::
## Theme compatibility for dialogs
POS Cafe version 3.63.3 and later protects its product dialog from common Shopify theme rules that hide, fade, move, or disable generic modal content. This prevents a theme's closed-modal styles from accidentally making a POS Cafe product dialog invisible.
No merchant action is required. If you intentionally customise a POS Cafe dialog, use the supported hook and the standard scope:
```css
.poscafe-app.poscafe-app .pc-product-modal {
border-radius: 16px;
}
```
This remains more specific than the app's compatibility protection, so supported merchant customisations continue to work.
POS Cafe version 3.64.5 and later adds more protection against theme styles that leak into the ordering menu. Again, no merchant action is required:
- **Product dialog button text** stays readable. Some themes, such as Impulse, set their own text colour on buttons inside any dialog, which could make variant and modifier options appear blank.
- **Buttons and lists** ignore theme minimum button widths, button margins and letter spacing, theme hover and press colours, and list indents and spacing. These could make the cart's quantity buttons too wide and push the price out of view, or put a dark box behind a button when a customer hovers over it.
- **Dialog text sizes** scale with your theme's body text size. Buttons, quantity controls and option details in POS Cafe's dialogs (product, cart, order type, pickup time and change location) keep the same proportions as the surrounding text, with a minimum size so they stay readable. Text inputs keep their existing size.
:::note[Changing button text colour in the product dialog]
The product dialog's button text protection outranks the `.poscafe-app.poscafe-app` prefix, and adding more `.poscafe-app` classes won't change that. To change the text colour of a button inside the product dialog, add `!important` to the `color` declaration.
The rule also applies to selected options, which have a dark background. Leave them out with `:not([data-pc-state="selected"])` so they stay readable:
```css
.poscafe-app.poscafe-app .pc-variant-option:not([data-pc-state="selected"]),
.poscafe-app.poscafe-app .pc-modifier-option:not([data-pc-state="selected"]) {
color: #4a2c17 !important;
}
```
This applies only to the `color` property of buttons in the product dialog, including the supported hooks `pc-variant-option`, `pc-modifier-option`, `pc-quantity-selector__button` (in the product dialog only) and `pc-add-to-cart-button`. Other properties, such as background, border and font, and buttons elsewhere in the app, follow the normal rule above. For the **Add to cart** button, use the **Primary / accent color** and **Button text color** settings in the theme editor instead of custom CSS. They apply whenever the item can be added. When it can't, for example because the item is sold out, the button uses a neutral grey.
:::
## Choose the safest type of customisation
Use these options in order:
1. **Theme editor settings** for normal colour and layout changes.
2. **CSS variables** for app-wide values such as colours and corner rounding.
3. **Supported `pc-` classes** for individual components.
4. **State attributes** for selected, disabled, or unavailable controls.
## CSS variables
Set variables on the app wrapper to change shared values:
```css
.poscafe-app.poscafe-app {
--pc-primary: #7a4a21;
--pc-border-radius: 2px;
}
```
| Variable | What it controls |
| :-- | :-- |
| `--pc-primary` | Primary or brand colour used for buttons and active states |
| `--pc-on-primary` | Text and icon colour shown on primary-coloured elements |
| `--pc-secondary` | Secondary accents |
| `--pc-link-color` | Link colour |
| `--pc-nav-link` | Collection navigation link colour |
| `--pc-section-bg` | Ordering section background |
| `--pc-card-surface` | Product and location card background |
| `--pc-header-bg` | Collection navigation bar (nav card) background when **Show section background** is off (the **Navbar background** setting) |
| `--pc-cart-card-bg` | Floating cart button background (the **Cart button background** setting) |
| `--pc-cart-card-border` | Floating cart button border (the **Cart button border** setting) |
| `--pc-border-color` | General border colour |
| `--pc-border-radius` | Standard corner rounding |
| `--pc-border-radius-sm` | Small corner rounding |
| `--pc-border-radius-lg` | Large corner rounding, including cards and dialogs |
| `--pc-border-radius-xl` | Extra-large corner rounding |
| `--pc-container-max-width` | Maximum content width when using the Custom width mode |
## Interactive states
Some controls expose their current state through `data-pc-state`:
| State | Meaning |
| :-- | :-- |
| `selected` | The option is currently selected |
| `disabled` | The control is disabled |
| `unavailable` | The option cannot currently be chosen |
For example:
```css
.poscafe-app.poscafe-app .pc-delivery-option[data-pc-state="selected"] {
font-weight: 700;
outline: 2px solid var(--pc-primary);
}
```
The root also includes `data-pc-theme="light"` or `data-pc-theme="dark"` for theme-specific changes.
## Supported class reference
These `pc-` classes are the stable customisation hooks supported by POS Cafe. Classes not listed here should be treated as internal.
### App root
| Class | Element |
| :-- | :-- |
| `poscafe-app` | Root wrapper around the ordering app and scope for all overrides |
### Location header
| Class | Element |
| :-- | :-- |
| `pc-location-header` | Header showing the selected location |
| `pc-location-header__name` | Location name |
| `pc-location-header__status` | Open or Closed status |
| `pc-location-header__details` | Address and hours details |
| `pc-location-header__change-button` | Change-location control |
### Location selector
| Class | Element |
| :-- | :-- |
| `pc-location-selector` | Location picker |
| `pc-location-card` | One selectable location |
| `pc-location-card__name` | Location name on a card |
| `pc-location-card__address` | Location address |
| `pc-location-card__status` | Open or Closed status |
| `pc-location-card__badges` | Order-type badges |
| `pc-location-change-modal` | Change-location dialog |
### Collection navigation
| Class | Element |
| :-- | :-- |
| `pc-collection-nav` | Collections navigation bar |
| `pc-collection-nav__link` | One collection link or pill |
### Product catalogue
| Class | Element |
| :-- | :-- |
| `pc-catalog` | Complete menu area below the location header |
| `pc-collection-section` | One collection section |
| `pc-collection-section__title` | Collection heading |
| `pc-product-grid` | Product grid |
| `pc-product-tile` | One product tile |
| `pc-product-tile__image` | Product image |
| `pc-product-tile__title` | Product title |
| `pc-product-tile__price` | Product price |
### Product dialog
| Class | Element |
| :-- | :-- |
| `pc-product-modal` | Product customisation dialog |
| `pc-product-modal__title` | Product title |
| `pc-product-modal__image` | Product image (Large banner style) |
| `pc-product-modal__thumbnail` | Product image beside the title (Small thumbnail style) |
| `pc-product-modal__description` | Product description |
| `pc-product-modal__price` | Total price |
| `pc-variant-selector` | Size or variant chooser |
| `pc-variant-option` | One variant option |
| `pc-modifier-group` | One modifier set |
| `pc-modifier-group__title` | Modifier-set heading |
| `pc-modifier-option` | One modifier option |
| `pc-modifier-option__label` | Modifier label |
| `pc-modifier-option__price` | Modifier price |
| `pc-quantity-selector` | Quantity stepper |
| `pc-quantity-selector__button` | Quantity decrease or increase button |
| `pc-quantity-selector__value` | Current quantity |
| `pc-product-name` | Item customer-name input |
| `pc-product-notes` | Item notes input |
| `pc-add-to-cart-button` | Add-to-cart button |
### Cart
| Class | Element |
| :-- | :-- |
| `pc-floating-cart-button` | Floating cart button |
| `pc-floating-cart-button__count` | Item-count bubble |
| `pc-cart-modal` | Cart dialog |
| `pc-cart-modal__header` | Cart header |
| `pc-cart-modal__title` | Cart title |
| `pc-cart-modal__close` | Cart close button |
| `pc-cart-items` | List of cart items |
| `pc-cart-item` | One cart item |
| `pc-cart-item__image` | Cart item image |
| `pc-cart-item__title` | Cart item title |
| `pc-cart-item__modifiers` | Modifier summary |
| `pc-cart-item__price` | Line price |
| `pc-cart-item__remove` | Remove button |
| `pc-empty-cart` | Empty-cart state |
| `pc-empty-cart__browse-button` | Browse-menu button |
### Cart footer and order options
| Class | Element |
| :-- | :-- |
| `pc-cart-footer` | Order options and checkout area |
| `pc-cart-footer__card` | Card containing When, How, time, and table options |
| `pc-cart-notice` | Automatic order-type correction notice |
| `pc-closed-stripe` | Store-closed scheduling notice |
| `pc-timing-selector` | For Now or For Later selector |
| `pc-timing-selector__option` | One timing option |
| `pc-delivery-selector` | Order-type selector |
| `pc-delivery-option` | One order-type option |
| `pc-method-sheet` | Order-type sheet shown when four or more types are enabled |
| `pc-datetime-selector` | Date and time picker |
| `pc-table-input` | Table or customer-name input |
| `pc-vehicle-input` | A Drive Thru or Curbside vehicle details input row |
| `pc-checkout-button` | Checkout button |
| `pc-pickup-time-modal` | Pickup-time dialog |
### Other controls
| Class | Element |
| :-- | :-- |
| `pc-back-to-top` | Back-to-top button |
## Example customisations
### Brand-coloured, pill-shaped checkout button
```css
.poscafe-app.poscafe-app .pc-checkout-button {
background: #1a4731;
border-color: #1a4731;
border-radius: 999px;
letter-spacing: 0.5px;
}
```
### Bigger product prices
```css
.poscafe-app.poscafe-app .pc-product-tile__price {
color: var(--pc-primary);
font-size: 1.15rem;
font-weight: 700;
}
```
### Square product images
```css
.poscafe-app.poscafe-app .pc-product-tile__image {
border: 1px solid var(--pc-border-color);
border-radius: 0;
}
```
### Hide location details
```css
.poscafe-app.poscafe-app .pc-location-header__details {
display: none;
}
```
### De-emphasise unavailable order types
```css
.poscafe-app.poscafe-app .pc-delivery-option[data-pc-state="unavailable"] {
filter: grayscale(1);
opacity: 0.35;
}
```
### Dark-mode-only cart border
```css
.poscafe-app.poscafe-app[data-pc-theme="dark"] .pc-cart-footer__card {
border: 1px solid rgba(255, 255, 255, 0.15);
}
```
## Troubleshooting custom CSS
### My rule does not apply
Confirm that the selector starts with `.poscafe-app.poscafe-app`. If the property still loses to the app or theme, add one more `.poscafe-app` to the prefix. Use `!important` only as a last resort.
The one exception is the text colour of buttons inside the product dialog, which always needs `!important`. See [Theme compatibility for dialogs](#theme-compatibility-for-dialogs).
### A theme update changed the ordering menu
Check whether your CSS uses only the supported variables, `pc-` classes, and state attributes on this page. Replace generic or internal selectors with the nearest supported hook.
### A product or cart dialog does not appear correctly
Remove any CSS targeting generic modal classes such as `.modal`, `.modal-content`, or `.modal-dialog`. Use `.pc-product-modal`, `.pc-cart-modal`, or the other supported dialog hook instead.
### The menu looks squeezed or off-centre
Turn on **Break out of theme container** in the block's **Layout** settings rather than adding negative margins or fixed widths.
### Text alignment or spacing is inherited from the theme
Scope the correction under `.poscafe-app.poscafe-app` so it applies only inside the ordering menu.
---
# Pricing, Currency & Markets
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/pricing-currency-and-markets/
How live pricing and per-customer currency work, and what to check if prices look off.
The POS Cafe online ordering menu shows live prices straight from your store, in the currency that's right for each customer. Here's how pricing and currency behave, and what to check if something looks off.
## Live, market-correct pricing
The online ordering menu uses a Storefront API connection to load prices and availability in the customer's market context. That means a shopper in another country sees prices in **their presentment currency**, matching what they'd pay at checkout. The key for this connection is created automatically when you install POS Cafe.
## The cart follows the currency
If a customer switches currency using your store's currency selector, the page reloads and both the product prices and the **cart** update to that currency, so the symbol and totals stay consistent through to checkout.
*Prices and cart follow the buyer's currency.*
## If the connection isn't working
Without a working Storefront API connection, the menu still works but uses the prices captured at the last menu publish, in your base currency. If a customer is browsing in a different currency, a small notice may appear letting them know prices will be converted at checkout.
To check the connection, go to **Settings → General Online Ordering Settings** and look at the **Online ordering connection** card. If it shows **Needs attention** or **Not set up**, select **Regenerate**. See [Installation & Connecting Your Store](/docs/online-ordering/installation-and-connecting-your-store/).
:::tip
**For accurate multi-currency pricing,** make sure the **Online ordering connection** card shows **Active**, and use Shopify Markets to define the currencies you sell in.
:::
---
# QR Codes & Table Ordering
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/qr-codes-and-table-ordering/
Generate table QR codes that drop customers onto your menu at the right location and table.
POS Cafe table QR codes let a customer scan at their table and land straight on your online ordering menu, already set to the right location and table and ready to order "For Here".
## How it works
Each table QR code links to your **ordering page URL** with the location and table built in, so the order arrives as a regular Shopify order with the table recorded in its additional details (**Table Number**). Tables, their links and the QR downloads are managed in Table Management; see [QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/) for the full guide.
## Setting it up
1. **Set your ordering page URL.** Enter your **Online ordering page URL** in **Settings → General Online Ordering Settings**. QR codes can't be generated without it.
2. **Create tables and QR codes.** Open the location from **Locations**, then select **Table Management** to create tables and download their QR codes.
3. **Print and place them.** Print the QR codes and place them on the matching tables.
:::caution
**Always use the full ordering page URL** (starting with `https://`). An incomplete URL can't be saved and QR codes won't generate.
:::
For more on creating tables, downloading QR codes in bulk and copying a single table's link, see [QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/).
---
# Online Ordering: Troubleshooting & FAQ
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/troubleshooting-and-faq/
Quick answers to the most common online ordering questions and issues.
Quick answers to the most common POS Cafe online ordering questions. If something isn't covered here, contact support with your store name and the page where you're seeing the issue.
## Common questions
### My menu changes aren't showing on the storefront
Menu changes re-publish automatically a few moments after you save (edits are batched, so several quick changes publish together). Wait a moment, then refresh the storefront page. If it still hasn't updated, go to **Settings → General Online Ordering Settings** and select **Re-publish menu** on the **Online ordering menu** card, then check that the card shows **Published**.
### A location or its products are missing from the online menu
Check the **Online ordering menu** card in **Settings → General Online Ordering Settings**:
- Only locations with an active POS Cafe licence are published.
- The location needs **Enable online ordering for this location** turned on in its **Online Ordering** section.
- Products need to be available on the Online Store sales channel. See [Building Your Menu](/docs/online-ordering/building-your-menu/).
If the card shows **No Online Store menu**, the menu has no licensed locations or no collections available to the Online Store.
### My theme's cart icon still shows on the ordering page
The block hides the cart icon automatically on the free Shopify themes. If yours still shows, add your theme's cart selector under **Advanced → Additional cart selector (advanced)**. This matters because customers should check out through the app cart so their order details apply.
### The cart or prices show the wrong currency
Check the **Online ordering connection** card in **Settings → General Online Ordering Settings**, since that connection delivers market-correct prices. It should show **Active**; if it shows **Needs attention** or **Not set up**, select **Regenerate**. When a customer switches currency, the page reloads and both prices and the cart follow the new currency.
### Live stock isn't updating for a location
Per-location live stock requires **local pickup** to be enabled for that location in your Shopify shipping settings. Until then, the menu uses the sold-out items captured at the last publish, or the live sold-out list if **Live menu data and sold-out updates** is turned on. The location page shows an **Enable local pickup for live stock levels** banner when this applies.
### A location shows as "Closed" when it shouldn't
Check the location's **store hours** and any **date overrides** (**Location Setup → Store Hours** on the location page), and confirm its time zone is correct. Hours are evaluated in the location's local time.
### My "Element Colors" are blank, or show as "Select" or "Transparent"
That's expected. Blank Element Colors show as **Select** in the sidebar (and as "Transparent" in the colour picker), which means *"inherit the default"*: the element still renders a real colour from your base colours. You only set one when you want that element to differ.
### The "Navbar background" setting disappeared
It only appears when **Show section background** is off, because it only applies to the nav-card layout. Turn the section background off to see it.
### QR codes aren't working
Confirm your **Online ordering page URL** is a full URL starting with `https://`.
### I see a diagnostics panel on my live page
Turn off **Show debug information on the ordering page** in **Settings → General Online Ordering Settings → Troubleshooting**. It's a troubleshooting tool and shouldn't be on for customers.
---
# Admin Order Details
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/admin-order-details/
Learn how to view online order pickup and delivery information directly on the Shopify order detail page using the POS Cafe admin block.
View online order pickup and delivery information directly on the order detail page in your Shopify admin using the POS Cafe admin block.
## How to enable the POS Cafe Order Info block
1. **Open an order.** From your Shopify admin dashboard, click on **Orders** from the left-hand menu. Select any existing order that contains POS Cafe items, from the Online Store or Shopify POS.
2. **Find the Blocks section.** Scroll down the order details page until you find the **Blocks** section.
3. **Add the block.** Click on the **+ Block** option, and from the dropdown menu, choose **POS Cafe - Order Info**.
4. **Pin it.** The POS Cafe Order Info section will now appear on the page. To ensure this block is always visible for future online orders (saving you from having to add it every time), make sure to click on the **pin icon** located in the top right corner of the block.
5. **Done.** The block is now pinned, so it appears on every order with POS Cafe items.

## What the block shows
The **POS Cafe - Order Info** block shows the details POS Cafe recorded for the order, when they apply:
| Field | What it shows |
| :-- | :-- |
| **Order Type** | The order type, such as For Here, To Go or Pickup. |
| **Prepare For** | When to prepare the order: as soon as possible, today at a time, or a future date and time. |
| **Location** | The location that prepares the order. |
| **Delivery Method** | The pickup or delivery method chosen at checkout. |
| **Table Number** | The table, for table orders. |
---
# Order Emails
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/order-emails/
Learn how to format your Shopify staff order emails to clearly highlight pickup times, prep areas, and item modifiers.
Shopify's default staff order email lists items but not the details a cafe
needs. POS Cafe's email template replaces it with a layout that shows the
pickup date and time, the order type, and each item with its modifiers,
grouped by prep area. Use it if your team works from order emails for
online orders.
_Example of a customised POS Cafe staff order email, showing the orders grouped
by prep area, pickup date & time, and modifiers listed below each item._
## Setup Instructions
Follow these steps to format and customise your staff order email
notifications in Shopify:
1. From your **Shopify admin**, go to **Settings**.
2. Select **Notifications** from the settings menu.
3. Select **Staff notifications**.
4. Ensure the email address intended to receive these notifications is present
in the **Recipients** list. If it isn't, click **Add recipient** to include it.
5. In the **Add recipient** popup, enter your email address. Then, choose which
types of notifications you wish to receive:
- **All Orders:** Receive notifications for both your Online Orders and POS orders.
- **Online Orders:** Select a specific location or online channel to receive
notifications exclusively for Online Orders.
6. Scroll down to the templates and select **New order**.
7. Click on **Edit code**.
8. In the template editor, fully highlight and delete all existing code within
the **Email body (HTML)** section.
9. Copy the custom POS Cafe code snippet below, and paste it into the
now-empty **Email body (HTML)** editor.
**Order Notification Email (v1.1)**
```liquid
{% comment %}
POS Cafe - Order Email Notifications v1.1
{% endcomment %}
{% assign delivery_method_types = delivery_agreements | map: 'delivery_method_type' | uniq %}
{% if delivery_method_types.size > 1 %}
{% assign has_split_cart = true %}
{% else %}
{% assign has_split_cart = false %}
{% endif %}
{% comment %} POS Cafe: Detect cafe items, collect prep areas, extract order attributes {% endcomment %}
{% assign poscafe_label = "POS Cafe" %}
{% assign modifier_label = "Modifier" %}
{% assign has_poscafe = false %}
{% assign pc_unique_prep_areas = "" %}
{% assign pc_hidden_keys = "Item Type,Prep Area,Channel,Order Type,Name,Notes,Cafe Discount,item_type,prep_area" | split: "," %}
{% assign pc_order_type = "" %}
{% assign pc_delivery_date = "" %}
{% assign pc_delivery_time = "" %}
{% assign pc_timing_choice = "" %}
{% assign pc_time_12h = "" %}
{% for attr in attributes %}
{% if attr.first == "Order Type" %}{% assign pc_order_type = attr.last %}{% endif %}
{% if attr.first == "delivery_date" %}{% assign pc_delivery_date = attr.last %}{% endif %}
{% if attr.first == "delivery_time" %}{% assign pc_delivery_time = attr.last %}{% endif %}
{% if attr.first == "timing_choice" %}{% assign pc_timing_choice = attr.last %}{% endif %}
{% endfor %}
{% if pc_delivery_time != blank %}
{% assign pc_time_parts = pc_delivery_time | split: ":" %}
{% assign pc_hour = pc_time_parts[0] | plus: 0 %}
{% assign pc_minute = pc_time_parts[1] %}
{% if pc_hour >= 12 %}
{% assign pc_ampm = "PM" %}
{% if pc_hour > 12 %}{% assign pc_hour_12 = pc_hour | minus: 12 %}{% else %}{% assign pc_hour_12 = pc_hour %}{% endif %}
{% else %}
{% assign pc_ampm = "AM" %}
{% if pc_hour == 0 %}{% assign pc_hour_12 = 12 %}{% else %}{% assign pc_hour_12 = pc_hour %}{% endif %}
{% endif %}
{% assign pc_time_12h = pc_hour_12 | append: ":" | append: pc_minute | append: " " | append: pc_ampm %}
{% endif %}
{% for line in line_items %}
{% assign pc_item_type = line.properties["Item Type"] %}
{% if pc_item_type == poscafe_label %}
{% assign has_poscafe = true %}
{% assign pc_prep = line.properties["Prep Area"] %}
{% if pc_prep != blank %}
{% unless pc_unique_prep_areas contains pc_prep %}
{% if pc_unique_prep_areas == "" %}
{% assign pc_unique_prep_areas = pc_prep %}
{% else %}
{% assign pc_unique_prep_areas = pc_unique_prep_areas | append: "|||" | append: pc_prep %}
{% endif %}
{% endunless %}
{% endif %}
{% endif %}
{% endfor %}
{% assign pc_prep_areas_array = pc_unique_prep_areas | split: "|||" | sort %}
{{ email_title }}
{% if fulfillment_aborted %}
Order was not fulfilled automatically
High risk of fraud detected. Before fulfilling this order or capturing payment, please review the Risk Analysis and determine if this order is fraudulent.
{% endif %}
{% if has_high_risks? %}
High risk of fraud detected
Before fulfilling this order or capturing payment, please review the Risk Analysis and determine if this order is fraudulent.
{% endif %}
{% assign current_date = date | date: "%b %d" %}
{% assign current_time = date | date: "%l:%M %P" %}
{% if customer.name %}
{{ customer.name }} placed order {{ name }} on {{ current_date }} at {{ current_time | strip }}.
{% else %}
Someone placed order {{ name }} on {{ current_date }} at {{ current_time | strip }}.
{% endif %}
{% if legacy_separator %}
{% endif %}
{% for delivery_agreement in delivery_agreements %}
{% if delivery_agreement.line_items != blank %}
{% if delivery_agreements.size > 1 %}
{% if order_discount_count > 0 %}
{% if order_discount_count == 1 %}
Order discount
-{{ total_order_discount_amount | money }}
{% endif %}
{% if order_discount_count > 1 %}
Order discounts
-{{ total_order_discount_amount | money }}
{% endif %}
{% for discount_application in discount_applications %}
{% if discount_application.target_selection == 'all' and discount_application.target_type != 'shipping_line' %}
```
10. Click **Save** to apply your changes.
Tip (That's it): New online orders now arrive with the pickup time, order type and each item's modifiers grouped by prep area.
## Troubleshooting
### Need to revert?
You can always revert your Order Notification template to a previous version,
or revert it back to its Default state. In the Code Edit screen, click on the
**Revert to** button to choose a version to restore:
---
# Live Sold-Out Updates
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/live-sold-out-updates/
Stop the online ordering menu selling items that have run out at a location, within seconds, with the optional live sold-out list.
**Live menu data and sold-out updates** is an optional POS Cafe setting that keeps a live list of the items sold out at each location, including modifiers. The POS Cafe online ordering menu uses this list to stop selling items that have run out, and brings them back once they're restocked. It's off by default.
## Turn it on or off
1. Go to **Settings → General Online Ordering Settings**.
2. Find the **Live menu data and sold-out updates** card.
3. Select **Turn on**. The card's badge changes from **Off** to **On**.
To turn it off, select **Turn off** on the same card. Turning it off removes the sold-out list.
The same card also appears on the Cloudshelf page (**Settings → Integrations → Cloudshelf**). It's a single setting, so turning it on or off in either place changes it for both online ordering and Cloudshelf kiosks. See [Cloudshelf Kiosks](/docs/integrations/cloudshelf-kiosks/).
## How quickly it updates
| Event | What happens |
| :-- | :-- |
| An item sells out at a location | It's removed from sale there within seconds. |
| The item is back in stock | It's added back within about 15 minutes. |
| You publish your menu | The whole list is rebuilt. |
| Regular maintenance | The whole list is also rebuilt automatically every day or two. |
While the setting is on, the card shows how many items are currently sold out across your locations (for example, "3 items are currently sold out across your locations", or "Nothing is currently sold out.").
## Which items count as sold out
- **Tracked, stop-selling items:** an item only counts as sold out when Shopify tracks its stock and it's set to stop selling when out of stock.
- **Items not stocked at a location:** these count as sold out at that location.
- **Continue-selling items:** items set to keep selling when out of stock are never marked sold out.
Whether a sold-out product is hidden or shown as unavailable depends on the location's **Show out of stock / sold out items** setting. See [Locations: Hours, Order Types & Pickup](/docs/online-ordering/locations-hours-order-types-and-pickup/).
## How it works with local pickup
The online ordering menu picks the most up-to-date source of sold-out information available for each location:
1. **Live per-location stock:** if the location has Shopify **local pickup** enabled, the menu reads real-time availability for that location directly from your store.
2. **The live sold-out list:** if live per-location stock isn't available (for example, local pickup is off), and this setting is on, the menu uses the live sold-out list.
3. **The last published list:** otherwise, the menu uses the sold-out items captured the last time your menu was published, which can go out of date between publishes.
So this setting matters most for locations without local pickup. For how to enable local pickup, see [Locations: Hours, Order Types & Pickup](/docs/online-ordering/locations-hours-order-types-and-pickup/).
## If a warning appears
- **"Saved, but instant sold-out updates could not be set up"**: the setting was saved, but instant updates couldn't be set up. Sold-out lists still refresh when menus publish and during regular checks, and POS Cafe retries automatically.
- **"Turned off. The sold-out list couldn't be removed straight away"**: the list will be removed when your menu next publishes, within a few minutes.
- **"The setting could not be changed."**: try again. If it keeps happening, contact support.
---
# Upgrading from POS Cafe Online (Old)
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/upgrading-from-the-old-online-ordering-block/
Check which online ordering block your theme uses and move from POS Cafe Online (Old) to the current POS Cafe Online block.
POS Cafe has two online ordering theme blocks: the current **POS Cafe Online** block and the older **POS Cafe Online (Old)** block. If your ordering page still uses the old block, replace it with **POS Cafe Online** in the theme editor.
## Check which block your theme uses
1. In Shopify admin, open **Online Store → Themes → Customize**.
2. Open the page where customers order (for example, your "Order" page).
3. Look at the block name in the theme editor sidebar:
- **POS Cafe Online** is the current block. There's nothing to do.
- **POS Cafe Online (Old)** is the old block. Its settings start with the heading "Old version - do not use" and a note asking you to use the **POS Cafe Online** block instead.
## Why upgrade
- The old block is marked in the theme editor as old and unsupported.
- **POS Cafe Online** loads your menu live through Shopify's Storefront API, with market-correct prices and currency. See [Pricing, Currency & Markets](/docs/online-ordering/pricing-currency-and-markets/).
- **POS Cafe Online** works with the current online ordering features, including [live per-location stock](/docs/online-ordering/locations-hours-order-types-and-pickup/), [live sold-out updates](/docs/online-ordering/live-sold-out-updates/), [table QR codes](/docs/online-ordering/qr-codes-and-table-ordering/) and the colour and layout settings described in [Colors & Theming](/docs/online-ordering/colors-and-theming/).
## Before you swap: note your old settings
Select the **POS Cafe Online (Old)** block and note its settings. The new block doesn't use them, so you'll set their equivalents again:
| Old block setting | Where it lives now |
| :-- | :-- |
| **Time Slot Interval** | **Time Slot Interval** in **Settings → General Online Ordering Settings** (POS Cafe app) |
| **Preparation Time (minutes)** | **Prep Time (minutes)** in **Settings → General Online Ordering Settings** |
| **Show Cart Note Field** | **Show cart note field** in **Settings → General Online Ordering Settings** |
| **Require Table/Customer Name for dine-in** | **Require table name / number** in **Settings → General Online Ordering Settings** |
| **Accent Color** | **Primary / accent color** under **Colors** on the new block |
| **Collection Navigation Layout** | **Menu navigation style** under **Layout** on the new block (the collection tabs sit above the products) |
| **Custom CSS** | **Custom CSS** under **Advanced** on the new block |
| **Show Debug Information (Advanced)** | **Show debug information on the ordering page** in **Settings → General Online Ordering Settings → Troubleshooting** (POS Cafe app) |
The old **Theme Variant** and **Color Scheme** settings have no direct equivalent. Use the new block's **Layout**, **Colors** and **Element Colors** settings instead.
:::caution
**Check any custom CSS before copying it across.** The new block supports its own CSS variables and `pc-` classes, and every rule should start with `.poscafe-app.poscafe-app`. See the [Custom CSS Reference](/docs/online-ordering/custom-css-reference/).
:::
## Swap the blocks
1. **Add the new block.** On the same page in the theme editor, choose **Add section / block** and select **POS Cafe Online**.
2. **Set it up.** Enter the equivalents of your old settings from the table above, in the new block and in **Settings → General Online Ordering Settings**.
3. **Remove the old block.** Remove the **POS Cafe Online (Old)** block from the page.
4. **Save** the theme.
5. **Check your ordering page URL.** In **Settings → General Online Ordering Settings**, make sure **Online ordering page URL** is the full URL of this page, so table QR codes point to it.
6. **Test an order.** Open the page on your store, add an item and go through to checkout.
For a full walkthrough of the new block's settings, see [Theme Editor: Layout](/docs/online-ordering/theme-editor-layout/) and [Theme Editor: Advanced](/docs/online-ordering/theme-editor-advanced/).
---
# Sharing Collection Links
Section: Online Ordering
URL: https://poscafe.app/docs/online-ordering/sharing-collection-links/
Copy a link that opens your online ordering menu at a specific location and collection.
Each collection on a location's menu has its own POS Cafe online ordering link. The link opens your online ordering page at that location and scrolls straight to that collection's heading, so you can send customers directly to, say, your coffee or breakfast menu.
## Before you start
Collection links are built from your **Online ordering page URL**. Set it first in **Settings → General Online Ordering Settings**. See [General Online Ordering Settings](/docs/online-ordering/general-online-ordering-settings/).
Until it's set, the Location Menu page shows the banner **Add your online ordering page URL to generate collection links**. Select **Go to settings** to open the settings page.
## Find and copy a collection link
1. Go to **Locations** and open a location.
2. Under **Location Setup**, select **Location Menu**.
3. In the **Collections** list, each collection shows its link in a read-only field next to its name.
4. Select the copy button next to the field. A **Collection link copied** message confirms it.
A collection with no products shows **Add products to enable linking** instead of a link.
## What the link looks like
The copied link is the path of your ordering page plus the location and collection, without your store's domain. For example:
```text
/pages/order?location=123456789&collection=coffee
```
This works as-is for links inside your own online store (for example, an "Order now" button on your home page). To share it anywhere else, add your store's address in front, for example `https://your-store.com/pages/order?location=123456789&collection=coffee`.
## What customers see
When a customer opens a collection link, the online ordering menu:
- Selects the location in the link automatically.
- Scrolls to that collection's section of the menu.
As customers scroll through the menu, the page address updates to the collection they're viewing, so the link they copy from their browser also points to that spot.
## Ways to use collection links
- Buttons or banners on your own store's pages that lead to a specific part of the menu.
- Posts, emails or messages that promote a particular range, such as a seasonal menu.
- QR codes on printed menus or signage (turn the full link, including your store's address, into a QR code with a QR code tool of your choice).
For links that also set a table, use table QR codes instead. See [QR Codes & Table Ordering](/docs/online-ordering/qr-codes-and-table-ordering/).
---
# Table Management: Getting Started
Section: Table Management
URL: https://poscafe.app/docs/table-management/getting-started/
Organise your venue into dining areas and tables, give each table a QR link, and track open tabs.
POS Cafe table management lets you organise your venue into dining areas and tables, give every table its own online-ordering QR link, and keep track of open tabs. It ties your in-person Shopify POS together with your online ordering menu, so an order can be tied to a specific table.
*Captured September 2026.*
## Features
| Term | What it means |
| :-- | :-- |
| **Dining area** | Create and organise your tables based on the physical spaces in your venue (such as "Patio" or "Main Dining") to keep your floor plan structured and efficient. |
| **Table** | Easily create and assign each of your tables within an area. Every table is linked to a specific dining area and comes with its own unique name, a dedicated online-ordering link, and a custom QR code. |
| **Online Ordering URL** | The per-table deep link to your menu (pre-set to that location and table). Shown as a copyable field on each table, and downloadable as a QR code. |
| **Add tables to POS draft orders** | A setting on each dining area. When it's on and you select a table from that area in Shopify POS, POS Cafe adds the table's name to the order as a $0 line so it shows in your draft orders list. The table details are recorded on the order whether this setting is on or off. |
| **Open Tabs** | A page that lists your open Shopify draft orders from POS, grouped by the table they're assigned to. |
## How it connects
- **In POS:** selecting a table in the POS Cafe tile records the table on the order. For areas with *Add tables to POS draft orders* turned on, it also adds the table's name as a $0 line so your team can tell tabs apart. See [POS Draft Orders](/docs/table-management/pos-draft-orders/).
- **Online:** a customer scans a table's QR code and lands on your menu, already set to that location and table. They check out as normal, so the result is a regular Shopify order with the table attached. See [QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/).
- **Open Tabs:** open POS draft orders that have a table assigned appear on the [Open Tabs](/docs/table-management/open-tabs/) page. Online orders don't appear there, because they're completed orders rather than drafts.
## Before you start
- You have a **location** set up.
- For QR codes / order links, set your **Online ordering page URL** first (**Settings → General Online Ordering Settings**). See [QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/).
## Quick start
1. **Open Table Management.** Go to **Locations**, open a location, then select **Table Management**.
2. **Create your tables.** Use **Add Tables** to add a whole area of tables at once. ([Adding Tables in Bulk](/docs/table-management/adding-tables-in-bulk/))
3. **Download & print QR codes.** Place one on each table so customers can scan to order. ([QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/))
4. **(Optional) Turn on POS draft orders.** For dine-in areas, so table names show as a line on POS orders. ([POS Draft Orders](/docs/table-management/pos-draft-orders/))
5. **Track activity.** Check open POS tabs on [Open Tabs](/docs/table-management/open-tabs/).
---
# Dining Areas & Tables
Section: Table Management
URL: https://poscafe.app/docs/table-management/dining-areas-and-tables/
Organise your venue into dining areas and the tables within each one.
The POS Cafe Table Management page is where you organise your venue into dining areas and tables. Open it from **Locations**, open a location, then select **Table Management**.
:::tip
**Setting up a lot of tables?** Use **Add Tables** (the button at the top right) to create a whole area of tables in one go. See [Adding Tables in Bulk](/docs/table-management/adding-tables-in-bulk/). This page is best for adjustments and day-to-day management.
:::
## Dining areas
Areas group your tables (for example "Patio", "Main Dining", "Bar").
- **Add a dining area:** use **Add Dining Area**, enter an **Area Name**, optionally turn on **Add tables to POS draft orders**, then select **Create**.
- **Edit an area:** on the area card, open **More → Edit area** to rename it or change its POS draft-orders setting.
- **Delete an area:** **More → Delete area**.
:::caution
**Deleting an area also deletes every table in it.** You'll be asked to confirm, and it can't be undone.
:::
### The "Add tables to POS draft orders" setting
Each area has an **Add tables to POS draft orders** setting. When it's on, selecting any table in that area in Shopify POS adds the table's name to the order as a no-charge custom item, so the table name shows in your draft orders list and open tabs are easy to tell apart. The table itself is recorded on the order either way; this setting only controls the extra line. It applies to **every table in the area** and you can change it any time via **Edit area**. Areas with it on show a **"POS draft orders"** badge. Full detail in [POS Draft Orders](/docs/table-management/pos-draft-orders/).
## Tables
Each table belongs to an area. On an area card:
- **Add Table:** create a single table (enter a **Table Name**, then select **Create table**).
- **QR Codes:** download the QR codes for every table in the area. See [QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/).
And in each table's row:
- **Edit** (pencil): rename the table.
- **Delete** (bin): remove the table.
### The table list
Within each area, tables are listed with three columns:
- **Table Name:** what you call it. An *"Unsaved"* badge appears while a rename is pending.
- **Online Ordering URL:** the table's deep link to your menu, shown in a read-only field with a copy button. (Shows *"Set online ordering URL in Settings"* until you've configured your ordering page.) See [QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/).
- **Actions:** edit or delete.
### Saving table renames
Renaming a table (**Edit Table**, then **Apply**) is staged until you save. A save bar appears, and leaving the page with unsaved changes prompts you to confirm. Use **Save** to apply, or **Discard** to revert.
## Unassigned tables
If a table isn't linked to an area, it appears in an **Unassigned Tables** card with the warning "These tables are not assigned to a dining area." Re-create it in an area so it stays organised.
---
# Adding Tables in Bulk
Section: Table Management
URL: https://poscafe.app/docs/table-management/adding-tables-in-bulk/
Create a whole area of tables at once and download their QR codes in a single ZIP.
**Add Tables** is the fastest way to create a whole area of POS Cafe tables at once: name them by a pattern, then download their QR codes in a single ZIP. Open it with the **Add Tables** button on the Table Management page.
## Step 1: Dining Area
Choose where the new tables go: pick **Use existing area** and select the dining area, or pick **Create new area** and enter a **New area name**. (If you have no areas yet, you'll just name a new one.)
## Step 2: Table Configuration
- **Number of tables:** how many to create (up to **200** per batch).
- **Naming pattern:** how the tables are named:
- **Numeric:** `1, 2, 3...`
- **Prefixed:** `T1, T2, T3...` (you set the prefix)
- **Named:** `Table 1, Table 2...`
- **Prefix:** shown for the Prefixed pattern (e.g. "T" gives T1, T2, T3...).
- **Start numbering from:** the first number to use (e.g. start at 11).
- **Add tables to POS draft orders:** shown only when you're *creating a new area*. Sets that area's POS draft-orders option (you can change it later). See [POS Draft Orders](/docs/table-management/pos-draft-orders/).
A live **preview** shows the names you'll get before you create them.
## Step 3: Review & Create
Confirm the area, count, names (and the POS draft-orders setting for a new area), then select **Create [number] Tables**. Once they're created you can **Download QR Codes (ZIP)** straight away, or select **Done** to return to Table Management.
:::tip
QR downloads need your **Online ordering page URL** set first. See [QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/).
:::
:::note
Leaving mid-flow (before creating) prompts you to confirm, since your entered settings aren't saved yet. Once the tables are created, you can safely leave.
:::
---
# QR Codes & Online Ordering URLs
Section: Table Management
URL: https://poscafe.app/docs/table-management/qr-codes-and-online-ordering-urls/
Each table's deep link and printable QR code that opens your menu set to that table.
Every POS Cafe table has its own online-ordering link: a deep link to your menu, pre-set to that location and table. You can copy the link from the table list, or download printable QR codes. When a customer scans, the menu opens ready for "For Here" ordering at that table.
## What a table link / QR does
A table's link points to your online ordering page with the location and table built in. On scan, the storefront selects the right location and table (shown with the table's area and name, matching POS) and the table is recorded on the order (as **Table Number** in the order's additional details).
The customer then checks out as normal, so the order arrives as a regular Shopify order with the table details attached. Online orders don't appear on [Open Tabs](/docs/table-management/open-tabs/), which only lists open Shopify draft orders from POS.
*Captured September 2026.*
## Before you generate QR codes or links
:::caution
**Set your Online ordering page URL first.** Links point at the page where you placed the online ordering block. Set it under **Settings → General Online Ordering Settings → Online ordering page URL** (use the full URL starting with `https://`). Until it's set, the table list shows *"Set online ordering URL in Settings"* and QR generation is blocked. See [General Online Ordering Settings](/docs/online-ordering/general-online-ordering-settings/).
:::
## Copying a single table's link
On the Table Management page, each table's **Online Ordering URL** column shows a read-only field with a **copy** button. Use it to grab one table's link, which is handy for a quick test, a digital menu, or a single reprint.
## Downloading QR codes
Two places produce printable QR codes, both as a ZIP of PNG images:
- **Per dining area:** on the area card, choose **QR Codes** (on smaller screens, **Download QR codes** in the area's **Actions** menu). This produces a ZIP with one image per table in that area.
- **From Add Tables:** right after creating a batch of tables, choose **Download QR Codes (ZIP)**.
:::note
Each table's QR is (re)generated when you download, so the codes always reflect the table's current details. The ZIP is named after the area, with one PNG per table.
:::
## Printing & placing
- Print each table's PNG at a size that's easy to scan from a seated position.
- Place the correct code on its matching table (the file is named after the table).
- A small sign or table tent works well, ideally with a short "Scan to order" prompt.
## Renaming tables & reprinting
Each table's link includes the table's name, so after renaming a table (or changing your setup) re-download and reprint that area's codes so everything stays in sync. See the FAQ in [Troubleshooting](/docs/table-management/troubleshooting-and-faq/).
---
# POS Draft Orders
Section: Table Management
URL: https://poscafe.app/docs/table-management/pos-draft-orders/
Show a table's name on Shopify POS draft orders so open tabs are easy to tell apart.
The POS Cafe **Add tables to POS draft orders** setting adds a table's name to Shopify POS orders as a $0 line, so open tabs are easy to tell apart in your Shopify draft orders list. It's controlled by a single setting on each dining area.
## The setting: "Add tables to POS draft orders"
This lives on the **dining area** (not the individual table), so it applies to **every table in that area**. When it's on:
> Selecting any table in this area in Shopify POS adds its name to the order as a **no-charge custom item**, so the table name shows in your draft orders list and open tabs are easy to tell apart.
The added line is **$0**. It doesn't affect the order total; it's purely a label so you can see which table an order belongs to.
:::note
**The table is recorded either way.** Whenever staff select a table in the POS Cafe tile, the table details are saved on the order, whether this setting is on or off. The setting only controls the extra $0 line. Orders saved as drafts with a table selected appear on [Open Tabs](/docs/table-management/open-tabs/) in both cases.
:::
## Turning it on
- **For a new area:** tick **Add tables to POS draft orders** in the **Create Dining Area** modal (opened with **Add Dining Area**), or during the **Add Tables** flow.
- **For an existing area:** open the area's **More → Edit area** and toggle it.
Areas with it on show a **"POS draft orders"** badge on their card, so you can see at a glance which areas are set up for it.
## How it flows
1. An area has **Add tables to POS draft orders** turned on.
2. In Shopify POS, your staff select a table from that area in the POS Cafe tile.
3. POS Cafe records the table on the order and adds the table's name to the cart as a $0 custom item.
4. When the order is saved as a draft, the table name shows in your draft orders list.
5. The open draft also appears on [Open Tabs](/docs/table-management/open-tabs/), grouped by table.
If staff switch to a different table, the old table line is replaced with the new one. Selecting a table in an area with the setting off removes any leftover table line.
:::note
**Leaving it off** is fine for areas where you don't need the table name as a line on POS orders. Tables still work everywhere else (table selection in POS, Open Tabs, online ordering links, QR codes). The setting only controls whether the table name is added to POS orders as a line.
:::
---
# Open Tabs
Section: Table Management
URL: https://poscafe.app/docs/table-management/open-tabs/
A view of open POS draft orders grouped by table, so you can see every running tab.
The POS Cafe Open Tabs page shows what's currently open at each table: open Shopify draft orders from POS that have a table assigned, grouped so you can see every table's running tab at a glance. Open it with the **Open Tabs** button on the Table Management page.
## What you'll see
- One card per table that has an open order, showing the table name, its dining area, and a count of orders.
- For each order: its **Order** name, the **Time** it was started, and the **Total**.
- A **Refresh** action to pull the latest.
Draft orders that record a different location are left out, so you see the tabs for the location you're viewing.
## How orders get onto a table
An order appears here when it's an open Shopify draft order with a table assigned. That happens when your staff select a table in the POS Cafe tile in Shopify POS and then save the order as a draft.
The table is recorded on the order whether or not the area's **Add tables to POS draft orders** setting is on. That setting only adds the table's name as a $0 line so it's easy to spot in Shopify's draft orders list. See [POS Draft Orders](/docs/table-management/pos-draft-orders/).
:::note
**Online orders don't appear here.** When a customer scans a table QR code and orders online, they check out as normal, so the result is a regular Shopify order (with the table attached), not an open draft.
:::
## Limits & refresh
Open Tabs reads your **100 most recently updated** open draft orders. If you have more than that, a note ("Showing tabs from the 100 most recently updated open draft orders.") appears and older tabs may not be listed. Use **Refresh** to re-check.
## If nothing appears
If the page is empty, there aren't any open draft orders with a table assigned yet. You may also see a note that some open drafts were found "but none had a table assignment". That means those drafts were saved without a table being selected in the POS Cafe tile.
---
# Table Management: Troubleshooting & FAQ
Section: Table Management
URL: https://poscafe.app/docs/table-management/troubleshooting-and-faq/
Quick answers to common table-management questions and issues.
Quick answers to common POS Cafe table-management questions. If something isn't covered here, contact support with your store name and the location you're working with.
## Where did the "Enable open tabs" switch go?
It was replaced. The setting that adds a table's name to POS orders now lives on the **dining area** as **"Add tables to POS draft orders"**, and applies to every table in that area. Turn it on via **Add Dining Area** or **More → Edit area**. See [POS Draft Orders](/docs/table-management/pos-draft-orders/).
## Order links / QR codes won't generate, or show "Set online ordering URL in Settings"
Set your **Online ordering page URL** as a full URL starting with `https://`, under **Settings → General Online Ordering Settings**, then try again. See [QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/).
## Table names aren't showing on my POS draft orders
Check that the table's **dining area** has **"Add tables to POS draft orders"** turned on. It's a per-area setting, so it has to be enabled on the area the table belongs to. Areas with it on show a "POS draft orders" badge. See [POS Draft Orders](/docs/table-management/pos-draft-orders/).
## A table is listed under "Unassigned Tables"
That table isn't linked to a dining area. Re-create it in an area so it stays organised. See [Dining Areas & Tables](/docs/table-management/dining-areas-and-tables/).
## I deleted a dining area and its tables disappeared
That's expected. Deleting an area also deletes every table in it, and the action can't be undone. You're warned before it happens. Re-create the tables (the [Add Tables](/docs/table-management/adding-tables-in-bulk/) flow is quickest) if needed.
## Nothing shows on the Open Tabs page
The [Open Tabs](/docs/table-management/open-tabs/) page only lists open Shopify draft orders from POS that have a table assigned. If it's empty, no drafts with a table are open yet. If you see a note that open drafts were found "but none had a table assignment", those drafts were saved without a table being selected in the POS Cafe tile. Open Tabs also only reads the 100 most recently updated open drafts.
Online orders placed from a table QR code never appear on Open Tabs: they're regular Shopify orders, not drafts.
## Does the "Add tables to POS draft orders" setting affect Open Tabs?
No. The table is recorded on the order whenever staff select it in the POS Cafe tile, so drafts show on Open Tabs whether the setting is on or off. The setting only adds the table's name as a $0 line on the order.
## I renamed a table: do I need to reprint its QR code?
Yes, we recommend it. Each table's link includes the table's name, and QR codes are generated from the saved name when you download them. After renaming, re-download and reprint that area's QR codes so the printed codes match. See [QR Codes & Online Ordering URLs](/docs/table-management/qr-codes-and-online-ordering-urls/).
## I see tables or areas from a different location
Tables and areas are scoped to their location and shouldn't appear under another. If you ever see one that doesn't belong, contact support with the location and table names.
## Some tables are missing, and I see "Some tables may not be shown"
Table Management shows up to 100 dining areas and 250 tables for each location. If a location has more, you'll see **Some tables may not be shown**, and the extra areas or tables aren't listed in Table Management or in the POS table selector. Remove dining areas or tables you no longer use to bring the location under the limit.
---
# Choosing How to Print Order Tickets
Section: Order Tickets & KDS
URL: https://poscafe.app/docs/order-tickets-kds/choosing-how-to-print/
Compare the ways POS Cafe can send order tickets to your kitchen and barista, from cloud receipt printers and Shopify POS printers to Fresh KDS screens, and pick the right one for your cafe.
POS Cafe can send order tickets to your prep areas in three ways. They can be combined, and every one of them routes each item by its prep area, so a drink goes to the barista and a sandwich to the kitchen. This page compares them so you can pick the setup that fits your cafe, then follow that option's guide.
## The short version
- **Most cafes:** an Epson or Star receipt printer on **POS Cafe's print server**. It prints every order at the location, including online and kiosk orders and open tabs, with nothing to install on the POS device.
- **Paperless kitchens:** **Fresh KDS** screens, on their own or alongside printers.
- **A single counter with a printer already connected to the iPad:** a **Shopify POS printer**. Quick to set up, but it only prints the orders taken on that device.
:::note
Shopify has removed its receipt code editor, so customising the Shopify POS receipt itself to print as an order ticket is no longer possible. See [Shopify POS Receipts](/docs/order-tickets-kds/shopify-pos-receipts/) if you used that option.
:::
## Side by side
| Feature | **Epson or Star print server** | **Shopify POS printer** | **Fresh KDS** |
| :-- | :-- | :-- | :-- |
| What it is | The printer collects tickets from POS Cafe over the internet (Epson Server Direct Print or Star CloudPRNT). | POS Cafe prints through the Shopify POS app on the receipt printer connected to that POS device. | Kitchen and barista display screens that replace paper tickets. |
| Which orders it gets | Every order at the location: Shopify POS, online ordering, Cloudshelf kiosks, and open tabs when they're saved. | Orders taken on that POS device only. No online orders. | Every order at the location, like the print server. |
| Before the customer pays | Yes: tickets print when a draft is saved, or on tap with Send to prep. | Only with the Send to prep tile. Nothing prints when a draft is saved. | Yes, as for the print server. |
| Hardware | An Epson TM-Intelligent or Star CloudPRNT printer on your network. | Any receipt printer Shopify POS supports, already connected to the device. | Fresh KDS screens and a Fresh KDS subscription. |
| Shopify plan | Any. | Any, with Shopify POS 11.11 or later. | Any. |
| Per prep area | Yes, and one printer can serve several. | Yes. One Shopify POS printer per location. | Yes, per screen. |
| Copies, one item per ticket, pause and resume | Yes. | Copies and one item per ticket; pause and resume. | Managed in Fresh KDS. |
| Setup guide | [Epson Server Direct Print](/docs/order-tickets-kds/epson-server-direct-print/), [Star CloudPRNT](/docs/order-tickets-kds/star-cloudprnt/) | [Shopify POS Printer](/docs/order-tickets-kds/shopify-pos-printer/) | [Fresh KDS](/docs/order-tickets-kds/fresh-kds/) |
## Combining them
Printers and screens at a location are all managed from the same place, and an item goes to every printer or screen that has its prep area. Common combinations:
- **Print server printer plus Fresh KDS**: the kitchen works from a screen while the barista keeps a printed docket, or the screen shows every order and the printer prints only the prep areas you choose.
- **Print server printer plus a Shopify POS printer**: the print server covers online orders and open tabs, and the counter's own printer gives staff an immediate docket for walk-up orders.
## Things to know before you choose
**Prep areas come first.** Every option routes by prep area, so set up your [prep areas](/docs/getting-started/prep-areas/) and [assign them to your products](/docs/getting-started/assigning-modifiers-prep-areas/) before adding a printer or screen.
**Only POS Cafe items are routed** unless you set up [Native Product Routing](/docs/order-tickets-kds/native-product-routing/) for other Shopify products.
**Managing printers.** Printers of every type are added, paused and checked on the location's [Receipt Printers Page](/docs/order-tickets-kds/receipt-printers-page/).
**Table service and open tabs.** The [Send to prep](/docs/shopify-pos-setup/send-to-prep/) tile sends a round to the kitchen before payment on any of these options.
---
# Receipt Printers Page
Section: Order Tickets & KDS
URL: https://poscafe.app/docs/order-tickets-kds/receipt-printers-page/
Add, edit, pause and check the receipt printers at a POS Cafe location, and see which prep areas are covered.
The POS Cafe **Receipt printers** page is where you add and manage the receipt printers at one location. It shows how each printer is doing, which prep areas are covered, and how many tickets are waiting to print, and it lets you pause, resume, re-sync or remove a printer.
## Open the Receipt printers page
1. In your Shopify admin, go to **Apps → POS Cafe → Locations**.
2. Select your location.
3. In the **Devices** section, click **Receipt Printers** (Set up and manage receipt printers for this location).
Every change on this page is saved straight away. There's no save bar and no **Save changes** button.
At a location with a [Shopify POS printer](/docs/order-tickets-kds/shopify-pos-printer/), a reminder at the top of the page says: "Add the Send to prep tile to your POS home screen so staff can see and reprint kitchen tickets." The tile prints tickets after staff tap **Done** and lists any that didn't print. Click the reminder's close button to dismiss it; it stays hidden in that browser.
*Captured September 2026.*
## Location summary
The card at the top of the page shows the location's name, address and time zone, plus four figures:
| Figure | What it shows |
| :-- | :-- |
| **Printers** | How many printers this location has, with how many are paused or need attention. |
| **Tickets waiting** | Tickets queued on the print server that haven't printed yet, across all printers. |
| **Prep areas covered** | How many of your prep areas have an active printer or Fresh KDS screen here, for example **2 of 3**. |
| **KDS screens** | How many Fresh KDS screens are set up at this location. |
Use the refresh button to check printer status again, and click **POS devices** to open the location's registered POS devices (see [Registering POS Devices](/docs/shopify-pos-setup/registering-pos-devices/)). If the location has Fresh KDS screens, they're listed under the figures with a **KDS settings** link.
### Some items won't print at this location
If a prep area has nothing to print it, the card shows a **Some items won't print at this location** warning that lists each prep area and the reason:
| Reason shown | What it means | What to do |
| :-- | :-- | :-- |
| **[printer] is paused** | The only printer for this prep area is paused. | Resume the printer when you're ready, or add the prep area to another printer or KDS screen. |
| **only a Shopify POS printer, for its own orders** | Only a [Shopify POS Printer](/docs/order-tickets-kds/shopify-pos-printer/) serves this prep area, so it prints only orders taken on its own POS device. | Add the prep area to an Epson or Star printer, or a Fresh KDS screen, if other orders need it. |
| **used by your menu, but no printer or KDS here serves it** | Items in your menu use this prep area, but no printer or KDS screen at this location has it. | Edit a printer and tick the prep area under **Prep Areas**, or add it to a Fresh KDS screen. |
| **no active printer or KDS** | No active printer or KDS screen at this location serves this prep area. | Add the prep area to an active printer or KDS screen. |
| **Items without a prep area: no active printer here** | POS Cafe items with no prep area normally print on every active Epson or Star printer, and there isn't one. | Resume or add a printer, or give those items a prep area. |
If POS Cafe can't reach the print server, you'll see "Couldn't reach the print server, so live printer status isn't shown. Printing isn't affected."
## The Printers list
Each printer shows its name, its type, one status badge and up to four of its prep areas. The type appears under the name as **Epson · print server**, **Star · print server** or **Shopify POS · prints on this POS**. Click a printer to expand it, or use **Expand all** and **Collapse all**. The **…** button on each printer opens its actions: **Edit**, **Pause** or **Resume**, **Clear waiting tickets**, **Re-sync with print server** and **Remove**.
### Printer status badges
| Badge | What it means | What to do |
| :-- | :-- | :-- |
| **Online** | The printer is checking in with the print server and printing normally. | Nothing. |
| **Ready** | A Shopify POS printer. It prints on the POS device it's paired with, and its status is shown in Shopify POS. | Nothing. See [Shopify POS Printer](/docs/order-tickets-kds/shopify-pos-printer/). |
| **Paused** or **Paused · 3 waiting** | You've paused the printer. New tickets aren't printed on it. The number is how many earlier tickets are waiting. | Resume it when you're ready (see [Pause and resume a printer](#pause-and-resume-a-printer)). |
| **Offline** | The printer hasn't checked in recently. | Check that it's switched on and connected to the internet. Waiting tickets print when it reconnects. |
| **Not connected yet** | The printer has never connected to the print server. | Enter the **Setup details** in the printer's own settings. See [Epson Server Direct Print](/docs/order-tickets-kds/epson-server-direct-print/) or [Star CloudPRNT](/docs/order-tickets-kds/star-cloudprnt/). |
| **Not on print server** | The print server doesn't know about this printer, so it can't print. | Click **Re-sync**. |
| **Out of sync** | The print server has a different paused or active setting from the one in POS Cafe. | Click **Re-sync**. |
| **Inactive** | The printer is inactive and doesn't print. | Contact POS Cafe support if you weren't expecting this. |
| **Status unavailable** | POS Cafe couldn't reach the print server to check this printer. | Try again shortly with the refresh button. Printing isn't affected. |
| **Checking…** | The page is still loading the printer's status. | Wait a moment. |
### Printer details
When you expand a printer you'll see its actions (**Edit**, **Pause** or **Resume**, **Re-sync** and **Remove**) and three sections:
| Section | What it shows |
| :-- | :-- |
| **Status** | What's going on with the printer and what to do, for example "Printing normally. Last checked in 2 min ago." If tickets can be cleared, a **Clear 3 waiting tickets** button appears here. |
| **What it prints** | Which prep areas it prints and from which POS devices, for example **Coffee and Food items from all POS devices**, then the copies and ticket layout, for example **1 copy · one ticket per order**. |
| **Setup details** | For Epson and Star printers: the **Server URL**, **Username** and **Password** to enter in the printer's settings. Each has a copy button, and the password has a show button. Shopify POS printers have nothing to enter. |
## Add or edit a printer
Click **Add printer** at the top of the page to open the **Add new printer** window. To change a printer, click **Edit** in its details or in its **…** menu.
| Field | What it does |
| :-- | :-- |
| **Printer Name** | A name you'll recognise, such as **Barista Printer**. For a Shopify POS printer this field is called **Printer name in Shopify POS**. |
| **Printer Type** | **Epson**, **Star** or **Shopify POS (Printing API)**. Choose the type that matches your printer: Epson and Star printers each get their own **Server URL**. |
| **Copies** | How many copies of each ticket to print, from 1 to 3. |
| **Print Individual Receipts (optional)** | Prints one item per ticket. Ideal if you use sticker labels that go on individual cups. |
| **Prep Areas** | The prep areas this printer prints. At least one is required. |
| **Device Source** | Epson and Star printers only. **Print from all POS devices (recommended)**, or **Print from specific POS devices only (advanced)** to choose registered POS devices and **POSCafe Online (Web)** orders. See [Registering POS Devices](/docs/shopify-pos-setup/registering-pos-devices/). |
Click **Add printer** (or **Save** when editing). The window closes once the printer is saved, and you'll see **Printer added** or **Printer saved**.
:::caution[Changing the Printer Type]
If you change an Epson printer to Star (or the other way round), its **Server URL** changes. Copy the new **Server URL** into the printer's settings. Editing a paused printer keeps it paused.
:::
:::note
A location can have only one Shopify POS printer. If you try to add a second one, you'll see "This change would leave the location's printers invalid (for example, a second Shopify POS printer)".
:::
After you add a Shopify POS printer, the page shows: "POS devices pick this up within 4 hours. To update a device now, fully close and reopen the Shopify POS app, or open Send to prep and tap Check printer setup again." After you resume one, it says the same with "within 15 minutes". Devices where Send to prep was already available usually pick up a new printer within about an hour.
## Pause and resume a printer
Pausing a printer stops it receiving new tickets, for example while it's being repaired or a station is closed. Other printers and Fresh KDS screens keep working.
1. Click **Pause** in the printer's details or its **…** menu.
2. Read the **Pause printer?** window, then click **Pause printer**.
While a printer is paused:
- **Tickets for new orders aren't printed on it.** They are not saved for later: orders taken while it's paused won't print on this printer when you resume.
- **Tickets that were already waiting are kept.** They print when you resume, as long as that's within 24 hours of each order.
- **Send to prep** skips the paused printer. See [Send to Prep](/docs/shopify-pos-setup/send-to-prep/).
:::caution
If no other printer or KDS screen at the location serves one of the printer's prep areas, the **Pause printer?** window warns you: "No other printer or KDS here serves [prep area]. Tickets for those items won't print anywhere while this printer is paused."
:::
To resume, click **Resume**, then **Resume printer**. If tickets are waiting, tick **I understand these 3 tickets will print when this printer resumes.** first. You can clear the waiting tickets instead (see below) if you don't want them to print.
## Clear waiting tickets
Epson and Star printers can have tickets waiting on the print server. To remove them, click **Clear waiting tickets** in the printer's **…** menu (or the **Clear 3 waiting tickets** button in its **Status** section). The **Waiting tickets** window shows how many there are.
1. Click **Clear waiting tickets**.
2. Check the count, then click **Clear 3 tickets**, or **Keep them** to leave them.
Cleared tickets won't print, and this can't be undone. What gets cleared depends on the printer:
| Printer | What is cleared |
| :-- | :-- |
| **Paused** | Every waiting ticket. |
| **Active** | Only tickets not yet sent to the printer. A ticket printing right now finishes. |
If every waiting ticket has already been sent to an active printer, you'll see "Every waiting ticket has already been sent to the printer, so there's nothing to clear here. Pause the printer to clear its whole queue."
## Re-sync with print server
**Re-sync with print server** sends the printer's current setting (active or paused) to the print server again. Use it when the printer shows **Out of sync** or **Not on print server**. It doesn't change the setting or clear waiting tickets. Click **Re-sync**, then **Re-sync** in the window. You'll see **Printer re-synced**.
If you save a printer and the print server isn't updated, the page shows **Saved, but the print server hasn't been updated yet** with a **Retry** button. Your change is saved; click **Retry** to send it to the print server.
## Remove a printer
Click **Remove**, then **Remove printer**. The printer stops printing straight away, and tickets waiting for it won't print. You can add it again later, but it will have new setup details, so you'll need to enter them in the printer again.
---
# Epson Server Direct Print
Section: Order Tickets & KDS
URL: https://poscafe.app/docs/order-tickets-kds/epson-server-direct-print/
Configure your Epson receipt printer for Server Direct Print with POS Cafe.
Use this guide to configure your Epson receipt printer for Server Direct Print via your Shopify POS Cafe app.
Video: POS Cafe - Epson Server Direct Print: Quick-Start Guide (https://www.youtube-nocookie.com/embed/eaM4rLFVnW4)
## What is Epson Server Direct Print
Epson Server Direct Print is a feature on certain Epson models that allows your receipt printer to connect directly with the POS Cafe server to receive print jobs over the network.
## Compatible Printer Models
Epson Server Direct Print is available on TM-Intelligent models, which include the TM-DT series and TM-i series:
| TM-DT Series | TM-i Series | Sticky Label Printers |
| :-- | :-- | :-- |
| TM-T88V-DT | TM-T88V-i | TM-L100 |
| TM-T70II-DT | TM-T70-i | |
| TM-H6000IV-DT | TM-T82II-i | |
| | TM-L90-i | |
| | TM-m30III | |
## Prerequisites
- Epson TM-Intelligent thermal receipt printer (see above)
- Printer connected to your local network via Ethernet or Wi-Fi
- A computer on the same network with a web browser
- Printer **serial number** (default admin password) - sticker under the back cover
- Your Shopify POS Cafe admin credentials
## Step 1: Configure in Shopify POS Cafe
1. In Shopify admin, go to **Apps → POS Cafe → Locations**.
2. Select your location, then under **Devices** click **Receipt Printers**.
3. Click **Add printer**. The **Add new printer** window opens.
4. Fill in the printer details:
- **Printer Name:** e.g., Barista Printer
- **Printer Type:** leave this set to **Epson** (the default).
- **Prep Areas:** select one or more prep areas. Items assigned to these prep areas are sent to this printer.
5. Click **Add printer**. The printer is saved straight away; there's no save bar.
Your printer now appears in the **Printers** list as **Epson · print server**. Click it to expand it: under **Setup details** you'll find its **Server URL**, **Username** and **Password**. You'll paste these into the printer in Step 5, using the copy button beside each value (click the show button to see the password).
:::tip
[Receipt Printers Page](/docs/order-tickets-kds/receipt-printers-page/) explains the printer statuses (such as **Online**, **Offline** and **Not connected yet**) and how to pause a printer or clear waiting tickets.
:::
### Optional printer settings
The **Add new printer** window also includes these settings. To change them later, click **Edit** in the printer's details or its **…** menu, make your changes, then click **Save**.
| Setting | What it does |
| :-- | :-- |
| **Copies** | How many copies of each ticket the printer prints, from 1 to 3. |
| **Print Individual Receipts (optional)** | Prints one item per ticket. Ideal if you use sticker labels that go on individual cups. |
| **Device Source** | **Print from all POS devices (recommended)** sends orders from every POS device at this location. **Print from specific POS devices only (advanced)** lets you choose which registered POS devices (and **POSCafe Online (Web)** orders) print here. To see your registered devices, click **POS devices** on the **Receipt printers** page. |
## Step 2: Print the Network Configuration Sheet
1. **Power off** the printer using its main switch.
2. **Wait 30 seconds**, then turn the printer back on.
3. The network configuration sheet will print. (Can take up to 30 seconds.)
Locate the **IP Address** on the sheet - this is your printer's network address.
## Step 3: Access the Printer's Web Portal
1. Open a web browser on your computer.
2. Enter `http://` in the address bar.
3. Press **Enter** to load the settings page.
## Step 4: Administrator Login & TMI Settings
1. Click **Advanced Settings**:

2. Select **Administrator Login**:

3. Enter the printer's **serial number** as the password:

4. Navigate to **TMI Settings**:

5. Next, choose **Server Direct Print**:

## Step 5: Link Printer to Server Direct Print
1. Choose **Enable** from the dropdown list next to **Server Direct Print**.
2. Copy the **Server URL** from the printer's **Setup details** on the POS Cafe **Receipt printers** page.
3. Paste it into the printer's **URL** field under Server Direct Print.
4. Copy the **Username** from POS Cafe and paste into the printer's **ID**.
5. Copy the **Password** from POS Cafe and paste into the printer's **Password**.
6. Click **Apply**, then allow the printer to restart.
## Step 6: Verify Prep Area Assignments
Prep areas are assigned to products in POS Cafe, not in Shopify's collections. Make sure each item has the correct prep area:
- **Several products at once:** go to **Apps → POS Cafe → Cafe Collections**, open a collection, select the products, then click **Assign prep area**. The **Prep area** column shows each product's current prep area.
- **One product:** open the product in POS Cafe and click **Edit Prep Area** on its **Prep Area** card.
## Step 7: Test Printing
1. Open **POS Cafe** on your POS device.
2. Add a product with modifiers and complete checkout.
3. Add another product assigned to a different prep area and checkout again.
4. Confirm separate receipts print for each prep area.
## Printing Speed & Latency
**Note:** It can sometimes take up to **5-7 seconds** for Shopify to send webhooks when a new order is placed on POS. Your printer polls our server every **5 seconds** for new print jobs, so combined it can take around **10-12 seconds** for an order to actually print. Usually it's faster, but the total time depends on Shopify's webhook delivery speed.
## Troubleshooting
| Issue | Solution |
| :-- | :-- |
| **Config Sheet Not Printing** | Ensure the printer is powered and networked; hold **FEED** until you see printing activity. |
| **Cannot Access Web Portal** | Verify the IP address matches the configuration sheet and that your computer is on the same subnet. |
| **Login Fails** | Confirm you're using the printer's **serial number** as the password; locate it under the back cover sticker. |
| **Print Jobs Not Received** | Check that the printer's `URL`, `ID`, and `Password` exactly match the **Server URL**, **Username** and **Password** under the printer's **Setup details** in POS Cafe, that the printer shows **Epson · print server** under its name, and ensure `Standard` mode is selected. |
| **Printer Shows Offline, Not Connected Yet or Paused** | See the status badges in [Receipt Printers Page](/docs/order-tickets-kds/receipt-printers-page/#printer-status-badges). A paused printer doesn't print new orders until you resume it. |
| **Print Errors** | Review logs under **Maintenance → Logs** in the web portal for error codes; restart the printer afterward. |
| **Factory Reset** | Press and hold **FEED**, turn off the printer, then with **FEED** held, turn on the printer and keep holding for 10 seconds to restore defaults. |
---
# Star CloudPRNT
Section: Order Tickets & KDS
URL: https://poscafe.app/docs/order-tickets-kds/star-cloudprnt/
Configure your Star receipt printer for CloudPRNT with POS Cafe.
Use this guide to configure your Star receipt printer for CloudPRNT via your Shopify POS Cafe app.
Video: POS Cafe - Star CloudPRNT: Quick-Start Guide (https://www.youtube-nocookie.com/embed/waYM9ouZvNg)
## What is Star CloudPRNT
Star CloudPRNT is a web-based printing protocol supported on select Star printers that allows your device to fetch receipt jobs directly from the POS Cafe server over HTTP.
## Compatible Printer Models
CloudPRNT is available on the following Star models:
| Thermal Printers | mPOS Printers | Sticky Label Printers | Matrix Printers |
| :-- | :-- | :-- | :-- |
| TSP100IV | mC-Print2 | mC-Label3 | SP700 |
| TSP143IV | mC-Print3 | | |
:::note
For a full list of supported models, see the [Star CloudPRNT documentation](https://star-emea.com/products/cloudprnt/).
:::
## Prerequisites
- Star CloudPRNT-capable receipt printer (see above)
- Printer connected to your local network via Ethernet or Wi-Fi
- A computer on the same network with a web browser
- Printer **serial number** (default admin password) - sticker under the back cover or bottom plate
- Your Shopify POS Cafe admin credentials
## Step 1: Configure in Shopify POS Cafe
1. In Shopify admin, go to **Apps → POS Cafe → Locations**.
2. Select your location, then under **Devices** click **Receipt Printers**.
3. Click **Add printer**. The **Add new printer** window opens.
4. Enter a **Printer Name**, e.g., Star Printer.
5. **Set Printer Type to Star.** Open the **Printer Type** dropdown and choose **Star**.
6. Under **Prep Areas**, select one or more prep areas. Items assigned to these prep areas are sent to this printer.
7. Click **Add printer**. The printer is saved straight away; there's no save bar.
:::caution[Choose Star as the Printer Type]
**Printer Type** defaults to **Epson**. POS Cafe builds the printer's **Server URL** from the Printer Type, and a Star printer set up with an Epson URL won't receive print jobs. If you've already added the printer as Epson, click **Edit** in the printer's details or its **…** menu, change **Printer Type** to **Star**, click **Save**, and copy the new **Server URL**.
:::
Your printer now appears in the **Printers** list as **Star · print server**. Click it to expand it: under **Setup details** you'll find its **Server URL**, **Username** and **Password**. You'll paste these into the printer in Step 5, using the copy button beside each value (click the show button to see the password).
:::tip
[Receipt Printers Page](/docs/order-tickets-kds/receipt-printers-page/) explains the printer statuses (such as **Online**, **Offline** and **Not connected yet**) and how to pause a printer or clear waiting tickets.
:::
### Optional printer settings
The **Add new printer** window also includes these settings. To change them later, click **Edit** in the printer's details or its **…** menu, make your changes, then click **Save**.
| Setting | What it does |
| :-- | :-- |
| **Copies** | How many copies of each ticket the printer prints, from 1 to 3. |
| **Print Individual Receipts (optional)** | Prints one item per ticket. Ideal if you use sticker labels that go on individual cups. |
| **Device Source** | **Print from all POS devices (recommended)** sends orders from every POS device at this location. **Print from specific POS devices only (advanced)** lets you choose which registered POS devices (and **POSCafe Online (Web)** orders) print here. To see your registered devices, click **POS devices** on the **Receipt printers** page. |
## Step 2: Print the Network Configuration Sheet
1. **Power off** the printer using its main switch.
2. **Wait 30 seconds**.
3. **Press and hold** the **FEED** button, and turn the printer back on.
4. **Continue pressing** the **FEED** button until the network configuration sheet prints.
5. The network configuration sheet will print. (Can take up to 30 seconds.)
*Captured July 2025.*
Locate the **IP Address** on the sheet - this is your printer's network address.
## Step 3: Access the Printer's Web Portal
1. Open a web browser on your computer.
2. Enter `http://` in the address bar.
3. Press **Enter** to load the settings page.
*Captured July 2025.*
## Step 4: Administrator Login & CloudPRNT Settings
1. Click **Login**:

*Captured July 2025.*
2. Enter **Username** & **Password**:

*Captured July 2025.*
3. Click **CloudPRNT** on the menu:
## Step 5: Link Printer to CloudPRNT
1. Choose **Enable** from the dropdown list under **CloudPRNT Service**.
2. Copy the **Server URL** from the printer's **Setup details** on the POS Cafe **Receipt printers** page and paste it into the printer's **Server URL** field.
3. Copy the **Username** from POS Cafe and paste into the printer's **User Name** field.
4. Copy the **Password** from POS Cafe and paste into the printer's **Password** field.
5. Click **Submit**.
*Captured July 2025.*
## Step 6: Saving Your Settings
1. Click **Save**:

*Captured July 2025.*
2. Click **Execute**:

*Captured July 2025.*
3. Close browser and wait for printer to reboot:

*Captured July 2025.*
:::note
The printer will now reboot and apply the new settings. It will also print out a new **network configuration** sheet.
:::
## Step 7: Verify Prep Area Assignments
Prep areas are assigned to products in POS Cafe, not in Shopify's collections. Make sure each item has the correct prep area:
- **Several products at once:** go to **Apps → POS Cafe → Cafe Collections**, open a collection, select the products, then click **Assign prep area**. The **Prep area** column shows each product's current prep area.
- **One product:** open the product in POS Cafe and click **Edit Prep Area** on its **Prep Area** card.
## Step 8: Test Printing
1. Open **POS Cafe** on your POS device.
2. Add a product with modifiers and complete checkout.
3. Add another product assigned to a different prep area and checkout again.
4. Confirm separate receipts print for each prep area.
## Printing Speed & Latency
**Note:** Star printers poll for new jobs every 5 seconds by default. Due to webhook and network delays, it may take **5-10 seconds** for an order to print from POS checkout.
## Troubleshooting
| Issue | Solution |
| :-- | :-- |
| **Config Sheet Not Printing** | Ensure the printer is powered and networked; hold **FEED** during power-on. |
| **Cannot Access Web Interface** | Verify the IP address and that your computer is on the same subnet. |
| **Login Fails** | Use the printer's **serial number** as password; find it on the sticker. |
| **Print Jobs Not Received** | Check CloudPRNT is enabled and that the URL, username and password match the **Server URL**, **Username** and **Password** under the printer's **Setup details** in POS Cafe. Also check the printer shows **Star · print server** under its name; an Epson URL won't work on a Star printer. |
| **Printer Shows Offline, Not Connected Yet or Paused** | See the status badges in [Receipt Printers Page](/docs/order-tickets-kds/receipt-printers-page/#printer-status-badges). A paused printer doesn't print new orders until you resume it. |
| **Print Errors** | Review logs under **Maintenance → Logs** in the Web Interface; restart the printer afterward. |
| **Factory Reset** | Hold **FEED** for 5 seconds at power-on to restore defaults. |
---
# Shopify POS Printer
Section: Order Tickets & KDS
URL: https://poscafe.app/docs/order-tickets-kds/shopify-pos-printer/
Print POS Cafe prep tickets on the receipt printer connected to a Shopify POS device, with no print server setup.
A POS Cafe **Shopify POS printer** prints prep tickets on the receipt printer that's already connected to a Shopify POS device. POS Cafe sends the ticket through Shopify POS, so there's no server URL, username or password to enter in the printer.
## How it differs from other printers
| Option | How it prints | What it prints |
| :-- | :-- | :-- |
| **Shopify POS printer** (this article) | Through the Shopify POS app, on the receipt printer connected to that POS device. | POS Cafe prep tickets for orders taken on that POS device. |
| [Epson Server Direct Print](/docs/order-tickets-kds/epson-server-direct-print/) and [Star CloudPRNT](/docs/order-tickets-kds/star-cloudprnt/) | The printer collects tickets from the POS Cafe print server over the internet. | Tickets for every order at the location, including online orders and saved open tabs. |
## Requirements
- **Shopify POS 11.11.0 or later** on each POS device that prints.
- **A receipt printer connected to the POS device in Shopify POS**, under **Connectivity → Receipt printer**.
- **One Shopify POS printer per location.** It stands for the printer connected to whichever POS device takes the order, so each device prints its own orders on its own printer.
- **At least one prep area** for the printer.
## Set up a Shopify POS printer
1. **Check the printer name.** On the POS device, open **Connectivity → Receipt printer** in Shopify POS and note the printer's name exactly as shown.
2. **Open the Receipt printers page.** In your Shopify admin, go to **Apps → POS Cafe → Locations**, select your location, then under **Devices** click **Receipt Printers**.
3. **Add the printer.** Click **Add printer**, then set **Printer Type** to **Shopify POS (Printing API)**.
4. **Enter the name.** In **Printer name in Shopify POS**, enter the name from step 1.
5. **Choose the settings.** Select the **Prep Areas** this printer should print, set **Copies** (1 to 3) and turn on **Print Individual Receipts (optional)** if you want one item per ticket.
6. **Save.** Click **Add printer**.
The window explains how the printer is chosen on each device: "If exactly one printer is connected, it is selected automatically. If several are connected and this name does not identify one uniquely, staff will choose once on that POS device and POS Cafe will remember the choice locally." **Device Source** isn't shown for this printer type.
On the [Receipt printers page](/docs/order-tickets-kds/receipt-printers-page/), the printer shows **Shopify POS · prints on this POS** and the **Ready** badge. Its status is shown in Shopify POS, not in POS Cafe.
### When POS devices pick up the new printer
After you add a Shopify POS printer, the Receipt printers page shows: "POS devices pick this up within 4 hours. To update a device now, fully close and reopen the Shopify POS app, or open Send to prep and tap Check printer setup again."
Devices where Send to prep was already available usually pick up the change within about an hour. To start printing straight away on a device, either fully close and reopen Shopify POS, or (if you've added the **Send to prep** tile) tap the tile with an empty cart and tap **Check printer setup again**. You'll see **Printer setup updated.** when the device has picked up the change.
## What a Shopify POS printer prints
| When | What prints |
| :-- | :-- |
| Staff tap **Send to prep** on the POS device | The new items in the cart for this printer's prep areas, on the printer connected to that device, usually about a second after the tap. Staff don't need to wait. See [Send to Prep](/docs/shopify-pos-setup/send-to-prep/). |
| A sale is completed on the POS device | An automatic prep ticket for this printer's prep areas. It prints from the **Order Complete** screen, or from the **Send to prep** tile if staff tap **Done** first (see [Tap Done straight away](#tap-done-straight-away)). |
| Staff re-send a completed order | The whole order again, from **Re-send all to prep** on the Order Complete screen or **Re-send to prep** on the order's details. |
A Shopify POS printer never prints online orders, and it doesn't print when a cart is saved as a draft or open tab. To print a round on it before the customer pays, use **Send to prep**. If an Epson or Star printer (or a Fresh KDS screen) also has the same prep area, the item goes to both.
:::tip[Add the Send to prep tile]
Add the **Send to prep** tile to the Shopify POS Home screen on every device at a location with a Shopify POS printer, even if you don't send orders before payment. The tile finishes tickets after **Done** is tapped and lets staff see and reprint any ticket that didn't print. See [Add the Send to prep tile](/docs/shopify-pos-setup/send-to-prep/#add-the-send-to-prep-tile).
:::
### The automatic ticket after checkout
When a sale is completed, the Order Complete screen shows a **Send to prep** section that prints the ticket automatically. It shows **Printing prep ticket…**, then a message such as "1 copy sent to Kitchen. You can tap Done." If the order has nothing for this printer, it shows "No new items were assigned to this printer." If some items were already printed on this printer with Send to prep, they usually aren't printed again. When POS Cafe can't confirm what was printed, it prints them anyway, so the prep team may occasionally get a repeated ticket.
### Tap Done straight away
On a POS device where the **Send to prep** tile is on the Home screen, staff can tap **Done** on the Order Complete screen at any moment, even before the ticket has printed. The tile takes over and prints the ticket within a few seconds.
If the tile isn't on the device's Home screen, the Order Complete screen says "Keep this screen open until it prints. Tip: add the Send to prep tile to your home screen so tickets finish after Done." Wait until the ticket has printed before tapping **Done**, and add the tile when you can.
If the POS device is offline or the printer isn't available, the Order Complete screen tells you what will happen:
| Message | What it means |
| :-- | :-- |
| "Offline. The home screen prints this ticket when you're back online; after 30 minutes it will need a tap. You can tap Done." | The tile prints the ticket when the device reconnects. If that takes more than 30 minutes, it's listed on the tile for you to print. |
| "The printer isn't available. The home screen prints this ticket when it's back; after 30 minutes it will need a tap. You can tap Done." | The tile prints the ticket when the printer is back. If that takes more than 30 minutes, it's listed on the tile for you to print. |
| "Waiting for an internet connection. Automatic printing will resume when this POS device reconnects." | Shown when the Send to prep tile isn't on this device. Keep the screen open until it prints. |
:::note
If the **Send to prep** section doesn't appear on the Order Complete screen, fully close and reopen Shopify POS, and check that Shopify POS and the POS Cafe app are up to date.
:::
## Tickets waiting on the Send to prep tile
The **Send to prep** tile finishes any ticket after checkout that the Order Complete screen didn't print, for example because staff tapped **Done** early, the printer was off or the device was offline. It tries again after a few seconds, then every couple of minutes. With an empty cart, the tile shows what's happening:
| Tile shows | What it means |
| :-- | :-- |
| **Printing 1 prep ticket…** | The tile is printing a waiting ticket now. |
| **1 ticket waiting for printer** | The ticket is waiting for the printer to be available. It's retried automatically. |
| **Offline · 1 ticket waiting** | The POS device is offline. The ticket prints when it reconnects. |
| **1 ticket not printed · tap to print** | The ticket still hasn't printed, or its sale is more than 30 minutes old. Tap the tile to review it. |
A ticket whose sale is more than 30 minutes old is never printed automatically, so the kitchen doesn't get a surprise late ticket. You may also see a reminder such as **Prep ticket not printed – tap Send to prep**.
### Print a waiting ticket
1. **Tap the Send to prep tile.** The **Prep tickets not printed** list opens: "These tickets from completed sales didn't print automatically. Print now sends them to this device's Shopify POS printer."
2. **Check with the preparation team.** Each entry shows the time of the sale and why it didn't print.
3. **Print or dismiss.** Tap **Print now** on an entry, or **Print all** when more than one is listed. If the ticket did print, tap **It printed — dismiss** and confirm.
**Print now** won't print a ticket twice if the printer already confirmed it: you'll see "This ticket was already printed." If a ticket reached its print limit, **Print now** re-sends the whole order to every printer and Fresh KDS screen at the location instead, so other stations may get a repeat. For a sale POS Cafe couldn't match to its order, **Print nearby orders again** reprints the orders around that time, which may repeat tickets.
| Message after printing | What it means |
| :-- | :-- |
| "Sent to the printer." | The ticket was sent to this device's Shopify POS printer. |
| "This ticket was already printed." | Nothing more to do. |
| "Not printed: nothing for this printer, or it is paused." | The order had nothing for this printer, or the printer is paused. |
| "The Shopify POS printer isn't available. Check it is on and connected, then try again." | Check the printer, then tap **Print now** again. |
| "Couldn't print yet. Check the connection and try again." | Check the device's internet connection, then try again. |
| "This ticket is already printing. Check again shortly." | Wait a moment and check the printer. |
| "Re-sent all items to 2 prep destinations." | The whole order was re-sent to every station (see above). |
### Reprints
If the printer doesn't confirm a Send to prep copy, the tile prints it again once automatically, then lists it so you can tap **Print now**. Tickets after checkout are retried by the tile and listed if they still don't print. One ticket prints at most five times. After that you'll see a message that it was "printed the most times allowed without the printer confirming it"; check the printer, and if the ticket is missing, tap **Re-send all to prep**.
## Pause a Shopify POS printer
You can pause a Shopify POS printer on the [Receipt printers page](/docs/order-tickets-kds/receipt-printers-page/#pause-and-resume-a-printer). "Pausing stops this POS device's printer from printing new tickets. Other printers and KDS keep working." Tickets for orders taken while it's paused aren't printed on it later.
After you resume it, POS devices pick up the change within 15 minutes. To update a device straight away, fully close and reopen Shopify POS, or tap **Check printer setup again** in Send to prep.
## Troubleshooting
| What you see | What to do |
| :-- | :-- |
| **Sent · not printed on this device**, or **1 ticket waiting for printer** | Check the printer is on, has paper and is connected to this POS device under **Connectivity → Receipt printer** in Shopify POS. The tile keeps trying; you can also tap it and use **Print now**. |
| "Sent to prep. More than one connected printer could be the prep printer: choose it, then Print now prints this device's copy." | Tap the tile, tap **Print now**, then tap **Use** next to the right printer. The device remembers the choice. Tap **Refresh connected printers** if it isn't listed. |
| "Sent to prep. This device's Shopify POS copy hasn't printed yet. Print now tries again." | Check the printer, then tap **Print now**. |
| "Sent to prep. This device's copy is too large for the Shopify POS printer, so it didn't print. Check the prep team has these items." | Send the cart in smaller rounds, or turn off **Print Individual Receipts (optional)** for this printer. |
| "The configured receipt printer is not connected to this POS device." | Connect the printer in Shopify POS, then reopen the order. |
| "Shopify POS printer paused or not set up – ticket not printed." | Resume the printer on the Receipt printers page, or check it's set up for this location. |
| "Not printed: nothing for this printer, or it is paused." | Check the printer's prep areas, or resume it on the Receipt printers page. |
---
# Fresh KDS
Section: Order Tickets & KDS
URL: https://poscafe.app/docs/order-tickets-kds/fresh-kds/
Connect POS Cafe to Fresh KDS to replace paper tickets with kitchen display screens.
POS Cafe integrates with [Fresh KDS](https://www.fresh.technology/partners/pos-cafe), a kitchen display system that replaces traditional paper tickets with digital order screens. This streamlines prep workflows by sending orders directly to kitchen or barista screens.
To open the Fresh KDS settings, go to **Apps → POS Cafe → Settings → Integrations → Fresh KDS**. The page is titled **Fresh KDS Integration**.
## Step 1: Connect Your Fresh KDS Account
1. Enter your API key in the **Fresh KDS API Key** field. You can find your API key in the Fresh KDS settings.
2. Click **Save & Verify**, then click **Add** in the **Add API Key** window. POS Cafe checks the key and securely links your Fresh KDS account.
Once connected, the key is shown (masked) as **Current API Key**. To replace it, click the pencil icon, enter the key in **New API Key**, click **Save & Verify**, then click **Update**. To disconnect, click **Remove**, then **Remove** again to confirm.
:::caution[Replacing the API key]
Replacing the Fresh KDS API key deletes all your location links and prep area assignments for Fresh KDS screens, and it can't be undone. You'll need to link your locations and choose prep areas again (steps 2 and 3).
:::
## Step 2: Link Your Shopify Locations
Once your account is connected, you must link each of your Shopify locations to the correct Fresh KDS location.
- In the **Connected Devices** table, use the dropdown in the **Linked Fresh KDS Location** column to assign a Fresh KDS location to each Shopify location, then click **Save changes**.
- Each Fresh KDS location can only be linked to one Shopify location. To undo a link, choose **Unlink KDS Location**.
- Only linked locations will be able to send order data to Fresh KDS.
:::note
You must link your locations before proceeding to set up devices.
:::
## Step 3: Set Up Fresh KDS Devices
After linking locations, you can view and configure KDS devices connected to each one.
- Click the device count under **KDS Devices** in the **Connected Devices** table to open the **Fresh KDS Devices** page. The count becomes a link once the location link is saved. You can also reach it from a location's page: **Apps → POS Cafe → Locations → [your location] → Fresh KDS Screens**.
- Each device shows its **Device**, **Type**, **Version**, **IP Address** and **Prep Area**.
- Use **Select Prep Areas** to choose which prep areas (e.g., Barista, Kitchen, Smoothie Bar) each screen receives. You can select more than one prep area for a single screen. Click **Save device settings** to save your choices.
### How orders appear on Fresh KDS
POS Cafe splits each order into tickets by **prep area** and **order type**. Each screen receives the tickets for the prep areas selected for it, and an order with mixed order types (for example, For Here and To Go items) arrives as separate tickets for each order type.
For online **Drive Thru** and **Curbside** orders, POS Cafe also sends any vehicle make, model and colour the customer entered (see [Asking for vehicle details](/docs/online-ordering/locations-hours-order-types-and-pickup/#asking-for-vehicle-details)). Fresh KDS shows vehicle details on Curbside orders; whether it shows them for Drive Thru depends on Fresh KDS. Vehicle details never hold up an order: if Fresh KDS refuses them, POS Cafe sends the ticket again without them so it still reaches your screens.
## Step 4: Create Webhooks in Fresh KDS
To ensure order and device updates reach POS Cafe, you need to set up **3 webhooks** in your Fresh KDS portal: one for devices, one for orders and one for order bumps. The three endpoint URLs, each with a **Copy** button, are on the **KDS Webhooks** card of the **Fresh KDS Integration** page (click the arrow to expand it).
For each of the 3 endpoint URLs:
1. Log in to the Fresh KDS Portal.
2. Go to the **Webhooks** section.
3. Click **Create Webhook**.
4. Enter a descriptive name that relates to the webhook, e.g., *"POS Cafe Devices Integration"*.
5. Paste in the matching endpoint URL from POS Cafe.
6. Under **Triggers**, select the triggers listed for that endpoint on the **KDS Webhooks** card. For the **Devices Endpoint**, select:
- Device Created
- Device Updated
- Device Deleted
7. Click **Create** to save.
### Endpoint URLs
| Endpoint | What it does |
| :-- | :-- |
| **Devices Endpoint** | Receives device changes from Fresh KDS, so your screens appear on the **Fresh KDS Devices** page. |
| **Orders Endpoint** | Receives order status updates from Fresh KDS. |
| **Order Bumps Endpoint** | Receives bump events when staff bump an order on a Fresh KDS screen. |
:::note
If your devices do not appear, double-check webhook setup and location linking.
:::
## Troubleshooting
### Fresh KDS tickets aren't appearing
Check each of the following:
- Your API key is connected (it shows as **Current API Key** on the **Fresh KDS Integration** page).
- The Shopify location that took the order is linked in the **Linked Fresh KDS Location** column.
- The screen has the item's prep area selected under **Select Prep Areas** on the **Fresh KDS Devices** page.
- The item has the correct prep area in POS Cafe (see the **Prep area** column in **Cafe Collections**).
- The item was added through POS Cafe. Other Shopify products only reach Fresh KDS if you've set them up with [Native Product Routing](/docs/order-tickets-kds/native-product-routing/).
---
# Native Product Routing
Section: Order Tickets & KDS
URL: https://poscafe.app/docs/order-tickets-kds/native-product-routing/
Route selected Shopify products added outside POS Cafe to your receipt printers and Fresh KDS prep areas.
Native Product Routing sends selected Shopify products that were added outside POS Cafe to your existing receipt printers and Fresh KDS prep areas. You choose exactly which products are included, and the feature stays disabled until you turn it on.
:::note
Existing POS Cafe products continue to print and appear on KDS normally, whether Native Product Routing is enabled or disabled.
:::
## Before you start
Make sure that:
- Your prep areas have been created in POS Cafe.
- Your receipt printers and/or Fresh KDS devices are connected to the correct Shopify locations and prep areas.
- The products you want to route are active and available on the sales channels where you plan to sell them.
- The POS Cafe tile is installed on the Shopify POS home screen if you use saved carts or draft orders.
## Recommended: pin the Prep Area metafield
We recommend pinning the **Prep Area** metafield. Once it is pinned, it appears directly on each product edit page in Shopify admin, making it much quicker to view or change a product's prep area.
1. From Shopify admin, go to **Settings → Metafields and metaobjects**.
2. Select **Products**.
3. Find **Prep Area** and click the pin icon beside it.
:::tip
Shopify displays pinned metafields directly on the relevant admin pages, so you won't need to open the full metafield list each time you edit a product.
:::
## Configure the products that should route
Repeat these steps for every Shopify product that you want POS Cafe to route:
1. From Shopify admin, open **Products** and select the product.
2. Add the exact product tag `poscafe_route`.
3. In the product's metafields, set **Prep Area** to one of your configured POS Cafe prep areas.
4. Click **Save**.
:::caution
A product without the `poscafe_route` tag will not be included. If any tagged product has a blank or unrecognised prep area, POS Cafe will reject the entire update and keep your previous working configuration active.
:::
## Validate and enable routing
1. In POS Cafe, go to **Settings**.
2. Under **Admin Settings**, select **Native Shopify Products**. The **Native product routing** page opens.
3. Click **Validate and enable**.
4. Wait for validation to finish.
5. Check the **Active routing configuration** table and confirm that each product shows the correct prep area.
Native Product Routing supports up to 250 tagged products per store. If more than 250 products have the routing tag, validation fails with "More than 250 products have the poscafe_route tag. Version one supports up to 250 products per store." Remove the tag from some products, then refresh again. Products without the routing tag are not included in the configuration.
## Optional: include native Online Store orders
Native Online Store routing has its own opt-in and is disabled by default. You need to enable native product routing first. To turn it on:
1. On the **Native product routing** page, in the **Online Store orders** card, select **Include native Online Store orders**.
2. Choose a **Default online preparation location**.
3. Click **Save online settings**.
POS Cafe chooses the preparation location as follows:
| Order method | Preparation location |
| :-- | :-- |
| Local Pickup | The pickup location assigned by Shopify. |
| Local Delivery | The delivery location assigned by Shopify. |
| Standard shipping | The **Default online preparation location** selected in POS Cafe. |
| Non-shipping items added through POS Cafe Online Ordering | The location selected by the customer in POS Cafe Online Ordering. |
:::note
If you see "Shopify approval is required for the new fulfillment-order permission before online routing can be enabled" when turning on Online Store routing, approve the POS Cafe app update in your Shopify admin, then return and save the setting again.
:::
## Which orders are supported?
| Order type | How it is routed |
| :-- | :-- |
| Completed Shopify POS sales | Configured products route to the printers and KDS devices for the current POS location. |
| Saved carts and draft orders | Configured products route when the cart is saved. If more items are added later, only the additions are sent. |
| Online Store orders | Configured native products route when the separate Online Store option is enabled. |
| Existing POS Cafe orders | Continue to use the existing POS Cafe printer and KDS workflow. |
:::caution
Removing an item from an open draft after it has already printed or appeared on KDS does not send a void or cancellation ticket. Let the preparation team know about removed items using your normal cancellation process.
:::
## Refresh after changing products
POS Cafe does not continuously scan your products. After adding or removing the tag, or changing a **Prep Area** value, return to **Settings → Native Shopify Products** and click **Refresh routing**.
Until the refresh succeeds, POS Cafe continues using the previous active configuration. This prevents an incomplete product edit from unexpectedly changing live routing.
## Stop routing a product
1. Open the product in Shopify admin.
2. Remove the `poscafe_route` tag.
3. Save the product.
4. Return to **Settings → Native Shopify Products** and click **Refresh routing**.
To stop all native product routing, click **Disable routing**. Existing POS Cafe products will continue to route normally.
## Troubleshooting
### A product doesn't appear in Active routing configuration
Confirm that the product has the exact `poscafe_route` tag, has a valid **Prep Area** value, and has been saved. Then click **Refresh routing**.
### The refresh says that the configuration needs attention
Correct every product listed in the warning. A tagged product normally needs a **Prep Area** that exactly matches one of the prep areas configured in POS Cafe. Your previous valid configuration remains active while you correct the issue.
### The page says "Webhook setup is incomplete"
Your saved product configuration is still available, but Shopify is not currently subscribed to deliver matching orders to POS Cafe. Click **Repair webhook** (it replaces **Refresh routing** while this warning shows) before relying on native product routing.
### A saved cart or draft order didn't route
Confirm that the POS Cafe tile is installed and visible on the Shopify POS home screen, the product appears in **Active routing configuration**, and the POS device is using a Shopify location connected to the required printer or KDS. Staff do not need to open the POS Cafe tile before saving the cart.
### A native Online Store order didn't route
Check that **Include native Online Store orders** is enabled, a **Default online preparation location** is selected, and the product is in the active routing configuration. Also confirm that the resolved Shopify location is connected to the required printer or Fresh KDS device in POS Cafe.
### I removed the tag, but the product still routes
Product changes do not apply automatically. Click **Refresh routing** after removing the tag. The existing saved configuration remains active until a refresh succeeds.
## Product and order safety
Validation and refresh only read the tagged products and their **Prep Area** values. They do not create, edit, or delete products, and they do not change your tags, metafield values, or inventory. During order processing, POS Cafe sends the required ticket information to your configured printer and KDS destinations; it does not fulfil, cancel, or delete Shopify orders. You remain in control of which products are included by maintaining the tag and metafield in Shopify admin.
---
# Shopify POS Receipts
Section: Order Tickets & KDS
URL: https://poscafe.app/docs/order-tickets-kds/shopify-pos-receipts/
Shopify has removed the receipt code editor, so POS Cafe's customised receipt order tickets are no longer available. Here is what to use instead.
POS Cafe used to provide receipt code that turned a Shopify POS Pro sales or gift receipt into an order ticket grouped by prep area. **Shopify has removed the receipt code editor from Shopify POS, so this option is no longer available** and the code can't be installed or edited. This page explains what that means and which POS Cafe printing option to use instead.
## What changed
Shopify POS no longer lets merchants customise printed receipts with code. The **Edit code** option that POS Cafe's receipt templates relied on is gone, for every Shopify plan, so receipts now print in Shopify's standard layout. There is nothing to configure in POS Cafe for this: the feature depended entirely on Shopify's editor.
## What to use instead
All of POS Cafe's other printing options route each item by prep area and don't depend on Shopify's receipt layout:
| If you want | Use |
| :-- | :-- |
| Order tickets for every order at the location, including online, kiosk and open tabs | An Epson or Star receipt printer on POS Cafe's print server. See [Epson Server Direct Print](/docs/order-tickets-kds/epson-server-direct-print/) or [Star CloudPRNT](/docs/order-tickets-kds/star-cloudprnt/). |
| A ticket on the printer already connected to a POS device, with no extra hardware | A [Shopify POS Printer](/docs/order-tickets-kds/shopify-pos-printer/). It prints the orders taken on that device. |
| A paperless kitchen | [Fresh KDS](/docs/order-tickets-kds/fresh-kds/) screens. |
[Choosing How to Print Order Tickets](/docs/order-tickets-kds/choosing-how-to-print/) compares them side by side.
:::tip
If you previously used the receipt-code order ticket with the printer connected to your POS device, the closest replacement is a **Shopify POS printer**: add it in POS Cafe with the same printer name, choose its prep areas, and the ticket prints automatically after each checkout. See [Shopify POS Printer](/docs/order-tickets-kds/shopify-pos-printer/).
:::
---
# Integrations Overview
Section: Integrations
URL: https://poscafe.app/docs/integrations/overview/
Every app and device POS Cafe works with, from kitchen displays and receipt printers to pickup, delivery and self-service kiosks.
POS Cafe integrations connect your Shopify cafe to the apps and devices your team already uses. Orders come in from Shopify POS, your online store or a kiosk, and POS Cafe routes each item to the receipt printers and kitchen screens at its prep area.
## Integrations for taking orders
These integrations give customers more ways to order. Their orders are routed to your printers and Fresh KDS just like counter orders.
| Integration | What it does | Setup guide |
| :-- | :-- | :-- |
| **Zapiet Pickup & Delivery** | Adds Zapiet's pickup and local delivery options to POS Cafe Online Ordering. | [Zapiet Pickup & Delivery](/docs/integrations/zapiet-pickup-and-delivery/) |
| **Cloudshelf** | Self-service kiosk ordering built on your POS Cafe menu and modifiers. | [Cloudshelf Kiosks](/docs/integrations/cloudshelf-kiosks/) |
## Integrations for sending orders to prep
These integrations deliver order tickets to each prep area. Their guides live in the **Order Tickets & KDS** section.
| Integration | What it does | Setup guide |
| :-- | :-- | :-- |
| **Fresh KDS** | Replaces paper tickets with kitchen and barista display screens. | [Fresh KDS](/docs/order-tickets-kds/fresh-kds/) |
| **Epson Server Direct Print** | Cloud printing to Epson receipt printers through POS Cafe's print server, with nothing to install. | [Epson Server Direct Print](/docs/order-tickets-kds/epson-server-direct-print/) |
| **Star CloudPRNT** | Cloud printing to Star receipt printers through POS Cafe's print server, with nothing to install. | [Star CloudPRNT](/docs/order-tickets-kds/star-cloudprnt/) |
| **Shopify POS printer** | Prints tickets on the receipt printer already connected to a Shopify POS device, for orders taken on that device. | [Shopify POS Printer](/docs/order-tickets-kds/shopify-pos-printer/) |
## Where to manage integrations in POS Cafe
Fresh KDS, Zapiet Pickup & Delivery and Cloudshelf are listed in the POS Cafe app under **Settings → Integrations**. Fresh KDS screens are also managed for each location (see [Locations](/docs/getting-started/locations/)), and each printer guide explains how to connect your printer.
:::tip[Don't see the tool you use?]
[Tell our team](/support/?topic=other#contact-form) which app or device your cafe relies on, and we'll look at connecting it.
:::
---
# Zapiet Pickup & Delivery
Section: Integrations
URL: https://poscafe.app/docs/integrations/zapiet-pickup-and-delivery/
Use Zapiet Pickup & Delivery with POS Cafe Online Ordering so pickup and local delivery orders reach the right printer and kitchen display.
The POS Cafe Zapiet integration lets customers build their order on the POS Cafe online ordering menu, then choose pickup or local delivery with the [Zapiet Pickup & Delivery](https://zapiet.com/shopify/store-pickup-delivery) app. POS Cafe reads Zapiet's pickup or delivery details from each order and sends the tickets to the right location's receipt printers and Fresh KDS screens.
## How the Zapiet integration works
With the integration turned on, the ordering flow changes like this:
1. **Customers build their order in POS Cafe.** They browse your POS Cafe online ordering menu and customise items with modifiers as usual.
2. **The cart hands over to Zapiet.** When a customer opens their cart, they go straight to your Shopify cart page instead of the POS Cafe cart window. Zapiet's widget on that page handles pickup or delivery, the location, the date and the time. Options from the POS Cafe cart window, such as the Drive Thru and Curbside vehicle details, don't appear.
3. **POS Cafe routes the order.** When the order is placed, POS Cafe reads the Zapiet details, matches the Zapiet location to your Shopify location, and prints tickets or sends them to Fresh KDS at that location. The order type (**Pickup** or **Delivery**) and the requested date and time appear on the tickets.
For delivery orders, Zapiet collects a time window. POS Cafe uses the start of that window as the ticket time.
:::caution[Shipping isn't supported]
Zapiet doesn't attach a location to shipping orders, so POS Cafe can't route them to a kitchen or printer. Pickup and local delivery are fully supported.
:::
## Before you start
- **POS Cafe Online Ordering is set up and live.** See [Getting started with online ordering](/docs/online-ordering/getting-started/).
- **Zapiet Pickup & Delivery is installed and configured** in your Shopify store, with your pickup and delivery locations set up in the Zapiet app.
- **Zapiet's widget shows on your Shopify cart page.** Zapiet's own setup guides cover this.
## Set up the Zapiet integration
1. **Open the Zapiet settings.** In the POS Cafe app, go to **Settings → Integrations → Zapiet Pickup & Delivery**.
2. **Turn the integration on.** Tick **Enable Zapiet integration**.
3. **Copy your Zapiet location IDs.** In the Zapiet app, find the location ID for each of your pickup and delivery locations.
4. **Map each location.** Under **Location mapping**, paste each Zapiet location ID next to the Shopify location it belongs to (for example `317021`).
5. **Save.** Click **Save** in the bar at the top of the page.
:::tip
Place a test pickup order and a test delivery order at each location before you go live. Check that each ticket prints, or appears on Fresh KDS, at the right location with the right time.
:::
## Location mapping reference
Every Shopify location that accepts Zapiet orders needs its own Zapiet location ID. The settings page warns you about anything that needs attention:
| What you see | What it means | What to do |
| :-- | :-- | :-- |
| A warning that a location has no Zapiet ID yet | Orders for that location fall back to the order's existing Shopify location, which may not be the location the customer chose in Zapiet. | Add the Zapiet location ID before accepting orders for that location. |
| **This Zapiet ID is mapped to more than one Shopify location** | The same Zapiet ID is entered against two Shopify locations. POS Cafe won't guess between them, and you can't save. | Make every Zapiet location ID unique. |
| **Mappings for inactive Shopify locations** | The Shopify location is inactive. Its mapping is kept so routing resumes if you reactivate it. | Nothing, unless you want to remove the mapping. |
| **Mappings for removed Shopify locations** | The mapping points to a location Shopify no longer has. POS Cafe never deletes a mapping automatically. | Click **Remove** next to each mapping you no longer need, then save. |
## Troubleshooting
### Customers still see the POS Cafe cart window
Check that **Enable Zapiet integration** is ticked and saved under **Settings → Integrations → Zapiet Pickup & Delivery**. Then reload your online ordering page, because a page that was already open keeps its old settings.
### An order printed at the wrong location
The Zapiet location the customer chose isn't mapped, or is mapped to the wrong Shopify location. Open the Zapiet settings, check the ID next to each Shopify location against the Zapiet app, and save.
### A shipping order didn't print
This is expected. Shipping orders have no location, so POS Cafe can't route them to a printer or Fresh KDS. Pickup and local delivery orders are routed as normal.
### Can I turn the integration off?
Yes. Untick **Enable Zapiet integration** and save. Customers go back to the POS Cafe cart window, and your location mappings stay saved in case you turn it on again.
---
# Cloudshelf Kiosks
Section: Integrations
URL: https://poscafe.app/docs/integrations/cloudshelf-kiosks/
Offer self-service kiosk ordering with Cloudshelf, using your POS Cafe menu and the same order routing to printers and Fresh KDS.
The POS Cafe Cloudshelf integration lets customers order from a self-service kiosk in your cafe. [Cloudshelf](https://cloudshelf.ai/) is a Shopify sales channel app for in-store kiosks. It shows each location's POS Cafe menu, including modifiers, and kiosk orders print or appear on Fresh KDS at the right prep areas, just like counter and online orders.
## How the Cloudshelf integration works
- **Your menu comes from POS Cafe.** POS Cafe shares each location's assigned collections with Cloudshelf, so the kiosk shows the same menu as your counter. There's no separate kiosk menu to maintain.
- **Modifiers work on the kiosk.** Customers choose sizes, milks and extras from your POS Cafe modifier sets, with any extra charges.
- **Orders route like any other order.** Each kiosk order is sent to the receipt printers and Fresh KDS screens for each item's prep area.
- **Menu data stays up to date.** POS Cafe republishes the menu data automatically when you change your menu settings.
## Before you start
- **Cloudshelf is installed** from the Shopify App Store, and you've completed Cloudshelf's own kiosk setup.
- **Each kiosk location has an active POS Cafe license.** Only licensed locations are shared with Cloudshelf. See [Locations](/docs/getting-started/locations/).
- **Each location has a menu.** Collections are assigned to the location's menu in POS Cafe.
- **Prep areas are set up** if you want kiosk orders to print or show on Fresh KDS. See [Prep areas](/docs/getting-started/prep-areas/).
## Set up Cloudshelf with POS Cafe
1. **Publish your products to Cloudshelf.** In Shopify, make sure your cafe products **and your modifier products** are published to the Cloudshelf sales channel. Online Store publication isn't required for Cloudshelf.
2. **Open the Cloudshelf settings.** In the POS Cafe app, go to **Settings → Integrations → Cloudshelf**.
3. **Publish your menu data.** Click **Publish / refresh menus**. When it finishes, **Cloudshelf menu data** shows **Menu data published**, along with how many active locations have assigned collections.
4. **Turn on live sold-out updates (optional).** Under **Live menu data and sold-out updates**, click **Turn on** so kiosks stop selling items that have run out. See the section on live sold-out updates below.
5. **Place a test order.** Order an item with modifiers on a kiosk and check that the ticket prints, or appears on Fresh KDS, at the right prep area.
:::note
POS Cafe builds the Cloudshelf menu from your assigned collections without checking Shopify sales channels. The status on the Cloudshelf settings page confirms that POS Cafe's menu data is published. It doesn't check which products are visible inside Cloudshelf, so remember step 1.
:::
## Menu status reference
The **Cloudshelf menu data** status on **Settings → Integrations → Cloudshelf** shows one of these:
| Status | What it means | What to do |
| :-- | :-- | :-- |
| **Menu data published** | Cloudshelf has current menu data. The page shows when it was last published. | Nothing. |
| **No menu for active locations** | No active location has collections assigned, or no active location has a POS Cafe license. | Assign collections to your location menus, or check each location's license, then click **Publish / refresh menus**. |
| **Not published** | Menu data hasn't been published yet. | Click **Publish / refresh menus**. |
| **Published data invalid** | The published menu data is damaged. | Click **Publish / refresh menus** to repair it. |
| **Status unavailable** | POS Cafe couldn't check the status. | Click **Check status**, or reload the page. |
The same page also shows your **Online ordering menu** status. If you only sell through Cloudshelf and not your online store, a message that no Online Store menu is available is expected.
## Live sold-out updates
**Live menu data and sold-out updates** is an optional setting shared by Cloudshelf kiosks and POS Cafe online ordering. You'll find it on the Cloudshelf settings page and on **Settings → General Online Ordering Settings**. When it's on, an item that sells out at a location is removed from the kiosk within seconds and comes back once it's restocked. See [Live Sold-Out Updates](/docs/online-ordering/live-sold-out-updates/) for the timings and which items count as sold out.
## Troubleshooting
### A product is missing from the kiosk
Check three things, then click **Publish / refresh menus**:
1. The product's collection is assigned to that location's menu in POS Cafe.
2. The product is published to the Cloudshelf sales channel in Shopify.
3. Its modifier products are also published to the Cloudshelf sales channel.
### A sold-out item still shows on the kiosk
Check that **Live menu data and sold-out updates** is on. Then check the product in Shopify: stock must be tracked, and the product must be set to stop selling when out of stock. Restocked items can take up to about 15 minutes to reappear.
### A kiosk order didn't print or reach Fresh KDS
Check that the items belong to products with a prep area, and that the location's printers or Fresh KDS screens are set up for that prep area. Kiosk orders follow the same routing as counter and online orders. If everything looks right, [contact our team](/support/) with the order number.
### My menu changes aren't showing on the kiosk
POS Cafe republishes automatically when you change your menu settings. If a change still hasn't appeared, open **Settings → Integrations → Cloudshelf** and click **Publish / refresh menus**. This also refreshes your online ordering menu.
---
# Tax Calculation Issues
Section: Reports & Taxes
URL: https://poscafe.app/docs/reports-taxes/tax-calculation-issues/
If tax on a cafe item comes through as zero or at the wrong rate in Shopify POS, clear the product's category in Shopify admin.
If tax on a cafe item comes through as zero, or at the wrong rate, when it's added to the cart in POS Cafe, the cause is usually the item's **Product Category** in Shopify.
A Shopify POS issue can make a product with a category calculate tax incorrectly. We've reported it to Shopify and it's still open as of October 2026. Clearing the category on the affected product fixes it in a couple of minutes.
Video: POS Cafe - Fix tax issues in Shopify POS (https://www.youtube-nocookie.com/embed/qEL8kPi2wI8)
## Clear the product category
Two parts: clear the category in Shopify admin, then refresh POS Cafe on your devices.
### Part 1: Update the product in Shopify admin
1. **Log in** to your Shopify Admin on your computer or mobile device.
2. Navigate to **Products** and click on the specific cafe item that is experiencing the tax issue (e.g., Cappuccino).
3. Scroll down to find the **Product Category** field (Shopify sometimes auto-fills this for you).
4. Delete the existing category so that the field is **empty**.
5. Click **Save** to apply your changes. After saving, the field should now read as **Uncategorized**.
### Part 2: Refresh POS Cafe on your devices
Refresh POS Cafe on each POS device so the change is picked up straight away. See [Refreshing POS Cafe](/docs/shopify-pos-setup/refreshing-pos-cafe/).
## About product categories
Shopify's [product category documentation](https://help.shopify.com/en/manual/products/details/product-category) explains what categories are used for. Cafe items sold through POS Cafe don't need one.
---
# Common Issues & Fixes
Section: Troubleshooting
URL: https://poscafe.app/docs/troubleshooting/common-issues-and-fixes/
An at-a-glance list of the most common POS Cafe issues and their fixes.
Having trouble with POS Cafe? You've come to the right place. Below you'll find a list of common POS Cafe issues and how to fix them. If you can't find what you're looking for, contact support. We're here to help.
## Common Issues & Fixes
### Why does POS Cafe show "App failed to load" on Shopify POS?
This banner comes from Shopify POS rather than POS Cafe. It's usually fixed by updating Shopify POS and your iPad, then force quitting and reopening the app. Follow the full steps in [App Failed to Load](/docs/troubleshooting/app-failed-to-load/).
### What do the messages in the POS Cafe tile mean?
| Message in the tile | What it means | How to fix it |
| :-- | :-- | :-- |
| **License required** | This location doesn't have an active POS Cafe license. | Activate a POS Cafe license for this location in Shopify admin (**Apps → POS Cafe → Locations**). |
| **No cafe collections** | The tile can't find any Cafe Collections. | Create cafe collections in POS Cafe from Shopify admin, then refresh the tile. See [Cafe Collections Warning](/docs/troubleshooting/cafe-collections-warning/). |
| **No cafe products** | The collection you opened has no products. | Add products to this cafe collection in POS Cafe from Shopify admin, then refresh the tile. |
| **Some modifier options couldn't be loaded** | Some modifiers for this item didn't load. | Go back and open the item again. If it keeps happening, refresh the tile. |
### Why doesn't the POS Cafe tile show my latest changes?
The tile keeps a copy of your menu on each device and refreshes it in the background. To see changes straight away, use **Settings → Refresh Data → Refresh** in the tile; [Refreshing POS Cafe](/docs/shopify-pos-setup/refreshing-pos-cafe/) has the steps and explains the cache.
### Why isn't my receipt printer printing order tickets?
Check each of the following on the POS Cafe **Receipt printers** page (**Apps → POS Cafe → Locations → [your location] → Receipt Printers**):
- **The printer's status badge.** **Paused** means you've paused it, so new orders don't print on it until you click **Resume**. **Offline** means it hasn't checked in recently: check it's switched on and connected to the internet. **Not connected yet** means it has never connected: enter its setup details in the printer. See [Receipt Printers Page](/docs/order-tickets-kds/receipt-printers-page/#printer-status-badges) for every badge.
- **The connection details match.** Click the printer to expand it. The URL, username (ID) and password in the printer must exactly match the **Server URL**, **Username** and **Password** under **Setup details**.
- **The Printer Type matches your printer.** Under the printer's name it must say **Epson · print server** for an Epson printer or **Star · print server** for a Star printer. The Server URL depends on the type, so if you change it, copy the new Server URL into your printer.
- **The printer has the right prep areas.** Items are only sent to a printer when their prep area is selected in that printer's **Prep Areas**.
- **The POS device is allowed.** If the printer's **Device Source** is set to **Print from specific POS devices only (advanced)**, only orders from the selected devices print there.
- **The item came from POS Cafe.** Only items added through POS Cafe print. Other Shopify products print only if you've set them up with [Native Product Routing](/docs/order-tickets-kds/native-product-routing/).
For printer setup steps, see [Epson Server Direct Print](/docs/order-tickets-kds/epson-server-direct-print/), [Star CloudPRNT](/docs/order-tickets-kds/star-cloudprnt/) or [Shopify POS Printer](/docs/order-tickets-kds/shopify-pos-printer/).
### Why does the Send to prep tile say "Not set up at this location"?
The **Send to prep** tile shows **Not set up at this location · tap to check again** when the location has nothing it can send to. It needs at least one of: an active Epson or Star printer that has connected in the last 3 days, an active Shopify POS printer, or a Fresh KDS screen with a prep area selected for the location. Kitchen tickets still print as usual when the order is saved or paid. Once a printer or screen is set up, tap the tile to check again. See [Send to Prep](/docs/shopify-pos-setup/send-to-prep/#before-you-start).
### Why aren't orders appearing on Fresh KDS?
Check that:
- Your Fresh KDS API key is connected on **Apps → POS Cafe → Settings → Integrations → Fresh KDS**.
- The Shopify location is linked in the **Linked Fresh KDS Location** column.
- The screen has the item's prep area selected under **Select Prep Areas** on the **Fresh KDS Devices** page.
- The item was added through POS Cafe, or is set up with [Native Product Routing](/docs/order-tickets-kds/native-product-routing/).
See [Fresh KDS](/docs/order-tickets-kds/fresh-kds/) for the full setup.
---
# App Failed to Load
Section: Troubleshooting
URL: https://poscafe.app/docs/troubleshooting/app-failed-to-load/
If Shopify POS shows "App failed to load" when you open POS Cafe, these steps get the tile loading again.
If Shopify POS shows an "App failed to load" message when you open the POS Cafe tile, the steps below usually get it loading again.
## What's Causing This?
The message comes from the **Shopify POS app**, not from POS Cafe: it means Shopify POS couldn't start the app it was asked to open, and it can affect any POS app. Shopify has fixed the platform problem that once caused this widely, but a device can still run into it now and then, and the same steps clear it.
## Steps to fix it
1. **Update the Shopify POS app** to the latest version: [How to update apps on iPad](https://support.apple.com/en-au/guide/ipad/ipad05566c91/ipados)
2. **Update your iPad's operating system**: [How to update iPadOS](https://support.apple.com/en-au/109359)
3. **Force close the Shopify POS app**, then re-open it: [Watch: How to force close apps on iPad](https://www.youtube.com/watch?v=ceXNie4v6Ns)
4. **Restart your iPad completely**.
5. **Sign out** of the Shopify POS app, then **sign back in**.
:::note
Work through the steps in order and try the POS Cafe tile after each one. If it still won't load after all five, [send us a message](/support/?topic=support#contact-form) with the device and Shopify POS version and we'll help, including raising it with Shopify support if needed.
:::
## How to Force Close the Shopify POS App
Force closing is step 3 above and fixes most cases on its own. Here is how to do it on each device.
:::note
If the POS Cafe tile opens but shows **License required**, the app has loaded correctly: this location doesn't have an active POS Cafe license. Activate a license for the location in Shopify admin under **Apps → POS Cafe → Locations**.
:::
### On iPad / iPhone (iOS)
1. Swipe up from the bottom of the screen (or double-press the Home button) to open the app switcher.
2. Find the Shopify POS app.
3. Swipe it up off the top of the screen to force close it.
4. Reopen Shopify POS and try loading the POS Cafe tile again.
### On Android
1. Tap the Recent apps button (usually a square or three-line icon), or swipe up from the bottom and hold to open recent apps.
2. Find the Shopify POS app.
3. Swipe it up or off the side of the screen to close it.
4. Reopen Shopify POS and try loading the POS Cafe tile again.
Please do not hesitate to reach out if you have any questions or need help.
---
# Cafe Collections Warning
Section: Troubleshooting
URL: https://poscafe.app/docs/troubleshooting/cafe-collections-warning/
Resolve the "No cafe collections" message in the POS Cafe tile.
Seeing "No cafe collections" in the POS Cafe tile in Shopify POS? Either you haven't set up Cafe Collections yet, or the tile is still showing its saved (cached) data from before you made changes. Follow these quick steps to fix it.
> **No cafe collections**
> Create cafe collections in POS Cafe from Shopify admin.
## Why you're seeing this
This message appears when the POS Cafe tile can't find any **Cafe Collections** to display. It typically happens in one of two scenarios.
### No Cafe Collections have been set up yet
If you haven't created your Cafe Collections, follow our step-by-step guide: [Cafe Collections Page](/docs/getting-started/cafe-collections-page/).
### The tile is still showing cached data
If you've already added collections but still see the message, the tile is probably still showing the copy of your menu it keeps on the device. See [Refreshing POS Cafe](/docs/shopify-pos-setup/refreshing-pos-cafe/) for how that cache works and how to refresh it.
## Quick Fix: step-by-step
1. **Open the POS Cafe tile** and confirm the "No cafe collections" message appears.
2. **Make sure you've created at least one Cafe Collection** in the Shopify admin. [Follow the setup guide](/docs/getting-started/cafe-collections-page/).
3. **Refresh the tile's data.** In the POS Cafe tile, tap **Settings**, then under **Refresh Data** tap **Refresh**. See [Refreshing POS Cafe](/docs/shopify-pos-setup/refreshing-pos-cafe/) for screenshots.
4. If the message persists, **force a re-sync** by switching to another location or logging out and back in to Shopify POS, then reopen the tile.
## Other messages you might see
Seeing a different message in the tile, such as **License required** or **No cafe products**? Every tile message is explained in [Common Issues & Fixes](/docs/troubleshooting/common-issues-and-fixes/#what-do-the-messages-in-the-pos-cafe-tile-mean).
## FAQ
### I've set up collections, but still see the message. What now?
In the POS Cafe tile, tap **Settings**, then under **Refresh Data** tap **Refresh** to re-sync.
### How long does the cache last?
Up to 4 hours, after which the tile refreshes in the background. See [Refreshing POS Cafe](/docs/shopify-pos-setup/refreshing-pos-cafe/) to refresh it straight away.
---
# Network & Connectivity Issues
Section: Troubleshooting
URL: https://poscafe.app/docs/troubleshooting/network-and-connectivity-issues/
Diagnose and fix network or firewall issues that stop POS Cafe loading in Shopify admin.
Seeing the POS Cafe page fail to load inside Shopify admin, but it works perfectly on a different network or a phone hotspot? That means the app and Shopify are fine: something on the **store's network** is interrupting HTTPS. This guide explains what's happening and how to fix it quickly.
*Example error shown when the browser cannot complete a secure connection from the store's network.*
## What this error really means
The Chrome message you're seeing appears when the HTTPS connection to `go.poscafe.app` is being *blocked, reset, or "black-holed"* by something on the path (usually the local router, firewall, or a filtering proxy). A successful `ping` only proves DNS + ICMP are okay; it does *not* prove that TCP/TLS on port 443 works.
## Most likely causes (and quick fixes)
### 1. Path-MTU / MSS "black-hole" on the router or firewall
- **Symptoms:** Some HTTPS sites (especially with larger TLS records) hang; `ping` works.
- **Test (Windows):** `ping go.poscafe.app -f -l 1472` and step down until it succeeds.
- **Fix:** Enable *MSS clamping* on the WAN interface (e.g., 1452 for PPPoE; ~1360 for certain VPNs) or reduce WAN MTU.
### 2. SSL/TLS inspection or web filtering
- **Symptoms:** Loads on guest/hotspot; fails on staff VLAN.
- **Test:** Temporarily bypass the filter or add an allowlist entry.
- **Fix:** Disable SSL inspection for the domains below or allowlist them.
### 3. Proxy/device limits on URL length
- **Symptoms:** Short URLs load; long `/install-or-render?...` URLs fail.
- **Test:** Visit `https://go.poscafe.app/` (short) vs. the long embedded-app URL.
- **Fix:** Raise URL/query length limits or bypass the proxy for our domain.
### 4. IPv6 or QUIC/HTTP-3 quirks
- **Test:** Force IPv4 with `curl -4 -I https://go.poscafe.app`; temporarily disable QUIC on the firewall and retry.
- **Fix:** Prefer IPv4 for this destination or correct v6 routing; ensure UDP/443 isn't being intercepted in a way that breaks fallback.
### 5. Security reputation block on the site's public IP
- **Test:** Load the app on a phone using cellular data (Wi-Fi off). If that works, share your public IP with us.
- **Fix:** We can review/allowlist your IP on our edge if needed.
## Fast troubleshooting checklist
1. Open Chrome DevTools → **Network** → reload. Click the top Document request and note the exact error (e.g., `ERR_CONNECTION_RESET`, `ERR_SSL_PROTOCOL_ERROR`).
2. From a laptop on the store network, run:
```sh
nslookup go.poscafe.app
curl -I https://go.poscafe.app
curl -4 -I https://go.poscafe.app
```
3. **MTU test (Windows):**
```sh
ping go.poscafe.app -f -l 1472
```
If it fails, reduce the size (e.g., 1460, 1452…) until it succeeds, then set MSS clamping accordingly on the router.
4. Temporarily bypass any web filter/SSL inspection (or try a guest SSID/VLAN). If the app loads, add an allowlist.
5. Try the same device on a phone hotspot. If that works, it confirms a *site network* issue, not the device.
:::note
Still stuck? Send us (1) the Chrome error from DevTools, (2) your public IP, and (3) results of the `curl`/ping tests. This lets us pinpoint the cause fast.
:::
## Allowlist (no SSL inspection)
Add these to your firewall/proxy allowlist and exempt them from SSL interception:
- `*.poscafe.app` (especially `go.poscafe.app`)
- `*.shopify.com`, `*.myshopify.com`
- `*.shopifycdn.com`, `cdn.shopify.com`
## FAQ
### Ping works, so why won't the page load?
Ping uses ICMP and tiny packets; your browser uses TCP 443 with TLS. Firewalls can pass ICMP but block or break large HTTPS packets (MTU/MSS issues) or decrypt/deny TLS (SSL inspection).
### Is this a POS Cafe outage?
If the app loads elsewhere, it's not an outage; it's the local network path. The fixes above resolve it in nearly all cases.