- First release.
by Kavio Labs · for OpenCart 4.1.x
Royal Mail services at checkout with prices from your own table (service, zone, weight band), orders sent to Royal Mail Click & Drop from the order page or at an order status, PDF labels for OBA accounts, tracking numbers read back into the order history. You connect with your own Click & Drop API key. Click & Drop has no rate quote, so checkout prices are the table you maintain. A shipping extension with events and cron, no OCMOD.
Royal Mail services at checkout with prices from your own table (service, zone, weight band), orders sent to Royal Mail Click & Drop from the order page or at an order status, PDF labels for OBA accounts, tracking numbers read back into the order history. You connect with your own Click & Drop API key. Click & Drop has no rate quote, so checkout prices are the table you maintain. A shipping extension with events and cron, no OCMOD.
Royal Mail Click & Drop Shipping works with OpenCart 4.1.0.4.
We list the builds we install and test on. “Tested” means the test plan ran on that build; “Supported” means the build is inside the supported range.
| Version | Range | Runs on | Status |
|---|---|---|---|
| OpenCart 4.1.0.x | 4.1.0.0 – 4.1.0.4 | PHP 8.1 – 8.3 | Tested on 4.1.0.4 |
| OpenCart 4.0.2.x | 4.0.2.0 – 4.0.2.3 | PHP 8.0 – 8.2 | Supported |
The Documentation tab covers the settings and every screen.
OpenCart 4.1.0.4. Tested on OpenCart 4.1.0.4. The Compatibility tab lists every version range.
No. They work through OpenCart events and standard extension types (modules, order totals, themes). No core file edits, no OCMOD patches, no theme template edits, so OpenCart updates and other extensions keep working.
One production store domain with every subdomain (www, shop., staging.), plus local development hosts such as localhost, *.local and *.test. A store on another domain needs its own license; a second-store license is 40% off. You have 14 days after installing to enter the key. 12 months of updates and support are included; after that the extension keeps working and renewals are 50% off. How licensing works
Yes. Ask for a full refund within 30 days of your first purchase, no reason needed: open a ticket or write to [email protected] with your order number. The money goes back to the card or bank account you paid with within 5 business days of approval. Refund policy
Open a ticket from your account, so your license details are attached. We answer Monday to Friday: bug reports within 1 business day, how-to questions within 2. Support policy. Not a customer yet? Ask a pre-sales question.
8 more answers about setup and daily use in the Documentation tab.
Royal Mail Click & Drop Shipping connects your OpenCart 4 shop to Royal Mail Click & Drop, the online shipping service of Royal Mail for businesses. Customers pick a Royal Mail service at checkout with a price from a table you maintain; you send the order to Click & Drop from the order page (or let an order status do it); the tracking number comes back into the order history. You connect with your own Click & Drop API key.

What it does
Royal Mail is a trademark of its owner; this extension is not affiliated with or endorsed by Royal Mail. The Royal Mail logo is not used.
Requirements: OpenCart 4.1.0.x, PHP 7.4 or newer with cURL and OpenSSL, a Royal Mail Click & Drop account.
kv_royal_mail.ocmod.zip and click Install.Uninstall: Extensions > Shipping > Uninstall removes the settings, the key, the rate table, the shipments and the log. Click & Drop orders already created stay in Click & Drop and their tracking numbers stay in the order history.
Update: upload the new zip in the Installer; settings, key and rate table stay.

Checkout. Status, services offered, free shipping from (store currency), fallback price (offered as one "Royal Mail" method when no band covers the parcel), weight used when products have none, tax class, geo zone, sort order.
Connection. Click & Drop API key (stored encrypted; leave empty to keep it, enter - to remove it), account type, the Click & Drop service code of each service (empty = account default), package format, country of origin and customs category for orders outside the UK.
Rates. Per service: rows of zone, "up to" grams and price. The smallest band that holds the parcel weight is used; a parcel heavier than the largest band gets no price for that service. Zones: UK (GB), EU (member states), rest of the world.

Orders and tracking. Order status that sends the order to Click & Drop (only orders with a Royal Mail method), order status when the tracking number arrives, e-mail the customer, debug log. Cron: */10 * * * * php /path/to/opencart/cron.php or the secret address shown on the tab.
Shipments. The latest shipments with order, Click & Drop order, tracking number and state; tick rows and download one PDF with their labels (OBA accounts).
API log. Errors and warnings; with the debug log on, every request and response. The API key is masked.
Checkout. The customer chooses a Royal Mail service; the order keeps the method.
Send an order. Open the order, tab Royal Mail, press Send to Click & Drop. The order appears in Click & Drop with the address, weight, items, totals and service. With an OBA account the label PDF is stored with the order and can be printed from the tab.

