Skip to content

Set up loyalty points and rewards redeemable in chat

Zubby ships a points-based loyalty engine that runs on the same shopper profiles the AI already knows. Shoppers earn points from purchases, climb earn-rate tiers, and redeem rewards from your catalog in the chat widget or by asking the AI. This page covers points, tiers, rewards, redemption, and the referral program screens.

Redemption is built in; referrals are not active yet

A signed-in shopper can redeem a reward in the chat widget’s rewards panel or by asking the AI. Zubby deducts the points and, for a reward with a code (a code pool, a shared code, or a WooCommerce auto-generated coupon), hands the shopper the code and applies it to their cart. A reward set to Sent by your team deducts the points and opens a ticket for you to send it. Referral programs can be saved but are not active: Zubby does not generate referral codes, track referred orders, or pay referral rewards.

Where it lives

  • Dashboard → Loyalty - program health: enrolled shoppers, points outstanding, points earned and redeemed in the last 7 days, the reward catalog with each reward’s delivery method and code-pool stock, the redemption history, the tier ladder with member counts, and a recent-activity feed.
  • Settings → Loyalty - where you create rewards, choose how each one is delivered, upload code pools, and edit earn-rate tiers.
  • Loyalty → Redemption tiers - a ladder of points-for-reward thresholds. Shoppers can redeem an active tier; your team sends the reward.
  • Loyalty → Referrals - saves referral program settings. Not active: nothing creates referral codes or records referrals.

Getting started

  1. Create the discount codes in your store first: a batch of single-use codes (best) or one shared code. On WooCommerce with the Zubby plugin 0.8.3 or later you can skip this and let Zubby create a coupon per redemption.
  2. Open Settings → Loyalty and create 2–3 rewards. Pick a Delivery for each one and, for a code pool, paste or upload its codes. Shoppers only care about points once points buy something.
  3. Add earn-rate tiers with lifetime-point thresholds. Keep the first threshold low (one typical order should reach it) so new shoppers get an early win; reserve the bonus multiplier for upper tiers, where it changes behavior instead of just margin.
  4. Test with a controlled account: place an order, confirm the points land, then sign in as that shopper and redeem a reward from the widget. Check the code applies at checkout and that the redemption shows in Dashboard → Loyalty.

How points are earned

Every points change is written to an immutable ledger. Each entry carries a source so you can audit exactly why a shopper’s balance moved. Purchases are the only earn path today: when an order is attributed to a shopper, they earn 1 point per currency unit spent (so a $42.50 order earns 42 points), multiplied by their tier’s bonus rate. Crediting is idempotent per order - a replayed webhook never double-credits.

SourceMeaning
PurchaseA completed order - credited automatically.
Reward redemptionPoints spent on a reward (negative), or points returned when a WooCommerce coupon could not be created (positive).
ReferralReserved. Not written: referral programs are not active.
ReviewReserved. Not written today.
AI interactionReserved. Not written today.
Signup bonusReserved. Not written today.
Tier bonusReserved. Not written today.
Manual adjustmentReserved. There is no adjustment screen.

The dashboard’s Earned (7d) stat sums purchase points; Redeemed (7d) is the points spent on rewards in the last 7 days, net of any returned points. Each shopper has a single balance row tracking their current points balance and lifetime points. Redeeming lowers the balance but never lifetime points, so a redemption never drops a shopper’s tier.

Earn-rate tiers

Tiers are a loyalty ladder: pass a threshold of lifetime points and the shopper moves up. Each tier has a name, a threshold, an optional bonus multiplier on the earn rate (e.g. 1.50× means 50% more points per purchase), and a free-text perks description. The Loyalty page shows each tier with a live member count.

Two kinds of tier - don’t mix them up

Earn-rate tiers (here) accelerate point accrual. VIP tiers are a separate concept keyed on lifetime spend and order count; the shopper’s VIP tier is surfaced to the AI in conversation context rather than changing the earn rate. VIP is covered in Shoppers, lifecycle & VIP.

Rewards

The reward catalog (Settings → Loyalty) lists named rewards with a points cost, an active toggle, and a times-redeemed counter. Reward types are:

  • Percentage discount - 1 to 100 percent off.
  • Amount off - a flat amount in your store currency.
  • Free shipping - no value needed.
  • Free product - optionally tied to a product handle (required for auto-generated coupons).

How a reward is delivered

Each reward has a Delivery setting that decides what happens when a shopper redeems it:

