Magento 2 Reward Points Extension and Loyalty Program

View Demo

Boost customer loyalty with reward points, unlimited tiers and a built-in referral program - all in one module. Reward shoppers for purchases, referrals and social shares to drive repeat sales and turn one-time buyers into brand advocates.

  • Increase the retention rate
  • Gain high-quality leads
  • Reward customers for spending or sharing on social media
  • Split the program into tiers
  • Refund with reward points
  • Use GraphQL, REST
  • Available in 15 languages
Marketplace Approved
Hyvä
Magento Cloud
GraphQL
WCAG
Mage-OS
Compatible with:
Community:
2.3.* - 2.4.9
Enterprise:
2.3.* - 2.4.9

Why Choose Our Reward Points Extension for Magento 2?

Our extension runs a complete customer loyalty program from a single module: reward points, unlimited tiers and a fully-featured referral program at no extra cost, plus GraphQL, REST and SOAP for headless stores. Reward shoppers for purchases, referrals, reviews and more to turn one-time buyers into repeat customers.

  • Customer Retention: The reward points extension allows customers to earn points for every purchase they make, incentivizing them to return and shop more to spend their expiring points.
  • Customer Engagement: It rewards customers for non-purchase actions such as account registration, birthday gifts, long-time inactivity, newsletter subscription, and more, encouraging them to be more active in your store.
  • Extended Reach: The reward points extension allows customers to earn points by referring friends and family and sharing your product pages on social media, expanding your store's reach and customer base.
  • Order Value: It encourages customers to increase their order value with reward conditions and personalized promo messages and lets you reward customers for purchasing specific product groups.

Set Up the Reward Program the Way You Want It

The Magento reward points system lets you award customers points for a wide variety of events, and decide how and when to stimulate sales by encouraging customers to use their accumulated points.

For example, you can limit the time for using the reward points, prompting the buyer to spend their earned points to avoid losing the benefits associated with them.

Encourage the spending and sharing of reward points

Reward your customers for a wide array of actions on your store, such as:

  • Signing up
  • Placing an order
  • Referring a friend
  • Writing a review
  • Having a birthday
  • X days of inactivity
  • Creating an RMA
  • Subscribing to the newsletter
  • Facebook share
  • Twitter tweet
  • Pinterest pin
  • Joining the affiliate program
  • Rising to the higher tier
  • Falling to the lower tier
  • Signing up for push notifications
  • Referred customer signing up
  • Referred customer placing an order
Earning rules in Mirasvit Magento Rewards Points system.

Control how, when, and who can redeem the points

The Magento Rewards Points system also lets you thoroughly customize how customers spend their points. You can define:

  • How long a particular rule will be active
  • The expiration timeline for points
  • The maximum number of points a customer can spend per order
  • The cart attributes to which the rules apply
  • The types of customers to which the rules apply
  • The types of goods customers can purchase using points
Spending rules in Mirasvit Magento 2 Customer Rewards Points extension.

Assist visitors in understanding your rewards program

Notification rules in Mirasvit Reward Points for Magento 2.

You need to make sure that customers have a clear understanding of how your program works. The module provides extensive notification rules: you can control what kind of information, where and under which circumstances you plan to display it. In particular, you can display information on the cart, reward points and referrals pages. This is great if your goals are to optimize the funnel, increase the average order value, promote specific deals, among other options.

For example, should your customer add just a single product to the cart, you can display "Buy another and receive extra points" right on the cart page. This will encourage them to go to the checkout with more goods.

Last but not least, the module sends automatic notifications each time the customer's point balance changes. They won't have to go to your site to remember how many points they have left.

Provide spontaneous rewards

Assigning points manually in Mirasvit Magento 2 Loyalty Program module.

Customers appreciate pleasant surprises, and you can assign points yourself to foster their loyalty. Your support team can also assign points as a form of compensation.

In addition, you can assist customers with manual point redemption.

Reward Points Loyalty Program

Here are some ways to get the most out of it:

Increase the average order value in your store

You can stimulate the purchase of complementary products or bundles by rewarding customers with a significant number of points.

This will make your existing cross-selling setup even more efficient.

Cross-selling with Mirasvit Magento 2 Rewards Points system.

Complement your sales or entirely substitute them

Promoting specific products with Mirasvit Magento 2 Rewards Points system.

Rewarding more points for certain products is very similar to having a sale with actual discounts.

However, you'll get much more out of it in the long run. The customers will have to return and buy more in order to redeem the points.

