OdooWiki OCA HUB

Sendcloud Shipping

delivery_sendcloud_oca folder_open OCA/delivery-carrier open_in_new
Operations/Inventory/Delivery License: LGPL-3

This module provides sendcloud shipping integration with Odoo

This module mostly implements what's described in https://docs.sendcloud.sc/api/v2/shipping/

Full documentation for developers is in https://docs.sendcloud.sc/.

This module works for the Community Edition as well as the Enterprise Edition.

auto_awesome What this module does

AI-generated from the code · Odoo 18.0

Connect Odoo to Sendcloud to compute shipping costs, create shipments and labels, and manage Sendcloud parcels, returns, brands and invoices directly from sales orders and deliveries.

This module adds a Sendcloud delivery method to Odoo. Users configure Sendcloud integrations per company (public/secret keys, shop, service points) and synchronize the available shipping methods, which become delivery carriers with weight limits and country-based prices.

On a sales order, when the carrier is a Sendcloud method, Odoo computes the order weight from the products, shows the required service point address, and can synchronize the order to Sendcloud. Confirming an order automatically creates the Sendcloud shipment. Users can also manually sync or delete a Sendcloud order from buttons on the sales order.

Delivery orders (stock pickings) get Sendcloud parcels with labels and documents that can be downloaded. Parcels can be cancelled, and returns can be created from a brand. A Sendcloud menu area gives access to integrations, brands, carriers, parcels, returns, invoices, sender addresses and a log of all requests sent to Sendcloud.

Business rules include: only carriers matching the warehouse sender address, destination country and order weight are offered; service-point carriers are hidden unless enabled in the integration; Sendcloud carriers require a company and a consistent integration company. For shipments outside the EU, an invoice number is required, and Odoo can automatically create a 100% down-payment invoice if enabled. A scheduled job synchronizes parcels, returns, invoices and shipping methods.

Depends on

base_address_extendedstock_deliverywebsaleonboarding

Menus it adds

