Skip to content

Copilot Agent Inventory - Dataverse Schema

Auto-generated schema documentation. Do not edit manually — regenerate with python scripts/create_cai_dataverse_schema.py --output-docs.

Overview

The Copilot Agent Inventory solution uses 8 Dataverse tables, 13 solution-specific option sets, and 1 shared option set(s), with 106 custom columns (plus the auto-created primary key and fsi_Name on each table). All entities use the fsi_ publisher prefix.

Logical-name convention. Dataverse logical names are the SchemaName lowercased with NO underscores between words (fsi_CopilotAgent -> fsi_copilotagent, fsi_AgentId -> fsi_agentid). Always use logical names in OData $select / $filter / $orderby.


Option Sets

Shared Option Sets

Option Set Values
fsi_acv_zone Unclassified (0), Zone 1 (1), Zone 2 (2), Zone 3 (3)

CAI-Specific Option Sets

Option Set Values
fsi_cai_createdin Copilot Studio (100000000), Microsoft 365 Copilot Agent Builder (100000001), Unknown (100000002)
fsi_cai_agenttype Standard (100000000), Lite / Agent Builder (100000001), Declarative Agent (100000002), Classic V1 (excluded) (100000003), Unknown (100000004)
fsi_cai_discoverysource Azure Resource Graph (100000000), Per-Environment Dataverse Scan (100000001), PPAC Reconciliation (100000002), Reconciled (multi-source) (100000003)
fsi_cai_featuretype Topic (100000000), Skill (100000001), Knowledge Source (100000002), Custom GPT (100000003), Copilot Settings (100000004), External Trigger (100000005), File Attachment (100000006), Bot Variable (100000007), Bot Entity (100000008), Dialog (100000009), Dialog Schema (100000021), Trigger (100000010), Language Understanding (100000011), Language Generation (100000012), Bot Translations (100000013), Test Case (100000014), Tool / Plugin (100000015), Connector (100000016), Power Automate Flow (100000017), Environment Variable (100000018), Dataverse Search Grounding (100000019), AI Builder Model (100000020), People (Org Chart & Profile) (100000022), Other / Unrecognized (100000099)
fsi_cai_componentversion V1 (100000000), V2 (100000001), Not Applicable (100000002)
fsi_cai_policytype PAYG Billing Policy (100000000), Prepaid Credit Policy (100000001), None (100000002), Unknown (100000003)
fsi_cai_spendscope Chat (100000000), SharePoint (100000001), All Surfaces (100000002), Unknown (100000003)
fsi_cai_workiqtier None (100000000), MCP in Copilot Studio (per-user license) (100000001), Direct Work IQ API (consumption) (100000002), Unknown (100000003)
fsi_cai_workiqobserved Not Observed (100000000), Invoked (100000001), Configured, Not Invoked (100000002), Unknown (100000003)
fsi_cai_risklevel Low (100000000), Medium (100000001), High (100000002), Critical (100000003), Unknown (100000004)
fsi_cai_scancompleteness Complete (100000000), Incomplete Scan (100000001), Failed (100000002)
fsi_cai_detectionsource Dataverse Botcomponent Scan (100000000), Declarative Manifest (Local App Package) (100000001), Declarative Manifest (Source/CI Repo) (100000002), Declarative Manifest (Export Adapter - Future) (100000003), Unknown (100000099)
fsi_cai_detectionconfidence Declared (Manifest) (100000000), Configured (Dataverse) (100000001), Inferred (100000002), Unknown (100000099)

Tables

Copilot Agent (fsi_copilotagent)

Ownership: OrganizationOwned
Entity set: fsi_copilotagents
Primary name column: fsi_name
Description: Canonical agent master record (system-of-record) for Copilot Studio and Agent Builder agents discovered across the tenant

