ml-connector
QuickBooks OnlineTipalti

QuickBooks Online and Tipalti integration

QuickBooks Online keeps your accounting records. Tipalti automates your accounts payable and payment processing across suppliers globally. Connecting the two ensures your vendor master stays current in both systems and invoices flowing through Tipalti are reconciled back to QuickBooks Online bills without manual matching. New vendors created in QuickBooks Online can be onboarded to Tipalti automatically, and payment approvals and status changes in Tipalti flow back to update bill status and payment records in QuickBooks Online. ml-connector bridges the very different authentication schemes and data models on each side, keeping the two systems in agreement on vendor identity and invoice status.

How QuickBooks Online works

QuickBooks Online exposes vendors, customers, employees, accounts, bills, invoices, purchase orders, and journal entries through the QuickBooks Online Accounting API (v3), a REST API served at a company-specific realm endpoint with OAuth 2.0 authorization. Access tokens expire in 1 hour and refresh tokens rotate every 24 to 26 hours. QuickBooks Online supports both webhooks that fire on Create, Update, Delete, and Merge events for core entities, and a CDC (Change Data Capture) polling endpoint with 30-day history, so ml-connector can choose push or pull based on your latency needs. Webhook payloads contain only the entity ID and operation, so full records must be fetched via a second GET call.

How Tipalti works

Tipalti exposes payees, invoices, purchase orders, payments, GL accounts, and custom fields through two separate API families: a SOAP/XML interface at PayeeFunctions.asmx and PayerFunctions.asmx authenticated with HMAC-SHA256 signatures, and a modern REST/JSON interface at triggers.approve.com authenticated with OAuth2 client credentials or a static x-api-key header. Tipalti publishes invoice and payment events through a single account-wide IPN (Instant Payment Notifications) webhook endpoint that you configure once and receive all event types (payee_details_changed, payment_submitted, payment_cancelled, completed, error, and others) to that same URL, verified via HMAC-SHA256.

What moves between them

The main flow moves vendor data and invoice reconciliation. Vendors created in QuickBooks Online (new records detected via CDC polling or webhook) are synced to Tipalti as payees for supplier onboarding. Invoices and purchase orders created in Tipalti flow back to QuickBooks Online as bills or bill line item details for matching and reconciliation. Payment approvals and status changes in Tipalti (received via IPN webhooks) update the corresponding bill or bill payment record in QuickBooks Online so both systems stay in sync on payment status. The cadence is event-driven for Tipalti (via webhooks) and polling-based for QuickBooks Online (CDC endpoint) unless you enable QuickBooks Online webhooks, in which case both are push.

How ml-connector handles it

ml-connector manages a complex dual-auth bridge. On the QuickBooks Online side it handles OAuth2 token refresh, caching the access token and refreshing it when approaching expiry, and it maintains the realm_id (company identifier) captured from the OAuth callback so it can target the correct QuickBooks Online instance. On the Tipalti side it switches between SOAP and REST based on the operation: it calculates and signs SOAP requests with HMAC-SHA256 using the payer_name and api_key, and it obtains and refreshes OAuth2 bearer tokens for REST calls. For vendor sync, ml-connector polls the QuickBooks Online CDC endpoint for new or updated vendors, then creates matching payees in Tipalti with the vendor name, tax ID, and address fields. For invoice reconciliation, it receives Tipalti IPN webhook events on a single endpoint, verifies the HMAC-SHA256 signature, and matches the incoming invoice record to an existing QuickBooks Online bill by vendor and invoice number, updating the bill status to match the payment status in Tipalti. Tipalti supports both SOAP and REST but with different function signatures for the same operations, so ml-connector uses REST for the highest compatibility with modern systems. The single Tipalti IPN endpoint means all event types (payee changes, payments, errors) route to the same handler, so ml-connector filters by event type in code. QuickBooks Online webhook payloads are best-effort and may arrive out-of-order or duplicated, so ml-connector deduplicates by entity ID and timestamp. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A services firm uses QuickBooks Online for accounting and Tipalti to manage payments to 150+ independent contractors and vendors across multiple countries. Before the integration, the accounts payable team manually entered invoices from Tipalti into QuickBooks Online and updated bill status by hand when Tipalti approved and scheduled payments. This created a two-week lag and frequent mismatches where Tipalti had approved a payment but QuickBooks Online still showed the bill as open, causing reconciliation headaches and tax compliance delays. With QuickBooks Online and Tipalti connected, new vendors added to the contractor list in QuickBooks Online are automatically onboarded to Tipalti for compliance review, invoices submitted in Tipalti appear as bills in QuickBooks Online within minutes, and payment approvals update bill status automatically. The accounts payable team now spends their time on compliance and vendor management, not on manual data entry, and month-end close happens three days faster because invoices and payments are already reconciled.

What you can do

  • Sync vendors created in QuickBooks Online to Tipalti as payees, with tax IDs and address details for automated supplier onboarding.
  • Match invoices and purchase orders from Tipalti to bills in QuickBooks Online by vendor and invoice number for automatic reconciliation.
  • Update bill and bill payment status in QuickBooks Online when Tipalti approves, schedules, or completes a payment via IPN webhooks.
  • Bridge OAuth2 token refresh on the QuickBooks Online side and manage HMAC-SHA256 SOAP signatures plus OAuth2 on the Tipalti side without manual credential rotation.
  • Poll the QuickBooks Online CDC endpoint and receive Tipalti IPN webhooks with full deduplication, verification, and audit trails on every record.

Questions

Which direction does data move between QuickBooks Online and Tipalti?
The flow is bidirectional by record type. Vendors move from QuickBooks Online to Tipalti for payee onboarding. Invoices and purchase orders move from Tipalti to QuickBooks Online for bill matching and reconciliation. Payment status changes in Tipalti update bill status in QuickBooks Online.
How does ml-connector handle the different authentication schemes on each side?
ml-connector maintains separate credential stores and token refresh cycles for each system. On QuickBooks Online, it refreshes OAuth2 access tokens on schedule and caches the realm_id. On Tipalti, it calculates HMAC-SHA256 signatures for SOAP calls using the payer_name and api_key, and maintains a separate OAuth2 client credentials flow for REST calls to triggers.approve.com.
What happens when Tipalti's single IPN webhook endpoint receives multiple event types?
ml-connector routes all Tipalti events (payee changes, payment submissions, approvals, errors) to the same webhook handler, verifies the HMAC-SHA256 signature once, and then filters by event type in code to dispatch the right handler. This lets you use a single integration point while processing different record types.

Related integrations

Connect QuickBooks Online and Tipalti

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

Get started