Skip to content
SyncMyShop

Systems

Business Central integration with your online store and warehouse

Business Central online takes 5 concurrent API requests per user and 6,000 per five minutes, and its standard API leaves out price lists, stock per location and tracking numbers. We build the integration around those limits and your posting setup, then host and run it.

What Business Central is and who runs it

Dynamics 365 Business Central is Microsoft's ERP for small and midsize companies: finance, sales, purchasing, inventory, warehousing and manufacturing. It replaced Dynamics NAV, which was called Navision before that. Microsoft lists Business Central online as available in 241 countries and regions. It ships its own localization for 24 of them, including the United States, Canada, the United Kingdom and the Netherlands; partners provide the localization elsewhere.

For an integration there are two kinds of installation. Business Central online runs at Microsoft: the API is always on and changes with Microsoft's monthly updates. Business Central on-premises and NAV run on your own server or at a hosting partner, and the administrator decides what is open. One online environment holds up to 300 companies, and every API call names the company it is for.

What connects to Business Central

Business Central is the system of record for items, stock, prices and invoices. The store owns the order and new customers. These are the flows we build as part of an e-commerce ERP integration:

Flow Direction API v2.0 resource
Orders store to Business Central salesOrders, salesOrderLines
Customers store to Business Central customers
Items and variants Business Central to store items, itemVariants
Stock Business Central to store inventory on items (one total)
Shipments Business Central to store salesShipments
Invoices Business Central to store salesInvoices

The store order number goes into externalDocumentNumber. Business Central carries it through to the shipment and the invoice, so the integration can attach a shipment to the right store order. A retry first looks for an open order with that number, which is how a timeout halfway through a write never produces a second order. The note on duplicate customers and orders covers the pattern.

A Shopify order mapped to a Business Central sales order The store order number goes to externalDocumentNumber, which holds 35 characters. A second address line of 54 characters is cut to the 50 that Ship-to Address 2 holds. The store SKU is split into an item number and a variant code, which Business Central limits to 10 characters and stores in capitals. Shopify order Business Central salesOrder name #100482 shippingAddress.address1 1450 Industrial Parkway shippingAddress.address2 Receiving dock 4, attn. purchasing, building C, gate 2 54 characters lineItems.sku kb-2210-blk-xxlarge externalDocumentNumber WEB-100482 Code[35], stored in capitals shipToAddressLine1 1450 Industrial Parkway Text[100] shipToAddressLine2 Receiving dock 4, attn. purchasing, building C, ga Text[50]: last 4 characters lost lineObjectNumber KB-2210 item No., Code[20] itemVariantId variant code BLK-XXL Code[10], from a mapping table prefix WEB- cut at 50 split, uppercase
One Shopify order on its way into Business Central. Code fields are stored in capitals, and the field lengths come from the Sales Header and Item Variant tables.

Field lengths are where orders fail without anyone noticing. The Sales Header table holds 100 characters for the ship-to address and 50 for the second line. A variant code holds 10 characters and an item number 20. Code fields are also converted to uppercase and trimmed, so a store SKU in lowercase has to be matched without regard to case. The integration checks every value against these lengths before it writes, and reports a value that would be cut instead of cutting it. See address field mapping.

How Business Central exposes data

API v2.0, custom API pages and web services

The standard API is API v2.0. Its base address online and on-premises:

online:      https://api.businesscentral.dynamics.com/v2.0/{environment}/api/v2.0
on-premises: https://{server}:7048/{instance}/api/v2.0

On-premises it only answers after the administrator sets ApiServicesEnabled; until then every call returns HTTP 405.

Microsoft states that the standard API cannot be extended with extra fields. What it leaves out comes through a custom API page: AL code in an extension, installed in your environment, with its own address under /api/{publisher}/{group}/{version}. Pages and queries can also be published as OData web services on the Web Services page. NAV and older installations rely on those, and on SOAP, which Microsoft says it will slow down and deprecate.

Authentication through Microsoft Entra ID

Business Central online accepts OAuth 2.0 through Microsoft Entra ID only. Basic authentication with web service access keys stopped working online in October 2022. An unattended integration uses the client credentials flow: an app registration in Entra ID with the permission API.ReadWrite.All, which gets its permission sets in Business Central on the Microsoft Entra Applications page. A token request looks like this:

POST /{tenant-id}/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=3f1c9a42-...
&client_secret=...
&scope=https://api.businesscentral.dynamics.com/.default

The limits of Business Central online

Limit, per user Value Above the limit
Requests processed at the same time 5 the rest waits in the queue
Requests waiting in the queue 95 HTTP 429
Requests per 5-minute sliding window 6,000 HTTP 429
Time in the queue 8 minutes HTTP 503
Duration of one request 8 minutes HTTP 408, session canceled
Records per page 20,000 HTTP 413
Operations per $batch 100

Microsoft publishes these on its page of operational limits for Business Central online. On-premises, your own server settings apply.

