PathixDataverse Forensics
Security architecture · Compliance posture

Customer-hosted.
Metadata-only. Passwordless.

Pathix runs entirely inside your Azure subscription, reads metadata only, and signs in to Dataverse, SQL and Key Vault with managed identities rather than stored credentials. Granting a user access to Pathix does not extend their access to any Dataverse record they could not otherwise view.

Read the whitepaper (PDF)security@pathix.app
● TL;DR
Security in 60 seconds
  • Customer-hosted
    Runs in your Azure subscription. Vendor has no production infra that processes customer data.
  • Metadata-only
    No path to retrieve or persist customer record values, enforced in code: no generic Retrieve, no value/content/data column. Stores administrative principal identifiers (names, UPNs) in the customer's own tenant; no business record content anywhere in the schema.
  • Passwordless auth
    Entra ID + MSAL for users, user-assigned managed identities for services. No client secrets or certificates on Pathix's app registrations.
  • BYOK AI
    Optional. Your provider, your keys. Vendor never proxies, brokers, or stores AI credentials.
  • Customer-owned logs
    Container logs land in a Log Analytics workspace in your subscription. No shared logging plane, and nothing is sent to Pathix.
  • Open architecture
    Bicep template and full coverage detail in /how-it-works. Nothing about the system is hidden. A CycloneDX SBOM is generated for every release, available on request.
Continue below for the full architecture, identity model, cryptography, application-security mitigations, telemetry catalog, shared-responsibility matrix, and disclosure policy. Compliance posture has its own page: SOC 2, ISO 27001, FedRAMP, NIST, GDPR, HIPAA, PCI →
Foundational commitments

Four design choices the rest of the page builds on.

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.

01 · CUSTOMER-HOSTED
Runs in your subscription. Not ours.

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.

02 · METADATA-ONLY
Built so record data can't be retrieved or stored.

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.

03 · PASSWORDLESS
Entra ID for users, Managed Identity for services.

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.

04 · BYOK AI
Optional, with keys and endpoints you own.

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.

Deployment model

Inside your subscription, with egress you control.

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.

CUSTOMER AZURE SUBSCRIPTION · REGION OF YOUR CHOICEPathix instanceDeployed via pathix.bicepWeb App & APIASP.NET Core 10 · Container AppScan OrchestratorBackground metadata extractionAzure SQL DatabaseMetadata · findings · configAzure Key VaultLicense · integration secretsManaged identitiesUser-assigned · one per containerLog AnalyticsCustomer-owned logsPathix Scanner roleRead-only · metadata privilegesDataverse{environment}.crm.dynamics.comSolutionscustomizationsPlugins · FlowscomponentsRoles · Privilegessecurity modelBusiness recordsnever readOUTSIDE CUSTOMER TENANTMicrosoft Entra IDlogin.microsoftonline.com · OAuth/PKCECustomer-chosen AI providerAzure OpenAI · OpenAI · Anthropic · BYOKContainer registry (Pathix)ghcr.io · image pulls, read-only tokenVendor never sees:· customer record data· customization names or IDs· tenant or customer IDs· AI prompts or AI provider keys· operational logs
COMPUTE
Two Azure Container Apps · web and API
STORAGE
Azure SQL Database
SECRETS
Azure Key Vault
IDENTITY
Two user-assigned managed identities · one per container
LOGS
Log Analytics · customer-owned
TENANT ISOLATION
Azure subscription boundary · no shared layer
DATA RESIDENCY
Region of your choice · Azure-native
EGRESS
License validation and error reporting local, no phone-home · container images pull from ghcr.io
Data handling

What Pathix reads. What Pathix never touches.

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.

CATEGORY
EXAMPLES
PATHIX ACCESS
Structural metadata
Table and column definitions, relationships
Read
Behavioral configuration
Workflow, plugin and flow definitions
Read
Security configuration
Roles, privileges, principals, team memberships
Read
Event metadata
Audit event tuples (actor, target, time; values stripped)
Read (planned)
Customer business records
Account, contact, opportunity and custom records
No access
Audit log payloads
Before/after values from record changes
No access
Embedded record values
Hardcoded GUIDs in workflow XAML or formulas
Discarded post-parse
What Pathix reads, and the records it never touchesOn grid paper: a column puck labeled Structural metadata; a plugin block and a cloud flow block, labeled together Behavioral configuration, each wired to the column; and a security role block with no wire, labeled Security configuration. To the right, in a warm pool of lamplight, an open drawer of blank record sheets labeled Customer business records. A loupe lies on the top sheet, and its lens reads: Not read.Not read.PLGFLWROLEStructural metadataBehavioral configurationSecurity configurationCustomer business records
What Pathix reads, and the records it never touchesOn grid paper: a column puck labeled Structural metadata; a plugin block and a cloud flow block, labeled together Behavioral configuration, each wired to the column; and a security role block with no wire, labeled Security configuration. To the right, in a warm pool of lamplight, an open drawer of blank record sheets labeled Customer business records. A loupe lies on the top sheet, and its lens reads: Not read.Not read.PLGFLWROLE1234
  1. Structural metadata
  2. Behavioral configuration
  3. Security configuration
  4. Customer business records
