Platform

Semantic tags on wallet passes: what they do and why yours are missing

Semantic tags tell the operating system what a pass field means, not just what it says. That layer turns a pass into something the phone can act on.

· 4 min read

Open a wallet pass and you see fields: a points balance, a tier name, maybe an expiry date. To you, those are obviously a balance, a tier, and a date. To the phone, without help, they are just strings of text sitting on a colored rectangle.

Semantic tags are that help. On Apple Wallet, a pass can carry a semantics dictionary alongside its visible fields, a structured layer that tells iOS what each piece of data actually means: this number is a balance, this string is a membership tier, this timestamp is when the event starts. The customer never sees the semantics layer directly. The operating system does, and that changes what the pass can do.

From display to meaning

A pass without semantic data is a picture the phone renders faithfully. A pass with semantic data is something the phone understands.

Take a loyalty pass showing "1,240 points". As plain text, that value can only ever be displayed. Tagged semantically as a balance, it becomes data the system can reason about: iOS knows it is a quantity, knows its unit, and can surface it in system contexts beyond the pass face. The same goes for a tier name tagged as a membership level, or a date tagged as an expiry.

The pattern repeats across pass types. Event tickets carry semantics for venue, seat, and start time. Boarding passes carry departure gates and times. Loyalty and membership passes carry balances, tiers, and program names. In every case the visible field and the semantic tag describe the same fact, once for the human and once for the machine.

What the machine does with meaning

Meaning is what lets the system be helpful on its own initiative. Semantic data feeds the intelligence features Apple builds into iOS: suggestions that surface the right pass at the right moment, richer previews when a pass appears in search or on the lock screen, and system experiences that read details straight from the pass instead of asking the customer to open it.

This matters because the wallet's whole promise is being there at the moment of use. A pass the system understands gets surfaced when its moment arrives. A pass the system cannot read is just another item in a stack, waiting for the customer to remember it exists.

Each iOS release tends to lean on this layer a little harder. The features change year to year; the prerequisite does not. Passes that carry rich semantic data inherit new system behaviors as they ship. Passes that carry only display text are left out, and nothing about them looks wrong, which is exactly why the gap goes unnoticed.

Why most passes ship without them

Semantic tags are optional. A pass renders perfectly well without a single one, and nothing in the wallet flags their absence. So under deadline, they are the first thing an integration skips, and because the pass looks finished, nobody goes back.

There is a second reason the gap persists: tags are only useful if they stay correct. A balance tagged semantically is a promise that the tagged value is the real balance, which means the semantic layer has to be updated every time the visible field is. For a team hand-building passes, that doubles the maintenance surface of every field. Skipping the layer starts to look less like an oversight and more like a rational response to owning the plumbing yourself.

The result is a quiet quality divide: passes that look identical on the surface but differ completely in what the platform can do with them. It is the kind of gap you only notice when a competitor's pass shows up on a customer's lock screen at the right moment and yours does not.

Google Wallet approaches the same idea through its own model, with structured class and object fields rather than a semantics dictionary, and the two platforms reward the same discipline: describe your data properly, once, and let each wallet make the most of it.

What this means if you run a pass program

Semantic tagging is not a feature you should have to think about. It is plumbing, and the right place for plumbing is inside the platform. On Stell, passes carry the semantic data appropriate to their type as a matter of course: balances tagged as balances, tiers as tiers, dates as dates, on every pass, for both wallets. Because Stell manages the pass lifecycle, the semantic layer moves with the visible one. When a balance updates, both the number on the pass face and the tagged value behind it update in the same pass update, so the promise the tags make stays true for the life of the pass.

That is the practical difference between a pass generator and a pass lifecycle platform. A generator can add tags at creation time. A lifecycle platform keeps them correct through every update afterwards, which is the only version of semantic tagging the operating system can actually rely on. When the wallets learn new tricks that read from this layer, your passes are already speaking the language, with no integration work on your side.

The short version

  • Semantic tags are machine-readable annotations on a pass that tell the operating system what each field means, separate from what it displays.
  • They power system intelligence: surfacing the right pass at the right moment, richer previews, and integrations that read pass details directly.
  • They are optional, invisible, and commonly skipped, partly because keeping them correct doubles the maintenance of every field you tag.
  • A pass lifecycle platform applies them automatically and keeps them in sync through every update, so your program inherits new system behaviors as wallets evolve.

If you want passes that the operating system works for, not just displays, this layer is where it starts. Stell handles it on every pass by default.

Questions

Common questions

Do customers ever see semantic tags?

No. The semantics layer is invisible on the pass face; customers only see the fields the design displays. The operating system reads the tags, which is what lets it surface the pass at the right moment or show a richer preview.

Will my pass work without semantic tags?

Yes, and that is exactly why the gap goes unnoticed. A pass renders perfectly well without a single tag, and nothing in the wallet flags their absence. What it loses is the system behavior that reads from the semantic layer, so the pass is simply left out of features it could have inherited.

Does Google Wallet have semantic tags?

Google Wallet approaches the same idea through its own model, using structured class and object fields rather than a semantics dictionary. The mechanism differs, the discipline does not: describe your data properly once, and let each wallet make the most of it.

What happens if a semantic tag falls out of sync with the visible field?

The tag stops being trustworthy. A balance tagged semantically is a promise that the tagged value is the real balance, so it has to be updated every time the visible field is. Keeping the two in step through every update is the part a pass lifecycle platform handles and a one-off generator cannot.

Do I need to add semantic tags myself?

Not on a platform that treats them as plumbing. On Stell, passes carry the semantic data appropriate to their type by default, for both wallets, and the tagged values move with the visible ones on every update.

More on wallet strategy

All articles
Next step

See what this looks like on a pass.

You have read how it works. The next pages show it on the terminals merchants already run, and the merchants running it.