Last reviewed: October 14, 2026
Owner: Christian Moscoso
Tipsy holds a restaurant’s money, its staff records and its books. This page states how that data is protected, who may reach it, and what we do when something goes wrong.
It describes what the product does today, verified against the codebase, and says plainly where a control is missing or partial. A policy that overclaims is worse than none: the first reviewer to check one of these statements and find it untrue stops believing the rest.
Email support@tipsyapp.io with SECURITY in the subject line, and enough detail to reproduce. We aim to acknowledge within two business days and to tell you what we intend to do within five.
Please do not open a public issue, access or modify data that is not yours, or run automated scanning against production. We will not pursue legal action against good-faith research that follows this.
We do not currently run a paid bug bounty.
Restricted
POS credentials, OAuth tokens, bank account identifiers, Stripe customer records
Encrypted at rest. Never logged, never rendered to a client, never sent to a model.
Confidential
Pay rates, salaries, tip pools, performance reviews, time-off reasons, signatures, guest contact details, the general ledger
Visible only to roles that need it, enforced per request. Never shared between tenants.
Internal
Schedules, menus, recipes, inventory counts, supplier catalogs
Visible to members of that venue.
Public
Marketing pages, the supplier-facing catalog a venue chooses to publish
No access control.
A venue’s data is keyed to its location throughout. Every tenant boundary is a query scoped by that column, not a filter applied after reading.
Identity. Sign-in is Google, Apple, or email and password (bcrypt-hashed). The accounting-firm portal, the supplier portal and the POS portal are separate host-routed surfaces, each with its own identity and session.
Sign-in hardening. New password sign-ups confirm their email address before they can sign in. Passwords must be at least 8 characters and are checked against a breached-password list without the password leaving Tipsy. Reset links work once, expire after 30 minutes, and sign the account out everywhere. Anyone can sign themselves out of every device. Venue accounts can turn on two-step sign-in with an authenticator app and recovery codes; connecting a bank or bookkeeping ledger needs a passkey, Google/Apple, or a password plus a code.
Roles are per location, never global. A manager at one venue is plain staff at another. Authorisation helpers resolve the caller’s role at the location in the request and refuse otherwise.
Route-level, not page-level. Page gating alone was not enough — the API is reached directly — so people data is filtered by a single shared module that every route applies, rather than each route re-deciding. The rules are unit-tested.
Firm access is granted per client and per function. An accounting firm sees only the venues that invited it, and functions within that are assignable. Locking a period is its own permission.
Known gaps
In transit. HTTPS throughout, with HSTS.
At rest. The database is managed Postgres, encrypted at rest by the provider, with 7 days of point-in-time recovery. POS credentials and other restricted fields are additionally encrypted in the application with AES-256-GCM, so a database copy alone does not yield them.
Files. Uploaded invoices and receipts live in a private blob store. They are served only through authenticated streaming routes; there are no public object URLs.
Browser headers. Content-type sniffing is off, HSTS is set, and framing is restricted per surface — relaxed only on the surfaces a venue deliberately embeds in its own site.
Known gaps
Tipsy’s general ledger is append-only. Nothing is edited or deleted after posting; a correction is a reversing entry that points at the original. A closed month is refused at the posting layer, not hidden in the interface.
This matters beyond accounting. It means financial history cannot be quietly rewritten — by a user, by a support engineer, or by an attacker with application access. Five integrity checks run against the books on demand and are enforced at month-end close, so a ledger that has been written to by anything other than a posting shows up as a failure rather than as a number nobody can source.
Firm-side actions against a client’s books are recorded with actor, action, timestamp and detail, and surfaced in an audit pane. Closing a month with outstanding items requires a written reason, which is stored alongside the lock. Supplier catalog changes are logged per actor. Errors go to our monitoring provider.
Known gaps
Services that store or process customer data on our behalf:
Plaid was added to this list on October 14, 2026, after a compliance review found this page still said the bank feed had not shipped. It had. Zebra was missing entirely. Both are recorded with the date rather than quietly inserted, because this page is only worth reading if its corrections are visible.
Customers are notified of material subprocessor changes before they take effect.
Known gaps
The named owner above is the escalation point.
Known gaps
We are not SOC 2 certified and do not claim to be. Readiness is a separate, funded workstream, not yet begun.
PCI. Tipsy does not store, process or transmit full card numbers. Card data is handled by Stripe. POS card data is handled by the POS provider.
Privacy. Our Privacy Policy and Terms of Service set out data handling, roles and retention. Firm users accept terms explicitly before reaching client data.
Data subject requests. Any user can request a copy of their personal data, or its deletion, from the Account page. Each files a ticket so a person handles it, because deletion touches payroll history that an employer is required by law to retain — those records stay with the employer and are not ours to delete.
In the order we intend to address it:
This list is deliberately public. A customer deciding whether to trust Tipsy is better served by an accurate account of what is missing than by a claim that nothing is.