WalletPassAPI

.pkpass inspector

Open an Apple Wallet pass to see what's in it and check it against Apple's rules: pass.json, images, manifest and signature.

Your pass stays in your browser

The pass

Signature

Signed for
Team
Certificate
Expires
Intermediate
Signed at

Images

Barcodes

Languages

Files

pass.json

The authentication token is hidden.

What it checks

Everything comes from Apple's documentation: the pass.json reference, Building a pass and its common problems, Creating the source for a pass, Creating a poster generic pass and the Wallet Developer Guide.

The archive

  • It's a zip, with pass.json at the top level rather than inside a folder
  • No metadata files such as .DS_Store
  • A .pkpasses bundle holds at most 10 passes

pass.json

  • Valid JSON, with formatVersion 1 and every required key
  • Exactly one style, plus posterGeneric with its fallback, and a transit type for boarding passes
  • Every field has a key, unique in its style, and a value; change messages contain %@
  • Date, time and number styles, alignments and data detectors use Apple's values
  • Colours are CSS-style RGB triples, such as rgb(23, 187, 82)
  • Barcodes use a format Wallet supports, with a message and its encoding
  • Dates are complete, with hours, minutes and a time zone
  • webServiceURL comes with an authenticationToken, over HTTPS
  • Up to 10 locations, each with a latitude and longitude
  • Keys that aren't in Apple's reference, and deprecated ones

Images

  • An icon, which every pass needs
  • Every image is a PNG
  • Images the pass's style doesn't show
  • @2x and @3x images are two and three times the size of the 1x

Localizations

  • Every language folder has a pass.strings file with the same keys
  • Localized images are in every folder, and not overridden at the top level

Manifest and signature

  • manifest.json lists every file, with a SHA-1 hash that matches
  • The signature is a valid signature of manifest.json
  • The certificate is for the pass's passTypeIdentifier and teamIdentifier, and hasn't expired
  • Apple's WWDR intermediate certificate is included, issued the signing certificate, and hasn't expired

Or let WalletPassAPI build and sign your passes

Send the pass's content to our API, or design it in the dashboard, and we build, sign and update it for Apple Wallet and Google Wallet.

Questions

What is a .pkpass file?

An Apple Wallet pass: a zip archive with the .pkpass extension. It holds pass.json (the pass's content and settings), its PNG images, any localization folders, manifest.json (the SHA-1 hash of every file) and signature, a PKCS #7 detached signature of the manifest made with a Pass Type ID certificate.

Why won't my pass open in Apple Wallet?

Apple lists the common causes: a missing required key in pass.json, a passTypeIdentifier or teamIdentifier that doesn't match the signing certificate, an expired certificate, a manifest that leaves out a file, a missing icon, images in the wrong format, invalid JSON, and a signature without Apple's WWDR intermediate certificate. The inspector checks each of them.

Does it check the signature?

Yes. It checks that the signature is a valid signature of manifest.json, that the certificate is for the pass's type ID and team, when it expires, and that Apple's WWDR intermediate certificate is included and issued it. It doesn't check the chain up to Apple's root certificate: Wallet does that when the pass is added.

Is my pass uploaded anywhere?

No. The pass is opened and checked in your browser, and nothing is sent to us or stored. That matters because a pass can hold someone's details and the token that lets it update.

Can it open a .pkpasses bundle?

Yes. A .pkpasses file is a zip of up to 10 .pkpass files; the inspector lists them, and you can check each one.