Easypost Shipping OCA

delivery_easypost_oca
REPOSITORY
REPOSITORYOCA/delivery-carrier
GIT
GIThttps://github.com/OCA/delivery-carrier.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/delivery-carrier/tree/18.0/delivery_easypost_oca
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYInventory/Delivery
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Binhex
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Binhex
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Antonio David Ruban
WEBSITE
WEBSITEhttps://github.com/OCA/delivery-carrier
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:16
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock_delivery
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - delivery
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES easypost==7.15.0
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module integrates [EasyPost](https://easypost.com) shipping API
with Odoo, providing access to 100+ carriers through a single, unified
interface.

**What is EasyPost?**

EasyPost is a shipping API aggregator that eliminates the need for
separate carrier integrations. Instead of implementing individual APIs
for USPS, UPS, FedEx, DHL, and others, you connect once to EasyPost and
gain access to all supported carriers with pre-negotiated rates.

**Key Features**

- **Automated Rate Calculation**: Get real-time shipping rates from
  multiple carriers and automatically select the lowest rate
- **Label Generation**: Generate and print shipping labels in multiple
  formats (PDF, ZPL, EPL2)
- **Multi-Carrier Support**: Access 100+ carriers including USPS, UPS,
  FedEx, DHL, Canada Post, and regional carriers
- **Shipment Tracking**: Real-time tracking with automatic updates and
  public tracking links
- **Multi-Package Handling**: Support for shipments with multiple
  packages (individual or batch mode)
- **Address Verification**: Automatic address validation to reduce
  delivery errors
- **Multiple Label Formats**: PDF for standard printers, ZPL/EPL2 for
  thermal label printers
- **Test Environment**: Full test mode for development without charges
  or actual shipments
- **Automatic Conversions**: Weight conversion to ounces and currency
  conversion handled automatically

**Benefits of Using EasyPost**

- **Single Integration**: One API connection for all carriers - no need
  to integrate each carrier separately
- **Lowest Rate Selection**: Automatically compares rates from all
  available carriers and selects the cheapest option
- **Pre-Negotiated Rates**: Access to discounted carrier rates through
  EasyPost's volume agreements
- **Reduced Complexity**: Unified API response format regardless of
  carrier
- **Scalability**: Easily add new carriers without code changes
- **Testing Without Risk**: Complete test environment with mock
  shipments

**Technical Architecture**

This module implements a clean, layered architecture:

- **Business Logic Layer** (delivery_carrier.py): Handles Odoo-specific
  logic (orders, pickings, pricing)
- **API Wrapper Layer** (easypost_request.py): Centralizes all EasyPost
  API interactions
- **EasyPost Python SDK** (version 7.15.0): Official EasyPost client
  library
- **Comprehensive Test Suite**: 100% mocked tests with no real API calls
  during testing

**Supported Carriers (via EasyPost)**

USPS, UPS, FedEx, DHL Express, DHL eCommerce, Canada Post, APC Postal,
Asendia, Australia Post, Canpar, Couriers Please, Deutsche Post,
Fastway, Globegistics, Interlink Express, LaserShip, LSO, OnTrac,
Parcelforce, Purolator, Royal Mail, Sendle, StarTrack, and 80+
additional carriers worldwide.

**Use Cases**

- **E-Commerce Stores**: Automatically calculate shipping costs at
  checkout
- **Warehouse Operations**: Generate and print shipping labels for
  outbound orders
- **Multi-Carrier Shipping**: Compare rates across carriers to minimize
  shipping costs
- **International Shipping**: Access to international carriers with
  automatic address verification
- **High-Volume Shipping**: Batch processing for multiple packages in
  single transactions

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
easy_view_delivery_carrier_form_inherit easy.view.delivery.carrier.form.inherit delivery.carrier xpath Inherits delivery.view_delivery_carrier_form
view_stock_package_type_easypost_oca stock.package.type.easypost.oca stock.package.type xpath Inherits stock.stock_package_type_form
Models touched (6)

New fields (3)
  • easypost_oca_carrier_name Char
  • easypost_oca_rate_id Char
  • easypost_oca_shipment_id Char
Public methods (1)
  • button_confirm(self)

New fields (6)
  • delivery_type Selection
    ondelete={'easypost_oca': <expr>} selection_add=[('easypost_oca', 'Easypost OCA')]
  • easypost_oca_delivery_multiple_packages Selection
    default='shipments' selection=[('shipments', 'Shipments'), ('batch', 'Batch')] string='Delivery Multiple Packages'
  • easypost_oca_label_file_type Selection
    default='PDF' string='Label Format' args: [('PDF', 'PDF'), ('ZPL', 'ZPL'), ('EPL2', 'EPL2')]
  • easypost_oca_production_api_key Char
    groups='base.group_system' help='Enter your API production key from Easypost account' args: 'Easypost Production API Key'
  • easypost_oca_test_api_key Char
    groups='base.group_system' help='Enter your API test key from Easypost account.' args: 'Easypost Test API Key'
  • is_saturday_delivery Boolean
    args: 'Delivery On Saturday?'
Public methods (4)
  • easypost_oca_cancel_shipment(self, pickings)
  • easypost_oca_get_tracking_link(self, picking)
  • easypost_oca_rate_shipment(self, order)
    Return the rates for a quotation/SO.
  • easypost_oca_send_shipping(self, pickings) -> list

New fields (1)
  • type Selection
    ondelete={'easypost_oca': <expr>} selection_add=[('easypost_oca', 'Easypost OCA')]
Public methods (0)

No public methods.

New fields (3)
  • easypost_oca_carrier_name Char
    copy=False tracking=True
  • easypost_oca_rate_id Char
    copy=False tracking=False
  • easypost_oca_shipment_id Char
    copy=False tracking=False
Public methods (0)

No public methods.

New fields (2)
  • easypost_oca_carrier Char
    index=True args: 'Carrier Prefix'
  • package_carrier_type Selection
    selection_add=[('easypost_oca', 'Easypost OCA')]
Public methods (0)

No public methods.

New fields (7)
  • easypost_oca_batch_id Char
    tracking=True
  • easypost_oca_carrier_id Char
  • easypost_oca_carrier_name Char
  • easypost_oca_carrier_service Char
  • easypost_oca_rate_id Char
  • easypost_oca_shipment_id Char
    readonly=False related='sale_id.easypost_oca_shipment_id'
  • easypost_oca_tracking_url Char
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/delivery-carrier
GIT
GIThttps://github.com/OCA/delivery-carrier.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/delivery-carrier/tree/17.0/delivery_easypost_oca
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYInventory/Delivery
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Binhex
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Binhex
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Antonio David Ruban
WEBSITE
WEBSITEhttps://github.com/OCA/delivery-carrier
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock_delivery
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - delivery
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES easypost==7.15.0
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module integrates [EasyPost](https://easypost.com) shipping API
with Odoo, providing access to 100+ carriers through a single, unified
interface.

**What is EasyPost?**

EasyPost is a shipping API aggregator that eliminates the need for
separate carrier integrations. Instead of implementing individual APIs
for USPS, UPS, FedEx, DHL, and others, you connect once to EasyPost and
gain access to all supported carriers with pre-negotiated rates.

**Key Features**

- **Automated Rate Calculation**: Get real-time shipping rates from
  multiple carriers and automatically select the lowest rate
- **Label Generation**: Generate and print shipping labels in multiple
  formats (PDF, ZPL, EPL2)
- **Multi-Carrier Support**: Access 100+ carriers including USPS, UPS,
  FedEx, DHL, Canada Post, and regional carriers
- **Shipment Tracking**: Real-time tracking with automatic updates and
  public tracking links
- **Multi-Package Handling**: Support for shipments with multiple
  packages (individual or batch mode)
- **Address Verification**: Automatic address validation to reduce
  delivery errors
- **Multiple Label Formats**: PDF for standard printers, ZPL/EPL2 for
  thermal label printers
- **Test Environment**: Full test mode for development without charges
  or actual shipments
- **Automatic Conversions**: Weight conversion to ounces and currency
  conversion handled automatically

**Benefits of Using EasyPost**

- **Single Integration**: One API connection for all carriers - no need
  to integrate each carrier separately
- **Lowest Rate Selection**: Automatically compares rates from all
  available carriers and selects the cheapest option
- **Pre-Negotiated Rates**: Access to discounted carrier rates through
  EasyPost's volume agreements
- **Reduced Complexity**: Unified API response format regardless of
  carrier
- **Scalability**: Easily add new carriers without code changes
- **Testing Without Risk**: Complete test environment with mock
  shipments

**Technical Architecture**

This module implements a clean, layered architecture:

- **Business Logic Layer** (delivery_carrier.py): Handles Odoo-specific
  logic (orders, pickings, pricing)
- **API Wrapper Layer** (easypost_request.py): Centralizes all EasyPost
  API interactions
- **EasyPost Python SDK** (version 7.15.0): Official EasyPost client
  library
- **Comprehensive Test Suite**: 100% mocked tests with no real API calls
  during testing

**Supported Carriers (via EasyPost)**

USPS, UPS, FedEx, DHL Express, DHL eCommerce, Canada Post, APC Postal,
Asendia, Australia Post, Canpar, Couriers Please, Deutsche Post,
Fastway, Globegistics, Interlink Express, LaserShip, LSO, OnTrac,
Parcelforce, Purolator, Royal Mail, Sendle, StarTrack, and 80+
additional carriers worldwide.

**Use Cases**

- **E-Commerce Stores**: Automatically calculate shipping costs at
  checkout
- **Warehouse Operations**: Generate and print shipping labels for
  outbound orders
- **Multi-Carrier Shipping**: Compare rates across carriers to minimize
  shipping costs
- **International Shipping**: Access to international carriers with
  automatic address verification
- **High-Volume Shipping**: Batch processing for multiple packages in
  single transactions

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
easy_view_delivery_carrier_form_inherit easy.view.delivery.carrier.form.inherit delivery.carrier xpath Inherits delivery.view_delivery_carrier_form
view_stock_package_type_easypost_oca stock.package.type.easypost.oca stock.package.type xpath Inherits stock.stock_package_type_form
Models touched (6)

New fields (3)
  • easypost_oca_carrier_name Char
  • easypost_oca_rate_id Char
  • easypost_oca_shipment_id Char
Public methods (1)
  • button_confirm(self)

New fields (6)
  • delivery_type Selection
    ondelete={'easypost_oca': <expr>} selection_add=[('easypost_oca', 'Easypost OCA')]
  • easypost_oca_delivery_multiple_packages Selection
    default='shipments' selection=[('shipments', 'Shipments'), ('batch', 'Batch')] string='Delivery Multiple Packages'
  • easypost_oca_label_file_type Selection
    default='PDF' string='Label Format' args: [('PDF', 'PDF'), ('ZPL', 'ZPL'), ('EPL2', 'EPL2')]
  • easypost_oca_production_api_key Char
    groups='base.group_system' help='Enter your API production key from Easypost account' args: 'Easypost Production API Key'
  • easypost_oca_test_api_key Char
    groups='base.group_system' help='Enter your API test key from Easypost account.' args: 'Easypost Test API Key'
  • is_saturday_delivery Boolean
    args: 'Delivery On Saturday?'
Public methods (4)
  • easypost_oca_cancel_shipment(self, pickings)
  • easypost_oca_get_tracking_link(self, picking)
  • easypost_oca_rate_shipment(self, order)
    Return the rates for a quotation/SO.
  • easypost_oca_send_shipping(self, pickings) -> list

New fields (1)
  • type Selection
    ondelete={'easypost_oca': <expr>} selection_add=[('easypost_oca', 'Easypost OCA')]
Public methods (0)

No public methods.

New fields (3)
  • easypost_oca_carrier_name Char
    copy=False tracking=True
  • easypost_oca_rate_id Char
    copy=False tracking=False
  • easypost_oca_shipment_id Char
    copy=False tracking=False
Public methods (0)

No public methods.

New fields (2)
  • easypost_oca_carrier Char
    index=True args: 'Carrier Prefix'
  • package_carrier_type Selection
    selection_add=[('easypost_oca', 'Easypost OCA')]
Public methods (0)

No public methods.

New fields (7)
  • easypost_oca_batch_id Char
    tracking=True
  • easypost_oca_carrier_id Char
  • easypost_oca_carrier_name Char
  • easypost_oca_carrier_service Char
  • easypost_oca_rate_id Char
  • easypost_oca_shipment_id Char
    readonly=False related='sale_id.easypost_oca_shipment_id'
  • easypost_oca_tracking_url Char
Public methods (0)

No public methods.