Odoo+atoship

Odoo + atoship

Odoo can book a carrier. It cannot work a shipping desk. This module adds the page that was missing — price a whole day's deliveries against USPS, FedEx, UPS and DHL, and buy the labels from one screen.

Odoo 19Odoo 18Odoo 17
The atoship Ship Queue inside Odoo — a day of deliveries priced across USPS, FedEx and UPS, with weight, box, rate and a Buy button on every row

The Ship Queue — one row per delivery, with the price and the Buy button on it.

Four deliveries selected in the Odoo Ship Queue, with Get rates, Buy labels, Print labels, Refresh tracking and Void labels

Tick any number of rows — rate, buy, print, track or void them together.

How it works

From git clone to first label in under 10 minutes

01

Clone the branch that matches your Odoo

atoship is a self-hosted Odoo module installed from GitHub — no marketplace purchase, no license key. The repository IS an addons directory, so clone it and point Odoo at it.

$git clone -b 19.0 https://github.com/atoship/atoship-for-odoo.git /opt/atoship-addons$# then add /opt/atoship-addons to addons_path and restart Odoo
02

Install the module

In Odoo go to Apps → Update Apps List → search AtoShip → Install. An AtoShip delivery method is created for you on install.

03

Connect your account

AtoShip → Configuration → Connection → Connect to AtoShip. Approve on atoship.com and you are redirected back. OAuth 2.0 with PKCE — there are no API keys to copy, and tokens refresh themselves.

04

Work the Ship Queue

Open AtoShip → Ship Queue. Price the whole page in one click, pick a carrier and service per row, and buy — one at a time, or tick the page and buy them together.

Everything you need to ship from Odoo

A complete shipping desk, built into your existing Odoo install

Every rate, in the row

Each delivery carries the carrier's own mark, the service, the price and the transit time — plus a dropdown of every other rate quoted for it. Choosing on price alone is how a seller buys 7-day ground for a next-day promise.

Buy one, or buy the page

A Buy button sits in every row beside the price it will charge. Tick any number of rows and rate them, buy them, print them, refresh their tracking or void them together.

Weigh and box in place

Type the weight straight into the row, in whatever unit the scale in front of you reads — kg, g, lb, oz, cm, in — switched from the row itself. Tick several rows and one edit re-weighs, re-boxes or re-origins all of them.

The wallet, before you buy

Your balance sits beside the page title, because it is the number that has to be read before pressing Buy rather than after a purchase fails.

Never buys twice

The row is locked before the re-buy guard is read, so two operators working the same queue cannot both purchase the same delivery — one is told the other is on it.

Void, track and return

Void a label and the refund follows the carrier's rules — and a void the carrier refuses is reported, not swallowed. Prepaid return labels are one click from the same row.

Odoo's own delivery methods vs. atoship

What changes on a desk that ships fifty orders a day

TaskOdoo on its ownWith atoship
Rate shoppingOne price, on one order, from one methodEvery carrier's rate, on every row
Who is deliveringNot shownCarrier, service and transit time in the row
Fifty ordersOpen fifty recordsOne page, tick and buy
Re-weighing a batchEdit each deliveryTick the rows, type it once
Buying twice by accidentNothing stops youThe row is locked; the second operator is told
Cancelling a labelChase a refund by emailVoid from the row, refund by carrier rules

Three places to ship inside Odoo

Every surface reads live rates from atoship and writes tracking back onto the delivery

Ship Queue

AtoShip → Ship Queue — every outbound delivery in one table, with destination, contents, weight, box, carrier, service and price. Tabs across the top carry live counts: To ship, Shipped, Needs review, No shipment needed.

The delivery itself

Everything on the queue is also on the delivery order, for the one-off case: fetch rates, compare services, buy, print, track, void, or buy a prepaid return label.

The sales order

AtoShip installs as a normal Odoo delivery method, so live shipping costs price into quotations and sales orders the way any carrier does — leave it on cheapest of any carrier, or pin one.

Frequently asked questions

Which Odoo versions are supported?

Odoo 17, 18 and 19 — Community or Enterprise. Odoo distributes one module per major series, so the repository has one branch per version: clone 19.0, 18.0 or 17.0 to match your install. All three are built from the same source and each is installed into a clean database before release.

Does it work on Odoo Online (odoo.com SaaS)?

No — Odoo Online does not allow third-party modules at all. Use Odoo.sh or a self-hosted install. That is an Odoo platform restriction, not an atoship one.

How do I install it?

git clone -b 19.0 https://github.com/atoship/atoship-for-odoo.git /opt/atoship-addons, add that directory to your addons_path, restart Odoo, then Apps → Update Apps List → Install AtoShip Shipping. The repository is itself an addons directory, and the module folder inside it is named atoship_shipping, which is its technical name.

Do I need an API key?

No. Connecting is OAuth 2.0 with PKCE — click Connect to AtoShip, approve on atoship.com, and you are redirected back. Tokens are stored per company, readable only by system administrators, and refreshed automatically. Your Odoo does need a public HTTPS URL, because the OAuth callback is opened by the browser.

Which carriers can I use?

USPS, FedEx, UPS and DHL through a single connection. atoship is a thin client: all rating, carrier routing and label generation run on atoship's v1 API, and only real, name-brand carriers are ever shown — never backend aggregators. It is parcel shipping only; freight and LTL are out of scope.

What does it cost?

The module is free and open source (LGPL-3) — no license, no per-label subscription, no monthly platform fee. You pay the discounted carrier rate for each label from your funded atoship wallet, and tracking is included.

What happens if a rate goes stale?

Quotes are stored, so reopening the queue is instant with no API calls. Editing a weight or a box drops every stored quote for that row rather than just the chosen one, and the purchase re-resolves your chosen service to a live rate. A stale price costs you a re-quote, never a wrong charge — and if the service you picked is no longer offered, the row fails loudly instead of quietly falling back to the cheapest.

Does it handle international orders?

Yes. Customs is built from the goods actually in the box and valued in your currency converted to USD, so a cross-border order does not rate fine and then fail at purchase.

Start shipping from Odoo today

Install the free module, connect in one click, and print your first label in minutes.