ml-connector
OdooTrueCommerce

Odoo and TrueCommerce integration

Odoo runs your accounting, purchasing, and inventory. TrueCommerce connects you to your trading partners via EDI, SFTP, and APIs. Moving purchase orders and supplier invoices from Odoo to your trading partners through TrueCommerce means no manual re-entry of PO data, faster acknowledgments from suppliers, and a real-time view of inbound shipments. ml-connector handles the API authentication on both sides, transforms Odoo records into X12 EDI documents, and pulls confirmation and shipment data back from TrueCommerce into Odoo.

How Odoo works

Odoo exposes purchase orders, invoices, inventory movements, and supplier accounts through XML-RPC and JSON-2 REST APIs. Authentication uses an API key paired with a username, obtained via a login call to the /xmlrpc/2/common endpoint, then included in every subsequent call. Odoo's write_date field on each record allows polling with a high-water-mark timestamp. Odoo requires a Custom pricing plan for external API access. Webhooks are available only in Enterprise Edition with Studio or developer mode and lack HMAC signature validation, so polling is the production-grade approach.

How TrueCommerce works

TrueCommerce accepts EDI documents (X12 850 purchase orders, 810 invoices, 997 functional acknowledgments) and returns supplier responses (855 purchase order acknowledgments, 856 advance ship notices) through scheduled SFTP polling from integrationftp.truecommerce.com on port 22, or via the managed Exchange API for near-real-time sync. Authentication uses SFTP credentials provisioned by TrueCommerce during setup, or an API key if using the Exchange API. TrueCommerce handles deduplication through EDI ISA control numbers and requires per-customer file paths and naming conventions during onboarding. There is no public developer API or self-serve token generation.

What moves between them

Odoo purchase orders flow outbound to TrueCommerce, transformed into X12 850 EDI format with line items, quantities, and delivery dates. Odoo supplier invoices are similarly transformed into X12 810 invoices. Return documents from trading partners come back through TrueCommerce as SFTP files or Exchange API objects: 855 purchase order acknowledgments confirm receipt and any quantity/date changes, and 856 advance ship notices provide tracking and expected delivery. ml-connector polls Odoo on a schedule, transforms each new purchase order and invoice into X12 format, writes the file to the TrueCommerce SFTP server, monitors the SFTP inbox for responses, parses incoming 855 and 856 documents, and updates Odoo purchase order and delivery statuses with the supplier's confirmed data.

How ml-connector handles it

ml-connector maintains encrypted storage for both the Odoo API key and TrueCommerce SFTP credentials. On the Odoo side, it polls purchase.order and account.move (invoice) records using the write_date filter, so only new or changed records are processed. For each record, it builds an X12 850 or 810 document with Odoo's supplier ID, line item descriptions, quantities, unit prices, and delivery address from the res.partner record. The generated X12 file is written to the customer-specific path on the TrueCommerce SFTP server with the agreed-upon naming convention. ml-connector then polls the TrueCommerce response folder on a schedule (typically hourly), retrieves any 855 or 856 files, parses the EDI segments, extracts supplier-confirmed quantities, dates, and tracking numbers, and writes them back to Odoo as comments on the purchase order or as separate ShipmentTracking records. TrueCommerce's EDI control numbers handle deduplication automatically, so ml-connector keys transactions by ISA ISN and GS group control numbers to prevent duplicate imports. If the TrueCommerce SFTP server returns a file-in-use error on retrieval, ml-connector backs off and retries on the next cycle. Every record carries an audit trail with timestamps and source document IDs.

A real-world example

A mid-sized consumer goods distributor runs Odoo for purchasing and warehouse management and maintains a network of manufacturing partners and drop-ship suppliers that all communicate via EDI through TrueCommerce. Before the integration, the procurement team placed orders in Odoo, then exported the data as CSV, manually formatted it into X12 EDI documents, uploaded them to the TrueCommerce SFTP server, and regularly checked the inbound folder for acknowledgments, manually copying confirmed quantities and shipment dates back into Odoo. The process was error-prone and delayed visibility into supplier confirmation status. With Odoo and TrueCommerce connected, each new purchase order in Odoo automatically flows to suppliers via EDI within minutes, acknowledgments come back and update Odoo without re-entry, and the procurement team sees real-time shipment visibility in their normal workflows.

What you can do

  • Transform Odoo purchase orders into X12 850 EDI documents and upload them to TrueCommerce SFTP on a schedule.
  • Transform Odoo supplier invoices into X12 810 EDI documents and route them through TrueCommerce to your trading partners.
  • Receive TrueCommerce X12 855 purchase order acknowledgments and update Odoo purchase order statuses with supplier-confirmed quantities and dates.
  • Receive TrueCommerce X12 856 advance ship notices and create shipment tracking records in Odoo with carrier and delivery windows.
  • Maintain full audit trails on every document transformation, SFTP transfer, and Odoo update with timestamps and source identifiers.

Questions

What purchase order and invoice fields from Odoo are included in the X12 EDI documents sent to TrueCommerce?
ml-connector includes the supplier ID, purchase order number, issue date, delivery date, line items with product code or description, quantity, unit price, and delivery address from the Odoo purchase.order and account.move records. Any custom fields required by your trading partners can be mapped during setup. If a field is missing or invalid, ml-connector logs the error and does not send a partial document, so data quality issues are surfaced immediately.
How does ml-connector prevent duplicate EDI documents from being sent to TrueCommerce or imported from inbound responses?
On the outbound side, ml-connector uses Odoo's write_date and update_at timestamps to identify only new and changed records since the last poll, so each poll captures only what is new. On the inbound side, TrueCommerce embeds ISA interchange control numbers and GS group control numbers in every EDI document, and ml-connector keys its deduplication by these control numbers, so receiving the same 855 or 856 file twice does not create duplicate records in Odoo.
What happens if the TrueCommerce SFTP server is unavailable or the credentials expire?
If SFTP connection fails, ml-connector logs the error with the specific reason (connection timeout, authentication failed, file-in-use), retries with exponential backoff on the next scheduled poll, and surfaces the issue via an alert if retries are exhausted. TrueCommerce SFTP credentials are provisioned during account setup and do not auto-expire, but if they are rotated, the new credentials must be updated in ml-connector's encrypted credential store before the next poll.

Related integrations

Connect Odoo and TrueCommerce

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

Get started