ml-connector
Microsoft Dynamics 365 F&OAdobe Commerce

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.

How Microsoft Dynamics 365 F&O works

Microsoft Dynamics 365 F&O exposes its data through the OData v4 REST service at a tenant-specific operations.dynamics.com host, with entities such as CustomersV3, SalesOrderHeaders, ProductsV2, ReleasedProductsV2, and MainAccounts. Authentication is OAuth 2.0 client credentials through Microsoft Entra ID, using a scope of the environment host plus /.default, and tokens last about an hour. Reads use server-driven paging up to 10,000 records with an odata.nextLink follow URL, and queries are scoped to one legal entity unless cross-company is set. D365 can also push Business Events over HTTPS when a document posts, but those payloads are stubs that carry identifiers and need a follow-up OData read.

How Adobe Commerce works

Adobe Commerce exposes orders, invoices, customers, products, B2B companies, and creditmemos through its REST V1 API. On PaaS it authenticates with OAuth 1.0a integration credentials signed with HMAC-SHA256, or an admin bearer token; on the Cloud Service it uses Adobe IMS OAuth 2.0 client credentials with tokens that last about 24 hours. List endpoints page with searchCriteria parameters up to a configured max of 300 per page and return a total_count. Adobe Commerce supports signed outbound webhooks with an x-adobe-commerce-webhook-signature HMAC-SHA256 header, and Adobe I/O Events for async push. It has no GL account resource, so ledger posting happens in D365.

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

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