ml-connector
Zoho BooksWise

Zoho Books and Wise integration

Zoho Books tracks payables and vendor payments across multiple currencies. Wise moves money globally to vendor bank accounts. Connecting the two lets you automate the step from an approved vendor payment in Zoho Books to a live transfer in Wise, skipping manual payment order entry and reconciliation against payout confirmations. Multi-currency vendors are paid at Wise's rates without leaving Zoho Books.

How Zoho Books works

Zoho Books is a cloud-based accounting platform exposing contacts (vendors and customers), invoices, bills, purchase orders, vendor payments, and the chart of accounts through REST APIs. The platform requires OAuth2 authentication with a user-delegated refresh token and an organization ID on every call, and routes all traffic through region-specific base URLs determined at authentication time (US, EU, India, Australia, Japan, Canada, China, Saudi Arabia). Access tokens expire after 1 hour. Zoho Books supports outgoing webhooks configured via the API for transaction and payment events, and also exposes list endpoints with offset-based pagination for polling. Rate limits are 100 requests per minute with daily caps varying by plan.

How Wise works

Wise (formerly TransferWise) is a global payments platform that exposes profiles, balances, transfers, and recipients through REST APIs. Authentication is OAuth2 (supporting both authorization code and client credentials flows) or a long-lived Personal API Token. Payment execution on Wise follows a strict 4-step sequence: create a quote, set up the recipient, create a transfer order, and fund the payment. Transfer creation includes idempotency via customerTransactionId to prevent duplicate sends. Wise publishes webhooks for transfer state changes, payout failures, balance updates, and profile verification events. Recipients are immutable and quotes expire, so the connector must manage the sequence carefully. Wise has no invoices, purchase orders, or chart of accounts in its API; it is payments and reconciliation only.

What moves between them

Approved vendor payments in Zoho Books flow into Wise as transfers. The connector reads vendor payments from Zoho Books (via webhooks or polling), looks up or creates the matching recipient in Wise, initiates the transfer sequence (quote, recipient, transfer order, fund), and stores the transfer ID in Zoho Books for reconciliation. Payout state changes from Wise (sent, failed, completed) are received via webhooks and used to update the payment status in Zoho Books. Multi-currency payments are supported: Zoho Books provides the amount and currency, and Wise handles the conversion at Wise rates.

How ml-connector handles it

ml-connector stores Zoho Books OAuth2 credentials (client ID, client secret, refresh token) encrypted and routes all calls to the correct regional base URL determined by the region field returned at authentication. It refreshes the Zoho Books access token proactively at 55 minutes to avoid token expiry mid-request. For Wise, it stores either an OAuth2 token pair or a Personal API Token. When a vendor payment is approved in Zoho Books, ml-connector fetches the vendor contact record to extract the bank account details, then initiates the Wise transfer sequence: first it creates a quote using the payment amount and destination currency, then it creates or reuses the recipient record (using the account details from Zoho Books), then it creates the transfer order linked to the quote and recipient, and finally it funds the transfer. Each step is idempotent using Wise's customerTransactionId field, keyed to the Zoho Books payment ID. Payout state changes from Wise arrive via webhook and are matched back to the original payment for status reconciliation. If a quote expires or a recipient is invalid, the connector retries with a fresh quote and recipient record. Rate limits on both sides (Zoho Books 100/minute, Wise 100/second) are handled with exponential backoff and jitter.

A real-world example

A mid-market import-export company uses Zoho Books for invoicing and payables across 5 currencies and 12 major vendor countries. Before the integration, the finance team approved vendor payments in Zoho Books, exported the data weekly, and manually set up each transfer in Wise, then waited for state changes to post them back to Zoho Books for reconciliation. With Zoho Books and Wise connected, each approved payment automatically flows to Wise as a transfer within minutes, routed to the correct vendor bank account at the current Wise rate, and payout confirmations post back to Zoho Books without manual intervention. The finance team now spends time reviewing and approving payments, not re-entering them.

What you can do

  • Automatically create Wise transfers from approved vendor payments in Zoho Books, with correct recipient routing and multi-currency conversion.
  • Execute Wise's 4-step transfer sequence (quote, recipient, order, fund) idempotently, keyed to Zoho Books payment IDs.
  • Handle Zoho Books regional routing (US, EU, India, Australia, Japan, Canada, China, Saudi Arabia) and OAuth2 token refresh.
  • Receive and reconcile Wise payout state changes (sent, failed, completed) back to Zoho Books payment records via webhooks.
  • Manage Wise recipient creation, quote expiry, and retry logic for failed transfers with full audit trail on every step.

Questions

What happens if a Wise quote expires before the transfer is funded?
Wise quotes have a fixed validity window (typically a few minutes to hours depending on the currency pair). ml-connector monitors quote expiry and creates a fresh quote if the original expires before the transfer is fully funded. The new quote is linked to the same transfer order via the idempotent customerTransactionId, so Wise deduplicates and does not charge twice.
How does the connector handle multi-currency vendors in Zoho Books?
Zoho Books stores the payment currency and amount on each vendor payment record. ml-connector reads both fields, and Wise's quote endpoint handles the currency conversion at current rates. The vendor's bank account in Wise defines the destination currency, and Wise routes the converted amount to the correct account.
Can the integration handle vendor payments for bank accounts in countries Wise does not support?
No. Wise's recipient API requires the destination bank account to be in a supported country. ml-connector validates the recipient country against Wise's supported list before attempting to create the recipient or transfer. If a vendor is in an unsupported country, the payment fails with a clear error and is logged for manual review in Zoho Books.

Related integrations

Connect Zoho Books and Wise

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

Get started