ml-connector
SAP S/4HANAShipBob

SAP S/4HANA and ShipBob integration

SAP S/4HANA manages your procurement and finance across the business. ShipBob warehouses and ships your inventory at fulfillment centers in multiple locations. Connecting the two keeps your purchase orders, warehouse activity, and goods receipts in sync across both systems without re-keying or manual reconciliation. When ShipBob receives goods against a SAP purchase order, that receipt flows back into SAP as a goods receipt document. When ShipBob ships an order from inventory, the deduction updates SAP's stock and can trigger return-to-vendor workflows.

How SAP S/4HANA works

SAP S/4HANA exposes purchase orders, purchase requisitions, supplier invoices, goods receipts, business partners, suppliers, inventory locations, cost centers, and GL accounts through OData V2 and V4 REST APIs served over HTTPS from a tenant-specific URL. Authentication uses OAuth 2.0 Client Credentials with scopes defined in a Communication Arrangement configured by an SAP admin before API access is enabled. Tokens are short-lived (typically 12 hours) and must be refreshed before expiry. SAP S/4HANA has no native webhooks, so purchase order data is read by polling with timestamp or delta token filters on a schedule controlled by your operations.

How ShipBob works

ShipBob exposes purchase orders as Warehouse Receiving Orders, shipments, returns, inventory, products, and billing invoices through a REST API with OAuth 2.0 access tokens and Personal Access Tokens. All calls require an Authorization Bearer header and a shipbob_channel_id header to identify the application channel. Webhooks cover receiving (wro.created, wro.completed), shipments (order.shipped, order.shipment.tracking.updated), returns (return.created, return.completed), and billing events, authenticated with HMAC-SHA256 signature verification. OAuth access tokens expire in 1 hour and are refreshed using a 30-day refresh token.

What moves between them

Purchase orders flow from SAP S/4HANA into ShipBob as Warehouse Receiving Orders, creating inbound shipments at the assigned fulfillment center. ShipBob webhook events for wro.completed and wro.updated trigger goods receipt postings back into SAP S/4HANA, updating purchased item quantities and GL accounts. Shipment tracking from ShipBob flows into SAP S/4HANA delivery documents and billing records. Returns initiated in ShipBob generate return documents in SAP S/4HANA for cost center and supplier reconciliation. The direction is bidirectional: orders flow out, receipts and shipments flow back on a real-time basis via webhooks.

How ml-connector handles it

ml-connector stores SAP OAuth credentials and ShipBob access tokens encrypted, refreshing the SAP token before expiry and the ShipBob token on each 1-hour boundary. On the SAP side, it polls purchase orders using OData filters on LastChangeDateTime, mapping each order to ShipBob's Warehouse Receiving Order schema with line items, quantities, and receiving locations. ShipBob's webhook listener receives wro.completed and wro.updated events, validates the HMAC-SHA256 signature, and posts the corresponding goods receipt into SAP S/4HANA using the purchase order reference and line item quantities. Shipment tracking webhooks (order.shipped, order.shipment.tracking.updated) map to SAP delivery documents and billing invoices, keeping procurement and warehouse in lock-step. Retries handle transient failures on both sides, and every record carries an audit trail of when it was synced, what data moved, and what errors occurred.

A real-world example

A mid-sized distributor buys inventory from regional suppliers through SAP S/4HANA and warehouses the stock across three fulfillment centers managed by ShipBob. Before the integration, the warehouse team received SAP POs via email and entered them manually into ShipBob's receiving module, creating duplicate work and occasional line-item mismatches. When ShipBob completed a warehouse receiving order, the warehouse manager sent a spreadsheet to the SAP team for goods receipt posting. With SAP S/4HANA and ShipBob connected, purchase orders flow automatically into ShipBob the moment the buyer releases them in SAP, warehouse staff scan and receive against the correct line items, and the receipt posts back to SAP automatically so the inventory and GL accounts are updated with no manual intervention.

What you can do

  • Send SAP S/4HANA purchase orders to ShipBob as Warehouse Receiving Orders at the correct fulfillment center, mapped by location and supplier.
  • Post ShipBob warehouse receipts back into SAP S/4HANA as goods receipt documents with quantities tied to the original purchase order.
  • Sync shipment tracking from ShipBob into SAP S/4HANA delivery and billing documents so procurement visibility matches warehouse reality.
  • Handle SAP OAuth 2.0 token refresh and ShipBob Personal Access Token expiry so credentials stay valid and API calls never fail due to auth.
  • Track every order, receipt, and shipment in an audit log and replay failed documents if a downstream system was temporarily unavailable.

Questions

Which direction does data move between SAP S/4HANA and ShipBob?
The main flow is bidirectional. Purchase orders move from SAP S/4HANA to ShipBob as Warehouse Receiving Orders, triggering inbound warehouse activity. When ShipBob completes a receiving order, that receipt posts back into SAP S/4HANA as a goods receipt document, updating inventory and GL accounts. Shipment tracking from ShipBob flows into SAP delivery and billing records for end-to-end procurement visibility.
How does ml-connector handle the different authentication models between SAP and ShipBob?
ml-connector stores both OAuth credential sets encrypted and manages token refresh on each system's schedule. SAP tokens are refreshed before the 12-hour expiry window; ShipBob access tokens are refreshed every hour when a 1-hour boundary is crossed. The channel ID and webhook signature verification are validated on every ShipBob webhook so writes are only accepted from your own fulfillment channel.
What happens if a goods receipt fails to post to SAP or a PO fails to send to ShipBob?
Every record is stored with a timestamp and attempt count. ml-connector retries transient failures up to a configurable limit with exponential backoff, and logs the error in an audit trail. If a retry succeeds, the record is marked complete; if all retries fail, the record is flagged for manual review so the operations team can investigate and replay the document once the issue is resolved.

Related integrations

Connect SAP S/4HANA and ShipBob

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

Get started