Skip to content
Carriora

Integrations · Business systems

Business Central shipping integration

Carriora connects to Microsoft Dynamics 365 Business Central as an external service. It authenticates with service-to-service OAuth, reads released sales orders through the standard API, and from each order creates a shipment, applies your carrier and customs rules, and produces the booking, the label and the customs documents.

No code in your Business Central

No AL extension, no custom API page, and no code deployed into your Business Central environment. The integration uses the standard APIs only, and the connection is read-only: Business Central remains the system of record for orders and invoicing, and your posting routines are unchanged.

Open in the API means Released in the interface

Business Central's standard API reports an order's status as Draft, In Review or Open. In the API, Open means the document is Released in the Business Central user interface — what the user interface calls Open, the API calls Draft.

Carriora therefore picks up an order when it is released. This is the single detail most often misread when connecting to Business Central, and it is worth confirming before testing begins.

There is no API user in Business Central any more

Web Service Access Keys, the old basic-authentication method, stopped working in Business Central online in October 2022. A registered Microsoft Entra application is the supported replacement — that is what the setup below creates.

Setting it up

Two steps, carried out by your Business Central partner or IT administrator. Each environment is configured separately — the sandbox and production each get their own registration and secret.

1 · Register a Microsoft Entra application

  1. App registrations → New registration. Single tenant, and no redirect URI — the client-credentials flow does not use one. Give it a name you'll recognise, such as Carriora TMS Integration.
  2. Certificates & secrets → New client secret. Copy the Value, not the Secret ID — it is shown only once. Record the expiry date.
  3. API permissions → Add a permission → APIs my organization uses → Dynamics 365 Business Central → Application permissions → API.ReadWrite.All. Then grant admin consent for the tenant.

API.ReadWrite.All is the only application permission Microsoft offers for the standard APIs. Actual data access is limited by the permission sets assigned in Business Central, not by this entry. Automation.ReadWrite.All is not required.

2 · Enable the application in Business Central

  1. In Business Central, search for Microsoft Entra Applications (in older versions: Azure Active Directory Applications).
  2. Select New and paste the Client ID from the app registration. Set a description and set State to Enabled.
  3. Assign the permission sets D365 BASIC and D365 READ.

D365 BASIC and D365 READ together grant read access only. If that proves too narrow during the sandbox verification, we come back with a specific request — starting narrow is deliberate.

3 · Values to hand over

ValueWhere it comes from
Tenant ID (Directory ID)Entra app registration → Overview
Client ID (Application ID)Entra app registration → Overview
Client secret (value)Certificates & secrets
Environment namesThe sandbox and production environment names
Company ID (GUID) and company nameGET …/api/v2.0/companies

Send the client secret through a different channel from the rest of the values, and tell us its expiry date. An expired secret stops order pickup silently, so we schedule the rotation in advance.

What Carriora calls

Authentication

POST https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token
grant_type = client_credentials
scope      = https://api.businesscentral.dynamics.com/.default

API base

https://api.businesscentral.dynamics.com/v2.0/{tenantId}/
{environment}/api/v2.0/companies({companyId})

Calls

PurposeCall
Discover companyGET /companies
Poll orders ready to shipGET /salesOrders?$filter=status eq 'Open'
Read order linesGET /salesOrders({id})/salesOrderLines
Read customer and ship-to detailGET /customers({id})

Carriora polls roughly every ten minutes and then makes a small number of calls per order. All traffic is read-only; there are no writes to Business Central.

The Business Central side is complete when all four pass

  1. Carriora obtains a token using the client credentials.
  2. A request for the company list returns your company.
  3. A released sales order and its lines can be read.
  4. The same works against production, using its own secret.

Worth knowing

Item customs data. Tariff numbers, country of origin and weights come from Carriora's item master — the standard Business Central API does not expose those fields. Publishing the item table as a read-only OData V4 web service, standard configuration with no development, lets Business Central become the master for customs data later.

Warehouse shipments. These are not part of the standard Business Central API. If your outbound flow runs through warehouse shipments rather than posting the sales order directly, tell us early — it changes the design.

Connect Business Central to every carrier.

Talk to us about your Business Central flow, or create a free test account and see what Carriora books from a released order.

Create a free test account in minutes. No sales call. Live carrier accounts are activated together with us.