Security
You're trusting us with your clients' records. Here's plainly how we protect them. Operated by Vital Brands Inc., Houston, TX.
- Pets and owners
- Vaccination records
- Certificate photos
- Pets and owners
- Vaccination records
- Certificate photos
Row-level security, in the database. Not a filter a page has to remember — one account cannot read another's rows even if the code asks.
The optional pet photo, so a public pet card and a wallet pass can show it. Anyone holding that card's link can see the photo. Nothing else about the pet works that way.
Encrypted everywhere
Every connection to VaxCheck uses HTTPS/TLS, and data is encrypted at rest in our database and file storage. (Email we send you then travels over the ordinary mail network, which we don't control end to end.)
Your data is walled off
Records are isolated per business at the database level (row-level security). One business account can never read another's pets, owners or vaccination records, and reads by your signed-in account are scoped in the database itself, so the isolation does not rest on a single page remembering to filter. One thing sits outside that wall on purpose: the optional pet photo, which is stored so that a pet's public card and wallet pass can show it. Anyone holding that card's link can see the photo. Nothing else about the pet works that way.
Certificate photos are private
Vaccine certificate images live in a private storage bucket that is never publicly listable, and are shown through links that expire. Who can open them: your logged-in account, and VaxCheck staff where support or an abuse investigation requires it. We should be straight about that second one: staff access happens through our hosting provider's console, and this product does not itself keep a log of a staff member opening a file. Actions staff take inside the product are logged; opening an image outside it is not. No other business can reach them — with one exception you control: if the pet owner themselves chooses to send their pet's records to another facility, a copy travels with them. Nobody but the owner can start that.
We never see your card number
Upgrading sends you to Stripe's own hosted checkout page. Your card number is typed there and never reaches our servers, logs or database. What comes back to us is your plan status, the card brand and its last four digits.
Passwordless sign-in
There's no password to steal or reuse. You sign in with a one-time magic link sent to your email, and the business sign-in form is rate limited per address and per connection. Where a Cloudflare Turnstile key is configured for this deployment, the form also carries a bot check; where it is not, the sign-in provider's own abuse protection still applies. We would rather describe the floor than a control a missing setting could quietly remove.
Owners see only their own pet
Pet owners have no access to your dashboard and never see your client list. They can sign in to a records portal of their own, by magic link to their own email address, which shows only the pets recorded against that address.
Trusted infrastructure
We build on Supabase (database & storage), Vercel (hosting), Resend (email), and Stripe (payments) — each receives only the data it needs to do its job. Supabase is SOC 2 Type 2 compliant and ISO 27001 certified; Vercel holds a SOC 2 Type 2 attestation and is ISO 27001 certified; Stripe is certified to PCI Service Provider Level 1. Full list in our Privacy Policy.
Your data stays yours
Delete a pet and it is gone — every record, every certificate image, and the pet's photo, from storage as well as from the database. Want everything exported, or your account closed? Email us and we handle it by hand, within 30 days.
For pet owners: the card and the vault
The records portal adds a few things an owner can carry or share. Each one is built so that the owner holds the switch.
The public link is off until you turn it on
A pet card can have a public verify link, but only if the owner switches it on for that pet. The link is a long random address that cannot be guessed or enumerated, and turning sharing off (or replacing the link) makes the old address stop working at once. Search engines are told not to index it.
Pet data only, never yours
The verify page and the pet card are built from a data model that has no field for an owner's name, email, phone or address, so none of those can leak onto a card by mistake. What a stranger sees is the pet's name, species, breed, photo and a record summary as entered — not an official certificate.
Vault documents are private
Files in the Document Vault live in a private bucket alongside the certificate photos, encrypted at rest and opened through links that expire. Nothing in the vault is ever placed on a card, a pass, a verify page or a travel share link — a share link can list a document's name, never the file.
Every public page is rate-limited
The verify page, the record share and the lost-pet relay are all rate-limited, and the relay form never reveals the owner's email address to the sender.
Uploads are checked, not trusted
Every file an owner uploads — photo or document — is size-capped and inspected by its actual bytes rather than the name it arrived with, so a file claiming to be a photo has to be one. When the pet photo is chosen in the portal, the browser re-encodes it before sending, which also drops the location data a phone camera writes into a photo. That happens in the page, so it is a courtesy of the portal rather than a guarantee about every byte that reaches the endpoint.
Where those certifications belong: they are held by the infrastructure providers named above. Vital Brands Inc. has not itself undergone a SOC 2 or ISO 27001 audit, and we display no security seal we haven't earned. No system is ever completely secure; if we ever learn of a breach affecting your data, we'll notify you promptly. Questions about security? Email hello@vaxcheck.app. See also our Privacy Policy and Terms.