ml-connector
VismaBigCommerce

Visma and BigCommerce integration

Visma.net ERP manages your accounting, purchases, and projects. BigCommerce runs your online store. Connecting them keeps your revenue records synchronized. New orders and customer records from BigCommerce flow into Visma as customer invoices and accounting transactions, so your general ledger reflects real-time e-commerce revenue without manual entry. ml-connector bridges the very different APIs and handles the real complexities on both sides.

How Visma works

BigCommerce exposes orders, order transactions, refunds, customers, products, variants, and shipping addresses through v3 REST APIs secured with static API keys (X-Auth-Token header). It supports webhooks for order, product, customer, and shipment events, but webhook payloads contain only the entity ID and type; the full record must be fetched immediately via REST. Webhooks auto-deactivate after 90 days of inactivity or 48 hours of delivery failures, and retry up to 11 times over approximately 48 hours with increasing backoff. Rate limits depend on the merchant plan (Pro: 450 requests per 30 seconds, Standard/Plus: 150 per 30 seconds).

How BigCommerce works

Visma.net ERP exposes suppliers, purchase orders, invoices, customers, GL accounts, dimensions, employees, timecards, and expense claims through REST APIs secured with OAuth 2.0 client credentials via Visma Connect. All API calls require an ipp-company-id header to specify the target tenant. Visma supports webhooks registered via POST /v1/subscription with delta polling via lastModifiedDateTime, but webhook notifications are one-time delivery with no automatic retry. Refresh tokens are not issued to service applications, so new tokens must be obtained on expiry. All PUT operations require ETag/If-Match headers for optimistic locking to prevent race conditions.

What moves between them

Orders and customers flow from BigCommerce into Visma. Each BigCommerce order triggers a webhook; ml-connector fetches the full order details and creates a customer invoice in Visma, mapped to the correct customer account and GL accounts for revenue. Customer records from BigCommerce are synced to Visma customer accounts to keep the source of truth aligned. Order refunds and adjustments flow the same direction. No data flows back from Visma to BigCommerce; the connection is read-only on the Visma side and write-only on the BigCommerce ingest.

How ml-connector handles it

ml-connector stores both credential sets encrypted. For BigCommerce, it uses the static API key in the X-Auth-Token header; for Visma, it obtains an OAuth 2.0 token via client credentials against Visma Connect and includes the ipp-company-id header on all Visma calls. Because BigCommerce webhooks contain only stubs, ml-connector immediately calls the REST API to fetch the full order and customer records. It handles BigCommerce's rate limits with backoff and retry, and tracks webhook deliverability so re-registration occurs before webhooks auto-deactivate. On the Visma side, ml-connector must fetch the current ETag on a customer or invoice before updating it (optimistic locking via If-Match header), and it handles token expiry by obtaining a fresh token without requiring a refresh token. Customer dimension mappings are configured so order totals land on the correct GL accounts. Every record carries an audit trail and can be replayed if a Visma call fails.

A real-world example

A Nordic e-commerce merchant runs BigCommerce for a multi-channel online storefront and Visma.net ERP for accounting and financial reporting. Previously, finance staff manually exported orders from BigCommerce each day and created invoices in Visma by hand, reconciling payment terms and customer accounts each month-end. With the integration live, each BigCommerce order automatically generates a customer invoice in Visma within seconds of purchase, customers are synced to keep the chart of accounts current, and revenue is recognized in the general ledger in real-time. Month-end close begins with customer invoices already posted, and the manual export-and-entry step is eliminated.

What you can do

  • Sync BigCommerce orders into Visma as customer invoices, allocated to the correct GL revenue accounts.
  • Keep Visma customer master aligned with BigCommerce customer records and email addresses.
  • Fetch full BigCommerce order details immediately when webhooks are received, since BigCommerce webhook payloads contain only stubs.
  • Authenticate BigCommerce with static API keys and Visma with OAuth 2.0 client credentials, handling token expiry and refresh.
  • Manage Visma optimistic locking via ETag headers, rate limit backoff on both platforms, and maintain a complete audit trail.

Questions

Which direction does data move between BigCommerce and Visma?
Orders and customers flow from BigCommerce into Visma. Each BigCommerce order becomes a customer invoice in Visma, and customer records are synced to keep Visma's customer master current. No data flows back from Visma to BigCommerce; the integration is read-only on the Visma side.
Why must ml-connector fetch the full order details if BigCommerce sends a webhook?
BigCommerce webhooks contain only the entity ID and event type, not the full record. ml-connector must immediately call the BigCommerce REST API to fetch the complete order, customer, and transaction details so it can map all fields correctly into Visma. This avoids incomplete invoices.
How does the integration handle Visma's ETag locking and token expiry?
On updates, ml-connector fetches the current ETag before sending a PUT request (optimistic locking via If-Match header) to prevent race conditions. For token expiry, Visma does not issue refresh tokens to service applications, so ml-connector obtains a fresh OAuth token from Visma Connect whenever the current token is rejected with 401.

Related integrations

Connect Visma and BigCommerce

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

Get started