ml-connector
Microsoft Dynamics NAVCin7

Microsoft Dynamics NAV and Cin7 integration

Microsoft Dynamics NAV is the ERP backbone for finance, procurement, and inventory. Cin7 Core manages inventory and order operations, with integrated accounting. Connecting the two keeps your purchase-to-pay and order-to-cash cycles in agreement and eliminates manual journal entry. New purchase invoices from Cin7 flow into NAV's general ledger, inventory movements align across both systems, and supplier and customer master data stays consistent.

How Microsoft Dynamics NAV works

Microsoft Dynamics NAV (both Business Central online and on-premises) exposes purchase orders, sales orders, purchase invoices, sales invoices, vendors, customers, items, general ledger entries, and dimensions through OData v4 REST (primary) or SOAP web services (legacy). Online instances authenticate with OAuth 2.0 client credentials via Microsoft Entra ID against a tenant-specific base URL. On-premises requires an administrator to enable OData and API services through the NAV Server Administration tool and open the OData port (7048) through the firewall. NAV supports webhooks for push notifications on supported entities, with a 3-day subscription expiry and automatic re-subscribe handling, or polling if webhooks are not enabled. GL accounts and GL entries are read-only in the standard API and are immutable once posted.

How Cin7 works

Cin7 Core is a cloud SaaS inventory and order management platform with integrated accounting, exposing suppliers, purchases, sales, sales payments, customers, products, product availability, and chart of accounts through a REST API over HTTPS with JSON bodies. Authentication uses custom API key headers (api-auth-accountid and api-auth-applicationkey) rather than OAuth or Basic Auth. Cin7 supports webhooks for outbound events on sales, purchases, suppliers, customers, and stock changes configured through the UI Automation module, not via API. The chart of accounts is read-only via API. Purchases support full procure-to-pay lifecycle tracking via the Approach field (ORDER, INVOICE, RECEIVE). Webhook payloads are not HMAC-signed.

What moves between them

Purchase invoices and sales invoices from Cin7 flow into Microsoft Dynamics NAV as general ledger journal entries, allocated to the appropriate GL accounts and dimensions in NAV. Inventory movements are synced in both directions so stock on hand in NAV reflects physical and received inventory in Cin7. Supplier and customer master records flow bidirectionally so new suppliers added in Cin7 become vendors in NAV, and new customers in NAV are visible in Cin7. Cin7 webhooks trigger real-time updates for sales, purchases, and stock changes, while NAV inventory and GL data is polled to maintain downstream consistency.

How ml-connector handles it

ml-connector stores Cin7's API key headers encrypted and presents them on every API call, refreshing the key if rate limits are approached. On the NAV side, it uses OAuth 2.0 client credentials to authenticate against the customer's Entra ID tenant and accepts the tenant-specific base URL for online instances, or the on-premises server address and port if applicable. For online customers, ml-connector subscribes to NAV webhooks on purchase invoices, sales invoices, vendors, customers, items, and general ledger entries, and renews subscriptions before the 3-day expiry window. For on-premises or customers without webhooks enabled, it polls NAV inventory and GL tables on a schedule. Cin7 webhook events for sales, purchases, and stock changes trigger immediate reconciliation in NAV. Purchase invoices are mapped to NAV journal lines with GL account and dimension references validated before posting, and sales invoices are posted as customer GL documents. Supplier and customer synchronization is bidirectional using name and contact fields as match keys. Every record carries a full audit trail with timestamps and status tracking.

A real-world example

A mid-size product distributor runs Microsoft Dynamics NAV on-premises for finance, procurement, and inventory accounting, and uses Cin7 Core for order management and supply chain visibility across three regional warehouses. Before the integration, the accounting team manually exported invoices from Cin7 each week and re-entered purchase and sales totals into NAV's general ledger, and warehouse staff kept separate inventory counts because NAV and Cin7 diverged. With Cin7 connected to NAV, each purchase invoice posts automatically to the correct GL account, warehouse inventory movements sync in real time so both systems show the same stock levels, and supplier changes in Cin7 automatically create vendors in NAV. Month-end reconciliation is faster, and the warehouse no longer maintains duplicate records.

What you can do

  • Post purchase and sales invoices from Cin7 into Microsoft Dynamics NAV's general ledger with GL account and dimension mapping.
  • Sync inventory movements bidirectionally so stock on hand, received goods, and available inventory match across both systems.
  • Map Cin7 suppliers and customers to NAV vendors and customers, keeping master data consistent in both directions.
  • Authenticate Cin7 with custom API key headers and NAV with OAuth 2.0 via Microsoft Entra ID, handling online and on-premises instances.
  • Receive Cin7 webhook events for sales, purchases, and stock changes, with polling fallback for NAV data that webhooks do not cover, and full audit trails on every record.

Questions

How does the integration handle Microsoft Dynamics NAV online versus on-premises?
For NAV Business Central online, ml-connector uses OAuth 2.0 client credentials via Entra ID and the published base URL for your tenant. For on-premises instances, it uses the customer-provided server address and port (7048 for OData), and requires that the NAV administrator has enabled OData and API services via the NAV Server Administration tool and opened the OData port through the firewall. Both authenticate the same way to Cin7's REST API using custom API key headers.
Why are NAV GL accounts and GL entries read-only in this integration?
Microsoft Dynamics NAV's standard OData API exposes GL accounts and posted GL entries as read-only to prevent unintended modifications to the audit trail. ml-connector posts purchase and sales invoices as journal entries, not as direct GL account edits, so they flow through NAV's normal approval and posting workflow. Once a journal entry is posted and becomes a GL entry, it is immutable per accounting standards.
What happens if a Cin7 webhook fails or a NAV subscription expires?
ml-connector monitors NAV webhook subscriptions (which expire after 3 days) and renews them automatically before expiry. If a Cin7 webhook event fails to deliver or a NAV subscription lapses, ml-connector falls back to polling both systems on a configurable schedule so no data is lost. Every record carries a timestamp and status flag so failed or delayed records can be replayed once connectivity is restored.

Related integrations

Connect Microsoft Dynamics NAV and Cin7

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

Get started