QR codes: how they work and where to put them
There are two QR codes in VivaPoints and they do opposite jobs. This is which is which, where to print yours, and what to do when a scan does not work.
Last updated July 26, 2026
There are two QR codes in VivaPoints, and confusing them is the most common reason a scan "doesn't work". They point in opposite directions.
| Your join code | A customer's card code | |
|---|---|---|
| Who scans it | Anyone with a phone camera | Nobody — your staff read it |
| Where it lives | You print it | On their card in the app or at /me |
| What it does | Opens your join page | Identifies which member is standing there |
Your join code
This is the one that matters for growth. Open Programs, choose your program, and it is on the program page with the link written underneath it.
Point a phone camera at it and the join page opens: your business name, what a member earns, what the rewards cost, and a button to join. No app to install, no code to type, no account needed until they choose to make one.
The code encodes a normal web link. That is deliberate — every phone made in the last decade opens it from the camera app with no extra software, which is not true of app-specific codes.
Where to put it
In rough order of how well they work:
- On the counter, at eye level when someone is paying. The single best spot. They are already stopped, already looking down, and already thinking about the transaction.
- On the receipt or the cup sleeve. It leaves with them and gets scanned on the walk home.
- On the table, if people sit down. Tent cards work; a sticker under the glass does not.
- In the window. Lower conversion, but it works after closing time.
- In your email footer and your Instagram bio — the same link works without the QR.
What does not work: anywhere a person is walking, anything above head height, and anything behind glass with a strong reflection.
Printing it
- Print it at 3cm across or larger. A code needs roughly ten times its width in scanning distance, so 3cm is read comfortably at arm's length. Smaller than 2cm and older phones start to struggle.
- Leave white space around it. The quiet border is part of the code — crop into it and scanners stop seeing it at all. Leave a clear margin of about four modules, roughly the width of one of the little squares.
- Keep it dark on light. Inverted codes (light on dark) fail on a surprising number of cameras. Do not tint it to match your brand, however tempting.
- Matte, not gloss. Gloss lamination under a ceiling light is the most common real-world scanning failure there is.
- Put a line of text under it. "Scan for points" outperforms a bare code by a wide margin, because a code with no promise is just a square.
The code on a customer's card
The QR on a member's card is not for a phone camera, and pointing one at it does nothing useful. It identifies that member so a person behind the counter knows whose balance to credit.
Today your staff read the card on the customer's screen and award points from your Customers page. A dedicated scanner app is not part of this release, so treat the card code as identification rather than as a scanner target.
Do not print a customer's card code, and do not photograph one. It identifies a person's membership. Yours is a poster; theirs is closer to a library card.
When a scan does not work
Work down this list — it is ordered by how often each one is the actual cause.
- Check which code is being scanned. A phone camera pointed at a card code appears to do nothing at all. That is expected. Point it at your join code instead.
- Check the light. Glare is the number one cause. Tilt the code or the phone by twenty degrees and try again.
- Check the distance. Too close is as bad as too far. Start at about 20cm from a printed code and pull back slowly.
- Check the print. Any crop into the white border, any fold across the middle, and any smudge in a corner square kills it. Reprint rather than patch.
- Try a second phone. If a second phone reads it instantly, the first one has camera autofocus trouble, not a code problem.
- Type the link. It is printed underneath for exactly this reason. Every join code is a plain web address that works typed.
If the link itself opens a page saying the program cannot be found, the program is not published — check its status is Active and its visibility is Public on the program page.
What a customer sees after they scan
- The join page, in their own language if we support it.
- Your business name and program, what they earn per visit or per unit spent, and what the rewards cost.
- A join button. If they are not signed in, they create an account and land straight back where they were.
- Their card, with a balance of zero and the first reward already in sight.
That last step matters more than it looks. A member who sees "80 points to a free coffee" on day one comes back with a target. A member who sees an empty card comes back by accident.
Keep reading
Issuing points at the counter
Points are awarded by hand from your Customers page. Here is the flow, how to find the right person fast, and how to do it without making the queue wait.
How customers join your program
Customers join by opening a link you share. Here is where to find that link, what they see when they tap it, and how to ask without holding up the queue.
Redeeming a reward
The customer taps the reward on their card, which creates a pending redemption. Someone on your side confirms it, and only then are the points deducted.
Still stuck?
Email us and a human will answer.