Recapture the interest

You can set a rule that rewards points to customers if they've been inactive for a long time, or you can manually reward those customers. The Magento 2 Loyalty Program will then send a balance change notification.

This creates a perfect opportunity for customers to return to your store and check how they can spend their rewards.

Email notification on manual reward points assignment in Mirasvit Magento Customer Reward Points extension.

Motivate customers to spend reward points before expiry

You can make the points expire faster. The Reward Points Magento module will automatically notify the customers a week prior to their points' expiration date.

This will encourage customers to redeem their Magento loyalty points - and spend more.

Tiered Loyalty Program

Get people to spend even more

You can split the Magento rewards program into an unlimited number of tiers. Customers in each tier can earn a different number of points for each action, and spend a different amount of points for the same amount of money while redeeming them. You can also add unique benefits with Magento conditions and make the higher tiers more valuable. The better their benefits are, the more customers will spend to get there!

Tiers in Mirasvit Magento 2 Rewards Points system.

Customer tiers are valuable to you as well. They take advantage of gamification: the tier list is essentially an incomplete task, and customers will be psychologically inclined to spend more to complete it. Not only that, tiers create a hierarchy, and many customers will want to spend more in order to secure a higher status.

Referral Reward Program

Gain curated leads passively

Referral tab on the customer's account page in Mirasvit Magento Customer Reward Points extension.

Our Magento 2 Reward Points extension comes with a fully-featured Magento referral program at no extra cost! It can work in two ways:

Provide an incentive to recommend your store

A loyal customer is already likely to share your store with any warm lead on their own, but it's better to give them a tangible benefit for referring someone and increase the chances of that happening.

With the Magento referral program extension, you can also reward them for the orders placed by people they refer. That way, they'll have a personal stake in directing only qualified leads to your store.

Increase their conversion rate

While referred leads tend to be higher quality, giving them an extra incentive to buy from you - which this referral program makes easy - works wonders for your profits.

Customer Experience

Everything the customers need is in one place

With Reward Points in Magento 2, a page with all the relevant information is added to the account dashboard.

Customers will be able to see the ruleset, their tier, the number of points they have, and their transaction history there.

They'll also be able to refer someone via email or a URL from that page.

Account page in Mirasvit Rewards Points for Magento 2.
Cart page notifications in Mirasvit Magento 2 Loyalty Program extension.

Guide the customers without diverting the funnel

The notifications will smoothly deliver the gist of the program's rules to customers while they're browsing your catalog and making purchases.

Analytics & Reporting

A list of customer transactions involving reward points in Mirasvit Magento Rewards Points system.

Find out who the most profitable customers are

There's a complete list of point-related transactions in the admin panel. You'll be able to see how many points each buyer has earned or spent.

No transaction will ever slip through the cracks!

Analyze the entirety of the program

The reports will let you ensure you're earning more than you're losing while giving out points as well as help you fine-tune your program.

Reports in Mirasvit Magento Customer Reward Points extension.

API Support

Connect the extension to other services

graphql support

The Magento 2 reward points extension supports GraphQL, REST, and SOAP, so you can easily integrate your program with external software. For example, you can connect your app and let customers redeem their points on mobile. This feature is particularly used in the Magento 2 Enterprise Reward Points version.

Still comparing reward points extensions? Our comparison of the main Magento 2 reward points and loyalty extensions puts Mirasvit, Amasty, Aheadworks and Webkul side by side on price, built-in tiers, referral and POS rewards, including where another one is the better fit.

No hidden fees
Our developers install the extension on your store and configure it for your setup, free of charge.
Lifetime access to source code
Access to free support and updates for 1 year
Updates and support prolongation - $120

Pay today $199 for the first year.

Then $120 for updates and support services per year.

Cancel anytime.

30 days money back guarantee
See it in action!
Pick a quick tutorial to learn about various aspects of this extension
Customer Reviews 146
Earn points for your review about this extension modules. $1 = 10 points
Write Your Own Review

check-circle You submitted your review for moderation.

BBMC Verified Buyer
From Carol Stream, United States
Using the module for over 3 years
Enterprise-level loyalty functionality for Magento
Reward Points is one of the most comprehensive Mirasvit extensions we use. It provides considerably more than simply awarding points after a purchase.