LAYER 01
SDK wrapper
Compile-time enforcement

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.

LAYER 02
Schema constraints
No column can hold customer data

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.

LAYER 03
Code review
Mandatory checklist

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 →

Identity & access

Passwordless, least-privileged, auditable before assignment.

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.

AUTHENTICATION
End users

Microsoft Entra ID via MSAL · OAuth 2.0 Authorization Code with PKCE. MFA, conditional access and identity protection apply transparently from your tenant.

Service to Dataverse

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.

Access to Pathix

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.

The Pathix Scanner role: all 101 Read privileges · the complete read-only footprint

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.

#
PRIVILEGE
TABLE / SURFACE
1
prvReadPluginAssembly
pluginassembly
2
prvReadPluginType
plugintype
3
prvReadSdkMessage
sdkmessage
4
prvReadSdkMessageProcessingStep
sdkmessageprocessingstep
5
prvReadSdkMessageProcessingStepImage
sdkmessageprocessingstepimage
6
prvReadWorkflow
workflow
7
prvReadWebResource
webresource
8
prvReadSystemForm
systemform
9
prvReadSavedQueryVisualizations
savedqueryvisualization (privilege name is plural)
10
prvReadCustomization
customization umbrella: sitemap, ribboncustomization, customcontrol
11
prvReadQuery
savedquery (named prvReadQuery, not prvReadSavedQuery)
12
prvReadappaction
appaction (privilege name is lowercase)
13
prvReadmsdyn_dataflow
msdyn_dataflow
14
prvReadconnectionreference
connectionreference
15
prvReadconnector
connector: the custom-connector inventory. Without it the inventory is simply unavailable
16
prvReadServiceEndpoint
serviceendpoint: service endpoints and webhooks (by contracttype)
17
prvReadCanvasApp
canvasapp
18
prvReadPublisher
publisher
19
prvReadCustomAPI
customapi
20
prvReadRole
role
21
prvReadFieldSecurityProfile
fieldsecurityprofile (gates fieldpermission reads; no standalone prvReadFieldPermission)
22
prvReadTeam
team
23
prvReadBusinessUnit
businessunit
24
prvReadOrganization
organization
25
prvReadPosition
position
26
prvReadSolution
solution
27
prvReadUser
systemuser (named prvReadUser, not prvReadSystemUser)
28
prvReadAnyPrivilegeEntity
umbrella: configuration-table reads with no standalone privilege
29
prvReadEntity
table metadata
30
prvReadAttribute
attribute metadata
31
prvReadRelationship
relationship metadata
32
prvReadEntityMap
entitymap: table-to-table data mapping
33
prvReadAttributeMap
attributemap: column-to-column data mapping
34
prvReadEntityDataProvider
entitydataprovider: the plug-in registration behind each virtual table
35
prvReadfxexpression
fxexpression: the Power Fx behind Dataverse functions and low-code plug-ins (privilege name is lowercase)
36
prvReadmsdyn_function
msdyn_function: the maker-facing wrapper for a Dataverse function
37
prvReadPrincipalObjectAttributeAccess
principalobjectattributeaccess: per-record column sharing, read as an aggregate count only
38
prvReadRecordFilter
recordfilter: the filters behind column-based record filtering
39
prvReadEntityRecordFilter
entityrecordfilter: which table each record filter applies to
40
prvReadbot
bot: Copilot Studio agents (privilege name is lowercase)
41
prvReadbotcomponent
botcomponent: an agent's knowledge bindings
42
prvReadmsdyn_AIModel
msdyn_aimodel: AI Builder models and prompts; also covers msdyn_aiconfiguration, which has no privilege of its own
43
prvReadmsdyn_AITemplate
msdyn_aitemplate: the model-type catalog behind AI Builder models
44
prvReadDVTableSearch
dvtablesearch: Dataverse knowledge configurations, the data AI can answer from
45
prvReadDVTableSearchEntity
dvtablesearchentity: the tables each knowledge configuration is grounded on
46
prvReadDVTableSearchAttribute
dvtablesearchattribute: the columns each grounded table exposes
47
prvReadAppModule
appmodule: model-driven app names, used to label knowledge configurations
48
prvReadpowerpagesite
powerpagesite
49
prvReadpowerpagecomponent
powerpagecomponent
50
prvReadmspp_website
mspp_website
51
prvReadmspp_webrole
mspp_webrole
52
prvReadmspp_entitypermission
mspp_entitypermission: table permissions
53
prvReadmspp_entityform
mspp_entityform
54
prvReadmspp_entitylist
mspp_entitylist
55
prvReadmspp_webpage
mspp_webpage
56
prvReadmspp_webtemplate
mspp_webtemplate (inventoried, not parsed)
57
prvReadmspp_sitesetting
mspp_sitesetting: evaluated site posture
58
prvReadmspp_columnpermission
mspp_columnpermission
59
prvReadmspp_columnpermissionprofile
mspp_columnpermissionprofile
60
prvReadmspp_webpageaccesscontrolrule
mspp_webpageaccesscontrolrule: page access rules
61
prvReadmspp_publishingstate
mspp_publishingstate: page lifecycle. A rule bound to a publishing state is dormant outside it, so this gates the access rule as much as the display
62
prvReadmspp_contentsnippet
mspp_contentsnippet: snippets referenced from Liquid templates
63
prvReadmspp_pagetemplate
mspp_pagetemplate: the page-to-template render pointer
64
prvReadmspp_webform
mspp_webform: advanced forms
65
prvReadmspp_webformstep
mspp_webformstep: the advanced-form step graph
66
prvReadmspp_entityformmetadata
mspp_entityformmetadata: basic-form set-on-save write edges
67
prvReadmspp_webformmetadata
mspp_webformmetadata: step-parented set-on-save write edges. A separate table from entityformmetadata, not a second lookup on it
68
prvReadmspp_webfile
mspp_webfile: web file inventory (the file contents come from powerpagecomponent)
69
prvReadmspp_websiteaccess
mspp_websiteaccess: site-management permissions
70
prvReadmspp_sitemarker
mspp_sitemarker
71
prvReadmspp_weblinkset
mspp_weblinkset
72
prvReadmspp_weblink
mspp_weblink
73
prvReadmspp_redirect
mspp_redirect
74
prvReadmspp_shortcut
mspp_shortcut
75
prvReadAdx_website
adx_website
76
prvReadAdx_webrole
adx_webrole
77
prvReadAdx_webpage
adx_webpage
78
prvReadadx_entitypermission
adx_entitypermission (lowercase a, unlike adx_website above)
79
prvReadadx_entityform
adx_entityform (lowercase a)
80
prvReadadx_entitylist
adx_entitylist (lowercase a)
81
prvReadadx_webtemplate
adx_webtemplate (lowercase a; inventoried, not parsed)
82
prvReadAdx_sitesetting
adx_sitesetting (capital A, unlike the column permissions below)
83
prvReadadx_columnpermission
adx_columnpermission (lowercase a)
84
prvReadadx_columnpermissionprofile
adx_columnpermissionprofile (lowercase a)
85
prvReadAdx_webpageaccesscontrolrule
adx_webpageaccesscontrolrule (capital A again)
86
prvReadAdx_publishingstate
adx_publishingstate (capital A; the transitionrule sibling is lowercase)
87
prvReadAdx_contentsnippet
adx_contentsnippet (capital A)
88
prvReadAdx_pagetemplate
adx_pagetemplate (capital A)
89
prvReadadx_webform
adx_webform (lowercase a): advanced forms
90
prvReadadx_webformstep
adx_webformstep (lowercase a): the step graph
91
prvReadadx_entityformmetadata
adx_entityformmetadata (lowercase a): basic-form set-on-save write edges
92
prvReadadx_webformmetadata
adx_webformmetadata (lowercase a): step-parented set-on-save write edges
93
prvReadAdx_webfile
adx_webfile (capital A, although its nearest neighbors by name are lowercase)
94
prvReadAdx_websiteaccess
adx_websiteaccess (capital A): site-management permissions
95
prvReadAdx_sitemarker
adx_sitemarker (capital A)
96
prvReadAdx_weblinkset
adx_weblinkset (capital A)
97
prvReadAdx_weblink
adx_weblink (capital A)
98
prvReadAdx_redirect
adx_redirect (capital A)
99
prvReadadx_shortcut
adx_shortcut (lowercase a, unlike the four above)
100
prvReadadx_botconsumer
adx_botconsumer (lowercase a)
101
prvReadadx_serverlogic
adx_serverlogic (lowercase a): server-side JavaScript endpoints

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.

