Wave Accounting and Microsoft Teams integration
Wave Accounting keeps financial records for small businesses, while Microsoft Teams keeps teams connected and informed. Connecting Wave to Teams means finance events automatically create messages in your team channels - new invoices, payments received, expense transactions - so team members stay in sync without manual updates. No spreadsheets to email, no delay in seeing what changed. ml-connector ensures every financial event that matters gets to the right Teams channel on time.
What moves between them
Wave events flow one direction into Teams. When a Wave invoice is created, updated, or paid, ml-connector reads that event from the webhook and formats it as a message in the designated Teams channel. Likewise, payment and transaction events create notifications for accounting team visibility. ml-connector polls Wave transactions periodically to catch any events that may have missed the webhook and posts catch-up summaries to Teams if needed. The sync runs continuously as Wave webhooks fire, with no manual trigger required.
How ml-connector handles it
ml-connector subscribes to Wave webhook events and listens for delivery at a public https endpoint. Each Wave webhook carries an HMAC signature in the x-wave-signature header; ml-connector validates this signature against the shared secret (using HMAC-SHA256) and rejects unsigned payloads with HTTP 400. For Microsoft Teams, ml-connector establishes an OAuth session using client credentials and maintains current Microsoft Graph subscriptions to monitor for Teams resource changes, refreshing subscriptions before they expire (every 3 days). When a Wave invoice.created event arrives, ml-connector parses the invoice data from the GraphQL payload, formats it as a Teams adaptive card or rich message with the invoice number, customer, amount, and due date, and POSTs the message to the target channel. If Teams returns a rate limit (HTTP 429) or temporary failure, ml-connector backs off and retries with exponential jitter. Wave tokens are refreshed automatically when approaching expiry (2-hour window), and Microsoft Graph tokens are refreshed on each session. Every message delivery is logged in the audit trail, including the original Wave event, the Teams message ID (if successful), and any retries, so failed deliveries can be replayed.
A real-world example
A small professional services firm uses Wave Accounting to invoice clients and track billable hours and expenses. The accounting team currently spends time each morning manually scanning Wave for new invoices sent the prior day, then emailing summaries to the projects team. With Wave and Teams connected, new invoices post automatically to a Teams channel called Finance-Alerts the moment they are created or sent. The project managers see invoice status change in real time without separate email, and if a payment is marked received in Wave, that notification appears immediately in Teams so the accounting team and projects team stay synchronized. This eliminates the daily email routine and reduces confusion over which invoices have actually been sent to clients.
What you can do
- Post Wave invoices to Teams channels when created, updated, sent, or marked paid, with customer name, invoice number, and amount.
- Send Wave payment notifications to Teams when payments are marked received, with payer and amount details.
- Format Wave transaction notifications as Teams messages so accounting teams can monitor business activity in real time.
- Validate Wave webhook signatures using HMAC-SHA256 and handle Microsoft Graph OAuth subscriptions with automatic renewal and token refresh.
- Maintain a full audit trail of every Wave event received, every Teams message posted, and every delivery failure or retry.
Questions
- Which direction does data flow between Wave and Teams?
- Data flows one direction, from Wave into Teams. When invoices, payments, or transactions change in Wave, ml-connector posts formatted notifications to a Teams channel. Teams is used as a notification surface only; ml-connector does not write back to Wave from Teams messages.
- How does ml-connector validate Wave webhooks?
- Wave includes an HMAC-SHA256 signature in the x-wave-signature header on every webhook delivery. ml-connector validates this signature against the shared secret provided during setup, rejects any unsigned or tampered payloads with HTTP 400, and only processes valid messages. This prevents unauthorized events from being posted to Teams.
- How does the integration handle Microsoft Teams subscriptions and token expiry?
- Microsoft Graph subscriptions expire every 3 days and require renewal. ml-connector tracks subscription expiry, renews subscriptions before they expire, and refreshes OAuth tokens on each session. If a subscription expires without renewal, ml-connector resumes listening without losing messages. Similarly, Wave OAuth tokens are refreshed automatically when approaching the 2-hour expiry window.
Related integrations
More Wave Accounting integrations
Other systems that connect to Microsoft Teams
Connect Wave Accounting and Microsoft Teams
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started