| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Sales (sale_management) • Discuss (mail) • Invoicing (account) |
| Lines of code | 448 |
| Technical Name |
ups_connector |
| License | OPL-1 |
| Website | https://higa.group/ |
| Versions | 16.0 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Sales (sale_management) • Discuss (mail) • Invoicing (account) |
| Lines of code | 448 |
| Technical Name |
ups_connector |
| License | OPL-1 |
| Website | https://higa.group/ |
| Versions | 16.0 17.0 18.0 19.0 |
UPS Connector for Odoo
Live shipping rates, automatic label generation, package tracking and one-click label voiding — all powered by the official UPS REST API.
automated
supported
available
to test (Mock Mode)
What this module does
Four operations the warehouse team needs, fully automated from the Odoo UI.
Live Rate Quoting
When the sales rep adds shipping to a quotation, Odoo calls the UPS Rating API and returns the real cost for the order's weight and destination. Negotiated rates honoured when the account has them.
Automatic Label Generation
The moment a picking is validated, the module asks UPS for the label, stores the PDF/GIF/ZPL as an attachment on the picking and writes the billed price back to the delivery line.
Tracking + Customer Email
The UPS tracking number is saved on the picking and the standard Odoo
delivery confirmation email automatically renders a clickable
ups.com/track link for the customer.
Automatic Label Void on Cancel
Cancelling a picking with a UPS label voids it at UPS first (within the 28-day window) so the shipment never appears on your invoice. Tolerant to UPS rejection — never blocks the cancellation.
Installation
Standard Odoo module — install once, configure per carrier.
Drop the module in your addons path
Place ups_connector/ in your custom addons folder.
Only the Python requests package is required at runtime.
Enable Delivery Methods in Inventory settings
Go to Inventory → Configuration → Settings → Operations and tick Delivery Methods. Save. The menu Inventory → Configuration → Shipping Methods will appear.
Install "UPS Connector" from Apps
Apps → Update Apps List → search "UPS Connector" → Install.
Configure the carrier
Create one shipping method per UPS service/account combination you need.
Create the Shipping Method
Go to Inventory → Configuration → Shipping Methods and click New. Fill in the basic fields:
Open the UPS Configuration tab
The tab appears once Provider is set to UPS. You'll see two columns:
1Z999AA1…) and a placeholder label so
you can demo the full Odoo flow end-to-end. Disable Mock once you obtain real Client
ID / Secret at
developer.ups.com.
Set availability rules (Destination tab)
On the Availability tab pick the countries / states this UPS method should be offered for, and optionally a max weight and max volume per shipment.
Save and you're done
The carrier is now offered on quotations whose shipping address matches the availability rules above.
See it in action
The three moments that matter — captured from a real Odoo 18 install.
The UPS shipping method, configured
Inventory → Configuration → Shipping Methods → your UPS carrier
Quoting the shipment from a sale order
Sales → Quotation → "Update shipping cost" / "Add shipping"
Label and tracking generated on picking validation
Inventory → Delivery Orders → your WH/OUT picking → Validate
1Z999AA… and the billed UPS cost. The customer receives an email with a clickable
UPS tracking link — no extra configuration needed.
Daily flow
From quotation to delivered package — what your team actually clicks on.
Quote the shipment
Open a quotation → click Add shipping below the order lines → choose the UPS carrier → click Get rate → the cost is added as a delivery line.
Confirm and pick
Confirm the sale order. Odoo generates the delivery order (picking). Pick and pack as usual, set the done quantities.
Validate → label appears automatically
Click Validate on the picking. The module calls UPS, the tracking number lands on the picking, the label file is attached (📎 icon) and a chatter message logs "UPS label generated. Tracking: 1Z…".
Customer receives the tracking email
Odoo's standard delivery confirmation email is sent to the customer with a clickable
link to ups.com/track. No template editing required.
Need to cancel? The label is voided for you
If you cancel the picking, the module first asks UPS to void the label (within the 28-day forward shipment window) so UPS never bills you for an unused label.
Supported UPS services
Pick the default service per carrier; multiple methods cover multiple services.
Compatibility
Same module, four parallel branches — pick the one matching your stack.
| Odoo Version | Edition | Module Version | Status |
|---|---|---|---|
| Odoo 16 | Community | 16.0.1.0.0 | ✓ supported |
| Odoo 17 | Community | 17.0.1.0.0 | ✓ supported |
| Odoo 18 | Community | 18.0.1.0.0 | ✓ supported (this branch) |
| Odoo 19 | Community | 19.0.1.0.0 | ✓ supported |
Under the hood
OAuth 2.0 with token cache
Client credentials flow mandatory at UPS since June 2024. Tokens are cached per carrier and refreshed 5 minutes before expiry, well under the 250 tokens/day quota.
Pure-HTTP client, no Odoo coupling
The UPS request layer (ups_request.py) imports zero Odoo modules, making it
trivially testable and reusable across the four version ports.
Plays well with standard Odoo
Hooks into the delivery.carrier dispatcher with delivery_type=ups.
No overrides of core methods, no monkey-patches.
Open source, LGPL-3
Dependencies: base, delivery, stock, sale.
Only the Python requests library is needed at runtime.
On the roadmap
Features intentionally not included in this MVP, planned for v2.
Address Validation
Street-level normalization of partner addresses before quoting / shipping.
Pickup Scheduling
Request and cancel UPS on-demand pickups directly from the picking.
Return Labels
Generate return labels from confirmed deliveries with one click.
Multi-package shipments
Per-line dimensions, multiple boxes per picking with individual tracking numbers.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module