Scan cost

About 2,500 to 4,500 read requests the first time. About 200 a night after.

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.

ENVIRONMENT
SIZE
FIRST SCAN
EVERY SCAN AFTER
Medium
974 tables
2,103 requests · 7 min
117 requests · 1 min
Large
1,444 tables, 48,577 plugin step registrations, 304 cloud flows
2,540 requests · 5 min
157 requests · 1.5 min
Dynamics 365 Sales
1,942 tables, 114 cloud flows
4,205 requests · 25 min
194 requests · 6 min
Dynamics 365 Field Service
2,100 tables, 136 cloud flows
4,547 requests · 29 min
193 requests · 12 min

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.

SERVICE PROTECTION
Its own budget
Per user, per web server, five minutes

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.

DAILY ALLOCATION
About 0.9% of the daily pool
Per tenant, 24 hours

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.

THROTTLING
It waits when Dataverse asks
Retry-After, then up to three retries

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

Cryptography & network

TLS 1.2+ everywhere, with no keys we manage.

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.

Encryption in transit

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.

Encryption at rest

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.

Secret storage

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.

Network ingress

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.

OUTBOUND ENDPOINTS · NORMAL OPERATION
login.microsoftonline.com
Token acquisition · Entra ID and Managed Identity
Always
{environment}.crm.dynamics.com
Dataverse metadata reads
Always
{customer}.vault.azure.net
Secret retrieval
Always
{customer}.database.windows.net
Application database
Always
ghcr.io
Container image pulls · read-only token issued by Pathix
Always
api.powerapps.com
Canvas app deep scan · Power Apps admin API, then the app package from Azure Blob Storage
Optional
graph.microsoft.com
Email notifications · sendMail from one shared mailbox, off by default
Optional
api.anthropic.com, api.openai.com or your Azure OpenAI resource
AI features · one active provider at a time
Customer-enabled
All endpoints are loggable and may be restricted by your egress policy. License validation is a local signature check with no network call, and error reporting is customer-initiated. The one Pathix-controlled source is the container registry on ghcr.io, which the deployment pulls images from.
Application security