Earning rules, customer tiers, promotions, refunds, incentives, expiration policies and email reminders can all be configured around the store's loyalty strategy. Reporting is extensive, and the integration with Magento makes rewards part of the normal customer and order workflow. Done properly, it gives customers a real reason to return and use the value they have accumulated.

One thing administrators should be aware of is database growth. A busy rewards program creates a large activity history from earnings, spending, expiration, tier changes and other events. That history is useful for reporting and auditing, but the transaction tables can become very large on established stores.
Also installed:
Help Desk MX,  Knowledge Base,  Full Page Cache Warmer,  Advanced Product Feeds,  Follow Up Email,  Promo Banners,  Elastic Search Ultimate and 28 more
Tbb Verified Buyer
From Barcelona, Spain
Using the module for over 3 years
We use it in production for a loyalty programme with real volume: reliable and well integrated with orders
Reward Points has been running in production for several months on one of the Magento 2 projects we manage as an agency, supporting the loyalty programme.

The volume the module handles gives us confidence: more than 80,000 point transactions and an active base of tens of thousands of customers with a balance. In day-to-day operations, practically everything is processed automatically, which shows that the integration with the order lifecycle is solid.

On the configuration side, the most useful aspect for us is the separation between earning and spending rules. It lets us apply different redemption logic by context or segment without making the setup difficult to maintain. In our case, the earning side is mainly tied to purchase events and behaves very predictably.

The initial configuration deserves careful thought: rules, expiration, cancellations and refunds are best defined properly from the start. Once configured, maintenance is minimal.

The expiration system is well thought out: points can be configured with expiration logic, and the module handles it without requiring additional custom logic. In programmes with significant volume, this is essential.

I would also highlight the integration with the order flow. The module correctly records point generation, redemption at checkout, cancellations and partial refunds.

For loyalty programmes with real traffic, it delivers what's expected: correctly recording point movements, integrating with cancellations and refunds, and reducing the team's manual maintenance work.
Also installed:
Advanced Reports,  Affiliate,  Automatic Related Products,  Full Page Cache Warmer,  Google PageSpeed Optimizer,  Google Shopping Feed,  Extended Shopping Cart Rules and 9 more
Nico Verified Buyer
From Barcelona, Spain
Using the module for over 3 years
Es muy versatil
Lo que más destacó de este programa de puntos es lo flexible y versátil que es. Permite utilizar una cantidad importante de variables para premiar a los usuarios
Also installed:
Advanced Reports,  Affiliate,  Automatic Related Products,  Full Page Cache Warmer,  Google PageSpeed Optimizer,  Google Shopping Feed,  Extended Shopping Cart Rules and 9 more
Yurii Verified Buyer
From Odessa, Ukraine
Using the module for over 1 year
Great
Works great. No problem at all
Also installed:
Follow Up Email,  Advanced Reports
John Verified Buyer
From Bucharest, Romania
Using the module for 3 months
Good module
Hands down, the best rewards extension I’ve used for Magento.
Also installed:
Affiliate,  Advanced SEO Suite,  Elastic Search Ultimate,  Advanced Reports,  Layered Navigation,  GDPR,  Google PageSpeed Optimizer and 10 more
Manual & Support
Need more help?

Save time by starting your support request online and we'll connect you to an expert.

Frequently asked questions
chevron-down chevron-right

Can I reward my customers for the orders of their referred friends in my store?

Yes, our Magento 2 Rewards extension allows you to do that. You need to create a rewards earning rule that will give Magento 2 rewards points to the customer when their referred friend makes a new order in the Magento 2 store.

chevron-down chevron-right

How do I set up a referral program in Magento 2?

Enable the built-in referral program in the module settings, then create an earning rule that awards points for a referred friend's signup or order. Each customer gets a personal referral link and email invite from their account page. See the referral program details for a full walkthrough.

chevron-down chevron-right

Can a loyalty program be set up for specific customer groups?

Yes, in the settings of each earning or spending rule, you can specify to which customer groups this rule should apply. Additionally, you can enable the module in the customer account only for specific customer groups via the module settings.

chevron-down chevron-right

Is it necessary for a customer to join the loyalty program to participate in it?

Every registered customer automatically becomes a part of the loyalty program in your store. There is no need for a special registration process. However, if necessary, you can set different reward rules for various customer groups.

chevron-down chevron-right

Can the module be configured to calculate the tier based on the total purchase amount over a defined period, rather than the sum of earned points?

Yes, in the module settings, you can configure how you would like to calculate the tier for customers.

chevron-down chevron-right

