Get in touch
  • OpenCart
  • Shipping
  • v1.0.2

Marketplace Returns Control for OpenCart — returns and uncollected parcels under control

A module for OpenCart 4, 3 and 2.3 that checks the waybills of your orders against Nova Poshta, Ukrposhta and Meest and shows the parcels that need a person: a return has "arrived" but the goods are not on the shelf; storage at the branch is ending; a parcel is stuck; the order status contradicts the parcel; money was refunded before the goods came back. Pro also reconciles Rozetka, Prom and Epicentr orders, checks every hour and sends a digest by e-mail and Telegram.

Download Free
Pro · lifetime licence The more sites, the less each one costs
Compatibility
OpenCart 4.0.2 – 4.1.x (tested on 4.1.0.3 and 4.0.2.3, including DB_DRIVER=pdo) · OpenCart 3.0.x (tested on 3.0.5.0) · OpenCart 2.3.0.2 (PHP 7.0) · PHP — whatever your OpenCart version needs (tested on 7.0, 8.1, 8.2, 8.3)
Version
v1.0.2 (OpenCart 4)
v1.0.2 (OpenCart 3.x)
v1.0.2 (OpenCart 2.3)
Licence
one site, lifetime
Trial
7 days, no card, one per site
Updated
24 September 2026
Or all 144 Pro modules with All Access — 4 990 ₴ / year

What Free has,
and what Pro adds

The free version works with no time limit. Pro adds the rest of the features in the table.

Feature Free Pro
Waybills from orders automatically: our Nova Poshta Premium, Ukrposhta and Meest modules, any other table or typed in the order ✔ ✔
Nova Poshta and Ukrposhta tracking (up to 100 waybills per request) and Meest with the Check now button ✔ ✔
The Nova Poshta return waybill is found automatically and tracked separately ✔ ✔
"The carrier says returned, but you have no goods" — a return closes only with your confirmation ✔ ✔
"Storage at the branch is ending" — with the date the parcel goes back ✔ ✔
"Stuck" — no new status for N days ✔ ✔
"Order status contradicts the parcel" and "Money refunded before the goods came back" ✔ ✔
Tabs Needs attention, Returns, In transit, Done, filters and search by waybill or order number ✔ ✔
"Return received" with a comment, "Mark resolved", history of every parcel ✔ ✔
Returns control block on the order page, manual waybill and return waybill ✔ ✔
Carrier keys come from our shipping modules, nothing to type twice ✔ ✔
Builds for OpenCart 4.x, 3.x and 2.3, admin in Ukrainian, Russian, English ✔ ✔
Rozetka, Prom.ua, Epicentr: the marketplace status is reconciled with the carrier and the order — ✔
"Marketplace closed it as received, the carrier did not deliver" and "Marketplace and carrier disagree" — ✔
Automatic check every hour (OpenCart 4 scheduler or a cron URL) — ✔
Morning e-mail digest — ✔
Telegram: urgent cases at once, digest in the morning — ✔
Order status changes by itself after a confirmed return or a refusal — ✔
CSV export of the list — ✔

What it looks like

Marketplace Returns Control parcel list in OpenCart 4.1, Needs attention tab (Ukrainian admin)
Sales → Returns control, Needs attention tab (OpenCart 4.1, Ukrainian admin): Epicentr closed the order as received while the parcel is at the branch; money refunded before the goods; Rozetka and Ukrposhta disagree. Every row has the carrier status with its code, the verdict and the actions: Return received, Mark resolved, history.
Returns control block on an OpenCart order page with a confirmed Ukrposhta return
The block on the order page: Ukrposhta delivered the return to the sender, the return was confirmed by hand with a comment. Below — fields for a waybill and a return waybill if the shipping module did not write them.
What to watch settings: waybills from the Nova Poshta, Ukrposhta and Meest modules, another table, day thresholds
What to watch: the tables of our Nova Poshta, Ukrposhta and Meest modules were found automatically; next to them — another table for a third-party shipping module, the watch window, “stuck after”, “unconfirmed return after”, the storage warning and order statuses.

