ml-connector
VismaPlaid

Visma and Plaid integration

Visma handles accounting and payables. Plaid connects your bank accounts and payment networks. Together they automate cash flow: customer invoices created in Visma flow into a connected bank, and payment instructions trigger ACH transfers to suppliers, all with complete visibility and audit. ml-connector manages the very different authentication schemes on each side and keeps your financial records synchronized across both platforms.

How Visma works

Visma.net ERP exposes customers, invoices, payments, accounts, dimensions, journal transactions, and supplier data through OAuth 2.0 REST APIs. All calls require a client_credentials token issued by Visma Connect, with the tenant_id and ipp-company-id header on every request. Visma supports both webhooks (one-time delivery, no automatic retry) and polling via lastModifiedDateTime on list endpoints. Webhook enablement is required at the company level. Older test clients are rate-limited to 500 calls per hour, and ETag-based optimistic locking is required for PUT operations. Refresh tokens are not issued to service applications, so new tokens must be obtained on expiry.

How Plaid works

Plaid is a financial data network that connects applications to bank accounts and investment accounts at thousands of financial institutions. It provides REST APIs to read account balances, transactions, and investment holdings, and to initiate ACH and wire transfers. All Plaid calls use custom headers for authentication (PLAID-CLIENT-ID and PLAID-SECRET), and per-user access is granted via a three-step Plaid Link flow. Plaid delivers webhooks for transaction updates, item errors, and transfer events with exponential backoff retry for up to 24 hours. Webhook signatures are verified via JWT with ES256 algorithm and a JWK public key. Transactions are limited to 24 months of history, and transfers require idempotency keys with a 48-hour expiry.

What moves between them

Customer invoices created in Visma flow into Plaid as transaction records and payment setup. When a Visma payment instruction is recorded, ml-connector initiates an ACH transfer through Plaid to the mapped bank account. Customer records and account dimensions are synced from Visma to Plaid to ensure transfers land on the correct accounts. Journal transactions are read from Visma to reconcile against Plaid webhook notifications of completed transfers. The main cadence is on-demand when invoices are created and confirmed in Visma, with polling for changes to existing records every 4 hours.

How ml-connector handles it

ml-connector stores both Visma tenant credentials and Plaid client secrets encrypted, and refreshes the Visma OAuth token before expiry since refresh tokens are not issued. It accepts the customer's Visma tenant_id and ipp-company-id, and maps Visma customers to Plaid account items obtained via the Link flow. When a payment instruction is issued in Visma, ml-connector initiates a Plaid transfer with the mapped account and amount. Plaid webhooks notify ml-connector of transfer completion, which is then posted as a payment record in Visma. Plaid's signature verification is performed on every webhook using JWT validation with ES256 and JWK public key lookup, and the iat claim is checked to reject messages older than 5 minutes. ACH transfer descriptions are truncated to 10 characters per Plaid limits, and every transfer carries an idempotency key to handle retries without duplication. Plaid rate-limited responses are retried with exponential backoff for up to 24 hours. Every record from both systems carries a full audit trail and can be replayed if a call fails.

A real-world example

A mid-sized Nordic software company uses Visma.net ERP for accounting and manages customer invoices and supplier payments. The finance team previously exported payment lists from Visma and manually entered them into the bank's portal, a process that was slow and error-prone. With Visma and Plaid connected, each customer invoice in Visma automatically triggers an entry in the connected Plaid account, and payment instructions flow directly to ACH transfers without manual re-keying. The accounts payable workflow is cut from a full business day to minutes, and the cash position is always current in both systems.

What you can do

  • Sync customer invoices from Visma to Plaid-connected bank accounts with automatic account mapping.
  • Initiate ACH transfers from Visma payment instructions through Plaid to supplier bank accounts.
  • Map Visma customers and dimensions to Plaid accounts, ensuring payments land on the correct accounts.
  • Handle Visma tenant OAuth 2.0 and Plaid signature verification with JWT on every webhook.
  • Poll for changes on a schedule and replay failed transfers with full audit trail and idempotency keys.

Questions

Which direction does data move between Visma and Plaid?
The main flow is Visma into Plaid. Customer invoices and payment instructions move from Visma into Plaid-connected bank accounts as ACH transfers, while account mappings and transfer confirmations sync back to Visma. Visma is read for invoices and payments; Plaid is written to for transfer initiation.
How does ml-connector verify Plaid webhooks and handle ACH transfers?
Plaid webhooks are verified using JWT signature validation with ES256 algorithm and JWK public key lookup, and the iat claim is checked to reject messages older than 5 minutes. When a payment is due in Visma, ml-connector initiates an ACH transfer through Plaid with the mapped account, idempotency key, and truncated description, then listens for Plaid's transfer webhook to confirm completion.
How does the integration handle Visma's tenant isolation and Plaid's rate limits?
ml-connector accepts the customer's Visma tenant_id and ipp-company-id on configuration, refreshing the OAuth token before expiry since Visma does not issue refresh tokens to service applications. Plaid rate-limited responses (HTTP 429) are retried with exponential backoff for up to 24 hours, and all customer data is isolated by tenant and access token.

Related integrations

Connect Visma and Plaid

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

Get started