Security & data

You resell trust. So we wrote ours down.

Your clients hand you the keys to their environment on the strength of your judgement. Part of that judgement is the platform you run them on — so here is exactly how Tantivo handles isolation, secrets, auditing and your data leaving, including the parts we have not built.

  • Two-axis database isolation
  • Per-tenant envelope encryption
  • Self-service export

Isolation on two axes

Every row carries the tenant it belongs to. Rows that belong to a specific client carry the client as well. Both are enforced by Postgres row-level security on read and write, inside the session — not by application code remembering a filter.

Secrets in a vault, never a column

Credentials, API keys and licence keys are envelope-encrypted with a per-tenant data key, itself wrapped by a key held in Azure Key Vault. Records store a reference. Every read, write and failure is audited.

Append-only history

The audit log and the per-module event logs cannot be updated or deleted by the application at all — the grant does not exist. The single exception is a redaction procedure that records what was redacted and why.

Permission-based roles

Access is granted through permission bundles rather than a single role enum, across three surfaces: your operator staff, your clients’ portal users, and vendor support. Role changes are themselves audited events.

Credentials you can revoke

Integration credentials are held per tenant in the same vault. Disconnecting a connector destroys its stored credential; OAuth state is bound to the principal that started the flow, so a state parameter cannot be replayed by someone else.

Export and deletion

Self-service export covers every tenant-scoped table and is generated from the database schema, so a new table cannot silently escape it. Per-record erasure tombstones the row — PII redacted, operational keys preserved — with a 30-day target.

The isolation model

Enforced in the database, not in a code review.

The usual way multi-tenant software leaks is a missing WHERE tenant_id in one query nobody reviewed carefully. Tantivo does not rely on that clause being present. Sessions carry the tenant — and for portal users the client — as database claims, and row-level security policies check them on every read and every write.

The client portal runs under a different database role from your operator app. That role is default-deny: it holds grants only on the specific tables the portal needs, and on some of those only on named columns. A table nobody granted is unreachable because it was never granted.

Adding a table to the portal takes three deliberate steps — a grant, an isolation policy, and a regression test that attempts cross-client access and asserts it fails. Every tenant-scoped table ships with its policy and its test in the same change.

app.tantivo.ai/settings/users
User management showing staff members, their permission-bundle roles and status.
app.tantivo.ai/settings/export
The self-service data export screen, listing what the export contains and letting an owner request one.
Your data

Leaving should be boring.

Export is a button in Settings, not a support conversation. It covers every tenant-scoped table, and — this is the part that matters — the export is generated from the database schema itself. When we add a table, the build fails unless that table is either included or explicitly annotated as vendor intellectual property rather than your data.

That annotation requirement is the whole point. It means “we forgot to include it” is not a failure mode that can reach production quietly.

Personal data inside event payloads is stored by reference rather than copied, so redacting a person’s record does not leave their name scattered through a hundred immutable log rows.

Infrastructure

What it runs on, specifically.

Hosting

Microsoft Azure, West US 2. Both applications run as containers on Azure Container Apps.

Database

Azure Database for PostgreSQL Flexible Server. Plain Postgres — no proprietary extensions in the data path.

File storage

Azure Blob Storage. Files are served through short-lived signed URLs, never public containers.

Key management

Azure Key Vault holds the key-encrypting key. Per-tenant data keys are wrapped, never stored in plaintext.

Transport

HTTPS everywhere. Behind a proxy the client address is taken from the trusted hop, not the spoofable one.

Operator auth

In-app sessions with argon2id password hashing, invite-only sign-up, optional Microsoft SSO with verified-email matching.

Portal auth

A separate auth instance, separate session cookie and a separate database role from the operator app.

Brute force

Sign-in throttling on both surfaces, keyed so a shared proxy cannot be used to lock out or overload.

What we do not do yet

The honest limits

Tantivo is a young platform run by a small team. Some things a mature vendor offers, we do not — and you should find that out here rather than three weeks into an evaluation.

  • No formal attestations. No SOC 2 Type 2, ISO 27001, HITRUST or FedRAMP. We are not going to imply otherwise with a badge that means “we intend to”.
  • No regulated-workload tenants. We do not currently onboard MSPs whose own operations fall under HIPAA, CMMC, GLBA-as-a-covered-institution, FERPA or COPPA. Serving clients in those industries is normal and fine; being subject to the regime yourself is the line.
  • No negotiated DPAs. Our terms are our terms while we are this small. If you need bespoke contractual language, we are not the right platform yet.
  • No regulator-grade backup guarantees. Backups exist and are tested, but point-in-time attestation to a regulator is explicitly out of scope today.
  • Single region. Everything runs in Azure West US 2. There is no EU or in-country data residency option.

These are current limits, not permanent policy. They lift when the company is big enough to stand behind them properly — and we would rather lose a deal now than fail an audit you staked your reputation on.

Questions

Where is our data stored?

In Microsoft Azure, West US 2 — Postgres for records and Azure Blob Storage for files. There is no data residency option outside that region today; if your clients require one, tell us before you sign up rather than after.

Do you use our data to train AI models?

No. Prompts go to Anthropic to answer that request under commercial terms that do not train on business-tier API content, and nothing is pooled into a shared model or a cross-tenant benchmark.

Can Tantivo staff see our data?

Only through a separate, explicitly audited code path — not through the normal application, which is bound to your tenant like everyone else’s. Every cross-tenant read writes an audit event naming the staff member. That path exists for support and for the product-feedback feature, and it is deliberately narrow.

What happens to our data if we leave?

You export it yourself, from inside the app, before you go — no ticket, no fee, no negotiation. Deletion on request follows a documented process with a 30-day target. Backups age out on their own retention schedule after that.

Do you have a bug bounty or a disclosure process?

There is no paid bounty programme yet. If you find something, email support@tantivo.ai and we will respond. We would much rather hear it from you.

Something not answered here? Email support@tantivo.ai and ask directly — including the awkward ones.

Ready to run your MSP at full gallop?

Bring acquisition, delivery and billing into one transparent, AI-native system. Join the waitlist for the private trial.

Prefer email? support@tantivo.ai