Is it possible to configure the module to accrue points on the purchase amount after the discount is applied?

Yes, you can configure the module in a way that the number of earned points will be calculated after the applied discount.

Changelog
Version 3.7.0Oct 26, 2026
Remove applied points from a cart in GraphQl — The new mstRewardsRemovePointsFromCart mutation takes a cart_id and clears the reward points applied to that cart, so a headless or PWA storefront can offer "remove points" next to the existing mstRewardsApplyPointsToCart. Removing points from a cart that has none applied does nothing and returns no error.
Points earned for a product in GraphQl — mstRewardsEarningEstimate(productId, options) returns the points the product page badge shows: the base rate for a guest, the rate of the customer's tier when logged in, with the price of the selected customizable options taken into account. An unknown product or option ID returns a translatable GraphQl error.
Reward Points now works with Mirasvit Core 2.0.
Saving the Reward Points settings failed with "Invalid file name" — Saving any field in the Reward Points configuration, at any scope, rolled the whole section back with this error because the Rewards Logo image was checked in the wrong folder. Settings now save normally, and uploading, replacing or deleting the logo works as before.
The Referral Invitation Message never showed on the storefront — The text saved in the admin did not appear in the invitation box on the customer's "My Referrals" page. It now appears, and a message saved before version 3.2.10 (when the setting lived in a different group) is still picked up after the upgrade without saving it again.
The Points report failed with Mirasvit Core 2.0 — Refreshing the admin Points report now works on stores that use Mirasvit Core 2.0.
For developers using the referral repository in custom code: saving, loading and deleting a referral no longer fails with a type error, saving returns the referral itself, and loading an unknown ID reports "not found" only in that case instead of for every error.
Version 3.6.0Oct 21, 2026
Hyvä support now ships with the extension - The companion package mirasvit/module-rewards-hyva is gone: the points on product pages, the social share buttons, the "Use points" form in the cart and in Hyvä Checkout, and the customer account pages are now part of Reward Points itself. There is no second package to find and keep in step, and on a Luma store the Hyvä part simply stays dormant. Composer removes the companion package by itself when you upgrade. The "Use points" form in Hyvä Checkout no longer uses its own Magewire component, and magewirephp/magewire is no longer required.
GraphQl support now ships with the extension - mirasvit/module-rewards-graph-ql is gone; the mstRewardsTiers query, the mstRewardsApplyPointsToCart mutation and the reward points fields on Cart and Customer used by headless and PWA storefronts are part of Reward Points itself.
Reward points on placed orders in GraphQl - customer { orders { items { mstRewardPoints { … } } } } now returns the points spent on each order and the discount they gave, the points earned, and whether and when the earned points become available, so a headless order history can show them. Points given back by a cancellation or refund are subtracted, a cancelled or closed order does not show its promised points as pending, and an order with no points left returns null. A page of orders is loaded in a few queries. Magento 2.3 has no customer.orders; there the same fields are on customerOrders { items { mstRewardPoints { … } } }.
Points earned for a product in GraphQl - mstRewardsEarningEstimate(productId, options) returns the points the product page badge shows: the base rate for a guest, the rate of the customer's tier when logged in, and the price of the selected customizable options taken into account. A product that does not exist is a GraphQl error.
⚠️ The Hyva_MirasvitRewards, Hyva_MirasvitRewardsBehavior, Hyva_MirasvitRewardsCatalog, Hyva_MirasvitRewardsCheckout and Hyva_MirasvitRewardsCustomerAccount modules are gone, not renamed - You only need to act if you referenced them yourself: in a custom di.xml, a layout file, or a deployment script that enables modules by name.
⚠️ If you overrode a Hyvä template in your theme, check it - Overrides of the Mirasvit_Rewards* templates in your theme are still read, but most of those templates are now shared between Luma and Hyvä, so compare your copy with the new one. Four templates the Hyvä package referenced under its own name moved: Hyva_MirasvitRewardsCatalog::pricing/adjustment.phtml is now Mirasvit_RewardsCatalog::pricing/adjustment.phtml; Hyva_MirasvitRewardsCheckout::checkout/price-summary/total-segments/*.phtml is now Mirasvit_RewardsCheckout:: with the same path; Hyva_MirasvitRewardsCheckout::checkout/cart/wireusepoints.phtml is replaced by Mirasvit_RewardsCheckout::checkout/cart/usepoints.phtml; and Hyva_MirasvitRewardsBehavior::js/social.phtml is gone (the script is now Mirasvit_RewardsBehavior::js/social.js). On Hyvä the cart block now uses Mirasvit_RewardsCheckout::checkout/cart/rewardspoints-hyva.phtml, so a Hyvä theme override of checkout/cart/rewardspoints.phtml is no longer read there. An override at an old path is simply not read, with no error to say so.
⚠️ Reward Points now requires Magento's GraphQl modules - magento/module-graph-ql, magento/module-customer-graph-ql, magento/module-quote-graph-ql and magento/module-sales-graph-ql are now Composer dependencies. If your project removes Magento's GraphQl modules (for example with a replace section in the root composer.json), keep these four.
After upgrading a Hyvä store, run bin/magento hyva:config:generate and rebuild your theme's Tailwind CSS.
The social share buttons, the points on product pages, the reward points notification and the tier details popup now use the same lightweight script on Luma and Hyvä.
⚠️ Points transactions are now indexed by their code (a new index on mst_rewards_transaction.code), which speeds up every order lookup of earned and spent points (order pages, the admin order totals, the GraphQl order history) on stores with a long transaction history.
The reward points notification on product pages is no longer cached separately for every tracking parameter in the URL (utm_source, gclid, …), so the block cache holds one copy instead of many.
⚠️ Storefront labels follow one casing style: sentence case for descriptions, title case for buttons and actions. Some phrases changed (for example "Remove auto-applied points" is now "Remove Auto-Applied Points" and "Points Amount to Spend" is now "Points amount to spend"), so your own translations of those phrases need updating.
Hyvä Checkout did not tell the customer about the minimum points to spend - An amount below the minimum was reported as applied without the "Minimum number is X" message, and there was no "Remove auto-applied points" control. Hyvä Checkout now applies points through the same form and messages as the Luma checkout
AddToAny share buttons never appeared on the Hyvä referral widgets - Luma was unaffected
The "earn N points" hints on the Hyvä share buttons showed as plain text blocks - They are now hover hints, as on Luma
The subscribe and unsubscribe links on the Hyvä points history page did not work - They now use the same form as Luma
Tier names were not escaped on the Luma account Tiers page - in "Your current tier is…", "Earn N to get to…" and the tier details popup
The Hyvä cart showed "You Earn" only to customers who could spend points - The row waited for a totals refresh that only the "Use points" form or a shipping estimate triggers; it is now there from the first page load
On phones, a long first or last tier name on the Luma account page no longer sits against the screen edge; it lines up with the page margin
Partial refunds gave back the wrong number of points - A credit memo restored spent points and took back earned points by its share of the order subtotal. With a spending rule limited to some items, or with points earned on the discounted price with tax, both amounts were wrong (for example 2,995 of 16,500 spent points restored, and 588 earned points taken back instead of about 330). Spent points now follow the refunded items' share of the points discount and earned points follow their share of the earning base; referral rewards are still reversed by the subtotal share, and no empty 0-point "restore" transactions are written
Customers reaching a behavior rule's daily points limit earned nothing, with no explanation - Once a customer hit the daily limit, further reviews, "email a friend" sends or social shares silently earned nothing, which looked like a broken program. A customer submitting a review now sees a notice, and the points history shows a 0-point "daily limit reached" line for the blocked action
The entered shipping address was replaced with the customer's default address - When a logged-in customer estimated shipping to a country without regions (for example the UK, Ireland or Hong Kong), the next page load brought back their saved default address and discarded the one they had just entered
The reward points purchase cleanup cron ran out of memory on large stores - It loaded every row of the purchase table just to count them, which crashed on tables with more than a million rows; it now counts them in the database
The expiration date entered on an admin transaction was saved wrong - On stores behind UTC the date was stored a day early, so the points expired early; dates in day-first formats (22/10/2026) caused an error, and days up to the 12th had day and month swapped. The date is now read in the admin's locale format and stored as the end of that day in the store's time zone, and an invalid date is refused with a clear message
Transaction import could credit or change the wrong customer - A row whose website did not match fell back to any customer with the same email on another website; rows must now name the customer's own website. An update by transaction_id could also move a transaction to another customer or change its code; updates now only correct amounts and dates. The "Delete" behavior now only deletes a transaction that belongs to the customer named in the row
Re-uploading the same transaction file credited customers twice - Rows already imported from the same file are now skipped
Transaction import accepted invalid values - An empty, non-numeric, fractional or out-of-range amount was stored as a wrong number; it is now reported as an error. A file can no longer set internal columns such as used points, activation or expiry flags. A row with an invalid expiration date is now reported and skipped instead of making the whole file fail to import
Transaction import sent one balance email per row - A file with many rows for the same customer mailed them once per row. Customers now receive one email each, and none are sent when the file updates more than 200 customers
Admins without the Reward Points transactions permission could import transactions - Access to System ▸ Import was enough to credit points and email customers through the Reward Points transactions import; it now also requires the Reward Points transactions permission
Exported transactions could run as spreadsheet formulas - A comment or code starting with @ or a tab was exported as is; such cells are now exported so that spreadsheet apps show them as text
The checkout logo was not installed on stores using remote media storage (S3) - The upgrade failed or skipped the logo; it is now written through Magento's media storage
The Rewards Logo preview in the admin was broken, and uploaded logos did not show on the storefront - Logos uploaded meanwhile are repointed automatically on upgrade
{{store url=""}} in the checkout, notification and earning rule messages now renders the store URL instead of appearing as raw text, on Luma and Hyvä
The account points history now shows "0 spent, N remaining" for points earned after the customer's last spending, instead of hiding the breakdown
The GraphQl tiers query no longer fails for a customer who has no tier yet
The Luma social share buttons sit in one row, as on Hyvä
Hyvä product page: the "earn points" label is shown right under the price, and the bundle "Your Customization" summary shows the points for the configured price and updates with the selected options and quantity
Hyvä cart and checkout: the checkout message has its variables filled in and is shown inside the rewards box, now in Hyvä Checkout too, and the guest note sits under "Checkout now and earn"
Hyvä cart: when the minimum points rule changes the entered amount, the points field shows what was actually applied, and the "Use Reward Points" notice folds like the Luma block
Hyvä account pages: the page title lines up with the content, the tabs form one strip without underlines until hover, and the referral form marks its required fields
Version 3.5.2Oct 14, 2026
Choose where a referral link lands — New setting Rewards > Referrals > Referral Link Landing Page: the homepage (as before), the Create an Account page, or a custom page or URL. Sending invited friends straight to sign-up removes a step before they earn the referral reward. Existing stores keep landing on the homepage until the setting is changed.
Points expiry can now be set per earning rule: behavior earning rules have a new Expire after (days) field, so, for example, birthday points can expire in 30 days while other points keep the global expiry. Leave it empty to use the global Expire after (days) setting; existing rules are not affected
New setting Purchase points expire after (days) (Stores ▸ Configuration ▸ Mirasvit Extensions ▸ Reward Points ▸ General Settings, website scope) for points earned for orders. Leave it empty to use the global Expire after (days) setting
New settings in Reward Points ▸ Social Buttons ▸ Display Options: Show Social Buttons block on product page and Show Refer Friends button. The second one hides only the button in the Social Buttons block; the referral program stays active
⚠️ A new nullable expires_after_days column is added to the mst_rewards_earning_rule table. Existing rules keep an empty value and use the global expiry
Fixed the expiry column being hidden in the customer's points history when the global expiry was set to 0, even though some transactions had an expiry date (from an earning rule or the purchase points setting)
Fixed the table of expiring transactions in the points expiry email failing to render on Magento 2.3
Fixed Apple Pay checkout failing with a JavaScript error (undefined is not an object (evaluating 'quote[base_discount_amount]')) when paying with reward points through Braintree builds that expect the quote when collecting cart line items
Version 3.5.1Oct 2, 2026
Reward points blocks in the cart, checkout, admin order creation and social share buttons keep working with upcoming Mirasvit Core versions, which no longer ship the Content Security Policy helper these blocks relied on
Fixed the "Send a test digest now" button showing raw internal error text when the digest could not be sent for a reason other than an email delivery failure. It now shows a clear message and writes the details to the exception log; email delivery errors are still shown as before
Fixed the "Learn more" manual links on the Earning Rules, Spending Rules, In-cart & Account Messages, Tiers, Referrals and Reports admin pages leading to "Page not found"; they now open the current Reward Points manual pages
Version 3.5.0Sep 29, 2026
Points expiry reminders are grouped per customer: when points from two or more of a customer's transactions are about to expire, the customer receives one email with the total, the earliest expiry date and the list of transactions, instead of one email per transaction. If you customised the Points expire Email template, customers with several expiring transactions now receive the new Points expire email for several transactions template: make your own copy in Marketing ▸ Email Templates and select it in Stores ▸ Configuration ▸ Mirasvit Extensions ▸ Reward Points ▸ Email Settings, or set that setting to "- Disable these emails -" to keep one email per transaction. Setting Points expire Email to "- Disable these emails -" still turns all expiry reminders off
Faster product pages when several earning rules are active: a configurable product's child products are now checked once per page instead of once per earning rule
⚠️ A new nullable store_id column is added to the mst_rewards_transaction table, recording the store view in which points were earned or spent. Existing transactions keep an empty value
⚠️ Removed unused PHP classes that could not work: Mirasvit\Rewards\Model\Earning\Behavior with its resource model and collection (their table never existed), Mirasvit\Rewards\Plugin\DataProviderGroupFilter, Mirasvit\RewardsCheckout\Observer\LockPurchaseOnOrderPlaceBefore, and the earning rule applyAll() / applyAllRulesForDateRange() product indexer methods. Check any custom code that references them
Fixed high database load from the rewards cron job on stores with many customers. When an "Inactivity" earning rule was active, the cron checked each customer's last visit with a separate database query, which added up to thousands of queries every run. It now looks up the last visit for all of the rule's customers in one query. Points are still awarded to the same customers as before
Fixed the balance update email being sent with the wrong store's template and language when a customer earned or spent points on a store view other than the one they registered on
Fixed expired points occasionally being deducted twice when two runs of the points cron job overlapped
Fixed transactions activated by the cron job being activated again, with a repeated balance update email, when the job ran more than once in the same process
Fixed a notification rule limited to certain customer groups being shown to all customers
Fixed notification rules being displayed in reverse "Sort Order", and cart and checkout notifications appearing on the referral page
Fixed the "Product Type" condition in spending and notification rules never matching products
Fixed the "Quantity" condition in spending and notification rules causing an error whenever a rule was checked
Fixed rule conditions on store-view-scoped product attributes always using the default value instead of the store view's own value
Fixed a blank page after checkout for orders placed without points; the success page message about spent points is now shown correctly
Fixed the unsubscribe link in reward emails showing "Page not found" to customers in groups for which the reward points account menu is hidden
Fixed earning rules and tiers with no points or step configured causing a "division by zero" error or awarding unexpected points
Fixed the 2 MB size limit for tier logo uploads not being applied
Fixed warnings when a tier was saved with only some of its fields, for example when uploading a logo or changing its status
Fixed an error on credit memos where the maximum points refund was not collected
Reward Points transaction import: the "Delete" behavior now actually deletes transactions (matched by transaction_id, which is now required) instead of reporting success and deleting nothing; rows with an empty customer email are reported as errors instead of being silently skipped or merged with neighbouring rows; the "value is required" error message is now translated; and the import no longer lowers a PHP memory limit that is already set higher than 1 GB
Fixed "Activate" mass action in the transactions grid saving an empty activation date
Fixed "Save and Continue Edit" on an earning rule redirecting to a missing page
Fixed an error when adding a rule condition without a condition type
Fixed an error in the admin transactions grid page
Fixed the time-series report export failing on PHP 8.4 and later
Fixed the refunds list API (getList()) failing with a "Cannot instantiate interface" error
Reasons to choose Mirasvit
Client focusing and satisfaction

These are our primary. A major portion of our new clients come from referrals from our existing clients. Our professional team of developers, marketers and support staff have invested the best knowledge and experience in the field into our work, so you know you can come back to us again and again.

Remarkable support

One year free and high quality support. We go to great lengths to provide maximum satisfaction with every module you have purchased in our store. By helping you with installation, configuration, answering your every question, we do all our best to eliminate any possible problems.

Risk-free Investment

30-days money back guarantee. If you are not satisfied with our extension performance for any reason, we provide a full refund.

Constant improvements and upgrades

We constantly add new features to all our modules, and are always interested in hearing your opinion and implementing your suggested features in our future developments.

Comprehensive Documentation

We provide an expanded user guide for every aspect of our extension, so you can find answers for all your burning questions.

Unencrypted source code of our products

You can customize extension according to your needs and requirements.

Usability and Performance

The Module is easy to install and upgrade, just follow our step-by-step user guide. Additionally, the extension is ready to use with the Hyvä theme.

Ready for Magento Cloud

No core modifications. The extension has been tested in a Magento Cloud environment and is fully compatible with it.

Loading...