- First release.
by Kavio Labs · for OpenCart 4.1.x
Loyalty points and referrals for OpenCart 4: points on complete orders with a tier multiplier, spending as a taxed order total line, expiry per earning, reversal on cancel or refund, a personal referral link with a welcome coupon, fraud flags and a hold before the reward is paid. Own ledger, hourly cron, no OCMOD.
Loyalty points and referrals for OpenCart 4: points on complete orders with a tier multiplier, spending as a taxed order total line, expiry per earning, reversal on cancel or refund, a personal referral link with a welcome coupon, fraud flags and a hold before the reward is paid. Own ledger, hourly cron, no OCMOD.
Loyalty Points & Referral Rewards 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.
12 more answers about setup and daily use in the Documentation tab.
A loyalty program and a referral program in one extension for OpenCart 4.1. Customers earn points when an order is complete, see their balance, tier and history in their account, spend points in the cart and invite friends. Everything lives in one ledger that never awards or returns the same order twice.


Requirements: OpenCart 4.1.0.x, PHP 7.4 or newer with the mbstring extension.
kv_loyalty_referral.ocmod.zip and click Install.php /path/to/cron.php every few minutes), or call the address shown on the Data and cron tab every hour. It pays referrals whose hold ended and expires points.Uninstall: Extensions > Modules > Uninstall removes the events, the cron entry and the order total line. It keeps points, referrals, member codes, the licence state and your settings, because OpenCart 4 updates an extension by uninstalling and installing it again. To remove everything, use Data and cron > Delete all data first.
Update (OpenCart 4.1): Extensions > Modules > Uninstall, then Extensions > Installer: Uninstall and Delete the old entry, upload the new zip, Install, and Extensions > Modules > Install. Points, referrals, the licence and your settings are restored; open the settings page once so database changes of the new version run. Installing again never resets existing settings.
Open Extensions > Extensions > Modules > Loyalty Points & Referral Rewards. Tabs: General, Earning, Redeeming and tiers, Referrals, Members, Referral review, Data and cron, License.

| Setting | Default | Description |
|---|---|---|
| Points per 1.00 spent | 1 | Calculated on the products after all discounts (coupons, points, other negative totals) in the default currency. Rounded down |
| Welcome points | 0 | Given once when an account is created |
| Points expire after (days) | 365 | 0 = never. Counted from the day of each earning; the oldest points are spent first |
| Order statuses that award points | store's Complete statuses | Points are awarded once per order, when it first reaches one of these |
| Order statuses that take points back | Canceled, Refunded, Reversed, Chargeback, Voided, Denied, Expired, Failed | Earned points of the order are taken back, spent points are returned |
| Core product reward points | skip | Lines whose product has OpenCart's own "Reward Points" value earn nothing here. This extension keeps its own balance, separate from OpenCart's reward points |
| Setting | Default | Description | ||
|---|---|---|---|---|
| Customers can spend points | on | Adds the "Use loyalty points" box to the cart and the "Loyalty points" order total line | ||
| Value of one point | 0.01 | Default currency | ||
| Smallest redemption | 100 points | |||
| Largest share of the products | 50% | Of the products after other discounts. Never shipping or tax | ||
| Tiers | Silver 500 x1.25, Gold 2000 x1.5, Platinum 5000 x2 | One per line: `Name | spend | multiplier`. A customer reaches a tier when completed orders of the window add up to the spend. The tier of an order is the tier before that order |
| Tier window (days) | 365 |
Tax. The points discount is spread over the product lines in proportion; the percentage taxes of the discounted part are removed, fixed-amount taxes stay (the same as the core coupon). Place of the line: sort order 4 (Extensions > Order Totals), before the Tax line.
| Setting | Default | Description |
|---|---|---|
| Referral program | on | |
| Link parameter | ref | https://yourstore.com/?ref=ANNA4821 |
| Link valid for | 30 days | |
| First-party cookies | on | kv_ref keeps the code, kv_dev is a random browser token used only for the same-device check. Off: the code lives in the browser session only and the device check is skipped. Declare them in your cookie notice |
| Reward for the referrer | 500 points | |
| Points for the friend | 0 | Paid together with the referrer's reward |
| Welcome coupon | 10% | A single-use core coupon created at sign-up, valid 30 days. Not created when a flag is set |
| Minimum first order | 25 | Products after discounts. The first completed order of the friend that reaches it qualifies |
| Hold before paying | 14 days | Match your return window. A cancelled or refunded order during the hold means no reward. After the payout nothing is taken back |
| Rewards per referrer | 20 per month, no total cap | Referrals above a cap are rejected with the flag cap_month / cap_total |
| Flagged referrals | hold for review | Or reject |
Flags. self_email (the referrer's own address, Gmail dots and +tags ignored) is always rejected. same_ip, same_device, same_address, same_phone and existing_customer (the e-mail ordered as a guest before the account existed) are held for review or rejected, per setting. Offices and households share IPs, which is why flags go to review by default.
The scheduled task (hourly) pays referrals after the hold and writes off expired points. Run the task now does the same. Delete all data removes every ledger entry, referral and member code after you type DELETE.
The key field and a status card; the extension works for 14 days without a key. Without a valid license the storefront features (earning, spending, referral tracking, the account page) stop; the admin is never blocked and reversals for cancelled orders still run.

?ref=CODE. The code is kept in a cookie (or the browser session)It sends no e-mails, does not show prices in points, does not change OpenCart's built-in reward points and does not pay referral rewards as cash or store credit.
No. It keeps its own balance. OpenCart's reward points (and the core "Reward Points" order total) keep working separately. Products that carry core reward points are skipped for earning by default so a product is never rewarded twice.
When the order first reaches a status in the "award" list (by default the store's Complete statuses). A repeated Complete, or Complete again after Processing, earns nothing more. Cancelled or refunded takes the points back; Complete again after a refund earns them again.
The balance goes negative (a debt); new points pay it off first, and nothing can be spent while it is open.
No. They pay at most the share you set of the products after other discounts. The tax of the discounted part is removed.
Yes. The coupon and the points line are both discounts; the points limit is based on the products after the other discounts.
Not during the hold. Set the hold to your return window. After the payout nothing is taken back.
A shared IP raises the flag same_ip only against the referrer's own known IPs. Flagged referrals wait for your decision by default.
Not in this version.
kv_ref (the referral code, up to the days you set) and kv_dev (a random token for the same-device check, one year) when the setting is on. Both are first-party. Switch them off to keep the code in the browser session only.
No. Use Delete all data on the Data and cron tab. OpenCart 4 updates extensions by uninstalling and installing them, so data is kept on purpose.
Saving the edit returns the spent points and spends them again from the saved order. This path is covered by code, not by an automated browser test in this release.
One ledger per customer for the whole installation; settings are global.
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.