Tracking. Once Click & Drop issues the tracking number the extension writes it, with the Royal Mail tracking link, to the order history. Press the refresh button to read it at once; the cron does it hourly.

Cancel. The red button cancels the Click & Drop order. A label already printed for it becomes invalid: destroy it.
Many orders. Settings > Shipments: tick shipments and download one PDF with the labels (OBA accounts).

| Item | Value |
|---|---|
| Extension code | kv_royal_mail (type shipping) |
| Settings | shipping_kv_royal_mail_* |
| PHP namespace | KavioLabs\KvRoyalMail (shared core in system/library/ of the extension) |
| Tables | kv_royal_mail_rates, kv_royal_mail_shipments, kv_royal_mail_log |
| Checkout route | extension/kv_royal_mail/shipping/kv_royal_mail (model getQuote) |
| Trigger | Action |
|---|---|
admin/view/sale/order_info/before | adds the Royal Mail tab to the order page |
admin/controller/common/header/before | licence check |
catalog/model/checkout/order.addHistory/after | sends the order at the chosen status |
| OpenCart cron, hourly | extension/kv_royal_mail/shipping/kv_royal_mail.cron reads tracking back |
Endpoints and shapes follow the official Swagger specification of the Click & Drop API v1 (api.parcel.royalmail.com/api/v1, Authorization: Bearer <API key>).
| Call | Used for | Notes |
|---|---|---|
GET /carriers | test connection | |
GET /services | list service codes of the account | serviceCode, serviceName |
POST /orders | create the order ({"items":[CreateOrderRequest]}) | answer createdOrders / failedOrders; label.includeLabelInResponse for OBA |
GET /orders/{ids} | tracking, printed / manifested / shipped dates | identifiers joined by ;, max 100 |
GET /orders/{ids}/label | PDF labels (documentType=postageLabel, includeCN) | OBA only, HTTP 403 otherwise |
DELETE /orders/{ids} | cancel |
Not used: update order, return labels, manifest. HTTP 401, 403 and 429 come without a body and are mapped to readable messages; 429 is retried once.
php81 tests/unit.php and php83 tests/unit.php (129 checks) against tests/mock-server/server.js (a stand-in built from the Swagger, port 19377) and a scratch MariaDB database; node tests/e2e.js runs the browser flow on an OpenCart 4.1.0.4 dev store (62 checks). Not tested against a live Royal Mail account.
Hidden setting shipping_kv_royal_mail_base_url points the extension to the mock; it is honoured for loopback hosts only.
No. Click & Drop has no rate quote API. The price at checkout comes from the table you maintain in the Rates tab.
Only for labels through the API. Without one the order is created in Click & Drop and you print and pay for the label there.
No. Click & Drop reports no delivery event; the tracking link shows it.
The default currency of the store; shown in the customer's currency like any shipping price.
No, OpenCart 4.1 only.
No. A shipping extension, events and cron.
In the order history and on the Royal Mail tab; the customer sees it in the account.
No. Royal Mail is a trademark of its owner. The Royal Mail logo is not used.
Buy with confidence
This product was tested on this build. Builds we did not test are not listed.
Updates and support are included in the price. The product keeps working afterwards; renewing is optional.
How licensing worksIf it is not what you expected, tell us within 30 days and we refund the order.
Refund policyPay by card, Apple Pay or Google Pay on Stripe's secure page. Your card number never reaches our server.
Ask a pre-sales questionSold by Kavio Labs Software Limited, registered in England and Wales No. 17532441. About us
More for OpenCart
Server-side tracking for OpenCart 4.x and 3.0.x: purchases, refunds, add to cart, checkout, product views and leads go from your server to the free official GA4 Measurement Protocol, Meta Conversions API and TikTok Events API, deduplicated with the browser pixels through shared event ids. Consent-aware, SHA-256 hashed customer data, order status mapping, queue with retries, test mode and an event log. No paid relay, events only, no OCMOD.
The department store theme for OpenCart 4.x and 3.0.x: colour-coded departments, a department list beside the hero slider with two side promos, a big search with a department selector, tabbed product blocks, a 2 + 1 + 2 offer grid, deals of the day with real countdowns, a department showcase, a promotions band and a three-column product page with a sticky buy box. Four styles (Meridian, Harbor, Citrus, Night) and your own colours on top. Events only, no core changes.
Stop AI crawlers, scrapers, vulnerability scanners and unwanted countries before OpenCart 4.x or 3.0.x builds a page. Googlebot and Bingbot are verified by DNS and always allowed; 50+ bots get one switch each; country rules use free GeoIP databases and can close only the checkout; IP and network lists, rate limits, honeypots and the cart flood fix; a one-second challenge instead of a captcha; learning mode, dashboard, log, IP tester and Cloudflare export. No core changes, no OCMOD.