ml-connector
Wave AccountingTaxJar

Wave Accounting and TaxJar integration

Wave Accounting runs invoicing and transaction tracking for small businesses. TaxJar handles sales tax compliance across US states and nexus regions. Connecting Wave to TaxJar means every invoice created in Wave automatically flows to TaxJar for real-time sales tax calculation and compliance reporting. Tax rates stay current as you create and update invoices, and transaction records are synced to state tax authorities without manual export.

How Wave Accounting works

Wave Accounting exposes invoices, customers, products, accounts, transactions, and sales taxes through a GraphQL POST endpoint at https://gql.waveapps.com/graphql/public. The connected business must have an active Wave Pro subscription. Authentication uses OAuth2 Authorization Code Flow with access tokens (2 hour expiry) and refresh tokens (requires offline_access scope). Wave publishes webhooks for invoice.created, invoice.updated, invoice.paid, payment.created, customer.created, customer.updated, transaction.created, product.created, and product.updated events, with a 5 minute replay window and HMAC-SHA256 signature verification. Bills and purchase orders are not exposed via the GraphQL API, and invoices can be created, approved, sent, or deleted, but not patched.

How TaxJar works

TaxJar is a REST API at https://api.taxjar.com/v2/ (production) or sandbox for tax calculations and transaction reporting. Authentication is via API key tokens stored in the TaxJar app under Account > API Access, with no OAuth2 support. TaxJar does not publish webhooks or push events; the integration is poll-based or merchant-initiated. Key endpoints include /taxes for real-time tax calculation, /transactions/orders for transaction reporting, /customers for exemption management, and /nexus/regions for nexus tracking. The API is versioned via x-api-version request header (date format). Transactions do not count toward monthly API rate limits. Sandbox is stateless and validates format only.

What moves between them

Invoices flow from Wave to TaxJar in one direction. When an invoice is created or updated in Wave, ml-connector reads the invoice data and posts it to TaxJar for tax calculation and transaction reporting. Customer exemption data can flow from TaxJar back to Wave for future invoice exemption validation. Sales tax rates and nexus regions are retrieved from TaxJar on demand or on a sync schedule when new jurisdictions are encountered. Refunds in Wave are synced to TaxJar as refund transactions for compliance reporting.

How ml-connector handles it

ml-connector stores Wave OAuth2 credentials and TaxJar API tokens encrypted at rest. Wave's OAuth2 access tokens expire in 2 hours, so ml-connector refreshes the token automatically before expiry using the long-lived refresh token. TaxJar tokens do not expire and are validated on each request. Wave publishes webhook events for invoices and transactions; ml-connector listens on the registered webhook endpoint and validates each signature with HMAC-SHA256 before processing. For TaxJar, since it offers no webhooks, ml-connector polls Wave's transaction list on a schedule or waits for a webhook event from Wave. When an invoice flows to TaxJar, ml-connector maps Wave invoice line items (with products and amounts) to the TaxJar /taxes endpoint to fetch real-time rates, then posts the completed transaction to /transactions/orders with the calculated tax. If a customer is marked as tax-exempt in TaxJar, that exemption status is cached and applied to future Wave invoices for that customer. Retries and idempotency keys prevent duplicate transaction reports.

A real-world example

A small e-commerce or professional services business uses Wave Accounting to send invoices and track revenue, and must comply with sales tax reporting across the states where they have nexus. Before the integration, the business exported invoices from Wave monthly and manually entered them into TaxJar, risking missed transactions and wrong tax rates. With Wave and TaxJar connected, each invoice triggers real-time tax calculation in TaxJar, capturing the correct tax rate for the customer's address at invoice time. Transactions automatically report to state tax authorities, and month-end tax liability is calculated from real invoice data instead of estimates or manual entry.

What you can do

  • Post Wave invoices to TaxJar for real-time sales tax calculation based on customer location and product type.
  • Automate sales tax transaction reporting to state tax authorities without manual export from Wave.
  • Sync customer tax exemption status from TaxJar back to Wave so future invoices honor exemptions.
  • Validate Wave invoice addresses against TaxJar and flag mismatches before syncing.
  • Track nexus regions and sales tax rates in TaxJar as Wave expands to new states.

Questions

Which direction does data move between Wave Accounting and TaxJar?
Invoices and transactions flow from Wave to TaxJar for tax calculation and compliance reporting. Customer exemption status flows from TaxJar back to Wave so tax-exempt customers are not taxed on future invoices. Sales tax rates and nexus regions are retrieved from TaxJar on demand when Wave creates an invoice in a new jurisdiction.
How does the integration handle Wave's OAuth2 tokens and TaxJar's API keys?
ml-connector stores both credential sets encrypted at rest. Wave OAuth2 access tokens expire in 2 hours, so ml-connector refreshes them automatically before expiry using the refresh token. TaxJar API tokens do not expire but are validated on each request, and renewal or rotation is handled without downtime.
Does the integration use Wave webhooks or poll for invoices?
ml-connector uses Wave's webhooks for invoice.created, invoice.updated, and invoice.paid events, which trigger immediate syncs to TaxJar. Since TaxJar does not support webhooks, ml-connector posts completed invoices to TaxJar for tax calculation and transaction reporting via direct API calls, with idempotency keys to prevent duplicate reports.

Related integrations

Connect Wave Accounting and TaxJar

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

Get started