Security
Architecture, not adjectives.
Every claim on this page is a fact you can verify. No badges, no trust-us language, no compliance theatre.
Data flow
How a webhook becomes an auditable action.
One diagram, the whole runtime. Webhook in, vendor APIs out, audit + state in tenant-scoped Postgres. Every box on this page is documented further below.
Dashed boundary = your tenant on Microsoft Azure. No customer data leaves this boundary. Outbound traffic to documented vendor APIs is logged per agent run.
Architecture
How Ops AI is put together.
Microsoft Azure
All compute, storage, and data processing runs in Microsoft Azure. All tenants are hosted in a single Azure region, with geo-redundant backups held in Azure's paired region.
Tenant-scoped Postgres
Multi-tenant PostgreSQL with row-level tenant isolation — every tenant-scoped table carries the tenant's identifier. Every query is scoped to the authenticated tenant, enforced at the application layer and verified in automated tests on every deploy.
Secrets in Azure Key Vault
No plaintext credentials in source, config, or database — vendor credentials are encrypted at rest, with the encryption key held in Azure Key Vault. Key rotation supported. Access audited.
Microsoft Entra auth
Sign-in via Entra (Azure AD). Multi-tenant admin-consent flow — no manual app registration on your side. There's no email-and-password option.
Zero-trust outbound
Agent tool calls leave Azure only to reach documented vendor APIs (Autotask, Datto, IT Glue, Pax8, Microsoft Graph, UniFi). Outbound traffic is logged per run.
Approval gates by default
Every write — ticket, password, reboot, license change — passes through an approval gate. Auto-approve is opt-in per SOP, per vendor, per customer. A wrong decision needs a human before anything happens.
Append-only audit log
Every write, every approval, every agent decision is logged to an append-only store. Retained seven years by default. Audit exports available on both plans.
No model training
Your tickets, customers, SOPs, and decision traces never enter a training set. Inference runs on Microsoft's Azure OpenAI Service, whose data-processing terms prohibit training on customer inputs. Prompts and responses are not retained for model improvement. Microsoft's built-in service-abuse monitoring may hold prompts securely for up to 30 days before deletion; that data is never used for training.
Data residency
Your data stays in your tenant.
Customer data, SOP definitions, agent decision traces, and audit logs all live in a single Microsoft Azure region, with geo-redundant backups in Azure's paired region. No cross-tenant replication. No US-hosted analytics pipeline reaching in. AI model inference and embeddings are served from a separate Azure region.
Model inference runs on Microsoft's Azure OpenAI Service under Microsoft's data-processing terms. Prompts and responses are not retained for training. Specific region availability is disclosed in the MSA.
Hosting
Microsoft Azure
- Compute
- region-pinned
- Storage
- region-pinned
- Postgres
- region-pinned
- Key Vault
- region-pinned
- Model inference
- routed via DPA
What we store
The data we need to run your SOPs.
- Event payloads from your webhooks (PSA, RMM, EDR)
- Agent decision traces — reasoning, tool calls, arguments, results
- SOP definitions you author
- Minimal customer identity records for cross-vendor mapping
- Audit logs for every write action, every approval, every user action
- User account metadata (email, name, role) via Entra
What we don't store
Data that doesn't need to be here.
- End-user passwords — those live in IT Glue; we fetch at the point of use
- Payment details — billing is handled by Stripe, tokenised
- Raw webhook payloads beyond 90 days
- PII that isn't needed for cross-vendor mapping
- Analytics data from end-users of your MSP customers
Retention
How long we keep each kind of data.
- Agent run decision traces
- 90 days by default (configurable per tenant)
- Audit logs
- 7 years
- Raw webhook payloads
- 90 days (then truncated)
- SOP definitions
- Indefinite (version history retained)
- User accounts
- Until you delete the account
- Backups
- 30 days point-in-time restore
Need tighter limits or extended audit retention for a specific compliance posture? Email hello@msp-ops.ai — we'll work it out per tenant.
Tenant isolation
One tenant can't see another. Verified in tests.
Ops AI is multi-tenant. Every database query is scoped to the authenticated tenant — no query leaves the application layer without a tenant constraint. The constraint is enforced in automated tests that run on every deploy; if a code path allows cross-tenant access, the deploy fails.
Each tenant's vendor credentials are stored encrypted; the encryption key lives in Azure Key Vault, never alongside the data. Agent runs receive scoped credentials that can only address the authenticated tenant's connected vendors.
Audit logs include a tenant identifier on every record. Export filters by tenant automatically. Internal admin access runs through a separate, role-gated admin surface where administrative changes are audit-logged, and support access into a tenant uses a logged impersonation flow.
More questions
Need a security review before signing?
Architecture diagrams, DPA, and reference config. Tell us your constraints — we'll send what you need.