The limit that decides throughput is the 5 concurrent requests, not the 6,000. Worked through for a backlog of 1,200 orders after a weekend sale, each with three lines: one customer lookup, one order header and three line writes make 5 requests per order, so 6,000 requests in total. If a request takes 0.5 seconds (an assumption; it depends on your extensions and posting setup), 5 concurrent requests run 10 per second. The backlog clears in 6,000 / 10 = 600 seconds, which is 10 minutes, and uses 3,000 requests per five-minute window. Reaching 6,000 in a window would take requests of 0.25 seconds. Sending more requests in parallel only fills the queue, so the integration runs 5 workers per user and puts everything else in its own queue. Microsoft's advice for more throughput is to spread the work over several users. API throttling and backoff covers the retry side.

Webhooks that expire after three days

Business Central sends a notification when a record changes. It waits 30 seconds to bundle changes, and sends one collection notification when more than 1,000 records changed. The notification names the record, not its content, so the integration reads the record afterwards. A subscription expires after three days and has to be renewed with a PATCH, with the same validationToken handshake as at creation. An integration that misses one renewal receives nothing and gets no error. salesShipments is not on the list of supported entities either. Next to the webhooks we therefore run a check on lastModifiedDateTime, as described in webhooks are not a guarantee.

Where a Business Central integration gets stuck

What the store needs In the standard API How we get it
Price lists and customer price groups no resource; one unitPrice per item custom API page
Stock per location inventory is one read-only total custom API page or a ledger query
Tracking number and shipping agent not on salesShipment custom API page
Posting groups on a new customer no properties on customer template on the API Setup page

Posting groups the store does not know. Business Central posts a sale through posting groups. The general business posting group of the customer and the general product posting group of the item decide the revenue account; the customer posting group decides the receivables account. A store sends none of these, and the customer resource has no property for them. The answer sits in Business Central: on the API Setup page a configuration template is attached to the customer API, with a condition, and it fills every property the call leaves empty. A domestic business customer, a foreign customer and a consumer each get their own template. The general pattern is in required fields the source never sends.

Tax is calculated by Business Central. On a sales order line, taxPercent, totalTaxAmount and amountIncludingTax are read-only. In the US version Business Central computes sales tax from the tax area code on the customer and the tax group code on the item (taxAreaId and taxGroupCode in the API); in Europe from VAT posting groups. The store has already charged the customer its own tax amount. When the two round differently, the order total in Business Central differs from the payment by a few cents, and the payment no longer matches the invoice automatically. The integration compares both totals per order and flags a difference before it reaches finance. See money, tax and rounding.

Prices and stock the API leaves out. An item has one unitPrice. Price lists per customer or customer price group, with minimum quantities and validity dates, exist in Business Central but not in the standard API, and for a B2B store they are the core of customer-specific pricing. The same applies to stock: a store that sells only from the main warehouse would show the stock of every location, showroom included. Which locations count is a decision we record per integration; see multi-location inventory.

Platforms we integrate with Business Central

The integration is built on your environment, with your extensions, posting groups and price lists. Each store platform has its own pair page:

WooCommerce stores connect the same way; the platform side is on WooCommerce. For the other ERPs we integrate, see NetSuite and SAP Business One.

We build the integration for a fixed price, then host it, monitor it and fix it when Microsoft or the store platform changes something, for a monthly fee. Before go-live it runs as a dry run that writes nothing: you see per order which customer, template and lines would be created in Business Central. Every integration comes with a dashboard, logs and a per-run diff. Tell us which version you run and which store you have.

Frequently asked questions

Does Business Central have an API for a store integration?

Yes. Business Central online has API v2.0, a REST API on OData v4 that is always on and updated by Microsoft every month. What it leaves out is added through a custom API page in an extension. On-premises installations have the same API, but it is disabled by default and an administrator has to switch it on.

What are the API limits of Business Central online?

Per user: 5 OData requests processed at the same time, 95 in the queue, 100 connections in total and 6,000 requests in a five-minute sliding window. Above those numbers the API returns HTTP 429. A request may run 8 minutes, a page holds at most 20,000 records and a $batch request at most 100 operations. The same limits apply to an application user that signs in with client credentials.

Can the integration read stock per location?

Not from the standard API. The inventory field on items is one read-only number for all locations together. Stock per location comes from a custom API page, or from a query on item ledger entries published as a web service. We decide with you which locations count for the store.

Does it work with Dynamics NAV or Business Central on-premises?

Yes. On-premises the administrator enables the OData and API services, which are off by default, and opens the port, 7048 by default, to the integration. Dynamics NAV 2018 offers SOAP and OData web services on pages and codeunits. Microsoft plans to reduce SOAP throughput and deprecate it, so we build new work on OData or the API.

What does Microsoft's own Shopify connector leave out?

It runs only on Business Central online, not on-premises, and only with Shopify. It exports one price per variant and reads prices for a quantity of 1, so quantity breaks do not reach the store. Each Business Central release is tied to one Shopify API version: the 2026 release wave 1 uses 2026-01, which Shopify keeps accessible until December 31, 2026.

Who needs a Business Central license for the integration?

No one. Microsoft states that service-to-service integrations need no license: the integration signs in as a Microsoft Entra application and gets its permissions in Business Central on the Microsoft Entra Applications page. Those permissions decide what it can read and write, so we keep them to the tables its flows use.

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

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com