.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
- Read on your deviceThis page opens and checks it on your computer or phone, with any personal details on it and its update token.
- Never sent to our serverNothing is uploaded to WalletPassAPI, or to anyone else.
- No copy keptIt's gone when you close the page. Anything you save goes straight to your device.
The pass
Signature
- Signed for
- Team
- Certificate
- Expires
- Intermediate
- Signed at
No fields.
| Key | Label | Value |
|---|---|---|
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.