ml-connector
Exact OnlineCin7

Exact Online and Cin7 integration

Exact Online runs accounting, purchasing, and sales for SMEs across Europe and the USA. Cin7 Core manages inventory, orders, and GL integration. Connecting the two keeps your purchase and sales invoices synchronized across both ledgers without manual re-entry. New sales orders in Exact Online flow into Cin7 for inventory allocation, and purchase invoices from vendors in Exact sync into Cin7's accounts payable for matching against receipt. ml-connector bridges the very different authentication models and regional URLs on each side, and moves records on a schedule you control.

How Exact Online works

Exact Online exposes sales invoices, sales invoice lines, purchase invoices, purchase invoice lines, sales orders, purchase orders, GL accounts, cost centers, items, and journal entries through a region-specific REST API with OData v3 query syntax (filter, select, orderby, top, skip). Authentication uses OAuth 2.0 Authorization Code Grant with a 10-minute access token and 30-day rotating refresh token. The API supports webhooks for push notifications when accounts, sales orders, sales invoices, purchase orders, or purchase invoices are created, updated, or deleted. However, webhook payloads contain only the entity key and action; full entity data must be fetched separately. Division ID is required for all API calls.

How Cin7 works

Cin7 Core exposes suppliers, purchases, sales, customers, products, and chart of accounts through a REST API at https://inventory.dearsystems.com/externalapi/v2/. Authentication uses custom API key headers (api-auth-accountid and api-auth-applicationkey) rather than OAuth. The platform supports webhooks for outbound events on sales, purchases, suppliers, and customers. However, webhook payloads are not HMAC-signed, and the chart of accounts is read-only. Purchases cover the full procure-to-pay lifecycle using an Approach field (ORDER, INVOICE, RECEIVE) rather than separate entities.

What moves between them

Purchase and sales invoices move bidirectionally. When a sales order is created in Exact Online, ml-connector polls the webhook or REST endpoint and creates a corresponding sale in Cin7 for inventory tracking. When a purchase invoice is received in Exact Online from a vendor, ml-connector creates a purchase in Cin7 with the INVOICE approach and maps it to the matching supplier. When a purchase is received in Cin7 (RECEIVE approach), ml-connector updates the corresponding purchase order receipt in Exact Online. Synchronization happens on a schedule you set, typically daily or after key business events.

How ml-connector handles it

ml-connector stores both credential sets encrypted: Exact Online's OAuth2 refresh token is cached and refreshed before expiry (11-minute window), and Cin7's API key headers are presented on every request. Because Exact Online requires a division ID fetched from the /current/Me endpoint before any API call, ml-connector queries that on first connect and caches it. Exact Online's regional URL (Netherlands, Belgium, UK, Germany, France, Spain, or USA) is determined by the customer's division and passed in the connection settings. On the Cin7 side, purchases and sales are mapped to invoices by matching supplier and customer names first, then invoice number as a secondary key. Purchase orders in Exact Online map to Cin7 purchases with ORDER approach; invoices map to INVOICE approach. Because Cin7's webhook payloads are unsigned, ml-connector validates purchases and sales by re-querying the source of truth after receiving a webhook notification. Every record carries an audit trail and can be replayed if a mapping or line-item write fails.

A real-world example

A small European distributor uses Exact Online for multi-region accounting and sales order management across Belgium and the Netherlands. The same business also uses Cin7 Core to manage warehouse inventory and purchase-to-pay operations. Before the integration, the procurement team received vendor invoices in Exact Online, re-entered them manually into Cin7 for inventory receipt matching, and then re-keyed supplier payments from Exact into Cin7's accounts payable. Sales orders entered in Exact had to be manually copied to Cin7 to reserve stock and allocate warehouse picks. With Exact Online and Cin7 connected, purchase invoices flow from Exact into Cin7 automatically, matched to the correct supplier and receipt, and sales orders trigger Cin7 inventory allocations without re-entry. Month-end accounts payable reconciliation is faster because both systems agree on invoice date, amount, and receiving status.

What you can do

  • Sync sales orders from Exact Online into Cin7 to reserve inventory and trigger warehouse picks.
  • Move purchase invoices from Exact Online into Cin7 Core matched to the correct supplier and receipt status.
  • Normalize Exact Online's regional OData endpoints and division ID requirement with Cin7's API key headers.
  • Handle Exact Online's 10-minute OAuth2 access token refresh and Cin7's custom API key authentication transparently.
  • Maintain a full audit trail on every invoice and order, with replay and error recovery on sync failures.

Questions

How does ml-connector handle Exact Online's different regional URLs?
ml-connector determines the correct regional endpoint (Netherlands, Belgium, UK, Germany, France, Spain, or USA) based on the division settings provided during connection setup. The division ID is fetched from the /current/Me endpoint on first connect and cached. All subsequent API calls use the correct region-specific base URL.
Do Exact Online webhooks provide everything ml-connector needs to sync?
No. Exact Online webhooks contain only the entity key and action (create/update/delete), so ml-connector must fetch the full invoice or order data separately via the REST API after receiving a webhook notification. This ensures all line items, amounts, and vendor/customer details are current before writing to Cin7.
How are purchase invoices in Exact Online mapped to purchases in Cin7?
ml-connector maps invoices by supplier name first, then by invoice number as a secondary key. In Cin7, purchases are created with the INVOICE approach to indicate they are vendor invoices ready for GL posting. If a supplier name changes or is spelled differently between systems, you can set up a static mapping table to align them before the sync begins.

Related integrations

Connect Exact Online and Cin7

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

Get started