ml-connector
OdooBasware

Odoo and Basware integration

Odoo runs your general ledger, accounts, and purchase orders. Basware runs your AP automation and invoice lifecycle. Connecting them keeps vendor master data and purchase order commitments aligned as you move invoices through approval and payment. New vendors you create in Odoo flow into Basware's vendor master, and approved invoices from Basware post back into Odoo's accounting module without re-keying. ml-connector handles the very different APIs on each side and keeps both systems current on a schedule you control.

How Odoo works

Odoo exposes accounts, purchase orders, vendors, analytic dimensions, and general ledger entries through XML-RPC and JSON-2 REST APIs, available on Odoo Online (SaaS), Odoo.sh (PaaS), or self-hosted editions. Authentication uses an API key paired with username login. Access to external APIs requires Odoo's Custom pricing plan. Polling is recommended for production use with a high-water-mark write_date filter on search_read calls, since webhooks through Automated Actions are not production-grade.

How Basware works

Basware exposes accounting documents, purchase orders, vendors, contracts, and accounts through REST APIs secured with OAuth2 Client Credentials. The service deploys in regional instances (EU, US, AU, CA) and all endpoints sit under the /v1/ prefix. Basware supports webhook push notifications on its P2P API for document changes, while the Network API and Data Access API are pull-only. Every network API call requires a unique X-BW-REQUEST-ID header (UUID v4), and webhook payloads carry an HMAC-SHA256 signature.

What moves between them

The main flow is bidirectional. Vendor records created in Odoo sync to Basware's vendor master, mapped to the correct regional instance. Purchase orders and analytic dimensions flow the same direction so invoice allocations land on valid Odoo GL accounts. Basware accounting documents (approved and matched invoices) flow back into Odoo's account.move module and post to the correct vendor and GL account. Odoo purchase order confirmations may also sync into Basware to close matched invoice lines.

How ml-connector handles it

ml-connector stores both credential sets encrypted: the Odoo API key as a Bearer token for JSON-2 calls, and the Basware OAuth2 client credentials to obtain time-limited access tokens. It accepts the Odoo base URL per customer (Odoo Online, Odoo.sh, or self-hosted) and the Basware regional endpoint, validating that the instance region matches. Because Basware supports webhooks but Odoo does not, ml-connector listens for Basware document notifications and also polls Odoo's purchase orders and vendor records on a schedule tied to your approval workflow. Vendor and GL account mappings are applied before any invoice posts into Odoo so that every debit and credit lands on a valid account. Basware rate limiting and Odoo API request quotas are respected with exponential backoff and retry. Every record carries a full audit trail and can be replayed if a posting fails.

A real-world example

A mid-sized distribution company runs Odoo for purchasing and general ledger and uses Basware for AP automation and invoice matching across multiple regional warehouses. Before the integration, the AP team received Basware-approved invoices by email export, manually matched them to Odoo purchase orders, and entered the GL postings by hand. Vendor changes in Odoo had to be re-entered into Basware to ensure match accuracy. With Odoo and Basware connected, vendors created in Odoo flow to Basware automatically, each purchase order commitment appears in Basware's matching engine, and approved invoices post into Odoo's GL on the day of approval. The AP team no longer re-keys data between systems, and month-end close happens faster because the accruals are already in place.

What you can do

  • Sync vendor master records from Odoo to Basware, keeping both systems aligned as new vendors are added.
  • Map Odoo purchase orders and analytic dimensions to Basware so invoice matching and GL allocation work correctly.
  • Post Basware-approved and matched invoices into Odoo's accounting module on the GL accounts and cost centers that match.
  • Authenticate Odoo with API key (JSON-2 or XML-RPC) and Basware with OAuth2, handling token refresh and regional endpoint routing.
  • Poll both systems on a schedule tied to your invoice approval cycle, with retries and a complete audit trail on every posted record.

Questions

Which direction does data flow between Odoo and Basware?
Both directions. Vendors and purchase orders flow from Odoo into Basware so matching and GL allocation work correctly. Approved and matched invoices from Basware flow back into Odoo's accounting module as account.move records, posted to the correct GL account. Analytic dimensions in Odoo are also synced so invoice cost allocations land on valid dimensions.
Does the integration work with all Odoo editions (Online, Odoo.sh, self-hosted)?
Yes, but external API access requires Odoo's Custom pricing plan; it is not available on One App Free or Standard. Odoo.com must have a password set by the admin before API authentication works. ml-connector accepts the full Odoo base URL per customer and works with XML-RPC or JSON-2 API calls, whichever your instance uses.
How does the integration handle Basware's regional deployment and OAuth2 requirements?
ml-connector stores the Basware OAuth2 client credentials encrypted and obtains time-limited access tokens per request, handling token refresh automatically. You specify the Basware region (EU, US, AU, CA) at setup and ml-connector routes all calls to the matching regional endpoint. Every Basware network API call includes the required X-BW-REQUEST-ID UUID header.

Related integrations

Connect Odoo and Basware

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

Get started