Skip to main content

API overview

The BI Endpoints are API pages inside Business Central. They are read-only, company-scoped, follow OData v4 conventions, and are authenticated with an OAuth 2.0 bearer token from Microsoft Entra ID.

Construction of the URL​

A sample endpoint URL, broken down:

https://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environment}/api/datawareness/endpoints/v1.0/companies({companyId})/glEntries?$filter=postingDate ge 2026-01-01
PartMeaning
https://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environment}/api/The Business Central base URL. Replace {tenantId} with the tenant's GUID and {environment} with the environment, for example Production.
datawareness/endpoints/The root of this application (publisher and API group).
v1.0/The current version of the endpoints.
companies({companyId})/The company to read from. Replace {companyId} with the company's GUID; list companies with GET https://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environment}/api/v2.0/companies.
glEntriesThe entity set to read. See the category pages, starting with Finance.
?$filter=postingDate ge 2026-01-01Optional query options. See Querying the endpoints.

Spaces in a query are sent URL-encoded, for example postingDate%20ge%202026-01-01.

You don't need to assemble URLs by hand: each endpoint's page under BI Endpoints in Business Central shows its URL for the current environment and company, and the biEndpoints metadata returns the same in url.

Authentication​

Always send a bearer token: Authorization: Bearer <access_token>. A token is only valid for a limited time, so request a new one from your app registration when it expires. See Authentication.

Response format​

{
"@odata.context": "https://api.businesscentral.dynamics.com/v2.0/.../$metadata#companies(...)/glEntries",
"value": [
{
"@odata.etag": "W/\"JzE5Oz...\"",
"entryNo": 1,
"gLAccountNo": "2910",
"postingDate": "2026-01-02",
"documentNo": "START",
"amount": 1500.0,
"systemModifiedAt": "2026-01-02T08:14:22.12Z"
}
]
}
  • The rows are in the array value.
  • Field names are camelCase. The fields of every endpoint are listed by the properties metadata endpoint.
  • Every endpoint includes systemModifiedAt, when the record was created or last modified. Use it for incremental loads.
  • The business key of each endpoint — entryNo, no, documentNo&&lineNo and so on — identifies a record. Use it as the key in your warehouse.
  • Enum and option values, such as documentType or status, are rendered as text in the API Output Language chosen on BI Endpoints Setup.

Pagination​

A response holds at most 20,000 rows. When the query matches more, the response also contains @odata.nextLink: the URL of the next page. Keep calling it until it is no longer returned. See Pagination.

Subscription tiers​

Each endpoint requires the Free or Premium tier; see Free and Premium. The tier of every endpoint is on the category pages and in the tier field of biEndpoints.

Errors​

Errors use Business Central's standard OData error body:

{
"error": {
"code": "Application_DialogException",
"message": "This endpoint requires a Premium subscription. Your current subscription tier is Free. Please upgrade to access this endpoint."
}
}
StatusTypical cause
400 Bad RequestThe subscription is not activated, the endpoint needs a higher tier, or the query is invalid. Read error.message.
401 UnauthorizedThe token is missing, expired or for the wrong app.
403 ForbiddenThe app lacks a permission set in Business Central, or the company ID is wrong.
404 Not FoundThe extension is not installed, or the endpoint name, URL or environment is wrong.
429 Too Many RequestsBusiness Central throttling. Retry with backoff and use smaller pages.

See Troubleshooting for what to check for each.

Limits​

Request limits are set by the Business Central platform, not by BI Endpoints; see Microsoft's operational limits. In practice:

  • Filter on systemModifiedAt to read only what changed.
  • Use $select to read only the fields you need.
  • Request smaller pages with Prefer: odata.maxpagesize=5000 for large tables.
  • Reuse a token until it expires instead of requesting one per call.

Endpoint groups​

GroupPages
Data, by categoryFinance, Sales, Purchasing, Inventory, Jobs, Resources, Manufacturing, Assembly, Approvals
DeletionsdeletedEntries
MetadatabiEndpoints, properties, relationships, referencedBy, applicationInfo
Custom endpointscustomData
Management APItables, tableFields, customEndpoints, customEndpointColumns