SendcloudSalesQuotationsOrdersBrandsDeliveryShipmentsParcelsShipping MethodsReturnsReturnsParcelsShipping MethodsInvoicesLoggingActionsConfigurationIntegrationSender AddressParcel StatusCarriersWizardsmenu_configuration_sendcloud_integrationmenu_configuration_sendcloud_syncmenu_configuration_sendcloud_warehousemenu_configuration_sendcloud_sync_order
Models and fields (30)
  • sale.order · new modelsendcloud_order_code, sendcloud_sp_details, sendcloud_order_weight, is_sendcloud_delivery_type, sendcloud_customs_shipment_type, sendcloud_service_point_address, sendcloud_service_point_required
  • res.company · extends an existing modelsendcloud_brand_ids (Sendcloud Brands), sendcloud_return_ids (Sendcloud Returns), sendcloud_invoice_ids (Sendcloud Invoices), is_sendcloud_test_mode, sendcloud_integration_ids (Sendcloud Integrations), sendcloud_sender_address_ids (Sendcloud Sender Addresses), sendcloud_auto_create_invoice, sendcloud_default_integration_id
  • res.partner · extends an existing modelsendcloud_is_in_eu (Is in EU), sencloud_sender_address_id (Sendcloud Sender Address)
  • stock.picking · new modellabel_print_status, sendcloud_announce, sendcloud_is_return, sendcloud_parcel_ids, sendcloud_sp_details, sendcloud_last_cached, sendcloud_parcel_count (Parcels), sendcloud_insured_value, sendcloud_shipment_code, sendcloud_shipment_uuid, sendcloud_apply_shipping_rules, sendcloud_customs_shipment_type, sendcloud_service_point_address, sendcloud_service_point_required, sendcloud_shipping_method_checkout_name
  • sendcloud.brand · new modelname, color, active, domain, website, company_id, print_thumb, screen_thumb, sendcloud_code, hide_powered_by, secondary_color, notify_bcc_email, return_portal_url, notify_reply_to_email
  • sendcloud.mixin · new modelis_sendcloud_test_mode
  • stock.warehouse · extends an existing modelsencloud_sender_address_id
  • delivery.carrier · new modeldelivery_type, sendcloud_code, sendcloud_price, sendcloud_carrier, sendcloud_is_return, sendcloud_max_weight, sendcloud_min_weight, sendcloud_country_ids (Price per Country), sendcloud_integration_id, sendcloud_sync_countries (Synchronize countries with Sendcloud), sendcloud_sender_address_id, sendcloud_service_point_input, sendcloud_service_point_required
  • sendcloud.action · new modelmodel, resid, action, message (Received Message), exitcode, record_id, timestamp, company_id, is_processed, message_type, sent_payload, error_message, response_time (Response Time (sec)), error_on_parsing, date_last_success, sendcloud_integration_id
  • sendcloud.parcel · new modelcity, name, note, type, email, label (File Content), street, weight, address, carrier, brand_id, collo_nr, shipment (Cached Shipment), to_state, address_2, documents (Documents Data), is_return, reference, telephone, colli_uuid, company_id, package_id, picking_id, collo_count, postal_code, shipment_id, company_name, document_ids (Documents), house_number, order_number
  • sendcloud.return · new modelemail, active, reason, status, message, company_id, created_at, items_cost, label_cost, refund_type, refunded_at, delivered_at, total_refund, is_cancellable, refund_message, sendcloud_code, status_display, delivery_option, incoming_parcel_id, outgoing_parcel_id, incoming_parcel_code, outgoing_parcel_code, return_response_cache, incoming_parcel_deleted, outgoing_parcel_deleted, incoming_parcel_brand_name, incoming_parcel_from_email, outgoing_parcel_brand_name, outgoing_parcel_from_email, incoming_parcel_status_code
  • sendcloud.carrier · new modelname, sendcloud_code
  • sendcloud.invoice · new modelref, active, is_paid, item_ids, company_id, price_excl, price_incl, invoice_date, invoice_type, sendcloud_code
  • sendcloud.request · new model
  • res.config.settings · extends an existing modelis_sendcloud_test_mode, sendcloud_auto_create_invoice
  • onboarding.onboarding · extends an existing model
  • sendcloud.integration · new modelactive, database, sequence, shop_url, shop_name, company_id, public_key, secret_key, webhook_url, sendcloud_code, webhook_active, service_point_enabled, service_point_carriers, service_point_carrier_ids (Carriers)
  • sendcloud.parcel.item · new modelsku, value, weight, hs_code, quantity, parcel_id, product_id, properties, description, return_reason, origin_country, return_message
  • sendcloud.sync.wizard · new modelbrands, parcels, returns, invoices, parcel_statuses, sender_addresses, shipping_methods
  • sendcloud.invoice.item · new modelname, sendcloud_code, sendcloud_invoice_id
  • choose.delivery.carrier · extends an existing model
  • sendcloud.parcel.status · new modelmessage, sendcloud_code
  • sendcloud.sender.address · new modelcity, email, active, street, country, telephone, company_id, postal_box, vat_number, eori_number, postal_code, company_name, contact_name, house_number, sendcloud_code
  • sendcloud.parcel.document · new modellink, name, size, parcel_id, attachment (File Content), attachment_id
  • onboarding.onboarding.step · extends an existing model
  • sendcloud.sync.order.wizard · new modelsync_from_date
  • sendcloud.integration.wizard · new modelbase_url, company_id, info_message, error_message, is_sendcloud_test_mode, integration_request_url
  • sendcloud.shipping.method.country · new modelname, iso_2, iso_3, price, from_name, company_id, country_id (To Country), from_iso_2, from_iso_3, product_id (Specific Delivery Product), method_code, price_check, price_custom (Custom Price), sendcloud_code, from_country_id, enable_price_custom, sendcloud_is_return
  • sendcloud.warehouse.address.wizard · new modelwarehouse_ids (Warehouses)
  • sendcloud.create.return.parcel.wizard · new modelreasons (Reasons Cached), brand_id, language, line_ids, parcel_id, reason_id, identifier, poller_url, reason_ids, return_fee, collo_count, postal_code, support_url, access_token, info_message, error_message, service_point, enable_refunds, reason_message, refund_message, refund_options (Refund Options Cached), shop_distances, delivery_options (Delivery Options Cached), refund_option_id, return_locations (Return Locations Cached), refund_option_ids, return_policy_url, return_portal_url, delivery_option_id, return_location_id

Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

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

