Skip to main content
Advanced Shipping Carrier

Advanced Shipping Carrier Integration: what nobody tells you about setting it up

To get Advanced Shipping Carrier Integration running, you add each carrier with Carrier Name, Carrier Type, Company and the Enabled checkbox, together with the credentials of your account with that carrier: API Key, API Secret and Account Number. In the first week, keep an eye on each carrier's Connection Status, Last Sync Time and Last API Response and, when a request fails, read its HTTP Status Code and Error Message. Below are the practical details worth knowing before you start.

FlexigoTech · Editor in charge: Víctor Gómez · Updated 4 November 2026

Key facts

Versions
Odoo 17, 18, 19 and 20
Checked
in the connector's source code, version 20.0 · against the sources linked at the end
Reading time
6 min

Before you add your first carrier

Setup comes down to a few places: each carrier's record, the record kept for each request and the status fields you will see in the lists. These are the details worth being clear on before you touch anything. For the overall picture of menus and flow, see how the module works under the hood.

The credentials belong to your account with each carrier

Adding a carrier involves Carrier Name, Carrier Type (a selection field), Enabled and Company. Alongside them sit the credentials. The module itself describes API Key as «API key of the carrier account» and API Secret as «API secret of the carrier account». Account Number is each carrier's own account number, and the field gives «FedEx account, UPS account, etc.» as examples.

The practical reading: those three items come from your account with each carrier, so have them to hand before you sit down to configure anything. And as each carrier record has its own Company, if you run several companies in the same database, check which one each carrier is assigned to.

Custom Endpoint URL is optional and has a specific case

Among the carrier fields is Custom Endpoint URL. Its description defines it as an optional custom API endpoint URL for «non-standard carriers». If your carrier does not fall into that case, you do not have to fill it in.

Check Enabled and Connection Status separately

Enabled is a checkbox; Connection Status is a separate selection field. They are two different pieces of information and are worth reviewing separately. Next to them you have Last Sync Time, with the date and time of the last sync, and Last API Response, holding the most recent API response. The same record also keeps Created and Created By, with the date it was added and the user who added it.

Hazmat Categories list in the Shipping module with six records, each showing code, category name and a zero surcharge, plus search bar and pagination
Another of the module's lists: Hazmat Categories, with six categories and their surcharge at zero.

Every request is stored field by field

The module keeps a record with these fields: Carrier, Request Type, Status, Timestamp, HTTP Status Code, Response Snippet, Error Message, Request Payload and Company. When something does not add up, that is where to look:

  • Request Type: what kind of request it was.
  • Request Payload: what was sent.
  • HTTP Status Code: the HTTP code of the response.
  • Response Snippet: an extract of the response.
  • Error Message: the error text.
  • Timestamp: when it happened.

With Carrier and Timestamp you quickly narrow down which carrier and which moment you are dealing with. To interpret each specific message, see the module's errors and warnings guide.

There are several status fields and they do not mean the same thing

In the module you will come across several fields called status or state, each with its own set of values:

  • status with Success, Failed and Timeout.
  • status with Success, Error and Label Exists.
  • status with Draft, Generated, Printed and Failed.
  • status with Active, Degraded and Down.
  • status with Draft, In Progress, Completed, Failed and Paused.
  • status with Draft, Completed, Failed and Partial.
  • state with Open, Submitted, Approved, Rejected and Paid.
  • state with Draft and Done.
  • status_filter with Draft, Ready-to-Ship and All.

Note that Failed and Draft turn up in several of them. When you filter, or when someone on the team tells you something is Failed, ask which list they saw it in before you go looking for the cause.

The longest state field runs from Draft to Cancelled

One of the module's state fields goes through these values: Draft, Blocked, Cost Quoted, Ready to Ship, In Transit, Out for Delivery, Delivered, Attempted Delivery, Returned to Sender, Lost, Damaged and Cancelled. There are also two fields, status and current_status, with Pre-Label, In-Transit, Out-for-Delivery, Delivered, Exception and Returned.

Watch the spelling: one says Out for Delivery and the other Out-for-Delivery; the same goes for Ready to Ship and the Ready-to-Ship in status_filter. Bear it in mind when searching or creating saved filters.

Export Intrastat wizard with month and year, explanatory text about the CSV and Export and Cancel buttons, open over the list of DHL Express shipments in Ready to Ship and Delivered states
The Export Intrastat wizard over the shipments list (Shipping › Shipments), with DHL Express shipments in Ready to Ship and Delivered.
Bulk Print Labels wizard open over the shipments list with two DHL Express shipments selected, Download Labels and Cancel buttons and text about a single PDF or ZIP
Bulk Print Labels with two DHL Express shipments selected; the wizard text mentions a single PDF or a ZIP.
Sequence showing the Bulk Print Labels wizard with two shipments selected, the Create Return dialog on a shipment in Delivered state and the Record Carrier Invoice dialog with DHL Express
From bulk label printing to the Create Return dialog (with original shipment, carrier, service type, Email Customer and return notes) and on to recording the carrier's invoice with Record Carrier Invoice.

last_health_check_status has three values

The last_health_check_status field takes Success, Failed or Unknown. During the first week, note which of the three it shows each day and compare it with the carrier's Last Sync Time and Last API Response.

What to check during the first week

Putting the above together, the review for the first few days looks like this:

  • Each carrier has the API Key, API Secret and Account Number from its account, and the right Company.
  • Custom Endpoint URL is only filled in where the «non-standard carriers» case applies.
  • Each carrier's Enabled and Connection Status, checked separately.
  • Last Sync Time and Last API Response, daily.
  • The value of last_health_check_status.
  • For each failed request: HTTP Status Code, Error Message, Response Snippet and Request Payload.
  • Which records are in Blocked, Exception or Attempted Delivery.

What it costs and how FlexigoTech can help

The module costs €9 excluding VAT per Odoo version, as a one-off payment, for 17, 18, 19 and 20; on Odoo 19 and 20 it also needs the FlexigoTech Cloud subscription, whose Connector plan costs €49/month or €490/year excluding VAT (Pro: €98/month or €980/year), with up to 3 platform accounts (Pro: 10). That connection through FlexigoTech Cloud stores the credentials encrypted, monitors synchronisation and emails you if it fails; without a subscription, or with the service suspended, whatever the subscription provides stops and your data stays in your Odoo.

You will find the details on the Odoo Apps listing and on the module page at flexigotech.com.

At FlexigoTech we implement Odoo 17, 18, 19 and 20 and build bespoke connectors and integrations. If you need a hand adding your carriers, reviewing the first failures or fitting the shipping flow to the way you work, tell us about your case.

Keep reading

Checked in the connector's source code (version 20.0) and the linked sources

Sources