This page describes how the Services are protected. It is referenced by the DPA as the technical and organisational measures we commit to.
A note on how to read it. Toothprint is built by one person today. A security page written for a fifty-person company — on-call rotations, background checks, quarterly tabletop exercises — would be easy to write and false. What follows is what runs. Where a measure is not in place, it says so, and that is more useful to you than a list you cannot verify.
We are responsible for the platform: the application code, the backend configuration, the security rules, the subprocessors, the build and release path.
You are responsible for your devices, your network, your credentials, who you let into your practice, and the lawful basis for what you upload. See the Acceptable Use Policy and the DPA.
Every patient, appointment and session carries the identifier of the practice that owns it. Rules compare that identifier against the practice of the account asking. There is no pooling of data between practices anywhere in the application layer.
This was verified end to end on 11 September 2026 with real accounts: a member of one practice reading their own patient succeeded; the same read from an account in a different practice was refused with a 403.
Files in Cloud Storage are reachable by a download link that carries a token. That token is a credential: anyone holding the link can fetch the file, and the storage rules do not apply to it. This is how Firebase is designed, and it is worth you knowing it, because it changes what "a link to a scan" means: forwarding one is handing over the file, not a reference to it.
What we do about it:
This section used to say that point-in-time recovery was enabled and that backups expire within 12 months. Neither statement was verified, and a security page is exactly the wrong place to write something you have not checked. What is actually true:
What the platform logs by default, and what it does not, because the difference matters:
We do not routinely read Customer Data. Where an investigation requires it, the access is deliberate, and since 12 September it is logged.
Write to hola@toothprint.ai with "security" in the subject. We answer within one business day.
If you want to encrypt, say so in the first message and we will send a key. We will not threaten
anyone who reports a vulnerability in good faith.
We notify you of a personal data breach within 72 hours of becoming aware, under Section 8 of the DPA, and we tell you what we know at the time rather than waiting for a complete picture. There is one person on this rota today and that person is reachable by email.
We would rather list these than let their absence be inferred:
| Not in place | Status |
|---|---|
| Enforced multi-factor authentication for professional accounts | Planned |
| Point-in-time recovery and a restorable backup | Not configured |
| Independent penetration test | Not done |
| SOC 2 / ISO 27001 | Not started; neither is realistic before the entity exists |
| Customer-managed encryption keys | Not available |
| De-identification of scans before they leave the practice | Designed, not implemented. Today scans are uploaded as captured |
| A Business Associate Agreement covering the full chain | Not held, which is why HIPAA Covered Entities are not accepted |
| 24/7 on-call | No |
Updated September 12, 2026 · Version 1.2
Version 1.1, amended 12 September 2026. Version 1.0 was published on 11 September and contained statements that a review against the running system showed to be wrong. They are corrected here rather than quietly edited, because a published document that changes without saying so is worth less than one that admits it changed: a page that said no third party ran AI inference on patient material, while a patient-photo feature was sending faces to a generative model; a security page that claimed point-in-time recovery and 12-month backups that were never configured; a deletion promise that gave one timeline for three destinations that do not run at the same speed; and a three-year destruction promise with no machinery behind it.
Version 1.2, amended September 12, 2026. The analytics export to BigQuery stopped carrying the raw sessions collection — which holds patient identifiers and download links inside it, and a download link is a credential — and now carries a derived collection with nothing identifiable in it. The history already exported is kept separately, pseudonymised. This is written down because version 1.1 described the previous export, and describing it wrongly after fixing it would be version 1.0's mistake in reverse.