ml-connector
Wave AccountingJAGGAER

Wave Accounting and JAGGAER integration

Wave Accounting serves small business invoicing and financial records. JAGGAER handles enterprise procurement, sourcing, and invoice processing. Connecting them keeps your financial data synchronized across both platforms. Wave invoices and transaction records flow into JAGGAER, and customer records in Wave align with supplier records in JAGGAER, eliminating manual data entry and reducing reconciliation work during month-end close.

How Wave Accounting works

Wave Accounting exposes invoices, customers, products, accounts, transactions, and vendors through a GraphQL API endpoint at https://gql.waveapps.com/graphql/public. Authentication uses OAuth 2.0 Authorization Code Flow with 2-hour access tokens and refresh tokens (requires offline_access scope). Wave Pro subscription is required for API access. Wave publishes webhook events for invoice.created, invoice.updated, invoice.paid, payment.created, customer.created, customer.updated, transaction.created, product.created, and product.updated. Webhook signatures use HMAC-SHA256 with a 5-minute replay window. No server-to-server OAuth or patch operations are available; invoices have discrete states (created, approved, sent, deleted).

How JAGGAER works

JAGGAER exposes purchase orders, invoices, suppliers, vendors, GL accounts, and custom fields through the J1P REST API at https://<customer-instance>.jaggaer.com/j1p/api/public/. Authentication uses OAuth 2.0 Client Credentials with tokens provisioned by JAGGAER during onboarding. Detailed endpoint paths are gated behind customer login and provided during onboarding. JAGGAER also supports cXML for bidirectional document exchange and SAP iDoc for ERP sync. Event-driven push configuration is available but requires JAGGAER professional services setup; the standard pattern is poll-only via REST.

What moves between them

Wave invoices and transactions flow into JAGGAER as GL postings and line-item records. Wave customers are synced to JAGGAER suppliers to maintain a single source of truth for supplier master data. Transaction records from Wave are mapped to GL accounts in JAGGAER based on Wave chart of accounts. The integration runs on a schedule tied to your accounting close calendar, with immediate processing of Wave webhook events when available and polling fallback if webhooks miss an update.

How ml-connector handles it

ml-connector stores both credential sets encrypted and uses Wave's OAuth refresh token to maintain a valid session. Wave webhooks trigger immediate synchronization of invoices, transactions, and customers; ml-connector verifies the HMAC-SHA256 signature and acknowledges with HTTP 200 to prevent retry. For JAGGAER, ml-connector authenticates with OAuth 2.0 Client Credentials using the credentials provisioned during onboarding and polls the J1P REST API to confirm postings. Customer records in Wave are matched to suppliers in JAGGAER by name and email, and Wave GL account codes are mapped to JAGGAER GL accounts during flow setup. If a Wave webhook delivery fails, ml-connector polls the Wave GraphQL endpoint to catch the missing event. Every record carries a unique reference ID and full audit trail for reconciliation.

A real-world example

A small professional services firm uses Wave Accounting for invoicing and general ledger management and JAGGAER for vendor management and procurement. Before integration, the finance team manually entered Wave invoice totals and transaction details into JAGGAER at month-end, a process that introduced errors and delayed close by 2-3 days. With Wave and JAGGAER connected, each Wave invoice is automatically posted to JAGGAER the moment it is created, customer records sync to suppliers in real time, and GL postings are pre-populated with the correct account codes. Month-end close now starts with all invoice and transaction data already in JAGGAER, reducing manual work to a final review.

What you can do

  • Sync Wave invoices to JAGGAER GL postings, automatically mapped to the correct general ledger accounts.
  • Post Wave transaction records into JAGGAER as detailed line items with GL account coding.
  • Keep Wave customer records aligned with JAGGAER suppliers through bidirectional sync.
  • Process Wave webhook events in real time and poll JAGGAER to confirm invoice posting and GL updates.
  • Maintain a complete audit trail with unique reference IDs for every invoice, transaction, and customer sync.

Questions

Which direction does data flow between Wave Accounting and JAGGAER?
The primary flow is Wave into JAGGAER. Wave invoices and transactions are posted to JAGGAER as GL entries and line-item records. Wave customers are synced to JAGGAER suppliers in both directions to maintain alignment. JAGGAER purchase orders and vendor records are read-only to Wave; ml-connector does not write JAGGAER data back into Wave.
How does ml-connector handle Wave webhook events and JAGGAER polling?
Wave sends webhook events immediately when invoices, transactions, or customers change. ml-connector verifies the HMAC-SHA256 signature and processes the update to JAGGAER in real time. For confirmation and fallback, ml-connector also polls the Wave GraphQL endpoint and JAGGAER's J1P REST API on a schedule tied to your close calendar, ensuring no updates are missed.
How are Wave GL accounts mapped to JAGGAER GL accounts?
Wave chart of accounts is exported during flow setup and mapped to JAGGAER GL accounts by account code and description. Each Wave transaction is tagged with its source GL account code; ml-connector looks up the corresponding JAGGAER GL account and posts the transaction there, ensuring GL postings land on the correct accounts.

Related integrations

Connect Wave Accounting and JAGGAER

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

Get started