ml-connector
OdooAvidXchange

Odoo and AvidXchange integration

Odoo runs your procurement and accounting. AvidXchange runs your payable automation and payment processing. Connecting the two keeps your vendor data in sync, moves invoices through approval workflows in AvidXchange without re-entry, and sends paid status and payment details back into Odoo's general ledger. ml-connector bridges the different authentication schemes and ensures payment records flow through to your accounting journal without manual re-keying.

How Odoo works

Odoo exposes vendors, invoices, purchase orders, GL accounts, chart of accounts, and employees through XML-RPC and JSON-2 APIs. Odoo Online, Odoo.sh, and self-hosted instances each have their own base URL. Authentication uses an API key paired with a username, sent to the auth endpoint to obtain a session ID or passed as a Bearer token in JSON-2 calls. Odoo does not publish webhooks for production use, so vendor and invoice records are read by polling with high-water-mark timestamps on the write_date field.

How AvidXchange works

AvidXchange exposes vendors, invoices, purchase orders, GL accounts, and accounting dimensions through its AvidConnect REST API, accessed via a WSO2 gateway at apistore.avidxchange.net. Authentication uses OAuth 2.0 client credentials (client_id, client_secret, company_id) generated inside the AvidXchange Partner Portal. AvidXchange does not publish webhook or push-notification capability, so payment status and completed payment data are pulled by ml-connector on a scheduled basis. Full endpoint documentation is available only to registered integration partners.

What moves between them

Vendors and invoices move from Odoo into AvidXchange on a schedule you define. Once AvidXchange workflow approves and processes an invoice for payment, ml-connector retrieves the completed payment status, amount, and GL posting codes and syncs them back to Odoo's account.move and vendor records. This keeps Odoo's general ledger up to date with all AvidXchange payments and eliminates manual reconciliation between the two systems.

How ml-connector handles it

ml-connector authenticates to Odoo using the API key and username, then polls for new and modified vendors and invoices using a high-water-mark timestamp on the write_date field to avoid duplicate sends. For each invoice sent, ml-connector stores a mapping record linking the Odoo invoice ID to the AvidXchange invoice ID. When AvidXchange processing completes, ml-connector polls for payment status using the Partner API credentials, retrieves the GL account and amount, and creates or updates the corresponding account.move and payment record in Odoo. Because Odoo access rights and record rules apply to the integration user account, ml-connector must be granted the appropriate Odoo permissions for vendors and invoices ahead of time. AvidXchange rate limits and occasional timeouts are handled with exponential backoff and retry, and every record carries an audit trail so payment syncs can be replayed if an Odoo posting fails.

A real-world example

A mid-sized manufacturing company runs Odoo for purchasing, procurement, and accounting across three locations, and uses AvidXchange to manage invoices, approval workflows, and payment execution with their 50+ key vendors. Before the integration, the accounting team exported vendor lists to AvidXchange by hand, received approved invoices from AvidXchange via email, re-entered the payment details into Odoo, and spent hours every week matching paid invoices between the two systems. With Odoo and AvidXchange connected, vendors are synced automatically, invoices move from Odoo to AvidXchange for workflow without re-entry, and payment confirmations post directly to the general ledger. The accounting team now processes invoices end-to-end without jumping between systems, and the accounts payable ledger is never out of sync with AvidXchange.

What you can do

  • Sync vendors from Odoo to AvidXchange, keeping vendor master data aligned between the two systems.
  • Send invoices from Odoo purchase orders to AvidXchange for workflow approval and payment processing without re-keying.
  • Pull completed payment status and GL posting codes from AvidXchange and post them into Odoo's general ledger automatically.
  • Authenticate to Odoo with API key and username, and to AvidXchange with OAuth 2.0 client credentials, handling each system's security requirements.
  • Poll on a schedule tied to your payment cycle, with retries on timeouts and a full audit trail on every invoice and payment record.

Questions

Which direction does data move between Odoo and AvidXchange?
Vendors and invoices move from Odoo to AvidXchange for processing and payment. Once AvidXchange marks an invoice paid, payment status, amount, and GL codes flow back into Odoo so the general ledger stays up to date. Vendor and invoice records are never written back to AvidXchange, since AvidXchange is the system of record for payment processing.
How does ml-connector handle the different authentication schemes in Odoo and AvidXchange?
ml-connector stores both credential sets encrypted. For Odoo, it sends the API key and username to the auth endpoint and caches the session ID or Bearer token. For AvidXchange, it exchanges the client credentials for an OAuth token at the beginning of each polling cycle, since AvidXchange tokens expire.
What happens if Odoo or AvidXchange is unavailable or slow to respond?
ml-connector handles timeouts and rate limits with exponential backoff and retry. If a poll fails or a payment sync does not complete on the first attempt, the cycle restarts on the next scheduled run. Every invoice and payment record carries an audit trail so failed syncs can be reviewed and replayed manually if needed.

Related integrations

Connect Odoo and AvidXchange

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

Get started