ml-connector
Sage 100UPS

Sage 100 and UPS integration

Sage 100 runs your order management, inventory, and shipping operations. UPS handles shipment rating and tracking. Connecting the two keeps your order fulfillment automated from dispatch to tracking. Sales orders in Sage 100 flow into UPS for rating, shipment creation, and label generation, and tracking updates come back into Sage 100 so your customers always have visibility. ml-connector handles the complexity of the local Sage agent, OAuth with UPS, address validation, and shipment retries.

How Sage 100 works

Sage 100 is an on-premises ERP that covers sales orders, customers, inventory, purchase orders, accounts payable, and the general ledger through SOAP eBusiness Web Services or a BOI COM layer accessed via a local Windows agent. The SOAP interface exposes only sales orders and customers; full access to orders, inventory, and AP requires the BOI agent running on the customer's server. Sage 100 has no webhooks or event stream, so shipment requests are read by polling sales order records via DateLastUpdated or DateCreated fields.

How UPS works

UPS exposes shipment creation, rating, tracking, address validation, and pickup scheduling through REST APIs. Authentication uses OAuth2 client credentials with a client_id and client_secret, and tokens refresh approximately every four hours. UPS can push tracking events through Track Alert API subscriptions (up to 100 tracking numbers per subscription, valid for 14 days), and also supports polling via Quantum View for shipment visibility feeds. There is no billing or invoice API.

What moves between them

Sales orders from Sage 100 flow into UPS for rating and shipment creation. For each order, ml-connector reads the ship-to address and line items from Sage 100, validates the address against UPS, requests a rate quote for the weight and destination, creates a shipment in UPS with the chosen service level, and stores the UPS tracking number back in Sage 100 as a reference. Tracking events from UPS flow back into Sage 100 via Track Alert subscriptions (renewed every 14 days) so the sales order record always shows current shipment status.

How ml-connector handles it

ml-connector stores the UPS OAuth credentials encrypted and refreshes the bearer token when approaching expiry or when UPS returns 401. For Sage 100, it stores the local agent endpoint and credentials (API key or mTLS) encrypted, and connects to the BOI layer on the customer's server to read sales orders and write tracking back. Because Sage 100 has no webhooks, ml-connector polls DateLastUpdated on sales orders every 15 minutes to detect new or modified orders ready to ship. Address validation against UPS happens before rating to catch invalid addresses early. Shipment creates are tagged with an idempotency key derived from the Sage order number and date to prevent duplicate shipments if a create call times out and is retried. Track Alert subscriptions are renewed every 13 days so the 14-day window never expires. Every shipment carry, rating, and tracking update is logged with a full audit trail so failed shipments can be replayed after issues are resolved.

A real-world example

A mid-sized distributor runs Sage 100 on-premises to manage customer orders, inventory, and fulfillment. They ship multiple carrier services (ground, express) based on customer service level. Before the integration, the warehouse team manually rated each order in the UPS website, selected a service, created the shipment, and copied the tracking number back into Sage 100 for customer communication. With Sage 100 and UPS connected, each new order in Sage 100 automatically rates against UPS based on weight and destination, creates a shipment, and populates the tracking number, so the warehouse focuses only on picking and packing. Tracking updates come back into Sage 100 automatically, and customers see current status without manual updates.

What you can do

  • Automatically read sales orders from Sage 100 via polling and create shipments in UPS with the appropriate service level.
  • Validate ship-to addresses against UPS before creating shipments to catch errors early.
  • Store UPS tracking numbers in Sage 100 sales order records so customer service and fulfillment teams have one source of truth.
  • Authenticate to Sage 100 via the local BOI Windows agent and to UPS via OAuth2, with encrypted credential storage.
  • Receive tracking updates from UPS via Track Alert API subscriptions and post them back into Sage 100.

Questions

How does ml-connector connect to Sage 100 if there is no cloud API?
ml-connector stores the endpoint and credentials for the local Sage 100 BOI Windows agent on the customer's server, encrypted. It connects to that agent to read sales orders and write tracking data back, bridging from the customer's on-premises network to UPS without exposing the Sage server directly.
Does Track Alert subscription expiry need manual renewal?
No. ml-connector renews Track Alert subscriptions every 13 days automatically, so the 14-day subscription window never expires. You will not need to manually resubscribe or lose tracking visibility.
What happens if UPS rates a shipment as ineligible or the address is invalid?
Address validation runs before rating, so most invalid addresses are caught and logged for manual review before a shipment create is attempted. If UPS declines a rate or shipment create, ml-connector logs the full response and pauses that order, flagging it for the fulfillment team to resolve (e.g. split the shipment or correct the address).

Related integrations

Connect Sage 100 and UPS

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

Get started