Passmint
TemplatesIntegrationsDocsPricingBlog
Log inGet started
Passmint

Apple and Google Wallet passes from one API. Built for people who ship.

Product
  • Pass Designer
  • Developers
  • Distribution
  • Analytics
  • Templates
  • Integrations
  • Pricing
Developers
  • Documentation
  • API reference
  • Node SDK
  • Webhooks
  • MCP server
Company
  • Changelog
  • About
  • Contact
  • Support
  • Security
  • Terms
  • Privacy
Social
  • GitHub
  • X

© 2026 Passmint.

Apple Wallet & Google Wallet, one API.

Free, runs in your browser

Why won't my Apple Wallet pass open?

Drop in a .pkpass file and see exactly what Wallet will object to: the signature, the certificate, the manifest hashes, pass.json and the images, each with a fix. It's checked on your device and never uploaded.

Your pass never leaves your browser.

Common reasons a pass won't open

What you see on the phone, what the validator reports for it, and what to change.

Safari cannot download this file

  • Blocks installA file doesn't match its manifest hash
  • Blocks installA file is in the archive but not in the manifest
  • Blocks installThe signature doesn't match manifest.json

manifest.json lists a SHA-1 hash for every file in the pass, and the signature covers manifest.json. Change any file after signing, or let your zip tool add extras such as __MACOSX or .DS_Store, and the hashes no longer match. Rebuild the manifest and sign it as the very last step.

See it happen: try the "Edited after signing", "Extra macOS files" and "Manifest changed after signing" samples.

The pass was zipped inside a folder

  • Blocks installFiles are inside a folder

Zipping the folder instead of its contents puts pass.json one level down, and Wallet looks for it at the top of the archive. Select the files themselves and zip those.

See it happen: try the "Zipped inside a folder" sample.

The certificate expired

  • Blocks installThe signing certificate has expired
  • WarningThe signing certificate expires within 30 days

Pass Type ID certificates expire a year after they're issued, and passes signed with an expired certificate won't install. Renew it in the Apple developer portal and sign new passes with the new certificate. The validator warns you when fewer than 30 days are left.

The pass installs but never updates

  • WarningThis pass won't update: webServiceURL and authenticationToken go together
  • WarningThis pass won't update: authenticationToken is too short
  • WarningThis pass won't update: webServiceURL should use HTTPS

Updates need both webServiceURL and an authenticationToken of at least 16 characters, served over HTTPS. These don't stop the pass installing, so the validator reports them as warnings. It reads pass.json only and never contacts your web service.

The barcode doesn't show

  • WarningThis barcode only shows on iOS 27 and later
  • WarningWallet won't show a barcode for this pass
  • WarningThis barcode may not display

Code39, Codabar, EAN13 and I2of5 (PKBarcodeFormatI2of5, also called ITF) only display on iOS 27 and later. Add a QR, PDF417, Aztec or Code128 barcode to the barcodes array as a fallback so earlier iPhones still show one. If no barcode uses a format Wallet knows, the pass can still install but shows no barcode at all.

Questions

What happens to your file, and what the check covers.

No. The file is unzipped and checked by a script running in your browser, on your device. Nothing about it, not even its name, is sent to Passmint or anyone else. The only pass it ever downloads is one of our samples, and only when you pick one.
That the file is a valid zip with pass.json, manifest.json and signature at the top level and an icon; that every file matches its SHA-1 hash in the manifest; that the signature matches the manifest and was made with an Apple-issued Pass Type ID certificate that hasn't expired and matches the pass's passTypeIdentifier and teamIdentifier; that pass.json has its required keys, one pass style, unique field keys and valid barcodes, colours and dates; that images are real PNGs at sensible sizes; and that pass.strings files can be read.
No. It only checks Apple Wallet .pkpass files. Google Wallet passes aren't files you download, they're created through Google's API, so there is nothing to drop in here.
The usual reason is the barcode: Code39, Codabar, EAN13 and I2of5 barcodes only show on iOS 27 and later, so older iPhones show the pass without one unless you add a fallback format. The other is caching: a phone that already has the pass keeps its copy, so a fix you shipped since may only show on a phone adding it for the first time. Remove the pass and add it again to test.

Skip the packaging mistakes

Passmint builds, hashes and signs your passes with your own Pass Type ID certificate, so the zip and manifest mistakes above don't happen, and reminds you before that certificate expires.

See how Passmint works