Key points

What the buyer sees

Buyers do not see the module: nothing changes in the storefront or the checkout, and there are no extra requests or scripts on the store pages.

What the admin gets

The Sales menu gets a Returns control item with the number of problem parcels. Settings are in Extensions → Extensions → Modules → Marketplace Returns Control.

The trial starts when you ask

A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site

Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. If our server is unreachable, Pro keeps working for 14 more days. For studios — keys for 5 or 25 sites, or unlimited.

Technical requirements

  • OpenCart 4.0.2 – 4.1.x (tested on 4.1.0.3 and 4.0.2.3, with the mysqli and pdo database drivers), 3.0.x (tested on 3.0.5.0) or 2.3.0.2.
  • PHP — whatever your OpenCart version needs: the 2.3 build was tested on PHP 7.0, the others on PHP 8.1, 8.2 and 8.3.
  • Outgoing HTTPS requests from the server to the carrier APIs (and to the marketplace cabinets in Pro).
  • For the hourly check in Pro — the OpenCart 4 scheduler or a hosting cron that opens the URL from the settings once an hour.
  • For Nova Poshta return waybills — the sender’s key or the sender phone; without them the module tracks the main waybill.
  • The Rozetka key from Marketplace Waybills can be decrypted only if PHP has the sodium extension; without it, enter the Rozetka login and password in this module.
  • The default Complete, Canceled and Refunded order statuses are the standard OpenCart IDs (5, 7, 11); if yours differ, pick them in the settings.

Version history

v1.0.2 Current 24 September 2026

The Prom.ua order status is shown the way Prom names it, without the raw English delivery code appended (“Скасовано / delivered” becomes “Скасовано”).

v1.0.1 24 September 2026

OpenCart 4 with the pdo database driver: the parcel list, search, CSV, digest and the cron check no longer fail with an SQL error.

v1.0.0 First release September 2026

For OpenCart 4.x, 3.x and 2.3: waybills from the Nova Poshta, Ukrposhta and Meest modules, another table and the order, tracking of three carriers, Nova Poshta return waybills, verdicts,…

Frequently bought with Marketplace Returns Control for OpenCart

4 modules in one order — 40% cheaper than separately

“Store starter” bundle Marketplace Returns Control Nova Poshta Premium LiqPay Telegram notifications and Viber/SMS for customers Need more — all 144 modules in All Access for 4 990 ₴.
3 790 ₴ lifetime instead of 6 260 UAH bought separately
Buy the bundle →

Full module description

Marketplace Returns Control for OpenCart is a module for stores that ship with Nova Poshta, Ukrposhta or Meest and sell on Rozetka, Prom or Epicentr. A parcel the buyer did not collect costs you twice: shipping there and back, plus goods that are “somewhere on the road”. Worse, the carrier or the marketplace sometimes closes such a parcel as “delivered” or “returned” while it still sits at the branch. A week later nobody remembers it had to be picked up.

The module checks every waybill of your orders with the carrier (with the Check now button, and in Pro every hour) and shows only the parcels that need a person. A return is closed not by the carrier status but by your Return received — that is, when the goods are really on the shelf. Waybills and keys come from our Nova Poshta Premium, Ukrposhta and Meest modules, so after installation there is usually nothing to fill in.

What the buyer sees

Buyers do not see the module: nothing changes in the storefront or the checkout, and there are no extra requests or scripts on the store pages. It works in the admin. Buyers only notice the effects: you call while the parcel is still at the branch, not after it has gone back; refunds for returns are paid when the goods really arrived; the order status matches what happened to the parcel.

What the admin gets

