ml-connector
Microsoft Dynamics 365 F&OUPS

Microsoft Dynamics 365 F&O and UPS integration

Microsoft Dynamics 365 F&O runs orders, inventory, and finance. UPS handles rating, label creation, and parcel tracking. Connecting the two turns an F&O sales order or shipment into a rated UPS label without anyone re-keying an address into a carrier portal. The UPS tracking number, service level, and freight charge land back on the F&O record, and scan events keep the order's delivery status current. ml-connector handles the very different APIs on each side and moves the data on the schedule and triggers you choose.

How Microsoft Dynamics 365 F&O works

Microsoft Dynamics 365 F&O exposes its data through an OData v4 REST service at a tenant-specific host such as contoso.operations.dynamics.com, with all public entities under a single /data root. Connectors authenticate with Microsoft Entra ID OAuth 2.0 client credentials, sending a Bearer token scoped to the environment host that expires about every hour. Relevant entities include sales orders, customers, addresses, released products, and shipment records, each keyed by its natural key plus dataAreaId for the legal entity. F&O can push outbound Business Events such as sales order confirmed when an admin activates them, but they carry only identifiers, so the connector reads full records back over OData.

How UPS works

UPS exposes REST APIs over JSON, with the legacy XML and SOAP services decommissioned in June 2024. Address Validation canonicalizes and classifies a ship-to address, Rating returns negotiated charges and transit times, Shipping creates a label and returns the 1Z tracking number and a base64 label image, and Tracking reports scan events. UPS authenticates with OAuth 2.0 client credentials, returning a Bearer token that lasts about four hours, and limits an app to roughly 250 token requests per day. UPS has no billing or invoice API; freight charges are read from the Shipping and Rating responses. Push tracking comes from the paid Track Alert webhook; Quantum View is a poll-based visibility feed.

What moves between them

The main flow runs from Microsoft Dynamics 365 F&O out to UPS. When an F&O order or shipment is ready, ml-connector reads the ship-to address and parcel detail, calls UPS Address Validation and Rating, then creates the UPS shipment. The returned 1Z tracking number, service level, label, and freight charge are written back onto the F&O record. After that, delivery events flow the other direction: UPS Track Alert pushes scan events as packages move, and Quantum View can be polled as a backstop, so each F&O order reflects its current status through delivery. Cadence is event-driven on shipment creation and on each UPS scan, with scheduled polling as a fallback.

How ml-connector handles it

ml-connector stores both credential sets encrypted and runs two separate OAuth client-credentials exchanges: Entra ID for the tenant-specific F&O host, and UPS for the carrier, passing the 6-digit account number as x-merchant-id so negotiated rates apply. It caches the four-hour UPS token and refreshes it shortly before expiry to stay well under the roughly 250 tokens per day, and it refreshes the hourly F&O token when a call returns 401. F&O addresses are normalized through UPS Address Validation before rating, because residential versus commercial classification changes the price; the F&O service shipping method maps to a numeric UPS service code such as 03 for Ground. Shipment creation is not idempotent on the UPS side, so every create runs under a BullMQ jobId keyed to the F&O order to prevent duplicate labels, and the tracking number is written back to F&O only after a successful response. Inbound Track Alert webhooks carry no HMAC signature, so the connector validates the secret credential header it set at subscription time, and because those subscriptions expire after 14 days it renews them for shipments still in transit. UPS 429 responses arrive without a Retry-After header, so ml-connector applies exponential backoff with jitter. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized industrial parts distributor, around 150 staff across two warehouses, runs Microsoft Dynamics 365 F&O for sales orders, inventory, and finance, and ships parcels with UPS. Before the integration, warehouse staff picked an order in F&O, then retyped the customer address into the UPS shipping portal, copied the tracking number back into F&O by hand, and answered status calls by looking each package up on the UPS website. Wrong residential or commercial flags led to surprise surcharges that nobody caught until the monthly UPS bill. With the two systems connected, a confirmed F&O order is address-validated, rated, and labeled through UPS in one step, the 1Z tracking number and freight charge post straight back to the order, and Track Alert scan events update delivery status automatically. Staff stop double-keying, and the rate on the label matches what was quoted.

What you can do

  • Turn a confirmed Microsoft Dynamics 365 F&O order into a rated, labeled UPS shipment without re-keying the address.
  • Write the UPS 1Z tracking number, service level, label, and freight charge back onto the F&O record.
  • Validate and classify each ship-to address with UPS before rating so residential surcharges do not surprise you.
  • Feed UPS Track Alert and Quantum View scan events back into F&O so every order shows its current delivery status.
  • Bridge Entra ID OAuth on the F&O side and UPS OAuth client credentials on the carrier side, with cached tokens, retries, and a full audit trail.

Questions

Which direction does data move between Microsoft Dynamics 365 F&O and UPS?
Order and address data moves from Microsoft Dynamics 365 F&O out to UPS to rate and create the shipment. The UPS tracking number, service level, label, and freight charge are written back onto the F&O record. After that, UPS scan events flow back into F&O through Track Alert and Quantum View so the order shows its current delivery status.
Can ml-connector reconcile UPS invoices against Dynamics 365 F&O?
Not from a billing API, because UPS does not publish one. ml-connector instead captures the freight charge returned on the Rating and Shipping responses and writes it onto the F&O order, which gives you the carrier's quoted cost at label time. Full invoice-level reconciliation still requires the UPS Billing Center, since no download endpoint exists.
How are UPS tokens and tracking subscriptions kept healthy?
UPS tokens last about four hours and an app is capped near 250 token requests per day, so ml-connector caches the token and refreshes it just before expiry rather than per call. Track Alert webhook subscriptions expire after 14 days, so the connector renews them for packages still in transit. Because UPS 429 responses omit a Retry-After header, it backs off exponentially with jitter.

Related integrations

Connect Microsoft Dynamics 365 F&O and UPS

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

Get started