Sage X3 and BigCommerce integration
Sage X3 runs manufacturing, distribution, and finance. BigCommerce runs your online store. Connecting the two moves order revenue from BigCommerce into Sage X3's general ledger automatically, so your ERP always reflects what you sold online. Order totals post to the correct GL accounts by sales channel, refunds post as negative entries, and the accounting team no longer re-enters web sales by hand.
What moves between them
Orders and refunds flow from BigCommerce into Sage X3. BigCommerce webhook events (store/order/created, store/order/updated, store/order/statusUpdated) trigger ml-connector to fetch the full order, calculate the order total and any refund amounts, and post revenue and cost-of-goods GL entries into Sage X3 mapped to the configured GL account for that sales channel. Refunds post as negative entries. New orders are posted immediately; status updates may adjust the GL date if orders move through pending-to-confirmed states. BigCommerce order totals are read-only for accounting purposes, so ml-connector does not modify BigCommerce records.
How ml-connector handles it
ml-connector registers a webhook endpoint with BigCommerce and validates all incoming events using the HMAC-SHA256 signature in the X-BC-Signature header with the client secret. On receipt of an order event, it fetches the full order from BigCommerce REST API, extracts the order subtotal and refund amounts, and maps each sales channel code to a Sage X3 GL account configured per customer. It then posts a GL entry into Sage X3 via GraphQL (Xtrem) or REST api1 with the order date, amount, and GL account. For OAuth2 (Sage X3 v12+ with GraphQL), ml-connector refreshes the bearer token when a call returns 401 and caches the 30-day refresh token. For HTTP Basic (REST api1), credentials are stored encrypted in the cell database. Refunds trigger separate GL entries with negative amounts posted to the same GL account as the original order. If a webhook delivery fails, BigCommerce retries according to its 11-retry schedule over 48 hours; ml-connector stores the webhook payload and idempotency key (order ID + refund ID if applicable) to prevent duplicate GL postings on retry. Sage X3 has no webhooks, so if the configuration changes or an order needs replay, ml-connector can fetch the order again from BigCommerce and re-post. Every post carries a full audit trail and references the originating BigCommerce order ID.
A real-world example
A mid-market apparel distributor runs Sage X3 for manufacturing, inventory, and accounting, and uses BigCommerce for direct-to-consumer online sales across three storefronts (branded lines for different customer segments). Before the integration, the e-commerce team exported daily orders from BigCommerce, and the accounting team manually entered the daily sales totals into Sage X3 by sales channel, then spent hours reconciling differences at month-end close. With Sage X3 and BigCommerce connected, each order posts to the correct GL account immediately upon confirmation, refunds post as negative entries, and month-end reconciliation is complete before close procedures begin.
What you can do
- Post BigCommerce orders to Sage X3 GL accounts mapped by sales channel, with refunds as negative entries.
- Validate BigCommerce webhook signatures using HMAC-SHA256 and the client secret.
- Refresh Sage X3 OAuth2 tokens on 401 response and handle HTTP Basic authentication for REST api1 installations.
- Track BigCommerce order events (created, updated, statusUpdated, refunds) and route them to the correct GL account per channel.
- Maintain a full audit trail of every order-to-GL posting with order ID, amount, date, and account for complete traceability.
Questions
- What records move from BigCommerce to Sage X3?
- Order totals and refunds move from BigCommerce into Sage X3's general ledger. Each order posts as a GL entry (debit to Accounts Receivable or Sales, credit to Revenue) mapped to the GL account configured for that sales channel. Refunds post as negative entries on the same GL account. BigCommerce order details remain in BigCommerce; only the financial summary posts to Sage X3.
- How does ml-connector handle BigCommerce's webhook stubs and Sage X3's lack of webhooks?
- BigCommerce webhooks deliver event type and resource ID only; ml-connector immediately calls the BigCommerce REST API to fetch the full order details, extract amounts, and calculate refunds. Sage X3 has no outbound webhooks, so if a configuration changes or replay is needed, ml-connector can fetch the order again from BigCommerce and re-post into Sage X3 without duplication using the order ID as the idempotency key.
- Which Sage X3 versions and authentication methods are supported?
- Both REST api1 (V6+) with HTTP Basic authentication and GraphQL (Xtrem) on V12+ with OAuth2 are supported. OAuth2 requires a Connected Application and automatically refreshes tokens when they expire. HTTP Basic requires the customer to enable it in the Sage X3 nodelocal.js configuration. Both authenticate against the customer-specific server URL; there is no central Sage X3 hostname.
Related integrations
More Sage X3 integrations
Other systems that connect to BigCommerce
Connect Sage X3 and BigCommerce
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started