Sage 300 and Basware integration
Sage 300 runs the core financial operations: accounts payable, accounts receivable, general ledger, and inventory. Basware runs invoice automation: receipt, three-way matching, approval routing, and payment orchestration. Connecting the two keeps your vendor master in sync, eliminates duplicate PO entry, and moves approved invoices from Basware back into Sage 300's AP module for posting without manual re-keying. ml-connector handles the two different authentication schemes and moves data on a schedule tied to your approval cycles.
What moves between them
Master data flows from Sage 300 to Basware first: vendors, purchase order headers and lines, and GL accounts are pulled from Sage 300 on a scheduled cadence and posted to Basware's vendor and PO endpoints. Once approved invoices land in Basware, ml-connector polls Basware's exported invoices and creates AP invoice batches in Sage 300 for posting to the general ledger. Reference data such as GL segments and account codes is mapped before any transaction flows so invoice lines post to valid GL accounts in Sage 300.
How ml-connector handles it
ml-connector authenticates to Sage 300 with the uppercase username and password provided and uses OData filters to pull only new or changed vendors and POs since the last sync. It posts that master data to Basware using OAuth2 bearer tokens (refreshed before expiry) and includes the required X-BW-REQUEST-ID UUID on Network API calls. On the invoice side, ml-connector polls Basware for approved invoices on a schedule aligned with your approval workflow, maps each invoice line to the GL account and cost center specified in the original Sage 300 PO, and posts the result as an AP invoice batch into Sage 300. The IIS environment on Sage 300 requires Anonymous Authentication enabled and Windows Authentication disabled for the API endpoints to be reachable; ml-connector assumes this configuration is in place. Retries on 429 rate limit responses back off exponentially.
A real-world example
A mid-market distributor runs Sage 300 for finance and inventory across multiple regional warehouses and uses Basware for centralized AP automation and three-way matching. Before the integration, the AP team manually entered purchase orders from Sage 300 into Basware, approved invoices in Basware, then re-keyed them into Sage 300's AP module for posting, creating delays and re-entry errors. With Sage 300 and Basware connected, new POs flow from Sage 300 into Basware automatically, approved invoices move back into Sage 300's AP batches without manual intervention, and the GL is posted daily instead of weekly. The AP team now focuses on exception handling and dispute resolution instead of data re-entry.
What you can do
- Pull vendors, purchase orders, and GL accounts from Sage 300 and post them to Basware to establish the foundation for three-way matching and approval routing.
- Flow approved invoices from Basware back into Sage 300's accounts payable module as ready-to-post batches, mapped to the correct GL accounts and cost centers.
- Authenticate to Sage 300 with HTTP Basic Auth and to Basware with OAuth2 Client Credentials, managing token expiry and request IDs automatically.
- Poll on a cadence aligned with your approval workflow since Sage 300 has no webhooks, with exponential backoff on rate limits.
- Maintain a complete audit trail on every vendor, PO, and invoice record so discrepancies can be traced and replayed if a downstream action fails.
Questions
- Which direction does data move between Sage 300 and Basware?
- Master data (vendors, purchase orders, GL accounts) flows from Sage 300 into Basware so Basware can perform three-way matching and approval routing against real procurement records. Approved invoices then flow from Basware back into Sage 300's AP module for posting to the general ledger. The flow is primarily push on the master side and pull on the transaction side to align with each system's capabilities.
- Why does ml-connector need to handle Sage 300's uppercase username requirement?
- Sage 300's HTTP Basic Authentication requires both the username and password to be uppercase in the request header. ml-connector normalizes the credentials you provide and ensures they are sent in the correct case to avoid 401 authentication failures. This is a quirk of the Sage 300 API contract that is not intuitive and can cause silent authentication failures if overlooked.
- Does ml-connector support Basware's webhook push for invoices?
- Basware supports webhooks for approved invoices and exported POs, but only if your Basware instance is configured to send them. ml-connector can receive those webhooks and respond immediately, or it can fall back to polling on a schedule you set. The Network API endpoints for vendors and POs are pull-only, so polling is always required for master data regardless of webhook availability.
Related integrations
More Sage 300 integrations
Other systems that connect to Basware
Connect Sage 300 and Basware
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started