ml-connector
Sage IntacctMicrosoft Teams

Sage Intacct and Microsoft Teams integration

Sage Intacct is your cloud accounting system. Microsoft Teams is where your finance team collaborates. Connecting the two routes critical accounting events - bill approvals, payment notifications, vendor messages - into Teams channels where approvers can act without leaving the platform. A new vendor bill lands in Sage Intacct, ml-connector detects it, and a card appears in the channel so the accounts payable team can review and approve it right from Teams. Vendor status changes and pending payment alerts keep the team informed in real time.

How Sage Intacct works

Sage Intacct exposes vendors, AP bills, AP payments, GL accounts, and dimensions through a single XML gateway endpoint at https://api.intacct.com/ia/xml/xmlgw.phtml. Authentication is session-based: an initial getAPISession call exchanges partner credentials, sender password, company ID, user ID, and user password for a sessionid cached for 50 minutes. All data reads serialize through the single XML gateway endpoint, and the session is automatically refreshed on the next call after expiry. HTTP 200 responses may contain application-level errors inside the XML body, so every response is parsed for errormessage tags. Sage Intacct does not push webhooks; all reads are polling-driven on a schedule you control.

How Microsoft Teams works

Microsoft Teams is accessed via Microsoft Graph REST API at https://graph.microsoft.com/v1.0/, not a standalone Teams API. Authentication is OAuth 2.0 client credentials (app-only) with tenant ID, client ID, and client secret issued by Microsoft Entra ID. Microsoft Teams has no native invoice, PO, GL, vendor, or payment objects; it is communications-only. Notifications and approval workflows flow into channels as chat messages and adaptive cards. Microsoft Graph supports change notifications through webhook subscriptions that expire in three days and must be renewed, though Teams notifications are primarily pulled into channels on a scheduler you control.

What moves between them

The flow runs from Sage Intacct into Microsoft Teams. ml-connector polls Sage Intacct vendors, bills, and payments on a schedule tied to your AP calendar, then routes a message to the configured Teams channel each time a new bill arrives, a payment is pending, or a vendor status changes. No data flows back from Teams into Sage Intacct; Teams is a notification and approval surface, not a data source. Dimension mappings and reference data stay in sync so channel messages include cost center and GL account context when relevant.

How ml-connector handles it

ml-connector establishes a Sage Intacct session by exchanging senderId, senderPassword, companyId, userId, and userPassword for a sessionid, which it caches and refreshes every 49 minutes before expiry at the 50-minute mark. It opens a separate OAuth 2.0 client credentials session with Microsoft Entra ID using tenant ID, client ID, and client secret to obtain a bearer token for Graph requests. On each polling interval, ml-connector reads the Sage Intacct vendors and bills tables via the single XML gateway endpoint, parses the XML response for errormessage tags to catch application-level errors, strips forbidden XML control characters (C0 controls except tab, newline, carriage return) before serialization, and formats each bill as a Teams adaptive card posted to the target channel. Payment pending alerts and vendor status changes are formatted similarly. Session cache is keyed on senderId, companyId, and userId so separate legal entities are isolated in-process. Microsoft Graph subscriptions for Teams channel updates are registered separately and renewed before their three-day expiry so channel context changes do not cause stale data.

A real-world example

A mid-sized professional services firm uses Sage Intacct for accounting and AP processes, with a distributed team across two offices. The AP manager and three approval staff use Microsoft Teams as their primary communication platform. Before the integration, vendors submitted invoices to an AP inbox, the AP clerk scanned and coded them in Sage Intacct, then emailed approval links to managers, who often missed the emails and caused payment delays. With Sage Intacct and Teams connected, each new bill appears as a card in the accounts-payable channel within seconds of being entered. Approvers see the GL codes, cost center, and vendor name inline, click to approve in the card, and the workflow moves forward without email chains or manual status checking.

What you can do

  • Route Sage Intacct bills, payments, and vendor status changes into Microsoft Teams channels as adaptive cards with GL codes and cost center context.
  • Manage session-based XML authentication to Sage Intacct with automatic refresh at 50-minute intervals so polls never fail on expired sessions.
  • Authenticate Microsoft Teams via OAuth 2.0 client credentials and manage Graph subscriptions with renewal before expiry.
  • Format vendor, bill, and payment data from the Sage Intacct XML gateway into rich Teams messages so approvers have full context without switching systems.
  • Poll Sage Intacct and route events on a configurable schedule with encrypted credential storage and a full audit trail of every message posted.

Questions

Can approvers approve bills in Sage Intacct directly from the Teams card?
No. Teams is a notification and approval surface in this integration, not a data source. Approvers see the bill details in the Teams card and must approve in Sage Intacct itself. ml-connector carries the messages one direction only, from Sage Intacct into Teams, to keep the accounting system of record authoritative.
How does ml-connector handle Sage Intacct session expiry?
ml-connector caches the sessionid and refreshes it proactively at 49 minutes, well before the 50-minute expiry. On each polling interval, it checks the cached session and fetches a fresh one if needed, so polling never fails due to an expired session.
What data is available from Microsoft Teams in this integration?
Microsoft Teams provides channels, chat messages, users, and team membership, but no ERP data like invoices, purchase orders, GL accounts, or vendors. Teams is communications-only, so this integration flows accounting notifications into Teams channels rather than syncing Teams data back into Sage Intacct.

Related integrations

Connect Sage Intacct and Microsoft Teams

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

Get started