ml-connector
VismaJAGGAER

Visma and JAGGAER integration

Visma.net ERP handles your financial records, AP ledger, and GL accounts across the Nordic region. JAGGAER manages your procurement and supplier relationships. When the two systems are connected, purchase orders created in JAGGAER flow automatically into Visma for matching and approval, and invoice data aligns across both platforms without manual re-entry. ml-connector handles both the REST API and cXML transports and manages the credential bridges between them.

How Visma works

Visma.net ERP exposes suppliers, purchase orders, supplier invoices, customers, GL accounts, dimensions, and journal transactions through REST APIs at https://api.finance.visma.net. Authentication uses OAuth 2.0 via Visma Connect with client credentials and a tenant_id header on every call. Visma supports both webhooks (one-time delivery, no automatic retry) and polling via lastModifiedDateTime query parameters on list endpoints. Webhook events must be explicitly enabled in company settings, and refresh tokens are not issued to service applications, so new tokens are obtained on each expiry.

How JAGGAER works

JAGGAER is a cloud Source-to-Pay platform with two API surfaces: J1P (primary REST for finance and ERP integration) and cXML (bidirectional document exchange for suppliers and invoices). J1P authenticates with OAuth 2.0 client credentials at https://<customer-instance>.jaggaer.com/auth/realms. The platform manages invoices, purchase orders, suppliers, vendors, contracts, and GL accounts. J1P is pull-only via REST; event-driven push requires JAGGAER professional services setup and is not self-serve. cXML supports synchronous document exchange for OrderRequest and InvoiceDetailRequest messages.

What moves between them

The main flow is from JAGGAER into Visma. Purchase orders and invoices created in JAGGAER are polled via the J1P REST API and inserted into Visma's AP process. GL accounts and vendor references in JAGGAER are mapped to matching Visma GL accounts and supplier master records. Reference data such as vendor hierarchies and cost allocation dimensions are aligned in both directions. Invoice data can optionally flow back to JAGGAER via cXML synchronous callbacks where the two systems need to confirm receipt or payment status.

How ml-connector handles it

ml-connector stores both OAuth credential sets encrypted and obtains fresh bearer tokens from Visma Connect and the JAGGAER J1P token endpoint before each API call. Visma's tenant_id is included on every Visma request. The connector polls Visma and JAGGAER on a schedule you define, using lastModifiedDateTime on the Visma side to detect changed invoices and POs. JAGGAER vendor IDs are normalized and matched against Visma supplier records; GL accounts from JAGGAER are mapped to the Visma chart-of-accounts. Because Visma webhooks provide one-time delivery with no automatic retry, ml-connector relies on polling to ensure no invoice is missed. JAGGAER J1P endpoint paths are not fully public in documentation, so the connector accepts customer-specific path configuration during onboarding. Visma ETag-based optimistic locking on PUT operations is handled transparently. Every invoice and PO carries a full audit trail and can be replayed if a downstream GL posting fails.

A real-world example

A mid-market Scandinavian manufacturing company runs Visma.net ERP for accounting and GL management and has deployed JAGGAER for centralized procurement across three regional offices. Before the integration, the procurement team exported POs and invoice data from JAGGAER and manually entered them into Visma's AP module, creating lag time and reconciliation errors between the two systems. With Visma and JAGGAER connected, new POs flow automatically into Visma for approval, and invoices from suppliers are matched against JAGGAER PO records and posted to the correct GL account and cost center in Visma. The AP team no longer re-keys invoice data, supplier records stay synchronized across both platforms, and month-end close is faster because the invoice posting is already complete.

What you can do

  • Sync purchase orders from JAGGAER into Visma.net ERP, mapped to the correct suppliers and GL accounts.
  • Automatically post supplier invoices from JAGGAER into Visma AP, with full matching and cost allocation.
  • Map JAGGAER vendor IDs and GL account structures to Visma suppliers and chart-of-accounts dimensions.
  • Authenticate both systems with OAuth 2.0 credentials and handle Visma's tenant-specific token requirements.
  • Poll both systems on a schedule you define, with delta queries on Visma and a full audit trail on every record.

Questions

Which direction does data move between Visma and JAGGAER?
The main flow is from JAGGAER into Visma. Purchase orders and supplier invoices from JAGGAER are polled and inserted into Visma's AP process, mapped to the correct suppliers and GL accounts. Vendor and GL reference data can be aligned in both directions to keep master records consistent.
How does ml-connector handle Visma's token and tenant configuration?
ml-connector stores the Visma Connect OAuth credentials encrypted and obtains a fresh bearer token before each API call. The tenant_id is included as a header on every Visma request as required by Visma Connect. Because Visma does not issue refresh tokens to service applications, a new token is obtained whenever the current one expires.
Does the integration rely on webhooks or polling?
Because Visma webhooks provide only one-time delivery with no automatic retry, ml-connector uses polling as the primary synchronization mechanism. It queries JAGGAER J1P and polls Visma's lastModifiedDateTime delta endpoints on a schedule you define, ensuring no invoice or PO is missed if a webhook notification fails.

Related integrations

Connect Visma and JAGGAER

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

Get started