ml-connector
Sage 300Basware

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.

How Sage 300 works

Sage 300 is an on-premise Windows IIS application that exposes vendors, purchase orders, GL accounts, and invoice batches through REST and OData APIs. Every call requires HTTP Basic Authentication with an uppercase username and password sent in the Authorization header. Sage 300 has no webhooks or change-data-capture, so all data must be pulled via polling with date and time filters. Master data endpoints like APVendors and ARCustomers support full CRUD; transaction batches like APInvoiceBatches support read and create. The API URL is customer-specific since Sage 300 is self-hosted, and the customer must expose their IIS server over HTTPS.

How Basware works

Basware is a cloud-based AP automation platform deployed in regional instances (EU, US, AU, CA) that exposes vendors, purchase orders, invoices, and accounts through REST APIs. The core APIs authenticate with OAuth2 Client Credentials, and Basware delivers the client_id and client_secret through a provisioning consultant. Basware supports webhooks on accounting documents and exported purchase orders, but the Network API for vendor and PO sync is pull-only and requires a unique request ID (UUID v4) on every call. The OAuth2 token has a default 1-hour validity; Basware controls the token lifetime and scopes at provisioning time.

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

Connect Sage 300 and Basware

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

Get started