ml-connector
SAP S/4HANACoupa

SAP S/4HANA and Coupa integration

SAP S/4HANA runs your enterprise procurement and finance. Coupa manages your spend and supplier ecosystem. Connecting the two keeps supplier master data and purchase orders synchronized across your procurement landscape. New suppliers created in SAP flow into Coupa, and purchase order changes in either system are reflected in the other, eliminating manual re-entry and reconciliation work.

How SAP S/4HANA works

SAP S/4HANA exposes suppliers, customers, business partners, purchase orders, invoices, GL accounts, cost centers, and journal entries through OData V2 and V4 REST APIs over HTTPS. Each S/4HANA instance has a tenant-specific API base URL, and authentication uses OAuth 2.0 Client Credentials with scopes defined in Communication Arrangements. Tokens are short-lived and must be refreshed before expiry. SAP S/4HANA has no native webhook system, so data is read by polling with delta tokens or timestamp filters. GL Account and Cost Center entities are read-only; GL Account Line Items should not be used for bulk extracts.

How Coupa works

Coupa exposes suppliers, purchase orders, invoices, payments, and lookup values through a REST API at the customer's tenant URL. Authentication uses OAuth 2.0 client-credentials flow with an X-Coupa-API-Version header. Coupa pushes events to webhooks for requisitions, purchase orders, invoices, suppliers, expense reports, and payments, with signature verification via HMAC-SHA256. Webhook bodies are capped at 256KB. Coupa enforces rate limits on 5xx and 429 responses, allowing up to 3 retries with exponential backoff capped at 30 seconds.

What moves between them

Supplier and purchase order records flow from SAP S/4HANA into Coupa. New suppliers created in SAP (A_Supplier and A_SupplierCompany entities) are extracted via OData polling and inserted into Coupa as Supplier records. Purchase orders and their line items flow the same direction on a schedule you control. Coupa webhook events for purchase orders and suppliers are logged but not currently written back to SAP, keeping the primary flow unidirectional to avoid conflicts with SAP's master data governance.

How ml-connector handles it

ml-connector stores SAP OAuth credentials and queries the tenant-specific token endpoint to retrieve short-lived bearer tokens, caching them and refreshing before expiry. It polls SAP's OData V4 APIs for suppliers and purchase orders using delta tokens or LastChangeDateTime filters to capture changes incrementally. On the Coupa side, it registers a webhook endpoint, verifies webhook signatures using HMAC-SHA256, and consumes purchase order and supplier events in real time. Supplier records from SAP are mapped to Coupa Supplier entities by external ID to prevent duplicates. Purchase orders map SAP line items to Coupa PurchaseOrder line items, translating cost centers to Coupa dimensional values where they exist. When Coupa returns rate-limit responses (429), ml-connector backs off and retries up to 3 times with exponential jitter. SAP GL Account APIs are read-only, so procurement costing data flows only from SAP into Coupa.

A real-world example

A large manufacturing enterprise runs SAP S/4HANA for global procurement and finance, with Coupa deployed to manage supplier relationships and spend analytics across ten business units. Before the integration, procurement teams manually entered new suppliers into both systems after each onboarding, and purchase order changes required re-keying to keep the spend platform current. With SAP S/4HANA and Coupa connected, supplier master data flows automatically, PO creation and changes propagate in real time through Coupa webhooks, and the procurement team can track spend against a single source of truth.

What you can do

  • Sync supplier master data from SAP S/4HANA to Coupa on a schedule you control, preventing duplicate supplier entry.
  • Automatically transfer purchase orders and line items from SAP into Coupa with full cost center mapping.
  • Verify Coupa webhook signatures with HMAC-SHA256 and consume real-time purchase order and supplier events.
  • Manage OAuth 2.0 tokens for both platforms, caching SAP tokens and refreshing before expiry to prevent auth failures.
  • Handle Coupa rate limiting with exponential backoff retries and full audit trail for every supplier and order record.

Questions

Which direction does data flow between SAP S/4HANA and Coupa?
The main flow is from SAP S/4HANA into Coupa. Suppliers and purchase orders are extracted from SAP via OData polling and inserted into Coupa. Coupa webhook events for purchase orders and suppliers are consumed and logged but not written back to SAP. GL accounting data in SAP is read-only and remains the system of record.
How does ml-connector handle the differences in how these systems authenticate?
SAP S/4HANA uses OAuth 2.0 with tenant-specific token endpoints, and tokens are short-lived (typically 12 hours). ml-connector caches the token and refreshes it before expiry. Coupa uses OAuth 2.0 client credentials with an X-Coupa-API-Version header pinning. ml-connector manages both credential sets encrypted and presents the correct headers to each platform.
What happens if Coupa returns a rate-limit error or timeout?
When Coupa returns a 429 rate-limit response or a 5xx error, ml-connector backs off and retries up to 3 times with exponential backoff capped at 30 seconds. Every record carries a full audit trail and can be retried if a call fails.

Related integrations

Connect SAP S/4HANA and Coupa

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

Get started