OdooWiki OCA HUB

Base module for carrier labels

base_delivery_carrier_label folder_open OCA/delivery-carrier open_in_new
Delivery License: AGPL-3

This module adds some function and generic stuff to help for carrier label generation. For example it adds the concept of option on carriers that can differ depending on the picking or class to store carrier accounts This module doesn't do anything by itself, it serves as a base module for other carrier-specific modules.

auto_awesome What this module does

AI-generated from the code · Odoo 17.0

Adds carrier options and label handling to delivery methods, so shipping connectors can attach labels, track parcels and generate carrier manifests. It is a technical base module: it does not ship labels by itself.

This module prepares Odoo for carrier label generation. On each delivery method (Carrier) you get a new "Options" tab where you can define options that can be mandatory or applied by default to delivery orders.

On a transfer (stock.picking) you can pick a carrier and its options; mandatory options cannot be removed and are shown in orange. When the carrier changes, the default options are applied automatically, and the same happens when a transfer is created or updated.

Labels returned by a carrier are stored as attachments linked to the transfer, and a check prevents generating labels twice for the same transfer. Packages (stock.quant.package) gain parcel tracking number, tracking link and weight; a Tracking button opens the carrier tracking page. A setting under Inventory configuration, "Default Packages", automatically groups all items into one package before sending to the carrier.

A Manifest wizard is available under Inventory > Operations, where you choose a carrier and a date range to download a manifest file. The module also computes weights of move lines in kilograms or units. It only provides the framework; the actual label and manifest generation must be implemented by carrier-specific modules.

Depends on

stock_deliverydelivery_carrier_info

Menus it adds

CarriersManifest
Models and fields (10)
  • res.company · extends an existing modeldelivery_set_default_package (Default Packages)
  • stock.picking · extends an existing modelcarrier_id (Carrier), option_ids (Options), carrier_code
  • shipping.label · new modelfile_type (File type), package_id (Pack), attachment_id (Attachement)
  • manifest.wizard · new modelnotes (Result), state, to_date, file_out (Manifest), filename (File Name), from_date, carrier_id (Carrier)
  • stock.move.line · extends an existing modelweight
  • delivery.carrier · extends an existing modelavailable_option_ids (Option)
  • res.config.settings · extends an existing modeldelivery_set_default_package
  • stock.quant.package · extends an existing modelparcel_tracking, parcel_tracking_uri
  • delivery.carrier.option · new modelcolor, active, mandatory, by_default (Applied by Default), carrier_id (Carrier), readonly_flag, tmpl_option_id (Option)
  • delivery.carrier.template.option · new modelcode, name, partner_id (Partner Carrier), description

Text generated by AI (DeepSeek) from reading the Odoo 17.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 6 confirmed, 3 with no information of 9 versions.

Sources · Odoo 17.0

Confirmed on 2026-11-03 in branch 17.0 of OCA/delivery-carrier.

terminal Installation and usage

OCA documentation · Odoo 17.0

By default, automatic packaging is enabled.

You can disable it in Inventory / Configuration / Settings, by searching "Default Packages".

When active, pickings without assigned packages will be grouped into a single one for shipping. This ensures compatibility with connectors that require at least one package to generate labels or tracking references.

> NOTE: If the Number of Packages field is manually set but no real packages are defined, this feature overrides it and creates only one package. This may cause confusion when relying solely on that field instead of using Odoo’s standard package objects.

How does it works ?

In picking UI a button "Send to shipper" trigger label generation calling send_to_shipper() in models/stock.picking.py

How to implement my own carrier ?

Define a method {carrier}_send_shipping() which is called by _send_shipping native method. Make it return a list of dict of this form :

{
    "exact_price": price,
    "tracking_number": 'number'
    "labels": [{
        "package_id": package_id,
        "name": filename,
        "datas": file_content (base64),
        "file_type": extension,
        "tracking_number": package_number
    }]
}

No verified information in OCA: Installation.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.