ml-connector
Sage IntacctTipalti

Sage Intacct and Tipalti integration

Sage Intacct runs your general ledger and vendor master. Tipalti automates accounts payable and payment processing. Connecting them keeps your vendor data current in the automation platform, feeds invoices from Intacct into Tipalti for processing and payment matching, and ensures payments approved in Tipalti reconcile back to Intacct's GL. ml-connector handles the XML gateway on the Sage Intacct side and the SOAP/REST split on Tipalti, syncing on a schedule you control.

How Sage Intacct works

Sage Intacct exposes vendors, AP bills, payments, GL accounts, and dimensions through a single XML gateway endpoint at https://api.intacct.com/ia/xml/xmlgw.phtml. Authentication uses a session-based model: an initial getAPISession call exchanges a payer name, sender password, company ID, user ID, and user password for a sessionid that is cached for 50 minutes and automatically refreshed on the next call. The gateway requires all operations to serialize through a single HTTPS POST connection, and HTTP 200 responses may contain application-level errors embedded in the XML body that must be parsed separately. Sage Intacct does not expose webhooks; all data reads are polling-driven or manual.

How Tipalti works

Tipalti is an end-to-end AP automation and payments platform with two distinct API families. SOAP endpoints at https://api.tipalti.com/v14/ (PayeeFunctions.asmx and PayerFunctions.asmx) authenticate via HMAC-SHA256 signature using a payer name and API key. REST endpoints at https://triggers.approve.com authenticate with OAuth2 client credentials (client_id and client_secret) or a static x-api-key header. Tipalti pushes events through a single account-wide IPN webhook endpoint including payee creation, invoice and payment updates, approval status, and compliance documents. Both sandbox and production endpoints are available.

What moves between them

The primary flow runs from Sage Intacct into Tipalti. Vendors in Sage Intacct are synced to Tipalti as payees on a schedule you set, feeding the payee master in the automation platform. AP bills in Sage Intacct are read and transmitted to Tipalti as invoices for processing and matching. Payments approved and processed in Tipalti flow back to Sage Intacct as AP payment records, reconciling against the original bill. GL account and dimension mappings ensure that when Tipalti processes an invoice, the GL impact aligns with Sage Intacct's chart of accounts and cost center structure.

How ml-connector handles it

ml-connector maintains the Sage Intacct session by caching the 50-minute sessionid and refreshing it automatically before expiry on the next call. It parses HTTP 200 responses and checks for embedded XML error tags, distinguishing transport errors from application-level failures. On the Tipalti side, ml-connector presents the HMAC signature for SOAP calls and the OAuth2 bearer token for REST calls, choosing the API family based on the operation (SOAP for payee master and invoice submission, REST for webhook event ingestion and payment status). It validates that all vendor-to-payee mappings and GL accounts exist in Tipalti before submitting invoices. The polling schedule accommodates Sage Intacct's lack of webhooks by checking for new vendors and bills at intervals you control; Tipalti events are received in real time via the IPN endpoint. Retried calls use the uniqueid flag on Sage Intacct payloads and request idempotency keys on Tipalti REST operations to prevent duplicate processing. Every record carries a full audit trail from inbound request to Sage Intacct read to Tipalti write to response.

A real-world example

A mid-sized professional services firm runs Sage Intacct for accounting and GL, and manages global supplier invoicing through Tipalti. Before the integration, accounts payable staff manually entered vendor master changes from Intacct into Tipalti every month, then exported approved invoices from Tipalti and manually matched them back to Intacct's AP bills for reconciliation. Cash flow visibility was a week behind because payment approval and GL posting were separate events. With Sage Intacct and Tipalti connected, vendors sync automatically so Tipalti always has the current vendor list, invoices route from Intacct into Tipalti without re-entry, and payments approved in Tipalti are immediately recorded in Intacct's GL. The finance team now sees approved payment status in real time and month-end reconciliation is automatic.

What you can do

  • Sync vendors from Sage Intacct into Tipalti as payees, keeping the payee master current without manual entry.
  • Route AP bills from Sage Intacct into Tipalti for automated invoice processing and payment matching.
  • Map Sage Intacct GL accounts and dimensions to Tipalti invoice line items so payment processing aligns with your chart of accounts.
  • Handle Sage Intacct session-based XML auth and Tipalti's dual SOAP and REST APIs with automatic token refresh and error recovery.
  • Receive real-time Tipalti payment approval and compliance events via IPN webhook and record the updates back into Sage Intacct.

Questions

Which direction does data move between Sage Intacct and Tipalti?
Vendors and AP bills move from Sage Intacct into Tipalti. Payments approved in Tipalti flow back to Sage Intacct as AP payment records for GL posting. GL accounts and dimensions are read from Sage Intacct and mapped to Tipalti invoices to ensure payment processing aligns with your chart of accounts.
Why does ml-connector support both SOAP and REST for Tipalti?
Tipalti publishes two separate API families with different endpoints and authentication schemes. ml-connector uses SOAP for payee master and invoice submission, and REST for webhook event ingestion and payment status queries. This allows you to use the most reliable path for each operation without managing two separate connector flows.
How does the integration handle Sage Intacct's XML gateway and session timeout?
ml-connector sends all Sage Intacct requests to the single XML gateway endpoint, caches the session ID across calls, and refreshes it automatically when approaching the 50-minute expiry. It also parses HTTP 200 responses to detect embedded XML error tags, since Sage Intacct may return a successful HTTP status while reporting an error in the XML body.

Related integrations

Connect Sage Intacct and Tipalti

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

Get started