The Pathix security posture is shaped by four architectural commitments. Each one narrows the surface that the platform introduces into your environment, and each one is enforced in code, not just policy.
Pathix is delivered as an ARM/Bicep template you deploy into your own Azure subscription. The vendor maintains no production infrastructure that processes customer data.
The metadata-only boundary is enforced at the SDK wrapper, the database schema and code review. Pathix has no generic Retrieve method, no value/content/data column, and no path for record bodies to enter the system.
Users sign in with Entra ID. Services authenticate with two user-assigned managed identities, one per container, and no Pathix app registration carries a client secret or certificate. The few stored secrets (the image pull token, a break-glass SQL password that cannot sign in while Entra-only auth is on, and your license) sit in your Key Vault.
AI features run only against an AI provider you configure (Azure OpenAI, OpenAI or Anthropic). The vendor never proxies, brokers or stores AI provider credentials. AI-proposed edges are labeled AI-derived and never override a deterministic finding.
Pathix is delivered as a Bicep template that provisions a single set of Azure resources in a region you choose. The vendor has no production database, file storage or compute that processes customer data.
The metadata-only commitment is the foundation of the rest of the compliance posture. It is enforced through three independent architectural layers, not policy alone.
All Dataverse calls route through one internal wrapper class with a deliberately constrained method surface (GetEntityMetadata, GetSecurityRoles, GetWorkflowDefinitions). No generic Retrieve. No raw organization service. No other component may reference the Dataverse SDK directly, and an architectural fitness test in CI enforces this at build time: a violation blocks the merge.
The Pathix relational schema contains no generic value, content or data columns. Customer-authored content like workflow XAML and form JavaScript is processed in memory during a scan and is not persisted. Derived structural outputs are stored. Raw bodies are not.
Every change touching Dataverse ingestion is reviewed against an explicit checklist: does this introduce a new path for record data, expose values in logs/errors/telemetry, or surface customer record contents in the UI?
Audit the claim yourself: the schema, and what is deliberately not in it →
End-user authentication uses Microsoft Entra ID via OAuth 2.0 with PKCE. Service-to-service authentication to Dataverse uses the API container's user-assigned managed identity. The required Dataverse privileges live in one role, Pathix Scanner, which a script creates in each environment at deployment.
Microsoft Entra ID via MSAL · OAuth 2.0 Authorization Code with PKCE. MFA, conditional access and identity protection apply transparently from your tenant.
The API container's user-assigned managed identity, the only identity that holds Dataverse, SQL and Key Vault grants. The web container runs as a separate identity that can read only the image pull token. No client secrets or certificates, and the database connection string carries no password.
Authorization is enforced at the API layer, and by default only accounts assigned to the Pathix API app in Entra can sign in. This release has one access tier: every assigned user can see every environment and scan in the deployment and change its settings. Container logs go to the Log Analytics workspace in your subscription.
Every privilege the Pathix Scanner role requests. All 101 are Read, all at Organization scope, and all on configuration and metadata tables: plugin and SDK registration, automation, AI agents and knowledge configuration, Power Pages configuration, the security model, solutions, and table, column and relationship metadata. Not one grants read on a business-data table like account or contact. The metadata-only boundary, made concrete. The role ships with the full set, and Pathix has no ability to modify its own security role.
Read-only, Global scope, created by a script at deployment. Appendix A.1 of the security whitepaper carries the same list, grouped by surface, alongside the privileges the role was evaluated for and deliberately does not request.
Measured on four test environments: two scanned on 2026-10-03, the larger built to look like a mature, ISV-heavy estate, and two fresh Dynamics 365 trials with Microsoft's Sales and Field Service apps installed, scanned on 2026-10-06. Those apps customize the command bar on almost every table. Pathix has since stopped reading a table's command bar when only Microsoft-published solutions customize it, so expect a first scan of an environment like those two to cost roughly 1,500 fewer requests than the measurements below show. A scan never writes to Dataverse. It reads configuration, not records, so the number of rows in your tables doesn't change its cost: a table with 50 million rows costs the same as an empty one.
None of the four environments throttled a single request. Run time depends on the region, the environment's web servers and the network; the request count depends only on the size of your configuration, so it's the number to plan with. After the first scan, each scan asks Dataverse what changed since the last completed one and reads only that, so most nights cost the smaller number.
Dataverse limits each user to 6,000 requests and 20 minutes of execution time in a sliding five-minute window, on each web server. Pathix scans as its own application user, so it spends its own budget, not your integrations' or your people's. No full scan used more than half of one window, with at most 8 requests in flight against Microsoft's 52.
Application users share one tenant pool: 500,000 requests a day plus 5,000 per Dynamics 365 Enterprise or Professional license, or 25,000 on a tenant with only Power Apps or Power Automate licenses. Counting every Pathix request against it, on a Dynamics 365 tenant a full scan is about 0.9% of the minimum and a nightly scan about 0.04%. On a tenant with only Power Apps or Power Automate licenses, which has no Dynamics 365 apps to scan, it's about 10% and 0.6%. Microsoft excludes system metadata operations, so the real share is lower.
If Dataverse throttles a request, Pathix waits the Retry-After time it returns, up to five minutes, retries up to three times, and records each throttle on the scan. A throttled scan still completes, just later, and its health summary says how long it waited.
Scans run one at a time across all your environments, nightly at 02:00 UTC by default or whenever you schedule them, and every scan records how many requests it made. One read reaches record-level information: record shares, which Pathix counts per table and per principal with aggregate queries, without reading the shared records. You can turn it off per environment.
Microsoft's limits as published on Microsoft Learn, checked 2026-10-04: Service protection API limits · Requests limits and allocations
Encryption at rest and in transit comes from Azure platform services. The template deploys with Microsoft-managed keys and does not set up customer-managed keys.
TLS 1.2+ on all communication. Cipher suites restricted to Azure default policy. Applies to Dataverse, Entra ID, Azure SQL, Key Vault, and any AI provider.
Azure SQL Transparent Data Encryption with Microsoft-managed keys, the Azure default. Key Vault is the Standard tier, so its keys are software-protected rather than HSM-backed.
Deploy-time secrets live in your Key Vault: the image pull token, the break-glass SQL password and your license. Access is gated by managed identity and Azure RBAC, and the web container can read only the pull token. The license reaches the API as an environment variable referenced from Key Vault. An AI provider key, if you enter one, is stored in the Pathix database as ciphertext under a key held in Key Vault, and is never logged.
Azure-managed TLS endpoint on the web container, the only one reachable from the internet; the API accepts internal traffic only. SQL and Key Vault use public endpoints gated by Entra authentication. Private endpoints and a WAF are on the v0.2.0 roadmap.
Pathix is C# (.NET 10) and TypeScript. The codebase enforces nullable reference types, treat-warnings-as-errors and TypeScript strict mode across every project, with security-relevant analyzers in the CI gate.
AI can extend coverage by surfacing writers and readers that static parsing alone cannot resolve, for example custom code paths, dynamic column references and external integrations. Every dependency surfaced this way carries an AI-derived confidence level so reviewers can tell at a glance which edges came from deterministic analysis and which came from a model.
AI features require a customer-configured provider, Azure OpenAI, OpenAI or Anthropic. The vendor never proxies, brokers or stores AI provider credentials.
Deterministic analysis runs at full fidelity without AI. With AI enabled, the platform also surfaces AI-derived writers and readers that static parsing alone cannot resolve.
Any writer or reader sourced from an AI sweep is tagged with an AI-derived confidence level in the trace, so reviewers can separate model-derived edges from deterministic ones.
In 1.0, Pathix transmits no telemetry: license validation is a local check with no network call, error reporting is customer-initiated, and usage telemetry is not yet collected. The posture below covers three categories, each governed by a distinct policy. The complete catalog of every event Pathix is capable of emitting is generated from source code, so the documentation cannot drift from implementation.
Validated by a local cryptographic signature check. There is no network call, so nothing is sent.
Not collected in Pathix 1.0. Planned post-1.0 as opt-in mandatory: feature identifiers, scan durations, bucketed counts, error classes. Never names or record data.
The customer generates a local log export and emails it to support; nothing is transmitted automatically. An opt-in, default-off sanitized flow is planned post-1.0.
Compliance posture has its own page: SOC 2, ISO 27001:2022, FedRAMP and Azure Government, NIST SP 800-53, GDPR, HIPAA, and PCI-DSS, framework by framework.
Compliance posture →Because Pathix is customer-hosted, the responsibility model differs from a typical SaaS engagement. The matrix below clarifies the division.
Suspected vulnerabilities reach security@pathix.app. Reports are acknowledged within two business days and triaged within five. Critical findings ship patched releases within fifteen calendar days of validated discovery.
New runtime dependencies require explicit approval. The full set is enumerated in source-controlled package manifests with automated vulnerability scanning. A complete CycloneDX SBOM is generated for every release and is available on request, typically as part of an evaluation.
Pathix runs in your subscription, so incidents are first your incident under your IR procedures. The vendor coordinates on disclosure-attributable findings: validation, software remediation, and cross-customer notification when relevant.
Bring your security questionnaire. We will answer it against the actual code paths and the Bicep template.