> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brandgate.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Business Central

> Business Central with BrandGate: what it syncs and how to connect.

> [!NOTE]
>
> Status: **Built in**. The current list for your company is in **Settings → Integrations**.

## What it syncs

Invoices, payments and credit memos are exported to Business Central.

## How to connect

Connect with OAuth 2 from **Settings → Integrations**.

## Who owns which data

BrandGate stays the invoice sender. Partial credit notes need to be handled by a person. The general rules are in the [integration model](/integration-model).

## Limits and known differences

Ask us if your case needs something that is not listed here: [brandgate.dev/contact](https://www.brandgate.dev/contact). Building it yourself? Follow [Build an ERP integration](/build-an-integration).

## Connect it through the API

Building the connection yourself? These are the typical field matches. The steps are the same for every system: [Build an ERP integration](/build-an-integration).

| Business Central | BrandGate |
| - | - |
| Item `number`, `displayName`, `unitPrice` | product `external_id` and `sku`, `name`, `unit_price` |
| Item `inventory` | [`POST /v1/inventory`](/guides/erp-sync#3-stock-from-the-erp) |
| Sales price lines for a price group (`salesCode`, `itemNo`, `unitPrice`) | [price list](/guides/send-data#price-lists-and-customer-prices) per group |
| Customer `number`, `displayName`, `email`, `taxRegistrationNumber` | `customer_number` and `external_id`, `company_name`, `email`, `vat_number` |
| Sales order `externalDocumentNumber` | BrandGate order `number`; acknowledge with the BC order `number` |

Use the BC `number`, not the GUID `id`, as `external_id`. BrandGate treats `external_id` as plain text that you choose and never reads it as a BC id, so the GUID would work too, but the `number` is what people see and it survives a company copy. The `If-Match` ETag that BC requires when you update its records is between you and BC: BrandGate has no ETag. Send `source_updated_at` (BC's `lastModifiedDateTime`) so a late retry cannot overwrite newer data.

> [!NOTE]
>
> Field names are the ones your ERP usually exposes; check them against your version. Amounts go to BrandGate as decimal strings with at most two decimals (`"299.50"`), so round before you send: ERPs that hold prices as floating-point numbers need `Math.round(x * 100) / 100`.

## What the API cannot hold yet

* Price validity dates (`startingDate`, `endingDate`) and per-line currency.
* Blocked items and payment terms given as an id (convert to days).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.