Column (SchemaName) Logical name Type Required Description
fsi_Name fsi_name String(850) Yes Primary name attribute
fsi_AgentId fsi_agentid String(100) Yes Copilot Studio bot GUID (ARG 'name' / Dataverse botid)
fsi_AgentName fsi_agentname String(500) Yes Agent display name (ARG properties.displayName)
fsi_EnvironmentId fsi_environmentid String(100) Yes Power Platform environment GUID this agent lives in
fsi_SchemaName fsi_schemaname String(200) No Dataverse schemaName of the agent
fsi_OwnerUpn fsi_ownerupn String(200) No Agent owner user principal name
fsi_OwnerId fsi_ownerid String(100) No Agent owner Microsoft Entra ID object GUID
fsi_CreatedIn fsi_createdin Picklist (fsi_cai_createdin) No Authoring surface; the zero-rating entitlement classifier keys on this
fsi_AgentType fsi_agenttype Picklist (fsi_cai_agenttype) No Standard / Lite-Agent-Builder / Declarative; drives scan completeness
fsi_PublishedState fsi_publishedstate String(100) No Publish/state status derived from statecode + lastPublishedAt
fsi_AuthMode fsi_authmode String(100) No bot.authenticationmode (No-auth / Microsoft / manual)
fsi_BotId fsi_botid String(100) No Identity botId from ARG
fsi_EntraAppId fsi_entraappid String(100) No Microsoft Entra ID application (client) ID bound to the agent
fsi_EntraAgentId fsi_entraagentid String(100) No Microsoft Entra Agent ID (preview field)
fsi_IsManaged fsi_ismanaged Boolean (default: false) No Managed flag (preview; null for Agent Builder agents)
fsi_Region fsi_region String(100) No Environment region / location
fsi_DiscoverySource fsi_discoverysource Picklist (fsi_cai_discoverysource) No Which discovery layer last wrote this row
fsi_CreatedOn fsi_createdon DateTime No Agent creation timestamp (ARG createdAt)
fsi_ModifiedOn fsi_modifiedon DateTime No Agent last-modified timestamp
fsi_LastPublishedAt fsi_lastpublishedat DateTime No Last publish timestamp (ARG lastPublishedAt)
fsi_LastScannedAt fsi_lastscannedat DateTime Yes When this inventory row was last refreshed
fsi_RunId fsi_runid String(36) No GUID correlating all records from one scan run
fsi_RawJson fsi_rawjson Memo(100000) No Full ARG / bot JSON snapshot for evidence and reparse

Alternate key fsi_AgentEnvKey: (fsi_agentid, fsi_environmentid) — idempotent upsert key.

CAI Environment (fsi_caienvironment)

Ownership: OrganizationOwned
Entity set: fsi_caienvironments
Primary name column: fsi_name
Description: Power Platform environment inventory with zone classification and per-environment delta-change-tracking watermark

Column (SchemaName) Logical name Type Required Description
fsi_Name fsi_name String(850) Yes Primary name attribute
fsi_EnvironmentId fsi_environmentid String(100) Yes Power Platform environment GUID
fsi_EnvironmentName fsi_environmentname String(500) Yes Environment display name
fsi_EnvironmentUrl fsi_environmenturl String(400) No Source-environment Dataverse Web API base URL; the Work IQ solution joins this to resolve per-env URLs
fsi_Region fsi_region String(100) No Environment region / location
fsi_EnvironmentType fsi_environmenttype String(100) No Production / Sandbox / Trial / Default / Developer
fsi_IsManaged fsi_ismanaged Boolean (default: false) No Whether this is a Managed Environment
fsi_Zone fsi_zone Picklist (fsi_acv_zone) No Governance zone classification
fsi_AgentCount fsi_agentcount Integer No Number of agents discovered in this environment
fsi_DeltaLink fsi_deltalink Memo(100000) No Dataverse @odata.deltaLink for incremental change tracking
fsi_LastScannedAt fsi_lastscannedat DateTime Yes When this environment was last scanned
fsi_RunId fsi_runid String(36) No Correlating scan run GUID

Alternate key fsi_EnvKey: (fsi_environmentid) — idempotent upsert key.

CAI Agent Feature (fsi_caiagentfeature)

