Designing Stored Value & Balance Passes
Updated February 11, 2026
TL;DR: Stored value passes answer one question — "How many do I have left?"
- If a user asks "How many do I have left?" — the design has already failed
- Label the unit explicitly: "Classes remaining: 3" not "Balance: 3"
- Remaining value is the hero — not original, not earned
- Updates are the entire product — stale values destroy trust
- One pass, one unit type — multiple units with no hierarchy is the #1 failure
Overview
Stored value passes track units — sessions, visits, credits, punches, rides, meals.
The design challenge: make remaining value obvious and redemption unambiguous. If a user ever has to ask "how many do I have left?" — the design has failed.
What moment are you designing for
Someone arrives wanting to use what they have left.
Staff need to confirm: - How many units remain? - What are the redemption rules? - Did redemption succeed?
The user needs: - Certainty about remaining value - Confidence the transaction was recorded - No confusion about what the unit means
Stored value passes fail when units are unclear, remaining value is buried, or redemption doesn't visibly update the pass.
The unit confusion problem
A customer shows their pass: "I have 3 left."
Staff: "3 what? Sessions? Credits? Dollars?"
Customer: "I... don't know. It just says balance: 3."
The fix is simple but non-negotiable: - "Classes remaining: 3" — not "Balance: 3" - "Credits: 120" — not "Points: 120" - "Visits left: 2" — not "Value: 2"
Label the unit explicitly. Never assume users know what the number means.
Why must you choose the unit and never confuse it
Stored value often fails when units are unclear:
- Sessions vs. visits (are they the same?)
- Credits vs. dollars (can I spend credits like money?)
- Remaining vs. earned (did I earn 5 or do I have 5 left?)
Make the unit explicit and stable: - "Classes remaining: 3" - "Credits: 120" - "Visits left: 2" - "Punches: 7/10"
Never use ambiguous terms like "balance" for non-monetary units. "Balance: 3" could mean dollars, credits, visits, or something else entirely. Specific unit labels eliminate confusion.
| Unit Type | Good Label | Avoid |
|---|---|---|
| Fitness classes | "Classes remaining: 3" | "Balance: 3" |
| Punch card | "7/10 punches" | "Progress: 7" |
| Service credits | "Credits: 120" | "Points: 120" |
| Meal plan | "Meals remaining: 12" | "Value: 12" |
Why is remaining value — not original — the hero element
Stored value passes often make the wrong value prominent:
- Original value — "10-class package" (nice to know, but not actionable)
- Earned value — "You've completed 7 classes!" (celebrates the past, not the present)
- Remaining value — "Classes remaining: 3" (answers the actual question)
Make remaining value the hero. This is what users check before deciding to use the pass. This is what staff need to confirm at check-in. Original value can appear as secondary context; earned value can appear as progress; but remaining value must be instantly visible.
Why are updates the entire product
A stored value pass that doesn't update is a liability. Users cannot trust the displayed value. Staff have to check manually. The pass becomes decoration rather than function.
Update on: - Redemption (unit consumed) - Refunds or adjustments (units restored) - Top-ups or purchases (units added) - Corrections (administrative fixes) - Expiration changes (validity period adjustments)
Updates should happen immediately after redemption. The user should see their new remaining value before leaving the service location.
When should stored value passes use validation
If value can be spent, validate. Stored value passes almost always need validation to:
- Prevent double-redemption
- Create audit trails
- Enable staff to confirm redemption
- Track usage patterns
Validation approach: - QR/barcode for universal compatibility - NFC where hardware supports it - Always include staff-readable identifier for scanner failures
Skip validation only when the pass is purely a reference object — rare for stored value scenarios where units are actually consumed.
How do you handle multiple unit types
Some passes track multiple things: money and points, classes and credits, visits and rewards. Multiple units create complexity.
If you must have multiple units: - Establish clear hierarchy (which is primary?) - Display primary unit most prominently - Separate secondary units visually - Never let secondary units compete with primary
Better approach: - One pass, one unit type - Use separate passes for separate value types - Link passes through account rather than cramming everything together
Multiple units with no hierarchy is the most common stored value design failure. Users cannot determine what they have or what they can redeem.
How do Apple and Google handle stored value passes
| Feature | Apple Wallet | Google Wallet |
|---|---|---|
| Pass type | storeCard or generic | Generic or LoyaltyObject |
| Value display | Primary field (flexible) | Points/balance fields |
| Progress indication | Secondary fields | Progress bar available |
| Validation | Barcode or NFC | Barcode or NFC |
Both platforms support stored value through store card or generic pass types. Google Wallet's LoyaltyObject includes native progress indication that works well for punch-card style passes.
What are the most common stored value design mistakes
Showing original value as the hero — "10-class package" instead of "Classes remaining: 3." Users need remaining value.
Multiple balances with no hierarchy — Money + points + credits all equally prominent. Pick one primary unit.
Ambiguous unit labels — "Balance: 3" could mean anything. Be specific about the unit.
Burying redemption method — QR hidden behind taps or on the back. Validation should be immediately accessible.
QR as decoration — Barcode embedded in imagery breaks scanning. Always use native rendering.
No visible update after redemption — Users cannot confirm the transaction was recorded. Pass should change immediately.
Making stored value passes easy with PassNinja
PassNinja helps businesses create stored value passes with clear unit tracking and instant updates. Define your unit type, initial quantity, and redemption rules — PassNinja generates passes that track value accurately.
With PassNinja, redemption updates propagate immediately. Every class, visit, punch, or credit is recorded and reflected on the pass before the user leaves. Staff scan, confirm, and the value adjusts automatically.
The shift
Stop designing stored value passes as balance trackers. Start designing them as instant answers.
"How many do I have left?" The pass should answer before anyone asks. Clear unit. Current value. No confusion.
When a customer walks up, shows their pass, and the staff nods — no questions, no checking, no hesitation — that's the design that works.
More articles in Pass Type Design
Every creative team asks the same question:
Designing Membership PassesA membership pass must survive the front desk moment — with untrained staff, busy lines, and memb...
Designing Loyalty PassesLoyalty programs don't fail because they lack rewards. They fail because they disappear at the ex...
Designing Identity PassesIdentity passes prove who someone is. They don't grant access, trigger actions, or validate trans...
Designing Gift Cards PassesA gift card isn't just stored value. It's a gift someone chose.
Designing Event TicketsEvent tickets are context-bound. The context is the event.
Designing Coupons Offers Vouchers PassesA coupon that arrives late does not exist.
Designing Access PassesA person approaches the door at 2AM. The guard looks at the screen. The pass is unclear. The guar...