DeliveryWhat the shopper getsPlatforms
Single-use code poolOne code from a list you upload; each code is handed out once.Shopify, WooCommerce, custom
Same code for everyoneThe one shared code you enter. Set its usage limits in your store.Shopify, WooCommerce, custom
Auto-generated couponA unique WooCommerce coupon created on the spot: single use, restricted to the shopper’s email when known, expires after 30 days.WooCommerce (Zubby plugin 0.8.3+)
Sent by your teamNo instant code. Points are deducted and a ticket asks your team to send the reward.All
  • Code pools: paste codes one per line, or upload a CSV (the column headed Code is read, otherwise the first column), up to 5,000 at a time. Codes already in any of your pools are skipped, so re-uploading an export is safe. The settings page and the Loyalty dashboard warn when a pool has 10 or fewer codes left; an empty pool cannot be redeemed (no points are taken).
  • Shopify: Zubby cannot create Shopify discounts, so use a code pool (Shopify admin → Discounts → generate codes, then export them) or a shared code.
  • WooCommerce auto-generated coupons need the Zubby plugin 0.8.3 or later. On an older plugin the redemption still goes through: the points are deducted and a high-priority ticket asks your team to send a coupon and update the plugin. If WooCommerce refuses to create the coupon for another reason, the shopper’s points are returned automatically.

Redemption tiers

The dedicated Redemption tiers page is a leaner, ordered ladder of conversions sorted by points cost. Each tier has a name, a points cost, a reward kind (percent_off, fixed_off, free_shipping, or gift_card), a JSON reward value, and an active flag. Active tiers appear next to your reward catalog. A redeemed tier is always sent by your team (points deducted, ticket opened); use the reward catalog when shoppers should get a code instantly.

Redeeming rewards

Redemption spends real value, so it is limited to a signed-in shopper whose identity the storefront vouched for: the WooCommerce plugin or the Shopify App Proxy signs the logged-in customer, and Zubby verifies that signature on every redemption. On WhatsApp and SMS the verified phone number counts as signed in. Signed-out shoppers see the catalog and their points but are asked to sign in before redeeming.

  • In the widget: the points badge in the chat header opens the rewards panel. The shopper taps Redeem, confirms the cost, and gets the code. Rewards they cannot afford show how many more points they need.
  • Through the AI: the shopper asks to use their points. The AI lists what they can redeem, reads the chosen reward and its cost back, and only redeems after a clear yes. It then gives the exact code and how to use it, or says the store will send it.
  • Applying the code: on Shopify the code is saved to the shopper’s cart and shows at checkout; on WooCommerce (with the Zubby plugin) it is applied to the cart directly. The shopper can always copy the code and enter it at checkout.
  • Custom storefronts: the widget shows the code and posts a salespilot:loyalty_reward_redeemed message to your page with code, rewardId, rewardName, rewardType and pointsSpent. Listen for it (check event.origin is the Zubby app origin) to apply the code in your own cart.

Every redemption is safe to retry: a double tap or a network retry returns the same code instead of spending twice, and two redemptions at the same moment can never overspend a balance or hand out the same pool code twice.

Referrals

Not active

Referral programs can be saved, but nothing uses them: Zubby does not generate referral codes for shoppers, record referred orders, or pay either reward. The Referrals page counters stay at zero.

A saved program describes a give-and-get offer: the advocate (an existing shopper) and the friend each have a reward. A program is defined by:

  • Advocate reward and friend reward - each a reward definition (the two sides of give-and-get).
  • Minimum purchase - an optional order floor (in cents) the friend must hit before the referral counts as converted.
  • Active - the program on/off switch.

The Referrals page shows three counters - number of programs, total referrals, and converted referrals - and a table of recent referrals. Because no referral codes are issued, the referral counters and table stay empty.

How the AI uses loyalty

Loyalty is not a silo. For a signed-in shopper the chat agent can read their points balance, tier, and the closest reward they haven’t reached - so it can say “200 more points gets you to free shipping” when relevant - and it can redeem a reward for them after an explicit confirmation. It is instructed to be helpful rather than pushy and to never invent rewards, amounts, or codes beyond what your catalog and the redemption return.

Gotchas

  • Create codes in your store before uploading them. Zubby hands out the codes you give it; it does not check that they exist in Shopify or WooCommerce.
  • An empty code pool blocks redemption of that reward. Watch the low-stock warning on the Loyalty page.
  • Rewards set to Sent by your team rely on you working the ticket. The redemption history marks them Send manually.
  • Lifetime points drive tier thresholds. Redemption does not lower lifetime points, but reversing a cancelled or fully refunded purchase can reduce them.
  • Points accrual on purchases requires the order to reach Zubby through a healthy store connection. If an order is missing, start with Store Details.

Related

Purchase status, refunds and repeat events

Loyalty requires Growth or higher. Paid orders can earn points; pending and authorized orders do not. Cancellation, voiding or a full refund reverses that order’s earned points once. Replayed events do not earn or reverse points twice. A partial refund remains a paid state and does not automatically prorate an earlier award. Check your policy and seek support before promising a partial-return adjustment.

The earn formula uses the numeric order amount with the tier multiplier. It does not perform a foreign-exchange conversion for a mixed-currency loyalty policy. Test the amounts your connector sends before offering cross-currency benefits. For custom stores, link the signed identity flow and send accurate order statuses.

Illustrative verification: record a test shopper’s balance, sync a paid order, replay it, then sync a full refund. Confirm one credit, no duplicate credit, and one reversal. Run this with a test account and test order, not a real customer purchase.

Missing something, or found an error on this page?

Contact support and include the URL of this page (/docs/loyalty).