Ownership: OrganizationOwned
Entity set: fsi_caiagentfeatures
Primary name column: fsi_name
Description: Capability-composition layer: one row per detected feature (botcomponent or many-to-many relationship target) per agent

Column (SchemaName) Logical name Type Required Description
fsi_Name fsi_name String(850) Yes Primary name attribute
fsi_AgentId fsi_agentid String(100) Yes Parent agent bot GUID
fsi_EnvironmentId fsi_environmentid String(100) No Environment GUID the feature was detected in
fsi_FeatureType fsi_featuretype Picklist (fsi_cai_featuretype) Yes Feature class (botcomponent type or M:M relationship target)
fsi_ComponentType fsi_componenttype Integer No Raw botcomponent_componenttype code (0-19), if applicable
fsi_ComponentVersion fsi_componentversion Picklist (fsi_cai_componentversion) No V1 / V2 pairing of the source component
fsi_SourceObjectId fsi_sourceobjectid String(100) Yes botcomponentid or many-to-many target record GUID
fsi_SourceObjectName fsi_sourceobjectname String(500) No Display name of the source component / target
fsi_IsEnabled fsi_isenabled Boolean (default: true) No Whether the feature is enabled on the agent
fsi_RelationshipName fsi_relationshipname String(200) No botcomponent navigation property the feature was matched through
fsi_DetectionSource fsi_detectionsource Picklist (fsi_cai_detectionsource) No Acquisition source that produced this row (Dataverse botcomponent scan or a declarative-manifest adapter)
fsi_DetectionConfidence fsi_detectionconfidence Picklist (fsi_cai_detectionconfidence) No Declared (manifest) vs Configured (Dataverse); declared capabilities may be removed by the user at runtime (v1.7 user_overrides)
fsi_DetectionDetail fsi_detectiondetail Memo(4000) No JSON provenance for manifest-derived rows: source locator, manifest schema version, and capability sub-settings such as the v1.7 People include_related_content flag
fsi_AgentRefProvisional fsi_agentrefprovisional Boolean (default: false) No The fsi_agentid is a PROVISIONAL manifest/app id not yet bound to a Dataverse bot GUID (no --id-map match during manifest detection). Downstream joins (Copilot Billing Governance) must reconcile provisional rows before use; queryable so provisional rows can be filtered
fsi_LastScannedAt fsi_lastscannedat DateTime Yes When this feature row was last refreshed
fsi_RunId fsi_runid String(36) No Correlating scan run GUID

Alternate key fsi_AgentFeatureKey: (fsi_agentid, fsi_sourceobjectid) — idempotent upsert key.

CAI Auth Share (fsi_caiauthshare)

Ownership: OrganizationOwned
Entity set: fsi_caiauthshares
Primary name column: fsi_name
Description: Per-agent authentication and sharing posture, including the Entra-ID-auth + Require-sign-in audience-control predicate

