Wave Accounting and Stedi integration
Wave Accounting powers invoicing and expense tracking for small business finance. Stedi translates those invoices into standardized X12 EDI format and sends them to your trading partners via SFTP, FTPS, or AS2. Connecting the two lets you invoice customers in Wave and automatically deliver those invoices to trading partners in EDI format without manual translation or file handling. Inbound EDI from suppliers can also flow back into Wave as vendor records and purchase transactions.
What moves between them
The main flow moves from Wave to Stedi. Wave invoices and customer records trigger webhooks when created or updated; ml-connector converts them to X12 810 invoices with customer details and sends them to Stedi for EDI translation and delivery to trading partners. Secondary flow returns inbound EDI from partners (parsed to JSON by Stedi's translation engine) to ml-connector, which can create vendor records and inbound transactions in Wave. Reference data such as customer names and tax IDs are mapped so EDI documents carry valid partner identifiers for your trading partners.
How ml-connector handles it
ml-connector stores the Wave OAuth tokens (refreshed when they expire after 2 hours) and the Stedi API key encrypted. It subscribes to Wave webhooks for invoicing events and accepts the webhook signature verification (HMAC-SHA256 with x-wave-signature header and 5-minute replay window). On each invoice or customer event from Wave, ml-connector maps the Wave entity to the corresponding X12 EDI structure (810 for invoices, partner details for customer records), then POST to Stedi with an Idempotency-Key to ensure deduplication within Stedi's 24-hour window. For inbound EDI, Stedi webhooks deliver parsed transactions; ml-connector validates against your partnership settings and creates corresponding vendor and transaction records in Wave. Stedi's webhooks require a 5-second response, so ml-connector acknowledges immediately and processes asynchronously. Retries on both sides are handled: Wave webhooks retry on 500, and Stedi retries API failures up to 4 times with 90-second intervals. All records carry an audit trail for compliance and replay.
A real-world example
A small manufacturer uses Wave Accounting for invoicing and expense management, and ships goods to large distributors who require EDI invoices (X12 810 format). Previously the finance team created invoices in Wave, then exported them manually and re-keyed them into an EDI translator to send to distributors, a process that took 2 to 4 hours per batch and often contained keystroke errors. With Wave and Stedi connected, every invoice created in Wave automatically flows to Stedi, is translated to X12 format, and is sent to each distributor via SFTP overnight. The team now spends 10 minutes checking the Stedi delivery log instead of hours on manual translation.
What you can do
- Send Wave invoices to Stedi for automatic X12 810 translation and delivery to trading partners via SFTP, FTPS, or AS2.
- Map Wave customer records to X12 EDI partner data so invoices reach the correct trading partner destination.
- Receive inbound EDI documents from trading partners, parse them via Stedi, and create vendor and transaction records in Wave.
- Authenticate Wave with OAuth 2.0 (2-hour token refresh) and Stedi with static API keys, managing both securely.
- Retain full audit history of every Wave invoice sent and every EDI transaction received, with replay capability on failure.
Questions
- How does Wave invoice creation trigger an EDI send to Stedi?
- When an invoice is created or updated in Wave, Wave publishes an invoice.created or invoice.updated webhook with the invoice and customer data. ml-connector receives the webhook, verifies the HMAC-SHA256 signature, maps the Wave invoice to an X12 810 document with customer details, and POST the 810 to Stedi with an Idempotency-Key. Stedi then translates the 810 to X12 format and routes it to your configured trading partners via SFTP, FTPS, or AS2.
- Can inbound EDI from trading partners flow back into Wave?
- Yes. Stedi parses inbound EDI and publishes it as JSON via transaction.processed.v2 webhooks. ml-connector receives the parsed EDI (e.g., a 997 Functional Acknowledgment or an inbound purchase order), validates the trading partner against your Stedi partnerships, and creates a corresponding vendor record or inbound transaction in Wave. This lets you track supplier orders and acknowledgments directly in Wave.
- What happens if a Wave webhook fails or an API call to Stedi times out?
- Wave retries failed webhooks (return 500 to trigger a retry, 200 to acknowledge). ml-connector acknowledges Wave webhooks immediately and queues the work for processing. If an API call to Stedi fails, ml-connector retries with exponential backoff; Stedi itself retries failed EDI deliveries up to 4 times with 90-second intervals. Every record is auditable and can be replayed if needed.
Related integrations
More Wave Accounting integrations
Other systems that connect to Stedi
Connect Wave Accounting and Stedi
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started