ml-connector
Sage X3SAP Ariba

Sage X3 and SAP Ariba integration

Sage X3 runs finance, procurement, and inventory for manufacturers and distributors. SAP Ariba runs procurement and supplier management in the cloud. Connecting the two keeps your ERP purchase orders aligned with Ariba requisitions and contracts, and supplier invoices from Ariba flow into Sage X3 payables without manual re-entry. ml-connector bridges the different APIs, token lifecycles, and async job patterns on each side, moving data on a schedule tied to your procurement cycle.

How Sage X3 works

Sage X3 is an on-premise and cloud ERP exposing suppliers, customers, purchase orders, supplier invoices, sales invoices, products, GL accounts, and journal entries through REST (api1) with a customer-specific server URL and folder name, or through GraphQL (Xtrem) on V12 and later. Authentication uses OAuth2 client credentials for GraphQL or HTTP Basic Authentication for the REST api1 path. Access tokens expire in 5 minutes with 30-day refresh tokens. Sage X3 has no native webhooks or event notifications, so procurement records are read by polling with delta detection using the updatedDate and modifiedDateTime fields. Entity class names and analytical dimensions vary per customer configuration.

How SAP Ariba works

SAP Ariba is a cloud procurement platform exposing purchase orders, invoices, requisitions, contracts, and supplier records through REST Open APIs at openapi.ariba.com and api.ariba.com. Every API call requires OAuth 2.0 client credentials PLUS a static API key passed in the request header, with the realm passed as a query parameter. OAuth tokens expire in 3,600 seconds (one hour). SAP Ariba has no native webhooks; the standard pattern is to submit async reporting jobs filtered by date ranges and poll for completion by job ID. View templates must be pre-created in the Ariba UI before async reporting will return data. Ariba rate limits vary by endpoint and cannot be increased, and most write operations use SOAP/cXML rather than REST.

What moves between them

The primary flow moves purchase orders and supplier invoices from SAP Ariba into Sage X3. ml-connector polls Ariba's async reporting endpoints on a schedule, fetching PurchaseOrderFact and InvoiceReportingFact records updated since the last run, and posts them into Sage X3 GL accounts and cost centers. Supplier master records flow in both directions to keep Sage X3 and Ariba synchronized on vendor names, terms, and contact details. GL postings are read-only in Ariba, so ml-connector never writes financial data back. The sync cadence aligns with your procurement cycle, typically daily or weekly depending on invoice processing volume.

How ml-connector handles it

ml-connector stores both credential sets encrypted and manages the dual-credential model SAP Ariba enforces: on each call it presents the OAuth2 bearer token plus the static API key in the request header, and caches the one-hour OAuth token to minimize token endpoint calls. On the Sage X3 side it accepts the full instance URL and folder name per customer, since Sage X3 publishes no shared base hostname, and it manages the 5-minute token expiry by refreshing before every request block. SAP Ariba's async reporting jobs can take several seconds to complete, so ml-connector polls the job status by ID with exponential backoff rather than waiting synchronously. Supplier records are mapped to matching Sage X3 vendor codes, and purchase order line items are split across cost centers so each GL posting lands on a valid account. Because Ariba's view templates determine what data is available, ml-connector validates that required templates exist before submitting reporting jobs. Rate limit responses (HTTP 429) trigger a backoff, and every record carries a full audit trail for replay if a downstream GL post fails.

A real-world example

A mid-sized manufacturing distributor runs Sage X3 for procurement, inventory, and GL management, and uses SAP Ariba for source-to-contract and supplier management across 200+ vendors. Before the integration, the procurement team exported invoices from Ariba weekly and manually matched them to purchase orders in Sage X3, creating duplicate entry work and delaying invoice approval. Discrepancies between Ariba supplier records and Sage X3 vendors led to payment delays and reconciliation effort. With Sage X3 and SAP Ariba connected, invoices flow into Sage X3 automatically matched to their POs, supplier master changes sync in both directions, and the procurement team approves invoices in Ariba while Sage X3's GL stays current without rekeying.

What you can do

  • Poll SAP Ariba's async reporting endpoints and post purchase orders and supplier invoices into Sage X3 GL accounts and cost centers.
  • Keep supplier master records synchronized between SAP Ariba and Sage X3 so vendor changes in one system reflect in the other.
  • Authenticate with SAP Ariba's dual-credential model (OAuth2 plus static API key) and Sage X3's customer-specific server URL and token lifecycle.
  • Map invoice line items to Sage X3 cost centers and GL accounts so payables land on valid accounts without manual allocation.
  • Poll on a procurement cycle schedule with retries for Ariba's async jobs, backoff for rate limits, and a full audit trail on every invoice and PO.

Questions

How does ml-connector handle SAP Ariba's requirement for both OAuth2 and a static API key?
Every call to SAP Ariba includes both the OAuth2 bearer token (cached for the one-hour lifetime) and the static API key in the request header, plus the realm as a query parameter. ml-connector stores both credentials encrypted and refreshes the token before expiry to avoid outages caused by 401 responses.
What happens when SAP Ariba's async reporting jobs take time to complete?
ml-connector submits the job, then polls its status by job ID with exponential backoff rather than blocking. If Ariba returns HTTP 429 (rate limit), ml-connector backs off and retries, since Ariba's limits vary by endpoint and cannot be increased.
How does ml-connector handle Sage X3's customer-specific server URLs and token expiry?
ml-connector accepts the full Sage X3 instance URL and folder name per customer, since X3 publishes no shared base hostname. It manages the 5-minute access token expiry by refreshing before each request block, and refreshes 30-day refresh tokens automatically to maintain continuous access.

Related integrations

Connect Sage X3 and SAP Ariba

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

Get started