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
- 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.
- Certificates & secrets → New client secret. Copy the Value, not the Secret ID — it is shown only once. Record the expiry date.
- 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
- In Business Central, search for Microsoft Entra Applications (in older versions: Azure Active Directory Applications).
- Select New and paste the Client ID from the app registration. Set a description and set State to Enabled.
- 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
| Value | Where 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 names | The sandbox and production environment names |
| Company ID (GUID) and company name | GET …/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/.defaultAPI base
https://api.businesscentral.dynamics.com/v2.0/{tenantId}/
{environment}/api/v2.0/companies({companyId})Calls
| Purpose | Call |
|---|---|
| Discover company | GET /companies |
| Poll orders ready to ship | GET /salesOrders?$filter=status eq 'Open' |
| Read order lines | GET /salesOrders({id})/salesOrderLines |
| Read customer and ship-to detail | GET /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
- Carriora obtains a token using the client credentials.
- A request for the company list returns your company.
- A released sales order and its lines can be read.
- 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.
