Microsoft Dynamics 365 F&O and Adobe Commerce integration
Microsoft Dynamics 365 F&O runs financials, supply chain, and order management. Adobe Commerce runs the online storefront and B2B accounts. Connecting them keeps web sales and the back-office ledger in agreement. Each storefront order and its captured invoice flow into D365 F&O as a sales order and a receivable without re-keying, and product, price, and stock changes in D365 publish back to the catalog. ml-connector handles the very different APIs and auth on each side and moves records on a cadence you control.
What moves between them
The main flow runs from Adobe Commerce into Microsoft Dynamics 365 F&O. When an order is placed and its invoice captured, ml-connector reads both and creates a matching sales order and customer receivable in D365 against the right customer account and item numbers. New storefront customers and B2B companies flow the same direction into CustomersV3 so the debtor master stays current. In the other direction, product, price, and inventory updates move from D365 ProductsV2 and ReleasedProductsV2 out to the Commerce catalog so the storefront shows current items and stock. Refunds captured as Commerce creditmemos post back into D365 as credit notes. Cadence follows your order volume, near-real-time for orders and on a schedule for catalog sync.
How ml-connector handles it
ml-connector stores both credential sets encrypted and mints an Entra ID token for D365 using the environment-host /.default scope, refreshing it when a call returns 401, while signing each Adobe Commerce request with OAuth 1.0a on PaaS or an IMS bearer token on the Cloud Service. It accepts the full tenant operations.dynamics.com host per customer, since D365 has no shared base URL, and writes to the customer's legal entity using fully specified OData keys such as the customer account plus dataAreaId. Order pickup runs either by Adobe Commerce webhooks or by polling orders with searchCriteria on updated_at; for D365-side changes it reads OData or consumes a Business Event then calls back for the full record. Commerce SKUs map to D365 product numbers and customer emails to customer accounts, set up before the first sync so each order line lands on a valid item and account. Neither API offers an idempotency key, so ml-connector dedups on the Commerce increment_id and the D365 natural key, backs off on HTTP 429 using the Retry-After header, and keeps Commerce webhook responses fast since that platform waits synchronously. Every record carries a full audit trail and can be replayed if a downstream call fails.
A real-world example
A mid-sized industrial parts distributor sells through an Adobe Commerce B2B storefront and runs Microsoft Dynamics 365 F&O for finance, inventory, and fulfillment across two warehouses. Before the integration, staff exported web orders to a spreadsheet each morning and keyed them into D365 sales orders by hand, while the catalog drifted out of date because price and stock changes in D365 were updated in Commerce only on a weekly batch. With the two systems connected, each placed order and its invoice post into D365 automatically against the matching customer and items, and product, price, and inventory updates publish back to the storefront on a schedule. Order entry errors drop, the catalog reflects real stock, and the team stops re-keying.
What you can do
- Post each Adobe Commerce order and captured invoice into Microsoft Dynamics 365 F&O as a sales order and receivable.
- Publish product, price, and inventory updates from D365 ProductsV2 and ReleasedProductsV2 back to the Commerce catalog.
- Sync storefront customers and B2B companies into D365 CustomersV3 so the debtor master stays current.
- Bridge Microsoft Entra ID OAuth2 tokens with Adobe OAuth 1.0a or IMS, mapping Commerce SKUs and emails to D365 keys.
- Dedup on Commerce increment IDs and D365 natural keys, with HTTP 429 backoff and a full audit trail on every record.
Questions
- Which direction does data move between Microsoft Dynamics 365 F&O and Adobe Commerce?
- Orders, invoices, customers, and refunds move from Adobe Commerce into Microsoft Dynamics 365 F&O, where they become sales orders, receivables, and credit notes. Product, price, and inventory updates move the other way, from D365 out to the Commerce catalog. Adobe Commerce has no GL account resource, so all ledger posting stays in D365.
- How does the integration handle the two different authentication systems?
- ml-connector mints a Microsoft Entra ID OAuth2 token for D365 using the environment-host default scope and refreshes it on a 401, since these tokens last about an hour. For Adobe Commerce it signs each request with OAuth 1.0a on PaaS or carries an IMS OAuth2 bearer token on the Cloud Service. Both credential sets are stored encrypted and presented automatically on every call.
- Does it use webhooks or polling to pick up new orders?
- Either. Adobe Commerce supports signed outbound webhooks, which ml-connector verifies with the x-adobe-commerce-webhook-signature HMAC-SHA256 header and keeps fast because that platform waits synchronously. Where webhooks are not enabled, it polls the orders endpoint with searchCriteria on updated_at instead. On the D365 side it reads OData on a schedule or consumes a Business Event and then calls back for the full record.
Related integrations
More Microsoft Dynamics 365 F&O integrations
Other systems that connect to Adobe Commerce
Connect Microsoft Dynamics 365 F&O and Adobe Commerce
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started