Hard-mode defaults, enforced in CI.

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.

VULNERABILITY CLASS
MITIGATION
SQL injection
Parameterized queries via Entity Framework Core and Dapper. No dynamic SQL construction.
Cross-site scripting (XSS)
React JSX escaping by default. Content Security Policy headers. dangerouslySetInnerHTML is forbidden by lint rule.
CSRF
SameSite cookies. Bearer-token authentication on API endpoints.
Insecure deserialization
System.Text.Json with allow-list typing. No BinaryFormatter usage.
Server-side request forgery
Outbound hosts come from deployment and admin configuration: your Dataverse environments, Entra, your Azure resources, ghcr.io and, if enabled, the Power Apps API, Microsoft Graph and your AI provider.
Authentication bypass
Every API endpoint that returns or changes data requires a valid Entra ID bearer token, validated against Microsoft public keys. The anonymous routes are health checks, the sign-in configuration and deployment details the web app needs before sign-in, and the OAuth discovery and client-registration routes MCP sign-in uses.
Sensitive data exposure
Metadata-only boundary. Structured logging filters reject record-data fields. Stack traces sanitized before emission.
Artificial intelligence

Optional, bring-your-own-key, with AI edges labeled.

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.

BYOK by default

AI features require a customer-configured provider, Azure OpenAI, OpenAI or Anthropic. The vendor never proxies, brokers or stores AI provider credentials.

Graceful degradation

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.

AI-derived confidence

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.

Telemetry & privacy

Three telemetry categories in one catalog, generated from source.

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.

WHAT IS COLLECTED
License validation
Mandatory · local

Validated by a local cryptographic signature check. There is no network call, so nothing is sent.

Anonymous usage telemetry
Not in 1.0 · planned

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.

Crash diagnostics
1.0 · customer-initiated

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.

NEVER COLLECTED, EVEN HASHEDExcluded by source-level filter
  • Plugin code, JavaScript, and code from external repos
  • Customer or tenant identifiers other than the license identifier
  • Customer record data of any kind
  • Finding contents (the existence may be counted in aggregate; the contents are never transmitted)

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 →
Shared responsibility

Customer-hosted means the boundary moves.

Because Pathix is customer-hosted, the responsibility model differs from a typical SaaS engagement. The matrix below clarifies the division.

DOMAIN
VENDOR
CUSTOMER
Application code
●
—
Security patches and releases
publish
deploy
Azure subscription and billing
—
●
Network configuration
—
●
Database backup and DR
—
Azure-native
Identity and access management
—
Entra ID
Dataverse environment hygiene
—
●
AI provider relationship and billing
—
BYOK
License compliance
issue
operate
End-user training
docs
delivery
Incident response in customer tenant
—
●
Disclosure & continuity

A small front door for big questions.

Vulnerability disclosure

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.

security@pathix.app
Supply chain

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.

CycloneDX SBOM · available on request
Incident response

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.

Customer-controlled · vendor-supported

Walk an InfoSec review through the architecture.

Bring your security questionnaire. We will answer it against the actual code paths and the Bicep template.

Book security walkthroughRead the whitepaper (PDF)
© 2026 Pathix L.L.C. · self-hosted · metadata-only
Not affiliated with Microsoft. Dynamics 365, Dataverse, and Power Platform are trademarks of Microsoft Corporation.π