Starting with POS version 11.5, you can generate a scannable QR code from any discount code in the Shopify admin. It applies whether POS staff scan it at the register or a customer uses it during an online store session.
For any discount code, existing or new, you can export a QR code from the Shopify Admin. Put it on in-store POP displays, flyers, receipts, social media, and more — in print or on screen.
When a cashier scans it, the discount is added to the in-store checkout; when a customer scans it themselves, the discount is added to their online store cart. The same QR works across both channels.
The discount URL Shopify uses follows this fixed format.{shop} and {CODE} are all you insert—a simple structure.
{CODE} is embedded.Simple codes are used as-is, while codes containing special characters are URL-encoded "twice". This asymmetry is an easy place to slip up (→ Section 4).An alphanumeric-only code needs no conversion. It stays /discount/SUMMER20 as-is.
Example from the article: discount code SAVE 10% becomes, in the final QR URL, SAVE%252010%2525 .
| Stage | Space " " | Percent "%" | String |
|---|---|---|---|
| Original code | (space) |
% |
SAVE 10% |
| First encoding | %20 |
%25 |
SAVE%2010%25 |
| Second encoding (%→%25 once more) |
%2520 |
%2525 |
SAVE%252010%2525 |
% produced in the first pass itself turns into %25 once again. That's why you get %20 → %2520,%25 → %2525 . The SAVE%252010%2525 stated in the article matches the result of this two-stage encoding.From the article's "What this means for discount apps": No changes are required.Existing discount apps keep working as-is.
The idea is that if your app generates discount codes, it can now issue a "QR code encoding the store's discount URL" for those codes.
https://{shop}.myshopify.com/discount/{CODE} and the double-encoding of special characters to match Shopify's.https://{shop}.myshopify.com/discount/{CODE}.You just insert the discount code here. This URL is what gets encoded into the QR code.
Spaces, % and other such characters in a code get URL-encoded twice.SAVE 10% → SAVE%252010%2525.In your implementation, apply the encoding in two stages.
An alphanumeric-only SUMMER20 code needs no conversion and goes in as-is. Be sure to test both cases so that applying the encoding uniformly doesn't change the result.
The same QR applies whether POS staff scan it or a customer scans it online. There's no need to create a separate QR for each channel.
This feature requires POS version 11.5 or later. If your app distributes discount QR codes as shareable links, you need to take the encoding identical to Shopify's andimplement and match it yourself. The API / Webhook spec for generating QR codes is not documented in this article = you'll need to confirm it separately.
https://{shop}.myshopify.com/discount/{CODE} , anddouble-URL-encode special charactersso it matches Shopify exactly..../discount/{CODE} -style discount URL, andcodes with special characters use double URL encoding.