Wallet Passes PoC

Add test passes, then scan the QR code with an iPhone to try Apple Wallet.

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

Test tickets

How it works

Three different addresses

AddressWhat it isWho 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

  • passId identifies the journey's pass without revealing the booking.
  • e is when the link expires: the ticket's last valid date plus 30 days (30 days from now for tests).
  • k is the signing key version, so the key can be changed without breaking old links.
  • s is the signature. Changing any character of the link makes it invalid (403), so links cannot be guessed or edited.
  • The same e, k and s work 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.