Executive Summary
Integrating Sage Intacct with Adobe Commerce creates a closed-loop order-to-cash pipeline where eCommerce transactions flow automatically into the general ledger, accounts receivable, and inventory modules without manual re-keying. Adobe Commerce acts as the revenue origination layer — capturing orders, customers, and payments — while Sage Intacct serves as the financial system of record for invoices, journal entries, cash receipts, and COGS. Middleware (iPaaS or custom) bridges the two platforms, translating Commerce REST payloads into Intacct XML API requests and vice versa.
⚡ Accelerate your integration roadmap
Stop wrestling with API rate limits, undocumented endpoints, and unreliable webhooks. Our engineering team designs and deploys resilient, enterprise-grade integration architectures in days. Prefer to build it in-house? Leverage our recommended middleware platform.
The primary integration surfaces are: order placement triggering AR invoice creation in Intacct; customer account sync for credit management; product/SKU sync for inventory valuation; and payment capture events writing cash receipts to Intacct. Because Intacct’s primary developer surface remains its XML Web Services API (with a newer REST API at developer.sage.com/intacct), architects must plan for XML envelope construction, session-based authentication, and Intacct’s DTD-constrained request schema alongside Commerce’s modern token-based REST API.
Logical Architecture & Data Flow
Architecture Component Breakdown
Authentication Architecture
Adobe Commerce authenticates integration requests via OAuth 1.0a (for integration tokens) or bearer tokens issued through the POST /V1/integration/admin/token endpoint using admin credentials. For server-to-server integrations, a long-lived Integration Access Token generated in the Commerce Admin is the standard pattern. Sage Intacct uses a session-based model: the middleware first posts an XML <login> function with a Web Services sender ID, sender password, company ID, user ID, and user password to obtain a sessionid, which is then included in subsequent request envelopes. Sessions expire after approximately 30 minutes of inactivity, so middleware must implement session renewal logic. Neither platform natively supports OAuth 2.0 on the inbound integration path in its classic XML API surface, making this a mixed-auth architecture requiring secure credential vaulting (e.g., HashiCorp Vault or AWS Secrets Manager).
Data Flow Diagram
graph LR A["Adobe Commerce\nOrder Placed"] -->|"POST event"| B["Middleware\niPaaS"] B -->|"XML envelope"| C["Intacct XML API\nAR Invoice"] C -.->|"Invoice ID"| B B -->|"Update order"| A D["Adobe Commerce\nProduct Catalog"] -->|"SKU sync"| B B -->|"Create item"| E["Intacct\nInventory"]
Enterprise Use Cases
Use Case 1: Order-to-AR Invoice Automation
processing status, the middleware polls GET /V1/orders?searchCriteria[filter_groups][0][filters][0][field]=status&value=processing or receives an event push. It maps order fields to an Intacct create_invoice XML function, populating CUSTOMERID, WHENCREATED, INVOICEITEMS, and CURRENCY. Idempotency is enforced by storing the Commerce entity_id as a custom field in Intacct to prevent duplicate invoices on retry.Use Case 2: Payment Capture to Cash Receipt
GET /V1/invoices/{id} with state=2), the middleware constructs an Intacct create_arpayment XML request referencing the previously created invoice by RECORDKEY. This closes the AR loop and updates the GL cash account, eliminating manual bank reconciliation steps and reducing DSO.Use Case 3: Customer Account Bi-Directional Sync
POST /V1/customers in Commerce are propagated to Intacct as AR customer records using create_customer. Conversely, customers created by finance in Intacct are synced back to Commerce. The Intacct CUSTOMERID is stored as a Commerce customer attribute to maintain a persistent cross-system key. Credit limits set in Intacct can be pushed back to Commerce’s B2B company credit module via PUT /V1/companyCredits/{id}.Use Case 4: Product/SKU Master Data & Inventory Sync
POST /V1/products trigger item creation in Intacct’s inventory module using the create_item function, mapping Commerce sku to Intacct ITEMID. Fulfillment events (shipments created via POST /V1/order/{orderId}/ship) drive inventory deduction in Intacct via create_ictransaction, keeping COGS and on-hand quantities accurate without manual journal entries.Use Case 5: Credit Memo & Refund Reconciliation
GET /V1/creditmemos/{id}), the middleware creates a corresponding Intacct create_aradjustment record linked to the original invoice. This ensures the AR subledger and GL remain in balance without manual override, and provides auditors with a traceable refund trail from the eCommerce transaction to the ledger entry.Standard API Field Mapping
| Entity | Sage Intacct Field | Method | Adobe Commerce Field | Method | Type |
|---|---|---|---|---|---|
| Customer | CUSTOMERID |
POST | id |
GET | String / Integer |
| Customer | NAME |
POST | firstname + lastname |
GET | String (concat) |
| Customer | EMAIL |
POST | email |
GET | String |
| AR Invoice | WHENCREATED |
POST | created_at |
GET | ISO 8601 DateTime |
| AR Invoice | TOTALAMOUNT |
POST | grand_total |
GET | Decimal |
| AR Invoice | CURRENCY |
POST | order_currency_code |
GET | ISO 4217 String |
| Invoice Line | ITEMID |
POST | sku |
GET | String |
| Invoice Line | QUANTITY |
POST | qty_ordered |
GET | Decimal |
| Invoice Line | UNIT_PRICE |
POST | price |
GET | Decimal |
| Cash Receipt | PAYMENTAMOUNT |
POST | base_amount_paid |
GET | Decimal |
| Shipment | DATESHIPPED |
PATCH | created_at (shipment) |
GET | ISO 8601 DateTime |
| Credit Memo | ADJUSTMENTTYPE |
POST | adjustment_negative |
GET | String / Decimal |
Limitations & Rate Limits
Sage Intacct Rate Limits
| Constraint | Limit | Detail | Mitigation |
|---|---|---|---|
| Concurrent Sessions | DATA_UNAVAILABLE | Session concurrency limits not publicly documented; varies by subscription tier | Pool and reuse session tokens; implement session renewal within middleware |
| API Requests/Hour | DATA_UNAVAILABLE | Throughput limits not published in developer documentation | Implement exponential backoff; batch multiple operations in a single XML envelope using function blocks |
| XML Envelope Batch Size | Up to 100 functions per request | A single HTTPS POST can contain multiple function calls in one envelope | Batch invoice line creation to reduce total request volume |
| Session Expiry | ~30 min inactivity | Sessions expire after idle period; not a hard published number | Re-authenticate proactively before session expiry; cache sessionid with TTL |
Adobe Commerce Rate Limits
| Constraint | Limit | Detail | Mitigation |
|---|---|---|---|
| REST API Rate Limit (Cloud) | DATA_UNAVAILABLE | Adobe Commerce Cloud rate limits are configurable per deployment; not universally published | Configure nginx rate limiting at infrastructure level; use bulk async endpoints for high-volume writes |
| Bulk Async Endpoint | Configurable (default no hard limit in docs) | POST /async/bulk/V1/products processes operations asynchronously via message queue |
Use for batch product and inventory updates; poll operation status via GET /V1/bulk/{uuid}/status |
| Search Results Page Size | Default 20, max configurable | REST search endpoints return paginated results; pageSize parameter controls page size |
Implement cursor-based pagination using searchCriteria[currentPage] for order polling |
| Admin Token Lifetime | 4 hours (default) | Admin bearer tokens expire; configurable in Stores > Configuration > Services > OAuth | Use long-lived Integration Access Tokens instead of admin tokens for server-to-server flows |
Critical Engineering Constraints
locationid or entity context in each XML envelope. Misrouted transactions post to the wrong entity and require manual reversal — a high-risk error in multi-subsidiary B2B Commerce deployments.Official Documentation
Sage Intacct
Intacct Developer Portal — XML Web Services & REST API
VIEW DOCS →
Sage Intacct
XML Web Services Guide — Authentication & Functions
VIEW DOCS →
Adobe Commerce
REST API Overview — Authentication & Endpoints
VIEW DOCS →
Adobe Commerce
Bulk & Asynchronous Web Endpoints
VIEW DOCS →
Adobe Commerce
B2B Integration Guide — Company Credit & Quotes
VIEW DOCS →
Sage Intacct
Sage Intacct REST API (New Developer Portal)
VIEW DOCS →