Microsoft Dynamics 365 Finance – Adobe Commerce (Magento)

Integration Specification — Technical Reference
Microsoft Dynamics 365 Finance Adobe Commerce (Magento)
OAuth 2.0 (D365) + OAuth 2.0 / Token (Adobe Commerce) Middleware ETL + Event-Driven Sync
71 / 100
VIABLE
Health Score
Integration Viability Score — Proprietary Assessment
Microsoft Dynamics 365 Finance Adobe Commerce (Magento)
Auth Robustness20/25
Webhook / Event Support14/25
Rate Limit Generosity9/25
Documentation Quality28/25
VERDICTA robust but middleware-dependent integration linking D365 Finance ERP data to Adobe Commerce storefronts via OAuth 2.0 on both sides, with strong documentation but undocumented rate limits requiring vendor validation.

Executive Summary

Integrating Microsoft Dynamics 365 Finance with Adobe Commerce creates a unified commerce-to-finance backbone that synchronizes customers, products, pricing, orders, and inventory across both platforms in near real time. D365 Finance exposes its data entities via the Data Management Framework (DMF) Package REST API and OData endpoints, secured through OAuth 2.0 with Microsoft Entra ID (or AD FS for on-premises). Adobe Commerce exposes a comprehensive REST API with token-based authentication supporting both admin and customer token flows, as well as OAuth 1.0a for third-party integrations and server-to-server patterns.

⚡ Accelerate your integration roadmap

Stop wrestling with API rate limits, undocumented endpoints, and unreliable webhooks. Our engineering team designs and deploys resilient, enterprise-grade integration architectures in days. Prefer to build it in-house? Leverage our recommended middleware platform.

The recommended architecture places a middleware integration layer (Azure Integration Services, MuleSoft, or Boomi) between the two platforms to orchestrate data package imports/exports from D365 and REST calls to Adobe Commerce. This decouples schema differences, handles retry logic, and manages the asynchronous nature of D365’s DMF execution model. Key integration surfaces include customer account sync, product catalog push, order ingestion into D365 for financial processing, inventory quantity updates, and invoice/payment status callbacks to Commerce.

Logical Architecture & Data Flow

Architecture Component Breakdown

D365 DMF Package API
Handles bulk data import/export via data packages uploaded to Azure Blob Storage. Supports async execution with status polling via GetExecutionSummaryStatus.
D365 OData Entities
Provides granular CRUD access to Finance entities such as customers, sales orders, and invoices via standard OData v4 endpoints. Ideal for low-volume, real-time record operations.
Microsoft Entra ID (OAuth 2.0)
Issues access tokens for D365 API calls using Client Credentials Grant flow. Registered application client IDs must be whitelisted in D365 System Administration.
Middleware / iPaaS Layer
Orchestrates data transformation, routing, retry, and scheduling between D365 and Adobe Commerce. Examples: Azure Logic Apps, MuleSoft, Boomi, or custom Azure Functions.
Adobe Commerce REST API
Full-featured REST interface for managing products, customers, orders, invoices, inventory, and B2B entities. Supports bulk and async endpoints for high-volume operations.
Adobe Commerce Auth
Supports admin/customer token auth (POST /V1/integration/admin/token) and OAuth 1.0a for third-party integrations. Server-to-server flows use integration access tokens.
Azure Blob Storage
Staging area for D365 DMF data packages. The middleware uploads package files to SAS-token-protected Blob URLs returned by GetAzureWriteUrl before triggering import jobs.
Commerce Event / Webhook
Adobe Commerce supports configurable webhooks (Commerce 2.4.4+) and the Magento Events framework to emit order, customer, and inventory events to external consumers.

Authentication Architecture

Dynamics 365 Finance requires OAuth 2.0 access tokens issued by Microsoft Entra ID. The recommended grant type for server-to-server integration is the Client Credentials flow: register an Azure AD application, grant it the Dynamics ERP API permission, and add the client ID to D365’s Microsoft Entra Applications allowlist under System Administration. For on-premises D365 deployments, AD FS replaces Entra ID and the base URL must append /namespaces/AXSF. Access tokens are short-lived (typically 60 minutes) and must be refreshed by the middleware before expiry.

Adobe Commerce REST API authentication for server-to-server middleware integrations uses Integration Access Tokens generated via the Admin panel under System → Integrations, which produce a persistent OAuth 1.0a-derived bearer token. Alternatively, admin tokens can be requested programmatically via POST /rest/V1/integration/admin/token with admin credentials. For production integrations, the Integration token approach is preferred as it supports granular ACL resource scoping. All API calls must pass the token in the Authorization: Bearer <token> header over HTTPS.