The Sales menu gets a Returns control item with the number of problem parcels. Settings are in Extensions → Extensions → Modules → Marketplace Returns Control.

  • One verdict per parcel. Every waybill gets exactly one verdict, and the list splits into tabs: Needs attention, Returns, In transit, Done, All. Next to it — the carrier status with its code, the date of the change, the storage end date, the linked OpenCart order and the marketplace.
  • Actions. Return received with a comment, Mark resolved (the parcel leaves Needs attention and comes back if its state changes again), delete, history.
  • Filters and search. By source (OpenCart, Rozetka, Prom, Epicentr), carrier, waybill, return waybill or order number.
  • Manual adding. Add a waybill by hand — for a parcel that is not among the OpenCart orders, for example a marketplace order shipped by hand.

The block on the order page shows the parcels of this order, the verdict, the Return received / Undo confirmation / Mark resolved buttons and the history: who confirmed what and when. If no shipping module wrote the waybill, you can enter it here together with the return waybill using Save and check.

  • What to watch. Waybills from the tables of our Nova Poshta Premium, Ukrposhta and Meest modules (the module shows “found” itself), from another shipping module’s table or typed in the order. How many days of orders to take, which statuses to skip, after how many days without movement a parcel is “stuck”, how many days before storage ends to warn.
  • Complete, Cancelled and Refunded statuses. The module compares the parcel state with them. The defaults are the standard Complete, Canceled and Refunded; if your store uses others, pick yours.
  • Carriers. Keys come from our shipping modules. Own fields are needed only if those modules are not installed or a different key is needed here. Every carrier has Save and check.
  • Order history. A history line without notifying the customer when a problem is found or a return is confirmed (can be switched off).

Pro: marketplaces, automation, Telegram

  • Rozetka, Prom.ua, Epicentr. Cabinet orders with waybills are reconciled with the carrier and with your order. The module catches three situations: the marketplace closed the order as received while the carrier did not deliver the parcel; the marketplace and the carrier disagree; the buyer got the money back before the goods returned. Credentials from our Marketplace Waybills, Epicentr Price & Stock Sync and Prom Model Guard modules are picked up automatically.
  • The link to the OpenCart order comes from Marketplace Waybills. Marketplace orders without an OpenCart order also get into the list.
  • Hourly check of carriers and marketplaces without a button. In OpenCart 4 — with the built-in scheduler (Extensions → Cron Jobs); if your hosting does not run it, or in OpenCart 3 and 2.3 — with the cron URL from the settings, once an hour.
  • Morning e-mail digest: the list of parcels that need attention.
  • Telegram: urgent cases (marketplace closed it as received, marketplace and carrier disagree, money refunded before the goods, “returned” without your confirmation, parcel lost) at once, the digest in the morning.
  • Order status changes by itself: after a confirmed return and after a refusal, with a history line that does not notify the customer.
  • CSV of the list with the current filters, semicolon-separated with a BOM — opens in Excel without encoding trouble.

How it works — step by step

  1. Check now (and in Pro every hour) first picks up new waybills: from the shipping modules’ tables, another table and the order block. It takes orders within the watch window (60 days by default); orders without a status and in the statuses you skip are left out.
  2. Then the module asks the carriers: Nova Poshta and Ukrposhta in batches of up to 100 waybills, Meest one by one. Parcels that were never checked go first, then the oldest checked.
  3. Each carrier answer is reduced to one state: in transit, at the branch, delivered, refused, returning, returned to the sender, lost. For Nova Poshta the module takes the return waybill (except redirection) and the date storage ends.
  4. In Pro the module reads Rozetka, Prom and Epicentr orders with waybills and adds the marketplace state and the refund to the parcel.
  5. All of that plus your order status gives one verdict, from the most important to the ordinary: marketplace closed it as received, disagreement, money before goods, “returned” without confirmation, lost, order status contradicts, storage ending, stuck.
  6. Every change goes to the parcel history, in Pro also to Telegram or the morning digest. A return closes only with your Return received.

