Ops AI

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.

Ops AI data flow architecture A webhook event arrives at the Microsoft Azure ingress, passes through the agent runtime which reads secrets from Key Vault, authenticates via Microsoft Entra, writes audit and state to tenant-scoped Postgres, and makes outbound calls only to documented vendor APIs. All storage and compute stay inside the tenant's hosting region. MICROSOFT AZURE — TENANT-SCOPED Webhook ingress idempotency · retry · auth Agent runtime 300+ vendor tools · SOP DAG approval gates · cost trace Azure Key Vault per-tenant secrets Microsoft Entra auth · SSO · SCIM Postgres tenant-scoped rows · append-only audit PSA · RMM · EDR webhook source Vendor APIs Autotask · Datto IT Glue · Pax8 MS CSP · UniFi Datto EDR HTTPS read secrets authn audit + state logged outbound

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.