Column (SchemaName) Logical name Type Required Description
fsi_Name fsi_name String(850) Yes Primary name attribute
fsi_AgentId fsi_agentid String(100) Yes Agent bot GUID
fsi_EnvironmentId fsi_environmentid String(100) No Environment GUID
fsi_AuthMode fsi_authmode String(100) No No auth / Authenticate with Microsoft / Authenticate manually
fsi_AuthProvider fsi_authprovider String(200) No Identity provider (e.g., Microsoft Entra ID, Generic OAuth2)
fsi_RequireSignIn fsi_requiresignin Boolean (default: false) No Whether 'Require users to sign in' is ON
fsi_EntraAuthAsserted fsi_entraauthasserted Boolean (default: false) No Derived: Entra-ID auth AND Require-sign-in ON (audience-control predicate)
fsi_ViewerGroups fsi_viewergroups Memo(10000) No Security groups granted chat viewer access (JSON)
fsi_EditorPrincipals fsi_editorprincipals Memo(10000) No Individual principals granted editor access (JSON)
fsi_SharedWithViewerCount fsi_sharedwithviewercount Integer No Count of viewer principals/groups
fsi_SharedWithEditorCount fsi_sharedwitheditorcount Integer No Count of editor principals
fsi_LimitSharingMode fsi_limitsharingmode String(100) No Managed-environment bot-limitSharingMode value
fsi_SharedWithEveryone fsi_sharedwitheveryone Boolean (default: false) No Per-agent org-wide reach: the agent is shared with 'Everyone in the organization' (derived from the bot accesscontrolpolicy Any / Any-multi-tenant signal during discovery). This is a PER-AGENT posture signal and is NOT the environment-wide bot-limitSharingMode policy; it drives whole-tenant audience handling in expand_audience_upns.py
fsi_AudienceWholeTenant fsi_audiencewholetenant Boolean (default: false) No 'Everyone in the organization' sharing detected; members are deliberately NOT enumerated (whole-tenant flag)
fsi_AudienceUpnCount fsi_audienceupncount Integer No Distinct member UPNs resolved by Microsoft Graph transitive group expansion (0 when whole-tenant and not enumerated)
fsi_AudienceTruncated fsi_audiencetruncated Boolean (default: false) No At least one group exceeded the per-group member cap; the resolved UPN list is partial
fsi_AudienceResolutionStatus fsi_audienceresolutionstatus String(100) No Complete / Partial / WholeTenantNotEnumerated / Failed / NotResolved — outcome of the UPN expansion
fsi_AudienceResolvedAt fsi_audienceresolvedat DateTime No When the audience-to-UPN expansion last ran for this agent
fsi_LastScannedAt fsi_lastscannedat DateTime Yes When this posture was last scanned
fsi_RunId fsi_runid String(36) No Correlating scan run GUID

Alternate key fsi_AuthShareKey: (fsi_agentid, fsi_environmentid) — idempotent upsert key.

CAI Billing Entitlement (fsi_caibillingentitlement)

Ownership: OrganizationOwned
Entity set: fsi_caibillingentitlements
Primary name column: fsi_name
Description: Billing / credit entitlement shell (populated downstream by the billing-governance solution); zero-rating defaults fail-closed

Column (SchemaName) Logical name Type Required Description
fsi_Name fsi_name String(850) Yes Primary name attribute
fsi_AgentId fsi_agentid String(100) No Agent bot GUID (null for tenant-level policy rows)
fsi_PolicyId fsi_policyid String(200) No Billing or credit policy identifier
fsi_PolicyType fsi_policytype Picklist (fsi_cai_policytype) No PAYG / Prepaid credit policy / None
fsi_UserScopeGroupId fsi_userscopegroupid String(100) No Microsoft Entra ID group GUID scoping the policy
fsi_SpendScope fsi_spendscope Picklist (fsi_cai_spendscope) No Surface the policy allocation applies to (credit policy is Chat-only today)
fsi_BudgetState fsi_budgetstate String(100) No Active / Exhausted / Alerting
fsi_ZeroRatingEligible fsi_zeroratingeligible Boolean (default: false) No Fail-closed default False pending the June 2026 Licensing Guide; CS-built generative answers and tenant-grounded responses remain billable
fsi_EntitlementBasis fsi_entitlementbasis String(1000) No Note on the license + createdIn basis for the entitlement decision
fsi_LastEvaluatedAt fsi_lastevaluatedat DateTime No When the entitlement was last evaluated
fsi_RunId fsi_runid String(36) No Correlating scan run GUID

CAI Usage Signal (fsi_caiusagesignal)

Ownership: OrganizationOwned
Entity set: fsi_caiusagesignals
Primary name column: fsi_name
Description: Source-aggregated per-agent usage rollup (30-day interactions, unique users, sessions); never stores transcript rows

