Your data
Schema-only: the header row and three clamped rows pass; the rest of the file stays
The cascade holds nothing between calls — but the product around it has an account, a wallet, an audit trail and your uploads. Here is what each of those is, which store it sits in, how long it survives, and exactly what happens when you press delete.
What we store
Eight categories, and nothing else.
The cascade itself is pure compute — it holds no state between calls. The deployed product around it does: an account, a wallet, an audit trail, your uploads for as long as you need to finish an import, and the records that keep the service working and safe.
Account email
Sign-in & sessions
Uploaded files & mappings
API keys
Usage & audit trail
Billing data
Error reports & support
Prompt-injection signals
We do not collect biometric data, precise geolocation, behavioural analytics, or advertising identifiers. See §2 of the Privacy Policy for the complete list.
- Uploads in KV, on a TTL you set
- RLS tenant isolation
- HMAC self-contained API keys
- Headers + ≤3 rows in schema-only
- Hash-chained audit_logs
Where it lives
Every row has a store, a clock, and a reader.
“We don’t keep anything” is not a claim we make. This is the actual map: which system holds each thing, how long it survives there, and which identity is allowed to read it back.
| What | Retention | Who can read it |
|---|---|---|
| Parsed uploads (may contain PHI)Cloudflare KV (MAPR_KV), mirrored to Supabase | 0, 24, 168 or 720 h — 24 by default; an uncommitted upload’s record stays until the workspace goes | Service role, tenant-scoped |
| Account, wallet, workspace settingsSupabase Postgres | Until you delete the workspace | Your user JWT, under RLS |
| API keysHMAC-signed, self-contained | Until you revoke them | Nobody — we store no key |
| Audit trailSupabase audit_logs, hash-chained and append-only | 7 years · erased with the workspace | You, and whoever you export it to |
| Billing recordsStripe + Supabase metadata | Stripe keeps invoices and payments; our ledger keeps amounts and dates with nothing linking them to you | Stripe holds the card |
| Edge request logsCloudflare | 7 days (logs) · about 3 months (analytics) | Operations, metadata only |
| Prompt-injection signalsSupabase mcp_security_events | 180 days · erased with the workspace | AdaptivMapr operators; you, through the export |
Two modes
Schema-only sends a clamped sample, never the file.
Schema-only and full-data are two modes of the same cascade, not two tiers of a plan. Both draw the same small flat per-map fee; schema-only sends headers and at most three sample rows clamped to 80 characters a cell, full-data sends the rows. Neither turns the models off: columns the deterministic layers cannot settle go to our mapping ranker and the model layer in both — the mode decides how much a model sees.
Schema-only — data minimization
Full-data — in-region, under a BAA
PHI routing is off by default: an unconfigured workspace runs standard. Turning it on is an explicit opt-in in Settings → Security & Data, in the same place you accept the BAA/NDA. See how the wallet is charged and how one run resolves its routing.
Erasure
Two buttons, one implementation.
“Delete workspace” erases one workspace for all its members. “Delete account” erases every workspace you are alone in, leaves the ones you share, and deletes your sign-in. Both run one implementation. There used to be two, and one of them skipped the audit event, the KV purge and the cache clears, then reported success after a failed delete.
- 1Audit event first
The erasure intent is written and awaited BEFORE anything is destroyed. If a later step fails, the workspace is still there and the attempt is on its record; if the erasure completes, it goes with the rest of the audit log.
- 2Outside stores first
While the database still says what belongs to the workspace: every upload is purged from Cloudflare KV with its webhook secret, delivery record and dead-letter entries, the phi-cloud key is revoked, and the Stripe customer profile is deleted. If any of these fails, the erasure stops there and the workspace is left whole, so a retry finishes the job.
- 3One database transaction
One function erases the whole database side at once: the workspace’s entire audit log, its rate-limit counters, the tenant row and everything hanging off it. The billing ledger is kept but stripped of the workspace link, and signed agreements are kept as evidence. Before it commits, it checks every table for anything still carrying the workspace id. If something is left, nothing is committed. It records one anonymous tombstone.
- 4Caches cleared
Per-workspace KV entries (quota, admin email, entitlements) are deleted, and connectors, settings, agreement and key caches are invalidated, so a warm Worker isolate cannot bring a deleted row back.
- 5Notification email
A destructive-action email is queued through the Worker’s waitUntil so it still lands after the response has flushed and the tenant row is gone.
- 6No false success
Neither route reports success unless every step finished. A failed erasure returns an error, never “Account deleted.” Account deletion also stops before removing your sign-in, so you can sign in and try again.
# Two buttons, one implementation (lib/workspaceErasure.ts).
# Both require a CSRF token AND a server-side confirmation string.
curl -X DELETE https://adaptivmapr.com/api/v1/me/workspace \
-H "X-CSRF-Token: $CSRF" \
-H "content-type: application/json" \
-d '{"confirm":"delete-my-workspace-<workspace_id>"}'
# The account button erases every workspace that is yours alone, leaves the
# ones you share, then deletes your sign-in:
curl -X DELETE https://adaptivmapr.com/api/auth/account \
-H "X-CSRF-Token: $CSRF" \
-H "content-type: application/json" \
-d '{"confirm":"delete my account"}'You do not need curl: the same cascade runs from Dashboard → Settings → Account, which asks you to type the confirmation phrase first. Erasure cannot be undone, so take a copy before you press it: Download your data sits on the same page (see Export & rights). Deleting a workspace erases everything in it, for every member: uploads and their stored copies, connectors and their secrets, API keys, chats and stored files, schemas, saved mappings and reshape programs, settings, and the workspace’s audit log. Its phi-cloud key is revoked and its Stripe customer profile is deleted, which also cancels any subscription. Deleting your account erases every workspace where you are the only member and removes you from workspaces you share with others — those stay with their members, including their audit log of what you did there, but your email is removed from their uploads and approvals. Then your sign-in is deleted. The audit log is erased with the workspace. What remains is one anonymous erasure record — a one-way hash of the workspace id, the time, and how many records were removed — so an erasure can be shown to have happened without keeping whose it was. Kept, for accounting and as evidence of what was agreed: the billing ledger (amounts, dates and Stripe references, no longer linked to the workspace or to you — Stripe keeps the invoices and payments), and signed BAA/DPA records and Terms/Privacy acceptances, which keep the signer’s name, email, IP address and browser and are deleted automatically after six years. If you cannot reach the dashboard, email dpo@adaptivmapr.com from the registered address with the subject Account deletion request. We action it within one month.
Export & rights
Portability, access, correction — self-serve, or on request.
You have the right to receive a copy of your personal data in a machine-readable format (GDPR Art. 20 / nFADP Art. 25), and to access, correct, restrict or object to our processing of it.
Sign in at /dashboard to review your API keys, usage, audit trail and workspace settings. Uploaded files stay reachable in Chat for as long as your workspace retention setting keeps them.
Workspace owners and admins can download one JSON file — settings, members, saved schemas, learned layouts, signed agreements, the wallet ledger, the audit log, prompt-injection signals and remembered chats — with Download your data on Dashboard → Settings → Account. For anything that file does not cover, or if you cannot sign in, email dpo@adaptivmapr.com with the subject Data export request. We respond within one month.
The complete list of rights is in §8 of the Privacy Policy. AdaptivMapr is HIPAA-ready — we offer a BAA and hold a HIPAA security risk assessment on file — and SOC 2 Type II is in progress, with no attestation report yet. HIPAA is not a certification anyone can hold, so we do not claim one.