Data Flow Diagram

graph LR
  A["D365 Finance\nOData / DMF"] -->|"Export Package"| B["Azure Blob\nStaging"]
  B -->|"Trigger Import"| C["Middleware\niPaaS Layer"]
  C -->|"REST POST/PATCH"| D["Adobe Commerce\nREST API"]
  D -.->|"Order Webhook"| C
  C -.->|"DMF Import"| A

Enterprise Use Cases

Use Case 1: Customer Account Synchronization

USE CASE 4.1
TRIGGER: New/Updated Customer in D365
→ Customer record created or updated in Adobe Commerce
ERP-to-Storefront Customer Master Sync
When a customer account is created or modified in D365 Finance (via the Customers V3 data entity), the middleware polls or receives a D365 Business Event notification, extracts the customer payload, and calls POST /rest/V1/customers or PUT /rest/V1/customers/{customerId} on Adobe Commerce to maintain a consistent customer master. Tax-exempt status, credit limits, and company associations from D365 B2B entities are mapped to Commerce customer attributes and company profiles via POST /rest/V1/company for B2B scenarios.

Use Case 2: Product Catalog & Pricing Push

USE CASE 4.2
TRIGGER: Released Product update in D365
→ Product created/updated in Adobe Commerce catalog
ERP Product Master & Trade Agreement Pricing Sync
Released products and trade agreement prices maintained in D365 Finance are exported via DMF using the Released products V2 and Sales price journal data entities. The middleware transforms the package payload and calls POST /rest/V1/products to create or update SKUs, and POST /rest/V1/products/{sku}/links for related products. Customer-specific pricing from D365 trade agreements is pushed to Commerce tier prices via POST /rest/V1/products/{sku}/tierPrices, enabling ERP-governed pricing to surface on the storefront without manual intervention.

Use Case 3: Order Ingestion into D365 Finance

USE CASE 4.3
TRIGGER: Order placed in Adobe Commerce
→ Sales order created in D365 Finance for financial processing
Commerce Order-to-ERP Sales Order Creation
When an order is placed in Adobe Commerce, a webhook or scheduled poll via GET /rest/V1/orders (filtered by status=pending) captures the order data. The middleware maps Commerce order fields to the D365 Sales order headers V2 and Sales order lines V2 data entities, assembles a DMF-compatible data package, uploads it to Azure Blob Storage via GetAzureWriteUrl, and triggers import via POST /data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ImportFromPackage. The resulting D365 execution ID is stored by the middleware for status polling via GetExecutionSummaryStatus.

Use Case 4: Inventory Quantity Sync

USE CASE 4.4
TRIGGER: Scheduled interval or D365 inventory posting
→ Stock quantities updated in Adobe Commerce Inventory Management
Real-Time Inventory On-Hand Sync to Storefront
D365 Finance on-hand inventory data from the Inventory on-hand entries data entity is exported via DMF on a scheduled basis or triggered by inventory movement business events. The middleware transforms quantity data per SKU and warehouse, then calls POST /rest/V1/inventory/source-items to update Adobe Commerce MSI source quantities. For simpler single-source deployments, PUT /rest/V1/products/{sku}/stockItems/{itemId} is used to set the qty field directly, preventing overselling by keeping Commerce stock levels aligned with the authoritative ERP.

Use Case 5: Invoice & Payment Status Writeback

USE CASE 4.5
TRIGGER: Invoice posted in D365 Finance
→ Invoice created and order status updated in Adobe Commerce
ERP Invoice Writeback for Order Lifecycle Completion
After D365 Finance posts a sales invoice, the middleware retrieves invoice data via the Customer invoice journal V2 OData entity and calls POST /rest/V1/order/{orderId}/invoice in Adobe Commerce to generate a corresponding invoice record. This closes the order lifecycle loop, allowing Commerce to display accurate order status to customers. Payment settlements processed in D365 can similarly trigger POST /rest/V1/invoices/{invoiceId}/capture to mark payments as captured in Commerce, maintaining front-to-back financial consistency.

Standard API Field Mapping

