ml-connector
AcumaticaCin7

Acumatica and Cin7 integration

Acumatica runs your financials and general ledger. Cin7 Core, the inventory and order management product formerly called DEAR Systems, runs your purchasing, stock, and supplier records. Connecting the two keeps suppliers and procurement documents in agreement, so a purchase order or supplier bill raised in one system appears in the other without re-keying. ml-connector handles the very different APIs and auth on each side, maps the account and supplier codes between them, and moves the data on a schedule you control.

How Acumatica works

Acumatica Cloud ERP exposes vendors, AP bills, purchase orders, payments, GL accounts, and journal transactions through its Contract-Based REST API as JSON over HTTPS. The base URL is tenant-specific and the endpoint version in the path must exactly match the customer ERP release, or the call returns 404. Authentication is OAuth 2.0 through the built-in identity server, or a legacy cookie session. Acumatica can push change events through Push Notifications with up to 5 retries and a shared-secret header, but the common and reliable pattern is polling with a LastModifiedDateTime filter and offset pagination via $top and $skip.

How Cin7 works

Cin7 Core exposes suppliers, purchases, sales, payments, products, and the chart of accounts through its REST API V2 at the inventory.dearsystems.com base URL, as JSON over HTTPS. Every call carries two custom headers, api-auth-accountid and api-auth-applicationkey, rather than OAuth. A single Purchase endpoint covers the full procure-to-pay cycle through its Approach field, which is ORDER for a purchase order, INVOICE for a supplier bill, and RECEIVE for a goods receipt. The chart of accounts is read-only through the API, records start as Draft and need an Authorise call, and Cin7 Core can push events from its Automation module though those payloads are not signed.

What moves between them

Suppliers and procurement documents move between Acumatica and Cin7 Core. Supplier or vendor master records are aligned in both directions so each side holds the same supplier list keyed on a shared code. Purchases flow from Cin7 Core into Acumatica, where a Cin7 Core Purchase with Approach ORDER becomes an Acumatica purchase order and one with Approach INVOICE becomes an Acumatica AP bill against the matching vendor and GL accounts. GL account codes are read from Cin7 Core, which exposes them read-only, and mapped to Acumatica accounts so each line posts correctly. Cadence is set per flow, from frequent intraday polling to a nightly run, with a high-water mark stored after each sync.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Acumatica side it accepts the full tenant URL and the endpoint version per customer, requests an OAuth token, and refreshes it when a call returns 401, while unwrapping Acumatica field values that arrive as a value object. On the Cin7 Core side it sends the api-auth-accountid and api-auth-applicationkey headers on every request and pages with the page and limit parameters. Because the Cin7 Core Purchase endpoint multiplexes the whole procure-to-pay cycle, the connector reads the Approach and Status fields to decide whether a record maps to an Acumatica purchase order or an AP bill, and on write it creates the record as Draft then issues the separate Authorise call. Supplier and GL account codes are mapped first so every line lands on a valid Acumatica vendor and account, and the chart of accounts is treated as read-only on the Cin7 Core side. Both APIs return HTTP 429 when rate limited, Acumatica once the request count crosses the licensed threshold and Cin7 Core with a Retry-After header, so ml-connector backs off with jitter and retries. Where Cin7 Core Automation webhooks are enabled the connector can receive them, but since those payloads are unsigned it relies on a shared-secret token and falls back to polling as a catch-up. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized wholesale distributor runs Acumatica for its general ledger and AP, and runs Cin7 Core for inventory, purchasing, and supplier management across a couple of warehouses. Before the integration, a buyer raised purchase orders and recorded supplier invoices in Cin7 Core, then a finance clerk re-keyed each bill into Acumatica every few days, picking the right vendor and GL accounts by hand and reconciling the two supplier lists at month-end. With Acumatica and Cin7 connected, each authorised Cin7 Core purchase flows into Acumatica as a purchase order or AP bill on the matching vendor and accounts, and the supplier records stay aligned. The clerk stops re-entering bills and month-end close starts with the AP side already matching procurement.

What you can do

  • Sync supplier records between Acumatica and Cin7 so both systems hold the same vendor list on a shared code.
  • Turn Cin7 Core purchases into Acumatica purchase orders or AP bills based on the Approach and Status fields.
  • Map Cin7 Core supplier and GL account codes to Acumatica vendors and accounts so every line posts correctly.
  • Bridge Acumatica OAuth 2.0 and the Cin7 Core api-auth-accountid and api-auth-applicationkey header auth.
  • Poll on a schedule with retries, Retry-After backoff, and a full audit trail on every record.

Questions

Which direction does data move between Acumatica and Cin7?
Supplier records are aligned in both directions so each system holds the same vendor list. Purchase documents flow from Cin7 Core into Acumatica, where a Cin7 Core purchase becomes either an Acumatica purchase order or an AP bill depending on its Approach field. GL account codes are read from Cin7 Core, which exposes the chart of accounts read-only, and mapped onto Acumatica accounts.
How does the integration handle the Cin7 Core Purchase lifecycle?
A Cin7 Core Purchase is not just a PO. The same endpoint tracks the order, the goods receipt, and the supplier invoice through its Approach and Status fields. ml-connector reads those fields to decide what each record maps to in Acumatica, and on write it creates the record as Draft then makes the separate Authorise call that Cin7 Core requires.
How are the two different authentication schemes connected?
Acumatica uses OAuth 2.0 through its built-in identity server with a tenant-specific URL and a version-matched endpoint, while Cin7 Core uses two static API key headers, api-auth-accountid and api-auth-applicationkey. ml-connector stores both credential sets encrypted, presents the right one to each system on every call, and refreshes the Acumatica token when a request returns 401. Cin7 Core keys do not expire, so they are used as provisioned.

Related integrations

Connect Acumatica and Cin7

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

Get started