Overview
A client-mode connector for a curated inventory / sales / webhook slice of Business Central Standard API v2.0 underhttps://api.businesscentral.dynamics.com/v2.0/{tenant}/{env}/api/v2.0/:
BASE_ADDRESS is the Standard API root (no trailing slash in the template). Topics use erp/dynamics365-bc/<object>/<verb>.
This is Business Central cloud API v2.0, not Dataverse and not Finance & Operations. For CRM/Dataverse Web API see Dynamics 365 (Dataverse). For F&O OData see Dynamics 365 Finance and Supply Chain.
Business Central API v2.0 requires a real tenant + environment, a company GUID, and an Entra ID OAuth 2.0 Bearer token. This template has not been verified against a live tenant. Prefer Hub secrets for tokens. Discover companies with
GET .../api/v2.0/companies.Basic Syntax
Events
Auth
OAuth 2.0 (Entra ID) — default in the template:- Register an app in Microsoft Entra ID; create a client secret; grant Dynamics 365 Business Central API permissions (e.g.
API.ReadWrite.All). - In Business Central: Azure Active Directory Applications (Microsoft Entra Applications) — add the client ID and assign permission sets.
- Request a token (client credentials example):
- Pass the access token and company GUID on the MQTT request payload:
Authorization: Bearer {value.json.access_token}. Prefer Hub secrets / GET SECRET. Never commit real tokens.
Companies and OData
ResolvecompanyId with GET https://api.businesscentral.dynamics.com/v2.0/{tenant}/{env}/api/v2.0/companies. All company-scoped entities nest under companies({id})/.... Send OData headers Accept: application/json, OData-Version: 4.0, OData-MaxVersion: 4.0.
Item ledger vs journals
itemLedgerEntry supports GET only. Catalog “POST itemLedgerEntries via journals” maps to the standard API writable journal pathjournalLines (G/L or Bank). Inventory quantity adjustments that create item ledger entries need a custom Item Journal API in AL.
Webhooks
Working with webhooks:items is a supported entity. Example subscription body:
notificationUrl?validationToken=... and expects the token in the 200 response body. Renew with PATCH /subscriptions({id}) before expiry (~3 days).
Deploy
- Copy
Dynamics365BcRestApi.lot(noADD METADATA). - Replace
YOUR_TENANTandYOUR_ENVinBASE_ADDRESS. -addRouteon the broker (or Hub deploy).- Publish JSON to a request topic; subscribe to the matching
/responsetopic.
STATUS "beta") is in hub-metadata.lot for Hub / -listTemplates only.
Status
Blocked until a live authenticated call succeeds (factory has no BC tenant/env or Entra credentials). Unblock with lab tenant + environment + company GUID + client-credentials (or delegated) token, then smokeGET /companies({id})/items?$top=1 expecting HTTP 200.

