Privacy Policy for Passio
Last Updated: October 31, 2026
Overview
Passio ("the App") is a digital wallet app. It lets you store and manage boarding passes, loyalty cards, event tickets, and other passes on your mobile device. Your privacy is important to us.
Data Collection
Data Stored Locally on Your Device
The App stores the following data on your device:
- Pass data: Boarding pass details, loyalty card numbers, event tickets, and other pass information you scan or enter manually, stored in a local SQLite database
- Barcode data: Raw barcode content from scanned passes, used to display the pass again, stored in a local SQLite database
- Photos: Images of documents or passes you capture in the app, stored as files in the app document directory
- App preferences: Settings and preferences, such as theme and sort order, stored in device key-value storage (AsyncStorage)
Local data stays on the device. It is not sent to a network server unless you use a cloud feature or an error report is sent (see Crash and Error Reports below).
You can export a backup of your passes as a plain, unencrypted JSON file (.passioexport). The app does not offer a passphrase or any encrypted export. Store exported backup files safely. The app does not send the backup file anywhere; you share it yourself through the system share sheet.
Data Processed by Cloud Services
Error reports are sent automatically in production builds, and you cannot turn them off in the app. Every other cloud feature below is optional and is used only when you choose to use it.
Wallet Export
To add a pass to Apple Wallet or Google Wallet, you must be signed in. This includes anonymous sign-in.
The App sends these pass fields to our Firebase Cloud Functions:
- Pass type, title, subtitle, issuer, and the logo image
- Visual colors (background color, foreground color, label color)
- Pass dates: the relevant date and, when set, the expiration date
- Barcode format, barcode message, barcode alt text, and barcode encoding
- Header, primary, secondary, auxiliary, and back fields
- The pass identifier, which is used in the app launch link for the pass
- Pass locations: the coordinates (latitude and longitude) and location text for each location you entered on the pass
- When present, membership program name and number, balance, airline code, flight number, departure and destination airport codes, event name, event type, event start date, and venue name
The Apple Wallet function returns the generated .pkpass file directly to the app. The Google Wallet function returns a Google Wallet save link. Neither function writes the generated pass to Firebase Storage.
Our functions also store a hashed IP address and a user ID for rate limiting. Limits apply per account and per hashed IP. The same user ID keys a monthly usage record in Firestore that holds the month, your plan tier, and how many Apple Wallet and Google Wallet passes you generated that month. We use it to enforce monthly pass limits.
Cloud OCR
Cloud OCR is off by default. You can turn it on in Settings by selecting "Read images with cloud OCR".
When cloud OCR is off, all image reading happens on the device.
When cloud OCR is on and you submit a photo, the photo is sent over HTTPS to our Firebase function ocrImage. The function processes the photo in memory and does not write it to storage. The app keeps the returned text.
Requests are rate limited per account and per IP address. A hashed IP address is used for the limit.
Accounts
The App creates an anonymous account so that wallet export and rate limiting work. You can use the App without signing in with an email address.
An email address is stored only if you create an account with an email address and password.
Crash and Error Reports
In production builds, the App automatically sends error reports (errors, fatal errors, and unhandled promise rejections) to our Firebase project, where they are stored in the Firestore collection errors.
Each report contains the error message, a stack trace (up to 2000 characters), a context label, the platform, the time, and the app version.
When text recognition fails on a photo on your device, the report's context label also contains the local file path of that photo. The path is stored in our Firestore errors collection. Reports use the user ID "anonymous" unless the app sets a user ID for error reporting. The current code never sets one.
Reports are not sent in development builds.
The app does not use Firebase Crashlytics.
Error reports are used for app stability. They are not used for advertising or tracking.
Data We Do NOT Collect
- The app reads your device location on demand, in the foreground, only when you turn on location surfacing. That position is not sent to our servers. The locations you enter on a pass are uploaded when you export that pass to a wallet.
- We do not sell or share your personal data with third parties
- We do not use advertising SDKs
- We do not collect device identifiers for tracking purposes
Data Security
- All cloud communication uses HTTPS/TLS encryption
- Firebase Security Rules ensure users can only access their own data
- Cloud Functions enforce authentication and rate limiting
- Apple Wallet passes are signed with industry-standard certificates
- Sensitive credentials, such as certificates and keys, are stored in Firebase Secret Manager
Third-Party Services
The App uses the following third-party services:
- Firebase Authentication: For user account management
- Firebase Cloud Functions: For generating Apple Wallet and Google Wallet passes
- Cloud Firestore: For error reports, rate-limit records, and monthly pass-usage records
- Firebase Cloud Functions (OCR): For reading text from photos you attach when cloud OCR is enabled
These services are operated by Google LLC. Their privacy policy is available at: https://policies.google.com/privacy
Your Rights
You can:
- Delete your data: Use the "Delete All Data" action in Settings to remove data stored on the device
- Export your data: Export a plain JSON backup from the Backup screen, or share passes through Apple Wallet or Google Wallet
- Delete your account: Contact us by email to request account deletion
- Opt out of cloud features: Use the app fully offline without creating an account
Cloud data and account deletion are handled by email request to [email protected].
Children's Privacy
The App is not directed at children under 13. We do not knowingly collect personal information from children.
Changes to This Policy
We may update this privacy policy from time to time. We will notify you of changes by updating the "Last Updated" date.
Contact
For privacy-related questions or data deletion requests:
- Email: [email protected]
- Website: https://essatt.com
GDPR (European Users)
If you are in the European Economic Area, you have additional rights under GDPR. These include the right to access, rectify, port, and erase your data.
Our legal basis for processing is your consent for cloud features and legitimate interest for local app functionality.
CCPA (California Users)
California residents have the right to know what personal information is collected and to request deletion. We do not sell personal information.