Wallet Passes PoC
Add test passes, then scan the QR code with an iPhone to try Apple Wallet.
Admin key
1. Add passes
One passenger becomes a single pass; several become a bundle.
Drop .pkpass or .pkpasses files here
or click to choose
or
More options
2. Scan with the iPhone camera
Test tickets
How it works
Three different addresses
| Address | What it is | Who uses it |
|---|---|---|
/this page |
The test console. Creates and withdraws test tickets. Not part of the real design. | You |
/t/{passId}?e=…&k=…&s=…ticket page link |
A web page showing the journey and the Add to Apple Wallet button. It is not the pass: opening it adds nothing to Wallet. This is what the QR code, Open ticket page and Copy link give you, and what an email would link to. | Passenger |
/v1/{passId}?e=…&k=…&s=…pass download link |
The actual pass file (.pkpass for one passenger, .pkpasses bundle for several). It sits behind the Add to Apple Wallet button. On an iPhone it opens the Wallet sheet directly. |
The Wallet button; a kiosk QR code could also point here |
What the buttons do
- Add to Apple Wallet (on the ticket page): opens the pass download link. Shown on iPhone, iPad and Mac.
- Add to Google Wallet (on the ticket page, Android only): goes straight to Google's own link from the Ticketing API. Google hosts that pass; nothing is downloaded from here. Only shown if you supplied a Google link under More options.
- Show QR: the ticket page link for that test ticket again.
- Withdraw / Restore: simulates a refund. A withdrawn ticket's links return Ticket not available (410), even though they are still correctly signed.
Why the links look like that
passIdidentifies the journey's pass without revealing the booking.eis when the link expires: the ticket's last valid date plus 30 days (30 days from now for tests).kis the signing key version, so the key can be changed without breaking old links.sis the signature. Changing any character of the link makes it invalid (403), so links cannot be guessed or edited.- The same
e,kandswork for both the ticket page and the download, so the page can hand them on to its button.
What happens by device
- iPhone, iPad, Mac: the download link streams the pass with Apple's headers and Wallet opens.
- Android: the download link redirects to the Google Wallet link when one was supplied; otherwise it returns the pass file.
- Anything else (for example Windows): the pass file is downloaded too. The button never leads to another page.
What is real and what is test-only
- Real design: the two link types, signing, expiry, withdraw (410), device routing, the response headers and storage in the passes bucket.
- Test-only: this page, the admin key, the Google link box, and keeping the ledger as a file beside each pass (the real design uses Firestore).
- Use test bookings only: passes carry passenger names.