ml-connector
OdooUPS

Odoo and UPS integration

Odoo runs your purchasing, inventory, and order fulfillment. UPS moves your shipments. Connecting the two keeps your outbound logistics linked to Odoo's purchase orders and products. When you create a shipment on UPS, tracking updates flow back into Odoo so your warehouse and finance teams see real-time visibility. ml-connector handles the address validation, shipment creation, and tracking synchronization so manual re-keying and tracking lookups disappear.

How Odoo works

Odoo exposes purchase orders, products, stock moves, and partner records through XML-RPC and JSON-2 APIs, both authenticated with an API key paired with username login. The platform supports polling with write_date filters for production use, while outgoing webhooks via Automated Actions require Odoo 17+ Enterprise with Studio and are not production-grade. Odoo Online instances use the base URL https://<subdomain>.odoo.com, while self-hosted deployments use custom domains. API access requires a Custom pricing plan, and all calls respect the integration user's Odoo access rights and record rules.

How UPS works

UPS exposes shipments, address validation, rating, and tracking through a REST API authenticated with OAuth 2.0 client credentials. Track Alert subscriptions push tracking events to a registered webhook endpoint but expire after 14 days and must be renewed, while Quantum View polling provides alternative shipment visibility. Production endpoints use https://onlinetools.ups.com/api, and tokens issued by the UPS security endpoint have approximately 4-hour lifetimes with a daily rate limit of 250 token requests. UPS offers no billing or invoice API and decommissioned legacy XML/SOAP authentication on June 3, 2024.

What moves between them

Shipment data flows from Odoo into UPS. Odoo purchase orders and products trigger UPS shipment creation via the ml-connector mapping. Tracking events flow back from UPS into Odoo through Track Alert webhooks where enabled, or through Quantum View polling where webhook subscriptions are not available. Address validation happens in both directions as Odoo partner addresses are validated against the UPS address API before shipment creation, ensuring only valid addresses post to the carrier.

How ml-connector handles it

ml-connector accepts the Odoo API key and instance URL and authenticates XML-RPC or JSON-2 calls per customer configuration. On the UPS side it manages OAuth 2.0 client credentials, caches the bearer token across calls, and refreshes on token expiry rather than waiting for a 401 failure. When Track Alert subscriptions are configured, ml-connector renews them every 13 days before the 14-day expiration window, so tracking notifications never drop. Address validation runs first before shipment creation, parsing Odoo partner records into the UPS Address Validation schema and rejecting invalid addresses before they reach the shipment endpoint. Tracking events received via webhook are matched back to Odoo shipments by Odoo reference number, and polling via Quantum View is available as a fallback if webhook subscriptions are not in use. Every record carries a full audit trail so shipments can be replayed if a validation or carrier call fails.

A real-world example

A medium-sized wholesaler runs Odoo for purchasing, inventory, and order fulfillment across two warehouses and uses UPS for outbound shipping. Before the integration, the warehouse team created shipments on the UPS website, then manually logged tracking numbers back into Odoo spreadsheets, leading to duplicate entries and lost tracking links when clerks looked up shipments by hand instead of checking Odoo. With Odoo and UPS connected, purchase orders trigger shipment creation automatically with validated addresses, tracking updates flow back into Odoo in real time, and the warehouse team sees a single source of truth for inventory and in-transit visibility without re-keying or separate tracking lookups.

What you can do

  • Create UPS shipments from Odoo purchase orders with automatic weight and product dimension data from Odoo's product catalog.
  • Validate Odoo partner addresses against UPS Address Validation before shipment creation to prevent carrier rejections.
  • Pull UPS tracking events back into Odoo as linked shipment records via Track Alert webhooks or Quantum View polling.
  • Manage UPS OAuth 2.0 token refresh and Track Alert subscription renewal every 13 days to keep tracking notifications active.
  • Maintain a full audit trail on every shipment so failed address validations and carrier calls can be replayed or corrected.

Questions

Which direction does data move between Odoo and UPS?
Shipment creation flows from Odoo into UPS, and tracking events flow back from UPS into Odoo. Address validation runs in both directions as Odoo partner addresses are checked against UPS before shipment creation. ml-connector does not write back to Odoo purchase order amounts or UPS invoice records, since UPS offers no invoice API.
Does Track Alert subscription expiry cause tracking events to stop?
Track Alert subscriptions expire after 14 days and must be renewed manually or automatically. ml-connector renews subscriptions automatically every 13 days, before expiration, so tracking notifications do not drop. If automatic renewal is not configured, Quantum View polling provides a fallback shipment visibility feed.
How does the integration validate addresses before creating shipments?
ml-connector calls the UPS Address Validation API for every Odoo partner address before attempting shipment creation. If validation fails or returns multiple candidates, the address is rejected with a clear error message so warehouse teams can correct it in Odoo. This prevents invalid addresses from reaching the UPS carrier endpoint, which would reject the entire shipment.

Related integrations

Connect Odoo and UPS

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

Get started