Developer Changelog / Tools

Scannable discount codes
Turn discount codes into scannable QR codes

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.

What's on this page
  1. What's actually changing (understand it in 30 seconds)
  2. How it works: the flow from generation to application
  3. The URL format embedded in the QR code
  4. The key to encoding: special characters are "double-encoded"
  5. Impact on discount app developers
  6. 5 points engineers should know
  7. 3 use cases you can put to work
  8. A one-line summary for your pitch

1What's actually changing

Starting with POS version 11.5, in the Shopify admin, any discount code can now be turned into a scannable QR code.
This QR code works whether POS staff apply it at the register ,or a customer scans it during an online store session — either way, the discount applies.

Generate the QR code in the admin

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.

Applies on POS and online

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.

2How it works: the flow from generation to application

Discount code SUMMER20 Shopify Admin Convert to a discount URL ...myshopify.com /discount/SUMMER20 Encode and assemble QR code POS staff scan Discount applied to in-store checkout Customer scans Discount applied to online store cart
The QR code points to the store's "discount URL". The rules for assembling this URL (especially the encoding) are the key here, and they matter when an app wants to issue the same QR code (→ sections 3 and 4).

3The URL format embedded in the QR code

The discount URL Shopify uses follows this fixed format.{shop} and {CODE} are all you insert—a simple structure.

https://{shop}.myshopify.com/discount/{CODE}
The thing to watch is how {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).

4The key to the encoding: special characters get encoded "twice"

Pattern A: simple code → as-is

Discount code SUMMER20
Value in the final QR URL SUMMER20

An alphanumeric-only code needs no conversion. It stays /discount/SUMMER20 as-is.

Pattern B: with special characters → double encoding

Discount code SAVE 10%
Value in the final QR URL SAVE%252010%2525

Example from the article: discount code SAVE 10% becomes, in the final QR URL, SAVE%252010%2525 .

Why it becomes "double" (working backward from the article's values)

StageSpace " "Percent "%"String
Original code (space) % SAVE 10%
First encoding %20 %25 SAVE%2010%25
Second encoding
(%→%25 once more)
%2520 %2525 SAVE%252010%2525
In the second pass, the % 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.
If you want to embed the QR as a shareable link inside your app,you need to reproduce this same URL encoding that Shopify uses yourself(from the article's "What you should do"). With single encoding, the QR for codes containing special characters won't match.

5Impact on discount app developers

This release requires no mandatory changes

From the article's "What this means for discount apps": No changes are required.Existing discount apps keep working as-is.

Apps that create discount codes can turn them into QR codes

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.

What to do : If your app includes QR codes as shareable links, align the URL format https://{shop}.myshopify.com/discount/{CODE} and the double-encoding of special characters to match Shopify's.

65 key points for developers

/discount/

1. The URL uses a fixed format

https://{shop}.myshopify.com/discount/{CODE}.You just insert the discount code here. This URL is what gets encoded into the QR code.

×2

2. Special characters are double-encoded

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.

Simple directly

3. Simple codes go in as-is

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.

4. A single QR works across both channels

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.

11.5

5. Requires POS 11.5; reproduce shareable links yourself

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.

73 use cases you can apply to your business

USE CASE 1

"Scan-only coupons" printed on in-store POP displays and flyers

Challenge
Verbally dictating codes at the register or having staff copy-paste them causes typos, queues, and missed applications.
Solution
Generate a QR code for your campaign discount code in the admin and place it on in-store POP displays, receipts, and flyers. Staff and customers just scan it.
Impact
Fewer input errors and shorter checkout times. Since the same QR works both online and in-store, it's also easy to drive cross-channel traffic.
Technical note
Requires POS version 11.5 or later. A single QR works for both POS and online, so you don't need to split printed materials by medium.
/discount/ SAVE%2520..
USE CASE 2

Implement "shareable QR links" in your own discount app

Challenge
If you have an app that generates discount codes and want to issue a QR for each code, codes containing special characters can easily break the QR so the discount won't apply.
Solution
Build the URL as https://{shop}.myshopify.com/discount/{CODE} , anddouble-URL-encode special charactersso it matches Shopify exactly.
Result
Both simple codes like SUMMER20 and special-character codes like SAVE 10% apply directly from the generated QR, reducing support inquiries.
Technical notes
No changes are required for this release (No changes required). Only when you add a share-link feature do you need to additionally implement reproducing the encoding.
USE CASE 3

Make campaign channels "measurable" with a separate code per QR

Challenge
When relying on manual code entry, it's hard to tell which channel (in-store, direct mail, social) drove the discounts.
Solution
Issue a separate discount code for each channel, generate and distribute a QR for each, and track usage by code.
Result
You can break down responses by channel through code usage, giving you a basis for designing your next coupon.
Technical notes
This article covers only the QR generation and URL encoding specs. Details on per-code aggregation and analytics screens are not documented, so check them separately in Shopify Admin's discount reports or similar.

8One-line summary for pitches

"As of POS 11.5, any discount code can be turned into a QR code that works both in-store and online .
The QR contains a .../discount/{CODE} -style discount URL, andcodes with special characters use double URL encoding.
No changes are required for existing apps; you only need to reproduce the same encoding when you generate a shared QR yourself."