Sage X3 and Wise integration
Sage X3 runs your finance, procurement, and inventory. Wise moves money across borders. Connecting them keeps your international payables on schedule and your cash accounts reconciled. Approved supplier invoices from Sage X3 become transfer instructions in Wise, with the right recipient bank details and currency conversion pre-quoted. Wise balances flow back into Sage X3 so your cash accounts always reflect the current state of your global accounts.
What moves between them
Approved supplier invoices in Sage X3 are polled for payment-ready records and mapped to Wise recipients by bank details. Each invoice triggers a Wise quote for the currency pair and amount. Once quoted, ml-connector creates or reuses the recipient, creates the transfer order, and funds the payment through Wise. Balance updates and transfer state changes flow back from Wise webhooks into Sage X3 cash accounts and payment status fields. The flow is primarily Sage X3 to Wise for payout initiation, with Wise balance and transfer status updates returned to X3 for reconciliation.
How ml-connector handles it
ml-connector stores both OAuth2 credentials encrypted and handles the token refresh cycle on each side: 5-minute refresh for Sage X3 and 12-hour refresh for Wise. On the Sage X3 side, it accepts the customer-specific server URL and port, polls supplier invoice and GL account records using delta detection on updatedDate, and handles both GraphQL and REST api1 transports based on the customer's X3 version. For Wise, it validates recipient bank details, checks idempotency using customerTransactionId on the transfer object, respects the rate limits and quote expiry windows, and registers a webhook endpoint to receive transfer state changes and balance updates. The four-step transfer sequence is atomic: if any step fails (quote expires, recipient creation fails, or funding fails), the entire transfer is rolled back and re-queued. Sage X3 GL accounts and cost centers are mapped to Wise balance profiles by currency and entity.
A real-world example
A mid-market manufacturer with suppliers across Europe and Southeast Asia uses Sage X3 for finance and procurement, and pays most vendors in local currency. Each week, the accounting team exports invoices due from Sage X3, manually requests Wise quotes for each currency pair, creates recipients in Wise, executes transfers, and updates Sage X3 with payment status. This takes 4-6 hours and is error-prone because quote rates change and recipient details may be stale. With Sage X3 and Wise connected, invoices marked ready for payment in X3 automatically flow into Wise, quotes are fetched at execution time with current rates, recipients are created once and reused, and payment status updates flow back into X3 in real time. The accounting team now completes weekly payables in 30 minutes and has a complete audit trail of every quote, rate, and transfer in both systems.
What you can do
- Automate the four-step Wise transfer sequence (quote, recipient, transfer, fund) for supplier invoices marked ready in Sage X3.
- Poll Sage X3 invoices and GL accounts using delta detection, and map them to Wise profiles and recipients by currency and entity.
- Bridge OAuth2 and HTTP Basic authentication between Sage X3 (5-minute token expiry) and Wise (12-hour token expiry) with automatic refresh.
- Receive Wise webhook notifications for transfer state changes and balance updates, and write them back to Sage X3 cash accounts.
- Track idempotency keys and quote expiry, handle rate limits, and maintain a full audit trail of every quote, recipient, and transfer.
Questions
- Which direction does data move between Sage X3 and Wise?
- The primary flow is Sage X3 to Wise: approved supplier invoices are read from Sage X3 and trigger transfer initiation in Wise. Wise balance updates and transfer state changes flow back to Sage X3 via webhooks for cash account reconciliation and payment status updates. GL accounts and cost centers are synced both directions to ensure payables are allocated to the correct dimensions.
- How does ml-connector handle Sage X3's short token expiry and Wise's four-step transfer sequence?
- ml-connector refreshes Sage X3 OAuth2 tokens every 5 minutes (before expiry) and maintains the refresh token for long-term sessions. For Wise, it executes the four-step sequence (quote, recipient, transfer, fund) as an atomic operation: if any step fails, the entire transfer rolls back and is re-queued. Quote expiry is tracked, so a fresh quote is fetched if the original expires before funding begins.
- What happens if a Wise transfer fails or a recipient creation is rejected?
- ml-connector treats the entire transfer as failed and returns the record to the queue with the error details logged in the audit trail. The next retry fetches a fresh quote (the prior quote may have expired) and attempts the sequence again. Recipient updates are not allowed by Wise (recipients are immutable), so invalid recipient details must be corrected in Sage X3 and a new recipient created.
Related integrations
More Sage X3 integrations
Other systems that connect to Wise
Connect Sage X3 and Wise
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started