ml-connector
Sage IntacctAdobe Commerce

Sage Intacct and Adobe Commerce integration

Sage Intacct runs accounting and finance. Adobe Commerce runs e-commerce and B2B order management. Connecting the two keeps your vendor master and payables aligned with what your commerce platform records. Orders placed in Adobe Commerce flow into Sage Intacct as AP bills attached to the correct vendor, and B2B purchase orders sync vendor reference data back into Commerce. ml-connector handles the XML gateway on the Intacct side and OAuth on the Commerce side, moves data on a schedule you control, and maintains a complete audit trail.

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, accepting POST requests with Content-Type: application/xml. Authentication is session-based: an initial getAPISession call exchanges senderId, senderPassword, companyId, userId, and userPassword for a sessionid cached for 50 minutes. Intacct has no webhook system; all data flows are polling-based or triggered manually. HTTP 200 responses may contain application-level errors inside the XML body, so error handling must parse for errormessage tags and status codes.

How Adobe Commerce works

Adobe Commerce exposes orders, invoices, customers, B2B purchase orders, and credit memos through REST APIs (SaaS at https://<server>.api.commerce.adobe.com/<tenant-id>/V1/<endpoint>, PaaS at https://<your-domain>/rest/<store_view_code>/V1/<endpoint>) and GraphQL. On PaaS, authentication uses OAuth 1.0a integration credentials or an admin bearer token; on SaaS, OAuth 2.0 client credentials with a 24-hour token expiry. Adobe Commerce supports synchronous webhooks (available since 2.4.4) via x-adobe-commerce-webhook-signature HMAC SHA256 validation, and common events include order placement and invoice creation. Credit memos can be created but not updated, and B2B features such as purchase orders require the PurchaseOrder module.

What moves between them

The main flow moves from Adobe Commerce into Sage Intacct. Orders and invoices created in Adobe Commerce are read by ml-connector and posted into Intacct as AP bills, mapped to vendors that are either looked up from the Commerce customer record or created new. B2B purchase order headers and line items flow from Commerce into Intacct as open PO records. Vendor master data syncs in both directions, so Commerce B2B customers stay current with Intacct vendors. The schedule is configurable; you can poll Commerce on every order, on a daily batch cadence, or both.

How ml-connector handles it

ml-connector stores both credential sets encrypted: the Intacct session credentials, which expire after 50 minutes and are automatically refreshed, and the Adobe Commerce OAuth credentials, which are refreshed on demand if a call returns a 401. On the Intacct side, ml-connector sends all XML requests to the single gateway endpoint and parses response bodies for both HTTP-level errors and application-level errormessage tags; forbidden XML control characters are stripped before entity encoding. On the Commerce side, it validates webhook signatures using the HMAC SHA256 secret and dispatches based on event type. AP bills posted from Commerce orders are matched to existing Intacct vendors by Commerce customer email or ID; if no match exists, a new vendor is created. Commerce credit memos become AP credit memos in Intacct, and purchase order headers and lines map to Intacct PO records. All records carry a full audit trail and can be replayed if an Intacct session expires or a webhook verification fails.

A real-world example

A mid-sized B2B distributor runs Sage Intacct for accounting and uses Adobe Commerce for B2B ordering across multiple customer segments. Before the integration, the order-entry team exported orders from Adobe Commerce each day and re-entered them into Intacct as AP bills by hand, and discrepancies between the two systems caused month-end reconciliation delays. Vendor master data was maintained separately in each system. With Adobe Commerce and Sage Intacct connected, each order flows into Intacct automatically as an AP bill under the correct vendor, the vendor list stays synchronized, and the finance team's month-end close starts with payables already aligned to orders. Manual re-keying is gone.

What you can do

  • Post orders and invoices from Adobe Commerce into Sage Intacct as AP bills, attached to the correct vendor.
  • Sync B2B purchase orders and line items from Adobe Commerce into Intacct as open PO records.
  • Map Adobe Commerce customers to Sage Intacct vendors, creating new vendors if needed.
  • Authenticate Intacct via XML gateway session credentials with automatic 50-minute refresh, and Adobe Commerce via OAuth 1.0a or 2.0 depending on deployment model.
  • Poll on a configurable schedule or receive real-time updates via Adobe Commerce webhooks, with retries and a full audit trail on every record.

Questions

Which direction does data move between Sage Intacct and Adobe Commerce?
The main flow is Adobe Commerce into Sage Intacct. Orders, invoices, and B2B purchase orders move from Commerce into Intacct as AP bills and POs, while vendor master data syncs in both directions. Intacct GL accounts are read-only in this integration, so ml-connector does not write accounting entries back to Commerce.
How does the integration handle Intacct's XML gateway and 50-minute session expiry?
ml-connector sends all requests to the single XML gateway endpoint at https://api.intacct.com/ia/xml/xmlgw.phtml and parses both HTTP responses and application-level errors inside the XML body. Sessions expire after 50 minutes and are automatically refreshed on the next API call. Forbidden XML control characters are stripped before escaping, and retried operations use the uniqueid flag for server-side deduplication.
Does Adobe Commerce's OAuth work the same way for PaaS and SaaS deployments?
No. PaaS deployments authenticate with OAuth 1.0a integration credentials, while SaaS uses OAuth 2.0 client credentials with a 24-hour token expiry. ml-connector detects the deployment model from your instance URL and applies the correct auth flow. Tokens are cached and refreshed on demand when a 401 response is received.

Related integrations

Connect Sage Intacct and Adobe Commerce

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

Get started