Magento and Business Central
Magento Business Central integration
Items with variants from Business Central become configurable products in Magento, stock lands on the right source, and price lists become prices per customer group. Orders, customers and shipments run the other way. Built to your Magento 2 or Adobe Commerce and your Business Central, then hosted and run for you.
What moves between Magento and Business Central
Business Central holds items, prices, stock and the books. Magento shows the catalog and takes the order. The integration connects six flows, each with a fixed direction and a fixed endpoint on both sides.
| Flow | Direction | Magento 2 REST | Business Central API v2.0 |
|---|---|---|---|
| Items and variants | to Magento | POST /V1/products |
items, itemVariants |
| Stock | to Magento | POST /V1/inventory/source-items |
items.inventory, per location via web service |
| Prices and tier prices | to Magento | POST /V1/products/tier-prices |
unitPrice, price lists via web service |
| Orders | to Business Central | GET /V1/orders |
salesOrders with salesOrderLines |
| Customers | to Business Central | billing address of the order | customers |
| Shipments | to Magento | POST /V1/order/{id}/ship |
salesShipments |
A Magento order has two numbers. entity_id is the number in every API path. increment_id is the number the customer sees, for example 000010482. The increment_id goes to externalDocumentNumber on the sales order, a field of 35 characters. The integration keeps the entity_id to post the shipment back later. The general setup is on e-commerce ERP integration.
Which system owns what
| Data | System of record | Direction | Sync behavior |
|---|---|---|---|
| Item No., description, variant code | Business Central | to Magento | changed items, by lastModifiedDateTime |
| Attribute set, categories, images | Magento or the PIM | stays in Magento | not overwritten |
| Unit price | Business Central | to Magento | per website when price scope is Website |
| Price lists and quantity breaks | Business Central | to Magento | nightly, through the bulk endpoint |
| Quantity per source | Business Central, per location | to Magento | physical stock per source |
| Salable quantity | Magento | calculated in Magento | source minus reservations |
| Order | Magento until import, then Business Central | to Business Central | once, keyed on increment_id |
| Customer and posting groups | Business Central | match on number, then email | new customer through a template |
| Shipment and tracking | Business Central or the WMS | to Magento | one shipment per posted shipment |
Salable quantity is the one row where Magento calculates and Business Central only supplies. Most stock differences in this pair start there.
What Magento and Business Central store differently
Item variants against configurable products
In Business Central a work jacket is one item with a number of at most 20 characters. Each color and size is an itemVariant with a code of at most 10 characters, for example BL-M. Color and size are not separate fields.
In Magento each variant is its own simple product with its own SKU, under a configurable product. Color and size are attributes with an option ID per value, and those IDs differ per installation. The integration reads them from your Magento and looks up the ID for BL. A color code that does not exist in Magento yet goes on a checklist.
Linking a child to its parent is one call per child: POST /V1/configurable-products/{sku}/child takes a single childSku. A jacket in 4 colors and 6 sizes is 24 variants. That is 24 simple products, 1 configurable product, 2 calls for the color and size options and 24 link calls: 51 requests for one style. A collection of 300 styles is 15,300 requests. The simple products go through the bulk endpoint; the link calls run from a queue. See variant mapping.
Attribute sets
Every Magento product needs an attribute_set_id. Business Central has no attribute sets, only an itemCategoryCode. The integration keeps a translation table: category WORKWEAR belongs to attribute set 9. An item in a category that is not in the table is held, not created under the default set.
Stock: one total against sources
The inventory property of a Business Central item is one read-only number across all locations. Magento works with sources and reservations: salable quantity is the sum of the sources minus open reservations, and a reservation clears only when the shipment exists in Magento.
The sum, as in the diagram: Business Central has 20. An order of 4 comes in, Magento reserves 4 and shows 16. The shipment is posted and Business Central drops to 16. If the integration writes 16 to the source before the shipment is in Magento, Magento calculates 16 minus 4 and shows 12. So the shipment is sent first and the stock after it. With more than one location, the quantity per location comes from a query published as an OData web service. See multi-location inventory and which stock counts.
Posting groups Magento does not know
A Business Central customer has a general business posting group, a VAT business posting group and a customer posting group; an item has a general product and an inventory posting group. Magento sends none of these, and the customers resource in the API has no fields for them. A template on the API Setup page fills empty fields when a customer is created. One template gives every web customer the same groups, so the integration picks the VAT group from country and VAT number on the billing address and sets it through a custom API page.
Addresses
Magento sends the street as an array of lines and the country as a two-letter country_id. Business Central has shipToAddressLine1 of 100 characters and shipToAddressLine2 of 50. An address with three or four street lines is joined, and the length is checked before the order is sent. More in address field mapping.
The technical reality of this pair
The two APIs are limited in opposite ways. Business Central online counts requests per user. For Magento on your own server, Adobe documents no general REST rate limit: the server is the limit, and an integration that reads too much at once slows the store.
| Limit | Magento 2 and Adobe Commerce | Business Central online |
|---|---|---|
| Requests | no general limit documented | 6,000 per 5 minutes per user, 5 at once |
| Over the limit | a slow store | 429, or 503 after 8 minutes queued |
| Page size | all results when pageSize is missing |
20,000 records |
| Batching | async bulk, 5,000 items per request | $batch, 100 operations |
| Change notices | Open Source: polling | webhook, about 30 seconds delayed |
| Access | integration with OAuth 1.0a | OAuth 2.0 through Microsoft Entra |
Checked on October 3, 2026 in Microsoft's operational limits and Adobe's API security page. Magento's input limits, 20 items per synchronous request and 5,000 per asynchronous request, are off by default. Since 2.4.4 an integration token no longer works as a standalone bearer token.
Prices, worked through. 2,000 items, 3 customer price groups and 2 quantity breaks each is 12,000 tier prices. At 20 per synchronous request that is 600 requests. Through the asynchronous bulk route at 5,000 per request it is 3. Business Central delivers the same 12,000 price list lines in one page. After the first run only changed lines go.
The bulk route depends on a consumer. A bulk request returns a bulk_uuid at once and the work happens in the message queue. If the consumer async.operations.all is not running, every operation stays at status 4, open, without an error. The integration reads GET /V1/bulk/{uuid}/status after each batch and reports operations that stay open.
Business Central webhooks expire after three days and are renewed with the same handshake used to create them. Shipments have no webhook and no tracking field, so the integration reads posted shipments by date, takes the tracking number from a published page and sends track_number, title and carrier_code to Magento. Throughput for your own numbers: integration throughput.
Where standard connectors stop
Standard connectors and iPaaS templates for this pair describe their own limits.
- Their own extension in Business Central. The vendor installs an app that adds fields and endpoints. The mapping follows that extension, not your setup.
- Posting groups as one fixed value. The required groups are added to every order as a default. A second VAT regime or a group per channel does not fit.
- Customer match on email only. An unknown email creates a new customer, even when the company already exists under another address. See duplicate customers and orders.
- Split shipments. The documentation of such a connector warns of unexpected behavior with partial shipments.
Microsoft ships its own connector for Shopify, for Business Central online only. Microsoft's documentation lists none for Magento. A built integration has no fixed points: the attribute set table, the posting group rule and the customer match follow how your Business Central and your Magento are set up.
When it goes wrong
| What fails | What the integration does | What you see |
|---|---|---|
| Business Central answers 429 | order waits in the queue, retried after a longer pause | nothing, unless it lasts |
| Customer without posting groups | order held, others continue | the order and the missing field |
| Order line with an unknown SKU | that order is held | the order and the SKU |
| Bulk operation ends in status 2 | sent again, status 2 can be retried | the number of retried lines |
| Bulk operation ends in status 3 | line goes to the checklist with its payload | the SKU and Magento's message |
| Webhook subscription expired | created again, missed changes read by date | a log line |
| Magento down for an upgrade | changes from Business Central wait in the queue | the queue length |
An order that keeps failing is stored with its original payload and sent again once the cause is fixed. Every attempt uses the increment_id as its key, so a retry does not create a second sales order. A reconciliation run compares recent Magento orders with externalDocumentNumber in Business Central and picks up anything a run missed.
Before go-live the integration runs as a dry run: it reads both sides and shows which products, prices and orders it would write, without writing. After that every run shows a diff per record. We host and monitor it and change it when Adobe or Microsoft changes an interface. The system side is on Business Central integration, the platform side on Magento integration, all flows on integrations. Sibling pages: Shopify Business Central integration, Magento NetSuite integration and Magento SAP integration. Tell us which Magento version and which Business Central you run.
Frequently asked questions
Does it work with Magento Open Source or only with Adobe Commerce?
Both. The REST API for products, sources, orders and shipments is the same. The difference is in change notices: Adobe I/O Events and Adobe Commerce Webhooks need Adobe Commerce 2.4.4 or later and do not exist for Open Source. On Open Source the integration reads new orders with a search on updated_at.
Does it work with Business Central on-premises or with Dynamics NAV?
Business Central on-premises has the same API v2.0. It is disabled by default and your administrator turns it on. Dynamics NAV 2018 has only the beta version of the API, with basic authentication. There, the flows run through pages and queries published as OData web services.
Do we need an extension in Business Central?
Not for items, customers, sales orders and shipments: those are in the standard API v2.0. Stock per location, price lists and the tracking number of a shipment are not. They come from a page or query published as an OData web service, or from a small custom API page.
Why does Magento show less stock than Business Central?
Usually because a shipped order is subtracted twice. Business Central lowers its stock when the shipment is posted. Magento keeps its reservation until the shipment exists in Magento. With 20 units and a shipped order of 4, the integration writes 16 and Magento shows 12. So the shipment always goes to Magento before the next stock run.
Can customer price lists from Business Central go to Magento?
Yes. A Business Central customer price group becomes a Magento customer group, and each price list line a tier price with sku, customer_group, quantity and price. On Adobe Commerce with B2B, a price list can follow a shared catalog, which creates its own customer group. See customer-specific pricing.
Which Magento versions do you integrate?
The 2.4 line. The latest release is 2.4.9 of May 12, 2026. Regular support for 2.4.6 ended on August 11, 2026; for 2.4.7 it runs to May 31, 2027 and for 2.4.8 to May 31, 2028. The integration uses REST endpoints that exist in all of these and is changed when a release alters one.
Tell us what you need
Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.
- You know the price and the timeline before you commit to anything
- We work out the connection that takes the work off your hands
- We handle the build, hosting, monitoring and maintenance
- Your team has less information to retype and fewer discrepancies to chase