ml-connector
Sage 300Adobe Commerce

Sage 300 and Adobe Commerce integration

Sage 300 runs your enterprise finance, and Adobe Commerce runs your online store. Connecting the two keeps your accounting current with every order placed online. Customers in your store sync to Sage 300's AR customer file, and orders convert to invoices that post into your general ledger without re-keying. ml-connector bridges the very different auth models (HTTP Basic for Sage 300, OAuth for Adobe) and moves data on a schedule you control.

How Sage 300 works

Sage 300 is a Windows-hosted ERP system running on SQL Server with REST and OData APIs. It exposes AP vendors, AR customers, GL accounts, purchase orders, and invoices through JSON and XML over HTTPS. Authentication uses HTTP Basic Auth with uppercase username and password sent in every request. The API user must be created in Administrative Services with Web API security group assigned. There are no webhooks or change-data-capture, so all data retrieval is pull-based via OData filtering ($filter=DocumentDate gt '2026-01-01') and pagination ($skip, $top, $orderby).

How Adobe Commerce works

Adobe Commerce offers REST and GraphQL APIs for managing orders, invoices, customers, and products. PaaS deployments use OAuth 1.0a integration credentials (consumer_key, consumer_secret, access_token, access_token_secret) or an admin bearer token, while SaaS uses IMS OAuth 2.0 client credentials with 24-hour token expiry. The platform supports both synchronous webhooks (for versions 2.4.4 and later) and asynchronous Adobe I/O Events. GL account logic is applied by the ERP; Adobe Commerce exposes order and invoice data only, not accounting entries.

What moves between them

Orders and invoices flow from Adobe Commerce into Sage 300 on a daily or weekly polling schedule. Customer records sync in the same direction, creating or updating AR customers as needed. Sage 300 does not write back to Adobe Commerce; the integration is read-only on the commerce side. Shipment and invoice details map to Sage 300 AR invoice batches and GL entries for revenue recognition.

How ml-connector handles it

ml-connector stores Sage 300's HTTP Basic Auth credentials (uppercase username and password) and Adobe Commerce OAuth tokens securely, refreshing the Adobe token before expiry. Because Sage 300 has no webhooks, ml-connector polls the REST API on a fixed cadence using OData filters to fetch only new or modified orders and invoices since the last sync run. It maps Adobe Commerce Order records to Sage 300 ARInvoiceBatches and customer records to ARCustomers, matching Adobe's store view code to the correct Sage 300 company. Retries handle temporary IIS timeouts and OAuth 429 rate limits. Every record carries a full audit trail, so a failed GL posting can be replayed once the error is corrected.

A real-world example

A mid-sized online retailer runs Sage 300 for AP, AR, and GL, and Adobe Commerce (PaaS) for their B2C storefront. Before the integration, the accounting team exported orders from Adobe every day and manually entered them into Sage 300 as AR invoices, a process that took 30 minutes and created opportunity for invoice-number collisions and data entry errors. With Sage 300 and Adobe Commerce connected, every order placed online becomes an AR invoice in Sage 300 the next morning, the customer record updates automatically, and month-end reconciliation between store orders and GL revenue is instantaneous.

What you can do

  • Sync orders from Adobe Commerce into Sage 300 AR invoices on a daily or weekly polling schedule.
  • Map customer records from Adobe to Sage 300 AR customers, creating or updating as needed.
  • Bridge HTTP Basic Auth (Sage 300) and OAuth 1.0a (Adobe PaaS) authentication models.
  • Handle OData filtering and pagination on the Sage 300 side, and refresh Adobe tokens before expiry.
  • Maintain a full audit trail and replay failed GL postings when downstream issues are resolved.

Questions

Which direction does data move between Sage 300 and Adobe Commerce?
Orders, invoices, and customers flow from Adobe Commerce into Sage 300 on a polling schedule. Sage 300 does not write back to Adobe Commerce. The integration is read-only on the e-commerce side, so your storefront operations are not affected by the accounting sync.
How does the integration handle Sage 300's lack of webhooks?
Sage 300 has no webhooks or change-data-capture, so ml-connector polls the REST API on a fixed schedule (daily or weekly, your choice) using OData filters to fetch only new or modified orders since the last run. This avoids unnecessary calls and keeps your IIS server load predictable.
What authentication does ml-connector use for each system?
For Sage 300, ml-connector stores HTTP Basic Auth credentials (username and password, both uppercase) and sends them with every request. For Adobe Commerce PaaS, it uses OAuth 1.0a integration credentials (consumer_key, consumer_secret, access_token, access_token_secret) and refreshes the token before expiry to avoid failed calls.

Related integrations

Connect Sage 300 and Adobe Commerce

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

Get started