ml-connector
Sage 100Tipalti

Sage 100 and Tipalti integration

Sage 100 manages your accounts payable ledger and purchasing on-premises. Tipalti automates supplier payments and invoice processing in the cloud. Connecting them keeps invoice records, purchase orders, and payment status aligned between on-premises and cloud, eliminating the need to enter payments twice or chase discrepancies between AP records and actual payment execution. Sage 100 stays the source of truth for your chart of accounts and cost centers, while Tipalti handles the complex global payment logistics and compliance.

How Sage 100 works

Sage 100 is an on-premises ERP that exposes vendors, purchase orders, AP invoices, manual checks, and GL accounts through SOAP eBusiness Web Services (https://<customer-server>/ebusinesswebservices/masservice.svc) or through a local Windows agent wrapping the COM BOI layer. Authentication is username and password per SOAP call or Windows service account plus agent credentials. eBusiness Web Services covers only sales orders and AR customers; full AP, GL, PO, and vendor access requires BOI wrapped by a local agent on the customer server and cannot be called remotely over HTTP without that agent. Sage 100 has no webhooks or event stream, so invoices and purchase orders are read by polling DateLastUpdated or DateCreated fields, typically every 15 minutes for invoices and POs, hourly for vendors, and daily for GL accounts. The system uses a three-character company code for every call, multi-segment GL account formats that vary by customer configuration, and requires individual user enablement for Web Services in Sage 100 admin.

How Tipalti works

Tipalti is a cloud-based accounts payable automation and mass payments platform that exposes payees, invoices, purchase orders, payments, GL accounts, and GRNs through both SOAP/XML (https://api.tipalti.com/v14/ endpoints) and REST/JSON (https://triggers.approve.com base URL) APIs. SOAP authentication uses HMAC-SHA256 signature with payer_name and api_key; REST uses OAuth2 client credentials or a static x-api-key header. Tipalti supports instant payment notification webhooks with a single account-wide IPN endpoint configured in Tipalti Hub, emitting events for payee_details_changed, payment_submitted, payment_cancelled, payments_group_approved, and completed, all verified via HMAC-SHA256. Event types include deferred status, approval workflows, compliance document requests, and bill updates. The sandbox is available at https://api.sandbox.tipalti.com and https://triggers.sandbox.approve.com for testing.

What moves between them

The primary flow moves invoices and purchase orders from Sage 100 into Tipalti. As Sage 100 AP invoices are created or updated, ml-connector polls them every 15 minutes and upserts them into Tipalti, mapping Sage 100 vendors to Tipalti payees and GL account segments to Tipalti GL accounts. When Tipalti processes and completes a payment, the IPN webhook fires a completed event; ml-connector receives it, matches the Tipalti payment back to the original Sage 100 invoice, and records a payment in Sage 100's AP ledger. Purchase orders flow similarly: Sage 100 POs poll every 15 minutes into Tipalti, and Tipalti's PO operations update back to Sage 100 status fields. GL accounts and cost centers are synced daily from Sage 100 to ensure Tipalti payments land on valid GL segments.

How ml-connector handles it

ml-connector deploys a local listener or periodic task to poll Sage 100's SOAP eBusiness interface and BOI COM layer every 15 minutes for new or updated AP invoices and purchase orders. On each poll, it extracts invoice lines, vendor codes, and GL account mappings from Sage 100, then pushes them to Tipalti via REST/JSON with OAuth2 authentication, creating or updating invoice records in Tipalti's invoice table. Sage 100's vendor records map to Tipalti payees during the upsert; GL account segments (multi-segment format) are flattened and matched against Tipalti's GL account ledger, with unmapped segments flagged for manual review. Tipalti's IPN webhook endpoint is configured once in Tipalti Hub and points to ml-connector's webhook receiver. When a Tipalti payment completes, the webhook fires with HMAC-SHA256 verification; ml-connector parses the payload, matches the Tipalti payment to the original Sage 100 invoice using cross-reference IDs stored at upsert time, and calls Sage 100's BOI layer to post a payment record in AP. Because Sage 100's COM layer has record-locking contention under high frequency, ml-connector backs off and retries write operations with exponential jitter. The local agent or listener runs as a Windows service under the customer's service account, requiring individual Web Services enablement in Sage 100 admin and SSL/TLS for the SOAP endpoint.

A real-world example

A mid-sized manufacturing company runs Sage 100 on-premises for accounting and purchasing, and uses Tipalti to manage payments to 200+ global suppliers across multiple countries with varying payment methods and tax regimes. Before the integration, the accounts payable team created invoices in Sage 100, exported them weekly, manually uploaded them to Tipalti, and then imported Tipalti payment confirmations back into Sage 100 to mark invoices paid, a process taking 2 days and introducing data-entry errors. With Sage 100 and Tipalti connected, invoices flow automatically from Sage 100 into Tipalti every 15 minutes, Tipalti executes payments and handles tax compliance, and webhook notifications trigger immediate payment records back in Sage 100, shrinking the AP close process by 80% and eliminating manual uploads.

What you can do

  • Poll Sage 100 AP invoices and purchase orders every 15 minutes and sync them to Tipalti, mapping vendors to payees and GL account segments to Tipalti GL ledger.
  • Receive Tipalti payment-completed webhooks and post payment records back to Sage 100 AP, closing invoices without manual data entry.
  • Map Sage 100's multi-segment GL account format to Tipalti's GL accounts, ensuring all AP allocations land on valid chart-of-accounts segments.
  • Authenticate Sage 100 via the local BOI COM agent with Windows service account credentials, and Tipalti via OAuth2 REST API with configurable polling intervals.
  • Retry failed writes to Sage 100 with exponential backoff due to COM record-locking, and track all invoice, PO, and payment records in a full audit trail for month-end reconciliation.

Questions

How does ml-connector handle Sage 100's on-premises architecture and lack of cloud API?
ml-connector deploys a local Windows service on the customer's Sage 100 server that polls the on-premises SOAP interface and COM BOI layer directly, using Windows service account credentials. This local agent acts as the bridge between on-premises Sage 100 and cloud Tipalti, so no firewall changes or IP whitelisting are needed beyond the local network.
What happens when Sage 100 and Tipalti disagree on GL accounts or vendor codes?
Sage 100 uses multi-segment GL account formats that vary by customer configuration. ml-connector flattens Sage 100 segments and matches them against Tipalti's GL ledger during the upsert. If a segment is unmapped, the record is flagged for manual review and can be retried after the configuration is corrected in Tipalti.
How are payments recorded back in Sage 100 after Tipalti completes them?
Tipalti's IPN webhook endpoint fires a completed event with HMAC-SHA256 signature when a payment finishes. ml-connector verifies the signature, matches the Tipalti payment to the original Sage 100 invoice using stored cross-reference IDs, and calls Sage 100's BOI COM layer to post a payment record in AP, closing the invoice automatically.

Related integrations

Connect Sage 100 and Tipalti

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

Get started