Sage X3 and Cin7 integration
Sage X3 runs manufacturing and procurement. Cin7 Core runs inventory and accounting. Connecting the two keeps your suppliers, products, and purchase-to-GL lifecycle in agreement without manual re-keying. New suppliers and product master changes in Sage X3 flow to Cin7's reference data, purchase orders sync bidirectionally, and GL entries from supplier invoices in Sage X3 post into Cin7's Chart of Accounts on a schedule you control. ml-connector bridges the different authentication schemes and transport protocols on each side and manages the poll cycle that detects changes.
What moves between them
The main flow is bidirectional on reference data and unidirectional on transactional records. Suppliers and products sync in both directions so Cin7 masters match Sage X3. Purchase orders flow from Sage X3 into Cin7 as Purchase records with the INVOICE Approach when supplier invoices are confirmed in Sage X3. GL entries from supplier invoices sync from Sage X3 into Cin7's Chart of Accounts, allocated to the matching GL account and cost center. Change detection polls Sage X3 on a configurable schedule using the modifiedDateTime field to identify new or updated records since the last poll, eliminating re-processing of unchanged data.
How ml-connector handles it
ml-connector stores both credential sets encrypted. For Sage X3 it accepts the full customer-specific server URL and folder name, handles the 5-minute token expiry by refreshing the JWT bearer token on every 401 response, and uses the updatedDate field to track changes. For Cin7 it injects the two API key headers on each request and respects per-key rate limits with exponential backoff. Suppliers are matched by external ID or name to avoid duplicates. Products sync dimension data such as UOM and cost, and GL account mapping uses Sage X3's customer-specific dimension structure to route entries to the correct Cin7 GL account. Purchase orders carry the PO number as a reference field through the INVOICE stage so received goods can be traced back to the original order. Every record change is logged with timestamp and user context for audit and replay if a downstream call fails.
A real-world example
A mid-sized distributor runs Sage X3 on-premise for procurement and GL, and Cin7 for inventory and sales order fulfillment. Before the integration, the procurement team entered supplier invoices into Sage X3, then a separate inventory team logged into Cin7 to record the receipt and update GL. Month-end close required reconciling supplier balances between systems by hand. With Sage X3 and Cin7 connected, each supplier invoice automatically flows into Cin7 as a Purchase with Receipt Approach, inventory is updated in real time, and the GL entry posts to the matching cost center. Supplier reconciliation is now automatic, and the manual handoff is eliminated.
What you can do
- Sync supplier and product master data bidirectionally between Sage X3 and Cin7, keeping reference data aligned.
- Post purchase orders and supplier invoices from Sage X3 into Cin7 as Purchase records with the INVOICE Approach.
- Map Sage X3 GL entries to Cin7's Chart of Accounts, respecting customer-specific dimension structures.
- Authenticate Sage X3 with OAuth2 or HTTP Basic Auth and Cin7 with custom API key headers, handling token refresh and rate limits.
- Poll Sage X3 on a schedule using modifiedDateTime change detection, with automatic retries and a full audit trail on every transaction.
Questions
- What is the change detection mechanism, and do I need to worry about re-processing?
- ml-connector uses the modifiedDateTime field on each Sage X3 record to track changes since the last poll. Only new or updated records are processed, so the same record will not be re-fetched on every poll cycle. The audit trail captures every sync event, so if a downstream call fails, the record can be replayed without losing history.
- How are suppliers and products matched to avoid duplicates when syncing bidirectionally?
- Suppliers are matched on external ID first, then by exact name match to find the corresponding record in the other system. Products use the same strategy. If a new supplier is created in Sage X3 and a different new supplier is created in Cin7 with the same name, a conflict detection step surfaces it for manual resolution, preventing silent duplication.
- Can I use Sage X3 REST api1 or do I need GraphQL with Xtrem?
- ml-connector supports both REST api1 (HTTP Basic Auth, available on Sage X3 V6 and later) and GraphQL (Xtrem with OAuth2, V12 and later). REST api1 is simpler and does not require a Connected Application setup, while GraphQL is newer and recommended. The choice is per customer based on the Sage X3 version and customer admin preference.
Related integrations
More Sage X3 integrations
Other systems that connect to Cin7
Connect Sage X3 and Cin7
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started