ml-connector
QADWise

QAD and Wise integration

QAD Adaptive ERP runs manufacturing, procurement, and accounts payable. Wise executes the cross-border vendor payments. Connecting the two turns an approved supplier invoice in QAD into a funded international transfer in Wise without re-keying bank details or payment amounts. ml-connector reads the invoices QAD has cleared for payment, runs the Wise transfer sequence, and posts the result back onto the QAD payment record. The very different APIs on each side are handled for you, with payments moving on a schedule you control.

How QAD works

QAD Adaptive ERP exposes suppliers, purchase orders, supplier invoices, AP payments, GL accounts, cost centers, items, and goods receipts through REST business document APIs, documented in Swagger inside each customer instance. The cloud product authenticates with a JWT session or OAuth2 bearer token against a tenant-specific URL, so there is no shared hostname or public sandbox. Older on-premise sites run QAD Enterprise Edition with the QXtend SOAP framework instead. AP invoices are paid only after a three-way match against PO receipts, and QAD cloud finance has no native webhook system, so records are read by polling.

How Wise works

Wise exposes profiles, multi-currency balances, recipients, quotes, transfers, balance statements, and a unified activity feed through the Wise Platform API, a REST service that returns JSON over HTTPS. A connector authenticates with OAuth2 client credentials, with access tokens valid for 12 hours and long-lived refresh tokens, and most calls require the numeric profile id. Wise has no GL accounts, invoices, or purchase orders; the relevant objects are recipients, which map to vendors, and transfers, which are the outbound payments. Wise pushes signed webhooks for transfer state changes and balance updates, so payment progress does not need to be polled.

What moves between them

The main flow runs from QAD into Wise. ml-connector reads supplier invoices that QAD has approved for payment, along with the supplier bank details, and creates the matching outbound transfers in Wise. Each payment runs the required Wise sequence of quote, recipient, transfer, and balance funding. Once a transfer settles, its Wise id, status, and final source and target amounts flow back into the QAD AP payment record so the ledger reflects what actually left the balance. Reference data such as supplier identity and currency is aligned so each payment targets a valid recipient. QAD invoices are never created from Wise; the connection pays existing QAD obligations rather than originating new ones.

How ml-connector handles it

ml-connector stores both credential sets encrypted, refreshes the Wise OAuth2 access token before its 12-hour expiry, and accepts the full QAD tenant URL per customer since QAD publishes no shared base address. Because QAD cloud is pull-only, it polls QAD for invoices approved for payment on a schedule you set, then for each one it fetches a fresh Wise quote, creates or reuses a recipient, creates the transfer, and funds it from the balance with a BALANCE payment. Every transfer carries a generated customerTransactionId, the Wise idempotency key, so a retry after a timeout settles the same payment once rather than paying twice. Wise recipients are immutable, so a changed supplier bank account is handled by creating a new recipient rather than editing one. Wise rate limits return HTTP 429 with a Retry-After header, so the connector backs off and retries, and it ingests Wise transfer state-change and balance-update webhooks, verifying the RSA-SHA256 signature on the X-Signature-SHA256 header before posting status back to QAD. A quote that expires before funding is replaced with a new one. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized contract manufacturer running QAD Adaptive ERP buys components from suppliers in several countries and pays roughly a few hundred invoices a month. Before the integration, accounts payable approved each invoice in QAD, then a clerk re-typed the vendor bank details and amount into Wise by hand, which was slow and occasionally produced a wrong-currency or duplicate payment that took days to unwind. With QAD and Wise connected, each invoice QAD clears for payment becomes a funded Wise transfer automatically, the settled amount and status post back to the QAD payment record, and the duplicate-payment risk is removed because every transfer is keyed for idempotency.

What you can do

  • Turn supplier invoices that QAD has approved for payment into funded Wise transfers, with no manual re-keying.
  • Run the full Wise quote, recipient, transfer, and balance-funding sequence for each international payment.
  • Write the Wise transfer id, status, and settled amounts back onto the QAD AP payment record for reconciliation.
  • Authenticate Wise with OAuth2 and refresh the 12-hour token, while accepting QAD's tenant-specific URL per customer.
  • Prevent duplicate payments with a generated customerTransactionId, and update status from signed Wise webhooks.

Questions

Which direction does data move between QAD and Wise?
The main flow is QAD into Wise. Approved supplier invoices and supplier bank details move from QAD into Wise as outbound transfers, and the resulting Wise transfer id, status, and settled amounts flow back into the QAD AP payment record. The connection pays existing QAD obligations and never creates QAD invoices from Wise.
Does Wise replace QAD's accounts payable or chart of accounts?
No. Wise is a payments platform with no GL accounts, invoices, or purchase orders, so QAD remains the system of record for AP and the ledger. Wise only executes the cross-border payment for invoices QAD has already approved, and ml-connector posts the payment result back to QAD.
How does the integration avoid duplicate or failed payments?
Every Wise transfer is created with a generated customerTransactionId, the Wise idempotency key, so a retry after a network timeout settles the same payment once rather than twice. The connector also re-quotes when a Wise quote expires before funding, backs off on HTTP 429 rate limits, and updates payment status from signed Wise webhooks, with a full audit trail and replay on any failed call.

Related integrations

Connect QAD and Wise

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

Get started