Under the hood

  • No core edits. The menu and the order page block use OpenCart events, no OCMOD modifications. One class library is identical in the three builds, and the code is PHP 7.0 compatible.
  • Own tables oc_cc_mrc_parcel (one row per waybill), oc_cc_mrc_event (history), oc_cc_mrc_order (waybills typed in orders), oc_cc_mrc_kv (service data). The shipping modules’ tables are only read.
  • APIs: Nova Poshta TrackingDocument.getStatusDocuments, Ukrposhta Status Tracking, Meest openAPI tracking. In Pro — Rozetka Seller API, Prom.ua API, Epicentr Marketplace API.
  • Keys and tokens are stored encrypted (AES with HMAC) and never printed in HTML. Keys of our modules are decrypted by the module itself, without loading their files.
  • The licence lives in its own settings group: Save does not touch it, neither does uninstalling.
  • Removal: uninstalling removes the events and the cron job; the parcel tables stay for a reinstall. The “Delete the parcels, their history and the settings when the module is uninstalled” checkbox removes them too.

How to install

  1. OpenCart 4: Extensions → Installer → upload cc_mrc.ocmod.zip (do not rename the archive) and press Install. OpenCart 3: Extensions → Installer → cc_mrc-oc3.ocmod.zip. OpenCart 2.3: copy the contents of the upload/ folder from cc_mrc-oc2.ocmod.zip to the store root (FTP or the hosting file manager) — the 2.3 Installer does not copy files without a configured FTP.
  2. Extensions → Extensions → Modules → Marketplace Returns Control → Install, then Edit.
  3. What to watch: check that the shipping modules’ tables are marked “found”. Keys from our modules are picked up automatically — you will see “taken from the … module”.
  4. Sales → Returns control → Check now. Parcels appear in the tabs by verdict.
  5. When a return has physically arrived, press Return received in the list or on the order page.
  6. For Pro: paste the licence key from the e-mail after payment or press Try Pro for 7 days in the Pro licence section, then switch on the marketplaces and automation. For OpenCart 3 and 2.3 add the cron URL from the settings to your hosting cron, once an hour.

Questions
about the module

Didn't find the answer? Message us on Telegram and we'll reply within a business day.

@catcode_support Setup, compatibility, activation
Do I need a Nova Poshta API key?

No. Nova Poshta tracking works without a key. With the sender's key (or the sender phone in the settings) Nova Poshta also reports the return waybill and the date storage ends. If our Nova Poshta Premium module is installed, the key is taken from it.

Why confirm a return by hand?

Because the carrier status is exactly what can be wrong: a return is marked "delivered to the sender" while the parcel still sits at the branch. Such a parcel stays in Needs attention until you press Return received — that is, until the goods are really back on the shelf.

Another shipping module writes the waybills, not yours.

In the settings, the Another table row, enter its table, the waybill column, the order number column and the carrier (or Detect by number). A waybill can also be typed in the Returns control block on the order page.

Which marketplaces does Pro support?

Rozetka, Prom.ua and Epicentr. The module reads cabinet orders with waybills and reconciles the marketplace status with the carrier. The link to the OpenCart order comes from our Marketplace Waybills module; marketplace orders without an OpenCart order are tracked too. Logins and tokens already entered in our modules are picked up automatically.

Was it tested on live cabinets?

No. Nova Poshta answered live requests without a key. Ukrposhta, Meest, Rozetka, Prom and Epicentr were tested against their official documentation with test responses: these services have no public sandboxes. So try the module on your own parcels in the 7-day Pro trial, and if a status is read wrongly, tell us — we will fix it.

Is the licence yearly?

No. For OpenCart it is a one-time payment, a licence forever, and one licence covers all three builds: 4.x, 3.x and 2.3. The trial starts only when you press the button; when it ends, only the Pro features switch off — parcels and history stay.

Does the module change orders by itself?

In Free — no, it only adds a line to the order history without notifying the customer when a problem is found or a return is confirmed (can be switched off). In Pro you can choose a status after a confirmed return and after a refusal; the default is "do not change". The module does not let you pick Refunded for a refusal.

Does the module modify OpenCart files?

No. It works through OpenCart events (menu and order page), without OCMOD core patches, and has its own tables. It only reads the tables of our shipping modules.

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.

Order a custom module