Magento shipping for South Africa, sorted.

A Composer-installed module that speaks Magento's own vocabulary — sources, stocks, shipments, tracks — and hands the courier problem to a single API underneath.

Connect Magento
Magento orders in Motho
000000318 · Sandton, GPR 71.00 · The Courier Guy
1.8 kg · 32×24×14
000000317 · Bloemfontein, FSR 186.00 · RAM
12.0 kg · 60×40×30
000000316 · Knysna, WCR 92.00 · Fastway
0.6 kg · 20×15×8
Setup

How it works with Magento

No developer, no data migration, no downtime on your store.

01

Install via Composer

Require the module, run setup:upgrade and compile as usual. It ships DI configuration only — no core rewrites, no layout hijacking, no observers on checkout.

composer require motho/module-shipping

02

Configure the integration token

Create a Magento integration with order and shipment access, then paste the Motho API key under Stores → Configuration → Sales → Delivery Methods.

Magento_Sales::shipment, Magento_Sales::sales_order

03

Map sources to collection addresses

With MSI enabled, each source maps to a collection address so rates and pickups reflect the warehouse that's actually shipping the item. Single-source stores map once and forget it.

inventory_source_code → motho_collection_id

04

Shipments and tracks written back

Booking creates a real Magento shipment with the courier as carrier and the waybill as the track number, so order state, invoices and the customer account all stay correct.

POST /V1/order/:id/ship

What you get

Four things you stop doing by hand.

Rate comparison at fulfilment

Compare the network per shipment, per source. Because rating happens at fulfilment rather than in a checkout carrier plugin, there's no page-load cost and no cached-rate drift.

Booking and waybills over the API

Everything the admin UI does is available on the REST API underneath, so agencies can drive booking from an ERP or a bespoke fulfilment screen instead of the Motho dashboard.

Branded tracking pushed back

Tracks land on the Magento shipment, and the branded tracking page covers every courier so the customer never sees a courier-portal dead end.

Returns tied to RMAs

Create the inbound leg against the order and reference your RMA number on the waybill so the receiving team can match parcels to authorisations.

0 ms
added to checkout response time

The module registers no checkout carrier and makes no external calls during quote collection, so Magento's checkout timings are untouched.

FAQ

Magento shipping questions

Which Magento versions are supported?

Magento Open Source and Adobe Commerce 2.4.4 and later, on PHP 8.1 or 8.2. Magento 1 is end of life and is not supported.

Does it support Multi-Source Inventory?

Yes. Sources map to collection addresses, partial shipments per source are rated and booked separately, and the Magento shipment records reflect each leg individually.

Can we call it from our own code instead of the admin UI?

Yes — the module is a thin client over Motho's REST API. Quote, book, label, track and return are all available directly, with idempotent booking and signed webhooks for tracking events.

How does it behave in a multi-store or multi-website setup?

Store views and websites can each carry their own collection address, branding on the tracking page and courier preferences, while billing stays on one Motho account.

What about B2B orders and road freight?

Palletised and bulk consignments route to the road-freight carriers in the network rather than the parcel couriers, using the same booking flow with weight and dimension thresholds you control.

Does the module affect checkout performance?

No. Nothing runs on the checkout request path — no carrier collection, no external call during rate estimation. Rating happens after the order exists.

Connect Magento in minutes.

Free to start, no courier accounts to open, no contract.

Start shipping with Motho