ml-connector
OdooCin7

Odoo and Cin7 integration

Odoo runs your accounting and inventory planning. Cin7 Core manages purchase orders, suppliers, and stock across multiple warehouses. Connecting the two keeps your purchase ledger and inventory balances aligned without manual re-entry. Purchase invoices from your Cin7 suppliers flow into Odoo's accounts payable, mapped to the correct cost centers, and inventory stock counts refresh automatically so your GL inventory account matches what Cin7 tracks across all locations.

How Odoo works

Odoo exposes purchase orders, supplier invoices, partners, products, stock movements, and general ledger accounts through XML-RPC and JSON-2 HTTP POST APIs. Authentication uses an API key paired with a username, obtained via a single authenticate call in XML-RPC or passed as a Bearer token in JSON-2. Odoo Online, Odoo.sh, and self-hosted instances each have their own base URL. The API respects row-level access controls based on the integration user's permissions. Odoo has no built-in webhooks suitable for production, so polling with a write_date high-water-mark filter is the recommended approach.

How Cin7 works

Cin7 Core exposes suppliers, purchase orders, sales orders, products, inventory locations, and chart of accounts through a REST API over HTTPS. Authentication uses two custom headers: api-auth-accountid and api-auth-applicationkey. The API supports filtering and pagination for efficient polling. Cin7 offers webhooks via its Automation module for events such as supplier changes, purchase status updates, and stock movements, though the webhook payloads are not HMAC-signed. The chart of accounts is read-only in the API.

What moves between them

Purchase orders and supplier invoices from Cin7 flow into Odoo's purchase and accounting modules on a daily schedule. Supplier master data in Cin7 maps to Odoo partners, and Cin7 chart of accounts map to Odoo GL accounts. Inventory stock changes in Cin7 trigger polling to update product stock levels in Odoo, keeping the inventory balance sheet current. The direction is primarily Cin7 to Odoo, since Odoo is the financial source of record.

How ml-connector handles it

ml-connector stores both API keys encrypted and uses XML-RPC for older Odoo versions and JSON-2 for Odoo 19 and later, chosen based on the instance's detected version. It polls Cin7's purchase and supplier endpoints on a daily schedule aligned with your purchasing close, maps each supplier ID and GL account code to its Odoo equivalent using a mapping table, and posts purchase invoices into Odoo's account.move records. Stock updates from Cin7 are applied to Odoo product.product records using a high-water-mark timestamp to avoid re-processing. Because Odoo's API respects row-level permissions, the integration user must have purchase and accounting access. Cin7's read-only chart of accounts means invoice lines are matched to existing Odoo GL accounts during mapping; new accounts cannot be created through the integration.

A real-world example

A product-based manufacturer uses Odoo for general ledger and purchase order management, and Cin7 Core to track multi-warehouse inventory and supplier orders. Before the integration, the purchase team received a daily purchase summary from Cin7, manually keyed supplier invoices into Odoo's accounts payable, and quarterly inventory counts in Odoo were reconciled by hand against Cin7's stock levels. With Odoo and Cin7 connected, supplier invoices flow into Odoo's GL automatically each day, inventory stock syncs hourly so the balance sheet is always current, and the purchase-to-pay cycle runs without re-entry.

What you can do

  • Sync purchase orders and supplier invoices from Cin7 into Odoo's accounts payable, mapped to the correct GL accounts and cost centers.
  • Align supplier master data from Cin7 to Odoo partner records so invoice lines match approved suppliers.
  • Refresh inventory stock balances in Odoo from Cin7 on an hourly schedule, keeping the inventory balance sheet current across multiple warehouse locations.
  • Authenticate Odoo with an API key via XML-RPC or JSON-2 depending on version, and Cin7 with custom header-based API keys.
  • Poll both systems on a cadence you control, with full audit trail on every record and replay capability if downstream posting fails.

Questions

Which direction does data flow between Odoo and Cin7?
The primary flow is Cin7 to Odoo. Purchase orders, supplier invoices, and inventory stock movements from Cin7 flow into Odoo to keep accounts payable and inventory balances current. Supplier and product master data is synced bidirectionally so Odoo reference records match Cin7. Odoo is treated as the financial record of authority, so GL postings from Odoo do not flow back into Cin7.
How does the integration handle Odoo's row-level access control?
ml-connector respects Odoo's record-level permissions based on the integration user's assigned access rights. If the integration user does not have access to a purchase order, cost center, or GL account, those records are skipped during the sync. Ensure the integration user role includes access to the purchase, accounting, and inventory modules.
Does the integration work with both Odoo Online and self-hosted instances?
Yes. ml-connector detects the Odoo base URL and version, and uses the appropriate API (XML-RPC for Odoo 18 and earlier, JSON-2 for Odoo 19 and later). Self-hosted instances require a network route and the Custom pricing plan for API access. Odoo Online users must have a password set by an administrator before XML-RPC authentication works.

Related integrations

Connect Odoo and Cin7

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

Get started