ml-connector
QuickBooks OnlineWise

QuickBooks Online and Wise integration

QuickBooks Online tracks every invoice, bill, and expense for your business. Wise moves money across borders and currencies when you need to pay international vendors or staff. Connecting the two keeps your payment records aligned, eliminates manual entry of transfer details back into your general ledger, and gives your team full visibility into which bills have been paid and where the money went. When a vendor invoice is due and you execute the payment through Wise, ml-connector records the transaction in QuickBooks Online with no re-keying.

How QuickBooks Online works

QuickBooks Online exposes vendors, customers, bills, bill payments, purchase orders, accounts, departments, and journal entries through REST APIs with a SQL-like query language. Authentication uses OAuth 2.0 authorization code flow with 1-hour access tokens and rotating refresh tokens. All entities carry a SyncToken for concurrency control, and updates require the full object representation. QuickBooks Online fires webhooks on create, update, delete, merge, and void events for accounts, bills, payments, vendors, and other entities, though webhook payloads contain only the entity ID and must be followed by a full GET to fetch details. A CDC endpoint also supports polling with 30-day history.

How Wise works

Wise exposes profiles, balances, transfers, recipients, and payment activity through REST endpoints with simple JSON payloads. Authentication uses OAuth 2.0 with 12-hour token expiry and long-lived refresh tokens, or a personal API token. Wise enforces rate limits of 100 requests per second and 1000 per minute for partner OAuth. Webhooks push transfer state changes, payout failures, balance updates, and payment events with RSA-SHA256 signature verification. Transfer creation follows a 4-step sequence: quote, recipient, transfer order, and payment. Recipients are immutable and quotes expire, so fresh lookups are required before executing a transfer.

What moves between them

Vendor records in QuickBooks Online sync to Wise recipients so payments reach the correct destination. When a bill payment is created in QuickBooks Online and executed through Wise, ml-connector records the transfer state and links it back to the bill for reconciliation. Balance updates and transfer state changes from Wise fire webhooks that ml-connector ingests to keep QuickBooks Online journal entries and payment status current. The flow is bidirectional: QuickBooks Online drives vendor and bill creation, while Wise drives payment execution and transfer status updates.

How ml-connector handles it

ml-connector stores both OAuth credential sets encrypted and refreshes QuickBooks Online access tokens before expiry since they have only a 1-hour window. On the Wise side, it uses either OAuth or personal token authentication and handles the 4-step transfer sequence by creating quotes, adding recipients, building transfer orders, and initiating payments. Vendors in QuickBooks Online map to Wise recipients by name and currency, and bill payments trigger transfer quotes in Wise to show the cost in the destination currency before execution. ml-connector verifies Wise webhook signatures using RSA-SHA256 and the X-Signature-SHA256 header to ensure authenticity, then updates bill payment status in QuickBooks Online when transfers complete or fail. QuickBooks Online's SyncToken requirement means every bill payment update must include the current token, so ml-connector fetches the latest bill payment before patching it. Rate limiting in Wise requires exponential backoff on 429 responses. Transfer quotes expire, so ml-connector recreates them if an execution is delayed, and idempotency keys prevent duplicate charges if a payment retry succeeds after a network error.

A real-world example

A small-to-mid-market services company based in London invoices US and Australian clients in their local currencies but pays offshore freelancers and vendors in GBP. They use QuickBooks Online for accounting and Wise for international transfers and multi-currency accounts. Before the integration, the bookkeeper created a vendor in QuickBooks Online, then manually logged into Wise, initiated a transfer, and came back to QuickBooks Online to record the payment and update the bill status. The process was slow and prone to delays in bill reconciliation, with transfers sometimes not being recorded at all. With QuickBooks Online and Wise connected, creating a vendor and marking a bill as paid in QuickBooks Online triggers a transfer quote in Wise with the final destination amount visible in GBP. Once the transfer is initiated, the bill payment is automatically recorded and linked to the transfer, and balance updates flow back to QuickBooks Online so the accountant always sees the true payment status.

What you can do

  • Sync vendor records between QuickBooks Online and Wise recipients so payments reach the correct destination with the right currency.
  • Create transfer quotes in Wise based on bill payment amounts in QuickBooks Online to show the exact cost in the destination currency before execution.
  • Record Wise transfer state changes and payout failures back into QuickBooks Online bill payments for full reconciliation.
  • Verify Wise webhook signatures using RSA-SHA256 and handle token refresh for both QuickBooks Online OAuth and Wise credentials.
  • Handle QuickBooks Online SyncToken concurrency control and Wise quote expiry by fetching fresh data before updates.

Questions

How does ml-connector handle the 4-step Wise transfer sequence when a bill is paid in QuickBooks Online?
When a bill payment is marked in QuickBooks Online, ml-connector creates a Wise quote to show the destination currency cost, adds or verifies the vendor as a Wise recipient, builds a transfer order with the correct amount, and initiates the payment. All steps use idempotency keys to prevent duplicate transfers if a retry occurs.
What happens when a Wise transfer state changes or fails?
Wise webhooks fire transfer state changes and payout failures with RSA-SHA256 signatures that ml-connector verifies. When a transfer completes, ml-connector updates the bill payment status in QuickBooks Online. If a transfer fails, the bill payment is marked as failed so the bookkeeper can retry or choose a different payment method.
Why does ml-connector need to fetch bill payments before updating them in QuickBooks Online?
QuickBooks Online requires the current SyncToken on every update for concurrency control and conflict prevention. ml-connector fetches the latest bill payment with its current token before patching it, ensuring the update does not conflict with other changes and the bill stays in sync.

Related integrations

Connect QuickBooks Online and Wise

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

Get started