ml-connector
Wave AccountingTradeshift

Wave Accounting and Tradeshift integration

Small businesses using Wave Accounting for invoicing and accounting need to share those invoices with suppliers and partners on the Tradeshift B2B network. Manually re-entering or re-exporting invoice data from Wave into Tradeshift creates errors and delays, especially as invoice volume grows. Wave and Tradeshift connected through ml-connector keeps your invoicing system and your B2B network synchronized, so new invoices and customer records created in Wave automatically reach your Tradeshift trading partners in the format they expect.

How Wave Accounting works

Wave Accounting exposes invoices, customers, products, transactions, and accounts through a GraphQL single-endpoint API at https://gql.waveapps.com/graphql/public. Authentication uses OAuth 2.0 Authorization Code Flow with access tokens valid for 2 hours and refresh tokens for longer sessions. The connected Wave business must have an active Wave Pro subscription. Wave provides webhooks for invoice and payment lifecycle events, including invoice.created, invoice.updated, invoice.paid, customer.created, and customer.updated, with a 5-minute replay window and HMAC-SHA256 signature verification. Bills and purchase orders are not accessible through Wave's GraphQL API, and invoices follow a strict lifecycle (created, approved, sent, deleted) with no patch operations.

How Tradeshift works

Tradeshift is a B2B network platform for electronically exchanging business documents. It exposes invoices, purchase orders, credit notes, receipts, and other documents through a REST API at https://api.tradeshift.com/tradeshift/rest/external/ with both JSON and UBL 2.0/2.2 XML representations. Authentication uses OAuth 1.0a with consumer credentials and tenant ID, with all calls requiring the X-Tradeshift-TenantId header. Documents are retrieved via polling with changedAfter timestamp filters or through an optional continuous event stream for registered plugins. Tradeshift uses UBL format identified by documentProfileId; documents do not expose native GL dimensions, and those values are embedded in UBL line items.

What moves between them

Invoices and customers flow from Wave into Tradeshift. When an invoice is created, updated, or paid in Wave, ml-connector captures the webhook event, retrieves the full invoice and customer details from Wave's GraphQL endpoint, maps the Wave invoice structure to UBL 2.0 format, and posts it to Tradeshift's API under your tenant. Customer records created or updated in Wave are also synced to Tradeshift as company profiles. The sync is near-real-time when webhooks fire; if webhooks are unavailable, ml-connector can poll Wave's API on a schedule. Tradeshift does not send invoice updates back to Wave, so the flow is unidirectional.

How ml-connector handles it

ml-connector handles the OAuth 2.0 flow on the Wave side, storing the refresh token encrypted and automatically refreshing the access token when it expires. It listens for Wave webhook events and verifies the HMAC-SHA256 signature in the x-wave-signature header before accepting them. On receipt of an invoice event, it queries Wave's GraphQL API to fetch the complete invoice, customer, and product details. It then maps Wave customer records to Tradeshift company profiles and Wave invoice line items to UBL line elements, preserving amounts and tax codes. The integration posts the UBL-formatted invoice to Tradeshift with the X-Tradeshift-TenantId header and OAuth 1.0a signature. If Wave webhooks are unreliable or you prefer polling, ml-connector can fetch invoices from Wave on a schedule. All records carry an audit trail, so failed Tradeshift posts can be retried. Wave Pro subscription is required for the connected business.

A real-world example

A small design studio based in the United States invoices about 20 clients per month through Wave Accounting and sells design services to enterprise clients in Europe and Asia. Those enterprise clients require invoices to flow through Tradeshift for procurement approval and AP automation. Before the integration, the studio's finance person exported invoices from Wave each week and manually recreated them in Tradeshift, a 30-minute task prone to typos in amounts or line descriptions. After Wave and Tradeshift are connected, each invoice created in Wave automatically posts to Tradeshift in UBL format within seconds, the studio's customers see them in their AP systems immediately, and the manual re-entry task disappears.

What you can do

  • Sync Wave invoices to Tradeshift in UBL 2.0 format when they are created, updated, or paid.
  • Map Wave customers to Tradeshift company profiles and keep them aligned when customer data changes.
  • Authenticate Wave with OAuth 2.0 including access token refresh, and Tradeshift with OAuth 1.0a with tenant ID.
  • Verify Wave webhook signatures (HMAC-SHA256) before processing events, and retry Tradeshift posts on failure with full audit trail.
  • Optionally poll Wave's GraphQL endpoint on a schedule if webhooks are not available or preferred.

Questions

Which direction does data flow between Wave and Tradeshift?
The main flow is Wave into Tradeshift. Invoices created, updated, or paid in Wave are synced to Tradeshift in UBL format, and customer records are mapped to Tradeshift company profiles. Tradeshift does not send invoice updates back to Wave; the sync is unidirectional from Wave outbound.
Does Wave's GraphQL API expose purchase orders and bills?
No. Wave's GraphQL API does not expose bills, accounts payable, or purchase orders. The integration can sync invoices, customers, products, and transactions from Wave to Tradeshift, but not inbound supplier documents. If you need to pull supplier invoices from Tradeshift back into Wave, that flow is not supported by Wave's API.
How does the integration handle Wave's invoice lifecycle and UBL format mapping?
Wave invoices follow a strict state machine (created, approved, sent, deleted) and do not support patch operations. ml-connector captures these state changes via webhook, retrieves the full invoice details from Wave's GraphQL API, and maps the invoice amount, tax, line items, and customer to UBL 2.0 format for Tradeshift. The mapping preserves all financial data and uses the Wave customer record to populate the ship-to and bill-to company profiles in UBL.

Related integrations

Connect Wave Accounting and Tradeshift

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

Get started