This page describes AAES Govern’s controls. AAES Operate has private-work permissions, operational reviews and recorded-spend limits; it does not include Govern. About AAES Govern
Before you enable this package
The endpoint host 'dynamics-org.invalid' is a reserved .invalid placeholder that fails closed until you substitute the real host in both the endpoint URLs and the egress allowlist.
Read each action's effects and exclusions below. Before installation, also read the complete package requirements, including credential issuance, scope, expiry, and provider permissions. These are deployment prerequisites, not capabilities this package supplies.
Capabilities (5)
Each capability below is one registered operation. The complete package JSON includes its exact network destination allowlist. The repository stores it at packs/dynamics.json and embeds a copy in the release binary.
Risk tiers. R0 is the minimum for reads. R2 is the minimum for write, create, update, execute, and invoke. R3 is the minimum for delete, send, pay, deploy, approve, share, and transfer. Operators can raise these levels. A minimum tier does not measure the operation's business or confidentiality risk.
On supported execution paths routed through AAES Govern, the R3 actions listed below require approval by an authorized person. Bypass paths and observation-only registrations are outside that guarantee. A provider's restoration feature does not remove this approval requirement. A provider-side approval, such as approving a GitLab merge request, is also separate from AAES Govern human approval. The capability matrix shows which execution paths are implemented, restricted to lab use, or refused at startup. Live compatibility must be tested in your environment.
Field guide. Endpoint is the service address and request method. Connector is the adapter that makes the call. Custody describes how the credential is held; the credential reference identifies the value to resolve. Data class sets handling requirements: pii means personal data, financial means financial records, and internal means internal organizational data.
dynamics.accounts.read v1.0.0R0
- Kind
- tool
- Action
- read
- Endpoint
GET https://dynamics-org.invalid/api/data/v9.2/accounts- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-dynamics-dataverse-access-token- Data class
- pii
Read accounts.
Read the accounts entity set: organization records carrying addresses, phone numbers and primary-contact references, classified as pii (personal data) because account data routinely identifies individual people.
The registered path covers the collection read only — single-record reads (accounts(GUID)) and the separate navigation-property endpoints (for example accounts(GUID)/primarycontactid) are not registered by this pack. The API permits $expand and other query options on collection requests; this registration places no restriction on query options.
The host is a reserved placeholder: substitute the customer's environment host before enabling.
dynamics.contacts.read v1.0.0R0
- Kind
- tool
- Action
- read
- Endpoint
GET https://dynamics-org.invalid/api/data/v9.2/contacts- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-dynamics-dataverse-access-token- Data class
- pii
Read contacts.
Read the contacts entity set: person records with names, email addresses, phone numbers and job titles, which are personal data.
The registered path covers the collection read only — single-record reads (contacts(GUID)) and the separate navigation-property endpoints are not registered by this pack. The API permits $expand and other query options on collection requests; this registration places no restriction on query options.
The host is a reserved placeholder: substitute the customer's environment host before enabling.
dynamics.opportunities.read v1.0.0R0
- Kind
- tool
- Action
- read
- Endpoint
GET https://dynamics-org.invalid/api/data/v9.2/opportunities- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-dynamics-dataverse-access-token- Data class
- internal
Read opportunities.
Read the opportunities entity set: sales pipeline records with topics, customers and revenue estimates, classified as internal data — a deployment whose policy treats revenue projections as financial data should raise the class, which is a supported review outcome.
The registered path covers the collection read only — single-record reads (opportunities(GUID)) are not registered by this pack.
The host is a reserved placeholder: substitute the customer's environment host before enabling.
dynamics.opportunities.update v1.0.0R3
- Kind
- tool
- Actions
- update, transfer
- Endpoint
PATCH https://dynamics-org.invalid/api/data/v9.2/opportunities(OPPORTUNITY_ID)- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-dynamics-dataverse-access-token- Data class
- internal
Update opportunities.
Update an opportunity’s properties, status, or owner. The general PATCH permits ownership reassignment, so the capability declares update and transfer at the minimum R3 transfer tier.
Request limits: the registration does not restrict writable columns. The dated opportunity reference lists statecode 0 Open, 1 Won, and 2 Lost; won and lost records are read-only until reactivated. Status changes use statecode and statuscode (SetState). Changing the writable ownerid performs ownership reassignment (Assign); no reviewed restriction excludes that effect.
Setup: bind OPPORTUNITY_ID to a concrete GUID before registration; this pack uses no call-time endpoint templating. The adapter must send If-Match: * so PATCH cannot create a record through upsert. Substitute the customer’s environment host before enabling.
WinOpportunity and LoseOpportunity are excluded unbound actions. They take an opportunityclose record bound to the opportunity plus a status code.
On supported execution paths mediated by AAES Govern, the declared irreversible actions require an authorized person’s approval. Observation-only and bypass calls cannot be stopped by this control.
dynamics.whoami.read v1.0.0R0
- Kind
- tool
- Action
- read
- Endpoint
GET https://dynamics-org.invalid/api/data/v9.2/WhoAmI- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-dynamics-dataverse-access-token- Data class
- internal
Read the authenticated user identity.
Invoke the WhoAmI unbound function: returns the UserId, BusinessUnitId and OrganizationId of the caller — for this pack, the application user the client-credentials token maps to. It verifies which identity the stored credential resolves to and changes nothing.
The host is a reserved placeholder: substitute the customer's environment host before enabling.
Credential reference
The credential field names a reference rather than containing credential material. Packs are designed not to contain secrets; the format checks cover only known credential formats and cannot prove that arbitrary text contains no secrets. Installing a package registers its capabilities. Configure the provider credentials, endpoints, and network access, then test the integration in your environment before enabling it.
- Reference
secret-ref-dynamics-dataverse-access-token- Custody
- customer_vault
- Injection
- header (Authorization)
Configure the value and injection format specified in the package. Assign responsibility for credential rotation and revocation, restrict provider permissions, and keep credential material out of logs and responses.
Complete credential requirements
An OAuth2 access token for the customer's own Dataverse environment, held in the client's own secret manager. The stored material must be the complete Authorization header value (scheme included): 'Bearer', one separating space, then the access token. An external deployment process obtains the token with the OAuth 2.0 client credentials grant — POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token with the environment URL as the resource (scope '<org-url>/.default') — and renews it before expiry, storing the new complete header value each time.
Storing the app registration's client secret under this reference does not make the HTTP injector perform OAuth: the injector injects the stored value verbatim, so token lifecycle (including secret rotation on the app registration) sits entirely with that external process, and the client secret itself must never be the stored value. customer_vault is the only generally-supported production custody model here — identity_federation and customer_broker are refused at startup and inline is lab-only.
Access tokens are short-lived (the token response carries expires_in). Distinguish the revocation paths: disabling the application user in the environment or removing its security role stops the environment from honoring further calls; removing the app registration's secret stops future token acquisition — but secret removal does not by itself invalidate already-issued access tokens, which remain usable until they expire (typically about an hour). Plan any emergency revocation around that residual validity window.
An expired value fails closed.
Least privilege: the application user's custom security role should grant read on accounts, contacts and opportunities, update on opportunities, and nothing more — no create, delete, append-to or assign privileges beyond what the registered capabilities need.
Executor hygiene: the value must live only in executor memory for the lifetime of a call, must never be written to logs, traces or diagnostics, and must not appear in crash dumps; a deployment that cannot meet that bar must not enable the pack.
Resources
dynamics-org-accounts(api, pii):https://dynamics-org.invalid/api/data/v9.2/accountsdynamics-org-contacts(api, pii):https://dynamics-org.invalid/api/data/v9.2/contactsdynamics-org-opportunities(api, internal):https://dynamics-org.invalid/api/data/v9.2/opportunitiesdynamics-org-identity(api, internal):https://dynamics-org.invalid/api/data/v9.2/WhoAmI
Technical package and review record
Complete provider requirements and exclusions
The endpoint host 'dynamics-org.invalid' is a reserved non-production placeholder (an RFC 2606 reserved TLD): substitute the customer's own Dataverse environment host (Microsoft's documentation writes it as [Organization URI], of the form yourorg.crm.dynamics.com or yourorg.api.crm.dynamics.com) before enabling, in every endpoint, in every resource locator and in every egress allowlist entry. The allowlist matches exactly, so endpoints and allowlist must be substituted together, and substitution is a required deployment step — the reserved host being allowlisted does not make an unsubstituted pack safe to enable.
The Web API version segment v9.2 is pinned as documented. This pack registers only endpoints Microsoft's Dataverse Web API documentation describes: collection reads on the accounts, contacts and opportunities entity sets, the WhoAmI unbound function, and PATCH update of one opportunity record. All reads are collection reads only: single-record reads (accounts(GUID), contacts(GUID), opportunities(GUID)) exist in the API and are deliberately not registered. The opportunity update registers PATCH /opportunities(OPPORTUNITY_ID): Microsoft's update guidance documents that PATCH without If-Match behaves as an upsert that can create a record, so the deployment's adapter must send If-Match: * to keep this capability an update only.
This registration does not restrict which writable columns a request may carry, and Microsoft's opportunity reference documents that status changes run through the same PATCH (statecode and statuscode, the SetState message) and that ownership reassignment (Assign) is PATCH of ownerid — so this capability can mark an opportunity won or lost (the dated opportunity reference lists statecode 1 Won and 2 Lost and states won and lost opportunities are read-only until reactivated) and can reassign it — the update therefore declares transfer at the minimum R3 tier, because the registered PATCH permits ownership reassignment and no reviewed restriction removes it.
The WinOpportunity and LoseOpportunity actions — unbound actions accepting an opportunity-close payload (an opportunityclose record bound to the opportunity, plus a status code) — are deliberately not registered, and nothing in this pack creates or deletes any record: record create (POST) and delete (DELETE) are documented in the API and are deliberately not registered. Authentication is OAuth 2.0 client credentials against Microsoft Entra ID: an external deployment process registers an application in the customer's tenant, creates the corresponding application user in the Dataverse environment with a least-privilege custom security role, and obtains access tokens from https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token with grant_type=client_credentials and scope set to the environment URL suffixed with '/.default' (the org URL is the resource).
The token endpoint host is deliberately not in the egress allowlist: the executor never calls it, because token acquisition and renewal are the external process's job and the injector only injects the stored value verbatim. Dataverse enforces the application user's security roles on every call, so a capability works only if that user is permitted the operation; the registration records the endpoint, not the environment's authorization decision.
Download the complete package JSON for exact network allowlists, credential requirements, exclusions, and setup notes. Read these requirements before installation.
The full documentation review record is supplied in the evaluation package. The evaluation package runs in your environment and comes only with the paid design partnership. This page reproduces the source links and review block; the full record is available for evaluation. Discuss a design partnership to inspect it before installation.
Review block
This section reproduces the review block recorded in the pack file. The evidence and approval record is separate: for a reviewed pack, it is in the evaluation materials and in the release binary's embedded assets.
Review completed: 2026-09-22
9 sources, retrieved 2026-09-21
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/retrieve-entity-using-web-api (retrieved 2026-09-21)
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/update-delete-entities-using-web-api (retrieved 2026-09-21)
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/use-web-api-functions (retrieved 2026-09-21)
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/web-api-basic-operations-sample (retrieved 2026-09-21)
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/web-api-service-documents (retrieved 2026-09-21)
- https://learn.microsoft.com/en-us/dynamics365/developer/reference/entities/opportunity (retrieved 2026-09-21)
- https://learn.microsoft.com/en-us/power-apps/developer/model-driven-apps/clientapi/reference/xrm-webapi/online/execute (retrieved 2026-09-21)
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/use-single-tenant-server-server-authentication (retrieved 2026-09-21)
- https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-client-creds-grant-flow (retrieved 2026-09-21)
Current documentation links are navigation aids. They do not change the package, its historical sources or its review date. Review dates describe a documentation review, not a live integration test. No package is provider-endorsed or yet tested against a live provider tenant.
Release identity
SHA-256 of the pack file bytes: 38c440a990eec7eb1b8a7e9308d57f9bca5020a6ee58bc97a23cf0efdacde8bd
Distributable: yes, digest matches the release manifest. Editing a package changes its release identity. A deployment plan checks its own file digests; it does not restore reviewed status or authenticate approval.