Column (SchemaName) Logical name Type Required Description
fsi_Name fsi_name String(850) Yes Primary name attribute
fsi_AgentId fsi_agentid String(100) Yes Agent bot GUID
fsi_EnvironmentId fsi_environmentid String(100) No Environment GUID
fsi_LastInteractionUtc fsi_lastinteractionutc DateTime No Most recent interaction timestamp
fsi_Interactions30d fsi_interactions30d Integer No Interaction count over the rolling 30-day window
fsi_UniqueUsers30d fsi_uniqueusers30d Integer No Distinct users over the rolling 30-day window
fsi_Sessions30d fsi_sessions30d Integer No Session count over the rolling 30-day window
fsi_AggregationWindowDays fsi_aggregationwindowdays Integer No Rollup window length in days (default 30)
fsi_SignalSource fsi_signalsource String(200) No Source of the aggregate (e.g., msdyn_botsession, App Insights)
fsi_LastAggregatedAt fsi_lastaggregatedat DateTime Yes When the usage rollup was last computed
fsi_RunId fsi_runid String(36) No Correlating scan run GUID

Alternate key fsi_UsageSignalKey: (fsi_agentid, fsi_environmentid) — idempotent upsert key.

CAI Work IQ State (fsi_caiworkiqstate)

Ownership: OrganizationOwned
Entity set: fsi_caiworkiqstates
Primary name column: fsi_name
Description: Work IQ config-vs-invoked state shell (populated downstream by work-iq-usage-detection); emits configuredTier

Column (SchemaName) Logical name Type Required Description
fsi_Name fsi_name String(850) Yes Primary name attribute
fsi_AgentId fsi_agentid String(100) Yes Agent bot GUID
fsi_EnvironmentId fsi_environmentid String(100) No Environment GUID
fsi_Configured fsi_configured Boolean (default: false) No Whether Work IQ / semantic search is configured
fsi_ConfiguredTier fsi_configuredtier Picklist (fsi_cai_workiqtier) No Entitlement split: MCP-in-Copilot-Studio vs Direct Work IQ API
fsi_ObservedStatus fsi_observedstatus Picklist (fsi_cai_workiqobserved) No Config-vs-invoked classifier result
fsi_PerUserLicenseRequired fsi_peruserlicenserequired Boolean (default: false) No MCP-in-Copilot-Studio path requires a per-user M365 Copilot license
fsi_ConfigSourceComponentType fsi_configsourcecomponenttype Integer No botcomponent type where config was resolved (18/15/16) — sample to confirm
fsi_LastObservedUtc fsi_lastobservedutc DateTime No Most recent observed (invoked) signal timestamp
fsi_LastScannedAt fsi_lastscannedat DateTime Yes When this state row was last refreshed
fsi_RunId fsi_runid String(36) No Correlating scan run GUID

Alternate key fsi_WorkIqStateKey: (fsi_agentid, fsi_environmentid) — idempotent upsert key.

CAI Compliance State (fsi_caicompliancestate)

Ownership: OrganizationOwned
Entity set: fsi_caicompliancestates
Primary name column: fsi_name
Description: Per-agent risk level, scan completeness (incomplete-scan marker for Lite/Agent-Builder), and violations rollup

Column (SchemaName) Logical name Type Required Description
fsi_Name fsi_name String(850) Yes Primary name attribute
fsi_AgentId fsi_agentid String(100) Yes Agent bot GUID
fsi_EnvironmentId fsi_environmentid String(100) No Environment GUID
fsi_RiskLevel fsi_risklevel Picklist (fsi_cai_risklevel) No Aggregated risk level for the agent
fsi_ScanCompleteness fsi_scancompleteness Picklist (fsi_cai_scancompleteness) Yes Complete / Incomplete Scan (Lite/Agent-Builder) / Failed
fsi_ScanCompletenessReason fsi_scancompletenessreason String(1000) No Why a scan is incomplete (e.g., no public API returns full Agent Builder definition)
fsi_ViolationCount fsi_violationcount Integer No Number of open violations rolled up for the agent
fsi_ViolationsJson fsi_violationsjson Memo(100000) No Structured violations[] rollup for the agent
fsi_LastCheckedUtc fsi_lastcheckedutc DateTime Yes When compliance state was last evaluated
fsi_RunId fsi_runid String(36) No Correlating scan run GUID

Alternate key fsi_ComplianceStateKey: (fsi_agentid, fsi_environmentid) — idempotent upsert key.