

Short answer: No, there is no straightforward, secure way to create POS-only discounts in Shopify.
Why Isn’t This Possible?
Though Shopify allows you unpublish discounts from sales channels using its “Deny sales channel access” feature, it doesn’t give you the option to unpublish discounts from the “Online Store” sales channel.

Since you can’t unpublish discounts from the “Online Store,” you can’t make a discount POS-only.
Why Cart Attributes Are The Wrong Choice
You may have heard of the following workaround to create POS-only discounts:
- Using JavaScript code in your theme, automatically set a specific cart attribute.
- Using the Shopify Functions API, create a discount that only applies when that specific cart attribute is not present.
However, this approach has glaring flaws:
- It’s not secure… At all. Clients can easily overwrite cart attributes on their own through Shopify’s AJAX Cart API. This means someone could simply remove your special cart attribute when purchasing on the Online Store and still get the discount.
- Unless you’re on Shopify Plus, this won’t work if the customer’s session starts in the checkout (for example, if you sent them a direct link). This is because non-Plus cannot add custom JS code to the checkout. Even if you’re on Shopify Plus, you would still have to use the Checkout UI Extension API for this code if you want it to be foolproof.
Conclusion
Don’t bother with any discounting approach that relies solely on client-side authorization. If you do, you’re allowing anyone with technical knowledge to eat into your margins. Unfortunately, you just can’t create real POS-only discounts at the time of this writing.