Confirmation status: 2 confirmed, 7 with no information of 9 versions.

Sources · Odoo 18.0

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

terminal Installation and usage

OCA documentation · Odoo 18.0

Create an account on sendcloud.com and choose a plan. Go to integrations and select Odoo integration to use the Odoo integration or select api integration if you only want to use the api integration (see readme for more information).

Odoo Integration

Verify that the value of "web.base.url" parameter in System Parameters is set with the correct url (eg.: "https://demo.onestein.eu" instead of "http://localhost:8069").

Go to Sendcloud > Configuration > Wizards > Setup the Sendcloud Integration. A wizard will pop up.

Select Odoo Integration. Start Setup. You will be redirected to a Sendcloud page asking you to authorize OdooShop to access your Sendcloud account. Click on Connect in the Sendcloud page.

Go back to the Odoo Integration configuration. An integration "OdooShop" is now present in the Integration list view. Open the OdooShop Integration form. Edit the OdooShop Integration. The changes you make will be in sync, Sendcloud side, with the integration configuration.

In case multiple integrations are present, sort the integrations by sequence, to allow Odoo to choose the default one that will be used. Please note that when using the Odoo integration an "incoming order" is created in Sendcloud as soon as you validate the salesorder. The “incoming order” has status “in process” in Sendcloud and is not forwarded to the carrier yet.

When you validate the delivery in Odoo the label is created and the pick-up assignment is send to the carrier.

In previous version there was a possibility to connect to the API integration instead of the Odoo integration. To benefit from Sendcloud support we highly recommend you to upgrade to the latest version of this module with the Odoo integration.

Sendcloud panel settings