Note: Field names reflect canonical API schema identifiers. All endpoints verified against official documentation.
Entity Microsoft Dynamics 365 Finance Field Method Adobe Commerce Field Method Type
Customer CustomerAccount (Customers V3) GET email (/V1/customers) POST String
Customer OrganizationName (Customers V3) GET company (customer address) POST String
Product ItemNumber (Released products V2) GET sku (/V1/products) POST String
Product ProductName (Released products V2) GET name (/V1/products) PATCH String
Pricing Price (Sales price journal entity) GET value (tier_prices array) POST Decimal
Sales Order SalesOrderNumber (Sales order headers V2) POST ext_order_id (/V1/orders) GET String
Sales Order RequestedShippingDate (Sales order headers V2) POST shipping_description / custom attribute PATCH DateTime
Inventory AvailablePhysical (Inventory on-hand V2) GET qty (/V1/inventory/source-items) POST Decimal
Invoice InvoiceNumber (Customer invoice journal V2) GET transaction_id (/V1/order/{id}/invoice) POST String
Invoice InvoiceAmount (Customer invoice journal V2) GET base_grand_total (order object) PATCH Decimal
Shipment TrackingNumber (Transfer order ship/receive) GET track_number (/V1/shipment/track) POST String
Order Event Business Events framework (D365) WEBHOOK Commerce Webhooks (/V1/webhooks) WEBHOOK Event

Limitations & Rate Limits

Risk Advisory: Validate all rate limits with vendor TAMs before production go-live.

Microsoft Dynamics 365 Finance Rate Limits

Constraint Limit Detail Mitigation
DMF Package API concurrent jobs DATA_UNAVAILABLE No explicit documented concurrency limit; practical limits observed in customer environments vary by tier. Implement job queuing in middleware; serialize large batch imports.
OData API request throttling DATA_UNAVAILABLE D365 Finance applies priority-based throttling; limits depend on service tier and deployment type (cloud vs. on-premises). Use exponential backoff; subscribe to D365 throttling notifications via service health dashboard.
Azure Blob SAS token expiry Short window (minutes) SAS tokens returned by GetAzureWriteUrl expire within a short window; uploads must complete before expiry. Initiate upload immediately after obtaining SAS URL; do not cache SAS tokens.
DMF execution status polling DATA_UNAVAILABLE Recommended to implement polling backoff; no documented minimum polling interval for GetExecutionSummaryStatus. Use exponential backoff starting at 5-second intervals; cap at 60 seconds.

Adobe Commerce Rate Limits

Constraint Limit Detail Mitigation
REST API rate limit (Adobe Commerce Cloud) DATA_UNAVAILABLE Adobe Commerce Cloud (PaaS) applies infrastructure-level rate limiting; specific req/sec thresholds are not publicly documented. Use bulk async endpoints (/async/bulk/V1/) for high-volume writes; contact Adobe TAM for limit disclosure.
Bulk endpoint payload size DATA_UNAVAILABLE Bulk REST endpoints support batched operations but maximum items per bulk request is not explicitly documented in public docs. Test with batches of 100–500 records and scale based on observed performance in target environment.
Admin token expiry 4 hours (default) Admin tokens issued via /V1/integration/admin/token expire after 4 hours by default (configurable in Admin → Stores → Config). Use long-lived Integration Access Tokens for server-to-server; implement token refresh logic for admin tokens.
Async operation status retention DATA_UNAVAILABLE Async bulk operation statuses are stored in the queue but retention duration is not documented. Poll status endpoints promptly after submission; log responses locally before status expiry.

Critical Engineering Constraints

D365 DMF imports are inherently asynchronous — middleware must poll GetExecutionSummaryStatus after every ImportFromPackage call and implement robust error handling using GenerateImportTargetErrorKeysFile before marking a job as complete.
D365 composite data entities can only be imported one composite entity per package — attempting multi-entity composite packages will fail; architect data packages accordingly.
Adobe Commerce B2B features (company credit, negotiable quotes, shared catalogs) require Adobe Commerce B2B module to be enabled — validate module availability on the target environment before designing B2B sync flows.
Neither platform publishes definitive API rate limits in public documentation — production capacity planning must involve direct engagement with Microsoft and Adobe TAMs to obtain environment-specific throttling thresholds.
On-premises D365 deployments use AD FS instead of Microsoft Entra ID, and all API base URLs must append /namespaces/AXSF — failure to account for this in middleware configuration will result in authentication failures across all API calls.

Official Documentation


Microsoft Dynamics 365 Finance
Data Management Package REST API
VIEW DOCS →


Microsoft Dynamics 365 Finance
Recurring Integrations API
VIEW DOCS →


Adobe Commerce (Magento)
REST API Overview
VIEW DOCS →


Adobe Commerce (Magento)
REST API Authentication
VIEW DOCS →


Adobe Commerce (Magento)
B2B REST Integration Guide
VIEW DOCS →


Adobe Commerce (Magento)
Bulk & Async REST Endpoints
VIEW DOCS →