ml-connector
Microsoft Dynamics 365 Business CentralAvidXchange

Microsoft Dynamics 365 Business Central and AvidXchange integration

Microsoft Dynamics 365 Business Central runs finance, purchasing, and the general ledger. AvidXchange runs accounts payable automation, approval routing, and payment execution. Connecting the two keeps your vendor master and chart of accounts in agreement across both systems and brings settled payment detail back into the ledger without re-keying. Vendor records, GL account codes, and accounting dimensions flow from Business Central into AvidXchange so invoices can be coded against valid accounts, and the check, ACH, or virtual card detail AvidXchange produces after each payment run posts back into Business Central. ml-connector handles the very different auth on each side and moves the data on a schedule you control, because AvidXchange exposes no push notifications.

How Microsoft Dynamics 365 Business Central works

Microsoft Dynamics 365 Business Central exposes vendors, purchase invoices, purchase orders, GL accounts, general ledger entries, dimensions, and payment journals through the Business Central API v2.0, a REST API built on OData v4 with JSON payloads. Authentication uses Microsoft Entra ID OAuth 2.0 client credentials (service-to-service), scoped to a tenant and a named environment such as production, so the base URL is tenant-specific. The chart of accounts and general ledger entries are read-only, while vendors and purchase invoices support writes; posting a draft invoice requires the Microsoft.NAV.post bound action. Business Central can push change notifications by subscription, but notifications carry no data and subscriptions expire every three days, so finance records are typically read by polling with a lastModifiedDateTime filter for delta sync.

How AvidXchange works

AvidXchange exposes its data through the AvidConnect API, a REST service over JSON and HTTPS running on a WSO2 API Manager gateway. Authentication uses proprietary tokens rather than standard OAuth: an admin generates a Company Token and a User Token inside AvidSuite, passed as HTTP headers on each request. AvidConnect syncs vendors, invoices, GL codes, accounting dimensions, and payments. Vendors, GL codes, and dimensions are pulled from the accounting system into AvidXchange (GL codes are read-only there because the ERP is the source of truth), while invoices are submitted and their approval status read back, and settled payment data is pushed back to the ERP after execution. AvidXchange publishes no webhooks; integrations run on a scheduled pull and batch sync model.

What moves between them

The flow runs in both directions but is split by system of record. From Microsoft Dynamics 365 Business Central into AvidXchange, ml-connector pushes vendor master records, GL account codes, and accounting dimensions so AP staff can code and route invoices against valid accounts and pay the right payees. Approved purchase invoices can also be submitted into AvidXchange for payment. From AvidXchange back into Business Central, ml-connector pulls settled payment records (check number, ACH trace, or virtual card detail) after each payment run and records them as vendor payment journal lines applied to the matching vendor and invoice. GL codes are read-only in AvidXchange, so the Business Central chart of accounts stays the source of truth and ml-connector never writes accounts back into AvidXchange. Vendors flow before invoices, because a payee must exist in AvidXchange before a bill can be coded against it.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Business Central side it requests an Entra ID OAuth 2.0 client-credentials token, scopes every call to the tenant and the configured environment name, and refreshes the token before expiry. On the AvidXchange side it sends the AvidSuite Company and User tokens as headers on each request against the partner-provided base URL. Vendors and GL codes are synced first, because AvidXchange cannot code or pay an invoice against a payee or account that does not yet exist; a missing vendor means a payment failure. Because AvidXchange exposes no webhooks and Business Central notifications carry no payload, both sides are read by polling: ml-connector queries Business Central with a lastModifiedDateTime filter for delta sync and pages through OData @odata.nextLink continuation tokens, and it polls the AvidXchange payment endpoint every fifteen to thirty minutes for settled payments. Business Central has no idempotency-key header, so ml-connector dedupes on the vendor or invoice number and a BullMQ jobId before posting, which avoids double-recording a re-read payment. Invoice images travel with the invoice payload, approval routing stays entirely inside AvidSuite, and the supplier's own payment method preference in the AvidPay Network controls how a payment is delivered. Business Central returns HTTP 429 when throttled, so ml-connector backs off with jitter, and every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-market property management firm with roughly 250 employees runs Microsoft Dynamics 365 Business Central for finance and the general ledger and adopts AvidXchange to digitize and route the high volume of vendor bills across its properties. Before the integration, the AP team exported vendor lists and GL codes from Business Central by hand into AvidXchange, then re-keyed each settled payment back into the ledger after AvidPay cut the check or sent the ACH, which slowed month-end close and let vendor records drift apart between the two systems. With Microsoft Dynamics 365 Business Central and AvidXchange connected, vendors, GL codes, and dimensions stay aligned automatically, approved invoices route inside AvidSuite, and each settled payment posts back into Business Central as a vendor payment journal line applied to the right invoice. The manual re-keying step disappears and the AP ledger reconciles against both systems.

What you can do

  • Push Microsoft Dynamics 365 Business Central vendor master records into AvidXchange so every invoice is coded against a valid payee.
  • Sync Business Central GL account codes and accounting dimensions into AvidXchange for correct invoice coding.
  • Record settled AvidXchange payments back into Business Central as vendor payment journal lines applied to the right invoice.
  • Bridge Microsoft Entra ID OAuth 2.0 client credentials on the ERP side and the AvidSuite Company and User tokens on the AvidXchange side.
  • Poll both systems on a schedule with delta filtering, jobId dedup, retries, and a full audit trail on every record.

Questions

Which direction does data move between Microsoft Dynamics 365 Business Central and AvidXchange?
It moves both ways, split by system of record. Vendor master records, GL account codes, and dimensions push from Business Central into AvidXchange, and approved invoices can be submitted there for payment. Settled payment detail, such as check number, ACH trace, or virtual card, is pulled back from AvidXchange into Business Central as vendor payment journal lines. GL codes are read-only in AvidXchange, so the Business Central chart of accounts stays authoritative.
Does AvidXchange push events, or does ml-connector poll for payment status?
AvidXchange publishes no webhooks, so ml-connector polls. It queries the AvidXchange payment endpoint on a schedule, typically every fifteen to thirty minutes, to detect settled payments after each run. On the Business Central side, change notifications exist but carry no payload and expire every three days, so ml-connector reads finance records by polling with a lastModifiedDateTime filter for delta sync rather than relying on a push.
How does the integration handle the two different authentication models?
ml-connector stores both credential sets encrypted and presents the right one to each system. Business Central uses Microsoft Entra ID OAuth 2.0 client credentials scoped to the tenant and a named environment, and the connector refreshes that token before it expires. AvidXchange uses proprietary AvidSuite Company and User tokens passed as headers, which the connector tracks because they are rotated manually rather than through an OAuth refresh flow.

Related integrations

Connect Microsoft Dynamics 365 Business Central and AvidXchange

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started