When you configure the Integration settings in the online Sendcloud panel (https://panel.sendcloud.sc/) those settings are also sync-ed with the Integration settings Odoo side.

Synchronize Sendcloud objects

After the setup of the integration with Sendcloud server is completed, second step is to synchronize the objects present in Sendcloud server to Odoo. To synchronize Sendcloud objects for the first time:

  • Go to Sendcloud > Configuration > Wizards > Sync the Sendcloud Objects. A wizard will pop up.
  • Select all the objects. Confirm. This will retrieve the required data from Sendcloud server.

Some Sendcloud objects will be automatically synchronized from the Sendcloud server to Odoo. Those Sendcloud objects are:

  • Parcel Statuses
  • Invoices
  • Shipping Methods
  • Sender Addresses

To configure how often those objects should be retrieved from the Sendcloud server:

  • Go to Settings > Technical > Automation > Scheduled Actions. Search Scheduled Actions for "Sendcloud".
  • Set the "Execute Every" value according to your needs.

Sender Addresses and Warehouses

In case of multiple warehouses configured in Odoo (eg.: user belongs to group "Manage multiple Warehouse"):

Go to Sendcloud > Configuration > Integration. Click on Configure Warehouse Addresses. A wizard will pop up. Set the corresponding Sendcloud Sender Address for each of the warehouse addresses.

Alternatively, in Inventory > Configuration > Warehouses, select an address. In the address form, go to Sales and Purchase tab and set the Sencloud Sender Address. In Sale Order > Delivery: select the Warehouse. Check that the address of the Warehouse has a Sendcloud Senser Address.

Initial sync of past orders

Once all the previous configuration steps are completed, it is possible to synchronize all the past Odoo outgoing shipments to Sendcloud. Those shipments are the ones already setup with a Sendcloud shipping method.

Go to Sendcloud > Configuration > Wizards > Sync past orders to Sendcloud. A wizard will pop up. Select the date (by default set to 30 days back from today) from which the shipments must be synchronized.

Click on Confirm button: the shipments will be displayed in the Incoming Order View tab of the Sendcloud panel. They will contain a status “Ready to Process” if they are ready to generate a label and the order fulfillment will continue.

Auto create invoice

When sending a product outside the EU, Sendcloud requires an invoice number. In case shipment is made with a product that can be invoiced based on delivered quantities, this combination of factors prevents the label being created in Sendcloud when confirming the SO.

A possible solution is to automatically create a 100% down-payment invoice when shipping to outside the EU. To enable this feature, go to the "General Settings": under the Sendcloud section you can find the "Auto create invoice" flag. Notice: this feature is still in beta testing.

Test Mode

To enable the Test Mode, go to the "General Settings": under the Sendcloud section you can find the "Enable Test Mode" flag. Enabling the Test Mode allows you to access extra functionalities that are useful to test the connector.

There is no seperate test environment available on the Sendcloud portal. This means that as soon as you create labels the carries is given the order to pickup the goods. You can use carrier "unstamped letter" for testing. When testing with other carriers make sure that you cancel the labels in the Sendcloud portal within a couple of hours otherwise the label will be billed and picked up.

Since there is no test environment it's very important to know that Sendcloud stores it records based on the delivery number, for instance WH/OUT/0001, this field is idempotent. So when you start testing and you will use delivery number WH/OUT/00001 this number is stored in Sendcloud. When you go live and use the same delivery numbers, in this case WH/OUT/00001, Sendcloud will treat this as an update of the existing record and will send back the shipping-address that was already stored (created while testing). To avoid this problem you should set a different prefix on the sequence out in your testenvironment. In debug mode, Technical/Sequences Identifiers/Sequences, select the sequence out and adjust this to WH/OUT/TEST for instance.

In short this is how the module works:

  • the user creates a sale order in Odoo; the user clicks on "Add shipping" button and selects one of the shipping methods provided by Sendcloud
  • when confirming the sale order, a delivery document is generated (stock.picking)
  • when confirming the picking, a parcel (or multiple parcels) for the specific sales order are created in Sendcloud under Shipping > Created labels
  • the picking is updated with the information from Sendcloud (tracking number, tracking url, label etc...)

Map of Sendcloud-Odoo data models

| Sendcloud | Odoo | | ----------- |-------------------| | | Brand | Website Shop | | Order | Sales Order | | Shipment | Picking | | Parcel (colli) | Picking packs | | Sender address | Warehouse address | | Shipping Method | Shipping Method |

Multicollo parcels

In Inventory > Configuration > Delivery Packages, set the carrier to Sendcloud. In the out picking, put the products in different Sendcloud packages to create Multicollo parcels.

Service Point Picker

The module contains a widget, the Service Point Picker, that allows the selection of the service point. The widget is placed in the "Sendcloud Shipping" tab of the picking. The widget is visible in case the following is true:

  • the configuration in the Sendcloud panel has the Service Point flag to True (in the Sendcloud integration config)
  • the Shipping Method selected in the picking is provided by Sendcloud
  • the Shipping Method has field sendcloud_service_point_input == "required"
  • all the criteria (from country, to country, weight) match with the current order

Cancel parcels

When canceling parcels a confirmation popup will ask for confirmation.

Delivery outside EU

Install either OCA module 'product_harmonized_system' or Enterprise module 'account_intrastat' for delivery outside of EU. Both include extra field 'country of origin'.

Troubleshooting

If the communication to the Sendcloud server fails (eg.: while creating a parcel), the exchanged message is stored in a Log section, under Logging > Actions.

No verified information in OCA: Configuration.

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.