Dynamics 365 Integration

Last updated: September 18, 2026

What's new in your Dynamics 365 integration

Your Microsoft Dynamics 365 integration now matches the depth of your Salesforce and HubSpot connections. If Dynamics is already connected to Iris, everything below is already live in your account — there's nothing to install or turn on.

Already live — no setup needed

  • Unlink a project from its Dynamics Opportunity whenever you need to, not just link one.

  • Link completed projects to an Opportunity — previously only open, in-progress projects could be linked.

  • Link and unlink from Win/Loss, right from the new Dynamics column, in addition to the project page.

  • Daily status sync keeps mapped fields and Won/Lost status current automatically, even if no one opens the project in Iris.

  • More reliable Won/Lost tracking — a background issue that could reset a Dynamics deal's status back to "Open" has been fixed.

One note on scope: Project Hubs (folders) aren't part of Win/Loss linking for Dynamics yet, the same as Salesforce today. If your projects are organized in a hub, link each child project individually — the hub itself stays read-only for Win/Loss. And the connection is one-way: Iris reads your Opportunity's stage, it doesn't write anything back onto the Opportunity record itself.


1. Azure — leave the existing Web callbacks

HeyIRIS.AI already had Web redirect URIs for Settings → Connect (…/api/integrations/dynamics/callback). Do not delete these.

Azure Authentication Preview showing Web redirect URIs for Dynamics and SharePoint callbacks

2. Azure — add an SPA redirect for the Dynamics origin

The Opportunity card is MSAL in the browser. Add a Single-page application URI that is the Dynamics org URL with no path.

Trial: https://orge73b82a6.crm.dynamics.com

Filter the list (here: crm.dynamics.com) so you can confirm it landed as Single-page application, not Web.

Azure Authentication filtered to crm.dynamics.com showing SPA redirect

3. Azure — Expose an API: access_as_user

Same app → Expose an API:

  • Application ID URI: api://bcc39c1b-3413-4cad-9cb2-c3f711fad63c

  • Scope name (exact): access_as_user

  • Admin consent display name: Access HeyIRIS.AI as the signed-in user

  • Who can consent: Admins only is fine

  • State: Enabled

  • Authorized client applications: leave empty

The widget requests api://<client-id>/access_as_user.

HeyIRIS.AI Expose an API with access_as_user scope enabled

Copy Application (client) ID and the Entra tenant ID (f0f51b18-37df-4743-9cac-a5b2497e95ba for IrisAITech) for the HTML DEFAULTS.


4. Stage Iris — Dynamics already connected

On stagev2.heyiris.ai → Settings → Integrations, the Heyiris org already shows Dynamics 365 → Connected (connected as tucker@IrisAITech.onmicrosoft.com). Skip reconnect.

Stagev2 Integrations CRM section with Dynamics 365 Connected

The card still authenticates as whoever is signed into Dynamics. Noah’s Dynamics UPN is noah@IrisAITech.onmicrosoft.com; his Iris account is noah@heyiris.ai. Until that UPN exists as an Iris user in this org, the card will show invite / not-a-member.


5. Edit DEFAULTS on a copy of the HTML

Do not commit stage values to git. Copy integration/dynamics/webresource/iris_opportunity_status.html and set:

DEFAULTS block with stagev2-api, clientId, and tenantId

irisApiBase must be stagev2-api (Django), not stagev2.heyiris.ai. Leave irisAppBase empty so Open in Iris derives the frontend.

Keep the sibling msal-browser.min.js from the same folder. Never a CDN.

Trial copies used on 2026-09-15:

Finder folder iris-dynamics-stage-webresource with HTML and msal-browser.min.js

6. Dynamics — open Customization (not Sales Hub)

Sales Hub cannot edit web resources (“You don’t have access to edit Web Resources” / no main form). Use classic customization:

Dynamics gear → Advanced SettingsCustomizations.

Dynamics Customization landing page with Customize the System and Solutions

7. Open Solutions, then Default Solution

Solutions lists managed first-party packages plus unmanaged tenant work (Common Data Services Default Solution, and Default Solution).

All Solutions list in Dynamics

Open Default Solution (or Customize the System). Left nav → Components → Web Resources.

On the trial tenant the two files were created here with publisher prefix new_:

  • new_dynamics/iris_opportunity_status.html (Webpage / HTML) — Iris Opportunity Status

  • new_dynamics/msal-browser.min.js (Script / JScript) — Iris MSAL Browser

They must stay siblings under the same prefix. Toolbar Publish All Customizations after upload.

Default Solution editor showing Web Resources in the Components tree and Publish All Customizations

In the UI you would New twice, name dynamics/… (do not type new_ yourself), upload the edited HTML then the JS, Save, Publish. This trial’s files were published into that same Default/Active layer.


8. Open the Opportunity main form

Still in Default Solution: Entities → Opportunity → Forms. Open the Opportunity main form Sales Hub uses (not a quick-create).

Classic form editor on Opportunity main, Summary tab

9. Insert → Web Resource

Select the Insert ribbon. Web Resource sits in the IFRAME group.

Insert ribbon with Web Resource control highlighted

Add Web Resource → lookup Iris Opportunity Status (new_dynamics/iris_opportunity_status.html). Leave Name/Label as-is. Check Visible by default.

Pass record object-type code and unique identifier as parameters is on General, below the fold — scroll the dialog. Leave Custom Parameter empty.

Add Web Resource dialog General tab with Web resource lookup

Formatting: one column, about 6 rows, scrolling As necessary. That checkbox is not on this tab.

Add Web Resource Formatting tab with one column and six rows

After OK, the canvas shows an Iris tab with new_dynamics/iris_opportunity_status.html.

Form editor canvas with Iris tab and new_dynamics/iris_opportunity_status.html

Drag Iris so it sits immediately after Summary. Save → Publish.


10. If Iris is last, Sales Hub hides it

A trailing tab does not appear on the record. It is not in Related either.

Sales Hub Related menu with no Iris when the tab was last

After the reorder, the live form is Summary | Iris | Products | Quotes | Files | Related.


11. Open a live Opportunity

Sales Hub opportunity with Iris tab next to Summary

Click Iris. MSAL opens Pick an account for whoever is signed into Dynamics (noah@IrisAITech.onmicrosoft.com here).

Until that UPN exists as an Iris user in the connected org, the card shows invite / not a member. Do not expect noah@heyiris.ai to match this Dynamics login.


Trial IDs

Item

Value

Dynamics org

https://orge73b82a6.crm.dynamics.com

Azure app

bcc39c1b-3413-4cad-9cb2-c3f711fad63c

Entra tenant

f0f51b18-37df-4743-9cac-a5b2497e95ba

HTML web resource

d847e35b-44b1-f111-aaab-000d3a58b375

MSAL web resource

dc47e35b-44b1-f111-aaab-000d3a58b375

Opportunity main form

a837e4a7-01b8-4f82-a475-be9abd67e667

Test opportunity

e90a0493-e8f0-ea11-a815-000d3a1b14a2 (10 Airpot XL Coffee Makers)