ml-connector
Wave AccountingRamp

Wave Accounting and Ramp integration

Wave Accounting and Ramp serve different roles in the accounting stack. Wave holds the chart of accounts and customer invoices for a small business, while Ramp manages corporate spend, bills, and purchase orders. Connecting the two keeps spending and payables aligned with the general ledger. Bills created or paid in Ramp flow into Wave as vendor expenses and GL postings without re-entry, and invoice events from Wave can sync to Ramp to maintain a single source of truth for accounts payable and spending approval.

How Wave Accounting works

Wave Accounting is a cloud-based accounting platform for small businesses offering invoicing, expense tracking, chart of accounts, and transactions. Access requires an active Wave Pro subscription. Wave exposes invoices, customers, vendors, transactions, products, and GL accounts through a GraphQL single-endpoint API at https://gql.waveapps.com/graphql/public and authenticates with OAuth 2.0 Authorization Code Flow with 2-hour access token expiry and refresh tokens. Wave supports webhooks for invoice and payment events, requiring HMAC-SHA256 signature verification, and retries failed deliveries. Bills and accounts payable are not exposed through the GraphQL API.

How Ramp works

Ramp is a corporate spend management platform combining corporate cards, bill pay, expense management, and procurement. The Ramp Developer API is a REST API at https://api.ramp.com/developer/v1 and https://sandbox-api.ramp.com/developer/v1 exposing bills, vendors, purchase orders, transactions, GL accounts, and users. Ramp authenticates with OAuth 2.0 Client Credentials flow for server-to-server access, with 10-day token expiry, or Authorization Code flow with 1-hour tokens. Ramp supports real-time push webhooks for bills, transactions, vendors, and reimbursements with HMAC-SHA256 signature verification. Vendors are created implicitly via bills rather than through a direct creation endpoint.

What moves between them

The main flow is Ramp into Wave. Bills created, updated, or paid in Ramp trigger webhooks that ml-connector receives, extracts the vendor and line-item detail, and posts into Wave as vendor transactions mapped to the correct GL account. A secondary reverse flow sends Wave invoices and payments to Ramp via webhooks so the spend platform knows about customer-facing transactions. Sync runs in real time via webhook delivery rather than polling, with immediate acknowledgment to Ramp on success.

How ml-connector handles it

ml-connector stores both OAuth credential sets encrypted and refreshes Wave tokens on the 2-hour cycle automatically and Ramp tokens every 10 days. It verifies Ramp bill webhooks with HMAC-SHA256 using Ramp's signature header and verifies Wave invoice webhooks the same way. When a Ramp bill arrives, ml-connector looks up or creates the vendor in Wave if needed, maps the bill line items to Wave GL accounts, and posts them as transactions. Because vendors in Ramp are created implicitly through bills, ml-connector creates a matching Wave vendor record on first sight of a new Ramp vendor ID so that GL postings land on a valid counterparty. Ramp purchase orders are read-only, so ml-connector never writes those back. Every record carries a full audit trail and can be replayed if a downstream webhook fails.

A real-world example

A small online retail business runs Wave Accounting for invoicing and the general ledger and uses Ramp for corporate cards, bill pay, and vendor management across the operations team. Before the integration, spending was recorded in Ramp but had to be exported and manually re-entered into Wave as vendor transactions every few days during month-end reconciliation. With Ramp and Wave connected, each bill paid in Ramp automatically appears in Wave mapped to the correct expense account, and any adjustments to vendor master data in Ramp update Wave vendors in real time. Month-end close is cleaner because the accounts payable and spending accounts are already aligned.

What you can do

  • Post Ramp bills as vendor transactions into Wave mapped to the correct general ledger accounts.
  • Create or update Wave vendors automatically when new vendors appear in Ramp bills.
  • Verify Ramp and Wave webhook signatures using HMAC-SHA256 to ensure authenticity.
  • Refresh Wave OAuth tokens on the 2-hour cycle and Ramp tokens every 10 days automatically.
  • Track a full audit trail on every transaction and replay failed webhook deliveries on demand.

Questions

Which direction do bills and transactions flow between Wave and Ramp?
The main flow is Ramp into Wave. Bills, payments, and vendor updates from Ramp flow into Wave as transactions and vendor records, mapped to GL accounts. The reverse flow sends Wave invoices to Ramp so the spend platform has visibility into customer-facing transactions. Because both systems need to track vendor information, vendors are kept aligned in both directions.
How does ml-connector handle the fact that vendors in Ramp are created implicitly via bills?
ml-connector creates a matching Wave vendor record the first time a vendor appears in a Ramp bill. This ensures that GL postings land on a valid Wave vendor counterparty from the start. Subsequent bills from the same Ramp vendor update the existing Wave record.
What happens if a webhook delivery fails or a token expires during sync?
ml-connector verifies webhook signatures on every Ramp and Wave delivery and returns HTTP 200 only on success. It refreshes Wave tokens automatically every 2 hours and Ramp tokens every 10 days to prevent expiry outages. Every transaction carries a full audit trail, and failed deliveries can be replayed on demand to ensure no bills are missed.

Related integrations

Connect Wave Accounting and Ramp

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

Get started