ml-connector
Sage 300Wise

Sage 300 and Wise integration

Sage 300 holds your vendor master and AP invoices; Wise handles multi-currency payouts and international transfers. Connecting the two lets you execute vendor payments from Sage 300 in the recipient currencies on Wise without leaving your ERP or re-keying bank details. Vendor records in Sage 300 map to Wise recipients, and approved AP payment batches flow directly into Wise transfers, denominated in the payment currency and routed to the correct Wise balance.

How Sage 300 works

Sage 300 is a Windows IIS-based on-premise ERP for mid-market businesses covering accounts payable, accounts receivable, general ledger, and inventory. It exposes APVendors, APInvoiceBatches, APPaymentAndAdjustmentBatches, GLAccounts, and other entities through REST and OData APIs on a customer-hosted server with HTTP Basic Authentication. Sage 300 offers no webhooks or change-data-capture, so all sync is pull-based via OData filters and pagination on a scheduled cadence. API users must be created explicitly in Administrative Services with Web API security group privileges; usernames and passwords must be uppercase.

How Wise works

Wise is a global payments platform exposing profiles, balances, transfers, and recipients through REST API with OAuth2 or Personal API Token authentication. Wise supports both push webhooks (transfersstate-change, balancesupdate) and polling via offset and limit pagination. Transfers require a 4-step sequence: quote, recipient, transfer order, fund payment. Recipients are immutable and quotes expire, so state must be tracked across steps. Wise enforces rate limits of 100 req/sec and 1000 req/min, and returns 429 on overages.

What moves between them

AP payment batches flow from Sage 300 into Wise as outbound transfers. ml-connector polls Sage 300 APPaymentAndAdjustmentBatches on a weekly or monthly cadence tied to your close calendar, matches each batch line to a Sage 300 vendor and GL account, maps the vendor to a Wise recipient, retrieves the target balance in the payment currency, and executes the transfer through the Wise 4-step sequence. Vendor master changes in Sage 300 (new vendors, address updates, bank details) sync to Wise recipients on the same cadence, though Wise recipients must be recreated on material changes rather than updated in place.

How ml-connector handles it

ml-connector translates Sage 300 HTTP Basic Authentication to OAuth2 bearer tokens for Wise, refreshing the Wise token on 401 responses. On the Sage 300 side, it polls APPaymentAndAdjustmentBatches and APVendors using OData date filters ($filter=DocumentDate gt '2026-01-01') and pagination to retrieve all records since the last run. Each vendor is mapped to a Wise recipient by external ID; if the vendor lacks banking details or the recipient does not exist in Wise, ml-connector skips or creates the recipient on demand. For each payment batch line, ml-connector retrieves a Wise quote (to lock the exchange rate), creates or reuses the recipient, initiates the transfer order, and funds the payment in a single atomic sequence, rolling back if any step fails. Quotes expire after a few minutes, so ml-connector retrieves a fresh quote each run rather than caching. Wise rate limits of 1000 req/min are respected via exponential backoff and jitter on 429 responses. All transfer state is tracked in the audit log with receipt IDs so failed transfers can be replayed after correcting the upstream batch in Sage 300.

A real-world example

A mid-market manufacturing business runs Sage 300 on-premise for AP and GL, and uses Wise for international payouts to suppliers across Europe and Asia. Before integration, the AP manager exported payment batches from Sage 300 as CSV, logged into Wise, manually recreated each recipient and transfer, and uploaded proof of payment back into Sage 300 for close-out. With Sage 300 and Wise connected, each monthly AP payment batch processes automatically: vendors sync to Wise recipients on the first of the month, payment batches execute on approval, and the Wise transfer receipt posts into Sage 300 audit as proof. The AP team no longer re-keys payment data or chases manual recipient setup.

What you can do

  • Map Sage 300 vendors to Wise recipients, syncing new vendors and address changes on a scheduled cadence.
  • Execute AP payment batches from Sage 300 through Wise as multi-currency transfers routed to the correct balance and recipient.
  • Translate HTTP Basic Authentication from Sage 300 to OAuth2 for Wise at the API boundary.
  • Handle Wise quote expiry, recipient immutability, and the 4-step transfer sequence automatically.
  • Track transfer state and provide full audit trail with receipt IDs for failed transfer replay and close-out.

Questions

Can Wise transfers go to recipients outside the Wise platform?
Yes. Wise recipients map to external bank accounts, not just Wise balances. A Sage 300 vendor with bank details (account number, routing number, or IBAN) becomes a Wise recipient pointing to that external account, and transfers execute to the external account in the recipient currency without requiring a Wise wallet on the receiving end.
What happens if a Sage 300 vendor has no banking details or currency mismatch?
ml-connector skips the payment line and records the skip in the audit log with the reason (missing bank account, unsupported currency). The AP team can then correct the vendor master in Sage 300 and re-run the batch, or manually fund the payment in Wise and mark it as complete in the audit trail.
Does the integration handle Wise rate limits and quote expiry?
Yes. ml-connector backs off and retries on HTTP 429 (rate limit) responses with exponential backoff and jitter, respecting Wise's 1000 req/min limit per account. It retrieves a fresh Wise quote for each transfer run rather than caching, so quote expiry is not a failure mode.

Related integrations

Connect Sage 300 and Wise

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

Get started