ml-connector
SAP Business OneShipBob

SAP Business One and ShipBob integration

SAP Business One manages purchasing, inventory, and fulfillment. ShipBob runs the actual warehouse and shipment logistics. Connecting the two keeps inventory counts and purchase orders in sync between your finance system and your fulfillment network. Items you buy flow into ShipBob as receiving notices, and shipment confirmations flow back into SAP Business One to update sales orders and inventory balances. ml-connector handles the different authentication schemes and data models on each side.

How SAP Business One works

SAP Business One exposes business partners, purchase orders, items, inventory, incoming payments, journal entries, and chart of accounts through OData v4 REST at a customer-specific Service Layer URL (https://<customer-server>:<port>/b1s/v2/). It authenticates with a session token obtained by POST to /Login, which returns a B1SESSION cookie valid for 30 minutes of inactivity. Webhooks are available in v10.0 FP 2602+ if the server-side Webhook Messenger Service is activated, but polling with the UpdateDate filter is recommended as the default since on-premise deployments often require explicit network exposure. Sessions should be reused rather than created per-request; there is no published idempotency scheme, so ml-connector checks for duplicates via DocNum before retrying a failed write.

How ShipBob works

ShipBob exposes orders, shipments, products, variants, inventory, warehouse receiving orders (WRO), returns, billing, and fulfillment centers through REST with version-prefixed endpoints (base https://api.shipbob.com with path prefix /2026-01/). It authenticates with OAuth2 access tokens (1-hour lifetime) or personal access tokens for single-merchant integrations, and every call requires an Authorization Bearer header plus a shipbob_channel_id header identifying which application channel is making the request. ShipBob uses webhooks exclusively for real-time events such as order.shipped, order.shipment.tracking.updated, return.created, and wro.updated, verified with HMAC-SHA256 signatures. Inventory dimensions are in inches and weights in ounces. All writes to ShipBob require the shipbob_channel_id header and write operations are only permitted on behalf of the authenticating channel.

What moves between them

The main flow runs from SAP Business One to ShipBob. When a purchase order is created or modified in SAP Business One, ml-connector reads it and sends it to ShipBob as a warehouse receiving order (WRO), triggering the warehouse to receive and process that shipment. Inventory changes in SAP Business One (Items and current stock levels) flow to ShipBob to maintain accurate available-to-ship quantities. In the reverse direction, ShipBob webhooks push shipment confirmations, tracking updates, and order fulfillment events back into SAP Business One, updating sales order fulfillment status and inventory balances. The sync cadence for outbound (SAP to ShipBob) is polling-based on a schedule you control, while inbound (ShipBob to SAP) is webhook-driven for real-time updates.

How ml-connector handles it

ml-connector maintains a SAP Business One session token, reusing the session across multiple API calls to avoid cold-start overhead and respecting the 30-minute inactivity timeout. For each customer, it accepts the full Service Layer URL (e.g., https://customer-server:50001/b1s/v2/) since SAP Business One publishes no global endpoint. When creating warehouse receiving orders in ShipBob, ml-connector maps SAP Business One items and quantities to ShipBob products and variants, converting weights to ounces and dimensions to inches per ShipBob requirements. ShipBob channel_id is stored encrypted alongside the OAuth token, and is included on every write operation. For webhook inbound, ml-connector verifies ShipBob HMAC-SHA256 signature on each event and translates shipment status updates back to the appropriate SAP Business One purchase order or sales order status, using DocNum for deduplication. If a ShipBob API call returns HTTP 429 (rate limit), ml-connector backs off and retries. Duplicate detection on the SAP Business One side uses the DocNum field; on ShipBob, the order ID and WRO ID serve as the idempotent key.

A real-world example

A small-to-midsize e-commerce retailer runs SAP Business One for accounting, purchasing, and inventory on a dedicated server and uses ShipBob to manage fulfillment across two regional warehouses. Before the integration, the purchasing team created purchase orders in SAP Business One, then manually entered the same items and quantities into ShipBob receiving, and inventory counts between the two systems drifted as orders shipped from the warehouse without real-time sync back to SAP. With SAP Business One and ShipBob connected, each purchase order automatically creates a receiving notice in ShipBob, shipments trigger automatic inventory deductions in SAP Business One, and the finance team has a single source of truth for inventory value and available stock without manual re-entry.

What you can do

  • Send purchase orders from SAP Business One to ShipBob as warehouse receiving orders (WRO), with automatic item and quantity mapping.
  • Synchronize current inventory levels and item master data from SAP Business One to ShipBob to keep available-to-ship quantities accurate.
  • Receive shipment confirmations, tracking updates, and fulfillment status from ShipBob via webhooks and post those updates back into SAP Business One purchase orders and sales orders.
  • Authenticate against both SAP Business One session token endpoint and ShipBob OAuth2 bearer token, managing expiry and refresh.
  • Verify ShipBob webhook signatures with HMAC-SHA256 and deduplicate updates using order ID and DocNum to prevent duplicate posting.

Questions

Which direction does data move between SAP Business One and ShipBob?
Purchase orders and inventory flow from SAP Business One to ShipBob on a polling schedule you set, so ShipBob knows what to receive and has accurate item counts. Shipment confirmations, tracking updates, and order fulfillment status flow back from ShipBob to SAP Business One via webhooks in real-time, updating the status of sales and purchase orders. Reference data such as items and quantities must be kept aligned in both directions so orders map correctly.
How does ml-connector handle SAP Business One session authentication and inactivity timeout?
ml-connector creates a B1SESSION token by POSTing to the /Login endpoint and reuses that session across multiple API calls within the 30-minute inactivity window to avoid cold-start overhead. If a session expires (SAP Business One returns error code -5002), ml-connector automatically re-authenticates and retries the failed request. Sessions are not created per-request; they are pooled and reused.
What unit conversions and data mappings are required between the two systems?
ShipBob requires inventory dimensions in inches and weights in ounces; ml-connector converts SAP Business One item dimensions and weights to those units. Items and product variants are matched by SKU or an agreed mapping field so a purchase order line item in SAP Business One correctly identifies the variant in ShipBob. Quantities flow as-is, and warehouse location mapping is configured once during setup so each purchase order routes to the correct fulfillment center.

Related integrations

Connect SAP Business One and ShipBob

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

Get started