# Email Blacklist Source: https://docs.yuko.so/account/email-blacklist Stop Yuko emails from going to specific email addresses or whole domains. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Account → Email Settings → Email Blacklist ## Introduction The Email Blacklist is a suppression list. Email addresses on it don't receive any emails sent from Yuko, such as points, reward, referral and membership emails and workflow emails. Customers on the list can still earn and redeem points as usual. ## When to use * A customer has asked not to receive any emails from your loyalty program. * You want to keep Yuko emails away from internal, test or staff accounts. * You want to stop emails to a whole domain or to automated addresses, such as `no-reply@` mailboxes. ## Overview * An **Email Blacklist Activation** toggle turns the list on or off. The list starts empty and the toggle starts off. * Add entries with **Add Manually** or **Upload CSV**. * Entries can be exact addresses or patterns with a `*` wildcard. * Entries are listed under **Email Address**, where you can delete one or several at once. The Email Blacklist is available on select plans. If it isn't included in your plan, the page shows an upgrade banner. ## Setup Go to **Apps → Yuko Loyalty → Account → Email Settings** and select the **Email Blacklist** tab. Click **Add Manually**. In **Email addresses**, enter one or more entries separated by commas. Supported formats: * `sample@example.com` blocks one exact email. * `*@anydomain.com` blocks every email from a specific domain. * `no-reply@*` blocks any email starting with `no-reply@` across all domains. Click **Upload CSV** and drop in a `.csv` file of addresses. The file must be 15 KB or smaller. Click **Download a sample CSV** in the upload window to see the format. Switch on **Email Blacklist Activation**. While it's off, a banner warns that addresses on the list still receive emails from Yuko. ## How it works * When the blacklist is on and a customer's email matches an entry, Yuko skips the emails and workflows triggered for that customer. * Matching uses the exact address or your wildcard pattern. * Turning the toggle off keeps your list, so you can turn it back on later. Turning it off asks for confirmation. * The list only affects Yuko. It doesn't change the customer's marketing consent in Shopify or in other email tools. ## Best practices **Add your test and staff accounts** so test orders don't send real loyalty emails. **Use wildcards carefully.** `*@gmail.com` would stop emails to every Gmail customer. **Keep a CSV backup** of large lists so you can re-upload them if needed. ## FAQs No. It only stops Yuko from emailing them. To remove someone from your loyalty program, use **Exclude from Program** on the customer in [Customers](/loyalty/customers). Check that **Email Blacklist Activation** is switched on. The list has no effect while the toggle is off. Delete it from the list, or select several entries and delete them together. ## Related Timezone, date and time format, coupon prefix and email logo. Shopify connection details and data sync. Stop Yuko emails from going to specific addresses or domains. Translate storefront labels and program content. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # General Source: https://docs.yuko.so/account/general Set your timezone, date and time format, default coupon prefix and the logo used in Yuko emails. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Account → General ## Introduction The General tab holds a few store-wide preferences used across Yuko. Set them once during setup; they rarely need to change. ## What's configured here | Setting | What it does | | - | - | | **Timezone** | Your preferred timezone for the app. Yuko uses it for date-based schedules, such as birthday and reminder timing. | | **Date Format** | How dates are shown: MM/DD/YYYY, DD/MM/YYYY, YYYY-MM-DD, January 1, 2023, MM/DD/YY or DD/MM/YY. The default is month-day-year. | | **Time Format** | 12-hour format (1:30 PM), 24-hour format (13:30), 12-hour with seconds (1:30:00 PM) or 24-hour with seconds (13:30:00). The default is 12-hour. | | **Coupon Prefix** | The default prefix for coupon codes Yuko generates outside a reward, such as codes created by a workflow coupon. The default is `YK_`. Loyalty rewards and referral rewards have their own **Coupon Prefix** field. | | **Logo** | The logo displayed in emails and other communications. | Your store name, currency and languages come from Shopify and aren't edited here. To translate customer-facing text, use [Translations](/account/translations). ## Setup Go to **Apps → Yuko Loyalty → Account → General**. Search for and pick your store's primary timezone. Pick the formats your team and customers expect. Enter 2–6 characters using letters, numbers and underscores only, for example `YK_` or `VIP`. Click **Customise** next to **Logo**, upload an image and check the preview. Images must be under 1 MB; around 200 × 50 pixels works best. Click **Save** in the save bar. ## Best practices **Use your store's primary timezone**, not the timezone of whoever set up the app, so date-based emails go out at sensible times. **Keep the coupon prefix short and recognisable.** It makes these codes easy to spot in Shopify's discount reports. **Use a wide, transparent logo.** It reads better in email headers than a square icon. ## FAQs Yuko uses your Shopify store currency for points value, discounts and store credit, so it always follows Shopify. No. Codes that were already issued keep their current prefix. The new prefix applies to codes generated after you save. It must be 2–6 characters long and contain only letters, numbers and underscores. ## Related Timezone, date and time format, coupon prefix and email logo. Shopify connection details and data sync. Stop Yuko emails from going to specific addresses or domains. Translate storefront labels and program content. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Account Settings Source: https://docs.yuko.so/account/overview Store-wide settings for Yuko, including date and coupon formats, your Shopify sync, email sending and translations. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Account ## What's in Account Settings Account Settings hold store-wide preferences that apply across loyalty, referrals and memberships. On Shopify stores, there are four tabs: | Tab | What you configure | | - | - | | [General](/account/general) | Timezone, date and time format, the default coupon prefix and your logo for emails | | [Platforms](/account/platforms) | Your Shopify connection details and customer and product sync | | **Email Settings** | **General**: your sender identity (**From Name** and **Reply Email**), the **Default From Address** and custom sending domains. See [Sender and branding](/emails/sender-and-branding). **Email Blacklist**: addresses that should never receive Yuko emails. See [Email Blacklist](/account/email-blacklist). | | [Translations](/account/translations) | Translations of storefront labels and your campaign and reward content for each store language | Integrations such as Klaviyo, Shopify Flow, Shopify POS and the REST API have their own **Integrations** item in the sidebar. See [Integrations](/integrations/overview). ## Decision guidance * Set **General** during initial setup. Your timezone controls when date-based events, such as birthdays and anniversaries, happen. * Use **Platforms** to sync existing Shopify customers and products into Yuko, or to re-sync after a large import. * Set up **Email Settings** before you turn on emails, so customers see your brand name and reply address. * Use **Translations** if your Shopify store publishes more than one language. Timezone, date and time format, coupon prefix and email logo. Shopify connection details and data sync. Stop Yuko emails from going to specific addresses or domains. Translate storefront labels and program content. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Platforms Source: https://docs.yuko.so/account/platforms Check your Shopify connection and sync your existing customers and products into Yuko. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Account → Platforms ## Introduction The Platforms tab shows your Shopify connection and lets you sync your store's existing customers and products into Yuko. New customers and products are picked up automatically after install. A manual sync is for bringing in your existing data or refreshing it later. ## What's configured here * **Connection status**: a badge next to the **Shopify** title shows **Connected** when Yuko can reach your store. * **Connection Details**: your read-only **Store URL**, with a button to open your storefront. * **Data Synchronisation**: a three-step sync of customers and products, plus the status of your most recent sync. ## When to use * Right after installing Yuko, to bring existing customers and products into Yuko. * Before importing customer points from a CSV in **Customers**. The import needs a completed sync. * When customers or products in Yuko look out of date compared with Shopify. ## Sync your store data Go to **Apps → Yuko Loyalty → Account → Platforms**. Under **Sync Progress**, click **Fetch Data**. Yuko connects to your Shopify store and counts the available data. Yuko shows how many customers and products it found and that they're ready to synchronize. Yuko imports the customers and products. The **Complete** step shows the overall status: **In progress**, **Completed** or **Failed**. **Recent Sync status** shows the latest result for **Customers** and **Products** separately. To run another sync later, click **Start Sync Again** and repeat the steps. ## Best practices **Sync before launch** so existing customers can see their balance and tier as soon as your program goes live. **Sync before a points import.** The customer points import in [Customers](/loyalty/customers) needs a completed sync first. **Re-sync after bulk changes** in Shopify, such as a large customer import, if the data doesn't look right in Yuko. ## FAQs No. New customers and products are picked up automatically. The sync is for existing data and for refreshing it. Click **Start Sync Again** and run it again. If it keeps failing, [contact support](https://yuko.so/support/). Each Shopify store installs Yuko separately and has its own settings, customers and program. Reinstall Yuko from the [Shopify App Store](https://apps.shopify.com/yuko). If the connection still doesn't show as **Connected**, contact support. ## Related Timezone, date and time format, coupon prefix and email logo. Shopify connection details and data sync. Stop Yuko emails from going to specific addresses or domains. Translate storefront labels and program content. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Translations Source: https://docs.yuko.so/account/translations Translate Yuko's storefront labels and your campaign and reward content into each language your Shopify store publishes. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Account → Translations ## Introduction Translations lets you show Yuko's customer-facing text in each language your store sells in. You can translate system labels, such as activity entries and points wording, and your own dynamic content, such as campaign and reward names. Which languages appear here is managed in your Shopify store settings. Yuko shows one tab for each language your store publishes. ## When to use * Your store publishes more than one language in Shopify. * You want campaign names, reward names and tier descriptions to read naturally in each language. * You want the customer activity history to use your own wording. ## Overview * **Language tabs**: one per published store language. Your default language is marked **(default)**. Extra languages appear under **More languages** when there isn't room. * **Content groups**: General, Points & Earning, Rewards, Campaigns, Booster Campaigns, VIP Tiers, Membership, Activity and Referral. Groups only appear when they have content to translate. * **Editor**: each row shows the **Default** text on the left and a **Translation** field on the right. Empty fields show the default text as a placeholder. * **Reset content**: clears every translation in the selected group for the selected language. ## Before you start The languages you need are published in Shopify (**Settings → Languages**). Your campaigns, rewards, tiers and other content are set up in your default language. ## Setup Go to **Apps → Yuko Loyalty → Account → Translations**. Select the language tab you want to translate into. Select a group, such as **Campaigns** or **Rewards**. Type the translation next to each default text. A translation can't be saved empty. Click **Save** in the save bar. Changes in every group of the selected language are saved together. Save each language separately before you move on to the next one. ## How it works * Shoppers see the translation for the language they're browsing your store in. Text without a translation falls back to your default language. * On the default language tab, only the **Activity** group is shown, so you can change the wording of activity entries in your main language. Other default-language text is edited where you create it, such as in the campaign or reward. * **Reset content** asks you to confirm with **Clear all**. It removes every translation override for that group in that language, and shoppers using that language then see the default-language text. This can't be undone. * Widget text, such as headings and button labels in Floating Rewards or the cart widgets, is translated in each widget's editor using its **Editing language** picker. See [Branding and locale](/onsite-widgets/branding-and-locale). ## Best practices **Finish your default-language content first.** New campaigns and rewards appear here once they exist. **Translate high-visibility groups first:** Campaigns, Rewards and VIP Tiers are what shoppers see most. **Revisit after changes.** When you add a new campaign or reward, add its translations too. ## FAQs Your Shopify store publishes only one language. Add and publish another language in Shopify, then come back to Translations. There's nothing in that language that needs translating yet. Create campaigns, rewards or other content first. No. Clearing a group removes its translations for that language permanently. You'll need to enter them again. ## Related Timezone, date and time format, coupon prefix and email logo. Shopify connection details and data sync. Stop Yuko emails from going to specific addresses or domains. Translate storefront labels and program content. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Activity Object Source: https://docs.yuko.so/activity-object Fields returned for a loyalty activity by the Yuko REST API. An activity is an entry in a customer's loyalty activity log: points earned for an order, a reward redemption, a manual points adjustment, a VIP tier change, and so on. Activities are returned by [List customer activities](/developer/api/list-customer-activities) (`GET /public/customers/activities`, requires the `read:activities` scope). ## Properties Unique identifier for the activity. Yuko's internal UUID for the customer the activity belongs to. This is not the Shopify customer ID you pass as the `customer_id` query parameter. The kind of activity, for example `purchase`, `point_adjustment` or `vip_tier_upgrade`. You can filter by this value with the `activity_type` query parameter. What produced the activity, for example `loyalty_campaigns` (an earn rule), `loyalty_tiers` (a VIP tier change) or `users` (a manual adjustment). You can filter by this value with the `source_type` query parameter. The UUID of the record that produced the activity, such as the earn rule or reward. `credit` when points were added, `debit` when points were removed, or `null` when the activity didn't change the points balance. The number of points earned or used in this activity, taken from `metadata.earning_value` (or `metadata.used_point` for redemptions). `0` when no points were involved. How the activity rewarded the customer (for example `points`), when applicable. The full activity payload. Its structure depends on `activity_type`, and it's an empty array (`[]`) when the activity has no payload. For VIP tier changes, see [VIP Tier Change Object](/vip-tier-change-object). The date and time when the activity was recorded (ISO 8601). ```json The Activity object theme={null} { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "activity_type": "purchase", "source_type": "loyalty_campaigns", "source_id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "entry_type": "credit", "points": 100, "earning_type": "points", "metadata": { "earning_value": 100 }, "created_at": "2026-03-09T14:02:06+00:00" } ``` # Dashboard Source: https://docs.yuko.so/analytics/dashboard The Yuko home screen, with your setup checklist, theme setup guide, order usage and loyalty revenue at a glance. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Dashboard ## Introduction The Dashboard is the first page you see when you open Yuko. It shows what's left to set up and gives you a quick read on how your loyalty and referral programs are performing. For detailed reporting, date ranges and exports, use [Analytics](/analytics/reports). ## What's on the Dashboard From top to bottom: | Section | What it shows | | - | - | | **Order usage** | Orders used this month against your monthly allowance, shown as `used / limit Orders / month` with a progress bar and an **Upgrade** link. Shown on larger screens. | | **Free setup banner** | An offer to have the Yuko team set up your program and widgets, with a **Book a free setup call** button. | | **Setup Guide** | The **Enable Yuko Theme App Extension** step. | | **Loyalty and referral totals** | Two cards of headline numbers for loyalty and referrals. | | **Loyalty-driven Revenue** | Revenue from orders that used a loyalty redemption, referral or VIP perk, with a breakdown. | | **Set up your programs** | A checklist showing which programs are on. | | **Need any help?** | **Chat with support** and **Read Docs**. | ## Setup Guide The Setup Guide has one step: **Enable Yuko Theme App Extension**. Yuko's storefront widgets only load when the Yuko App embed is on in your theme. Yuko opens the Shopify Theme Editor in a new tab. Switch on **Yuko App** under **App embeds** and click **Save** in the Theme Editor. Back in Yuko, click **Refresh status**. The step is marked complete once Yuko detects the embed. See [Enable the Yuko App Embed](/installation-and-setup/theme-app-embed) for details. ## Set up your programs This checklist lists each Yuko program with an **On** or **Off** badge and a **Set up** button: | Program | Set up opens | | - | - | | **Loyalty program** | [Loyalty](/loyalty/overview) | | **VIP tiers** | [VIP](/vip-tiers/overview) | | **Referrals** | [Referral](/referrals/overview) | | **Paid memberships** | [Membership](/memberships/overview) | Click **Refresh** after you turn on a program to update the badges. ## Headline metrics ### Loyalty card | Metric | Meaning | | - | - | | **Customers** | Customers in your Yuko database | | **Points Redeemed** | Total points customers have redeemed | | **Points Earned** | Total points customers have earned | | **Points Expired** | Total points that have expired | ### Referral card | Metric | Meaning | | - | - | | **Referral Revenue** | Revenue from referral orders | | **Referral Orders** | Number of orders that came from referrals | | **Referral Members** | Customers taking part in your referral program | | **Rewards Issued** | Referral rewards issued | ### Loyalty-driven Revenue The headline figure is revenue from orders placed with a loyalty redemption, referral or VIP perk from Yuko. Below it, each line shows the revenue and number of orders: * **Loyalty-driven Orders**: orders placed with a loyalty redemption, referral or VIP perk. * **Referral Orders**: orders from referrals. * **Loyalty Incentivized Revenue**: orders directly attributed to a loyalty or tier benefit at checkout. Hover over a label to see its definition. ## How it works * Dashboard figures are store totals and don't have a date filter. For date ranges, comparisons and trends, use [Analytics](/analytics/reports). * The figures are cached and refresh periodically, so recent orders can take a short while to show up. * You can dismiss the free setup banner, the Setup Guide and the **Set up your programs** checklist with the **X** button. Yuko remembers this in your browser, so they may show again on a different browser or device. * Revenue is shown in your store currency. ## Best practices **Finish the Setup Guide first.** Without the app embed, none of Yuko's storefront widgets appear. **Use the checklist as a launch list.** Turn on loyalty first, then VIP tiers and referrals once customers are earning points. **Watch Loyalty-driven Revenue over time.** If it stays flat, review your rewards and widgets so customers can see and use their points. ## FAQs Make sure you saved the theme after turning on **Yuko App**, and that you changed your published theme. Then click **Refresh status**. Dismissed cards are remembered in your browser. Opening Yuko in another browser shows them again. Program status is also shown on each module's page. The Dashboard shows store totals. Analytics shows the date range you pick, and some metrics use different definitions. Check a metric's definition in [Analytics](/analytics/reports#metric-definitions). ## Related Date ranges, trends, reports and CSV exports. Go from install to your first earned points. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Analytics Source: https://docs.yuko.so/analytics/reports Track loyalty, points, VIP tiers, referrals and retention over any date range, drill into metric reports and export them as CSV. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Analytics ## Introduction Analytics shows how your loyalty program performs over time. Pick a date range, compare periods, open a report for any metric to see the rows behind it, and export them as CSV. Analytics is labelled **Beta** in the app. The quick totals on the home screen are covered in [Dashboard](/analytics/dashboard). Analytics and some of its tabs are available on select plans. When a metric isn't included in your plan, its card is blurred and its report shows **Report locked**. ## Overview Analytics has six tabs: | Tab | What it covers | | - | - | | **Overview** | Loyalty Health Score and headline revenue, order and member metrics | | **Loyalty** | Incentivized revenue, discounts used, member growth and activities | | **Points** | Points issued and redeemed, redemptions, outstanding balance and upcoming expiry | | **Tiers** | Customers per VIP tier, upgrades, AOV and referrals by tier | | **Referrals** | Referral funnel, claimed and completed referrals, top advocates | | **Retention** | Repurchase rate, member lifetime value and purchase frequency | ## How to use Analytics ### Pick a date range Use the date picker at the top right. The presets are **Today**, **Yesterday**, **Last 7 days**, **Last 30 days**, **Last 90 days** and **Last 365 Days**, or choose **Custom** and enter **Since** and **Until** dates. The default is the last 30 days. Metric cards show the change versus the previous period of the same length (**vs last period**). ### Compare periods (Retention tab) On the **Retention** tab, and on Retention reports, a comparison picker appears next to the date range: * **No comparison** * **Previous period**: the same number of days immediately before your range. * **Previous year**: the same dates one year earlier. * **Custom**: your own **Since** and **Until** dates. ### Read a metric Hover over a metric's title to see its description. Headline metric cards also show the formula. The [metric definitions](#metric-definitions) below list them all. ### Open a report Most cards have a **View report** button. It opens a full page for that metric. Change the date range, and on stores with VIP tiers, filter by tier. **Points Expiring** and **Rewards Expiring** use a forward-looking window instead: **Next 14 days**, **Next 30 days**, **Next 60 days** or **Next 90 days**. The report shows the metric total with its change, a **Trend** chart and a table of the underlying records. Use **Search records** to find a customer or order. Yuko downloads the rows in the table, including your search and tier filter. Reports with a customer column also include **Email**, **Phone** and **Shopify customer ID**. ## Tabs in detail ### Overview * **Loyalty Health Score**: an overall 0–100 grade for your program, averaging four rates: **Earning**, **Redemption**, **Reward Usage** and **Repurchase**. A score of 70 or more is **Healthy**, 40–69 is **Watch** and below 40 is **At risk**. Each rate also has its own tile with a score out of 100 and a target. * Cards: Loyalty driven revenue, Member Orders, Member AOV, Loyalty Incentivized Revenue, Referral Revenue, Membership Revenue, New Members, Repeat Purchase Rate and Returning Orders %. ### Loyalty Incentivized Revenue (with Attribution Rate), Discounts Used, Member Growth and Activities Completed. ### Points * Points Issued, Points Redeemed (with Points Redeemed %), Redemption Count and Discounts Issued vs Used. * **Current program snapshot**: Outstanding Balance and Points Owed. These are live balances as of today and aren't affected by the date filter. * **Forward-looking expiry**: Points Expiring and Rewards Expiring. Pick a horizon on each card; it's independent of the date filter. ### Tiers Customers in the tiers, Tier Upgrade Rate, AOV by Tier and Referrals by Tier. ### Referrals The **Referral funnel**, Referrals Claimed, Referrals Completed, Referrals per Member and Top Advocates. ### Retention Repurchase Rate, Avg Member LTV and Purchase Frequency. ## Metric definitions | Metric | Definition | | - | - | | **Loyalty driven revenue** | Total revenue from any loyalty member in the period. | | **Member Orders** | Number of orders placed by any loyalty member in the period. | | **Member AOV** | Average spend per member order: Member Revenue ÷ Member Orders. | | **Loyalty Incentivized Revenue** | Revenue from orders where a loyalty or tier coupon was redeemed. | | **Referral Revenue** | Revenue from orders where a referral coupon or store credit was redeemed. | | **Membership Revenue** | Revenue from orders by customers with an active membership at order time, or orders that used a membership benefit. | | **New Members** | Customers who joined your loyalty program in the period. | | **Repeat Purchase Rate** | Customers with 1+ orders in the period ÷ all customers in the period × 100. | | **Returning Orders %** | Orders by customers with at least one prior order ÷ total orders in the period × 100. | | Metric | Definition | | - | - | | **Loyalty Health Score** | (Redemption + Reward Usage + Earning + Repurchase) ÷ 4. | | **Earning** | Share of orders that earned points. | | **Redemption** | Share of points issued that members used as discounts. | | **Reward Usage** | Share of issued discount codes used at checkout. | | **Repurchase** | Share of customers who placed 2+ orders in the period. | | Metric | Definition | | - | - | | **Incentivized Revenue** | Revenue from orders where a loyalty discount code was applied or points were earned. | | **Attribution Rate** | Share of member revenue from orders with a redeemed loyalty reward. | | **Discounts Used** | Total amount given away as loyalty discounts in the period. | | **Member Growth** | New joiners in the period compared with members who redeemed points. | | **Activities Completed** | Breakdown of how members earned points, by activity type. | | Metric | Definition | | - | - | | **Points Issued** | Total points credited to customers in the period. | | **Points Redeemed** | Total points turned into discounts in the period. | | **Points Redeemed %** | Points used on orders ÷ total points earned × 100. | | **Redemption Count** | Number of separate times members redeemed points. | | **Discounts Issued vs Used** | Codes applied to orders ÷ codes generated × 100. | | **Outstanding Balance** | Points currently in all member accounts: all points issued minus points redeemed or expired. | | **Points Owed** | Money value of all unspent points: outstanding balance × point value. | | **Points Expiring** | Unused points that expire within the selected window. | | **Rewards Expiring** | Issued rewards or discount codes that expire within the selected window. | | Metric | Definition | | - | - | | **Customers in the tiers** | Members currently in each tier at the end of the period. | | **Tier Upgrade Rate** | Members who moved up a tier ÷ total members. | | **AOV by Tier** | Revenue from a tier's members ÷ their orders. | | **Referrals by Tier** | Completed referrals by a tier's members ÷ members in that tier. | | Metric | Definition | | - | - | | **Referrals Claimed** | Friends who landed on your store and accepted the referral discount. | | **Referrals Completed** | Referrals that ended in a purchase, as a share of claimed referrals. | | **Referrals per Member** | Completed referral orders per advocate. | | **Top Advocates** | Members ranked by completed referrals in the period. | | Metric | Definition | | - | - | | **Repurchase Rate** | Members who ordered in the period and had an order before it ÷ members who ordered in the period × 100. | | **Avg Member LTV** | Member spend over the full relationship, projected from revenue per month as a member. | | **Purchase Frequency** | Average orders per loyalty member per year: orders from members in the last 12 months ÷ total members. | ## Best practices **Check the Health Score monthly.** A drop in one sub-rate, such as Reward Usage, points to a specific fix, such as making rewards easier to find. **Plan around expiry.** Use **Points Expiring** to time a reminder email or workflow before customers lose their balance. **Filter reports by tier** to see whether VIP customers really order more and spend more. **Export before campaigns.** A CSV of top advocates or expiring points makes a ready-made audience list. ## FAQs That metric isn't included in your current plan. Hover over it to see why it's locked. They're live snapshots as of today. The date filter only affects period-based metrics. The comparison picker appears on the Retention tab and Retention reports. Other cards show the change versus the previous period of the same length. The same columns as the report table, filtered by your date range, tier filter and search. Customer-level reports add Email, Phone and Shopify customer ID. ## Related Setup checklist and headline totals. View individual balances, tiers and activity. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Creating and updating customers Source: https://docs.yuko.so/create-or-update-a-customer-identity How customer records get into Yuko, and how to look them up with the REST API. The Yuko REST API doesn't have an endpoint to create or update customers. Yuko creates and updates customer records automatically from your Shopify store (through the store sync and Shopify customer webhooks), so store customers are available to the API without any extra step. A customer Yuko hasn't synced yet returns `404` with `"Customer not found"`. ## Identifying a customer To work with a customer through the API, pass their store customer ID (for example the Shopify customer ID) as `customer_id`, or as the `{id}` path parameter when retrieving one customer. Yuko's internal customer UUID isn't accepted here. See the [Customer Object](/customer-identity-object) for the fields Yuko returns. ## Related endpoints | To do this | Use | | :- | :- | | Find customers | [List customers](/developer/api/list-customers) (`GET /public/customers`) | | Get one customer | [Retrieve a customer](/developer/api/retrieve-a-customer) (`GET /public/customers/{id}`) | | Add or deduct points | [Create a points transaction](/developer/api/create-a-points-transaction) (`POST /public/customers/transactions`) | # Customer Object Source: https://docs.yuko.so/customer-identity-object Fields returned for a customer by the Yuko REST API, and how customers are identified. Yuko creates customer records automatically from your Shopify store. Each customer is linked to their store account by `platform` and `platform_customer_id`. The customer object is returned by [List customers](/developer/api/list-customers) and [Retrieve a customer](/developer/api/retrieve-a-customer), which require the `read:customers` scope. Whenever an endpoint asks for `customer_id`, pass the customer's ID from your store (the `platform_customer_id` below, for example the Shopify customer ID), not the Yuko `id`. ## Properties Yuko's internal UUID for the customer. The customer's first name. The customer's last name. The customer's email address. The customer's phone number. The store platform the customer comes from, for example `shopify`. The customer's ID in your store. Use this value as `customer_id` in API requests. `member` for customers in the loyalty program, or `disabled` for customers you've banned from it. Customers excluded only by a customer tag still show `member`. One of `member`, `disabled`. The customer's birthday in `YYYY-MM-DD` format, if known. The customer's referral code, if they have one. The customer's referral link, if they have a referral code. The customer's points summary. Spendable points. Always `0` for a banned customer or one excluded by a customer tag. Total points earned. Total points redeemed. Returned by Retrieve a customer only. The customer's current VIP tier, with the same fields as `current_tier` in the [Membership Object](/membership-object). `null` if VIP tiers are turned off or the customer hasn't reached a tier. Returned by Retrieve a customer only. The customer's loyalty membership summary. Always `active`. The date the customer was added to Yuko. When the customer was added to Yuko (ISO 8601). When the customer record was last updated (ISO 8601). ```json The Customer object theme={null} { "id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "first_name": "Jane", "last_name": "Doe", "email": "jane@doe.com", "phone": "+15555550123", "platform": "shopify", "platform_customer_id": "7012345678901", "state": "member", "date_of_birth": "1990-04-21", "referral_code": "JANE10", "referral_url": "https://yourstore.com?ref=JANE10", "points": { "balance": 650, "earned": 1200, "redeemed": 550 }, "tier": null, "membership": { "status": "active", "member_since": "2026-03-09T14:02:06+00:00" }, "created_at": "2026-03-09T14:02:06+00:00", "updated_at": "2026-03-09T14:02:06+00:00" } ``` # Customer Reward Object Source: https://docs.yuko.so/customer-reward-object Fields returned for a reward issued to a customer by the Yuko REST API. A customer reward is a reward that has been issued to a specific customer, such as a discount code from redeeming points, a referral reward or a VIP tier benefit. Customer rewards are returned by [List customer rewards](/developer/api/list-customer-rewards) (`GET /public/customers/rewards`, requires the `read:rewards` scope) and in the `customer_rewards` array of [Get redeemable rewards](/developer/api/get-redeemable-rewards). A new one is created when you [redeem a reward](/developer/api/redeem-reward). ## Properties Unique identifier for the customer reward. Yuko's internal UUID for the customer the reward was issued to. This is not the Shopify customer ID you pass as the `customer_id` parameter. The UUID of the record that issued the reward, such as the reward in your catalogue (see [Retrieve a reward](/developer/api/retrieve-a-reward)). The type of discount issued, for example `fixed`, `percentage`, `free_shipping`, `free_product`, `pos_fixed` or `pos_percentage`. For rewards redeemed with points, this is the catalogue reward's `reward_type`. `null` when no type was recorded for the reward. Store credit redemptions don't create a customer reward. The current status of the reward. You can filter by this value with the `status` query parameter. One of `active`, `used`, `inactive`, `expired`, `deleted`, `revert`. The discount code the customer applies at checkout. The number of points spent to get this reward. `0` for rewards that weren't bought with points. When the reward expires (ISO 8601), or `null` if it doesn't expire. When the reward was used on an order (ISO 8601), or `null` if it hasn't been used. When the reward was issued (ISO 8601). ```json The Customer Reward object theme={null} { "id": "1fd80ced-326f-4082-951b-21a38632a603", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "reward_id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "reward_type": "fixed", "status": "active", "discount_code": "YUKO-5OFF-A1B2C3", "points_used": 500, "expires_at": "2026-06-30T23:59:59+00:00", "used_at": null, "created_at": "2026-03-09T14:02:06+00:00" } ``` # Authentication Source: https://docs.yuko.so/developer/api/authentication Authenticate Yuko API requests with a Bearer API key. The Yuko API uses HTTP Bearer Authentication to authenticate requests. All API requests must be made over HTTPS. To authenticate, include your API key in the `Authorization` header of every request: ```http theme={null} Authorization: Bearer YOUR_API_KEY ``` Create API keys in **Shopify admin → Apps → Yuko Loyalty → Integrations → REST API**. Keys start with `py_`. You can show or copy an existing key from the **API keys** list at any time. See [REST API](/integrations/rest-api) for the setup steps. ## Scopes Each key carries scopes in the form `read:` or `write:` (for example `read:rewards`), and write implies read. A request to an endpoint outside the key's scopes returns `403` with the code `insufficient_scope`. See [Scopes](/developer/api/scopes) for the full list. ## Authentication errors | Status | Code | Meaning | | :- | :- | :- | | `401` | `missing_token` | No `Authorization: Bearer` header was sent. | | `401` | `invalid_token` | The key is wrong or has been revoked. | | `403` | `insufficient_scope` | The key doesn't have the scope this endpoint needs. | ## Keeping keys secure Keep your API keys secure. Do not expose them in client-side code, mobile app binaries, or public repositories. All API calls containing your secret key must be made from your backend server. # Points estimate Source: https://docs.yuko.so/developer/api/checkout-points-estimate POST /public/points/estimate Estimates how many loyalty points a customer will earn for a given set of cart items. The estimate is based on your active **Place an order** earn rules. The customer is optional, so guest checkouts are supported. The request carries product and variant IDs only, with no prices or quantities, so the cart amount used in the calculation is always `0`. Every **Place an order** rule then falls at or below its minimum purchase, so the endpoint currently returns `0` points for every request, including fixed-points rules. Don't show this estimate to shoppers until you've confirmed it returns non-zero values for your earn rules. Requires the `read:points` scope. See [Scopes](/developer/api/scopes). ## Body parameters The customer placing the order. Optional: omit it entirely (or send `null`) for guest checkouts. If you send a `customer` object, include at least `id` or `email`; an object with neither returns a `500` error. The platform customer ID. Used to look up the customer if `email` is not provided. The customer's email address. Takes priority over `id` when both are provided; if no customer matches the email, `id` isn't tried. The line items in the cart. Must contain at least one item. The platform product ID. The platform variant/SKU ID. ## Response The estimated number of loyalty points the customer will earn after completing the purchase. Currently always `0` (see the warning above). A human-readable message to display to the customer. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:points`. | | `422` | `validation_error` | The request body is invalid, for example `items` is missing or empty. | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | | `500` | | A `customer` object was sent with neither `id` nor `email`. | ```bash cURL theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/points/estimate" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "customer": { "id": "cus_847362", "email": "rahul.sharma@example.com" }, "items": [ { "product_id": "prod_1001", "variant_id": "var_1001_red_m" }, { "product_id": "prod_2044", "variant_id": "var_2044_black_42" } ] }' ``` ```javascript JavaScript theme={null} const response = await fetch( "https://api.yukoapp.com/api/v1/public/points/estimate", { method: "POST", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Content-Type": "application/json", }, body: JSON.stringify({ customer: { id: "cus_847362", email: "rahul.sharma@example.com", }, items: [ { product_id: "prod_1001", variant_id: "var_1001_red_m", }, { product_id: "prod_2044", variant_id: "var_2044_black_42", }, ], }), } ); const data = await response.json(); ``` ```php PHP theme={null} $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/points/estimate"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ "customer" => [ "id" => "cus_847362", "email" => "rahul.sharma@example.com", ], "items" => [ [ "product_id" => "prod_1001", "variant_id" => "var_1001_red_m", ], [ "product_id" => "prod_2044", "variant_id" => "var_2044_black_42", ], ], ])); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Content-Type: application/json", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": { "points_earned": 0, "message": "You will earn 0 points after completing this purchase" } } ``` ```json 422 (validation error) theme={null} { "error": { "code": "validation_error", "message": "The items field is required.", "details": { "items": ["The items field is required."] } } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Classic pagination Source: https://docs.yuko.so/developer/api/classic-pagination Page through list endpoints with the page and per_page query parameters. With classic pagination, a collection of records is broken down into pages which are returned one at a time. ## Page size List endpoints accept a `per_page` query parameter (default: `20`, maximum: `100`) that sets how many records are included in each page of results. ## Moving between pages To move between pages, increment the `page` query parameter with each request. If you don't pass `page`, you get the first page of results. ## Pagination metadata Paginated responses include a `meta.pagination` object: | Field | Description | | :- | :- | | `current_page` | The page returned. | | `per_page` | The number of records per page. | | `total` | The total number of records. | | `last_page` | The number of the last page. | | `has_more` | `true` if there are more pages after this one. | # Create a points transaction Source: https://docs.yuko.so/developer/api/create-a-points-transaction POST /public/customers/transactions Adds or removes points from a customer's balance. Pass a positive `points` value to credit points, or a negative value to debit them. The transaction is recorded with `action_type` `point_adjustment` and `source` `rest_api`. Points credited through the API don't expire. Requires the `write:transactions` scope. See [Scopes](/developer/api/scopes). ## Body parameters The platform customer ID, for example the Shopify customer ID. The number of points to add or remove. Use a positive value to credit points and a negative value to debit them. Can't be zero. A human-readable reason for the adjustment, up to 255 characters. It's returned as `description` when you [list points transactions](/developer/api/list-points-transactions). ## Response Returns `201 Created` when the points transaction is created. The UUID of the newly created transaction. The platform customer ID of the customer whose balance was adjusted. The points value as submitted (positive for credit, negative for debit). Whether the transaction was a credit or debit. One of `credit`, `debit`. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `write:transactions`. | | `404` | `not_found` | No customer matches `customer_id` (`Customer not found`). | | `422` | `validation_error` | A body parameter is missing or invalid. | | `422` | `adjustment_failed` | A debit is larger than the customer's current points balance (`Insufficient point balance`). | | `422` | `adjustment_failed` | The customer is banned (`Customer is banned`). | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/customers/transactions" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "customer_id": "9049402769586", "points": 100, "description": "Bonus points for completing a survey" }' ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/transactions`, { method: "POST", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Content-Type": "application/json", }, body: JSON.stringify({ customer_id: customerId, points: 100, description: "Bonus points for completing a survey", }), } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $payload = json_encode([ "customer_id" => $customerId, "points" => 100, "description" => "Bonus points for completing a survey", ]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/transactions"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Content-Type: application/json", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 201 theme={null} { "data": { "transaction_id": "d4e5f6a7-b8c9-0123-defa-b01234567890", "customer_id": "9049402769586", "points": 100, "type": "credit" } } ``` ```json 422 (insufficient balance) theme={null} { "error": { "code": "adjustment_failed", "message": "Insufficient point balance" } } ``` ```json 422 (validation) theme={null} { "error": { "code": "validation_error", "message": "The points field is required.", "details": { "points": ["The points field is required."], "description": ["The description field is required."] } } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Errors Source: https://docs.yuko.so/developer/api/errors HTTP status codes and error codes returned by the Yuko API. Yuko uses conventional HTTP response codes to indicate the success or failure of an API request. Codes in the `2xx` range indicate success. Codes in the `4xx` range indicate an error caused by the information provided. Codes in the `5xx` range indicate an error on Yuko's servers. Most errors return an `error` object with a machine-readable `code` and a human-readable `message`. Validation errors also include `details`, keyed by field name. ```json 422 theme={null} { "error": { "code": "validation_error", "message": "The customer id field is required.", "details": { "customer_id": ["The customer id field is required."] } } } ``` ## Error codes | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The API key doesn't have the scope this endpoint needs. | | `404` | `not_found` | The requested resource (for example the customer or reward) doesn't exist. | | `422` | `validation_error` | A required parameter is missing or invalid. | | `422` | `adjustment_failed` | A points adjustment couldn't be made, for example because of an insufficient points balance. | | `422` | `redemption_failed` | A reward couldn't be redeemed, for example because of an insufficient points balance or an inactive reward. | | `429` | | Your API key has exceeded its [rate limit](/developer/api/rate-limits). The body has no `error` object (see below). | | `500` | `internal_error` | An internal error occurred in Yuko. Retry your request. If the issue persists, contact Yuko support. | ## Rate limit errors A `429` response has a different body from other errors, with a single `message` and no `error` object: ```json 429 theme={null} { "message": "Too Many Attempts." } ``` # Get customer balance Source: https://docs.yuko.so/developer/api/get-customer-balance GET /public/customers/balance Returns a customer's current loyalty points balance, including total earned and redeemed. To get the balance along with tier and membership details, use [Get customer membership](/developer/api/list-memberships). Requires the `read:customers` scope. See [Scopes](/developer/api/scopes). ## Query parameters The platform customer ID (for example, the Shopify customer ID). If you leave it out, this endpoint returns a `500` `internal_error` rather than a `422` validation error, so always send it. ## Response The customer's points balance. The platform customer ID. The customer's current redeemable points balance. Always `0` for customers who are banned or excluded from the loyalty program by a customer tag. Total loyalty points ever earned by the customer. Total points the customer has redeemed. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:customers`. | | `404` | `not_found` | No customer matches `customer_id`. Message: "Customer not found". | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | | `500` | `internal_error` | `customer_id` was left out. Message: "An unexpected error occurred. Please try again later." | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/balance?customer_id=9049402769586" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/balance?customer_id=${customerId}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/balance?customer_id={$customerId}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": { "customer_id": "9049402769586", "balance": 350, "earned": 500, "redeemed": 150 } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 500 (customer_id missing) theme={null} { "error": { "code": "internal_error", "message": "An unexpected error occurred. Please try again later." } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Get customer tier Source: https://docs.yuko.so/developer/api/get-customer-tier GET /public/customers/tiers Retrieves a customer's current VIP tier, their next tier and their progress toward it. If VIP tiers are turned off for the store, `current_tier`, `next_tier` and `progress_to_next_tier` are all `null`. Requires the `read:tiers` scope. See [Scopes](/developer/api/scopes). ## Query parameters The platform customer ID (for example, the Shopify customer ID). ## Response The customer's tier status. The customer's current VIP tier. `null` if the customer has not reached any tier threshold or VIP tiers are turned off. The tier's unique identifier. The tier's name. The qualifying value needed to reach the tier. The tier's multiplier. The tier icon, or `null` if none is set. Contains `source` (`default` or `custom`), `slug` (built-in icons), `id` (custom uploads) and `url` (the image URL). The benefits associated with this tier. The benefit's name. The kind of benefit. One of `fixed`, `percentage`, `free_product`, `free_shipping`, `bonus_points`, `store_credit`, `custom`. The benefit's settings. Its shape depends on `benefit_type`. When the tier was created (ISO 8601). The next VIP tier the customer can reach, with the same fields as `current_tier`. `null` if the customer is already at the highest tier, hasn't been evaluated for tiers yet, or VIP tiers are turned off. The tier's unique identifier. The tier's name. The qualifying value needed to reach the tier. The tier's multiplier. The tier icon, or `null` if none is set. Same shape as `current_tier.icon`. The benefits associated with the next tier. Same shape as `current_tier.benefits`. The benefit's name. The kind of benefit. One of `fixed`, `percentage`, `free_product`, `free_shipping`, `bonus_points`, `store_credit`, `custom`. The benefit's settings. Its shape depends on `benefit_type`. When the tier was created (ISO 8601). The customer's progress toward the next tier. `null` if there's no `next_tier` or VIP tiers are turned off. The customer's current qualifying value (points earned, amount spent or orders placed), rounded down to a whole number. The value required to reach the next tier. The remaining value needed to reach the next tier. The percentage of the way to the next tier, rounded to 2 decimal places. The metric used to determine tier progression. One of `total_earned_points`, `total_amount_spents`, `total_orders`. Can be `null` even when VIP tiers are set up, so don't rely on it; the metric is set in your VIP tier settings. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:tiers`. | | `404` | `not_found` | No customer matches `customer_id`. Message: "Customer not found". | | `422` | `validation_error` | `customer_id` is missing. Message: "The customer id field is required." | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/tiers?customer_id=9049402769586" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/tiers?customer_id=${customerId}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/tiers?customer_id={$customerId}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": { "current_tier": { "id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "name": "Silver", "threshold_value": 500, "multiplier": 1.5, "icon": null, "benefits": [ { "name": "5% Discount on every order", "benefit_type": "percentage", "benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 5 } } ], "created_at": "2025-09-12T15:44:44+00:00" }, "next_tier": { "id": "8ac40d96-4b4e-5358-9444-3f16bab9bf39", "name": "Gold", "threshold_value": 1000, "multiplier": 2.0, "icon": null, "benefits": [ { "name": "10% Discount on every order", "benefit_type": "percentage", "benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 10 } } ], "created_at": "2025-09-12T15:44:44+00:00" }, "progress_to_next_tier": { "current_value": 650, "required_value": 1000, "remaining_value": 350, "progress_percentage": 65.0, "threshold_type": "total_earned_points" } } } ``` ```json 200 (no tier) theme={null} { "data": { "current_tier": null, "next_tier": { "id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "name": "Silver", "threshold_value": 500, "multiplier": 1.5, "icon": null, "benefits": [], "created_at": "2025-09-12T15:44:44+00:00" }, "progress_to_next_tier": { "current_value": 120, "required_value": 500, "remaining_value": 380, "progress_percentage": 24.0, "threshold_type": "total_earned_points" } } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 422 theme={null} { "error": { "code": "validation_error", "message": "The customer id field is required.", "details": { "customer_id": ["The customer id field is required."] } } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Get redeemable rewards Source: https://docs.yuko.so/developer/api/get-redeemable-rewards GET /public/customers/rewards/redeemable Retrieves a customer's points balance, every active online reward with affordability info, and the rewards the customer has already redeemed. Shopify POS rewards aren't included. This is intended as the primary endpoint for rendering a loyalty redemption UI. Requires the `read:rewards` scope. See [Scopes](/developer/api/scopes). ## Query parameters The platform customer ID, for example the Shopify customer ID. ## Response The customer's current redeemable points balance. Always `0` for banned customers. The active reward catalogue for this organisation, enriched with affordability fields for this customer. The reward's unique identifier. Pass this as `reward_id` to [Redeem a reward](/developer/api/redeem-reward). The reward's name. The reward's description. One of `fixed`, `percentage`, `free_shipping`, `free_product`, `store_credit`. The number of points required to redeem this reward. The rule configuration for this reward. Structure varies by `reward_type`. The reward's storefront icon, or `null` if none is set. Contains `source` (`default` or `custom`), `slug`, `id` and `url`. See [Retrieve a reward](/developer/api/retrieve-a-reward) for details. Whether the customer currently has enough points to redeem this reward. The additional points needed to redeem this reward. `0` if `can_redeem` is `true`. The customer's previously redeemed coupons and discounts, sorted by `created_at`, newest first. Each item has the same fields as [List customer rewards](/developer/api/list-customer-rewards), including `customer_id` (the customer's Yuko UUID) and `reward_id`. Unique identifier for the customer reward. The type of discount issued. One of `active`, `used`, `inactive`, `expired`, `deleted`, `revert`. The discount or coupon code issued to the customer. The number of points spent on this reward. When this reward expires. When the reward was used. When the reward was issued. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:rewards`. | | `404` | `not_found` | No customer matches `customer_id` (`Customer not found`). | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=9049402769586" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=${customerId}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id={$customerId}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": { "points_balance": 650, "rewards": [ { "id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5", "name": "$5 off your next order", "description": "Redeem 500 points for a $5 discount.", "reward_type": "fixed", "points_cost": 500, "reward_rule": { "points_required": 500, "value": 5 }, "icon": null, "can_redeem": true, "points_needed": 0 }, { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "name": "10% off your next order", "description": "Redeem 1000 points for 10% off.", "reward_type": "percentage", "points_cost": 1000, "reward_rule": { "points_required": 1000, "value": 10 }, "icon": null, "can_redeem": false, "points_needed": 350 } ], "customer_rewards": [ { "id": "1fd80ced-326f-4082-951b-21a38632a603", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "reward_id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5", "reward_type": "fixed", "status": "active", "discount_code": "YUKO-TVJ-BL1", "points_used": 500, "expires_at": "2026-06-01T00:00:00+00:00", "used_at": null, "created_at": "2026-02-15T08:30:00+00:00" } ] } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Get referral program Source: https://docs.yuko.so/developer/api/get-referral-program GET /public/referrals/program Retrieves the referral program configuration for your organisation. The configuration includes referrer and friend reward settings, fraud protection rules and referral link settings. Requires the `read:referrals` scope. See [Scopes](/developer/api/scopes). ## Response Unique UUID identifier for the referral program. The reward for the customer who makes the referral (the advocate), as configured in **Referral → Program**. Common keys: * `title`, `description`: the reward's display text. * `is_active`: whether the referrer reward is turned on. * `reward_type`: one of `fixed`, `percentage`, `free_product`, `free_shipping`, `store_credit` or `points`. * `discount_value`: the discount amount, percentage, credit amount or points. * `coupon_prefix`, `is_auto_apply`, `combines_with`, `applied_to`, `purchase_type`: discount code settings. * `min_requirement_type` (`none`, `amount` or `quantity`) with `min_purchase_amount` or `min_quantity_items`: minimum purchase requirement. * `customer_selection` (referrer reward only): `all` or `original`. * `is_expire_enabled`, `expire_after`, `expire_period`: reward expiry. * `icon`: the reward icon. The reward for the referred friend. Uses the same keys as `referrer_reward`, except `reward_type` is one of `fixed`, `percentage`, `free_product` or `free_shipping`. Reserved. Currently always `null`. Fraud protection settings, such as `block_self_referral`. Referral link settings: `landing_page_url`, `utm_campaign` and `social_share` (an array of objects with `platform` and `message`, where `platform` is `facebook`, `twitter`, `whatsapp` or `email`). When the referral program was created (ISO 8601). When the referral program was last updated (ISO 8601). ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:referrals`. | | `404` | `not_found` | No referral program is set up for your organisation. Message: `Referral program not found`. | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/referrals/program" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const response = await fetch( "https://api.yukoapp.com/api/v1/public/referrals/program", { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/referrals/program"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": { "id": "c3d4e5f6-a7b8-9012-cdef-a01234567890", "referrer_reward": { "title": "500 points", "is_active": true, "reward_type": "points", "discount_value": 500 }, "friend_reward": { "title": "$10 off", "is_active": true, "reward_type": "fixed", "discount_value": 10, "coupon_prefix": "REF" }, "qualifying_rules": null, "fraud_rules": { "block_self_referral": true }, "display_config": { "landing_page_url": "https://example.com/pages/refer", "utm_campaign": "referral" }, "created_at": "2025-10-01T00:00:00+00:00", "updated_at": "2026-01-15T10:00:00+00:00" } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Referral program not found" } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Introduction Source: https://docs.yuko.so/developer/api/introduction Base URL, request and response format for the Yuko REST API. The Yuko API is organized around REST. Our API has predictable, resource-oriented URLs and uses standard HTTP response codes to indicate success or failure. All request and response bodies are JSON. ## Base URL ```text theme={null} https://api.yukoapp.com/api/v1/public ``` ## Request format All requests must include the following headers: | Header | Value | | :- | :- | | `Authorization` | `Bearer YOUR_API_KEY` | | `Accept` | `application/json` | | `Content-Type` | `application/json` (for `POST` requests with a body) | Always send `Accept: application/json`. Without it, a few framework-level errors (such as rate limiting or an unknown URL) may come back as HTML instead of JSON. ## Response format All responses return JSON. Successful responses wrap the result in a `data` key; list endpoints also return `meta.pagination`. Error responses return an `error` object with a machine-readable `code` and a human-readable `message`: ```json theme={null} { "error": { "code": "insufficient_scope", "message": "Your API token does not have the required 'rewards' scope for this action" } } ``` ## Authentication and scopes Authenticate with a REST API key as a Bearer token. Each key is limited to the scopes the merchant chose, written as `read:` or `write:`. See [Authentication](/developer/api/authentication) and [Scopes](/developer/api/scopes). # List booster campaigns Source: https://docs.yuko.so/developer/api/list-booster-campaigns GET /public/booster-campaigns Retrieves a paginated list of your organisation's active booster campaigns. Results are sorted by `created_at`, newest first. Draft, completed, cancelled and disabled campaigns are not returned. The list is filtered by status only, not by date, so check `starts_at`, `ends_at` and `schedule` to see whether a campaign is running right now. Requires the `read:booster_campaigns` scope. See [Scopes](/developer/api/scopes). ## Query parameters The number of results per page. Values above `100` are capped at `100`. The page number to retrieve. See [Classic pagination](/developer/api/classic-pagination). ## Response The active booster campaigns on this page. Unique UUID identifier for the booster campaign. The campaign name. The campaign description. The booster campaign type. One of `multiplier`, `bonus_flat`, `spending_goal`, `order_frequency`, `streak`, `multi_action`, `dormant_reactivation`, `first_purchase_boost`, `product_collection_multiplier`. The campaign status. Always `active` for this endpoint. Whether the campaign can stack with other booster campaigns. When the campaign runs, for example `type` (`evergreen`, `one_time` or `recurring`), recurrence settings, `days_of_week`, and `active_hours_start` / `active_hours_end`. Targeting settings, such as the `products` and `collections` the campaign applies to. The product scope the campaign applies to. Storefront display settings, such as `show_in_widget` and `labels`. Always includes an `icon` object (or `null`) with `source`, `slug`, `id` and `url`, the same shape as a reward's icon. Type-specific settings. Structure varies by `type`, for example `milestones` for spending goals and order frequency, or `actions` and `completion_logic` for multi-action challenges. When the campaign starts (ISO 8601). When the campaign ends (ISO 8601), or `null` if it has no end date. When the campaign was created (ISO 8601). Pagination details. See [Classic pagination](/developer/api/classic-pagination). The page returned. The number of records per page. The total number of records. The number of the last page. `true` if there are more pages after this one. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:booster_campaigns`. | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/booster-campaigns?per_page=20" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const params = new URLSearchParams({ per_page: "20" }); const response = await fetch( `https://api.yukoapp.com/api/v1/public/booster-campaigns?${params}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $query = http_build_query(["per_page" => 20]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/booster-campaigns?{$query}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": [ { "uuid": "5b1f2c9e-7d3a-4e8b-9c11-2f6a8d4e0b73", "name": "Spend $100 this month", "description": "Earn bonus points when you spend $100 in 30 days.", "type": "spending_goal", "status": "active", "stackable": false, "schedule": { "type": "evergreen" }, "targeting": null, "product_scope": null, "display": { "show_in_widget": true, "icon": null }, "config": { "time_window_days": 30, "milestones": [ { "id": "m1", "spending_amount": 100, "label": "Spend $100" } ] }, "starts_at": "2026-10-01T00:00:00+00:00", "ends_at": null, "created_at": "2026-10-01T09:00:00+00:00" } ], "meta": { "pagination": { "current_page": 1, "per_page": 20, "total": 1, "last_page": 1, "has_more": false } } } ``` ```json 403 theme={null} { "error": { "code": "insufficient_scope", "message": "Your API token does not have the required 'booster_campaigns' scope for this action" } } ``` # List customer activities Source: https://docs.yuko.so/developer/api/list-customer-activities GET /public/customers/activities Retrieves a paginated list of a customer's loyalty activities, newest first. Activities include points earned, rewards redeemed, tier changes and manual adjustments. Results are sorted by `created_at`, newest first. Requires the `read:activities` scope. See [Scopes](/developer/api/scopes). ## Query parameters The platform customer ID (for example, the Shopify customer ID). Return only activities from this source. Exact match. Common values include `loyalty_campaigns`, `loyalty_rewards`, `loyalty_customer_rewards`, `loyalty_transactions`, `loyalty_tiers`, `loyalty_tier_benefits`, `events` (workflow point awards), `referral_transactions`, `referral_rewards`, `referral_advocates` and `users` (manual and API point adjustments). Return only activities of this type, for example `purchase`, `point_adjustment`, `reward_used`, `point_expiry` or `vip_tier_upgrade`. Exact match. The number of results per page. Must be between `1` and `100`. The page number to retrieve. See [Classic pagination](/developer/api/classic-pagination). ## Response The activities on this page. Unique identifier for the activity. Yuko's UUID for the customer this activity belongs to. The type of action that occurred. The module or entity that generated this activity. The UUID of the source record (for example, a campaign or reward) that triggered this activity. Whether the activity resulted in a points credit or debit. One of `credit`, `debit`. The number of points involved in this activity, taken from `metadata.earning_value` (or `metadata.used_point` for redemptions). `0` when no points were involved. The type of earning, for example `points` or `store_credit`. The full activity payload. Structure varies by `activity_type`. Returned as an empty array (`[]`) when the activity has no payload. When the activity happened (ISO 8601). Pagination details. See [Classic pagination](/developer/api/classic-pagination). The page returned. The number of records per page. The total number of records. The number of the last page. `true` if there are more pages after this one. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:activities`. | | `404` | `not_found` | No customer matches `customer_id`. Message: "Customer not found". | | `422` | `validation_error` | `customer_id` is missing. Message: "The customer id field is required." | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/activities?customer_id=9049402769586&per_page=20" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const params = new URLSearchParams({ per_page: 20 }); const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/activities?customer_id=${customerId}&${params}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $query = http_build_query(["per_page" => 20]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/activities?customer_id={$customerId}&{$query}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": [ { "id": "f7a8b9c0-d1e2-3456-fabc-d01234567890", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "activity_type": "purchase", "source_type": "loyalty_campaigns", "source_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "entry_type": "credit", "points": 100, "earning_type": "points", "metadata": { "entry_type": "credit", "earning_type": "points", "earning_value": 100, "expire_date": null, "on_hold_until": null, "campaign_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "earn_transaction_uuid": "c3d4e5f6-a7b8-9012-cdef-a01234567890" }, "created_at": "2026-02-15T08:30:00+00:00" }, { "id": "e6b7c8d9-e0f1-2345-efab-c01234567890", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "activity_type": "point_adjustment", "source_type": "users", "source_id": null, "entry_type": "credit", "points": 50, "earning_type": "points", "metadata": { "description": "Bonus for completing a survey", "source": "rest_api", "transaction_uuid": "b8c9d0e1-f2a3-4567-bcde-f01234567890", "point_ledger_uuid": "c9d0e1f2-a3b4-5678-cdef-a01234567890", "entry_type": "credit", "earning_type": "points", "earning_value": 50 }, "created_at": "2026-02-10T12:00:00+00:00" } ], "meta": { "pagination": { "current_page": 1, "per_page": 20, "total": 2, "last_page": 1, "has_more": false } } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 422 theme={null} { "error": { "code": "validation_error", "message": "The customer id field is required.", "details": { "customer_id": ["The customer id field is required."] } } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # List customer referrals Source: https://docs.yuko.so/developer/api/list-customer-referrals GET /public/customers/referrals Retrieves a paginated list of referral transactions where the customer was the advocate, newest first. The advocate is the person who made the referral. Results are sorted by `created_at`, newest first. If the customer has no referral code yet (no advocate record), the response is `{"data": []}` with no `meta` object. Requires the `read:referrals` scope. See [Scopes](/developer/api/scopes). ## Query parameters The platform customer ID (for example, the Shopify customer ID). Return only referrals with this status. One of `pending`, `rewarded`, `cancelled`, `expired`, `fraudulent`. The number of results per page. Must be between `1` and `100`. The page number to retrieve. See [Classic pagination](/developer/api/classic-pagination). ## Response The referral transactions on this page. Unique identifier for the referral transaction. The UUID of the referral advocate record for this customer. Yuko's internal UUID for the friend who was referred. A referral is only recorded once the friend has a customer record, so this is always set. Yuko's internal UUID for the friend's qualifying order. `null` until the friend places a qualifying order. Intended to hold the referral code the friend used. Currently always `null`; use `referral_code` from [Retrieve a customer](/developer/api/retrieve-a-customer) to get the advocate's code. The current status of the referral transaction. One of `pending`, `rewarded`, `cancelled`, `expired`, `fraudulent`. When the referral transaction was created (ISO 8601). When the referral transaction was last updated (ISO 8601). Pagination details. See [Classic pagination](/developer/api/classic-pagination). The page returned. The number of records per page. The total number of records. The number of the last page. `true` if there are more pages after this one. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:referrals`. | | `404` | `not_found` | No customer matches `customer_id`. Message: "Customer not found". | | `422` | `validation_error` | `status` isn't one of the allowed values. Message: "The selected status is invalid." | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/referrals?customer_id=9049402769586&status=rewarded" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const params = new URLSearchParams({ status: "rewarded" }); const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/referrals?customer_id=${customerId}&${params}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $query = http_build_query(["status" => "rewarded"]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/referrals?customer_id={$customerId}&{$query}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": [ { "id": "d4e5f6a7-b8c9-0123-defa-b01234567890", "advocate_id": "b2c3d4e5-f6a7-8901-bcde-f01234567890", "friend_customer_id": "f8a9b0c1-d2e3-4567-fabc-d01234567890", "order_id": "a0b1c2d3-e4f5-6789-abcd-e01234567890", "referral_code": null, "status": "rewarded", "created_at": "2026-01-20T14:00:00+00:00", "updated_at": "2026-01-22T09:00:00+00:00" } ], "meta": { "pagination": { "current_page": 1, "per_page": 20, "total": 1, "last_page": 1, "has_more": false } } } ``` ```json 200 (customer has no referral code) theme={null} { "data": [] } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 422 theme={null} { "error": { "code": "validation_error", "message": "The selected status is invalid.", "details": { "status": ["The selected status is invalid."] } } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # List customer rewards Source: https://docs.yuko.so/developer/api/list-customer-rewards GET /public/customers/rewards Retrieves a paginated list of discount codes issued to a customer, such as rewards redeemed with points. Store credit redemptions don't create a customer reward; they appear as [points transactions](/developer/api/list-points-transactions) instead. Results are sorted by `created_at`, newest first. Requires the `read:rewards` scope. See [Scopes](/developer/api/scopes). ## Query parameters The platform customer ID, for example the Shopify customer ID. Return only rewards with this status. One of `active`, `used`, `inactive`, `expired`, `deleted`, `revert`. The number of results per page. Must be between `1` and `100`. The page number to retrieve. See [Classic pagination](/developer/api/classic-pagination). ## Response The customer rewards on this page. Unique identifier for the customer reward. Yuko's internal UUID for the customer this reward was issued to. This is not the platform customer ID you pass as `customer_id`. The UUID of the record that issued this reward, such as the catalogue reward that was redeemed. The type of discount issued. For rewards redeemed with points, this is the catalogue reward's `reward_type`. `null` when no type was recorded. One of `fixed`, `percentage`, `free_shipping`, `free_product`, `pos_fixed`, `pos_percentage`. The current status of this reward. One of `active`, `used`, `inactive`, `expired`, `deleted`, `revert`. The discount or coupon code issued to the customer. The number of loyalty points spent to generate this reward. When this reward expires. `null` if it doesn't expire. When the reward was used. `null` if not yet used. When the reward was issued. Pagination details. See [Classic pagination](/developer/api/classic-pagination). The page returned. The number of records per page. The total number of records. The number of the last page. `true` if there are more pages after this one. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:rewards`. | | `404` | `not_found` | No customer matches `customer_id` (`Customer not found`). | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards?customer_id=9049402769586&status=active&per_page=20" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const params = new URLSearchParams({ status: "active", per_page: 20 }); const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/rewards?customer_id=${customerId}&${params}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $query = http_build_query(["status" => "active", "per_page" => 20]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/rewards?customer_id={$customerId}&{$query}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": [ { "id": "1fd80ced-326f-4082-951b-21a38632a603", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "reward_id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5", "reward_type": "fixed", "status": "active", "discount_code": "YUKO-TVJ-BL1", "points_used": 500, "expires_at": "2026-06-01T00:00:00+00:00", "used_at": null, "created_at": "2026-02-15T08:30:00+00:00" } ], "meta": { "pagination": { "current_page": 1, "per_page": 20, "total": 1, "last_page": 1, "has_more": false } } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # List customers Source: https://docs.yuko.so/developer/api/list-customers GET /public/customers Retrieves a paginated list of your store's customers, newest first. Results are sorted by `created_at`, newest first. To fetch a single customer, use [Retrieve a customer](/developer/api/retrieve-a-customer). Requires the `read:customers` scope. See [Scopes](/developer/api/scopes). ## Query parameters Return only the customer whose email address exactly matches this value. Return only customers synced from this platform. One of `shopify`, `woocommerce`. The number of results per page. Values above `100` are treated as `100`. The page number to retrieve. See [Classic pagination](/developer/api/classic-pagination). ## Response The customers on this page. Each customer has the properties of the [Customer object](/customer-identity-object). Yuko's unique identifier for the customer. The customer's first name. The customer's last name. The customer's email address. The customer's phone number. The ecommerce platform the customer was synced from, for example `shopify`. The customer's ID in your store. Pass this value as `customer_id` to other endpoints. `member` for active loyalty members, or `disabled` if the customer is banned from the loyalty program. The customer's birthday in `YYYY-MM-DD` format, if collected. The customer's referral code. `null` if the customer has no referral code yet. The customer's referral link, built from the referral landing page URL plus `?ref=`. `null` if there's no referral code or no landing page URL is set. The customer's points totals. Current redeemable points balance. Always `0` for customers who are banned or excluded from the loyalty program by a customer tag. Total points ever earned. Total points redeemed. When the customer was created in Yuko (ISO 8601). When the customer was last updated in Yuko (ISO 8601). Pagination details. See [Classic pagination](/developer/api/classic-pagination). The page returned. The number of records per page. The total number of records. The number of the last page. `true` if there are more pages after this one. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:customers`. | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers?per_page=20&page=1" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const params = new URLSearchParams({ per_page: 20, page: 1 }); const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers?${params}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $query = http_build_query(["per_page" => 20, "page" => 1]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers?{$query}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": [ { "id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "first_name": "Jane", "last_name": "Smith", "email": "jane.smith@example.com", "phone": "+14155552671", "platform": "shopify", "platform_customer_id": "7823491023", "state": "member", "date_of_birth": "1990-04-12", "referral_code": "JANE10", "referral_url": "https://example.com/pages/refer?ref=JANE10", "points": { "balance": 350, "earned": 500, "redeemed": 150 }, "created_at": "2024-06-01T10:00:00+00:00", "updated_at": "2026-02-15T08:30:00+00:00" } ], "meta": { "pagination": { "current_page": 1, "per_page": 20, "total": 1, "last_page": 1, "has_more": false } } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Get customer membership Source: https://docs.yuko.so/developer/api/list-memberships GET /public/customers/memberships Returns a customer's loyalty membership summary, including points balance, current VIP tier and progress toward the next tier. If VIP tiers are turned off for the store, the tier fields are `null`. Requires the `read:customers` scope. See [Scopes](/developer/api/scopes). ## Query parameters The platform customer ID (for example, the Shopify customer ID). If you leave it out, this endpoint returns a `500` `internal_error` rather than a `422` validation error, so always send it. ## Response The customer's membership summary. The customer's loyalty membership status. Always `active`. When the customer was created in Yuko (ISO 8601). The customer's current points summary. The customer's current redeemable points balance. Always `0` for customers who are banned or excluded from the loyalty program by a customer tag. Total points ever earned by the customer. Total points redeemed by the customer. The customer's current VIP tier. `null` if the customer has not reached any tier threshold or VIP tiers are turned off. The tier's unique identifier. The tier's name. The qualifying value needed to reach the tier. The tier's multiplier. The tier icon, or `null` if none is set. Contains `source` (`default` or `custom`), `slug` (built-in icons), `id` (custom uploads) and `url` (the image URL). The benefits associated with this tier. The benefit's name. The kind of benefit. One of `fixed`, `percentage`, `free_product`, `free_shipping`, `bonus_points`, `store_credit`, `custom`. The benefit's settings. Its shape depends on `benefit_type`. When the tier was created (ISO 8601). The next VIP tier the customer can reach, with the same fields as `current_tier`. `null` if the customer is already at the highest tier, hasn't been evaluated for tiers yet, or VIP tiers are turned off. The tier's unique identifier. The tier's name. The qualifying value needed to reach the tier. The tier's multiplier. The tier icon, or `null` if none is set. Same shape as `current_tier.icon`. The benefits associated with the next tier. Same shape as `current_tier.benefits`. The benefit's name. The kind of benefit. One of `fixed`, `percentage`, `free_product`, `free_shipping`, `bonus_points`, `store_credit`, `custom`. The benefit's settings. Its shape depends on `benefit_type`. When the tier was created (ISO 8601). The customer's progress toward the next tier. `null` if there's no `next_tier` or VIP tiers are turned off. The customer's current qualifying value (points earned, amount spent or orders placed), rounded down to a whole number. The value required to reach the next tier. The remaining value needed to reach the next tier. The percentage of the way to the next tier, rounded to 2 decimal places. The metric used to determine tier progression. One of `total_earned_points`, `total_amount_spents`, `total_orders`. Can be `null` even when VIP tiers are set up, so don't rely on it; the metric is set in your VIP tier settings. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:customers`. | | `404` | `not_found` | No customer matches `customer_id`. Message: "Customer not found". | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | | `500` | `internal_error` | `customer_id` was left out. Message: "An unexpected error occurred. Please try again later." | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/memberships?customer_id=9049402769586" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/memberships?customer_id=${customerId}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/memberships?customer_id={$customerId}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": { "status": "active", "member_since": "2024-06-01T10:00:00+00:00", "points": { "balance": 350, "earned": 500, "redeemed": 150 }, "current_tier": { "id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "name": "Silver", "threshold_value": 500, "multiplier": 1.5, "icon": null, "benefits": [ { "name": "5% Discount on every order", "benefit_type": "percentage", "benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 5 } } ], "created_at": "2025-09-12T15:44:44+00:00" }, "next_tier": { "id": "8ac40d96-4b4e-5358-9444-3f16bab9bf39", "name": "Gold", "threshold_value": 1000, "multiplier": 2.0, "icon": null, "benefits": [ { "name": "10% Discount on every order", "benefit_type": "percentage", "benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 10 } } ], "created_at": "2025-09-12T15:44:44+00:00" }, "progress_to_next_tier": { "current_value": 650, "required_value": 1000, "remaining_value": 350, "progress_percentage": 65.0, "threshold_type": "total_earned_points" } } } ``` ```json 200 (no tier yet) theme={null} { "data": { "status": "active", "member_since": "2026-01-10T08:00:00+00:00", "points": { "balance": 120, "earned": 120, "redeemed": 0 }, "current_tier": null, "next_tier": { "id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "name": "Silver", "threshold_value": 500, "multiplier": 1.5, "icon": null, "benefits": [], "created_at": "2025-09-12T15:44:44+00:00" }, "progress_to_next_tier": { "current_value": 120, "required_value": 500, "remaining_value": 380, "progress_percentage": 24.0, "threshold_type": "total_earned_points" } } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 500 (customer_id missing) theme={null} { "error": { "code": "internal_error", "message": "An unexpected error occurred. Please try again later." } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # List points transactions Source: https://docs.yuko.so/developer/api/list-points-transactions GET /public/customers/transactions Retrieves a paginated list of points transactions for a customer, newest first. Results are sorted by `created_at`, newest first. The list also includes the credit entry recorded when a customer redeems a store credit reward (`action_type` `store_credit`). For that entry, `points` is the store credit amount (rounded down to a whole number), not a number of points; the points spent appear as a separate `debit` entry. Requires the `read:transactions` scope. See [Scopes](/developer/api/scopes). ## Query parameters The platform customer ID, for example the Shopify customer ID. Return only transactions of this type. One of `credit`, `debit`. The number of results per page. Must be between `1` and `100`. The page number to retrieve. See [Classic pagination](/developer/api/classic-pagination). ## Response The transactions on this page. Unique identifier for the transaction. The UUID of the customer this transaction belongs to. Whether points were added or removed. One of `credit`, `debit`. The number of points added or removed. Always a positive number; use `entry_type` to determine direction. The action that generated this transaction, for example `purchase`, `signup`, `point_adjustment` (manual or REST API adjustments) or the reward type for redemptions. The current status of the transaction. One of `active`, `on_hold`, `used`, `failed`. A human-readable description of the transaction, if provided. The source that created this transaction, for example `rest_api`. When the transaction occurred. When the transaction record was created. Pagination details. See [Classic pagination](/developer/api/classic-pagination). The page returned. The number of records per page. The total number of records. The number of the last page. `true` if there are more pages after this one. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:transactions`. | | `404` | `not_found` | No customer matches `customer_id` (`Customer not found`). | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/transactions?customer_id=9049402769586&entry_type=credit&per_page=20" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const params = new URLSearchParams({ entry_type: "credit", per_page: 20 }); const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/transactions?customer_id=${customerId}&${params}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $query = http_build_query(["entry_type" => "credit", "per_page" => 20]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/transactions?customer_id={$customerId}&{$query}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": [ { "id": "d4e5f6a7-b8c9-0123-defa-b01234567890", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "entry_type": "credit", "points": 100, "action_type": "purchase", "status": "active", "description": null, "source": null, "transacted_at": "2026-02-15T08:30:00+00:00", "created_at": "2026-02-15T08:30:00+00:00" }, { "id": "e5f6a7b8-c9d0-1234-efab-c01234567890", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "entry_type": "credit", "points": 50, "action_type": "signup", "status": "active", "description": null, "source": null, "transacted_at": "2024-06-01T10:00:00+00:00", "created_at": "2024-06-01T10:00:00+00:00" } ], "meta": { "pagination": { "current_page": 1, "per_page": 20, "total": 2, "last_page": 1, "has_more": false } } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # List rewards Source: https://docs.yuko.so/developer/api/list-rewards GET /public/rewards Retrieves a paginated list of active loyalty rewards in your reward catalogue. Shopify POS rewards aren't included. Results are sorted by `created_at`, newest first. To fetch a single reward, use [Retrieve a reward](/developer/api/retrieve-a-reward). Requires the `read:rewards` scope. See [Scopes](/developer/api/scopes). ## Query parameters Return only rewards of this type. One of `fixed`, `percentage`, `free_shipping`, `free_product`, `store_credit`. The number of results per page, from `1` to `100`. Values above `100` are treated as `100`. The page number to retrieve. See [Classic pagination](/developer/api/classic-pagination). ## Response The rewards on this page. Unique identifier for the reward. The display name of the reward. A description of the reward shown to customers. The type of reward issued to the customer. One of `fixed`, `percentage`, `free_shipping`, `free_product`, `store_credit`. The number of points required to redeem this reward. The rule configuration for this reward. Structure varies by `reward_type`. The reward's storefront icon, or `null` if none is set. Contains `source` (`default` or `custom`), `slug`, `id` and `url`. See [Retrieve a reward](/developer/api/retrieve-a-reward) for details. Whether this reward is currently active and available for redemption. When the reward was created. When the reward was last updated. Pagination details. See [Classic pagination](/developer/api/classic-pagination). The page returned. The number of records per page. The total number of records. The number of the last page. `true` if there are more pages after this one. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:rewards`. | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/rewards?reward_type=fixed" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const params = new URLSearchParams({ reward_type: "fixed" }); const response = await fetch( `https://api.yukoapp.com/api/v1/public/rewards?${params}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $query = http_build_query(["reward_type" => "fixed"]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/rewards?{$query}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": [ { "id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5", "name": "$5 off your next order", "description": "Redeem 500 points for a $5 discount.", "reward_type": "fixed", "points_cost": 500, "reward_rule": { "points_required": 500, "value": 5 }, "icon": null, "is_active": true, "created_at": "2025-12-01T09:00:00+00:00", "updated_at": "2025-12-01T09:00:00+00:00" }, { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "name": "10% off your next order", "description": "Redeem 1000 points for 10% off.", "reward_type": "percentage", "points_cost": 1000, "reward_rule": { "points_required": 1000, "value": 10 }, "icon": null, "is_active": true, "created_at": "2025-12-01T09:00:00+00:00", "updated_at": "2025-12-01T09:00:00+00:00" } ], "meta": { "pagination": { "current_page": 1, "per_page": 20, "total": 2, "last_page": 1, "has_more": false } } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # List VIP tiers Source: https://docs.yuko.so/developer/api/list-vip-tiers GET /public/tiers Retrieves all VIP tiers configured for your organisation, with their benefits. Tiers are sorted by `threshold_value` in ascending order. Each tier includes its associated benefits. Requires the `read:tiers` scope. See [Scopes](/developer/api/scopes). ## Response The VIP tiers, lowest threshold first. Unique UUID identifier for the VIP tier. The display name of the VIP tier. The value a customer must reach to qualify for this tier, measured in the program's tier metric: amount spent (default), points earned or orders placed, as configured in your VIP settings. The points earning multiplier applied to customers in this tier. The tier icon, or `null` if none is set. Always has four keys: `source` (`default` or `custom`), `slug` (built-in icons, otherwise `null`), `id` (custom uploads, otherwise `null`) and `url` (the custom upload URL, or the hosted SVG for a built-in icon). A list of benefits associated with this tier. The display name of the benefit. The type of benefit issued to the customer. One of `fixed`, `percentage`, `free_product`, `free_shipping`, `bonus_points`, `store_credit`, `custom`. The stored value configuration for this benefit, returned as-is. Structure varies by `benefit_type`. For example, `fixed`/`percentage` benefits include `reward_type`, `method` (`automatic` or `one_time`), `discount_value`, `coupon_prefix` and `min_requirement`; `bonus_points` and `store_credit` include `method`, `reward_type` and `discount_value`; `custom` benefits may be empty. When the tier was created (ISO 8601). ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:tiers`. | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/tiers" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const response = await fetch( "https://api.yukoapp.com/api/v1/public/tiers", { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/tiers"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": [ { "id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "name": "Silver", "threshold_value": 500, "multiplier": 1.5, "icon": null, "benefits": [ { "name": "5% Discount on every order", "benefit_type": "percentage", "benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 5 } } ], "created_at": "2025-09-12T15:44:44+00:00" }, { "id": "8ac40d96-4b4e-5358-9444-3f16bab9bf39", "name": "Gold", "threshold_value": 1000, "multiplier": 2.0, "icon": { "source": "custom", "slug": null, "id": "12", "url": "https://example.com/gold-icon.png" }, "benefits": [ { "name": "10% Discount on every order", "benefit_type": "percentage", "benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 10 } }, { "name": "Free Shipping", "benefit_type": "free_shipping", "benefit_value": { "method": "automatic", "coupon_prefix": "VIPSHIP", "min_requirement": { "type": "none" } } } ], "created_at": "2025-09-12T15:44:44+00:00" } ] } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # List earning rules Source: https://docs.yuko.so/developer/api/list-ways-to-earn GET /public/earning-rules Retrieves a paginated list of active earning rules (Ways to earn) for your organisation. Results are sorted by `created_at`, newest first. Only active rules are returned. Requires the `read:earning_rules` scope. See [Scopes](/developer/api/scopes). ## Query parameters The number of results per page. Values above `100` are treated as `100`. The page number to retrieve. See [Classic pagination](/developer/api/classic-pagination). ## Response The earning rules on this page. Unique UUID identifier for the earning rule. The display name of the earning rule. A short description shown to customers. Currently always `null`. The API doesn't expose the earn rule's trigger (purchase, signup and so on); use `name` and `earning_rule` to identify the rule. How points are calculated when the rule triggers. Keys vary by rule type. Common keys: * `type`: what the rule awards, for example `points`. * `method`: `fixed` (a set amount each time) or `increment` (an amount per unit of spend, purchase rules only). * `earn_value`: the points awarded. * `earn_from_amount`: for `increment`, the spend amount that earns `earn_value` points. * `is_expire_enabled`, `expire_after`, `expire_period`: points expiry settings, if turned on. * `url`: for social follow/like rules, the handle or page the customer is asked to visit. Optional conditions that limit when the rule applies, such as product, collection or customer restrictions. Whether this earning rule is currently active. Only active rules are returned, so this is always `true`. Currently always `null`. Currently always `null`. When the earning rule was created (ISO 8601). Pagination details. See [Classic pagination](/developer/api/classic-pagination). The page returned. The number of records per page. The total number of records. The number of the last page. `true` if there are more pages after this one. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:earning_rules`. | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/earning-rules?per_page=20" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const params = new URLSearchParams({ per_page: 20 }); const response = await fetch( `https://api.yukoapp.com/api/v1/public/earning-rules?${params}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $query = http_build_query(["per_page" => 20]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/earning-rules?{$query}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": [ { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "name": "Place an order", "description": "Earn 5 points for every $1 spent.", "campaign_type": null, "earning_rule": { "type": "points", "method": "increment", "earn_value": 5, "earn_from_amount": 1 }, "conditions": null, "is_active": true, "starts_at": null, "ends_at": null, "created_at": "2026-01-10T09:00:00+00:00" }, { "id": "b2c3d4e5-f6a7-8901-bcde-f01234567890", "name": "Sign up", "description": "Earn 200 points when you create an account.", "campaign_type": null, "earning_rule": { "type": "points", "method": "fixed", "earn_value": 200 }, "conditions": null, "is_active": true, "starts_at": null, "ends_at": null, "created_at": "2026-01-10T09:00:00+00:00" } ], "meta": { "pagination": { "current_page": 1, "per_page": 20, "total": 2, "last_page": 1, "has_more": false } } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Rate Limits Source: https://docs.yuko.so/developer/api/rate-limits How many requests each Yuko API key can make, and how to handle 429 responses. To ensure platform stability and efficient processing for everyone, all of our API endpoints are rate limited. ## Limit Each API key can make up to 10 requests per second. Once this limit is reached, further requests return an `HTTP 429 - Too Many Requests` error. ## Rate limit headers Every response includes `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers. A `429` response also includes a `Retry-After` header with the number of seconds to wait, and its body is: ```json 429 theme={null} { "message": "Too Many Attempts." } ``` ## Staying within the limit After one second has elapsed, the key's limit resets and additional requests respond normally. Use techniques like caching, limiting the number of requests you make, and retries with backoff to stay within the limit. # Redeem a reward Source: https://docs.yuko.so/developer/api/redeem-reward POST /public/customers/rewards/redeem Exchanges a customer's loyalty points for a reward and returns the generated discount code. Deducts the required points using FIFO logic, generates a coupon or discount code on the connected platform (for example Shopify), and returns the code to present to the customer. Store credit rewards are added to the customer's Shopify store credit balance instead of returning a code. Requires the `write:rewards` scope. See [Scopes](/developer/api/scopes). ## Body parameters The platform customer ID, for example the Shopify customer ID. The UUID of the reward to redeem. Get it from the `rewards[].id` field in the [Get redeemable rewards](/developer/api/get-redeemable-rewards) response. ## Response Returns `201 Created`. The generated coupon or discount code to apply at checkout. `null` for store credit rewards, which are added to the customer's Shopify store credit balance instead. The number of points deducted from the customer's balance. The type of reward that was redeemed. One of `fixed`, `percentage`, `free_shipping`, `free_product`, `store_credit`, `pos_fixed`, `pos_percentage`. The discount amount or percentage associated with the coupon. `0` when the reward type has no discount value, including store credit rewards. The expiry date of the generated coupon. `null` if the reward has no expiry or is a store credit reward. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `write:rewards`. | | `404` | `not_found` | No customer matches `customer_id` (`Customer not found`). | | `422` | `validation_error` | A body parameter is missing or invalid. | | `422` | `redemption_failed` | Loyalty is turned off for the store (`Loyalty not enabled`). | | `422` | `redemption_failed` | The customer is banned (`Customer banned`). | | `422` | `redemption_failed` | The reward doesn't exist or is inactive (`Reward not found or inactive`). | | `422` | `redemption_failed` | The customer doesn't have enough points (`Insufficient points balance`). | | `422` | `redemption_failed` | The discount or store credit can't be created on the platform, for example `Failed to generate platform coupon`. | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeem" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "customer_id": "9049402769586", "reward_id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5" }' ``` ```javascript JavaScript theme={null} const response = await fetch( "https://api.yukoapp.com/api/v1/public/customers/rewards/redeem", { method: "POST", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Content-Type": "application/json", }, body: JSON.stringify({ customer_id: "9049402769586", reward_id: "90424fa7-e8a9-4ef4-b43a-72c9b2028db5", }), } ); const data = await response.json(); ``` ```php PHP theme={null} $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/rewards/redeem"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ "customer_id" => "9049402769586", "reward_id" => "90424fa7-e8a9-4ef4-b43a-72c9b2028db5", ])); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Content-Type: application/json", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 201 theme={null} { "data": { "coupon_code": "YUKO-TVJ-BL1", "points_spent": 500, "reward_type": "fixed", "discount_value": 5, "expires_at": "2026-06-01T00:00:00+00:00" } } ``` ```json 422 (insufficient points) theme={null} { "error": { "code": "redemption_failed", "message": "Insufficient points balance" } } ``` ```json 422 (reward not found or inactive) theme={null} { "error": { "code": "redemption_failed", "message": "Reward not found or inactive" } } ``` ```json 422 (validation error) theme={null} { "error": { "code": "validation_error", "message": "The reward id field is required.", "details": { "reward_id": ["The reward id field is required."] } } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Retrieve a customer Source: https://docs.yuko.so/developer/api/retrieve-a-customer GET /public/customers/{id} Retrieves a single customer by their platform customer ID. The customer is enriched with their current VIP tier and loyalty membership status. To fetch many customers at once, use [List customers](/developer/api/list-customers). Requires the `read:customers` scope. See [Scopes](/developer/api/scopes). ## Path parameters The platform customer ID (for example, the Shopify customer ID). ## Response The customer. Has the properties of the [Customer object](/customer-identity-object), plus `tier` and `membership`. Yuko's unique identifier for the customer. The customer's first name. The customer's last name. The customer's email address. The customer's phone number. The ecommerce platform the customer was synced from, for example `shopify`. The customer's unique identifier in the external platform. `member` for active loyalty members, or `disabled` if the customer is banned from the loyalty program. The customer's birthday in `YYYY-MM-DD` format, if collected. The customer's referral code. `null` if the customer has no referral code yet. The customer's referral link, built from the referral landing page URL plus `?ref=`. `null` if there's no referral code or no landing page URL is set. The customer's loyalty points summary. Current redeemable points balance. Always `0` for customers who are banned or excluded from the loyalty program by a customer tag. Total points ever earned. Total points redeemed. The customer's current VIP tier. `null` if the customer hasn't reached a tier or VIP tiers are turned off. Has the same fields as a tier in [List VIP tiers](/developer/api/list-vip-tiers), including `icon`, `benefits` and `created_at`. The tier's unique identifier. The tier's name. The qualifying value needed to reach the tier. The tier's multiplier. Loyalty membership summary. Always `active`. When the customer was created in Yuko (same as `created_at`). When the customer was created in Yuko (ISO 8601). When the customer was last updated in Yuko (ISO 8601). ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:customers`. | | `404` | `not_found` | No customer matches `id`. Message: "Customer not found". | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/9049402769586" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const customerId = "9049402769586"; const response = await fetch( `https://api.yukoapp.com/api/v1/public/customers/${customerId}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $customerId = "9049402769586"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/{$customerId}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": { "id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "first_name": "Jane", "last_name": "Smith", "email": "jane.smith@example.com", "phone": "+14155552671", "platform": "shopify", "platform_customer_id": "9049402769586", "state": "member", "date_of_birth": "1990-04-12", "referral_code": "JANE10", "referral_url": "https://example.com/pages/refer?ref=JANE10", "points": { "balance": 350, "earned": 500, "redeemed": 150 }, "tier": { "id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "name": "Silver", "threshold_value": 500, "multiplier": 1.5, "icon": null, "benefits": [], "created_at": "2025-09-12T15:44:44+00:00" }, "membership": { "status": "active", "member_since": "2024-06-01T10:00:00+00:00" }, "created_at": "2024-06-01T10:00:00+00:00", "updated_at": "2026-02-15T08:30:00+00:00" } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ```json 401 theme={null} { "error": { "code": "invalid_token", "message": "Invalid or revoked API token" } } ``` # Retrieve a reward Source: https://docs.yuko.so/developer/api/retrieve-a-reward GET /public/rewards/{id} Retrieves a single reward from your reward catalogue by its UUID. Unlike [List rewards](/developer/api/list-rewards), this endpoint also returns inactive rewards and Shopify POS rewards. Requires the `read:rewards` scope. See [Scopes](/developer/api/scopes). ## Path parameters The UUID of the reward, as returned in the `id` field of [List rewards](/developer/api/list-rewards). ## Response Unique identifier for the reward. The display name of the reward. A description of the reward shown to customers. The type of reward issued to the customer. One of `fixed`, `percentage`, `free_shipping`, `free_product`, `store_credit`, `pos_fixed`, `pos_percentage`. The number of points required to redeem this reward. The rule configuration for this reward. Structure varies by `reward_type`. The reward's storefront icon, or `null` if none is set. `default` for a built-in icon, `custom` for an uploaded image. The built-in icon's slug. `null` for custom icons. The uploaded image's ID. `null` for built-in icons. A URL to render the icon (an SVG for built-in icons, the uploaded image for custom icons). Whether this reward is currently active and available for redemption. When the reward was created. When the reward was last updated. ## Errors | Status | Code | When | | :- | :- | :- | | `401` | `missing_token`, `invalid_token` | The API key is missing, wrong or revoked. | | `403` | `insufficient_scope` | The key doesn't have `read:rewards`. | | `404` | `not_found` | No reward matches `id` (`Reward not found`). | | `429` | | The key exceeded the [rate limit](/developer/api/rate-limits). | ```bash cURL theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/rewards/90424fa7-e8a9-4ef4-b43a-72c9b2028db5" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```javascript JavaScript theme={null} const rewardId = "90424fa7-e8a9-4ef4-b43a-72c9b2028db5"; const response = await fetch( `https://api.yukoapp.com/api/v1/public/rewards/${rewardId}`, { method: "GET", headers: { Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, } ); const data = await response.json(); ``` ```php PHP theme={null} $rewardId = "90424fa7-e8a9-4ef4-b43a-72c9b2028db5"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/rewards/{$rewardId}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); ``` ```json 200 theme={null} { "data": { "id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5", "name": "$5 off your next order", "description": "Redeem 500 points for a $5 discount.", "reward_type": "fixed", "points_cost": 500, "reward_rule": { "points_required": 500, "value": 5 }, "icon": { "source": "default", "slug": "gift", "id": null, "url": "https://cdn.example.com/yuko-icons/svg/gift.svg" }, "is_active": true, "created_at": "2025-12-01T09:00:00+00:00", "updated_at": "2025-12-01T09:00:00+00:00" } } ``` ```json 403 theme={null} { "error": { "code": "insufficient_scope", "message": "Your API token does not have the required 'rewards' scope for this action" } } ``` ```json 404 theme={null} { "error": { "code": "not_found", "message": "Reward not found" } } ``` # Scopes Source: https://docs.yuko.so/developer/api/scopes The scopes a Yuko API key can carry and the scope each endpoint requires. Every REST API key carries a list of scopes that controls which endpoints it can call. The merchant sets them when creating the key in **Shopify admin → Apps → Yuko Loyalty → Integrations → REST API**: * **Full Access Key**: the highest access level each scope supports (read and write where available). * **Read-Only Key**: read access for every scope. * **Custom Key**: **No Access**, **Read Access** or **Read/Write Access** per scope. ## Scope format Scopes are stored on the key as `read:` or `write:`, for example `read:rewards` or `write:transactions`. * `read:` allows the scope's read endpoints. * `write:` allows the scope's write endpoints **and** its read endpoints. Write implies read. ## Available scopes | Scope | Label in Yuko | Access levels | What it allows | | :- | :- | :- | :- | | `customers` | Customers | read, write | View customer profiles and points balances | | `orders` | Orders | write | Not used by any endpoint in this reference | | `rewards` | Rewards | read, write | View the reward catalogue and redeem points for rewards | | `transactions` | Transactions | read, write | View points transaction history and manually adjust points | | `activities` | Activities | read | View the customer loyalty activity log | | `tiers` | Tiers | read | View VIP tier configuration and customer tier status | | `earning_rules` | Earning Rules | read | View points earning rules | | `referrals` | Referrals | read | View the referral program configuration and customer referrals | | `points` | Points | read | Estimate the points a cart will earn (checkout integrations) | | `booster_campaigns` | Booster Campaigns | read, write | View active booster campaigns (no write endpoints yet) | ## Endpoints by scope | Endpoint | Required scope | | :- | :- | | [`GET /customers`](/developer/api/list-customers) | `read:customers` | | [`GET /customers/{id}`](/developer/api/retrieve-a-customer) | `read:customers` | | [`GET /customers/balance`](/developer/api/get-customer-balance) | `read:customers` | | [`GET /customers/memberships`](/developer/api/list-memberships) | `read:customers` | | [`GET /customers/tiers`](/developer/api/get-customer-tier) | `read:tiers` | | [`GET /customers/activities`](/developer/api/list-customer-activities) | `read:activities` | | [`GET /customers/referrals`](/developer/api/list-customer-referrals) | `read:referrals` | | [`GET /customers/rewards`](/developer/api/list-customer-rewards) | `read:rewards` | | [`GET /customers/rewards/redeemable`](/developer/api/get-redeemable-rewards) | `read:rewards` | | [`POST /customers/rewards/redeem`](/developer/api/redeem-reward) | `write:rewards` | | [`GET /customers/transactions`](/developer/api/list-points-transactions) | `read:transactions` | | [`POST /customers/transactions`](/developer/api/create-a-points-transaction) | `write:transactions` | | [`GET /rewards`](/developer/api/list-rewards) | `read:rewards` | | [`GET /rewards/{id}`](/developer/api/retrieve-a-reward) | `read:rewards` | | [`GET /tiers`](/developer/api/list-vip-tiers) | `read:tiers` | | [`GET /earning-rules`](/developer/api/list-ways-to-earn) | `read:earning_rules` | | [`GET /referrals/program`](/developer/api/get-referral-program) | `read:referrals` | | [`POST /points/estimate`](/developer/api/checkout-points-estimate) | `read:points` | | [`GET /booster-campaigns`](/developer/api/list-booster-campaigns) | `read:booster_campaigns` | All paths are relative to `https://api.yukoapp.com/api/v1/public`. ## Missing scope errors If the key doesn't have the scope an endpoint needs, the API returns `403 Forbidden`: ```json 403 theme={null} { "error": { "code": "insufficient_scope", "message": "Your API token does not have the required 'rewards' scope for this action" } } ``` To fix it, create a new key with the scope you need (or ask the merchant to), then revoke the old key. A key's scopes can't be changed after it's created. # Loyalty Emails Source: https://docs.yuko.so/emails/loyalty-emails The 11 built-in loyalty emails, covering points earned and redeemed, tier unlocked, expiry reminders, and birthday and anniversary emails, with their default subjects and timing. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Emails Yuko has 11 built-in loyalty emails. They all start **inactive**. Switch on the ones you want in **Loyalty → Emails**, and edit the content in the [Template Editor](/emails/template-editor). | Email | Sent when | Default subject | Timing | | - | - | - | - | | [Points earned](#points-earned) | A customer earns points | You've Got `{{ points_value }}` `{{ points_label }}` | **Days after earned reward** | | [Points redeemed](#points-redeemed) | A customer redeems points for a reward | You unlocked a reward! | **Days after redeemed reward** | | [Tier unlocked](#tier-unlocked) | A customer enters their first VIP tier | You've unlocked a new tier! | **Days after tier changed** | | [Point Expiry Reminder](#point-expiry-reminder) | Points are about to expire | Your `{{ points_label }}` going to expire! | 3 days before expiry | | [Points expired](#points-expired) | Points have expired | Your `{{ points_label }}` have expired | **Days after points expired** | | [Reward expiry reminder](#reward-expiry-reminder) | A redeemed reward is about to expire | Your reward is expiring in `{{days_until_expiry}}` days! | 3 days before expiry | | [Reward expired](#reward-expired) | A redeemed reward has expired | Your reward has expired | **Days after reward expired** | | [Birthday Reminder](#birthday-reminder) | A customer's birthday is coming up | Celebrate Your Birthday With Us! | 3 days before the birthday | | [Birthday award](#birthday-award) | Birthday points are awarded | Happy Birthday, `{{ first_name }}`! | **Days after birthday award** | | [Anniversary Reminder](#anniversary-reminder) | A customer's anniversary is coming up | Celebrate Your Anniversary With Us! | 3 days before the anniversary | | [Anniversary award](#anniversary-award) | Anniversary points are awarded | Happy Anniversary, `{{ first_name }}`! | **Days after anniversary award** | Settings in **bold** are delay fields in the email editor. Set them to **0** to send immediately (the default). The four reminders use a fixed number of days before the date and have no timing field in the editor. ## Points earned **Sent when:** a customer earns points from any [way to earn](/loyalty/ways-to-earn/overview), including points credited by a workflow. **Default subject:** *You've Got `{{ points_value }}` `{{ points_label }}`* **Default message:** Greeting → *"Congratulations! You've earned `{{ points_value }}` `{{ points_label }}` from `{{earn_program_name}}`"* → thank-you line. **Delay:** **Days after earned reward**. **Useful shortcodes:** `{{ first_name }}`, `{{ points_value }}`, `{{ points_label }}`, `{{ earn_program_name }}`, `{{ points_balance }}`, `{{ points_to_next_reward }}`, `{{ redemption_link }}`. **Lead with the number.** "You've Got 50 Points" gets more opens than "Thanks for your order". *** ## Points redeemed **Sent when:** a customer redeems points for a [reward](/loyalty/ways-to-redeem/overview). **Default subject:** *You unlocked a reward!* **Default message:** Greeting → *"You redeemed the following reward `{{ reward_code }}`"* → thank-you line. **Delay:** **Days after redeemed reward**. **Useful shortcodes:** `{{ reward_name }}`, `{{ reward_code }}`, `{{ reward_value }}`, `{{ reward_expire_at }}`, `{{ points_spent }}`, `{{ points_balance }}`. **Put the code front and centre.** Most customers open this email on their phone at checkout. *** ## Tier unlocked **Sent when:** a customer qualifies for a [VIP tier](/vip-tiers/overview) for the first time, moving from no tier into a tier. **Default subject:** *You've unlocked a new tier!* **Default message:** Greeting → *"You've unlocked the following tier `{{ current_tier_name }}`"* → thank-you line. **Delay:** **Days after tier changed**. **Useful shortcodes:** `{{ current_tier_name }}`, `{{ next_tier_name }}`, `{{ points_balance }}`, `{{ total_earned_points }}`. This email doesn't send when a customer moves **up** from one tier to a higher one, or **down**. For those moments, build a [workflow](/workflows/triggers-and-conditions) on the **VIP Tier Upgrade** or **VIP Tier Downgrade** trigger. *** ## Point Expiry Reminder **Sent when:** some of a customer's points are about to expire. It's listed as **Point Expiry Reminder** in the Emails list. **Default subject:** *Your `{{ points_label }}` going to expire!* **Default message:** Greeting → *"Your `{{ points_label }}` balance of `{{ expiring_points }}` will expire in `{{ days_until_expiry }}` days."* **Timing:** 3 days before the points expire. **Useful shortcodes:** `{{ expiring_points }}`, `{{ points_expiry_at }}`, `{{ days_until_expiry }}`, `{{ expiring_points_as_cash }}`, `{{ redemption_link }}`. **Only turn this on if your points expire.** Points expiry is set per earn rule. See [Ways to Earn](/loyalty/ways-to-earn/overview). *** ## Points expired **Sent when:** a customer's points have expired. **Default subject:** *Your `{{ points_label }}` have expired* **Default message:** *"`{{ expired_points }}` `{{ points_label }}` from your account have expired. Your current balance is `{{ points_balance }}` `{{ points_label }}`. Keep shopping to earn more!"* **Delay:** **Days after points expired**. **Useful shortcodes:** `{{ expired_points }}`, `{{ expired_points_as_cash }}`, `{{ points_balance }}`, `{{ points_to_next_reward }}`. *** ## Reward expiry reminder **Sent when:** a reward the customer redeemed (their discount code) is about to expire. **Default subject:** *Your reward is expiring in `{{days_until_expiry}}` days!* **Default message:** Greeting → *"Your reward `{{ reward_code }}` is expiring in `{{days_until_expiry}}` days."* **Timing:** 3 days before the reward expires. **Useful shortcodes:** `{{ reward_name }}`, `{{ reward_code }}`, `{{ reward_value }}`, `{{ reward_expire_at }}`, `{{ days_until_expiry }}`. *** ## Reward expired **Sent when:** a reward the customer redeemed has expired without being used. **Default subject:** *Your reward has expired* **Default message:** *"Your reward `{{ reward_name }}` (`{{ reward_code }}`) has expired. You still have `{{ points_balance }}` points to redeem for a new reward!"* **Delay:** **Days after reward expired**. **Useful shortcodes:** `{{ reward_name }}`, `{{ reward_code }}`, `{{ points_balance }}`, `{{ redemption_link }}`. *** ## Birthday Reminder **Sent when:** a customer's birthday is coming up and your [Birthday](/loyalty/ways-to-earn/birthday) earn rule is active. **Default subject:** *Celebrate Your Birthday With Us!* **Default message:** Greeting → *"As a token of our appreciation, we're offering you `{{ points_value }}` `{{ points_label }}` on `{{birthday_date}}`"*. **Timing:** 3 days before the birthday. **Useful shortcodes:** `{{ points_value }}`, `{{ points_label }}`, `{{ birthday_date }}`, `{{ points_balance }}`. *** ## Birthday award **Sent when:** Yuko awards a customer's birthday points. **Default subject:** *Happy Birthday, `{{ first_name }}`!* **Default message:** *"Happy Birthday! To celebrate, we've added `{{ points_value }}` `{{ points_label }}` to your account."* **Delay:** **Days after birthday award**. **Useful shortcodes:** `{{ points_value }}`, `{{ points_balance }}`, `{{ points_balance_as_cash }}`, `{{ redemption_link }}`. *** ## Anniversary Reminder **Sent when:** a customer's anniversary is coming up and your [Anniversary](/loyalty/ways-to-earn/anniversary) earn rule is active. **Default subject:** *Celebrate Your Anniversary With Us!* **Default message:** Greeting → *"As a token of our appreciation, we're offering you `{{ points_value }}` `{{ points_label }}` on `{{anniversary_date}}`"*. **Timing:** 3 days before the anniversary. **Useful shortcodes:** `{{ points_value }}`, `{{ anniversary_date }}`, `{{ customer_years }}`, `{{ customer_year_label }}`. *** ## Anniversary award **Sent when:** Yuko awards a customer's anniversary points. **Default subject:** *Happy Anniversary, `{{ first_name }}`!* **Default message:** *"Happy `{{ customer_years }}` `{{ customer_year_label }}` with us! To celebrate, we've added `{{ points_value }}` `{{ points_label }}` to your account."* **Delay:** **Days after anniversary award**. **Useful shortcodes:** `{{ customer_years }}`, `{{ customer_year_label }}`, `{{ points_value }}`, `{{ points_balance }}`. ## Best practices **Start with Points earned, Points redeemed and Tier unlocked.** These three cover the moments customers care about most. **Pair reminders with a redemption link.** Add `{{ redemption_link }}` as the CTA URL in expiry reminders so customers can spend their points straight away. **Need different timing or extra steps?** Build a [workflow](/workflows/overview) on the same trigger (for example **Points Expiring Reminder** with a **Days Before** filter) and leave the built-in email off. ## FAQs Not from the email editor. All four built-in reminders go out 3 days before the date (points expiry, reward expiry, birthday or anniversary). For other timing, use a workflow with the matching trigger and a **Days Before** trigger filter. Tier unlocked only sends when a customer enters their first tier. Use a workflow on **VIP Tier Upgrade** for upgrades. Yes. Yuko can only send them to customers with a birthday on file, and only while the Birthday earn rule is active. ## Related Points earned and redeemed, tier unlocked, expiry, birthday and anniversary. Referrer welcome, friend reward unlocked and referrer reward issued. Membership created, upgraded, downgraded and cancelled. Edit content and delays, send a test, or use the Advanced Editor. Every shortcode by group, including redemption links. From name, Reply-To, default From address and your own sending domain. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Membership Emails Source: https://docs.yuko.so/emails/membership-emails The four built-in membership emails, Membership created, upgraded, downgraded and cancelled, with their default subjects and delays. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Membership → Emails Paid [memberships](/memberships/overview) have four built-in emails, one for each change to a member's subscription. They start **inactive**. Switch them on in **Membership → Emails** and edit them in the [Template Editor](/emails/template-editor). | Email | Sent when | Default subject | Delay setting | | - | - | - | - | | [Membership created](#membership-created) | A customer subscribes to a membership for the first time | Welcome to `{{ membership_name }}`, `{{ first_name }}`! | **Days after membership created** | | [Membership upgraded](#membership-upgraded) | A member switches to a higher plan | You've upgraded to `{{ membership_name }}`, `{{ first_name }}`! | **Days after membership upgraded** | | [Membership downgraded](#membership-downgraded) | A member switches to a lower plan | Your membership plan has changed, `{{ first_name }}` | **Days after membership downgraded** | | [Membership cancelled](#membership-cancelled) | A member's subscription is cancelled | Your `{{ membership_name }}` membership has been cancelled, `{{ first_name }}` | **Days after membership cancelled** | Leave the delay at **0** to send immediately. ## Membership created **Sent when:** a new subscription contract is created, meaning the customer has just bought a membership plan. **Default subject:** *Welcome to `{{ membership_name }}`, `{{ first_name }}`!* **Default title:** *Your membership is now active* **Default message:** Welcome → the `{{ membership_name }}` membership is active → overview of the perks → visit your account to explore them. **Useful shortcodes:** `{{ membership_name }}`, `{{ membership_benefits }}`, `{{ benefit_1_name }}`, `{{ membership_price }}`, `{{ billing_interval }}`, `{{ next_billing_date }}`. **Lead with the benefits, not the price.** The member has just paid, so remind them what they get. *** ## Membership upgraded **Sent when:** a member switches to a plan that comes later in your plan order on the [Plans](/memberships/plans) tab. Yuko uses that order, not the price, to decide what counts as an upgrade. **Default subject:** *You've upgraded to `{{ membership_name }}`, `{{ first_name }}`!* **Default title:** *Your membership upgrade is active* **Default message:** The membership is now `{{ membership_name }}` → the new benefits are live today. **Useful shortcodes:** `{{ membership_name }}`, `{{ previous_price }}`, `{{ membership_price }}`, `{{ membership_benefits }}`. *** ## Membership downgraded **Sent when:** a member switches to a plan that comes earlier in your plan order on the [Plans](/memberships/plans) tab. **Default subject:** *Your membership plan has changed, `{{ first_name }}`* **Default title:** *Your membership plan has been updated* **Default message:** The membership has changed to `{{ membership_name }}` → the member keeps that plan's benefits → they can change plan from their account. **Useful shortcodes:** `{{ membership_name }}`, `{{ previous_price }}`, `{{ benefits_lost }}`, `{{ benefits_retained }}`. **Keep the tone neutral.** Spell out what they keep (`{{ benefits_retained }}`) before what they lose. *** ## Membership cancelled **Sent when:** a member's subscription contract is cancelled. **Default subject:** *Your `{{ membership_name }}` membership has been cancelled, `{{ first_name }}`* **Default title:** *Your membership has been cancelled* **Default message:** Confirms the cancellation → benefits are no longer active → thanks them, and they're welcome back anytime. **Useful shortcodes:** `{{ membership_name }}`, `{{ cancellation_reason }}`, `{{ member_since }}`, `{{ subscription_status }}`. **Leave the door open.** Add a CTA URL to your membership page so customers can rejoin in one click. ## Best practices **Use the benefit slots for a clean list.** `{{ benefit_1_name }}` to `{{ benefit_10_name }}` (and the matching `_description` shortcodes) let you lay out benefits exactly how you want. Empty slots print nothing. **Turn on Membership created first.** It's the email every new member gets. ## FAQs There's no built-in email for those. Build a [workflow](/workflows/overview) on the **Membership Paused** or **Membership Reactivated** trigger. From the benefits on the membership [plan](/memberships/plans). Each benefit fills one numbered slot. ## Related Points earned and redeemed, tier unlocked, expiry, birthday and anniversary. Referrer welcome, friend reward unlocked and referrer reward issued. Membership created, upgraded, downgraded and cancelled. Edit content and delays, send a test, or use the Advanced Editor. Every shortcode by group, including redemption links. From name, Reply-To, default From address and your own sending domain. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Emails Source: https://docs.yuko.so/emails/overview Built-in emails Yuko sends when customers earn, redeem, change tier, join referrals or manage a membership. Each module has its own Emails tab. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Emails (also **Referral → Emails** and **Membership → Emails**) ## Introduction Yuko ships with ready-made emails for the key moments in your loyalty, referral and membership programs, such as points earned, a reward redeemed, a new tier or a membership upgrade. Each email has a default subject and message, which you can edit in the [Template Editor](/emails/template-editor). Emails live inside the module they belong to: | Module | Where | Emails | | - | - | - | | Loyalty | **Loyalty → Emails** | 11 emails. See [Loyalty Emails](/emails/loyalty-emails) | | Referral | **Referral → Emails** | 3 emails. See [Referral Emails](/emails/referral-emails) | | Membership | **Membership → Emails** | 4 emails. See [Membership Emails](/emails/membership-emails) | For anything the built-in emails don't cover, such as multi-step sequences, conditions, coupons or WhatsApp messages, build a [Workflow](/workflows/overview). Built-in emails and workflows use the same editor and the same [shortcodes](/emails/shortcodes). ## The Emails list Each module's Emails tab lists its emails with: * **Tabs:** **All**, **Active** and **Inactive**. * **Search** by email name, and an **Email type** filter. * An **on/off toggle** on every row. Turning an email on or off opens an **Activate email** / **Deactivate email** confirmation. * An **Edit** button that opens the email in the editor. * An **Advanced** badge on emails that were last saved in the [Advanced Editor](/emails/template-editor#advanced-editor). Built-in emails start **inactive**. Switch on the ones you want customers to receive. ## Monthly sending limit If your store has a monthly email limit, a banner at the top of the Emails list shows it: *"Your monthly email sending limit is N emails. Contact us to increase the limit."* Click **Contact us** to ask the Yuko team for a higher limit. ## Email analytics Open any email to see its **Stats** next to the preview: * **All**: emails triggered * **Delivered** * **Opened** * **Clicked** Click **View Details** to open **Email Analytics**. It lists every send with its **Subscriber ID**, **Customer**, **Sent At**, **Status**, **Skipped**, **Opened** and **Clicked**. If an email was skipped, hover the info icon next to **Yes** in the **Skipped** column to see why. Click a metric card to filter the table by that status. ## How emails work 1. A customer event happens, for example they earn points from an order. 2. Yuko checks whether the matching email is active. 3. If the email has a delay (for example *Days after earned reward*), Yuko waits that long. 4. Yuko fills in the [shortcodes](/emails/shortcodes) with the customer's data and sends the email from the sender set in [Email Settings](/emails/sender-and-branding). 5. The send is counted in the email's Stats. ## Sender and branding The From name, Reply-To and From address are set once for all emails under **Account → Email Settings**. You can also send from your own domain. See [Email Settings & Custom Domains](/emails/sender-and-branding). The logo comes from **Account → General → Logo**. ## Best practices **Start with the high-value moments.** Points earned, Points redeemed and Tier unlocked are a good first set. **Send yourself a test before going live.** **Send Test Email** goes to your account email, so you can check the layout in a real inbox. **Only turn on expiry emails if you use expiry.** Point Expiry Reminder and Reward expiry reminder only make sense when your earn rules or rewards actually expire. ## FAQs Check that the email is **Active** in the module's Emails tab, and that the customer's address isn't on your [Email Blacklist](/account/email-blacklist). Then open the email's **View Details** analytics. Skipped sends show the reason in a tooltip. Yes. Turn off Yuko's email and build the flow in [Klaviyo](/integrations/klaviyo) or [Omnisend](/integrations/omnisend), using the Yuko events and profile properties those integrations receive. The [Advanced Editor](/emails/template-editor#advanced-editor) lets you design the email visually and import or export MJML. It's available on select plans. In **Account → Email Settings → General**. See [Email Settings & Custom Domains](/emails/sender-and-branding). ## Related Points earned and redeemed, tier unlocked, expiry, birthday and anniversary. Referrer welcome, friend reward unlocked and referrer reward issued. Membership created, upgraded, downgraded and cancelled. Edit content and delays, send a test, or use the Advanced Editor. Every shortcode by group, including redemption links. From name, Reply-To, default From address and your own sending domain. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Referral Emails Source: https://docs.yuko.so/emails/referral-emails The three built-in referral emails, Referrer welcome, Friend reward unlocked and Referrer reward issued, with their default subjects and delays. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Referral → Emails Your [referral program](/referrals/overview) has three built-in emails. They start **inactive**. Switch them on in **Referral → Emails** and edit them in the [Template Editor](/emails/template-editor). | Email | Sent to | Sent when | Default subject | | - | - | - | - | | [Referrer welcome](#referrer-welcome) | The referrer | They join the referral program | Welcome to our referral program | | [Friend reward unlocked](#friend-reward-unlocked) | The referred friend | They claim their friend reward | Your referral discount is ready | | [Referrer reward issued](#referrer-reward-issued) | The referrer | Their reward is issued for a successful referral | Your referral advocate reward is ready | Each email has a delay setting (**Days after Referrer welcome**, **Days after Friend reward unlocked**, **Days after Referrer reward issued**). Leave it at **0** to send immediately. ## Referrer welcome **Sent when:** a customer joins your referral program as a referrer. **Default subject:** *Welcome to our referral program* **Default message:** Greeting → thanks for joining → *"Here is your personal referral link: `{{ referral_link }}`"* → share the link, and when friends complete their first purchase you may earn rewards. **Useful shortcodes:** `{{ first_name }}`, `{{ referral_link }}`, `{{ referral_code }}`, `{{ advocate_name }}`, `{{ expiry }}`. **Make the link the hero.** This email is what gets referrers sharing, so put `{{ referral_link }}` in a button, not just the body text. *** ## Friend reward unlocked **Sent when:** a referred friend claims their friend reward, for example through the [Friend Welcome Popup](/referrals/widgets/friend-welcome-popup). It goes to the **friend**. **Default subject:** *Your referral discount is ready* **Default message:** Greeting → *"You've just unlocked a special discount through a referral. Here is your discount code: `{{ discount_code }}`"* → enter it at checkout. **Useful shortcodes:** `{{ discount_code }}`, `{{ reward_value }}`, `{{ reward_type }}`, `{{ expires_at }}`, `{{ referred_by }}`, `{{ referral_code_used }}`. **Mention who sent them.** `{{ referred_by }}` makes the email feel personal and builds trust with a first-time shopper. *** ## Referrer reward issued **Sent when:** a referrer earns their reward because a friend they referred completed a qualifying order. It goes to the **referrer**. **Default subject:** *Your referral advocate reward is ready* **Default message:** Greeting → *"You've just unlocked a special reward through a referral. Here is your reward code/ value: `{{ discount_code }}`"*. **Useful shortcodes:** `{{ discount_code }}`, `{{ reward_value }}`, `{{ reward_type }}`, `{{ friend_first_name }}`, `{{ total_referrals }}`, `{{ points_balance }}`. **Show their progress.** `{{ total_referrals }}` gives your best referrers a reason to keep sharing. ## Best practices **Turn on all three together.** They cover both sides of the referral loop: the referrer gets their link, the friend gets their code, and the referrer hears when it paid off. **Test with a real referral.** Join as a referrer, open your link in a private window, claim the friend reward and place a test order. This checks all three emails. ## FAQs Not as a separate email. Workflow conditions can't filter on referral count, so the simplest option is to mention the count in Referrer reward issued with `{{ total_referrals }}`. For other follow-ups, build a [workflow](/workflows/overview) on the **Referrer Rewarded** trigger. There's no built-in one, but you can build a workflow on the **Referral Completed** trigger. ## Related Points earned and redeemed, tier unlocked, expiry, birthday and anniversary. Referrer welcome, friend reward unlocked and referrer reward issued. Membership created, upgraded, downgraded and cancelled. Edit content and delays, send a test, or use the Advanced Editor. Every shortcode by group, including redemption links. From name, Reply-To, default From address and your own sending domain. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Email Settings & Custom Domains Source: https://docs.yuko.so/emails/sender-and-branding Set the From name and Reply-To for every Yuko email, choose a default From address, and send from your own verified domain. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Account → Email Settings → General ## Introduction **Email Settings** control who Yuko's emails come from. The settings apply to every email: loyalty, referral and membership emails, and Send Email nodes in workflows. You set them once and don't need to repeat them per template. By default, emails go out from **Yuko's shared email address** with your From name. To send from your own domain (for example `rewards@send.yourstore.com`), turn on **Custom Domain Emails** and verify the domain. The **Email Settings** page has two tabs: * **General**: sender identity, default From address and custom domains (this page). * **Email Blacklist**: addresses that never receive Yuko emails. See [Email Blacklist](/account/email-blacklist). ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). For a custom domain: access to your domain's DNS settings (at your domain registrar or DNS provider). ## Setup guide ### 1. Set your sender identity Go to **Apps → Yuko Loyalty → Account → Email Settings → General**. In **Sender Identity**, set **From Name**, which is *"the default 'From' name for emails"*. Use a name customers recognise, such as your store or rewards program name. Set **Reply Email**, the default Reply-To address. Customer replies go here, so use an inbox your team reads. Click **Save** in the Sender Identity card. Both fields are required. ### 2. Send from your own domain (optional) **Custom Domain Emails** is available on select plans. In the **Custom Domain Emails** card (*"Send emails from your own domain instead of the default Yuko shared email"*), switch the toggle on. The badge changes from **Disabled** to **Enabled** and the **Mail Domains** section appears. Click **Add Domain**, enter the **Domain Name** (for example `send.yourdomain.com`) and click **Create Domain**. Click **View DNS** next to the domain. Yuko lists the **DKIM**, **SPF** and **CNAME** records, each with its **Type**, **Name** and **Value** and a copy button. Add each record at your DNS provider. Back in the DNS dialog, click **Verify Domain**. Each record shows **Verified** or **Unverified**. DNS changes can take a while to propagate. If a record is still unverified, wait and click **Verify Domain** again. Once a domain is verified, the **From Addresses** section appears. Click **Add From Address** and enter a **From Email Address** on your verified domain (for example `rewards@send.yourdomain.com`). Addresses on a verified domain are verified automatically. ### 3. Choose the default From address In **Default Email Addresses**, pick the **Default From Address**: * **Yuko shared email**: the default, which needs no setup. * Any verified From address you added. Click **Save**. Every Yuko email now uses this From address. To go back to the shared address, select **Yuko shared email** and save. ## Logo The logo in your emails comes from **Account → General → Logo** (*"Display logo in emails and other communications"*). In the [Advanced Editor](/emails/template-editor#advanced-editor) you can also place it with the **Logo** block. ## How it works * **From name and Reply-To** from Sender Identity are used on every email. * **From address** is the Default From Address. If none is set, or you delete the address that was the default, Yuko falls back to the shared system address. * **Custom domains** prove to inbox providers that Yuko is allowed to send for your domain (through DKIM and SPF), which helps deliverability and shows your own domain to customers. * **Monthly limit:** if your store has a monthly sending limit, a banner on each module's Emails tab shows it. Contact the Yuko team to raise it. ## Best practices **Use a subdomain for sending,** such as `send.yourdomain.com`. It keeps loyalty email reputation separate from your main domain. **Use a Reply Email someone reads.** Customers reply to points and reward emails with questions. **Avoid `noreply@` From addresses.** A real-looking address like `rewards@` builds more trust. ## FAQs No. Emails send from Yuko's shared address out of the box. A custom domain is optional and is available on select plans. Make sure every DKIM, SPF and CNAME record matches the **Name** and **Value** shown in **View DNS** exactly (use the copy buttons). Some DNS providers add your domain to the end of the name automatically, so check for duplicates. Then wait for DNS to propagate and click **Verify Domain** again. You need at least one verified domain first. Until then, Yuko shows *"No Verified Domains Available"*. The address must also use your verified domain. No. The From name, Reply-To and From address apply to all Yuko emails. Use the **Email Blacklist** tab next to General. See [Email Blacklist](/account/email-blacklist). ## Related Points earned and redeemed, tier unlocked, expiry, birthday and anniversary. Referrer welcome, friend reward unlocked and referrer reward issued. Membership created, upgraded, downgraded and cancelled. Edit content and delays, send a test, or use the Advanced Editor. Every shortcode by group, including redemption links. From name, Reply-To, default From address and your own sending domain. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Shortcodes Reference Source: https://docs.yuko.so/emails/shortcodes Every shortcode you can use in Yuko's loyalty, referral and membership emails, grouped the way the editor shows them. **Where to find this:** Open any email and look at the **Available Template Variables** card in the form editor, or click **Shortcodes** in the Advanced Editor. ## How shortcodes work Shortcodes are placeholders that Yuko replaces with the customer's real data when the email is sent. Wrap the key in double curly braces, for example `{{ first_name }}` or `{{ points_balance }}`. Spaces inside the braces are optional. Each email only supports the shortcodes for its own event. The editor lists exactly the ones you can use, so copy them from there. The tables below show which emails support each shortcode. Shortcodes are rendered with Liquid, so you can also use simple conditions. For example, `{% if current_tier_name == "Gold" %} ... {% endif %}` shows a block only to Gold members. ## Customer Available in every loyalty, referral and membership email. | Shortcode | Label in the editor | | - | - | | `{{ customer_name }}` | Customer Name | | `{{ first_name }}` | First Name | | `{{ last_name }}` | Last Name | | `{{ email }}` | Email | | `{{ phone }}` | Phone | | `{{ address }}` | Address | | `{{ city }}` | City | | `{{ zip }}` | Zip Code | | `{{ country }}` | Country (loyalty emails only) | ## Loyalty: points and balance | Shortcode | Label | Available in | | - | - | - | | `{{ points_label }}` | Points label | Points earned, Point Expiry Reminder, Points expired, Birthday and Anniversary emails | | `{{ points_value }}` | Points value | Points earned, Birthday Reminder, Birthday award, Anniversary Reminder, Anniversary award | | `{{ points_balance }}` | Points Balance | All loyalty emails; Referrer reward issued | | `{{ total_earned_points }}` | Total Earned Points | All loyalty emails | | `{{ total_redeemed_points }}` | Total Redeemed Points | All loyalty emails | | `{{ points_to_next_reward }}` | Points to Next Reward | Points earned, Points redeemed, Point Expiry Reminder, Points expired; Friend reward unlocked | | `{{ total_orders }}` | Total Orders | Points earned, Points redeemed, Tier unlocked, Point Expiry Reminder, Points expired, Birthday and Anniversary emails | | `{{ points_value_as_cash }}` | Points Value as Cash | Points earned, Birthday Reminder, Anniversary Reminder | | `{{ points_balance_as_cash }}` | Points Balance as Cash | Points earned, Points redeemed, Birthday and Anniversary emails; Referrer reward issued | | `{{ earned_points_cash }}` | Earned Points as Cash | Points earned, Points redeemed, Tier unlocked, Point Expiry Reminder, Points expired, Birthday and Anniversary emails | The `*_as_cash` values convert points to money using your points-to-cash rate. ## Loyalty: event details | Shortcode | Label | Available in | | - | - | - | | `{{ earn_program_name }}` | Program Name (the earn rule that awarded the points) | Points earned | | `{{ earn_program_description }}` | Program Description | Points earned | | `{{ expires_at }}` | Expire Date | Points earned | | `{{ order_id }}` / `{{ order_name }}` | Order ID / Order Name | Points earned | | `{{ birthday_date }}` | Birthday date | Points earned, Birthday Reminder, Birthday award | | `{{ anniversary_date }}` | Anniversary date | Anniversary Reminder, Anniversary award | | `{{ customer_years }}` / `{{ customer_year_label }}` | Customer Years / Customer Year Label | Points earned, Tier unlocked, Anniversary Reminder, Anniversary award | | `{{ expiring_points }}` | Expiring Points | Point Expiry Reminder | | `{{ expiring_points_as_cash }}` | Expiring Points as Cash | Point Expiry Reminder | | `{{ points_expiry_at }}` | Expiry Date | Point Expiry Reminder | | `{{ days_until_expiry }}` | Days Until Expiry | Point Expiry Reminder, Reward expiry reminder | | `{{ expired_points }}` | Expired Points | Points expired | | `{{ expired_points_as_cash }}` | Expired Points as Cash | Points expired | | `{{ current_tier_name }}` | Current Tier Name | Tier unlocked | | `{{ next_tier_name }}` | Next Tier Name | Tier unlocked | | `{{ next_tier_threshold }}` | Next Tier Threshold | Tier unlocked | | `{{ current_tier_icon_url }}` | Current Tier Icon | Tier unlocked | | `{{ benefits_unlocked }}` | Benefits Unlocked | Tier unlocked | | `{{ tier_entry_at }}` | Tier Entry At | Tier unlocked | | `{{ retention_expires_at }}` | Retention Expires At | Tier unlocked | | `{{ all_tiers }}` | All Tiers | Tier unlocked | | `{{ progress_toward_next }}` / `{{ progress_percentage }}` | Progress Toward Next / Progress Percentage | Tier unlocked | ## Loyalty: rewards Available in **Points redeemed**, **Reward expiry reminder** and **Reward expired**. | Shortcode | Label | | - | - | | `{{ reward_name }}` | Reward Name | | `{{ reward_description }}` | Reward Description | | `{{ reward_code }}` | Reward Code (the discount code) | | `{{ reward_value }}` | Reward Value | | `{{ reward_type }}` | Reward Type | | `{{ points_spent }}` | Points Spent | | `{{ reward_minimum_purchase }}` | Reward Minimum Purchase | | `{{ reward_minimum_quantity }}` | Reward Minimum Quantity | | `{{ reward_expire_at }}` | Reward Expire Date | | `{{ points_spent_as_cash }}` | Points Spent as Cash (Points redeemed only) | ## Referral | Shortcode | Label | Available in | | - | - | - | | `{{ referral_link }}` | Referral Link | Every loyalty, referral and membership email | | `{{ referral_code }}` | Referral Code | Referrer welcome, Referrer reward issued | | `{{ advocate_name }}` | Advocate Name | Referrer welcome | | `{{ expiry }}` | Expiry | Referrer welcome | | `{{ discount_code }}` | Discount Code | Friend reward unlocked, Referrer reward issued | | `{{ reward_value }}` / `{{ reward_type }}` | Reward Value / Reward Type | Friend reward unlocked, Referrer reward issued | | `{{ reward_value_as_cash }}` | Reward Value as Cash | Friend reward unlocked, Referrer reward issued | | `{{ status }}` / `{{ expires_at }}` | Status / Expires At | Friend reward unlocked, Referrer reward issued | | `{{ referral_code_used }}` | Referral Code Used | Friend reward unlocked | | `{{ friend_email }}` | Friend Email | Friend reward unlocked | | `{{ referred_by }}` | Referred By | Friend reward unlocked | | `{{ reward_currency }}` | Reward Currency | Referrer reward issued | | `{{ referrer_email }}` | Referrer Email | Referrer reward issued | | `{{ friend_first_name }}` | Friend Name | Referrer reward issued | | `{{ total_referrals }}` | Total Referrals | Referrer reward issued | ## Membership Available in **Membership created**, **upgraded**, **downgraded** and **cancelled**. | Shortcode | Label | Notes | | - | - | - | | `{{ membership_name }}` | Membership Name | | | `{{ membership_description }}` | Membership Description | | | `{{ membership_price }}` | Membership Price | | | `{{ billing_interval }}` | Billing Interval | | | `{{ membership_benefits }}` | Benefits | Created and upgraded only | | `{{ previous_price }}` | Previous Price | Upgraded and downgraded only | | `{{ benefits_lost }}` / `{{ benefits_retained }}` | Benefits Lost / Benefits Retained | Downgraded only | | `{{ benefit_1_name }}` … `{{ benefit_10_name }}` | Benefit 1 Name … Benefit 10 Name | One slot per benefit. Empty slots print nothing | | `{{ benefit_1_description }}` … `{{ benefit_10_description }}` | Benefit 1 Description … | | | `{{ subscription_status }}` | Subscription Status | | | `{{ next_billing_date }}` | Next Billing Date | | | `{{ member_since }}` | Member Since | | | `{{ cancellation_reason }}` | Cancellation Reason | Cancelled only | ## Redemption Added to **every** email. | Shortcode | Label | What it does | | - | - | - | | `{{ redemption_link }}` | Redemption Link | A personal, signed link to your store's primary domain. It identifies the customer to Yuko's storefront widgets, so they can see their points and redeem without signing in first. | | `{{ redemption_link_params }}` | Redemption Link Params | Only the query string of that link (starting with `?`), so you can add it to another store URL, such as a collection page. | Use `{{ redemption_link }}` as the CTA URL in points-earned or points-expiring emails so customers can turn points into a reward in one click. ## Best practices **Copy shortcodes from the editor.** The **Available Template Variables** card only lists shortcodes that work in the email you're editing. A shortcode from another email will print nothing. **Plan for empty values.** `{{ first_name }}` is empty when Shopify has no first name, and `{{ next_tier_name }}` is empty for top-tier customers. Write copy that still reads well, or wrap it in a Liquid `{% if %}` block. **Send a test after editing.** Tests use sample data, so you can check the layout without waiting for a real event. ## FAQs No. Use double curly braces: `{{ first_name }}`. Yes. A Send Email node in a [workflow](/workflows/action-nodes#send-email) gets the shortcodes for the workflow's trigger, plus the Redemption group. Not in loyalty, referral or membership emails. Type your store name directly, and use the CTA URL for links. ## Related Points earned and redeemed, tier unlocked, expiry, birthday and anniversary. Referrer welcome, friend reward unlocked and referrer reward issued. Membership created, upgraded, downgraded and cancelled. Edit content and delays, send a test, or use the Advanced Editor. Every shortcode by group, including redemption links. From name, Reply-To, default From address and your own sending domain. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Template Editor Source: https://docs.yuko.so/emails/template-editor Edit an email's subject, message, button and footer in the form editor, set its delay, send a test, or design it visually in the Advanced Editor. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Emails → (any email) → **Edit**. The same editor opens from **Referral → Emails**, **Membership → Emails** and from a **Send Email** node in [Workflows](/workflows/action-nodes#send-email). ## Introduction Every Yuko email opens in a simple **form editor**: you fill in the subject, title, message and footer, and the preview updates beside it. For full control over layout, switch to the **Advanced Editor**, a drag-and-drop email builder (available on select plans). ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). Your sender details are set in **Account → Email Settings**. See [Email Settings & Custom Domains](/emails/sender-and-branding). ## The form editor The left panel holds the email's settings and content fields. The right panel shows **Stats** and a live preview. ### Email fields | Field | What it does | | - | - | | **Email Subject** | The subject line. *"Displayed to customers in their inbox."* | | **Preview Text** | *"Text that appears next to the subject line in inboxes."* | | **Email Title** | The heading at the top of the email. Rich text. | | **Email Message** | The main body. Rich text. | | **Email Footer** | Footer text below the message. Rich text. | | **CTA Button**: **CTA label** / **CTA URL** | An optional button. The label is up to 60 characters. The URL must point to your store's domain, or be a single shortcode such as `{{ redemption_link }}`. Fill in both fields, or leave both blank to hide the button. | | **Unsubscribe Text** | The unsubscribe link text, for example *"Unsubscribe"*. | | **Unsubscribe Description** | Text shown with the unsubscribe link. | You can use [shortcodes](/emails/shortcodes) such as `{{ first_name }}` or `{{ points_balance }}` in the subject, preview text and content fields. The **Available Template Variables** card at the bottom of the panel lists every shortcode for this email. Click the copy icon next to one and paste it into a field. ### Delay settings Most built-in emails have a delay setting at the top of the panel, so you can send the email some days after the event instead of immediately. Enter **0** to send right away. | Email | Setting | | - | - | | Points earned | **Days after earned reward** | | Points redeemed | **Days after redeemed reward** | | Tier unlocked | **Days after tier changed** | | Points expired | **Days after points expired** | | Reward expired | **Days after reward expired** | | Birthday award | **Days after birthday award** | | Anniversary award | **Days after anniversary award** | | Referrer welcome / Friend reward unlocked / Referrer reward issued | **Days after Referrer welcome** (and so on) | | Membership created / upgraded / downgraded / cancelled | **Days after membership created** (and so on) | The four reminder emails (**Point Expiry Reminder**, **Reward expiry reminder**, **Birthday Reminder** and **Anniversary Reminder**) have no delay setting in the editor. They go out a set number of days *before* the date. See [Loyalty Emails](/emails/loyalty-emails) for the defaults. ### Send a test Click **Send Test Email**, then **Send**. The test goes to **your account email** (the address shown in the dialog). You can't choose a different recipient. Test emails use sample data for the shortcodes. ### Save Click **Save** at the top of the page. Saving also stores the delay setting. ## Advanced Editor Click **Advanced Editor** at the top of the form editor to open the drag-and-drop builder. It's **available on select plans**. If your plan doesn't include it, the button shows an upgrade icon. In the Advanced Editor you can: * Drag in layout blocks (one to four columns, mixed columns) and content blocks such as **Text**, **Heading 1–3**, **Button**, **Image**, **Divider**, **Spacer**, **Logo**, **Unsubscribe** and **Coupon**. * Switch between **Desktop** and **Mobile** views, and undo or redo changes. * **Import** MJML (paste it into **MJML Content**) or **Export** the current design as MJML. * **Clear canvas** to start over (this removes all content). * **Preview** the email, **Send Test**, browse **Shortcodes**, open **Analytics** and **Save**. Once you save an email in the Advanced Editor, it shows an **Advanced** badge in the Emails list and opens in the Advanced Editor next time. **Show a workflow coupon in an email.** In a workflow, add a [Coupon node](/workflows/action-nodes#coupon) before the Send Email node. In the Advanced Editor, drag in the **Coupon** block and pick that node's identifier. The customer's unique code appears in the email. ## Best practices **Keep the subject short and specific.** *"You've Got 50 Points"* beats a generic *"An update from our store"*. **Use the preview text.** It's free space next to the subject in most inboxes. **Always send a test** after changing shortcodes. Some values, like `{{ next_tier_name }}`, are empty for customers already in the top tier. **Point the CTA to a page that helps.** Your rewards page or a collection works better than the homepage. ## FAQs No. **Send Test Email** always goes to the email address on your Yuko account. The CTA URL must point to your store's domain (the editor shows which domain under the field). Links to other sites aren't allowed. Leave the field blank to hide the button. Each email has one version. Write it in the language most of your customers use. From **Account → General → Logo** (*"Display logo in emails and other communications"*). In the Advanced Editor you can also place it with the **Logo** block. Not from the email editor. These reminders use a fixed number of days before the date. See [Loyalty Emails](/emails/loyalty-emails). ## Related Points earned and redeemed, tier unlocked, expiry, birthday and anniversary. Referrer welcome, friend reward unlocked and referrer reward issued. Membership created, upgraded, downgraded and cancelled. Edit content and delays, send a test, or use the Advanced Editor. Every shortcode by group, including redemption links. From name, Reply-To, default From address and your own sending domain. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Glossary Source: https://docs.yuko.so/getting-started/glossary Plain-language definitions of the Yuko terms used in this documentation. Keep this page open in a tab. Terms are grouped by the area of Yuko they belong to, and the names match the labels in the app. ## Loyalty **Loyalty program** : The set of rules for how customers earn and spend points in your store. Managed under **Loyalty**, with the tabs **Programs**, **Widgets**, **Emails** and **Settings**. **Points** : The currency customers collect. The display name is set by **Point Label** in **Loyalty → Settings**, with singular and plural forms (for example, *point* and *points*). **Points to Cash Conversion Rate** : What 100 points are worth in your store currency. New stores start at 100 points = \$1. Yuko uses it to show customers what their balance is worth. **Way to Earn** (also: **campaign**, **earning rule**) : An action that awards points, such as *Place an order*, *Sign Up*, *Birthday* or *Write a review*. **Way to Redeem** (also: **reward**) : Something customers can spend points on, such as an amount discount, a free product or store credit. **Customer reward** : A reward issued to a specific customer, such as a discount code generated for them. **Store credit** : A balance customers can spend in your store. It can be a reward, a VIP or membership benefit, or a referral reward. **Activity** : An entry in a customer's history, created whenever points are earned, redeemed, adjusted or expire. **Earning Status** : The order status at which points are credited: Paid, Fulfilled or Delivered. **Expiry** : An optional setting on a Way to Earn or reward that makes points or rewards expire after a set period. **Booster campaign** : A time-limited or always-on campaign that adds extra rewards on top of your Ways to Earn, such as a Multiplier, Spending Goal, **Order Booster**, Streak or Multi-Action Challenge. **Order Booster** : A booster campaign that rewards customers for reaching a number of orders. **One-time campaign** : A single drop of points to a group of customers, sent immediately or scheduled. **Backfill points** : A one-off award of points to customers for paid orders they placed before Yuko was installed. Found under **Loyalty → Settings**. ## Customers **Customers** : The top-level sidebar item where you see every customer's balance, tier and activity, and adjust their points. **Member** : A customer who has taken part in your loyalty program, for example by earning points, getting a reward or making a referral. **Guest** : A customer synced from your store who hasn't taken part in the loyalty program yet. **Excluded** : A customer left out of the loyalty program, either manually with **Exclude from Program** or by an excluded customer tag. **Adjust balance** : Manually adding (**Credit**) or removing (**Debit**) points for a customer, with an **Update reason**. ## VIP **VIP tier** : A level, such as *Bronze*, *Silver* or *Gold*, that customers enter based on points earned, amount spent or order count. Managed under **VIP** in the sidebar. **Default tier** : The entry-level tier. It can't be deleted and its threshold can't be changed. **Default point multiplier** : The multiplier applied to points earned by customers in a tier, for example 2x. **Campaign reward** : A per-tier override for one Way to Earn: a different multiplier, fixed bonus points, or both. **Entry benefits** : Benefits customers receive when they enter a tier, such as discounts, free shipping, free products, bonus points or store credit. **Tier Identifier** : A read-only identifier for a tier. Yuko adds it as a Shopify customer tag and uses it for a Shopify customer segment. **Qualification period** : The window used to measure tier progress: *Lifetime*, *Rolling year* or *Calendar year*. **Retention window** : The time a customer keeps a tier after entering it, even if their activity drops. It never ends for *Lifetime*, ends on December 31 for *Calendar year* (or a year later with **Include the last year**) and 12 months after entry for *Rolling year*. **Tier Reset Options** : What happens when a customer's retention window ends: **Reset After Period End** moves them to the tier they now qualify for, and **No Tier After Reset** removes them from all tiers until they qualify again. ## Referrals **Referrer** (also: **advocate**) : The existing customer who shares a referral link. **Friend** : The new customer who arrives through a referral link. **Referrer Reward** and **Friend Reward** : The rewards given to each side of a successful referral. ## Memberships **Membership plan** : A paid plan that gives customers recurring benefits. Managed under **Membership → Plans**. **Members** : Customers with a membership, listed under **Membership → Members** with statuses such as Active, Paused and Cancelled. **Benefit** : Something a VIP tier or membership plan gives customers, such as a discount, free shipping or store credit. ## Widgets and extensions **Widget** : Any Yuko element shown on your storefront, in checkout or in customer accounts. **Floating Rewards** : The floating rewards button and panel on your storefront, where customers see their points, rewards, tier and ways to earn. **Loyalty Nudges** : A strip pinned to the top or bottom of your storefront pages that opens a loyalty drawer with the customer's points, tier and rewards. **Rewards Landing Page** : A page on your storefront explaining your program, built from Yuko theme blocks. **Yuko App embed** : The theme app embed that loads Yuko on your storefront. It must be on for storefront widgets to work. **App block** : A Yuko block you add to a theme section in the Shopify Theme Editor. **Checkout UI extension** : Yuko blocks inside Shopify Checkout for showing and redeeming points. **Customer account extension** : Yuko blocks and pages inside Shopify's customer accounts. **Shopify POS tile** : The Yuko tile on the Shopify POS smart grid, where staff redeem points and apply loyalty discounts in store. ## Emails **Emails** : The built-in emails Yuko sends for loyalty, referral and membership events, such as *Points earned* or *Tier unlocked*. Each module has its own **Emails** tab. **Shortcode** : A placeholder such as `{{ points_balance }}` that's replaced with real data when the email is sent. **Email Blacklist** : A list of addresses or domains that don't receive Yuko emails. Found under **Account → Email Settings**. ## Workflows **Workflow** : An automation built from nodes that runs when an event happens. **Trigger** : The event that starts a workflow, such as *Earn Points* or *VIP Tier Upgrade*. **Action node** : A node that does something, such as **Send Email**, **Coupon**, **Points Credit** or **Points Debit**. **If / Else** : A node that splits a workflow based on a condition. **Time Delay** : A node that pauses a workflow for a set time. ## Integrations **Integration** : A connection to another app, such as Klaviyo, Omnisend, Shopify Flow or a WhatsApp provider. Managed under **Integrations** in the sidebar. **API key** : A secret token used to authenticate calls to Yuko's REST API. ## Account **Account Settings** : Store-wide settings under **Account**: General, Platforms, Email Settings and Translations. **Translations** : Your translations of Yuko's customer-facing labels and content for each store language. Found under **Account → Translations**. # Quickstart (Shopify) Source: https://docs.yuko.so/getting-started/quickstart Install Yuko, review the program it sets up for you, turn on the storefront widgets and test your first earned points. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Dashboard This quickstart takes you from a fresh install to a live loyalty program. Yuko sets up a working program for you on install, so most of the work is reviewing it and switching on the widgets. By the end you'll have: * Yuko installed, with points worth **100 points = \$1** (in your store currency). * Default Ways to Earn, rewards, VIP tiers and a referral program you've reviewed. * Floating Rewards and the cart widgets showing on your storefront. * A test customer with points from a real order. If you'd rather have someone walk you through this live, [book a free 30-minute setup call](https://cal.com/rameshelamathi/yuko-demo). ## Before you start You have admin access to your Shopify store. Your active theme is an Online Store 2.0 theme. See [Theme compatibility](/getting-started/theme-compatibility). ## Step 1: Install Yuko and enter your contact details Visit [apps.shopify.com/yuko](https://apps.shopify.com/yuko), click **Install** and approve the permissions Yuko requests. Yuko opens a **Set up your loyalty rewards** screen. Enter your **Contact email** and, optionally, a **Phone number**, then click **Get Started**. That's all the onboarding asks for. Yuko sets your points value to **100 points = \$1** and creates a starter program for you. Full details: [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). ## Step 2: Review what Yuko set up for you Yuko creates this starter program on install. Review it and change anything that doesn't fit your store. | Area | What's created | | - | - | | **Ways to Earn** | **Place an order** (1 point per \$1 spent), **Sign Up** (100 points) and **Birthday** (500 points) are on. **Instagram Follow** and **Facebook Like** (100 points each) are created but off. | | **Ways to Redeem** | Three amount discounts: 500 points for $5 off, 1,000 points for $10 off and 2,000 points for \$20 off. | | **VIP Tiers** | **Bronze** (default, 0 points, 1x), **Silver** (1,000 points, 2x) and **Gold** (5,000 points, 3x). | | **Referral program** | $10 off for the referrer and $10 off for the friend. | | **Floating Rewards** | The floating rewards widget is turned on. | | **Branding** | The **Eclipse Black** colour palette. | In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty**. Check that **Loyalty Program Status** is enabled. On the **Programs** tab, open each Way to Earn and reward to adjust points, values and limits. See [Ways to Earn](/loyalty/ways-to-earn/overview) and [Ways to Redeem](/loyalty/ways-to-redeem/overview). On the **Settings** tab, review your **Point Label**, the **Points to Cash Conversion Rate** and when points are earned. See [Program Settings](/loyalty/program-settings). Open **VIP** and **Referral** in the sidebar to review or turn on those programs. See [VIP Tiers](/vip-tiers/overview) and [Referrals](/referrals/overview). The **Set up your programs** checklist on the [Dashboard](/analytics/dashboard) shows which programs are on. ## Step 3: Turn on the storefront widgets On the Dashboard, under **Setup Guide**, click **Activate**. In the Theme Editor, switch on **Yuko App** under **App embeds** and click **Save**. Then click **Refresh status** in Yuko. See [Enable the Yuko App Embed](/installation-and-setup/theme-app-embed). Open your storefront. The Floating Rewards button appears because it's on by default. Customise it under **Loyalty → Widgets**. See [Floating Rewards](/onsite-widgets/floating-launcher). Turn on [Cart Earn](/onsite-widgets/cart-earn) and [Cart Redeem](/onsite-widgets/cart-redeem) under **Loyalty → Widgets** so customers see points and rewards in the cart. ## Step 4: Test with a real order Log in to a customer account on your storefront and place a small real order. Points are credited when the order reaches the status set in **Earning Status** (**Loyalty → Settings**), after any **Holding period** you've set on the **Place an order** rule. Go to **Customers** in the Yuko sidebar, click the test customer and check the points balance and activity. ## What to do next Reward reviews, social follows, newsletter sign-ups and more. Reward your top customers with multipliers and tier benefits. Give customers a way to refer friends and earn. Edit the emails customers receive when they earn, redeem or unlock a tier. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Theme Compatibility & Requirements Source: https://docs.yuko.so/getting-started/theme-compatibility Confirm your Shopify theme and plan can render Yuko's widgets and extensions. Yuko's widgets ship as Shopify **app blocks**, **theme app embeds** and **checkout extensions**. To render them, your store needs to meet a few baseline requirements. ## What you need An **Online Store 2.0** theme (any modern free or paid theme on the Shopify Theme Store). The **Yuko App** embed enabled for your active theme. See [Enable the Yuko App Embed](/installation-and-setup/theme-app-embed). For Checkout widgets: a **Shopify Plus** store. Shopify only allows checkout UI extension blocks on Shopify Plus. For Yuko blocks in account pages: Shopify's **customer accounts** (new customer accounts) enabled. ## Theme requirements ### Online Store 2.0 If your theme is an Online Store 2.0 theme it supports app blocks. Practically every theme published on the Shopify Theme Store in the last few years qualifies. Older custom themes may need to be upgraded by your developer. Quick check: **Online Store → Themes → Customize** on your active theme. Open any section. If you see an **Add block** option that lets you choose from **Apps**, you're on Online Store 2.0. If your theme doesn't expose **Add block** for apps, your theme is vintage (Online Store 1.0). You'll need to upgrade to an Online Store 2.0 theme. Contact support if you need a workaround. ### Cart drawer vs cart page Some themes use a **cart drawer** (slide-out) instead of a full cart page. Yuko's Cart Earn and Cart Redeem widgets support both, but the placement options vary by theme. See each widget's docs for theme-specific placement notes. ## Plan requirements | Surface | Shopify plan needed | | - | - | | Theme widgets (product, cart, account, landing, launcher) | Any paid plan | | Checkout UI Extension (Checkout Earn / Redeem) | Shopify Plus | | Customer Account Extension (blocks in customer accounts) | Any paid plan with Shopify's **customer accounts** enabled | | Shopify Flow connector | Plans where Shopify Flow is available | ## What if my store doesn't qualify * **Older theme** → upgrade to an Online Store 2.0 theme, or contact support. * **Not on Shopify Plus but want points around checkout** → show earned points on the order status page with the [Order Status Earn](/onsite-widgets/order-status-earn) widget (needs Shopify's customer accounts), and let customers redeem in the cart with [Cart Redeem](/onsite-widgets/cart-redeem). * **Legacy customer accounts** → either enable Shopify's customer accounts or use the Yuko [Rewards Landing Page](/onsite-widgets/rewards-landing-page) as the loyalty hub. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Welcome to Yuko Source: https://docs.yuko.so/getting-started/welcome Yuko is a loyalty, VIP tiers, referrals, memberships and workflows app built for Shopify merchants. ## What is Yuko Yuko is a customer retention platform for Shopify. It brings loyalty points, VIP tiers, referrals, paid memberships, email notifications and workflow automation together in one app, with one set of customers and one dashboard. This documentation covers the **Shopify** version of Yuko. ## Install on Shopify Yuko is a public Shopify app, and installation takes a few minutes. Add Yuko to your Shopify store from the Shopify App Store. Already installed? Open Yuko from your **Shopify admin → Apps → Yuko Loyalty**. ## What you can do with Yuko Reward orders, sign-ups, social follows, birthdays and more with points, and let customers redeem them for discounts, free products or store credit. Run limited-time multipliers, spending goals, streaks and challenges on top of your program. Reward your best customers with tier multipliers, per-campaign bonuses and entry benefits. Reward customers and their friends for successful referrals. Sell paid membership plans with recurring benefits. Show points, rewards and VIP status with Floating Rewards, the Rewards Landing Page, cart, checkout and customer account widgets. Let staff redeem points and apply loyalty discounts in your physical store. Send loyalty, referral and membership emails, and automate emails, points and coupons based on customer behaviour. Track loyalty-driven revenue, points, tiers, referrals and retention. Connect Klaviyo, Omnisend, Shopify Flow, WhatsApp providers, Judge.me and more. ## Who Yuko is for * **DTC brands** that want repeat purchases driven by an in-house loyalty program. * **Subscription stores** that need tier-based perks and member-only experiences. * **High-AOV stores** where word-of-mouth and referrals move the needle. * **Marketing teams** that want one tool instead of several for retention and lifecycle email. * **Omnichannel stores** that want the same loyalty program online and in-store with Shopify POS. ## How Yuko fits with Shopify Yuko plugs into your store through: * The **Yuko App** theme app embed and theme blocks for storefront widgets, such as Floating Rewards, product and cart messages and the Rewards Landing Page. * **Checkout UI extensions** for showing and redeeming points in Shopify Checkout. * **Customer account extensions** for points, rewards and memberships in Shopify's customer accounts. * A **Shopify POS** tile for in-store redemption. * **Shopify Flow** triggers and actions, so Yuko events can drive your Flow automations. You don't need to edit theme code. You configure everything in Yuko and add widgets with Shopify's theme editor and extension settings. ## Where to start Install Yuko, review the default program and get your first points earned. A one-page glossary of every term used in this documentation. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Activate the Checkout UI Extension Source: https://docs.yuko.so/installation-and-setup/checkout-ui-extension Add Yuko's checkout app blocks to show points earning and reward redemption inside Shopify Checkout. **Where to find this:** Shopify admin → Settings → Checkout → Customize ## Introduction Yuko's checkout extension adds app blocks to Shopify Checkout. Customers can see the points they'll earn and redeem their points for a discount without leaving checkout. You set the text in Yuko and place the blocks in Shopify's Checkout Editor. ## What problem this solves Shopify Checkout doesn't run theme code or app scripts, so storefront widgets can't appear there. Checkout app blocks are the supported way to keep loyalty visible at the point of purchase. ## Yuko checkout blocks | Block name in the Checkout Editor | Yuko widget | Default position | | - | - | - | | **Yuko Potential points earn** | [Checkout Earn](/onsite-widgets/checkout-earn) | Order summary | | **Yuko Redeem rewards** | [Checkout Redeem](/onsite-widgets/checkout-redeem) | Order summary | | **Yuko Checkout Membership Upsell** | [Checkout Membership Upsell](/memberships/widgets/checkout-membership-upsell) | Order summary | All three use Shopify's `purchase.checkout.block.render` target, so you can move them to any block slot the Checkout Editor offers. Points earned on a placed order are shown on the Order status page in customer accounts, not in checkout. The **Yuko Order status earned points** block is covered in [Customer Account Extension](/installation-and-setup/customer-account-extension). ## When to use * Your store is on **Shopify Plus**. * You want customers to see earnable points and redeem rewards at checkout, not only in the cart. ## Before you start Yuko is installed on your Shopify store. Your store is on **Shopify Plus**. On other plans, the **Checkout Process** group in **Loyalty → Widgets** shows "Available only on Shopify Plus plan" and the checkout widgets can't be turned on. The widget is switched on in **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**. Checkout widgets are available on select Yuko plans. ## Setup guide In your Shopify admin, go to **Settings → Checkout** and click **Customize**. Click **Add app block** in the section where you want the widget and choose the Yuko block for this widget (for example **Yuko Potential points earn** or **Yuko Redeem rewards**). Drag the block to its final position in the checkout and click **Save**. Checkout app blocks are only available on **Shopify Plus**. In Yuko, the Checkout Process widgets show "Available only on Shopify Plus plan" on other Shopify plans. See [Theme compatibility & requirements](/getting-started/theme-compatibility). ## How it works When a customer reaches checkout, Shopify loads the Yuko blocks you placed. Each block reads its text from the matching widget in **Loyalty → Widgets**: * **Yuko Potential points earn** shows how many points the order will earn. * **Yuko Redeem rewards** shows the customer's balance and lets them redeem points or apply an existing reward as a discount. Logged-out customers see a login prompt instead. The checkout blocks don't depend on the [Yuko App embed](/installation-and-setup/theme-app-embed). ### Limitations * Shopify Plus only. * Shopify controls the look of checkout blocks, so there's no Styles tab or Custom CSS for these widgets. You can change the text. ## Best practices **Preview before you publish.** Use the Checkout Editor preview with a test customer who has points to check both blocks. **Keep Redeem near the order summary.** Customers look there for discounts, so they reach for their points before an outside coupon. ## FAQs Confirm Yuko is installed and your store is on Shopify Plus. Click **Add app block** and look for the block names in the table above. Make sure the matching widget is switched on in **Loyalty → Widgets** and your loyalty program is enabled. Yes. Edit the text in **Loyalty → Widgets → Checkout: Earn points** or **Checkout: Redeem points**. ## Next steps The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Activate the Customer Account Extension Source: https://docs.yuko.so/installation-and-setup/customer-account-extension Add Yuko's blocks and loyalty page to Shopify's new customer accounts. **Where to find this:** Shopify admin → Settings → Customer accounts → Customize ## Introduction Yuko adds loyalty to Shopify's **new customer accounts** in two ways: * **Blocks** that you place on the Order status, Orders and Profile pages, such as the customer's points balance or the points earned on an order. * A **full loyalty page**, **Yuko Loyalty account page**, where customers see their points, VIP tier, ways to earn and redeem, referrals and membership. You set the text for each in **Loyalty → Widgets** and place them in Shopify's Customer Accounts editor. ## What problem this solves Customers already go to their account to check orders. Showing their balance and rewards there means they don't have to hunt for a separate loyalty page. ## Yuko customer account surfaces ### Loyalty | Name in the Shopify editor | Shopify target | Yuko widget | | - | - | - | | **Yuko Order status earned points** | `customer-account.order-status.block.render` | [Order Status Earn](/onsite-widgets/order-status-earn) | | **Yuko Order index points display** | `customer-account.order-index.block.render` (Orders page) | [Order List Balance](/onsite-widgets/order-list-balance) | | **Yuko Profile loyalty program** | `customer-account.profile.block.render` | [Customer Profile Balance](/onsite-widgets/customer-profile-balance) | | **Yuko Loyalty account page** (full page, not a block) | `customer-account.page.render` | [Customer Account Page](/onsite-widgets/customer-account-page) | ### Referrals and memberships | Name in the Shopify editor | Where it appears | Docs | | - | - | - | | **Yuko Referral Signup** | Order status page and Thank you page | [Post-Purchase Widget](/referrals/widgets/post-purchase) | | **Yuko Profile membership management** | Profile page and Orders page | [Profile Membership](/memberships/widgets/profile-membership) | | **Yuko Order Manage Membership Action** | Order action menu | [Memberships overview](/memberships/overview) | ## When to use * You've turned on Shopify's **new customer accounts**. * You want customers to see loyalty where they manage their orders and profile. ## Before you start Yuko is installed on your Shopify store. **New customer accounts** are turned on in **Shopify admin → Settings → Customer accounts**. Legacy (classic) customer accounts can't show these extensions. The matching widget is switched on in **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets** (Post-Purchase group). The Customer Account Page is available on select Yuko plans. ## Setup guide ### Add a block In your Shopify admin, go to **Settings → Customer accounts** and click **Customize**. Use the page selector at the top to open the page where the block should appear (Order status, Orders, or Profile). Click **Add app block** and choose the Yuko block for this widget (for example **Yuko Order status earned points**, **Yuko Order index points display** or **Yuko Profile loyalty program**). Position the block where customers will see it and click **Save**. Customer account blocks only work with Shopify's **new customer accounts**. Check that they're turned on in **Settings → Customer accounts**. ### Add the loyalty page **Yuko Loyalty account page** is a full page, so you don't drop it into a block slot. Switch on **Loyalty Rewards: Customer Account Page** in **Loyalty → Widgets**, then add a link to the page in your customer account menu in Shopify's navigation settings so customers can open it. See [Customer Account Page](/onsite-widgets/customer-account-page) for the content settings. ## How it works When a logged-in customer opens their account, Shopify loads the Yuko blocks and page you added. They read the customer's points, tier and rewards from Yuko and the text from the matching widget in **Loyalty → Widgets**. These surfaces don't depend on the [Yuko App embed](/installation-and-setup/theme-app-embed). Shopify renders them, not your theme. ### Limitations * New customer accounts only. * Shopify controls the look of customer account extensions. You can change the text in Yuko but not the styling. ## Best practices **Add the Profile and Orders blocks together** so customers see their balance wherever they land in their account. **Use the Rewards Landing Page for logged-out shoppers.** Customer account surfaces only reach customers who are signed in. See [Rewards Landing Page](/onsite-widgets/rewards-landing-page). ## FAQs No. Turn on new customer accounts, or use storefront widgets such as [Floating Rewards](/onsite-widgets/floating-launcher) and the [Rewards Landing Page](/onsite-widgets/rewards-landing-page). Confirm Yuko is installed and new customer accounts are turned on. Open the page the block belongs to (Order status, Orders or Profile), click **Add app block**, and look for the names in the tables above. Check that the matching widget is switched on in **Loyalty → Widgets** and that you're testing as a signed-in customer. ## Next steps The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Install Yuko on Shopify Source: https://docs.yuko.so/installation-and-setup/install-on-shopify Install the Yuko app on your Shopify store, approve its permissions and complete the first setup steps. **Where to find this:** [apps.shopify.com/yuko](https://apps.shopify.com/yuko) ## Introduction Yuko is a public Shopify app. Install it from the Shopify App Store, approve its permissions, and it opens inside your Shopify admin under **Apps → Yuko Loyalty**. ## What problem this solves Yuko installs through Shopify's standard app flow. Storefront widgets load through a theme app embed and Shopify extensions, so you don't need to edit theme code. ## When to use * You're setting up Yuko for the first time. * You're reinstalling Yuko after uninstalling it. ## Before you start You're the store owner, or a staff member with permission to install apps. ## Setup guide Visit [apps.shopify.com/yuko](https://apps.shopify.com/yuko) and click **Install**. Shopify lists the access Yuko needs, including customers, orders, products, discounts, themes and store credit. Review it and click **Install**. Yuko opens on **Set up your loyalty rewards**. Enter your **Contact email** (and optionally a **Phone number**) and click **Get Started**. On the **Dashboard**, the Setup Guide walks you through enabling the Yuko theme app embed. In **Loyalty → Programs**, the **Quick Start** checklist covers the steps to get your loyalty program running. Turn on the **Yuko App** embed in your theme so storefront widgets can load. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## How it works When you install Yuko, Shopify grants it access to your store. Yuko uses that access to: * Read orders and customers so it can award points. * Create discount codes and store credit when customers redeem rewards. * Listen for Shopify events such as new orders, fulfillments, refunds and cancellations. * Make its theme app embed, theme blocks, checkout blocks and customer account extensions available in your Shopify editors. ### Limitations * Headless storefronts (Hydrogen or custom) can't use the theme app embed or theme blocks. Use the [REST API](/integrations/rest-api) instead. ## Best practices **Open Yuko from your Shopify admin.** Go to **Apps → Yuko Loyalty**. The app runs inside Shopify. **Don't uninstall to start over.** To clear test data, use **Reset customer activities** in [Loyalty → Settings](/loyalty/program-settings). ## FAQs Shopify cancels the install. Start again from the App Store listing and approve the permissions. No. Turn on the **Yuko App** embed and add Yuko blocks in the Theme Editor. Open **Shopify admin → Settings → Apps**, find Yuko, and click **Uninstall**. This removes Yuko's access to your store. ## Next steps Required for storefront widgets. Set up your first earn rule and reward. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Enable the Yuko App Embed Source: https://docs.yuko.so/installation-and-setup/theme-app-embed Turn on the "Yuko App" app embed so Yuko's storefront widgets can load on your Shopify theme. **Where to find this:** Shopify admin → Online Store → Themes → Customize → App embeds → Yuko App ## Introduction Yuko adds one app embed to your theme, called **Yuko App**. It loads Yuko's storefront script and styles on every page of your online store. The floating and pinned widgets render directly through it, and every Yuko theme block gets its content from it. ## What problem this solves You don't need to edit theme code. One toggle in the Theme Editor turns Yuko's storefront runtime on or off. ## What depends on the embed | Surface | Needs the Yuko App embed? | | - | - | | [Floating Rewards](/onsite-widgets/floating-launcher) | Yes. It renders through the embed, so you don't add a block. | | [Loyalty Nudges](/onsite-widgets/loyalty-nudges) | Yes. It renders through the embed, so you don't add a block. | | [Cart Earn](/onsite-widgets/cart-earn) and [Cart Redeem](/onsite-widgets/cart-redeem) messages | Yes. With the embed on, they can be placed in the cart automatically, or with the **Yuko: Cart Earn Message** / **Yuko: Cart Redeem Message** blocks. | | [Product Page Earn](/onsite-widgets/product-page-earn) (**Yuko:Product Earn Message** block) | Yes. The block is an empty container that the embed's script fills. | | [Rewards Landing Page](/onsite-widgets/rewards-landing-page) blocks | Yes. The earn, redeem, VIP and membership content is loaded by the embed's script. | | Referral and membership theme blocks such as **Yuko: Referral Signup** and **Yuko: Member Cart Upsell** | Yes. Their content is filled by the embed's script. | | [Checkout widgets](/installation-and-setup/checkout-ui-extension) | No. Shopify renders them in checkout. | | [Customer account blocks and the account page](/installation-and-setup/customer-account-extension) | No. Shopify renders them in customer accounts. | ## When to use * Always enable the embed on your published theme. * Enable it on any unpublished theme you're using to preview or test widgets. ## Before you start Yuko is installed on your Shopify store. You know which theme is published, plus any theme you're preparing to publish. ## Setup guide In your Shopify admin, go to **Online Store → Themes**, find your theme, and click **Customize**. In the Theme Editor's left sidebar, click the **App embeds** icon. Find **Yuko App** in the list and switch it on. Click **Save** in the top right. You can also start from inside Yuko. On the **Dashboard**, the Setup Guide item **Enable Yuko Theme App Extension** has an **Activate** button that opens the Theme Editor's App embeds with **Yuko App** switched on, ready for you to save. Click **Refresh status** once you've saved. The Cart Earn and Cart Redeem widget pages show an **Enable Theme Extension** button while the embed is off. ## How it works With the embed on, Shopify adds Yuko's script and stylesheet to every storefront page. The script: * Reads your widget settings from Yuko and the logged-in customer from Shopify. * Renders Floating Rewards and Loyalty Nudges if they're enabled in **Loyalty → Widgets**. * Fills every Yuko theme block it finds on the page. * Inserts the cart messages into the cart automatically, using your theme's cart area or the **Custom placement** selector you set on the widget. A widget appears only when it's also switched on in **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**. ### Limitations * The embed is per theme. Turning it on for one theme doesn't turn it on for your other themes. * App embeds work on any theme, but theme **blocks** (product, cart and landing page) need an Online Store 2.0 theme that supports app blocks. ## Best practices **Check the embed whenever you publish a new theme.** A newly published theme that never had the embed turned on is the most common cause of missing widgets. **Turn it on before you add blocks.** Blocks added without the embed show up in the editor but stay empty on the storefront. ## FAQs The embed is per theme. Make sure **Yuko App** is on in the **published** theme, not just the one you previewed. The embed itself loads on every page. Control where widgets appear from each widget: add theme blocks only to the templates you want, and use the visibility settings on [Floating Rewards](/onsite-widgets/floating-launcher) and [Loyalty Nudges](/onsite-widgets/loyalty-nudges). No. Those are Shopify extensions that you add in the Checkout and Customer Accounts editors. ## Next steps The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Verify Your Setup Source: https://docs.yuko.so/installation-and-setup/verify-setup A short checklist to confirm Yuko is installed correctly and rendering on your live storefront. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Dashboard ## Introduction Run through this checklist after installing Yuko, and again after any big change such as publishing a new theme or switching to new customer accounts. Each check takes a moment and catches the most common reasons a widget doesn't show. ## What problem this solves Most "widget not showing" problems come from one of three things: the **Yuko App** embed is off on the published theme, the widget is switched off in Yuko, or the block was never added in the Shopify editor. This checklist covers all three. ## When to use * Right after installation. * After publishing a new theme. * After turning on new customer accounts or adding checkout blocks. * Before launching a big loyalty campaign. ## Verification checklist Open **Apps → Yuko Loyalty → Loyalty → Programs** and check that **Loyalty Program Status** shows the program as enabled. On the **Dashboard**, the Setup Guide item **Enable Yuko Theme App Extension** should be complete. Click **Refresh status** if you've just turned it on. You can also check in the Theme Editor of your **published** theme under **App embeds → Yuko App**. See [Theme App Embed](/installation-and-setup/theme-app-embed). In **Loyalty → Programs**, make sure at least one way to earn (for example **Place an order**) and one way to redeem are active. Open **Loyalty → Widgets** and check that each widget you want is switched on. Theme blocks (product, cart, landing page) go in the Theme Editor. Checkout blocks go in the Checkout Editor. Customer account blocks go in the Customer Accounts editor. See [Checkout UI Extension](/installation-and-setup/checkout-ui-extension) and [Customer Account Extension](/installation-and-setup/customer-account-extension). Open your store in a private window. Check that Floating Rewards appears, then log in as a test customer and add a product to the cart to see the cart messages. Complete a low-value order as the test customer. Once it reaches the **Earning Status** set in [Loyalty → Settings](/loyalty/program-settings) (Paid, Fulfilled or Delivered), open the customer in **Customers** and check that the points were added. ## Common issues 1. Check that **Yuko App** is on in the **published** theme, not only a preview theme. 2. Check that the widget is switched on in **Loyalty → Widgets**. 3. For theme blocks, check that the block was added to that template in the Theme Editor. 4. For Floating Rewards and Loyalty Nudges, check their visibility settings (device and page rules). 5. Hard-refresh the page. 1. Has the order reached the **Earning Status** set in Loyalty → Settings? Points aren't added before then. 2. Does the Place an order rule have a holding period? Points are held until it ends. 3. Is the customer excluded, for example by a customer tag excluded in Loyalty → Settings or in the earn rule? 4. Open the customer in **Customers** to see their activity. 1. Checkout blocks need **Shopify Plus**. 2. Check that the block was added in the Checkout Editor and saved. 3. Check that **Checkout: Earn points** or **Checkout: Redeem points** is switched on in Loyalty → Widgets. 1. Check that new customer accounts are turned on in Shopify. 2. Check that the Yuko block was added in the Customer Accounts editor, or that the Yuko Loyalty account page is linked from your customer account menu. 3. Sign out and back in to refresh the session. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # AISensy Source: https://docs.yuko.so/integrations/aisensy Connect AISensy as your WhatsApp Business API provider — used by the WhatsApp Workflow node to send template messages on loyalty events. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → AISensy ## Introduction [AISensy](https://www.aisensy.com) is an India-headquartered WhatsApp Business API platform popular with high-volume Shopify stores in India and Southeast Asia. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send AISensy campaign messages from any workflow — points earned, reward redeemed, tier upgraded, points about to expire, and so on. For the provider-agnostic overview of how Yuko's WhatsApp integration works, see [WhatsApp](/integrations/whatsapp). ## When to use AISensy * You operate primarily in India or SEA and want a local Business Solution Provider. * You send high transactional volume and want competitive per-message pricing. * You already run AISensy campaigns and want loyalty events to trigger the same approved templates. ## Before you start You have an active AISensy account with WhatsApp Business API. You have at least one **approved** AISensy campaign / template. You know your AISensy API endpoint URL (typically `https://backend.aisensy.com/campaign/t1/api/v2`). ## Connect AISensy to Yuko Log in to your AISensy dashboard and copy your API key. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations → AISensy**. Paste the key into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **AISensy** card from the provider list. ## Configure the AISensy step in a workflow When you add a WhatsApp node and pick AISensy, the node exposes the fields AISensy's API expects: | Field | What it is | Example | | - | - | - | | **Endpoint URL** | AISensy's campaign API endpoint | `https://backend.aisensy.com/campaign/t1/api/v2` | | **Campaign Name** | The name of the approved AISensy campaign to trigger | `loyalty_tier_upgrade` | | **Source** | Optional source identifier passed back to AISensy analytics | `yuko_workflow` | | **Template Parameter Count** | How many variables the template expects (1–10) | `3` | | **Template Parameters** | One value per variable — supports [shortcodes](/workflows/whatsapp-node#shortcodes) | `{{first_name}}`, `{{current_tier_name}}`, `{{points_balance}}` | | **Tags** | Optional comma-separated tags for AISensy reporting | `loyalty, tier_change` | | **Attributes** | Optional JSON object of custom attributes | `{"segment": "vip"}` | The **Campaign Name** must match the campaign name in your AISensy dashboard exactly — it's case-sensitive. A typo here is the most common reason an AISensy step fails silently. ## Example use case **Diamond tier welcome** 1. Create an approved AISensy campaign called `loyalty_diamond_welcome` with three variables: customer name, points balance, exclusive perk. 2. In Yuko Workflows, build: **Trigger: VIP Tier Entry** → **If / Else** (tier is Diamond) → **WhatsApp (AISensy)**. 3. Set Campaign Name = `loyalty_diamond_welcome`, Parameter Count = `3`, Parameters = `{{first_name}}`, `{{points_balance}}`, `Free shipping on every order`. 4. Activate. The next customer to hit Diamond gets the message within seconds. ## Limitations * **Approved campaigns only.** AISensy enforces template approval; an un-approved campaign name will fail at send time. * **No template authoring inside Yuko.** Create and edit templates in the AISensy dashboard. * **No delivery status webhook.** Yuko logs the node action as pending / completed / failed based on the AISensy API response, not on delivered / read events. ## FAQs 1. Is the campaign name spelled exactly as in AISensy? 2. Is the campaign approved? 3. Does the customer have a valid phone number in Shopify? 4. Does parameter count match the template's variable count? Yes — use one WhatsApp node per campaign. Each node points to one campaign name. In the AISensy dashboard. Yuko shows aggregate node-level pending / completed / failed counts only. Generate a new key in AISensy, then open **Integrations → AISensy** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # AskEva Source: https://docs.yuko.so/integrations/askeva Connect AskEva as your WhatsApp Business API provider — templates with optional dynamic-URL CTA buttons, from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → AskEva ## Introduction [AskEva](https://askeva.ai) is a WhatsApp Business API platform popular with SEA / Middle East merchants. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send AskEva templates — with or without CTA URL buttons — on any loyalty event. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). ## When to use AskEva * You already use AskEva for WhatsApp on the SEA / MENA side of your business. * You need CTA buttons with **dynamic URL suffixes** — the button URL varies per recipient (e.g., `.../account/{customer_id}`). * You want multiple CTA buttons per template. ## Before you start You have an active AskEva account with WhatsApp Business API. You have at least one **approved** AskEva template. You have your AskEva API key. ## Connect AskEva to Yuko Log in to your AskEva dashboard and copy your API key. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations**, pick the **WhatsApp** category from the left sidebar, and click **AskEva**. Paste the key into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **AskEva** card from the provider list. ## Configure the AskEva step in a workflow | Field | What it is | Example | | - | - | - | | **Template Name** | Approved template name from AskEva (no spaces) | `loyalty_tier_welcome` | | **Language Code** | Template language | `en`, `hi`, `ar` | | **Add CTA Button** *(toggle)* | Enable if the template has dynamic-URL CTA buttons | on | | **CTA Button Count** | Number of CTA buttons on the template (1–2) | `1` | | **CTA Button URL Suffixes** | Dynamic suffix appended to each button's base URL — supports [shortcodes](/workflows/whatsapp-node#shortcodes) | `redeem?code={{reward_code}}` | | **Parameter Count** | Number of body variables (1–10) | `2` | | **Template Parameters** | Body variable values — supports shortcodes | `{{first_name}}`, `{{current_tier_name}}` | **CTA Button URL Suffixes** are just the *dynamic tail* of each button's URL, not the whole URL. The base URL comes from the template itself (defined in the AskEva dashboard). The suffix is what changes per recipient. ### CTA button suffixes vs whole URLs Different from BiteSpeed and DelightChat, which take the full URL as input. AskEva templates already carry the button base URL; Yuko only passes the variable tail. Example: template defines button URL as `https://shop.example.com/`. If you pass suffix `account?email={{email}}`, the customer receives `https://shop.example.com/account?email=jane@example.com`. ## Example use case **VIP tier welcome with a redeem button** 1. In AskEva, approve a template `loyalty_tier_welcome` with two body variables and one CTA button (base URL: `https://shop.example.com/`). Note the language code. 2. In Yuko Workflows, build: **Trigger: VIP Tier Entry** → **Filter: tier = Diamond** → **WhatsApp (AskEva)**. 3. Configure: Template Name = `loyalty_tier_welcome`, Language = `en`, Parameter Count = `2`, Parameters = `{{first_name}}`, `{{current_tier_name}}`. 4. Toggle **Add CTA Button**, Button Count = `1`, Suffix 1 = `account?email={{email}}`. 5. Activate. ## Limitations * **Approved templates only.** AskEva enforces Meta template approval. * **Template name must have no spaces.** Use underscores. * **CTA button base URLs live in the template.** Yuko only supplies the dynamic tail. * **No template authoring inside Yuko.** Edit templates in the AskEva dashboard. * **No per-message delivery status surfaced in Yuko.** Check the AskEva dashboard for delivered / read events. ## FAQs Only if your approved template has dynamic-URL buttons. Plain text templates leave the toggle off. Then you don't need to fill a suffix — the template sends as-is. Enable the toggle only when there's a per-recipient variable. 1. Template name exact match, no spaces. 2. Template approved. 3. Language code matches template. 4. Parameter count matches template body. 5. If CTA is enabled, button count matches template. 6. Customer has a phone number in Shopify. Generate a new key in AskEva, then open **Integrations → AskEva** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # BiteSpeed Source: https://docs.yuko.so/integrations/bitespeed Connect BiteSpeed as your WhatsApp Business API provider — templates with optional CTA URL buttons, from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → BiteSpeed ## Introduction [BiteSpeed](https://bitespeed.co) is a WhatsApp-first marketing platform focused on cart-recovery and lifecycle campaigns for Shopify stores. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send BiteSpeed templates — with or without a click-through CTA URL — on any loyalty event. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). ## When to use BiteSpeed * You already use BiteSpeed for WhatsApp cart recovery / marketing. * You want CTA URL buttons that deep-link customers to a specific page (redemption page, account page, product). * You want to use named template parameters (Name + Value pairs) rather than positional. ## Before you start You have an active BiteSpeed account with WhatsApp Business API. You have at least one **approved** BiteSpeed template. You have your BiteSpeed API key. You know your **Channel ID** — BiteSpeed's identifier for your WhatsApp Business number. ## Connect BiteSpeed to Yuko Log in to your BiteSpeed dashboard, copy your API key, and note the Channel ID for the WhatsApp number you'll send from. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations**, pick the **WhatsApp** category from the left sidebar, and click **BiteSpeed**. Paste the key into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **BiteSpeed** card from the provider list. ## Configure the BiteSpeed step in a workflow | Field | What it is | Example | | - | - | - | | **Channel ID** | BiteSpeed's ID for your WhatsApp Business phone number | provided by BiteSpeed | | **Template ID** | BiteSpeed's internal ID for the approved template | `loyalty_sample_template` | | **Add CTA Button** *(toggle)* | Enable if the template has a click-through button | on | | **CTA URL** | Where the CTA button links to — supports [shortcodes](/workflows/whatsapp-node#shortcodes) | `https://shop.example.com/account?email={{email}}` | | **Params Count** | Number of body variables (1–10) | `3` | | **Template Params** | Name + value pairs — values support shortcodes | `customer_name` = `{{first_name}}` | BiteSpeed template parameters are **named** (Name + Value). The names must match the variable names in the approved template. If your template body says `Hi {{customer_name}}`, the param name is `customer_name`. ### CTA URL supports shortcodes CTA URLs are prime real estate for personalisation. Instead of a static link, use shortcodes to deep-link to something specific to the customer: * `https://shop.example.com/account?email={{email}}` — passes the customer's email to your page. * `https://shop.example.com/redeem?code={{reward_code}}` — opens the redemption page with the coupon pre-filled. ## Example use case **Reward earned — redeem now button** 1. In BiteSpeed, approve a template with two body variables and a CTA URL button. Note the Template ID and Channel ID. 2. In Yuko Workflows, build: **Trigger: Redeem Points** → **WhatsApp (BiteSpeed)**. 3. Configure: Channel ID, Template ID, Params Count = `2`, Params: `customer_name` = `{{first_name}}`, `coupon_code` = `{{reward_code}}`. 4. Toggle **Add CTA Button**, CTA URL = `https://shop.example.com/redeem?code={{reward_code}}`. 5. Activate. ## Limitations * **Approved templates only.** BiteSpeed enforces Meta template approval. * **Named parameters, not positional.** Names in Yuko must match the template's variable names exactly. * **No template authoring inside Yuko.** Edit templates in the BiteSpeed dashboard. * **CTA button URL only.** Reply / phone / other button types aren't authored from Yuko. * **No per-message delivery status surfaced in Yuko.** Check the BiteSpeed dashboard for delivered / read events. ## FAQs BiteSpeed lets you connect multiple WhatsApp Business numbers per account. The Channel ID identifies which one to send from. Get it from the BiteSpeed dashboard where your WhatsApp channels are listed. Yes — use any [shortcode](/workflows/whatsapp-node#shortcodes) inside the URL. It's rendered per-recipient just like body parameters. 1. Template ID exact match. 2. Template approved. 3. Channel ID matches your active WhatsApp channel. 4. Parameter names match the template's variable names. 5. Customer has a phone number in Shopify. Generate a new key in BiteSpeed, then open **Integrations → BiteSpeed** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # BotSpace Source: https://docs.yuko.so/integrations/botspace Connect BotSpace as your WhatsApp Business API provider — template messages via a channel-and-template ID pair, from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → BotSpace ## Introduction [BotSpace](https://www.bot.space) is a WhatsApp Business API platform focused on conversation automation for e-commerce. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send BotSpace templates whenever a loyalty event fires. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). ## When to use BotSpace * You already use BotSpace for WhatsApp support / chat automation. * You want a lightweight setup: template ID + parameters, no extra bells. * You need to route sends across multiple channels (multiple WhatsApp numbers) from the same account. ## Before you start You have an active BotSpace account with WhatsApp Business API. You have at least one **approved** BotSpace template. You have your BotSpace API key. You know your **Channel ID** from the BotSpace dashboard. ## Connect BotSpace to Yuko Log in to your BotSpace dashboard, copy your API key, and note the Channel ID. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations**, pick the **WhatsApp** category from the left sidebar, and click **BotSpace**. Paste the key into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **BotSpace** card from the provider list. ## Configure the BotSpace step in a workflow | Field | What it is | Example | | - | - | - | | **Channel ID** | BotSpace channel ID for the WhatsApp number to send from | `your-channel-id` | | **Template ID** | Approved template identifier from your BotSpace dashboard | `loyalty_points_earned` | | **Template Parameter Count** | Number of body variables (1–10) | `2` | | **Template Parameters** | One value per body variable — supports [shortcodes](/workflows/whatsapp-node#shortcodes) | `{{first_name}}`, `{{points_balance}}` | Template parameters are **positional** — they fill the template's `{{1}}`, `{{2}}`, ... placeholders in order. ## Example use case **Points earned confirmation** 1. In BotSpace, approve a template called `loyalty_points_earned` with two body variables. Note the Channel ID and Template ID. 2. In Yuko Workflows, build: **Trigger: Earn Points** → **WhatsApp (BotSpace)**. 3. Configure: Channel ID, Template ID = `loyalty_points_earned`, Parameter Count = `2`, Parameters = `{{first_name}}`, `{{points_balance}}`. 4. Activate. ## Limitations * **Approved templates only.** BotSpace enforces Meta template approval. * **No template authoring inside Yuko.** Edit templates in the BotSpace dashboard. * **Positional parameters** — order matters, names don't. * **No per-message delivery status surfaced in Yuko.** Check the BotSpace dashboard for delivered / read events. ## FAQs BotSpace supports multiple WhatsApp Business numbers per account. Channel ID identifies which one Yuko should send from. Find it in the BotSpace dashboard alongside your connected WhatsApp channels. Yes — connect BotSpace once, then use a different Channel ID per WhatsApp workflow node. Each node sends from whichever channel you configure. 1. Template ID exact match. 2. Template approved. 3. Channel ID matches your active WhatsApp channel. 4. Parameter count matches the template's variable count. 5. Customer has a phone number in Shopify. Generate a new key in BotSpace, then open **Integrations → BotSpace** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Checkout Boost Source: https://docs.yuko.so/integrations/checkout-boost One-toggle setup that creates a read-only REST API key and a signed key for the Checkout Boost app to render Yuko loyalty inside Shopify checkout. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Checkout Boost ## Introduction The **Checkout Boost** integration is a one-toggle setup that creates a **read-only REST API key** and a **signed key** so the Checkout Boost app can render Yuko loyalty (points balance, rewards) inside the Shopify checkout flow. On the Integrations page, Checkout Boost is listed in the **Shopify Flow** category of the sidebar, but it isn't a Shopify Flow feature. This is different from the general [REST API](/integrations/rest-api) integration — that one is for arbitrary API access. This one is a single-purpose, read-only credential pair named **Checkout Boost**. ## What it does * Enabling it generates a **REST API key** (a `py_` key with read access to every API scope that supports reading) and a **signed key** (a `pysk_` key used to verify request authenticity). * Both keys appear in the **Your Private Keys** popup, with copy and **Download Keys** options. * While the integration is enabled, both keys stay available, masked, in the **API credentials** section of the page, where you can reveal and copy them. * The Checkout Boost extension uses these keys to fetch the current customer's Yuko loyalty state during checkout (points balance, tier, available rewards) and render widgets accordingly. * Disabling revokes both keys immediately. Click **Download Keys** in the popup to keep a copy. If you need the keys later, open the Checkout Boost page while the integration is enabled and copy them from **API credentials**. ## When to use it * You want to surface Yuko loyalty inside Shopify's **checkout** UI, not just the storefront. * You're installing the Checkout Boost extension (or an equivalent that follows the same contract). * You want a read-only key, with no write access to customer data. ## Before you start You have the Checkout Boost extension installed (or ready to install) on your Shopify store. You know where in your Checkout Boost extension setup to paste the REST API key and signed key. ## Enable Checkout Boost In Shopify admin, go to **Apps → Yuko Loyalty → Integrations**, and click **Checkout Boost**. Switch on the **Checkout Boost** toggle. Yuko generates the two keys. The **Your Private Keys** popup shows the **REST API Key** and **Signed Key**. Copy them or click **Download Keys** and store them somewhere secure. Open the Checkout Boost extension's setup page in Shopify admin and paste both keys into their respective fields. Open your storefront's checkout as a signed-in customer. The Checkout Boost widget should now display the customer's Yuko points balance and available rewards. ## Disable Checkout Boost Switch the toggle off and confirm in the **Disable Checkout Boost** dialog. Both keys are revoked immediately, and Checkout Boost can no longer read customer loyalty data. Disabling **doesn't** uninstall or reconfigure the Checkout Boost extension itself. You'll need to remove or update the keys in the extension separately. ## Rotating the keys To rotate: 1. Disable Checkout Boost (revokes the old keys). 2. Re-enable (generates a fresh pair). 3. Copy the new keys into the extension. There's no separate rotate button today — the disable / re-enable flow is the rotation. ## Limitations * **Read-only.** The generated REST API key can read Yuko data but can't write, so it can't redeem rewards or change points. * **One key pair per store.** Regenerating invalidates the previous pair. * **Extension setup is separate.** Yuko provisions credentials — you still need to install and configure Checkout Boost separately. ## FAQs The REST API integration lets you create arbitrary API keys with various scopes for any purpose (custom apps, headless commerce, etc.). Checkout Boost creates a **single read-only** key pair for the Checkout Boost app — one toggle, no configuration. While the integration is enabled, open the Checkout Boost page and copy them from **API credentials**. If you'd rather issue new keys, disable and re-enable the integration, then update Checkout Boost with the new values. Only after you also paste the keys into the Checkout Boost extension. Enabling Yuko's toggle generates the credentials; the extension is what actually renders the widgets during checkout. If your custom extension follows the same key + signed-key contract as Checkout Boost, yes. Otherwise, use the general [REST API](/integrations/rest-api) integration and roll your own credentials. ## Related General-purpose REST API access for custom apps. Yuko's own Shopify checkout UI extension — an alternative to Checkout Boost. API contracts and payloads for checkout-side loyalty rendering. Browse all integrations for your Yuko account. Read and write Yuko data programmatically. Receive real-time event notifications. Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events. Redeem points and apply loyalty discounts at the till. Sync customers, points and tier data into Klaviyo. Sync loyalty data into Omnisend. Send transactional loyalty messages via 13 supported WhatsApp Business API providers. Email marketing & abandoned cart recovery. Award loyalty points for Judge.me reviews. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # ConvertWay Source: https://docs.yuko.so/integrations/convertway Connect ConvertWay as your WhatsApp Business API provider and send approved template messages, with optional CTA buttons, from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → ConvertWay ## Introduction ConvertWay is a WhatsApp Business API platform for sending template messages. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send your approved ConvertWay templates whenever a loyalty event fires: points earned, reward redeemed, tier upgraded, points about to expire and so on. For the provider-agnostic overview of how Yuko's WhatsApp integration works, see [WhatsApp](/integrations/whatsapp). ## When to use ConvertWay * You already send WhatsApp messages through ConvertWay. * You want loyalty events to trigger the same approved templates you use elsewhere. * You want URL buttons in your messages that link each customer to a personalised page. ## Before you start You have an active ConvertWay account connected to the WhatsApp Business API. You have at least one **approved** template in ConvertWay. You have your ConvertWay API key. ## Connect ConvertWay to Yuko Copy the API key from your ConvertWay account. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations**, pick the **WhatsApp** category from the left sidebar, and click **ConvertWay**. Paste the key into **API Key** and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **ConvertWay** card from the provider list. ## Configure the ConvertWay step in a workflow | Field | What it is | Example | | - | - | - | | **Template Name** | Approved template name from ConvertWay (no spaces) | `loyalty_points_earned` | | **Language Code** | The template's language code | `en`, `hi`, `ar` | | **Add CTA Button** *(optional)* | Turn on to add URL call-to-action buttons with dynamic suffixes | On | | **CTA Button Count** | How many URL buttons the template has (1–2). Shown when **Add CTA Button** is on. | `1` | | **CTA Button URL Suffixes** | One dynamic suffix per button, appended to the button's base URL in the template. Supports [shortcodes](/workflows/whatsapp-node#shortcodes). | `{{reward_code}}` | | **Parameter Count** | Number of body variables in the template (1–10) | `2` | | **Template Parameters** | One value per body variable, in order. Supports [shortcodes](/workflows/whatsapp-node#shortcodes). | `{{first_name}}`, `{{points_balance}}` | You must fill in exactly as many parameters and button suffixes as the counts you set. Template names can't contain spaces. The **Template Name**, **Language Code**, parameter count and number of URL buttons must match the approved template in ConvertWay exactly. A mismatch is the most common reason a send fails. If a button suffix resolves to an empty value at send time, Yuko sends `?from=yuko` instead so the button still opens a valid link. Yuko uses the customer's country in Shopify to set the country code for the message. If the customer has no country, Yuko uses India (IN). ## Example use case **Reward-redeemed message with a shop link** 1. In ConvertWay, get a template called `loyalty_reward_redeemed` approved, with two body variables (first name, reward name) and one URL button whose base URL is your store's discount link. 2. In Yuko Workflows, build: **Trigger: Redeem Points** → **WhatsApp (ConvertWay)**. 3. Set Template Name = `loyalty_reward_redeemed`, Language Code = `en`, Parameter Count = `2`, Parameters = `{{first_name}}`, `{{reward_name}}`. 4. Turn on **Add CTA Button**, set CTA Button Count = `1`, and Button 1 URL Suffix = `{{reward_code}}`. 5. Activate the workflow. ## Limitations * **Approved templates only.** Meta must approve every template before it can be sent. * **No template authoring inside Yuko.** Create and edit templates in ConvertWay. * **Up to 10 body parameters and 2 URL buttons per step.** * **No delivery status in Yuko.** The workflow node records the send as pending, completed or failed based on ConvertWay's API response, not on delivered or read events. ## FAQs 1. The template name matches ConvertWay exactly. 2. The template is approved. 3. The language code matches the approved template. 4. The parameter count and button count match the template. 5. The customer has a phone number in Shopify. Yes. Each WhatsApp node points to one template, and any number of nodes can use the same one. Disconnect ConvertWay in Yuko, generate a new key in ConvertWay, then connect again with the new key. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # DelightChat Source: https://docs.yuko.so/integrations/delightchat Connect DelightChat as your WhatsApp Business API provider — automation-driven sends with optional CTA buttons from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → DelightChat ## Introduction [DelightChat](https://www.delightchat.io) is a multi-channel customer support platform (WhatsApp, Instagram, email) with a WhatsApp Marketing module that exposes "Automations". Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can fire any DelightChat automation from a Yuko workflow. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). ## When to use DelightChat * You already use DelightChat for support across WhatsApp / Instagram / email. * You want Yuko loyalty events to plug into automations you've already built in DelightChat. * You want to attach a click-through **CTA button** to the WhatsApp message. ## Before you start You have an active DelightChat account with WhatsApp Marketing enabled. You have at least one **approved** DelightChat WhatsApp automation. You know the **Automation ID** for the automation you want to trigger (visible in **WhatsApp Marketing → Automations**). You have your DelightChat API key. ## Connect DelightChat to Yuko Log in to your DelightChat dashboard and copy your API key. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations → DelightChat**. Paste the key into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **DelightChat** card from the provider list. ## Configure the DelightChat step in a workflow DelightChat triggers a pre-built **automation** rather than a raw template. You pass message-data and an optional CTA button. | Field | What it is | Example | | - | - | - | | **Automation ID** | The ID of the WhatsApp automation in DelightChat | `abc123` | | **Message Data Count** | Number of template variables the automation expects (1–10) | `2` | | **Message Data** | Key-value pairs (keys typically numbered `1`, `2`, `3`…) — values support [shortcodes](/workflows/whatsapp-node#shortcodes) | `1` = `{{first_name}}`, `2` = `{{points_balance}}` | | **CTA Button URL** | Optional click-through URL on the button (supports shortcodes) | `https://shop.example.com/account` | | **CTA Button Text** | Optional button label | `View my points` | The **CTA Button URL** supports shortcodes too — use this to deep-link customers back into a personalised page (e.g., the customer's Yuko account page or a tier-specific landing page). ## Example use case **Points expiring — click to redeem** 1. In DelightChat, build a WhatsApp automation called `points_expiring_soon` with two variables and approve the template. Note the Automation ID. 2. In Yuko Workflows, build: **Trigger: Points Expiring Reminder** → **WhatsApp (DelightChat)**. 3. Set Automation ID, Message Data Count = `2`, Message Data: `1` = `{{first_name}}`, `2` = `{{points_balance}}`. 4. Add a CTA: Button URL = `https://yourstore.com/account/rewards`, Button Text = `Redeem now`. 5. Activate. ## Limitations * **Automation-based, not raw template.** You're triggering an automation you built in DelightChat, not authoring the template inside Yuko. * **CTA buttons are optional and provider-defined.** If the automation's template doesn't include a button slot, the CTA fields will be ignored. * **No per-message delivery status surfaced in Yuko.** Check the DelightChat dashboard for delivered / read events. ## FAQs DelightChat wraps the WhatsApp template inside an "automation" — a higher-level construct that can include sender settings, follow-ups, and other DelightChat-side logic. Yuko just triggers the automation; DelightChat handles the rest. Check the automation's template body in DelightChat. The variable placeholders correspond to the keys you'll pass here — typically numbered `1`, `2`, `3`. Yes — the CTA Button URL field supports shortcodes, so you can deep-link with customer-specific values (e.g., `https://yourstore.com/account?email={{email}}`). Generate a new key in DelightChat, then open **Integrations → DelightChat** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Engati Source: https://docs.yuko.so/integrations/engati Connect Engati as your WhatsApp Business API provider — namespace-scoped templates sent from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Engati ## Introduction [Engati](https://www.engati.com) is a global conversational AI platform that doubles as a WhatsApp Business API provider. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send Engati templates whenever a loyalty event fires — useful if you already run Engati for customer support and want loyalty milestones flowing through the same channel. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). ## When to use Engati * You already use Engati for chat / conversational AI. * You want loyalty events (tier change, reward earned) to send template messages through your existing Engati setup. * You want to combine Engati's conversational flows with Yuko's loyalty data. ## Before you start You have an active Engati account with WhatsApp Business API. You have at least one **approved** Engati template. You know your Engati **namespace** (used to scope templates in Engati's API). You have your Engati API key. ## Connect Engati to Yuko Log in to your Engati dashboard, copy your API key, and note your namespace. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations → Engati**. Paste the key into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **Engati** card from the provider list. ## Configure the Engati step in a workflow | Field | What it is | Example | | - | - | - | | **Namespace** | Your Engati template namespace | `your-namespace` | | **Endpoint URL** | Engati's API endpoint URL | `https://api.engati.com/...` | | **Template Name** | Template identifier (no spaces) | `loyalty_tier_upgrade` | | **Parameter Count** | Number of body variables (1–10) | `2` | | **Template Parameters** | One value per variable — supports [shortcodes](/workflows/whatsapp-node#shortcodes) | `{{first_name}}`, `{{current_tier_name}}` | **Template Name must not contain spaces.** Engati's API rejects template names with whitespace — use underscores. ## Example use case **Tier upgrade celebration** 1. In Engati, approve a template called `tier_upgrade_celebration` with two variables. Confirm the namespace. 2. In Yuko Workflows, build: **Trigger: VIP Tier Upgrade** → **WhatsApp (Engati)**. 3. Set Namespace, Endpoint URL, Template Name = `tier_upgrade_celebration`, Parameter Count = `2`, Parameters = `{{first_name}}`, `{{current_tier_name}}`. 4. Activate. ## Limitations * **Approved templates only.** Engati enforces Meta template approval. * **Namespace-scoped.** Templates from one namespace can't be sent from another — keep namespace and template name in sync. * **No template authoring inside Yuko.** Edit templates in the Engati dashboard. * **No per-message delivery status surfaced in Yuko.** Check the Engati dashboard for delivered / read events. ## FAQs A WhatsApp Business API concept: namespaces scope template approvals. Engati exposes it explicitly because the same template name can exist in different namespaces. 1. Namespace matches the template's namespace in Engati. 2. Template name has no spaces. 3. Template is approved. 4. Parameter count matches the template's variable count. 5. Customer has a phone number in Shopify. Generate a new key in Engati, then open **Integrations → Engati** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Interakt Source: https://docs.yuko.so/integrations/interakt Connect Interakt as your WhatsApp Business API provider — template messages with optional CTA URL buttons and callback metadata, from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Interakt ## Introduction [Interakt](https://www.interakt.shop) is an India-headquartered WhatsApp Business API platform, popular with mid-market Shopify stores. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send Interakt templates whenever a loyalty event fires. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). ## When to use Interakt * You already run Interakt for WhatsApp support and marketing on the same account. * You want URL buttons in your messages with a personalised link suffix. * You want to attach callback metadata so incoming webhooks tell your other tools which loyalty event triggered the message. * You need broad language support (Interakt uses Facebook language codes). ## Before you start You have an active Interakt account with WhatsApp Business API. You have at least one **approved** Interakt template. You have your Interakt API key from **Settings → Developer Settings** in the Interakt dashboard. ## Connect Interakt to Yuko Log in to Interakt → **Settings → Developer Settings**. Copy the API key. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations**, pick the **WhatsApp** category from the left sidebar, and click **Interakt**. Paste the key into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **Interakt** card from the provider list. ## Configure the Interakt step in a workflow | Field | What it is | Example | | - | - | - | | **Template Name** | The template code name from your Interakt dashboard | `order_confirmation_v1` | | **Language Code** | Facebook language code | `en`, `hi`, `ar` | | **Add CTA Button** *(optional)* | Turn on to add URL call-to-action buttons with dynamic suffixes | On | | **CTA Button Count** | How many URL buttons the template has (1–2). Shown when **Add CTA Button** is on. | `1` | | **CTA Button URL Suffixes** | One dynamic suffix per button, appended to the button's base URL in the Interakt template. Supports [shortcodes](/workflows/whatsapp-node#shortcodes). | `{{reward_code}}` | | **Template Parameter Count** | Number of body variables (1–10) | `2` | | **Template Parameters** | One value per body variable — supports [shortcodes](/workflows/whatsapp-node#shortcodes) | `{{first_name}}`, `{{points_balance}}` | | **Callback Data** *(optional)* | Metadata returned on Interakt's delivery webhooks (max 512 chars) | `yuko_tier_upgrade` | You must fill in exactly as many parameters and button suffixes as the counts you set. If a button suffix resolves to an empty value at send time, Yuko sends `?from=yuko` instead so the button still opens a valid link. **Callback Data** is Interakt-specific: use it if you're subscribing to Interakt's delivery webhooks in another tool and want to tag each message with which Yuko workflow sent it. ## Example use case **Loyalty tier upgrade celebration** 1. In Interakt, approve a template called `loyalty_tier_upgrade_v1` with two variables (customer name, tier name). 2. In Yuko Workflows, build: **Trigger: VIP Tier Upgrade** → **WhatsApp (Interakt)**. 3. Set Template Name = `loyalty_tier_upgrade_v1`, Language = `en`, Parameter Count = `2`, Parameters = `{{first_name}}`, `{{current_tier_name}}`. 4. (Optional) Callback Data = `yuko_tier_upgrade` — lets your Interakt inbox filter these apart from other messages. 5. Activate. ## Limitations * **Approved templates only.** Interakt enforces Meta template approval. * **No template authoring inside Yuko.** Edit templates in the Interakt dashboard. * **Up to 10 body parameters and 2 URL buttons per step.** * **Callback Data capped at 512 characters.** * **No per-message delivery status surfaced in Yuko.** Check the Interakt dashboard for delivered / read events. ## FAQs Interakt dashboard → **Settings → Developer Settings**. If you don't see it, ask your Interakt account owner to enable API access on your plan. Interakt returns whatever you put here on their delivery webhooks. If you subscribe to Interakt webhooks in another tool (analytics, CRM), it's a good place to stash a tag like `yuko_reward_earned` so you can route those events downstream. 1. Template name exact match. 2. Template approved. 3. Parameter count and CTA button count match the template. 4. Language code matches the approved template's language. 5. Customer has a phone number in Shopify. Generate a new key in Interakt, then open **Integrations → Interakt** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Judge.me Source: https://docs.yuko.so/integrations/judgeme Award loyalty points automatically when customers write reviews on Judge.me, using your Write a review earn rule. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Judge.me ## Introduction [Judge.me](https://judge.me) is a widely used Shopify reviews app. The Judge.me integration lets customers earn **Yuko loyalty points** for the reviews they write on Judge.me. When connected, Yuko registers webhooks on your Judge.me shop. Each time Judge.me sends a review event, Yuko checks the review and awards points based on your [Write a review](/loyalty/ways-to-earn/write-a-review) earn rule. ## When to use it * You collect product reviews with Judge.me. * You want customers who write Judge.me reviews to earn loyalty points. * You want an extra bonus for reviews that include photos. ## Before you start You have an active Judge.me account connected to your Shopify store. You have your Judge.me API token, or you can sign in to Judge.me to connect with OAuth. Your **Write a review** earn rule is enabled and set to the points you want to award. ## Connect Judge.me to Yuko In Shopify admin, go to **Apps → Yuko Loyalty → Integrations** and click **Judge.me**. Under **Authentication Type**, pick **OAuth** or **API Key**. * **OAuth**: click **Connect with OAuth**. Yuko redirects you to Judge.me to authorise the connection, then brings you back. * **API Key**: paste your Judge.me API token into **API Key** and click **Connect Integration**. Under **Webhook Events**, tick **review/created**, **review/updated** or both. See [Which events to enable](#which-events-to-enable). Click **Save Settings**. Yuko registers the selected webhooks on your Judge.me shop and starts awarding points. ## Which events to enable | Event | Fires when | | - | - | | **review/created** | A new review is created in Judge.me. | | **review/updated** | An existing review is updated, for example when a moderator publishes it. | Yuko awards points only for **published** reviews. A review that is still pending moderation when Judge.me sends the event doesn't earn anything yet. * **If Judge.me auto-publishes reviews**, enabling **review/created** is enough. * **If you moderate reviews before publishing**, also enable **review/updated**, so the customer earns when the review is published. Enabling both events doesn't double-award. Yuko awards the base points only once per customer per product, and the photo bonus only once. ## How the reward works 1. A customer writes a review on your store using Judge.me. 2. Judge.me sends the review event to Yuko. 3. Yuko matches the reviewer to a Yuko customer, first by Shopify customer ID and then by email, and matches the reviewed product. 4. If the review is published and the **Write a review** rule is active, Yuko awards the rule's points. 5. If the review includes photos and **Enable Media Earning** is on in the **Write a review** rule, Yuko also awards the **Media earning value** as a bonus. The customer sees the points in their loyalty balance, and any points-earned email you have turned on is sent as usual. ## Example use case **Moderated reviews, 50 points plus a 25-point photo bonus** 1. In Yuko, open the **Write a review** earn rule, set it to 50 points, turn on **Enable Media Earning** with a **Media earning value** of 25, and save. 2. Connect Judge.me in **Integrations**. 3. Tick **review/created** and **review/updated**, then click **Save Settings**. 4. When a moderator publishes a review with a photo, the customer earns 50 + 25 points. Later edits to the same review don't award again. ## Limitations * **The reviewer must match a Yuko customer.** Reviews from people Yuko can't match by Shopify customer ID or email are skipped. * **The product must exist in Yuko.** Reviews for products Yuko hasn't synced are skipped. * **Only published reviews earn.** * **Points are set in the earn rule.** There's no per-review override. * **Points aren't reversed.** If a review is later deleted or unpublished in Judge.me, the points stay with the customer. * **No historical reviews.** Yuko only receives new and updated reviews after you connect. Reviews written before that don't earn points. ## FAQs Yuko doesn't revoke the points automatically. If you need to reverse an award, adjust the customer's points manually from [Customers](/loyalty/customers). Yes. Turn on **Enable Media Earning** in the **Write a review** earn rule and set a **Media earning value**. Judge.me reviews with photos earn that bonus on top of the base points. No. Yuko only receives review events sent after the webhooks are registered. Yes, if it can trigger Shopify Flow. Use the **Yuko Add Points for Review** action in [Shopify Flow](/integrations/shopify-flow) to send reviews from other apps to your **Write a review** earn rule. Disconnect Judge.me in Yuko, which also removes the webhooks Yuko registered. Then connect again with the new token or account and save your webhook events. ## Related The earn rule that sets how many points each review is worth. Award review points from other reviews apps with the Add Points for Review action. Configure the emails customers get when they earn points. Browse all integrations for your Yuko account. Read and write Yuko data programmatically. Receive real-time event notifications. Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events. Redeem points and apply loyalty discounts at the till. Sync customers, points and tier data into Klaviyo. Sync loyalty data into Omnisend. Send transactional loyalty messages via 13 supported WhatsApp Business API providers. Email marketing & abandoned cart recovery. Award loyalty points for Judge.me reviews. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Klaviyo Source: https://docs.yuko.so/integrations/klaviyo Sync customers, points, VIP tier, referral and membership data into Klaviyo as profile properties and trigger events. Use them inside Klaviyo segments, dynamic email content and flows. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Klaviyo ## Introduction Yuko's Klaviyo connector pushes two kinds of data into Klaviyo: 1. **Profile properties** — written to the customer's Klaviyo profile each time Yuko sends them an event (e.g., `yuko_points_balance`, `yuko_vip_tier`). Use these to **segment** and **personalise** content. 2. **Trigger events** — Klaviyo “metrics” that Yuko fires when something happens in the loyalty program (e.g., *Earn Points*, *VIP Tier Upgrade*). Use these to **start flows**. This page documents the profile properties and the main events that Yuko sends. **Why this matters for email design:** In Klaviyo's email editor, you reference Yuko data using the exact property names below — e.g., `{{ person.yuko_points_balance }}` to show the live balance, or `{{ event.yuko_points_earned }}` inside a flow triggered by *Earn Points*. Get the property name wrong and the placeholder renders empty. ## When to use * Klaviyo is your primary email / SMS tool. * You want VIP-tier or balance-based **segments** in Klaviyo. * You want loyalty-event **flows** (e.g., a custom “Tier upgrade” series) sent through Klaviyo instead of Yuko. * You want Yuko data inside existing Klaviyo flows (welcome, win-back, browse abandonment). ## Overview * **Events** are opt-in per-event. You pick which events get forwarded after you connect. * **Profile properties** travel with each event. Every event Yuko sends refreshes that customer's profile properties. Customers are only created or updated in Klaviyo when Yuko sends an event for them; there's no bulk sync of existing customers. * **One-way:** Yuko → Klaviyo. Yuko does not pull data from Klaviyo. * **Authentication:** OAuth or a Klaviyo Private API key. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You have a Klaviyo account. You can sign in to Klaviyo to connect with OAuth, or you have a Klaviyo **Private API key** with the necessary scopes (Profiles + Events at minimum). ## Connect Yuko to Klaviyo In your Shopify admin, go to **Apps → Yuko Loyalty → Integrations → Klaviyo**. Under **Authentication Type**, pick **OAuth** or **API Key**. * **OAuth**: click **Connect with OAuth** and approve access in Klaviyo. * **API Key**: generate a Private API key in Klaviyo (Settings → API keys), paste it into **API Key** and click **Connect Integration**. Once connected, tick the events you want sent to Klaviyo as metrics and click **Save Events**. You can change this any time later. Click **Send Test Events** to send sample events, then check them in Klaviyo. From then on, each selected event creates or updates the customer's Klaviyo profile with the `yuko_*` properties listed below. *** ## Profile properties Yuko writes the following properties to the customer's Klaviyo profile with every event it sends. Profiles are keyed by **email** and **external\_id** (the Shopify customer ID). Properties refresh every time Yuko sends one of your selected events for the customer. Use these in Klaviyo segments and inside any email template (`{{ person. }}`). ### Identifier properties These are written at Klaviyo's top-level profile object (not under `properties`). | Klaviyo profile field | Source | Notes | | - | - | - | | `email` | Customer email | Primary identifier | | `first_name` | Customer first name | | | `last_name` | Customer last name | | | `external_id` | Shopify customer ID | Use to match Klaviyo profiles to Shopify customers | | `phone_number` | Customer phone | E.164 format if available | ### Loyalty profile properties | Property | Type | Description | | - | - | - | | `yuko_joined_at` | ISO 8601 string | When the customer first appeared in Yuko (account creation). | | `yuko_total_spent` | Number | Lifetime spend recorded on the Shopify customer. | | `yuko_points_balance` | Integer | **Current points balance.** Use this for the live balance in any email. | | `yuko_points_as_cash_balance` | Number | The points balance expressed in store currency, given your conversion ratio. | | `yuko_lifetime_points_earned` | Integer | All points the customer has ever earned (excludes redemptions and adjustments). | | `yuko_points_expire_at` | ISO 8601 string | The date the customer's *next* batch of points will expire. Empty if no points are scheduled to expire. | | `yuko_points_to_next_reward` | String | How many more points the customer needs to qualify for their next claimable reward. | | `yuko_points_expiring_in_30_days` | Integer | Points that expire within the next 30 days (includes the 7-day amount). `0` if none. | | `yuko_points_expiring_in_7_days` | Integer | Points that expire within the next 7 days. `0` if none. | | `yuko_points_expiring_in_30_days_as_cash_balance` | Number | The 30-day expiring points expressed in store currency. | | `yuko_points_expiring_in_7_days_as_cash_balance` | Number | The 7-day expiring points expressed in store currency. | ### VIP tier profile properties | Property | Type | Description | | - | - | - | | `yuko_vip_tier` | String | Current tier name (e.g., *Silver*, *Gold*, *Diamond*). | | `yuko_vip_tier_entry_date` | ISO 8601 string | When the customer entered their current tier. | | `yuko_vip_retention_expires_at` | ISO 8601 string | When the customer's retention window ends. They must re-qualify before this date or risk downgrade. | | `yuko_vip_qualifying_value` | Number | The customer's current progress toward the next tier (in spend, points or orders depending on your calculation method). | | `yuko_vip_next_tier` | String | Name of the next tier the customer is progressing toward. Empty for top-tier customers. | | `yuko_vip_next_tier_amount_needed` | Number | How much more is needed to reach the next tier. | | `yuko_vip_progress_percentage` | Number | Progress toward the next tier as a percentage (0–100). | | `yuko_vip_at_risk` | Boolean | `true` if the customer is within 30 days of retention expiry. Useful for “you're about to lose VIP” emails. | | `yuko_vip_is_entry_tier` | Boolean | `true` if the customer is still on the base/entry tier. | ### Referral profile properties | Property | Type | Description | | - | - | - | | `yuko_referral_url` | String | The customer's personal referral link. Use directly in emails — `Share your link: {{ person.yuko_referral_url }}`. | | `yuko_referral_code` | String | The short referral code, embedded in the URL. | | `yuko_total_referrals` | Integer | Total referrals the customer has initiated. | | `yuko_successful_referrals` | Integer | Referrals that converted (friend completed the qualifying action). | ### Membership profile properties | Property | Type | Description | | - | - | - | | `yuko_membership_tier` | String | Current membership plan name (e.g., *Yuko VIP*). Empty for non-members. | | `yuko_membership_status` | String | Contract status — typical values: *active*, *paused*, *cancelled*, *failed*. | | `yuko_membership_renewal_date` | ISO 8601 string | Next renewal date. Use for renewal-reminder emails. | ### Personal milestones | Property | Type | Description | | - | - | - | | `yuko_date_of_birth` | ISO 8601 string | The customer's birthday. Empty if not collected. | | `yuko_loyalty_anniversary_date` | ISO 8601 string | Anniversary date — the date the customer entered their current tier, or their account creation date as a fallback. | *** ## Common event properties **Every** event Yuko sends to Klaviyo carries the following properties — in addition to the event-specific properties documented per event. | Property | Type | Description | | - | - | - | | `yuko_customer_email` | String | Customer email (also matches Klaviyo profile). | | `yuko_customer_first_name` | String | First name. | | `yuko_customer_last_name` | String | Last name. | | `yuko_shopify_customer_id` | String | The Shopify customer ID this event relates to. | | `yuko_program_module` | Array | Active Yuko modules for the store (e.g., `["loyalty", "referral", "tiers", "membership"]`). | | `yuko_program_currency` | String | Customer's currency code. | | `yuko_timestamp` | ISO 8601 string | When the event was triggered in Yuko. | | `yuko_org_uuid` | String | Yuko organisation UUID. Useful in multi-store Klaviyo accounts. | In Klaviyo flow filters and template content, reference these as `{{ event.yuko_customer_email }}`, `{{ event.yuko_timestamp }}`, etc. *** ## Trigger events Each event below shows up in Klaviyo as a **metric** (the name in **bold**). Use it as the trigger of a flow, or as a metric filter elsewhere. Properties listed are **in addition to the common event properties** above and are also accessible inside Klaviyo flows as `{{ event. }}`. You can also forward **Reward Expired**, **Membership Paused**, **Benefit Unlocked**, **Booster Campaign Entered**, **Booster Campaign Progression** and **Booster Campaign Rewarded**. These carry the common event properties and the profile properties only. ### Loyalty events #### Joined Loyalty Program * **Klaviyo metric:** *Joined Loyalty Program* * **Event slug:** `loyalty_program_joined` * **When it fires:** A customer enters the Yuko loyalty program for the first time. | Property | Type | Description | | - | - | - | | `yuko_signup_source` | String | Where the customer joined from (e.g., onboarding, account block). | | `yuko_signup_points_awarded` | Integer | Bonus points awarded for joining (if a Sign Up campaign is active). | | `yuko_new_balance` | Integer | Customer's points balance immediately after joining. | | `yuko_entry_tier_name` | String | Tier the customer entered at. | | `yuko_entry_tier_is_entry` | Boolean | `true` if joined at the base tier. | | `yuko_first_reward_name` | String | Name of the cheapest reward configured. | | `yuko_first_reward_points_required` | Integer | Points cost of the cheapest reward. | | `yuko_first_reward_points_needed` | Integer | How many more points to reach it from the new balance. | | `yuko_referral_code` | String | Their personal referral code (if referrals are enabled). | | `yuko_referral_url` | String | Their personal referral link. | | `yuko_all_tiers` | String | Serialised list of all configured tiers (for display). | | `yuko_earning_rule` | String | The earning rule that delivered the signup bonus, if any. | #### Earn Points * **Klaviyo metric:** *Earn Points* * **Event slug:** `loyalty_earn_reward` * **When it fires:** Yuko credits points to a customer from any active Way to Earn campaign. | Property | Type | Description | | - | - | - | | `yuko_points_earned` | Integer | Points awarded by this event. | | `yuko_new_balance` | Integer | Balance immediately after the credit. | | `yuko_trigger_name` | String | The Way to Earn that fired (e.g., `place_an_order`, `birthday`). | | `yuko_trigger_order_id` | String | Shopify order ID, if the trigger was a purchase. | | `yuko_trigger_order_total` | Number | Order total, if applicable. | | `yuko_earning_rule` | String | The earning rule name. | | `yuko_vip_tier_multiplier` | Number | Multiplier applied at the moment of award. | | `yuko_base_points` | Integer | Base points before any multiplier. | | `yuko_bonus_points` | Integer | Bonus points contributed by VIP multiplier or campaign uplift. | | `yuko_total_redeemable_cash` | Number | Customer's points balance expressed as cash value. | | `yuko_available_rewards_count` | Integer | Number of rewards the customer can claim right now. | | `yuko_points_to_next_reward` | Integer | Points needed to unlock the next reward. | | `yuko_points_as_cash` | Number | Same as `yuko_total_redeemable_cash`, kept for backward compatibility. | #### Redeem Points * **Klaviyo metric:** *Redeem Points* * **Event slug:** `loyalty_redeem_points` * **When it fires:** A customer redeems points for a reward (Way to Redeem). | Property | Type | Description | | - | - | - | | `yuko_points_spent` | Integer | Points consumed by this redemption. | | `yuko_new_balance` | Integer | Balance after the redemption. | | `yuko_reward_type` | String | Reward type — `amount_discount`, `percentage_discount`, `free_product`, `free_shipping`, `store_credit`. | | `yuko_reward_value` | Number | Value of the reward (e.g., `5` for \$5 off, `10` for 10%). | | `yuko_reward_code` | String | The Shopify discount code issued. | | `yuko_reward_expires_at` | ISO 8601 string | When the discount code expires. | | `yuko_reward_minimum_purchase` | Number | Minimum cart amount to use the reward. | | `yuko_reward_description` | String | Human-readable description. | #### Points Adjusted * **Klaviyo metric:** *Points Adjusted* * **Event slug:** `loyalty_points_adjusted` * **When it fires:** A staff member manually credits or debits a customer's points. | Property | Type | Description | | - | - | - | | `yuko_adjustment_amount` | Integer | Absolute points adjusted. | | `yuko_adjustment_direction` | String | `credit` or `debit`. | | `yuko_new_balance` | Integer | Balance after the adjustment. | | `yuko_adjustment_reason` | String | Reason note entered by the staff member. | | `yuko_adjusted_by` | String | Name of the staff member who made the change. | #### Points Expired * **Klaviyo metric:** *Points Expired* * **Event slug:** `loyalty_points_expired` * **When it fires:** A batch of points expires. | Property | Type | Description | | - | - | - | | `yuko_points_expired` | Integer | Points that just expired. | | `yuko_new_balance` | Integer | Remaining balance. | | `yuko_available_rewards_count` | Integer | Rewards still claimable with the remaining balance. | #### Points Expiring Reminder * **Klaviyo metric:** *Points Expiring Reminder* * **Event slug:** `points_expiring` * **When it fires:** Customer has points scheduled to expire — typically 30 and 7 days before expiry. | Property | Type | Description | | - | - | - | | `yuko_points_at_risk` | Integer | Points about to expire. | | `yuko_total_balance` | Integer | Total points balance. | | `yuko_expires_at` | ISO 8601 string | When the at-risk points expire. | | `yuko_days_until_expiry` | Integer | Days remaining. | | `yuko_urgency` | String | Urgency tier (e.g., `low`, `medium`, `high`). | | `yuko_prevention_action` | String | Suggested action (e.g., redeem now). | | `yuko_points_as_cash_at_risk` | Number | Cash value of the at-risk points. | | `yuko_available_reward_1_name` | String | Top reward the customer could claim. | | `yuko_available_reward_2_name` | String | Second reward (only present if available). | #### Reward Expiry Reminder * **Klaviyo metric:** *Reward Expiry Reminder* * **Event slug:** `reward_expiring` * **When it fires:** A customer's redeemed reward (discount code) is about to expire — typically 7 and 1 days before. | Property | Type | Description | | - | - | - | | `yuko_reward_type` | String | The reward type. | | `yuko_reward_value` | Number | Reward value. | | `yuko_reward_code` | String | The Shopify discount code at risk. | | `yuko_reward_expires_at` | ISO 8601 string | Expiry timestamp. | | `yuko_reward_description` | String | Human-readable description. | | `yuko_days_until_expiry` | Integer | Days remaining. | | `yuko_urgency` | String | Urgency tier. | #### Customer Birthday * **Klaviyo metric:** *Customer Birthday* * **Event slug:** `loyalty_birthday` * **When it fires:** It's the customer's birthday and Yuko has credited the birthday bonus. | Property | Type | Description | | - | - | - | | `yuko_birthday_points_awarded` | Integer | Total points awarded. | | `yuko_new_balance` | Integer | Balance after the credit. | | `yuko_birthday_base_points` | Integer | Base birthday points. | | `yuko_birthday_tier_bonus` | Integer | Extra points contributed by VIP tier multiplier. | | `yuko_birthday_tier_multiplier` | Number | Multiplier applied. | | `yuko_current_vip_tier` | String | Customer's tier at the moment of award. | #### Birthday Reminder * **Klaviyo metric:** *Birthday Reminder* * **Event slug:** `loyalty_birthday_reminder` * **When it fires:** A configurable number of days before the customer's birthday — useful for pre-birthday teasers. Properties identical to **Customer Birthday** above (including `yuko_birthday_points_awarded`, `yuko_birthday_base_points`, etc.) — Klaviyo can use them to pre-announce the bonus. #### Customer Anniversary * **Klaviyo metric:** *Customer Anniversary* * **Event slug:** `loyalty_anniversary` * **When it fires:** It's the anniversary of the customer's signup. | Property | Type | Description | | - | - | - | | `yuko_years_as_member` | Integer | Years since signup (1, 2, 3, …). | | `yuko_anniversary_points_awarded` | Integer | Points credited. | | `yuko_new_balance` | Integer | Balance after credit. | | `yuko_lifetime_points_earned` | Integer | All-time points earned. | | `yuko_lifetime_orders` | Integer | All-time order count. | | `yuko_lifetime_spend` | Number | All-time spend. | | `yuko_current_vip_tier` | String | Tier at the moment of award. | #### Anniversary Reminder * **Klaviyo metric:** *Anniversary Reminder* * **Event slug:** `loyalty_anniversary_reminder` * **When it fires:** A configurable number of days before the customer's anniversary. Same properties as **Customer Anniversary** — Klaviyo can pre-announce. *** ### VIP Tier events #### VIP Tier Entry * **Klaviyo metric:** *VIP Tier Entry* * **Event slug:** `vip_tier_entry` * **When it fires:** A customer is assigned a tier for the first time (typically the base tier on signup). | Property | Type | Description | | - | - | - | | `yuko_tier_name` | String | The tier the customer entered. | | `yuko_tier_id` | String | UUID of the tier. | | `yuko_tier_icon_url` | String | Tier icon URL — use as `` in emails. | | `yuko_tier_is_entry` | Boolean | `true` (always, for entry events). | | `yuko_benefits_unlocked` | String | Comma-separated list of benefits. | | `yuko_all_tiers` | String | Serialised list of all configured tiers (for “tier ladder” displays). | | `yuko_next_tier_name` | String | Name of the tier above. | | `yuko_next_tier_threshold` | Number | Threshold required to reach the next tier. | | `yuko_next_tier_amount_needed` | Number | How much more is needed. | | `yuko_next_tier_progress_percentage` | Number | Progress toward next tier as a percentage. | | `yuko_earning_rate` | Number | Current earning multiplier. | **Per-benefit reward fields:** If the tier has reward-type benefits (e.g., a *free product* or *store credit* perk that issues a Shopify discount code), Yuko enriches the payload with one numbered block of fields per benefit. `N` starts at 1 and counts up — for example, a tier with two reward benefits emits both `yuko_reward_1_*` and `yuko_reward_2_*`. | Property pattern | Type | Description | | - | - | - | | `yuko_reward_N_type` | String | Reward type (e.g., `amount_discount`, `free_product`, `store_credit`). | | `yuko_reward_N_value` | Number | Reward value (e.g., the dollar amount or percentage). | | `yuko_reward_N_description` | String | Human-readable description of the benefit. | | `yuko_reward_N_code` | String | The Shopify discount code issued to this customer for the benefit. | | `yuko_reward_N_expires_at` | ISO 8601 string | When the issued discount code expires. | #### VIP Tier Upgrade * **Klaviyo metric:** *VIP Tier Upgrade* * **Event slug:** `vip_tier_upgrade` * **When it fires:** A customer crosses a threshold and moves up a tier. | Property | Type | Description | | - | - | - | | `yuko_previous_tier_name` | String | Tier they came from. | | `yuko_previous_tier_id` | String | UUID of the previous tier. | | `yuko_new_tier_name` | String | Tier they entered. | | `yuko_new_tier_id` | String | UUID of the new tier. | | `yuko_new_tier_icon_url` | String | New tier's icon URL. | | `yuko_qualifying_value` | Number | The customer's qualifying value at the moment of upgrade. | | `yuko_threshold_crossed` | Number | The threshold they crossed. | | `yuko_qualifying_event_type` | String | What triggered the qualification (e.g., `place_an_order`). | | `yuko_qualifying_event_order_id` | String | Shopify order ID, if applicable. | | `yuko_qualifying_event_order_total` | Number | Order total, if applicable. | | `yuko_benefits_unlocked` | String | New benefits unlocked. | | `yuko_new_earning_rate` | Number | New tier's points multiplier. | | `yuko_previous_earning_rate` | Number | Previous tier's multiplier. | | `yuko_next_tier_name` | String | Name of the next tier above. | | `yuko_next_tier_threshold` | Number | Threshold for the next tier. | | `yuko_next_tier_amount_needed` | Number | How much more is needed. | | `yuko_next_tier_progress_percentage` | Number | Progress toward the next tier. | | `yuko_tier_stats_percentile` | Number | What percentile of customers the upgrade puts them in. | | `yuko_tier_stats_total_in_tier` | Integer | Number of customers currently in the new tier. | | `yuko_all_tiers` | String | All-tiers list. | **Per-benefit reward fields:** If the new tier has reward-type benefits (e.g., a *free product* or *store credit* perk that issues a Shopify discount code), Yuko enriches the payload with one numbered block of fields per benefit. `N` starts at 1 and counts up — for example, a tier with two reward benefits emits both `yuko_reward_1_*` and `yuko_reward_2_*`. | Property pattern | Type | Description | | - | - | - | | `yuko_reward_N_type` | String | Reward type (e.g., `amount_discount`, `free_product`, `store_credit`). | | `yuko_reward_N_value` | Number | Reward value (e.g., the dollar amount or percentage). | | `yuko_reward_N_description` | String | Human-readable description of the benefit. | | `yuko_reward_N_code` | String | The Shopify discount code issued to this customer for the benefit. | | `yuko_reward_N_expires_at` | ISO 8601 string | When the issued discount code expires. | #### VIP Tier Downgrade * **Klaviyo metric:** *VIP Tier Downgrade* * **Event slug:** `vip_tier_downgrade` * **When it fires:** A customer drops a tier (after a period reset or retention expiry). | Property | Type | Description | | - | - | - | | `yuko_previous_tier_name` | String | Tier they came from. | | `yuko_new_tier_name` | String | Tier they're now on. | | `yuko_new_tier_icon_url` | String | New tier icon URL. | | `yuko_qualifying_value` | Number | Their current qualifying value. | | `yuko_previous_threshold` | Number | The threshold of the tier they dropped from. | | `yuko_new_threshold` | Number | The threshold of the new (lower) tier. | | `yuko_shortfall` | Number | How short they fell from the previous tier's threshold. | | `yuko_benefits_lost` | String | Benefits no longer available. | | `yuko_benefits_retained` | String | Benefits still available. | | `yuko_regain_tier_name` | String | Tier they could regain (typically the previous tier). | | `yuko_regain_amount_needed` | Number | How much more activity is needed to regain. | #### VIP Tier Retained * **Klaviyo metric:** *VIP Tier Retained* * **Event slug:** `vip_tier_retained` * **When it fires:** A customer re-qualifies for their current tier within the retention window. | Property | Type | Description | | - | - | - | | `yuko_current_tier_name` | String | The retained tier. | | `yuko_current_tier_icon_url` | String | Tier icon URL. | | `yuko_qualifying_value` | Number | Their qualifying value. | | `yuko_threshold_required` | Number | Threshold to re-qualify. | | `yuko_surplus` | Number | How much over the threshold. | | `yuko_new_retention_expires_at` | ISO 8601 string | New retention window end. | | `yuko_days_before_expiry` | Integer | Days they were ahead of the deadline. | | `yuko_next_tier_name` | String | Tier above. | | `yuko_next_tier_amount_needed` | Number | Amount needed to reach next tier. | | `yuko_next_tier_progress_percentage` | Number | Progress toward next tier. | #### VIP Tier Retention Warning * **Klaviyo metric:** *VIP Tier Retention Warning* * **Event slug:** `vip_tier_retention_warning` * **When it fires:** A customer is approaching the end of their retention window without re-qualifying. | Property | Type | Description | | - | - | - | | `yuko_current_tier_name` | String | At-risk tier. | | `yuko_current_tier_icon_url` | String | Tier icon URL. | | `yuko_urgency` | String | Urgency tier (`low`, `medium`, `high`). | | `yuko_days_remaining` | Integer | Days until retention expires. | | `yuko_retention_expires_at` | ISO 8601 string | Exact expiry date. | | `yuko_qualifying_value` | Number | Current qualifying value. | | `yuko_threshold_required` | Number | Threshold to re-qualify. | | `yuko_amount_needed` | Number | Gap to threshold. | | `yuko_progress_percentage` | Number | Progress percentage. | | `yuko_at_risk` | Boolean | `true` if at risk of downgrade. | | `yuko_would_downgrade_to` | String | Tier they'd drop to. | | `yuko_benefits_at_risk` | String | Benefits they'd lose. | #### VIP Milestone Nudge * **Klaviyo metric:** *VIP Milestone Nudge* * **Event slug:** `vip_milestone_nudge` * **When it fires:** A customer crosses a configured progress milestone toward the next tier (e.g., 50% / 75% / 90% of the way there). | Property | Type | Description | | - | - | - | | `yuko_current_tier_name` | String | Current tier. | | `yuko_next_tier_name` | String | Tier they're approaching. | | `yuko_next_tier_icon_url` | String | Next tier icon URL. | | `yuko_qualifying_value` | Number | Current qualifying value. | | `yuko_next_threshold` | Number | Threshold for the next tier. | | `yuko_amount_needed` | Number | How much more is needed. | | `yuko_progress_percentage` | Number | Progress toward next tier. | | `yuko_milestone_crossed` | String | The specific milestone (e.g., `90_percent`). | | `yuko_rewards_awaiting` | String | Rewards that unlock at the next tier. | | `yuko_benefits_awaiting` | String | Benefits that unlock. | #### VIP Period Start * **Klaviyo metric:** *VIP Period Start* * **Event slug:** `vip_period_start` * **When it fires:** A new calculation period begins (relevant for *Rolling year* and *Calendar year* programs). | Property | Type | Description | | - | - | - | | `yuko_current_tier_name` | String | The tier the customer is on at period start. | | `yuko_current_tier_icon_url` | String | Tier icon URL. | | `yuko_period_start` | ISO 8601 string | Start of the new period. | | `yuko_period_end` | ISO 8601 string | End of the new period. | | `yuko_period_type` | String | `rolling_year`, `calendar_year`, or similar. | | `yuko_fresh_qualifying_value` | Number | Reset qualifying value at period start. | | `yuko_threshold_to_maintain` | Number | Threshold to keep the current tier through the period. | | `yuko_has_carryover` | Boolean | `true` if surplus from the previous period carries over. | | `yuko_carryover_expires_at` | ISO 8601 string | When the carryover surplus expires. | | `yuko_previous_period_value` | Number | Final value of the prior period. | | `yuko_tiers_roadmap` | String | Tiers and thresholds for the new period. | *** ### Referral events #### Referrer welcome * **Klaviyo metric:** *Referrer welcome* * **Event slug:** `referral_advocate_registered` * **When it fires:** A customer becomes an advocate (referrer) — typically auto-enrolled the first time they're eligible. | Property | Type | Description | | - | - | - | | `yuko_referral_code` | String | The advocate's referral code. | | `yuko_referral_url` | String | The advocate's full referral URL. | | `yuko_friend_reward_type` | String | Reward type the friend will get. | | `yuko_friend_reward_value` | Number | Friend reward value. | | `yuko_friend_reward_name` | String | Friend reward display name. | | `yuko_friend_reward_description` | String | Friend reward description. | | `yuko_advocate_reward_type` | String | Reward type the advocate gets. | | `yuko_advocate_reward_value` | Number | Advocate reward value. | | `yuko_advocate_reward_name` | String | Advocate reward display name. | | `yuko_advocate_reward_description` | String | Advocate reward description. | | `yuko_share_channels` | Array | Sharing channels enabled in your program (Twitter, Facebook, Email, WhatsApp). | | `yuko_registration_source` | String | Where they registered from (auto-enroll, manual). | #### Friend reward unlocked * **Klaviyo metric:** *Friend reward unlocked* * **Event slug:** `referral_friend_reward_claimed` * **When it fires:** A friend's reward has been issued (their first qualifying order completed). This event fires on the **friend's** profile, not the advocate's. | Property | Type | Description | | - | - | - | | `yuko_friend_email` | String | Friend's email (matches the Klaviyo profile this fires on). | | `yuko_friend_first_name` | String | Friend's first name. | | `yuko_referral_code_used` | String | The advocate's code the friend used. | | `yuko_friend_reward_type` | String | Reward type. | | `yuko_friend_reward_value` | Number | Reward value. | | `yuko_friend_reward_code` | String | The Shopify discount code issued to the friend. | | `yuko_friend_reward_expires_at` | ISO 8601 string | Expiry. | | `yuko_friend_reward_description` | String | Description. | | `yuko_referred_by` | String | The advocate's name. | **Experimental fields.** The three properties below are present in the payload today but their values are **hardcoded placeholder constants** in the current backend code. They will be replaced by real values in a future release — **do not rely on them in production flows.** | Property | Type | Current placeholder value | Intended meaning (when finalised) | | - | - | - | - | | `yuko_total_claims` | Integer | `6` | Total times any friend has claimed via this advocate's code. | | `yuko_total_conversions` | Integer | `4` | Total of those that converted to a paid order. | | `yuko_claim_source` | String | `"referral_landing_page"` | Source surface where the friend clicked through. | #### Referral Completed * **Klaviyo metric:** *Referral Completed* * **Event slug:** `referral_completed` * **When it fires:** A referral fully completes — friend places a qualifying order *and* the advocate's reward is issued. | Property | Type | Description | | - | - | - | | `yuko_friend_email` | String | Friend's email. | | `yuko_friend_first_name` | String | Friend's first name. | | `yuko_friend_order_id` | String | Shopify order ID. | | `yuko_friend_order_total` | Number | Order total. | | `yuko_friend_discount_used` | String | The discount code the friend used. | | `yuko_friend_discount_amount` | Number | Discount amount applied. | | `yuko_advocate_reward_type` | String | Advocate reward type. | | `yuko_advocate_reward_value` | Number | Advocate reward value. | | `yuko_advocate_reward_code` | String | Advocate's discount code (if reward is a discount). | | `yuko_advocate_reward_expires_at` | ISO 8601 string | Expiry. | | `yuko_advocate_reward_status` | String | Status. | | `yuko_stat_total_referrals` | Integer | Advocate's total referrals to date. | | `yuko_stat_successful_referrals` | Integer | Advocate's successful referrals. | | `yuko_stat_total_earned` | Integer | Total points / value earned by the advocate via referrals. | | `yuko_stat_pending_rewards` | Integer | Referrals still pending. | #### Referrer Rewarded * **Klaviyo metric:** *Referrer Rewarded* * **Event slug:** `referral_advocate_rewarded` * **When it fires:** Yuko issues the advocate's reward after a successful referral. | Property | Type | Description | | - | - | - | | `yuko_reward_type` | String | Reward type (e.g., `points`, `amount_discount`, `store_credit`). | | `yuko_reward_value` | Number | Reward value. | | `yuko_reward_code` | String | Discount code (if applicable). | | `yuko_reward_expires_at` | ISO 8601 string | Expiry. | | `yuko_triggered_by_friend` | String | Friend's name / email that triggered this reward. | | `yuko_stat_total_referrals` | Integer | Advocate's total referrals. | | `yuko_stat_successful_referrals` | Integer | Successful referrals. | | `yuko_stat_total_earned` | Integer | Total earnings via referrals. | | `yuko_points_awarded` | Integer | If the reward type is points, how many were credited. | | `yuko_new_points_balance` | Integer | Updated points balance (if reward was points). | | `yuko_reward_description` | String | Human-readable description. | *** ### Membership events #### Membership Subscribed * **Klaviyo metric:** *Membership Subscribed* * **Event slug:** `membership_subscribed` * **When it fires:** A customer purchases a membership plan and the contract becomes active. | Property | Type | Description | | - | - | - | | `yuko_membership_tier_name` | String | Plan name. | | `yuko_membership_tier_id` | String | Plan UUID. | | `yuko_membership_price` | Number | Plan price. | | `yuko_membership_billing_interval` | String | `monthly` or `annually`. | | `yuko_membership_icon_url` | String | Plan icon URL. | | `yuko_benefit_1` | String | First benefit title. | | `yuko_benefit_2` | String | Second benefit title. | | `yuko_benefit_3` | String | Third benefit title. | | `yuko_benefit_4` | String | Fourth benefit title. | | `yuko_signup_reward_type` | String | Welcome reward type, if configured. | | `yuko_signup_reward_value` | Number | Welcome reward value. | | `yuko_signup_reward_code` | String | Welcome reward code. | | `yuko_signup_reward_expires_at` | ISO 8601 string | Welcome reward expiry. | | `yuko_signup_points_awarded` | Integer | Bonus points credited at signup. | | `yuko_next_billing_date` | ISO 8601 string | When the next renewal will charge. | | `yuko_signup_source` | String | Where the signup came from. | #### Membership Upgraded * **Klaviyo metric:** *Membership Upgraded* * **Event slug:** `membership_upgraded` * **When it fires:** Customer moves from one plan to a higher-priced plan. | Property | Type | Description | | - | - | - | | `yuko_previous_membership_tier` | String | Old plan name. | | `yuko_previous_membership_price` | Number | Old plan price. | | `yuko_new_membership_tier` | String | New plan name. | | `yuko_new_membership_price` | Number | New plan price. | | `yuko_new_membership_billing_interval` | String | New billing interval. | | `yuko_new_benefits` | String | Newly unlocked benefits. | | `yuko_upgrade_reward_type` | String | Upgrade reward type, if configured. | | `yuko_upgrade_reward_value` | Number | Upgrade reward value. | | `yuko_upgrade_reward_code` | String | Upgrade reward code. | | `yuko_upgrade_reward_expires_at` | ISO 8601 string | Upgrade reward expiry. | #### Membership Downgraded * **Klaviyo metric:** *Membership Downgraded* * **Event slug:** `membership_downgraded` * **When it fires:** Customer moves to a lower-priced plan. | Property | Type | Description | | - | - | - | | `yuko_previous_membership_tier` | String | Old plan. | | `yuko_previous_membership_price` | Number | Old plan price. | | `yuko_new_membership_tier` | String | New plan. | | `yuko_new_membership_price` | Number | New plan price. | | `yuko_new_membership_billing_interval` | String | New billing interval. | | `yuko_benefits_lost` | String | Benefits no longer available. | | `yuko_benefits_retained` | String | Benefits still active. | | `yuko_upgrade_tier_name` | String | The plan they could re-upgrade to. | | `yuko_upgrade_price_difference` | Number | Price difference to re-upgrade. | #### Membership Cancelled * **Klaviyo metric:** *Membership Cancelled* * **Event slug:** `membership_cancelled` * **When it fires:** Customer cancels their plan. | Property | Type | Description | | - | - | - | | `yuko_membership_tier_name` | String | Plan name. | | `yuko_membership_price` | Number | Plan price. | | `yuko_membership_billing_interval` | String | Billing interval. | | `yuko_months_as_member` | Integer | How long they were a member. | | `yuko_benefits_ending_at` | ISO 8601 string | When their benefits stop. | | `yuko_benefits_losing` | String | Benefits they lose. | | `yuko_total_savings_from_membership` | Number | Total they saved while a member. | | `yuko_cancellation_reason` | String | Reason captured at cancellation. | | `yuko_points_balance_retained` | Integer | Points balance kept after cancellation. | | `yuko_vip_tier_retained` | String | VIP tier retained, if any. | #### Membership Reactivated * **Klaviyo metric:** *Membership Reactivated* * **Event slug:** `membership_reactivated` * **When it fires:** A previously-cancelled customer signs up again. | Property | Type | Description | | - | - | - | | `yuko_membership_tier_name` | String | Plan name. | | `yuko_membership_price` | Number | Plan price. | | `yuko_membership_billing_interval` | String | Billing interval. | | `yuko_days_since_cancellation` | Integer | Days since they cancelled. | | `yuko_benefits_restored` | String | Benefits restored. | | `yuko_welcome_back_reward_type` | String | Reactivation bonus type. | | `yuko_welcome_back_reward_value` | Number | Reactivation bonus value. | | `yuko_welcome_back_reward_code` | String | Reactivation bonus code. | | `yuko_points_balance` | Integer | Current points balance. | *** ## Using profile + event data in Klaviyo ### Segments Build segments using profile properties. Examples: * *Diamond VIPs* — `person.yuko_vip_tier == "Diamond"` * *VIPs at risk* — `person.yuko_vip_at_risk == true` * *Customers with 500+ unredeemed points* — `person.yuko_points_balance >= 500` * *Active members* — `person.yuko_membership_status == "active"` * *Has not redeemed in 30 days* — combine with Klaviyo's *Last metric date* using *Redeem Points*. ### Dynamic email content Reference profile properties in any Klaviyo email: ``` Hi {{ person.first_name|default:"there" }}, Your current balance is {{ person.yuko_points_balance|default:0 }} points ({{ person.yuko_points_as_cash_balance|default:0 }} in store credit). You're {{ person.yuko_vip_next_tier_amount_needed }} away from {{ person.yuko_vip_next_tier }}. ``` Reference event properties inside flow-triggered emails: ``` Welcome to {{ event.yuko_new_tier_name }}! You unlocked: {{ event.yuko_benefits_unlocked }} Your new earning rate is {{ event.yuko_new_earning_rate }}x points. ``` ### Flows A common pattern: trigger a flow on a Yuko event, send an email built around event properties, exit. Most useful triggers: * **VIP Tier Upgrade** → Send a celebratory tier email with `yuko_benefits_unlocked`, `yuko_new_earning_rate`, and the per-benefit `yuko_reward_N_code` values. * **Points Expiring Reminder** → Send a redemption nudge with `yuko_points_at_risk`, `yuko_expires_at`, and `yuko_available_reward_1_name`. * **Referral Completed** → Thank the advocate, surface `yuko_stat_successful_referrals` for a count. * **Membership Cancelled** → Win-back flow using `yuko_total_savings_from_membership` to remind them of value. ## Best practices **Disable Yuko's email template if Klaviyo is sending the same one.** Otherwise the customer gets two emails. **Test every flow with a real customer record** before activating. Empty event properties typically mean a configuration issue (e.g., reward not yet generated). **Use `external_id`** to deduplicate Klaviyo profiles when customers change their email. **Include fallbacks in template tags.** `{{ person.yuko_points_balance|default:0 }}` keeps emails clean when properties haven't synced yet. **Don't reference event properties inside campaigns** (they're only meaningful inside flows triggered by that event). Use profile properties for campaigns. ## FAQs Every time Yuko sends one of your selected events for that customer, the profile properties are recomputed and pushed. If you forward only a few events, properties update less often. Profile properties live on the customer record permanently and reflect the **current** state — use them in segments and templates that aren't tied to a specific event. Event properties live on the event itself and reflect the **state at the moment the event fired** — use them inside flows triggered by that event. Example: `yuko_points_balance` (profile) is the customer's current balance. `yuko_points_earned` (event) is the amount earned in this specific transaction. Most often: the customer hasn't reached that part of the program yet (e.g., `yuko_vip_next_tier_amount_needed` is empty for top-tier customers). Or the event was for a non-loyalty action that doesn't carry that property. Always include `default:` in your template tags. Yes — open the Klaviyo integration in Yuko, untick the events and click **Save Events**. Profile properties are only refreshed when a selected event is sent. Use Klaviyo's profile lookup by `external_id`. Yuko writes `external_id` = Shopify customer ID on every profile. No — Klaviyo events are immutable. If a points credit is reversed, Yuko fires a new *Points Adjusted* event with `yuko_adjustment_direction = debit`. Klaviyo already receives Shopify's native *Placed Order* event from Shopify's own integration. Yuko intentionally avoids duplicating it — use Shopify's event in flows, and join Yuko data via profile properties. Not in v1 — one Klaviyo account per Yuko organisation. If you operate multi-store, contact support. ## Related Read and write Yuko data programmatically. Receive real-time event notifications. Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events. Redeem points and apply loyalty discounts at the till. Sync customers, points and tier data into Klaviyo. Sync loyalty data into Omnisend. Send transactional loyalty messages via 13 supported WhatsApp Business API providers. Email marketing & abandoned cart recovery. Award loyalty points for Judge.me reviews. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Kwik Engage Source: https://docs.yuko.so/integrations/kwik-engage Connect Kwik Engage as your WhatsApp Business API provider — templates with optional dynamic CTA buttons sent from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Kwik Engage ## Introduction [Kwik Engage](https://www.kwikengage.ai) is a WhatsApp Business API provider with strong India-region coverage. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send Kwik Engage templates — with or without dynamic CTA buttons — on any loyalty event. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). ## When to use Kwik Engage * You operate primarily in India and want a regional WhatsApp Business API provider. * Your templates include **CTA buttons** with dynamic URL placeholders. * You want to keep template variables and CTA URL variables on separate configuration tracks. ## Before you start You have an active Kwik Engage account with WhatsApp Business API. You have at least one **approved** Kwik Engage template. You have your Kwik Engage API endpoint URL and API key. ## Connect Kwik Engage to Yuko Log in to your Kwik Engage dashboard, copy your API key, and note the API endpoint URL. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations → Kwik Engage**. Paste the key into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **Kwik Engage** card from the provider list. ## Configure the Kwik Engage step in a workflow Kwik Engage splits body parameters from CTA button parameters — toggle CTA buttons on only if your approved template has them. | Field | What it is | Example | | - | - | - | | **Endpoint URL** | Kwik Engage API endpoint URL | `https://api.kwikengage.ai/...` | | **Template Name** | Template identifier (no spaces) | `points_expiring_soon` | | **Language Code** | Template language | `en_US` or `hi_IN` | | **Parameter Count** | Number of body variables (1–10) | `2` | | **Template Parameters** | One value per body variable — supports [shortcodes](/workflows/whatsapp-node#shortcodes) | `{{first_name}}`, `{{points_balance}}` | | **Add CTA Button** *(toggle)* | Enable if the template has dynamic URL buttons | on | | **CTA Button Count** | Number of CTA buttons (1–2) | `1` | | **CTA Button Parameters** | Dynamic URL variables — one per button | `redeem?code={{reward_code}}` | The **Add CTA Button** toggle controls a separate parameter list from the body parameters. Each CTA button parameter fills a dynamic placeholder in the button's URL, defined in the Kwik Engage template. ## Example use case **Points expiring — visit-store button** 1. In Kwik Engage, approve a template called `points_expiring_soon` with two body variables and one CTA button (URL = `https://shop.example.com/account?ref={dynamic}`). Note the endpoint URL. 2. In Yuko Workflows, build: **Trigger: Points Expiring Reminder** → **WhatsApp (Kwik Engage)**. 3. Configure: Endpoint, Template Name = `points_expiring_soon`, Language = `en_US`, Parameter Count = `2`, Parameters = `{{first_name}}`, `{{points_balance}}`. 4. Toggle **Add CTA Button**, set CTA Button Count = `1`, Button Param 1 = `rewards` (plain text works as well as shortcodes). 5. Activate. ## Limitations * **Approved templates only.** Kwik Engage enforces Meta template approval. * **Template name must have no spaces.** Use underscores. * **Up to 10 CTA buttons.** That's the Kwik Engage-side limit. * **No template authoring inside Yuko.** Edit templates in the Kwik Engage dashboard. * **No per-message delivery status surfaced in Yuko.** Check the Kwik Engage dashboard for delivered / read events. ## FAQs Only if your approved template has dynamic URL buttons. Leave the toggle off for plain text templates. The dynamic part of the button's URL. If your template's button URL is `https://shop.example.com/{ref}`, the button param fills the `{ref}` placeholder. Standard WhatsApp Business API language codes — `en_US`, `hi_IN`, `en_GB`, etc. Use whatever matches the language of your approved template. Generate a new key in Kwik Engage, then open **Integrations → Kwik Engage** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Omnisend Source: https://docs.yuko.so/integrations/omnisend Sync customers, points, tier and loyalty events into Omnisend. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Omnisend ## Introduction The Omnisend connector mirrors what the Klaviyo one does — customer profiles, custom properties and loyalty events flow into Omnisend so you can segment and trigger flows on them. ## When to use * Omnisend is your primary email/SMS tool. * You want loyalty events available inside Omnisend's automation flows. * You want VIP segments in Omnisend for targeted campaigns. ## What syncs * **Contact properties** — each event updates the contact with Yuko's `yuko_*` loyalty properties (points balance, VIP tier, referral link and so on) as Omnisend custom properties. * **Events** — the Yuko events you select on the integration page are sent to Omnisend, so you can trigger automations on them. ## Points expiring soon properties Alongside the balance, tier and referral properties, Yuko sends four properties that help you build "use your points before they expire" campaigns: | Property | Type | Description | | - | - | - | | `yuko_points_expiring_in_30_days` | Integer | Points that expire within the next 30 days (includes the 7-day amount). `0` if none. | | `yuko_points_expiring_in_7_days` | Integer | Points that expire within the next 7 days. `0` if none. | | `yuko_points_expiring_in_30_days_as_cash_balance` | Number | The 30-day expiring points expressed in store currency. | | `yuko_points_expiring_in_7_days_as_cash_balance` | Number | The 7-day expiring points expressed in store currency. | The property names are the same as in the [Klaviyo](/integrations/klaviyo#loyalty-profile-properties) integration, which lists the full property set. ## Prerequisites You have an Omnisend account. You have an Omnisend API key. ## Setup Go to **Apps → Yuko Loyalty → Integrations → Omnisend**. Paste your Omnisend API key into **API Key** and click **Connect Integration**. Select the events to send to Omnisend and click **Save Events**. Click **Send Test Events** to send sample events and check them in Omnisend. ## Common use cases * VIP-tier segments in Omnisend. * Loyalty-driven SMS / WhatsApp messages via Omnisend's multi-channel features. * Re-engagement flows triggered by *VIP Tier Downgrade* events. ## Best practices **Pick one tool to send loyalty emails.** Either Yuko or Omnisend, not both. **Test with a real customer record** before activating Omnisend flows. ## FAQs Only if you want it to — disable the corresponding Yuko templates if you do. ## Related Read and write Yuko data programmatically. Receive real-time event notifications. Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events. Redeem points and apply loyalty discounts at the till. Sync customers, points and tier data into Klaviyo. Sync loyalty data into Omnisend. Send transactional loyalty messages via 13 supported WhatsApp Business API providers. Email marketing & abandoned cart recovery. Award loyalty points for Judge.me reviews. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Integrations Source: https://docs.yuko.so/integrations/overview Connect Yuko to your email, WhatsApp, reviews, Shopify POS and automation tools, plus the REST API and Webhooks for custom builds. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations ## What integrations do Integrations let Yuko exchange data with the rest of your stack. Loyalty data lands in your email tool, loyalty events send WhatsApp templates and start Shopify Flow workflows, reviews from your reviews app earn points, store staff redeem points at the till, and your developers can build on the REST API and webhooks. ## The Integrations page The Integrations page has a **category sidebar** on the left and a card grid on the right. Each card shows how the app connects (**OAuth** or **API Key**) and a **Connected** badge once it's set up. Cards are grouped into: 1. **Connected**: integrations you've already set up. Click a card to open its settings. 2. **Available**: integrations you can connect. Click a card to start connecting. 3. **Recommended**: third-party apps Yuko recommends. These open the partner's page in a new tab. ### Categories | Category | What lives here | | - | - | | **All** | Every integration, including Judge.me | | **Email & SMS** | Klaviyo, Omnisend, Retainful | | **WhatsApp** | 13 WhatsApp Business API providers | | **Shopify Flow** | Shopify Flow and Checkout Boost | | **Shopify POS** | Shopify POS (Shopify stores only) | | **Developer** | REST API, Webhooks | | **Recommended** | Recommended third-party apps (Shopify stores only) | A category only appears when it has at least one integration. Some integrations are available on select plans; cards you can't use yet show an upgrade badge. ## Developer tools Create scoped API keys to read and write Yuko data from your code. Subscribe to Yuko events and receive HTTP callbacks. ## Predefined connectors ### Email & SMS Sync loyalty profile properties and events for segments, personalisation and flows. Sync loyalty data and events into Omnisend for email and SMS automations. Email and cart recovery with loyalty data and events layered in. ### WhatsApp 13 WhatsApp Business API providers. Connect one or several and send templates from Yuko workflows. India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. [Learn how the WhatsApp integration works](/integrations/whatsapp) · [Learn about the WhatsApp Workflow node](/workflows/whatsapp-node) ### Shopify Flow Send loyalty, VIP and referral events to Shopify Flow as triggers. ### Shopify POS Let staff redeem points and apply loyalty discounts at the till. ### Checkout Creates a read-only REST API key and signed key for the Checkout Boost app. Listed under the Shopify Flow category. ### Reviews (points for reviews) Award loyalty points when customers write Judge.me reviews. Shown under **All**. Using another reviews app? If it can trigger Shopify Flow, award points with the **Yuko Add Points for Review** action. See [Shopify Flow](/integrations/shopify-flow#the-add-points-for-review-action). ## How connectors work * Each connector authenticates with the partner by **OAuth** or **API Key**. A few, such as Shopify Flow, Shopify POS and Checkout Boost, just need a toggle. * Once connected, the integration moves to the **Connected** section and its page shows the connection status. * Many integrations let you choose what to send, for example which events go to Klaviyo, Omnisend, Retainful or Shopify Flow, or which Judge.me webhooks to register. * To disconnect, open the integration, switch off its toggle and confirm in the dialog. ## Choosing your stack * **Email:** Klaviyo, Omnisend or Retainful. * **WhatsApp:** pick whichever of the 13 providers you already use. See the [WhatsApp overview](/integrations/whatsapp) for a comparison. * **In-store:** Shopify POS for redeeming points at the till. * **Reviews:** Judge.me, or any app that can run the Shopify Flow **Add Points for Review** action. * **Custom builds:** REST API and Webhooks for anything the connectors don't cover. ## Best practices **Connect only what you'll use.** Each active integration is a moving part to maintain and a credential to rotate. **Use webhooks for real-time data.** Polling the REST API is slower and rate-limited. **Test in a development store** before connecting production partners. **Use the category sidebar** to find integrations quickly. ## Recommended reading Read and write Yuko data programmatically. Receive real-time event notifications. Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events. Redeem points and apply loyalty discounts at the till. Sync customers, points and tier data into Klaviyo. Sync loyalty data into Omnisend. Send transactional loyalty messages via 13 supported WhatsApp Business API providers. Email marketing & abandoned cart recovery. Award loyalty points for Judge.me reviews. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # QuickReply.ai Source: https://docs.yuko.so/integrations/quickreply-ai Connect QuickReply.ai as your WhatsApp Business API provider — AI-first automation that supports media headers and dynamic CTA buttons. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → QuickReply.ai ## Introduction [QuickReply.ai](https://www.quickreply.ai) is an AI-first WhatsApp Business API platform. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send QuickReply.ai templates — including media-rich templates and templates with dynamic CTA buttons — on any loyalty event. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). **QuickReply.ai is the only provider that needs TWO credentials.** Other providers need an API key only; QuickReply.ai needs both an **API key** and a **secret key**. ## When to use QuickReply.ai * You want AI-driven WhatsApp automations layered onto loyalty events. * Your templates use rich media headers (image / video / document) and dynamic CTA buttons. * You operate primarily in India / SEA and want a regional AI-focused BSP. ## Before you start You have an active QuickReply.ai account with WhatsApp Business API. You have at least one **approved** QuickReply.ai template. You have your QuickReply.ai **Client ID** and **Secret Key** (found under API settings in your QuickReply.ai dashboard). You know the **Template ID** of the template you want to send (Dashboard → Template → ⋮ → **Copy Template Id**). ## Connect QuickReply.ai to Yuko In your QuickReply.ai dashboard, open the API settings and copy both the Client ID and the Secret Key — you need both. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations → QuickReply.ai**. Paste the Client ID in the **Client ID** field, the secret in the **Secret Key** field, and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **QuickReply.ai** card from the provider list. ## Configure the QuickReply.ai step in a workflow | Field | What it is | Example | | - | - | - | | **Template ID** | The approved template's ID (Dashboard → Template → ⋮ → Copy Template Id) | `6543abc...` | | **Parameter Count** | Number of body variables (1–10) | `2` | | **Template Parameters** | One value per variable — supports [shortcodes](/workflows/whatsapp-node#shortcodes) | `{{first_name}}`, `{{points_balance}}` | | **Media URL** *(optional)* | Public URL for media templates (JPEG/PNG image, MP4 video, or document) | `https://cdn.example.com/welcome.jpg` | | **Button Parameters** *(optional)* | Values for dynamic URL button placeholders (max 5) | `account?email={{email}}` | The **Media URL** must be publicly reachable. If it's behind auth or expires, the template send will fail. **Button parameters** fill the dynamic part of CTA URLs defined in the QuickReply.ai template — e.g., a template with a button `https://shop.example.com/{dynamic}` will substitute the first button param into `{dynamic}`. ## Example use case **Reward unlocked — deep-link to redemption page** 1. In QuickReply.ai, approve a template with an image header and a dynamic CTA URL button. Note the Template ID. 2. In Yuko Workflows, build: **Trigger: Redeem Points** → **WhatsApp (QuickReply.ai)**. 3. Configure: Template ID = (paste), Parameter Count = `2`, Parameters = `{{first_name}}`, `{{reward_code}}`, Media URL = your reward banner image, Button Param 1 = `redeem?code={{reward_code}}`. 4. Activate. ## Limitations * **Approved templates only.** QuickReply.ai enforces Meta template approval. * **Media URL must be public.** No auth-protected URLs. * **Max 5 button parameters** per step. * **No per-message delivery status surfaced in Yuko.** Check the QuickReply.ai dashboard for delivered / read events. ## FAQs QuickReply.ai's API authenticates every request with both a Client ID and a Secret Key. The other providers need a single API key. In the QuickReply.ai dashboard, open the Templates list → click the three-dot menu next to a template → **Copy Template Id**. No. Button params are only required when the template's button URL contains a `{placeholder}` slot. 1. URL returns HTTP 200 unauthenticated. 2. File type matches the template's header type (image / video / document). 3. File size is within WhatsApp's limits. Generate new credentials in QuickReply.ai, then open **Integrations → QuickReply.ai** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new Client ID and Secret Key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # REST API Source: https://docs.yuko.so/integrations/rest-api Read and write Yuko data programmatically — customers, points, rewards, tiers, referrals, memberships. **Where to find this:** API key generation — Shopify admin → Apps → Yuko Loyalty → Integrations → REST API.\ **Reference:** [API Reference](/developer/api/introduction). ## What you can do The Yuko REST API exposes the same data the dashboard shows: * List and retrieve customers and their points balances, tiers, memberships and rewards. * Redeem rewards and add or deduct points. * List rewards, VIP tiers, earning rules, booster campaigns and the referral program. * Read activity feeds, points transactions and referrals. * Estimate the points a cart will earn at checkout. Full endpoint reference is in the **API Reference** tab — this page covers setup and best practices. ## When to use * Custom storefronts (Hydrogen, headless). * Server-side automations that need to read or write Yuko data. * Moving points balances over from another loyalty program (customers must already exist in Yuko; they're synced from your store automatically). * Building admin tools that show Yuko data alongside your other systems. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup Go to **Apps → Yuko Loyalty → Integrations → REST API** and click **Create new key**. Enter a **Private API Key Name** (for example, *Marketing Integration*) so you can tell your keys apart. Under **Select Access Level**, pick one: * **Full Access Key**: read and write access for every API scope. * **Read-Only Key**: read-only access for every API scope. * **Custom Key**: click **Next**, then on the **Customize API Scopes** screen set each scope to **No Access**, **Read Access** or **Read/Write Access**. Click **Create** (or **Create API Key** for a custom key). The **Your Private Key** popup shows the key, which starts with `py_`. Copy it to a password manager or secrets store. Send the key as a Bearer token in the `Authorization` header. Details: [Authentication](/developer/api/authentication). ## Managing keys The **API keys** list shows each key's name, masked token (use **Show token** or **Copy token** to see or copy the full key), status, scopes, when it was last used, and when it expires or was revoked. You can search by token name. To revoke a key, use the **Actions** column and confirm in the **Revoke API key** dialog. Any integration using the key loses access immediately, and this can't be undone. ## Authentication and scopes All requests use Bearer token authentication. Each key only works for the scopes it was given; a request outside them returns `403 insufficient_scope`. See **[Authentication](/developer/api/authentication)** and **[Scopes](/developer/api/scopes)**. ## Pagination, errors, rate limits * **Pagination:** [Classic Pagination](/developer/api/classic-pagination) * **Errors:** [Errors](/developer/api/errors) * **Rate limits:** [Rate Limits](/developer/api/rate-limits) ## Best practices **Give each key only the scopes it needs.** Use a **Custom Key** instead of full access where you can. **Rotate API keys regularly** and immediately when a developer leaves: create a new key, switch your integration to it, then revoke the old one. **Cache configuration data** such as rewards, VIP tiers and earning rules instead of fetching it on every request. It rarely changes, and caching keeps you well under the rate limit. **Tag every key with a name** so you can revoke a single integration without breaking others. ## FAQs Strongly recommended. It limits blast radius if one is leaked. Yes. In **Integrations → REST API**, use **Show token** or **Copy token** on the key in the **API keys** list. If you think a key has leaked, create a new key and revoke the old one. See [Rate Limits](/developer/api/rate-limits) in the API Reference. Yes. In **Integrations → REST API**, use the **Actions** column on the key and confirm **Revoke**. Revocation is immediate and can't be undone. ## Related Read and write Yuko data programmatically. Receive real-time event notifications. Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events. Redeem points and apply loyalty discounts at the till. Sync customers, points and tier data into Klaviyo. Sync loyalty data into Omnisend. Send transactional loyalty messages via 13 supported WhatsApp Business API providers. Email marketing & abandoned cart recovery. Award loyalty points for Judge.me reviews. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Retainful Source: https://docs.yuko.so/integrations/retainful Email marketing and abandoned cart recovery powered by Yuko loyalty data. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Retainful ## Introduction The Retainful connector flows Yuko's customer and loyalty data into Retainful so you can use it in abandoned-cart and lifecycle email campaigns. ## When to use * You're already on Retainful for email. * You want loyalty data segmenting your Retainful sends. ## Prerequisites You have a Retainful account and API key. ## Setup Go to **Apps → Yuko Loyalty → Integrations → Retainful**. Paste your Retainful API key into **API Key** and click **Connect Integration**. Select the events to send to Retainful and click **Save Events**. Each event also updates the contact's `yuko_*` loyalty properties as Retainful custom properties. Click **Send Test Events** to send sample events and check them in Retainful. ## Points expiring soon properties Alongside the balance, tier and referral properties, Yuko sends four properties that help you build "use your points before they expire" campaigns: | Property | Type | Description | | - | - | - | | `yuko_points_expiring_in_30_days` | Integer | Points that expire within the next 30 days (includes the 7-day amount). `0` if none. | | `yuko_points_expiring_in_7_days` | Integer | Points that expire within the next 7 days. `0` if none. | | `yuko_points_expiring_in_30_days_as_cash_balance` | Number | The 30-day expiring points expressed in store currency. | | `yuko_points_expiring_in_7_days_as_cash_balance` | Number | The 7-day expiring points expressed in store currency. | The property names are the same as in the [Klaviyo](/integrations/klaviyo#loyalty-profile-properties) integration, which lists the full property set. ## Best practices **Use Retainful for cart-abandonment**, Yuko Workflows for loyalty-specific automations. ## Related Read and write Yuko data programmatically. Receive real-time event notifications. Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events. Redeem points and apply loyalty discounts at the till. Sync customers, points and tier data into Klaviyo. Sync loyalty data into Omnisend. Send transactional loyalty messages via 13 supported WhatsApp Business API providers. Email marketing & abandoned cart recovery. Award loyalty points for Judge.me reviews. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Shopify Flow Source: https://docs.yuko.so/integrations/shopify-flow Send Yuko loyalty, VIP and referral events to Shopify Flow as triggers, and award review points from other apps with the Add Points for Review action. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Shopify Flow ## Introduction The Shopify Flow integration sends Yuko events to [Shopify Flow](https://apps.shopify.com/flow) as workflow triggers. Anything Flow can do next, such as tagging a customer, notifying staff or updating a metafield, can run when a customer earns points, moves up a VIP tier or completes a referral. Each trigger carries the customer's loyalty profile plus details about the event, so you can use them in Flow conditions and actions. Yuko also adds one Flow **action**, **Yuko Add Points for Review**, which lets other reviews apps award points through your **Write a review** earn rule. ## When to use * You already automate your store with Shopify Flow. * You want loyalty events to drive Shopify-native actions (customer tags, staff alerts, metafields). * You use a reviews app other than Judge.me and want reviews to earn loyalty points. ## Before you start Shopify Flow is installed on your store. Yuko is installed and your loyalty program is enabled. ## Set up the triggers In Yuko, go to **Apps → Yuko Loyalty → Integrations → Shopify Flow** and switch the toggle on. The status badge changes to **Enabled**. In the **Events** section, select the Yuko events you want to send to Shopify Flow, then click **Save Events**. Only selected events are sent. In Shopify admin, open **Shopify Flow**, create a workflow and pick a Yuko trigger, for example **Yuko VIP Tier Upgrade**. Add conditions and actions as usual, then turn the workflow on. Back in Yuko, click **Send Test Events** to send sample data for the selected events, so you can check your workflows. ## Available triggers | Shopify Flow trigger | Event in Yuko | Fires when | | - | - | - | | **Yuko Loyalty Program Joined** | Joined Loyalty Program | A customer joins the loyalty program. | | **Yuko Loyalty Earn Reward** | Earn Points | A customer earns loyalty points. | | **Yuko Loyalty Redeem Points** | Redeem Points | A customer redeems points for a reward. | | **Yuko Reward Expiring** | Reward Expiry Reminder | A redeemed reward is about to expire. | | **Yuko Points Expiring** | Points Expiring Reminder | A customer's points are about to expire. | | **Yuko Loyalty Birthday Reminder** | Birthday Reminder | A customer's birthday is coming up and your Birthday earn rule is active. | | **Yuko Loyalty Anniversary Reminder** | Anniversary Reminder | A customer's loyalty anniversary is coming up and your Anniversary earn rule is active. | | **Yuko VIP Tier Entry** | VIP Tier Entry | A customer enters a VIP tier for the first time. | | **Yuko VIP Tier Upgrade** | VIP Tier Upgrade | A customer moves up to a higher VIP tier. | | **Yuko VIP Tier Downgrade** | VIP Tier Downgrade | A customer drops to a lower VIP tier. | | **Yuko Referral Friend Reward Claimed** | Friend reward unlocked | A referred friend claims their reward. | | **Yuko Referral Completed** | Referral Completed | A referral is completed. | | **Yuko Referral Advocate Rewarded** | Referrer Rewarded | The referrer receives their reward. | ## Trigger data Every trigger passes two objects to Flow: **Yuko Customer** and **Yuko Payload**. ### Yuko Customer (all triggers) | Group | Fields | | - | - | | Profile | `yuko_email`, `yuko_first_name`, `yuko_last_name`, `yuko_phone_number`, `yuko_platform_customer_id`, `yuko_shopify_customer_id`, `yuko_joined_at`, `yuko_total_spent`, `yuko_date_of_birth`, `yuko_loyalty_anniversary_date` | | Points | `yuko_points_balance`, `yuko_points_as_cash_balance`, `yuko_lifetime_points_earned`, `yuko_points_expire_at`, `yuko_points_to_next_reward` | | Points expiring soon | `yuko_points_expiring_in_30_days`, `yuko_points_expiring_in_7_days`, `yuko_points_expiring_in_30_days_as_cash_balance`, `yuko_points_expiring_in_7_days_as_cash_balance` | | VIP | `yuko_vip_tier`, `yuko_vip_tier_entry_date`, `yuko_vip_retention_expires_at`, `yuko_vip_qualifying_value`, `yuko_vip_next_tier`, `yuko_vip_next_tier_amount_needed`, `yuko_vip_progress_percentage`, `yuko_vip_at_risk`, `yuko_vip_is_entry_tier` | | Referrals | `yuko_referral_url`, `yuko_referral_code`, `yuko_total_referrals`, `yuko_successful_referrals` | | Membership | `yuko_membership_tier`, `yuko_membership_status`, `yuko_membership_renewal_date` | The 30-day expiring values include the points expiring in the next 7 days. ### Yuko Payload (per trigger) | Trigger | Fields | | - | - | | Loyalty Program Joined | `yuko_signup_source`, `yuko_signup_points_awarded`, `yuko_new_balance`, `yuko_entry_tier_name`, `yuko_entry_tier_is_entry`, `yuko_first_reward_name`, `yuko_first_reward_points_required`, `yuko_first_reward_points_needed`, `yuko_referral_code`, `yuko_referral_url`, `yuko_all_tiers`, `yuko_earning_rule` | | Loyalty Earn Reward | `yuko_points_earned`, `yuko_new_balance`, `yuko_trigger_name`, `yuko_trigger_order_id`, `yuko_trigger_order_total`, `yuko_earning_rule`, `yuko_vip_tier_multiplier`, `yuko_base_points`, `yuko_bonus_points`, `yuko_total_redeemable_cash`, `yuko_available_rewards_count`, `yuko_points_to_next_reward`, `yuko_points_as_cash` | | Loyalty Redeem Points | `yuko_points_spent`, `yuko_new_balance`, `yuko_reward_type`, `yuko_reward_value`, `yuko_reward_code`, `yuko_reward_expires_at`, `yuko_reward_minimum_purchase`, `yuko_reward_description` | | Reward Expiring | `yuko_reward_type`, `yuko_reward_value`, `yuko_reward_code`, `yuko_reward_expires_at`, `yuko_reward_description`, `yuko_days_until_expiry`, `yuko_urgency` | | Points Expiring | `yuko_points_at_risk`, `yuko_total_balance`, `yuko_expires_at`, `yuko_days_until_expiry`, `yuko_urgency`, `yuko_prevention_action`, `yuko_points_as_cash_at_risk`, `yuko_available_reward_1_name`, `yuko_available_reward_2_name` | | Loyalty Birthday Reminder | `yuko_birthday_points_awarded`, `yuko_new_balance`, `yuko_birthday_base_points`, `yuko_birthday_tier_bonus`, `yuko_birthday_tier_multiplier`, `yuko_current_vip_tier` | | Loyalty Anniversary Reminder | `yuko_years_as_member`, `yuko_anniversary_points_awarded`, `yuko_new_balance`, `yuko_lifetime_points_earned`, `yuko_lifetime_orders`, `yuko_lifetime_spend`, `yuko_current_vip_tier` | | VIP Tier Entry | `yuko_tier_name`, `yuko_tier_id`, `yuko_tier_icon_url`, `yuko_tier_is_entry`, `yuko_benefits_unlocked`, `yuko_all_tiers`, `yuko_next_tier_name`, `yuko_next_tier_threshold`, `yuko_next_tier_amount_needed`, `yuko_next_tier_progress_percentage`, `yuko_earning_rate`, plus up to three tier rewards (`yuko_reward_1_type`, `_value`, `_description`, `_code`, `_expires_at`, and the same for rewards 2 and 3) | | VIP Tier Upgrade | `yuko_previous_tier_name`, `yuko_previous_tier_id`, `yuko_new_tier_name`, `yuko_new_tier_id`, `yuko_new_tier_icon_url`, `yuko_qualifying_value`, `yuko_threshold_crossed`, `yuko_qualifying_event_type`, `yuko_qualifying_event_order_id`, `yuko_qualifying_event_order_total`, `yuko_benefits_unlocked`, `yuko_new_earning_rate`, `yuko_previous_earning_rate`, `yuko_next_tier_name`, `yuko_next_tier_threshold`, `yuko_next_tier_amount_needed`, `yuko_next_tier_progress_percentage`, `yuko_tier_stats_percentile`, `yuko_tier_stats_total_in_tier`, `yuko_all_tiers`, plus up to three tier rewards (same fields as VIP Tier Entry) | | VIP Tier Downgrade | `yuko_previous_tier_name`, `yuko_new_tier_name`, `yuko_new_tier_icon_url`, `yuko_qualifying_value`, `yuko_previous_threshold`, `yuko_new_threshold`, `yuko_shortfall`, `yuko_benefits_lost`, `yuko_benefits_retained`, `yuko_regain_tier_name`, `yuko_regain_amount_needed` | | Referral Friend Reward Claimed | `yuko_friend_email`, `yuko_friend_first_name`, `yuko_referral_code_used`, `yuko_friend_reward_type`, `yuko_friend_reward_value`, `yuko_friend_reward_code`, `yuko_friend_reward_expires_at`, `yuko_friend_reward_description`, `yuko_referred_by`, `yuko_total_claims`, `yuko_total_conversions`, `yuko_claim_source` | | Referral Completed | `yuko_friend_email`, `yuko_friend_first_name`, `yuko_friend_order_id`, `yuko_friend_order_total`, `yuko_friend_discount_used`, `yuko_friend_discount_amount`, `yuko_advocate_reward_type`, `yuko_advocate_reward_value`, `yuko_advocate_reward_code`, `yuko_advocate_reward_expires_at`, `yuko_advocate_reward_status`, `yuko_stat_total_referrals`, `yuko_stat_successful_referrals`, `yuko_stat_total_earned`, `yuko_stat_pending_rewards` | | Referral Advocate Rewarded | `yuko_reward_type`, `yuko_reward_value`, `yuko_reward_code`, `yuko_reward_expires_at`, `yuko_triggered_by_friend`, `yuko_stat_total_referrals`, `yuko_stat_successful_referrals`, `yuko_stat_total_earned`, `yuko_points_awarded`, `yuko_new_points_balance`, `yuko_reward_description` | In the birthday and anniversary reminders, `yuko_birthday_points_awarded` and `yuko_anniversary_points_awarded` hold the points your earn rule is set to award. ## The Add Points for Review action If your reviews app can trigger Shopify Flow, use the **Yuko Add Points for Review** action to award review points. Each run counts as a published review and earns points through your [Write a review](/loyalty/ways-to-earn/write-a-review) earn rule. | Field | What to map | | - | - | | **Customer identifier** | The reviewer's customer ID or email from your reviews app's trigger. | | **Product ID** | The Shopify product ID of the reviewed product. | | **Photo Url** | The review's photo URL. If it has a value, the review also earns the media bonus when **Enable Media Earning** is on. | Enable the **Write a review** earn rule in Yuko and set the points. In Shopify Flow, start with your reviews app's "review created" (or similar) trigger. Add the **Yuko Add Points for Review** action and map the three fields from the trigger. New reviews now earn loyalty points. The action needs a customer and a product that already exist in Yuko; otherwise the run fails. Points are awarded once per customer per product, and the media bonus once. Using Judge.me? Use the [Judge.me integration](/integrations/judgeme) instead. It connects directly without Shopify Flow. ## Example use cases * **Tag VIPs:** **Yuko VIP Tier Upgrade** → condition on `yuko_new_tier_name` → add a customer tag such as `vip-gold`. * **Points expiry outreach:** **Yuko Points Expiring** → condition on `yuko_points_at_risk` → send an internal email to your retention team. * **Birthday prep:** **Yuko Loyalty Birthday Reminder** → add a `birthday-this-month` tag for a store-wide campaign. * **Referral alert:** **Yuko Referral Completed** → condition on `yuko_friend_order_total` → notify staff in Slack. ## Limitations * **Selected events only.** Yuko sends only the events you selected and saved. * **Shopify Flow limits apply.** Flow has its own run limits; see Shopify's documentation. * **Review points need a supported app.** The Add Points for Review action works with any reviews app that triggers Shopify Flow and exposes the customer, product and photo fields. ## Best practices **Use Flow for Shopify-native side effects** (tags, metafields, staff notifications). Use [Yuko Workflows](/workflows/overview) for loyalty-side automations such as emails, WhatsApp messages and points. **Don't duplicate logic in both tools.** Pick one home for each automation. **Send test events before going live** so you can check field mappings in Flow. ## FAQs Yuko Workflows are loyalty-native (emails, WhatsApp, points, coupons). Shopify Flow is Shopify-native (tags, orders, staff alerts). Use each for what it does best. Check that the Shopify Flow integration is **Enabled** in Yuko, that the event is selected under **Events** and saved, and that the Flow workflow is turned on. The action comes with the Yuko app in Shopify Flow. It needs the **Write a review** earn rule to be active so the review can earn points. ## Related Read and write Yuko data programmatically. Receive real-time event notifications. Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events. Redeem points and apply loyalty discounts at the till. Sync customers, points and tier data into Klaviyo. Sync loyalty data into Omnisend. Send transactional loyalty messages via 13 supported WhatsApp Business API providers. Email marketing & abandoned cart recovery. Award loyalty points for Judge.me reviews. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Shopify POS Source: https://docs.yuko.so/integrations/shopify-pos Let store staff redeem loyalty points and apply loyalty discounts at the till with the Yuko tile for Shopify POS. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Shopify POS ## Introduction The **Shopify POS** integration brings your loyalty program into your physical store. Once it's on, a **Yuko tile** appears on the Shopify POS smart grid. When staff add a customer to the cart, the tile shows that customer's loyalty status. Tapping it opens a loyalty screen where staff can redeem points for a discount, or apply a loyalty discount the customer already has. Redemptions at the till use two POS-only reward types: [POS Amount Discount](/loyalty/ways-to-redeem/pos-amount-discount) and [POS Percentage Discount](/loyalty/ways-to-redeem/pos-percentage-discount). ## When to use it * You sell in person with Shopify POS as well as online. * You want in-store customers to spend their points without going through the online store. * You want staff to see a customer's points balance and available discounts at checkout. ## Before you start Your store runs on Shopify and uses Shopify POS. Your loyalty program is enabled in Yuko. Staff who use the tile sign in to POS with an account that has access to the Yuko app. Shopify POS is available on select plans. ## Set up Shopify POS Go to **Apps → Yuko Loyalty → Integrations → Shopify POS** and switch on the **Shopify POS Integration** toggle. The status badge changes from **Disabled** to **Enabled**. Go to **Loyalty → Programs → Ways to redeem → Add another way** and add a **POS Amount Discount** or **POS Percentage Discount** reward. Only these two reward types can be redeemed at the till. Back on the Shopify POS integration page, edit the tile and screen text in the editor below the toggle, then click **Save** in the save bar. See [Customise the POS text](#customise-the-pos-text). In the Shopify POS app, edit the smart grid on the home screen and add the **Yuko** tile. ## How it works at the till ### The smart grid tile The tile title defaults to **Loyalty Program**. Its subtitle changes with the customer on the cart: | Customer on the cart | Default subtitle | | - | - | | No customer added | Add customer | | Customer has never earned points | Introduce loyalty program | | Customer has one unused loyalty discount | `[reward_count] reward available` | | Customer has several unused loyalty discounts | `[reward_count] rewards available` | | No unused discounts, but enough points for a POS reward | Reward available | | Not enough points for any POS reward | `Not enough [points_label] to redeem` | When the customer has unused loyalty discounts, the tile also shows a count badge. ### The loyalty screen Tapping the tile opens the loyalty screen. It shows the customer's points balance and a **Redeem points** button, plus two tabs: * **How it works**: up to six steps that explain the program, so staff can introduce it to customers. * **Loyalty discounts**: discount codes the customer already holds from POS rewards. Staff tap **Apply** to add one to the cart. ### Redeeming points for a new discount 1. Staff tap **Redeem points**. The **Redeem new discount** page lists **Available rewards**: every active POS reward. 2. Staff tap **Redeem** on a reward the customer can afford. For rewards where the customer chooses how many points to spend, staff pick the amount within the reward's range and step. 3. A confirmation popup appears. After staff confirm with **Apply reward**, Yuko deducts the points, creates a discount code and applies it to the cart. If the cart total is below a reward's minimum order value, the reward shows how much more the customer needs to add. ### Applying an existing loyalty discount In the **Loyalty discounts** tab, staff tap **Apply** next to a code, then confirm with **Apply to cart**. The code is marked **Applied** once it's in the cart. Both confirmation popups warn that a loyalty discount may not apply if another discount is already in the cart. Shopify applies only the best discount unless both discounts allow combinations. ### Status banners A banner under the customer tells staff what to do next: * **No customer on the cart**: "Add customer to earn loyalty points." * **Customer has never earned points**: "Customer has never earned loyalty points. Ask them about the loyalty program." * **Cart has no products**: "Add a product to the cart to apply discount." Banned customers can't redeem points or see loyalty discounts at the till. ## Customise the POS text While the integration is enabled, the Shopify POS page shows a text editor with a live preview. It has four tabs: | Tab | What you can edit | | - | - | | **POS home** | **Smart grid tile**: the tile title (up to 30 characters). **Tile status text**: pick a **Customer status** and edit its subtitle (up to 40 characters each). | | **Home** | **Header** (page title, Redeem points button), **Status banners** (pick a **Cart status** to edit its banner), **Tabs** (both tab names), **Discounts** (Apply button, Applied label), **Empty state** (no discounts text), **Reward redeem popup** and **Discount code popup** (title, message, confirm and cancel buttons) | | **How it works** | The tab's title and 1 to 6 steps, each with a title and description. Drag steps to reorder them. | | **Redeem page** | **Redeem page** (page title, Available rewards title, Redeem button), **Empty state** (no rewards text), **Minimum cart value** text, and **Increment reward range** text (pick which **Reward limits** apply to edit each variant) | Every field needs a value; each starts with Yuko's default text. ### Placeholders | Placeholder | Replaced with | Where you can use it | | - | - | - | | `[points_label]` | Your points name (for example, "points") | Any field | | `[reward_count]` | The number of unused loyalty discounts | Tile subtitles for one or several rewards | | `[minimum_amount]` | The reward's minimum order value | Minimum cart value text | | `[remaining_amount]` | How much more the customer needs to add | Minimum cart value text | | `[min_points]`, `[max_points]`, `[step_points]` | The reward's minimum, maximum and step | Increment reward range text | ## Disable Shopify POS Switch off the **Shopify POS Integration** toggle and confirm **Disable** in the **Disable Shopify POS** dialog. Loyalty features stop working in POS straight away; the tile shows "Program unavailable". Your POS rewards and the text you saved are kept. ## Limitations * **Shopify only.** The integration and its rewards are not available on other platforms. * **POS rewards only.** Online rewards (amount discount, free shipping, store credit and so on) can't be redeemed at the till, and POS rewards can't be redeemed online. * **A customer must be on the cart.** Staff can browse the reward list without a customer, but can't redeem or apply anything. * **Discount combinations follow Shopify's rules.** If the cart already has a discount, the loyalty discount may not apply. * **Staff permissions.** Staff signed in without access to the Yuko app see "Missing app permissions / please sign in with an account that has app access". * **Online connection needed.** When POS is offline, the tile shows "Offline - reconnect to redeem". ## FAQs Check that you've created at least one active **POS Amount Discount** or **POS Percentage Discount** reward and that the integration is enabled. If no POS rewards exist, the Redeem page shows the "No discount available" text. It counts discount codes the customer has already redeemed from POS rewards and not used yet. It doesn't count rewards they could redeem with their points. Yes, for POS rewards set up so the customer chooses the amount. Staff pick a points amount within the reward's minimum, maximum and step. The default **How it works** text tells staff that customers with a name, email or phone number earn points on their order. Earning follows your [Place an order](/loyalty/ways-to-earn/place-an-order) earn rule, so add the customer to the cart before checkout. No. Your saved text is kept and used again when you re-enable it. ## Related A fixed amount off an in-store order. A percentage off an in-store order. All reward types in Yuko. Browse every integration. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # WATI Source: https://docs.yuko.so/integrations/wati Connect WATI as your WhatsApp Business API provider — named-parameter templates from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → WATI ## Introduction [WATI](https://www.wati.io) is a global WhatsApp Business API platform known for its template editor and team inbox. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send WATI templates whenever a loyalty event fires. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). ## When to use WATI * You want a polished template editor and a shared team inbox. * You operate globally and want a BSP with broad regional coverage. * Your templates use **named** parameters (not positional) and you prefer that style. ## Before you start You have an active WATI account with WhatsApp Business API. You have at least one **approved** WATI template. You have your WATI API key and your **Client ID** (visible in the API base URL `live-mt-server.wati.io/{clientId}`). You know your **Channel Number** (the WhatsApp Business sender phone number with country code). ## Connect WATI to Yuko Log in to your WATI dashboard, copy your API access token, and note the Client ID from your API base URL. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations → WATI**. Paste the access token into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **WATI** card from the provider list. ## Configure the WATI step in a workflow WATI uses **named** template parameters. Each parameter has both a name (matching the variable in your approved template) and a value. | Field | What it is | Example | | - | - | - | | **Client ID** | Your WATI client ID (from the API URL) | `12345` | | **Template Name** | The approved template name from your WATI dashboard | `order_update` | | **Broadcast Name** | A label to track this broadcast in WATI analytics | `loyalty_tier_upgrade` | | **Channel Number** | Your WhatsApp Business sender number with country code | `918888000000` | | **Parameter Count** | Number of named parameters the template expects (1–10) | `3` | | **Template Parameters** | Name + value pairs — values support [shortcodes](/workflows/whatsapp-node#shortcodes) | `customer_name` = `{{first_name}}` | **Parameter names must match the template variables exactly.** If your WATI template defines `{{customer_name}}` and `{{coupon_code}}`, use those exact names in the parameter list — not `name` and `code`. ## Example use case **Order confirmation with order total** 1. Approve a template in WATI called `order_shipped` with three named variables: `customer_name`, `order_number`, `order_total`. 2. In Yuko Workflows, build: **Trigger: Fulfilled Order** → **WhatsApp (WATI)**. 3. Set Template Name = `order_shipped`, Broadcast Name = `shipped_notifications`, Channel Number = your sender number, Parameter Count = `3`. 4. Add three parameters: `customer_name` = `{{customer_name}}`, `order_number` = `{{order_id}}`, `order_total` = `{{order_total}}`. 5. Activate. ## Limitations * **Approved templates only.** WATI enforces Meta template approval. * **Named parameters, not positional.** Names in Yuko must match the names in the WATI template body. * **No template authoring inside Yuko.** Edit templates in the WATI dashboard. * **No per-message delivery status surfaced in Yuko.** Check the WATI dashboard for delivered / read events. ## FAQs 1. Template name exact match. 2. Template approved in WATI. 3. Parameter **names** match the template variables. 4. Channel number is in international format with country code. 5. Customer has a phone number in Shopify. A WATI-side label for grouping broadcast attempts in their analytics. Pick a name per use case (e.g., `tier_upgrade_diamond`). Yes — connect WATI once, and pick the Channel Number per workflow step. Each step can use a different sender number. Generate a new access token in WATI, then open **Integrations → WATI** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Webhooks Source: https://docs.yuko.so/integrations/webhooks Receive real-time HTTP callbacks when Yuko events happen — the right way to integrate Yuko with anything else. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Webhooks ## What webhooks do Webhooks notify your endpoint the moment a Yuko event happens — a customer earned points, a reward was redeemed, a tier changed. Faster, cheaper and more reliable than polling the REST API. ## When to use * You're syncing Yuko data into your data warehouse. * You're triggering downstream automations (Slack alerts, internal dashboards). * You're integrating Yuko with a tool that doesn't have a Yuko connector. * You're building real-time UX around loyalty events. ## Available events * `customer.points.credited` * `customer.points.debited` * `customer.reward.issued` * `customer.reward.redeemed` * `customer.tier.changed` * `customer.referral.completed` * `membership.contract.activated` * `membership.contract.cancelled` * `membership.contract.failed` More events may be available depending on your Yuko version. Check the dashboard for the canonical list. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You have a publicly reachable HTTPS endpoint that can receive POST requests. The endpoint can verify a signature on the request (recommended). ## Setup Go to **Apps → Yuko Loyalty → Integrations → Webhooks**. Click **New webhook**. Enter: * **Endpoint URL** — your HTTPS receiver. * **Events** — pick which events to receive. * **Description** — a label for your records. Yuko shows a one-time signing secret. Store it in your endpoint's environment. Click **Send test**. Check your endpoint received and accepted the payload. ## Payload format Every webhook is a POST with JSON: ```json theme={null} { "event": "customer.points.credited", "created_at": "2026-05-06T10:31:00Z", "data": { "customer": { "id": "...", "email": "..." }, "points_value": 50, "campaign": { "id": "...", "name": "Place an Order" } } } ``` Full payload schemas per event are in the dashboard. ## Verifying signatures Every webhook includes an `X-Yuko-Signature` header. Verify: 1. Compute HMAC-SHA256 of the request body using your signing secret. 2. Compare to the header (constant-time). 3. Reject if it doesn't match. ## Retries and idempotency * Yuko retries failed deliveries with exponential backoff for 24 hours. * Each delivery has a unique `event_id` — use it to dedupe on your side. * Respond `2xx` within 30 seconds for success. ## Best practices **Verify signatures.** It's the only way to be sure the request came from Yuko. **Be idempotent.** Use the `event_id` to ignore duplicates from retries. **Respond fast.** Push the actual processing to a queue and respond `200` quickly. **Monitor delivery failures.** The webhook dashboard shows recent failures — check it weekly. ## FAQs Yuko retries with exponential backoff for 24 hours. After that, the event is dropped from the queue but visible in the dashboard's failed-deliveries log. Yes — create one webhook per endpoint. Edit the webhook and click **Rotate secret**. The old secret stops working after a 24-hour overlap. ## Related Read and write Yuko data programmatically. Receive real-time event notifications. Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events. Redeem points and apply loyalty discounts at the till. Sync customers, points and tier data into Klaviyo. Sync loyalty data into Omnisend. Send transactional loyalty messages via 13 supported WhatsApp Business API providers. Email marketing & abandoned cart recovery. Award loyalty points for Judge.me reviews. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Whamaa Source: https://docs.yuko.so/integrations/whamaa Connect Whamaa as your WhatsApp Business API provider and send approved template messages, with optional CTA buttons, from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Whamaa ## Introduction Whamaa is a WhatsApp Business API platform for sending template messages. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send your approved Whamaa templates whenever a loyalty event fires: points earned, reward redeemed, tier upgraded, points about to expire and so on. For the provider-agnostic overview of how Yuko's WhatsApp integration works, see [WhatsApp](/integrations/whatsapp). ## When to use Whamaa * You already send WhatsApp messages through Whamaa. * You want loyalty events to trigger the same approved templates you use elsewhere. * You want URL buttons in your messages that link each customer to a personalised page. ## Before you start You have an active Whamaa account connected to the WhatsApp Business API. You have at least one **approved** template in Whamaa. You have your Whamaa API key. ## Connect Whamaa to Yuko Copy the API key from your Whamaa account. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations**, pick the **WhatsApp** category from the left sidebar, and click **Whamaa**. Paste the key into **API Key** and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **Whamaa** card from the provider list. ## Configure the Whamaa step in a workflow | Field | What it is | Example | | - | - | - | | **Template Name** | Approved template name from your Whamaa dashboard (no spaces) | `loyalty_points_earned` | | **Language Code** | The template's language code | `en`, `hi`, `ar` | | **Add CTA Button** *(optional)* | Turn on to add URL call-to-action buttons with dynamic suffixes | On | | **CTA Button Count** | How many URL buttons the template has (1–2). Shown when **Add CTA Button** is on. | `1` | | **CTA Button URL Suffixes** | One dynamic suffix per button, appended to the button's base URL in the template. Supports [shortcodes](/workflows/whatsapp-node#shortcodes). | `{{reward_code}}` | | **Parameter Count** | Number of body variables in the template (1–10) | `2` | | **Template Parameters** | One value per body variable, in order. Supports [shortcodes](/workflows/whatsapp-node#shortcodes). | `{{first_name}}`, `{{points_balance}}` | You must fill in exactly as many parameters and button suffixes as the counts you set. Template names can't contain spaces. The **Template Name**, **Language Code**, parameter count and number of URL buttons must match the approved template in Whamaa exactly. A mismatch is the most common reason a send fails. If a button suffix resolves to an empty value at send time, Yuko sends `?from=yuko` instead so the button still opens a valid link. Yuko sends the customer's phone number from Shopify as stored, including the country code. ## Example use case **Reward-redeemed message with a shop link** 1. In Whamaa, get a template called `loyalty_reward_redeemed` approved, with two body variables (first name, reward name) and one URL button whose base URL is your store's discount link. 2. In Yuko Workflows, build: **Trigger: Redeem Points** → **WhatsApp (Whamaa)**. 3. Set Template Name = `loyalty_reward_redeemed`, Language Code = `en`, Parameter Count = `2`, Parameters = `{{first_name}}`, `{{reward_name}}`. 4. Turn on **Add CTA Button**, set CTA Button Count = `1`, and Button 1 URL Suffix = `{{reward_code}}`. 5. Activate the workflow. ## Limitations * **Approved templates only.** Meta must approve every template before it can be sent. * **No template authoring inside Yuko.** Create and edit templates in Whamaa. * **Up to 10 body parameters and 2 URL buttons per step.** * **No delivery status in Yuko.** The workflow node records the send as pending, completed or failed based on Whamaa's API response, not on delivered or read events. ## FAQs 1. The template name matches Whamaa exactly. 2. The template is approved. 3. The language code matches the approved template. 4. The parameter count and button count match the template. 5. The customer has a phone number in Shopify. Yes. Each WhatsApp node points to one template, and any number of nodes can use the same one. Disconnect Whamaa in Yuko, generate a new key in Whamaa, then connect again with the new key. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # WhatsApp Source: https://docs.yuko.so/integrations/whatsapp Send transactional loyalty messages via WhatsApp Business API through any of 13 supported platforms. Wired into Workflows for points-earned, reward-redeemed, tier-changed and other loyalty events. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → \[your WhatsApp provider] ## Introduction Yuko sends WhatsApp messages from inside [Workflows](/workflows/overview). You pick a WhatsApp Business API provider, connect it once, and use the **[WhatsApp node](/workflows/whatsapp-node)** in any workflow to send template messages — points-earned confirmations, reward redemption alerts, tier-change announcements, win-back messages, anything Workflows can trigger. Yuko is **provider-agnostic**. Your existing WhatsApp Business API account works as long as it's with one of the 13 supported platforms below. ## What problem this solves WhatsApp has \~98% open rates. For transactional loyalty moments — a customer just hit a tier, points are about to expire, a referral just converted — email is too slow and SMS is too expensive. WhatsApp is the channel that matches the urgency and personal feel of those messages. But WhatsApp Business API is a closed ecosystem. You can't send messages directly; you have to go through a Business Solution Provider (BSP). Yuko connects to 13 BSPs so you can use whichever one you already have a contract with. ## When to use * You already have a WhatsApp Business API account with one of the supported providers. * You want to send transactional loyalty messages on WhatsApp (not marketing broadcasts). * You want to be able to switch providers later without rebuilding everything in Yuko. * You're running [Booster Campaigns](/loyalty/booster-campaigns/overview), [Streak](/loyalty/booster-campaigns/streak) or [Spending Goal](/loyalty/booster-campaigns/spending-goal) campaigns where last-call urgency moves the needle. ## Overview * Supports **13 WhatsApp Business API platforms** — no lock-in. * Authentication via the provider's API key. QuickReply.ai uses a **Client ID** and **Secret Key** instead. * Used inside **Workflows** via the WhatsApp node. * Template values support **personalisation shortcodes** (e.g., `{{first_name}}`, `{{points_balance}}`, `{{reward_code}}`). The list you can pick from depends on the workflow's trigger. * Templates are managed **in the provider's own dashboard** — Yuko doesn't host or approve templates. * The workflow node shows live **Connected / Disconnected** status so you can see at a glance whether your provider is wired up. ## Supported providers India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. ## Choosing a provider You don't need to pick a single “best” provider — pick the one you already have a contract with or the one that fits your region, scale and budget. A rough orientation: | Provider | Region focus | Notable for | | - | - | - | | AISensy | India / SEA | Cost-effective, high-volume Business API | | Zoko | Global, Shopify-native | Built for Shopify, fast onboarding | | WATI | Global | Strong template editor and team inbox | | DelightChat | Global | Multi-channel (WhatsApp + Instagram + email) | | Kwik Engage | India-leaning | Multi-channel messaging (SMS / WhatsApp / push) | | Engati | Global | Conversational AI platform | | QuickReply.ai | India-leaning | AI-first automation, media + dynamic CTA (needs Client ID + Secret Key) | | Interakt | India | Template messages with callback metadata and optional CTA URL buttons | | BiteSpeed | Global, Shopify-focused | Named params + optional dynamic CTA URLs | | BotSpace | Global | Lightweight setup, multi-channel routing via Channel ID | | AskEva | SEA / MENA | Templates with dynamic URL-suffix CTA buttons | | Whamaa | — | Templates with language code and up to 2 dynamic URL-suffix CTA buttons | | ConvertWay | — | Templates with language code and up to 2 dynamic URL-suffix CTA buttons | If you don't yet have a provider, evaluate them on: per-message pricing, template approval turnaround, regions covered, and what other channels they support beyond WhatsApp. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You have an active WhatsApp Business API account with one of the 13 supported providers. You have admin access to your provider's dashboard to retrieve API credentials. You have at least one **approved** WhatsApp template in your provider's dashboard. ## How to connect In your WhatsApp provider's dashboard, generate an API key. **QuickReply.ai** needs a Client ID and Secret Key instead. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations**, pick the **WhatsApp** category from the left sidebar, and click your provider's tile (e.g., **AISensy**, **WATI**, **Zoko**). The provider page shows **Connected**. Open a workflow, click **+** between two nodes, and pick **WhatsApp**. The node shows a card for each provider; connected ones are marked **Connected** — select the one you just connected. Configure the template and shortcodes. See the per-provider page for exact credential-generation steps. ## Using WhatsApp in workflows The **[WhatsApp node](/workflows/whatsapp-node)** sends a template message the moment a workflow event fires. The node lets you pick: * Which **connected provider** to use (you can have multiple providers connected and switch per node). * Which **template** to send (templates come from the provider's dashboard). * The **shortcodes** to substitute into the template's variables (full catalogue documented on the [WhatsApp Workflow Node](/workflows/whatsapp-node#shortcodes) page). A typical use case: customer hits Diamond tier → workflow trigger fires → WhatsApp node sends a *“Welcome to Diamond, \[first\_name]”* template via Zoko → customer receives the message in seconds. ## What WhatsApp does NOT do today Being explicit about the limits saves a support ticket later: * **No marketing broadcasts.** Yuko doesn't send bulk WhatsApp campaigns. Use your provider's own broadcast tool for that. * **No two-way conversation.** Yuko sends; if the customer replies, the conversation lands in the provider's inbox, not back inside Yuko. * **No webhook delivery status.** Yuko doesn't track per-message delivery / read / replied state. The workflow node shows aggregate pending / failed / completed counts only. * **No template authoring inside Yuko.** Templates are created and approved in the provider's dashboard. Yuko picks from your approved templates. ## Best practices **Connect only the providers you'll use.** Each active connection is one more credential to rotate. **Get templates approved before activating the workflow.** WhatsApp Business API rejects unapproved templates at send time, which surfaces as a failed action in the workflow. **Reserve WhatsApp for moments that need it.** Tier upgrades, streak warnings, last-call campaign reminders. Not every email moment needs a WhatsApp copy. **Respect opt-in.** WhatsApp Business API rules require an explicit opt-in for transactional messages; honour the provider's opt-in flow. **Test in a staging workflow first.** Build a workflow that triggers on a Yuko event you can fire from a test customer, and verify the WhatsApp message lands before activating in production. ## FAQs Not directly from Yuko. Yuko sends WhatsApp inside Workflows — the trigger is a per-customer loyalty event, not a segment send. For bulk broadcasts, use your provider's own campaign tool (which has the proper opt-in and template controls). The WhatsApp node logs the failure and increments the *failed* count on the node. The workflow continues to the next node (if any). Yes — connect more than one, and pick the provider per WhatsApp node. Useful if you're migrating providers or testing one against another. In your provider's dashboard. WhatsApp Business API requires Meta to approve every template before it can be sent. The customer's primary phone number from Shopify. If the customer hasn't shared a phone number, the WhatsApp node logs the action as *failed*. Depends on the provider and the template type. Yuko relays the template you selected; if the template supports media, the provider's API handles it. ## Related The node that actually sends the message — setup, shortcodes, examples. Build a workflow that triggers WhatsApp messages on loyalty events. Pair booster campaigns with WhatsApp last-call reminders. Use Klaviyo for email; reserve WhatsApp for the urgency moment. India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Zoko Source: https://docs.yuko.so/integrations/zoko Connect Zoko as your WhatsApp Business API provider — Shopify-native BSP supporting plain, rich (media header) and button templates from any Yuko workflow. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Integrations → Zoko ## Introduction [Zoko](https://www.zoko.io) is a Shopify-native WhatsApp Business API platform — fast onboarding for Shopify merchants and good template tooling. Once connected, the [WhatsApp Workflow node](/workflows/whatsapp-node) can send Zoko templates on any loyalty event. For the provider-agnostic overview, see [WhatsApp](/integrations/whatsapp). ## When to use Zoko * You're a Shopify-first merchant and want a BSP built for the same ecosystem. * You want to send rich templates (with image/video/document headers) or interactive button templates. * You're new to WhatsApp Business API and want the shortest path to a working setup. ## Before you start You have an active Zoko account with WhatsApp Business API. You have at least one **approved** Zoko template. You have your Zoko API key from the Zoko dashboard. ## Connect Zoko to Yuko Log in to your Zoko dashboard and copy your API key. In Shopify admin, go to **Apps → Yuko Loyalty → Integrations → Zoko**. Paste the key into the **API Key** field and click **Connect Integration**. The page shows **Connected**. Open any workflow, click **+**, pick **WhatsApp**, and choose the **Zoko** card from the provider list. ## Configure the Zoko step in a workflow Zoko supports three template flavours. The node lets you pick which one matches the approved template in your Zoko dashboard. | Field | What it is | Example | | - | - | - | | **Template ID** | The approved template name from your Zoko dashboard | `shipping_01` | | **Message Type** | `Template` (text only), `Rich Template` (media header), or `Button Template` (interactive buttons) | `Template` | | **Template Language** | Language code | `en` | | **Template Argument Count** | Number of variables the template expects (1–10) | `2` | | **Template Arguments** | One value per variable — supports [shortcodes](/workflows/whatsapp-node#shortcodes) | `{{first_name}}`, `{{reward_code}}` | ### Three template modes Arguments fill body placeholders in order. Use this for standard transactional messages. The **first argument** is the **media URL** (image / video / document) used in the template header. Remaining arguments fill the body placeholders. Use this when your approved template has a header media slot. Buttons are defined in the template itself (in Zoko). Arguments fill body placeholders only. Yuko doesn't author the button payload — Zoko's template approval handles that. The **Template ID** must match the approved template name in Zoko exactly — case-sensitive. Most send failures trace back to a Template ID typo or an unapproved template. ## Example use case **Reward unlocked, redeem now** 1. In Zoko, approve a template called `reward_unlocked` with two variables (customer name, coupon code). 2. In Yuko Workflows, build: **Trigger: Redeem Points** → **WhatsApp (Zoko)**. 3. Set Template ID = `reward_unlocked`, Message Type = `Template`, Language = `en`, Argument Count = `2`, Arguments = `{{first_name}}`, `{{reward_code}}`. 4. Activate. Each new reward fires a Zoko message immediately. ## Limitations * **Approved templates only.** Zoko enforces Meta's template approval — un-approved templates fail at send time. * **No template authoring inside Yuko.** Use the Zoko dashboard to author and submit templates. * **Rich Template requires a publicly reachable media URL.** Yuko passes the URL straight through; if it's behind auth, Zoko can't fetch it. * **No per-message delivery status surfaced in Yuko.** Check the Zoko dashboard for delivered / read events. ## FAQs Template ID typo, template not yet approved, mismatched argument count, customer has no phone number, or Rich Template media URL is unreachable. No — pick **Rich Template** and put the media URL as the first argument. The approved template in Zoko must have a header media slot. Yes. Connect any combination of the 13 providers; the WhatsApp node lets you pick the provider per step. Generate a new key in Zoko, then open **Integrations → Zoko** in Yuko, switch off the **Connection** toggle and confirm **Disconnect**, and connect again with the new key. Existing workflow steps keep their settings. ## Related India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. How Yuko's WhatsApp integration works across all 13 providers. Setup, shortcodes, and example workflows. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Backfill Points Source: https://docs.yuko.so/loyalty/backfill-points One-shot award of points to customers for orders they placed before Yuko was installed — either a flat amount per customer or points computed from your active Place-an-order rule. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Settings → **Backfill points for past orders** ## Overview Backfill Points solves the *“we just installed Yuko — what about all our existing customers' order history?”* problem. In one run, it awards points to every customer for the orders they placed **before** loyalty was enabled, so day-one balances reflect real historical loyalty instead of starting at zero. Under the hood it's a specialized [One-time Campaign](/loyalty/one-time-campaigns) with `audience_type = past_orders` — it reuses the same participants tab, CSV export, and status tracking. But because backfilling can only be done responsibly *once*, it lives in the loyalty **Settings** tab and is deliberately locked to a single run per store. ## Why you need it Every loyalty program has a cold-start moment. On the day you turn Yuko on, every customer has a 0 balance — including a customer who has spent \$10,000 with you over the last three years. That 0 balance is a bad first impression. Your best customers open your loyalty page, see zero points, and conclude the program doesn't recognize them. They either don't engage, or worse, they mentally file loyalty as *“another thing this brand does that doesn't apply to me.”* Backfilling fixes that in one shot: every existing customer walks into the program with a balance that reflects what they've already given you. ## When to use it * You **just installed Yuko** and you have historical Shopify orders you want to honour. * You **migrated to Yuko** from another loyalty platform and you want to seed balances based on Shopify order history rather than trying to match the old provider's points balances exactly. * You **relaunched loyalty** after having it disabled for a stretch and want to bring customers back with a *“we've credited you for orders in the meantime”* gesture. If your goal instead is a *targeted gift to a specific segment*, use [One-time Campaigns](/loyalty/one-time-campaigns) — those aren't locked and can run any number of times. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). Your **Place an order** Way to Earn is configured the way you want it — if you'll use "campaign-based" mode, this is the rule that drives the math. You've decided whether points should expire (recommended — backfilled points should feel like a welcome, not a permanent liability on your books). Past-order backfill is available on your plan (it's available on select plans). You understand that this is a **one-shot operation** — you get one backfill per store and then need to contact support to run another. ## How to configure a backfill Go to **Apps → Yuko Loyalty → Loyalty**, open the **Settings** tab, scroll to **Backfill points for past orders**, and click **Configure**. * **Fixed points per customer** — a flat amount, entered in **Points per customer** (e.g., 100 pts). With **Award points for all orders**, the amount is awarded for each eligible order; with **First order only**, each customer gets it once. * **Based on Place-an-order campaign** — Yuko computes points per customer using your active Place-an-order earning rule (e.g., 1 pt per \$1 spent), summed across all their eligible orders. If a customer has multiple past orders, choose: * **Award points for all orders** — accumulate across every eligible order (the typical choice). * **First order only** — count each customer's earliest order only. Turn on **Points expiry** and set **Expires after** and a **Period** (Days, Weeks or Months), e.g. **60 days**, after which backfilled points expire. This creates redemption urgency and keeps the liability off your books long-term. Under **Estimated reach**, click **Preview** to see how many orders match and the total points to be awarded (for flat mode). Use this to sanity-check before you commit. Click **Run backfill**. Yuko processes past orders in the background. Each run is listed under **Recent backfills**; click **View** to open its detail page with the progress, the per-customer participants log and the success/failure counts. ## Two points calculation modes ### Fixed points per customer Every eligible order earns the same flat amount, regardless of order value. Combine it with **First order only** to give each customer the amount exactly once. Simplest and most predictable. **Best for:** goodwill gestures on program launch, migration greetings, situations where you want equal treatment. **Example:** 150 pts with **First order only** → 3,200 customers → 480,000 total points awarded. With **Award points for all orders**, a customer with 3 eligible orders gets 450 pts. ### Based on Place-an-order campaign Points are computed per customer using your active Place-an-order earning rule and summed across all their eligible orders. If your rule is \*1 pt per $1 spent*, a customer who spent $340 across 3 orders gets 340 pts. **Best for:** matching historical spend so your best customers land in the right point neighbourhood. **Example:** Place-an-order rule = 1 pt per $1. Customer A spent $50, customer B spent \$2,300. Backfill awards A = 50 pts, B = 2,300 pts. VIP tier thresholds get realistic day-one populations. Before using **campaign-based** mode, double-check your Place-an-order rule — that's the exact rule the backfill uses. If your rule awards *2 pts per \$1*, backfill will too. ## Order scope: all orders vs first order only | Choice | Points math | Best for | | - | - | - | | **All orders** | Accumulates across every eligible order (in flat mode, the flat amount × the customer's eligible orders) | The typical choice — matches how your Place-an-order rule works day-to-day | | **First order only** | Counts each customer's earliest order once | You want a flat, one-per-customer welcome, or only want to honour the *fact* they were a customer | ## What gets counted * **Paid, non-cancelled orders** only. Pending/refunded/voided orders are excluded. * **Only orders linked to a Shopify customer profile.** Guest orders without a linked customer are skipped and don't appear in the participants list. * **Excluded customers are skipped.** Customers excluded from the loyalty program don't receive backfilled points. * **All time, by default.** The backfill runs across your entire historical order history. If you need a specific date range instead, contact support. ## Preview before you commit The preview shows two numbers: 1. **Order(s) matched** — how many past orders match right now. 2. **Total points to award** — for flat mode only (the flat amount × matched orders). Campaign-based mode depends on each customer's order values, so exact totals appear on the detail page after the backfill runs. Use preview freely — nothing is awarded until you click **Run backfill**. ## Tracking the backfill after it runs Backfills open the same detail view as any [one-time campaign](/loyalty/one-time-campaigns#tracking-the-campaign): * Progress with processed / total counts. * Status: `running` → `completed` (or **Completed with errors** if some awards failed). * Participants tab with per-customer **Awarded**, **Skipped** and **Failed** entries. * CSV export of the entire recipient list. * **Conversions** tab showing the orders, revenue and points redeemed with coupons from the backfilled points. The **Recent backfills** section on the Settings tab shows each run with its date, recipient count, points mode and status. ## The one-shot rule After a backfill runs, the **Configure** button is replaced by a **Past-order backfill already run** banner: > *You've already run a past-order backfill, so it can only be done once to avoid awarding points twice. Need to run it again or backfill a specific date range? Contact us.* This is a **deliberate safety rail** — backfilling twice is one of the fastest ways to accidentally award every customer double points. If you legitimately need to backfill again (e.g., you want a specific date range you missed, or you re-imported historical orders after fixing a data issue), [contact support](https://yuko.so/support/). ## How to communicate the backfill to customers A silent backfill is a wasted backfill — the customer only feels the gesture if you tell them. Right after the backfill runs, Klaviyo profiles get the updated `yuko_points_balance`. Send a broadcast that leads with the actual number, using the `yuko_points_balance` profile property. For VIP customers with meaningful balances, a WhatsApp template message tends to land harder than email. Surface the new balance on the storefront the next time the customer lands — the number *right there* on the page beats explaining it in copy. Any integration that reads Yuko customer data can gate the announcement on "has balance > 0" so only backfilled customers see it. ## Best practices **Preview first, always.** The recipient count tells you whether your filters are right before you spend real awards. **Use a short expiry** (30–60 days) on backfilled points — they're a welcome gift, not a permanent liability. Short expiry also drives the redemption → next-order chain sooner. **Announce the backfill within an hour of running it.** The point of a backfill is to greet customers with a balance; a silent backfill is invisible. **Match your Place-an-order rule to how you *would* have awarded historically** before choosing campaign-based mode. If your rule today is 2× what it used to be, campaign-based mode will over-award. **Do the migration bump too** — pair the backfill with a small flat [one-time campaign](/loyalty/one-time-campaigns) so even customers who had zero past orders (e.g., newsletter-only subscribers) get a welcome touch. ## Limitations * **One backfill per store.** Contact support to run another. * **All-time only** in the self-serve UI. Date-range backfills go through support. * **Only paid, non-cancelled orders.** Refunds, cancellations, and pending orders are excluded from the count. * **Guest orders skipped.** No linked Shopify customer profile means no points target. * **Shopify only.** Backfill reads past orders from Shopify. * **No mid-run edits.** Once a backfill is `running` you can only cancel it, not tweak the math. ## FAQs Same engine, different intent. A [one-time campaign](/loyalty/one-time-campaigns) targets a segment and awards a fixed amount, and you can run as many as you want. A backfill targets *past order history* and can be run **only once** — the guardrail exists so you don't accidentally double-credit historical orders. Not from the settings UI, which defaults to all time. If you need a specific range (e.g., "orders from Jan 1 2024 onwards"), [contact support](https://yuko.so/support/) — that path supports date-scoped backfills. Common reasons: you imported additional historical orders after the first backfill, you want to add another date range, or you fixed a data-quality issue that had skipped some orders. All of those go through support. They're not touched by the backfill (there's no order to base it on). If you also want to greet them, pair the backfill with a small flat [one-time campaign](/loyalty/one-time-campaigns) to **All customers**. Yes — backfilled points are real points transactions in the customer's ledger, and tiers are re-evaluated when the points land. If your VIP tiers qualify on points earned, customers move into whatever tier the new total qualifies for. Only if you set an expiry when configuring the backfill. Without expiry, they behave like any other awarded points. No. Only paid, non-cancelled orders are counted. Subscription orders are Shopify orders like any other, so yes — they're counted as long as they're paid and linked to a customer. It depends on how many past orders your store has, because Yuko reads them from Shopify in pages. Small stores finish quickly; stores with a long order history take longer. The detail page shows the progress. ## Related Same engine — targeted, unlimited runs, use for gifts / apologies / launches / cohorts. The earning rule that powers campaign-based backfill mode. The Settings tab where backfill lives. Surface the freshly backfilled balance on the storefront the moment customers return. Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Bonus Flat Booster Source: https://docs.yuko.so/loyalty/booster-campaigns/bonus-flat Award a fixed number of bonus points on each qualifying action during a window. Cleaner to communicate than a multiplier. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns → Create campaign → **Bonus Flat** ## Overview Add a fixed bonus to each qualifying action while the campaign runs, for example **+50 points on every order this weekend**. The customer's normal points still apply; the flat bonus sits on top. ## Why you need it? Multipliers ask the customer to do mental math. A flat bonus is a single number: *"+50 points on this order"* is concrete and fits an email subject line. When your message needs to convert at a glance, flat usually beats multiplier. ## When to use it? * Your campaign copy needs a headline number (*"+100 points this week"*). * You want the bonus to be the same regardless of basket size. * Your base earning rate is small (for example 1 point per \$1), so multipliers feel underwhelming. * You want to give paid members an always-on bonus on top of regular earning. * You want a predictable points cost per action. ## How to configure it? Go to **Apps → Yuko Loyalty → Loyalty → Programs**. In the **Booster Campaigns** section, click **Create campaign** and select **Bonus Flat**. Enter a **Campaign Name** (internal) and an optional **Description**. Under **Earning action**, pick the Way to Earn that earns the bonus (for example **Place an order**). Only enabled Ways to Earn are listed. The earning action can't be changed after the campaign is saved. Click **Add Reward**. Bonus Flat only accepts **Bonus points**: enter a **Name** (visible on the storefront), the **Number of points** (at least 1) and an optional expiry for the bonus points. Add **Targeting Rules** such as **Customer Tags**, **Membership** or **Min lifetime orders**. If the earning action is **Place an order**, you can also add **Products** or **Collections** rules. Set **Max participants** and **Max completions per customer** if needed. **One-time**, **Recurring** (by days, weeks or months) or **Evergreen (always on)**. Keep **Stackable with other campaigns** checked or uncheck it to make the campaign exclusive. Edit the **Body text** widget label if needed (tokens: `[title]`, `[reward]`, `[points_label]`, `[action]`). Keep **Online store** selected under **Publishing** and choose an **Icon**. **Status** is enabled by default. Click **Save**. ## How it works 1. While the schedule is active, a targeted customer completes the earning action. 2. They earn their normal points for that action, and Yuko credits the bonus points from the reward. 3. Each qualifying action counts as one completion, up to **Max completions per customer** if you set one. ## Use cases / Examples ### One-time uses **1. Black Friday flat boost.** **+200 points per order** during BFCM. Customers know exactly what they're getting, and the number works in an email subject line. **2. Email blast pairing.** Send *"+100 points on your next order this week"* and run a one-week Bonus Flat to match. The number in the email is the number on the receipt. **3. Launch-week bonus.** +75 points per order during a product launch, with a **Collections** rule so only orders containing the new range qualify. **4. Review push.** +50 points on **Write a review** for two weeks after a launch. ### Recurring uses **5. Fortnightly bonus week.** Recurring, **Weeks**, **Every 2 weeks**: +25 points per order every other week. ### Always-on uses **6. Member-only baseline.** Evergreen +10 points on every order with a **Membership** rule. It signals that membership pays off every time they buy. ## How to promote it The big advantage of a flat bonus is that the headline writes itself. * **Storefront:** the **[Loyalty Nudges](/onsite-widgets/loyalty-nudges)** widget, the **[Floating Rewards](/onsite-widgets/floating-launcher)** launcher and the customer account page show active campaigns when **Show in loyalty widget** is checked. * **Email:** make the number the subject (*"+100 points on every order this week"*). Yuko syncs loyalty data to **[Klaviyo](/integrations/klaviyo)** so you can segment by tier or balance. * **WhatsApp:** if you've connected a WhatsApp provider, use it for the last-call message in the final 24 hours. For always-on member bonuses, announce once in the membership welcome email and let the widgets surface the bonus from there. ## FAQs Not with Bonus Flat; it only accepts **Bonus points**. To reward with a discount or other reward, use a goal-based booster such as Spending Goal, Order Booster or Multi-Action Challenge. It's hidden when the earning action can only be earned once per customer, such as **Sign Up**, **Instagram Follow** or **Subscribe to Newsletter**. ## Next Steps Schedule, targeting, stacking and display settings shared by all boosters. Scale the bonus with basket size using a multiplier. Reward a customer's first order specifically. Surface your bonus on every storefront page. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Dormant Reactivation Booster Source: https://docs.yuko.so/loyalty/booster-campaigns/dormant-reactivation Automatically reward customers who come back after a long period of inactivity. The winback campaign that runs itself. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns → Create campaign → **Dormant Reactivation** ## Overview When a customer who has been inactive for a set number of days comes back and places an order (or writes a review), they automatically get a reward. For example: **no order in 60 days → 200 bonus points on the return order**. The campaign catches every returning customer who matches the inactivity threshold. ## Why you need it? Most winback campaigns are email-driven: segment, write, send, hope. They work, but they don't always reach the customer when they're ready to buy. Dormant Reactivation handles the reward side automatically. The customer returns, the reward lands, and your *"welcome back"* message can quote exactly what they earned. ## When to use it? This is one of the few boosters worth running all the time. The main decisions are the inactivity threshold and the reward size. * You have a meaningful base of customers who have drifted away. * You have high-value customers worth recovering. * You sell replenishment categories where a missed reorder is an early sign of churn. ## How to configure it? Go to **Apps → Yuko Loyalty → Loyalty → Programs**. In the **Booster Campaigns** section, click **Create campaign** and select **Dormant Reactivation**. Enter a **Campaign Name** (internal) and an optional **Description**. Under **Qualifying action** (what triggers the reactivation reward), pick **Place an order** or **Write a review**. For **Place an order**, you can check **Set a minimum order amount**; only orders above this amount trigger the reward. The qualifying action can't be changed after the campaign is saved. **Inactivity Threshold** is the number of days (14–365) the customer must have been inactive to qualify. Common values: * **30 days** — early lapsers * **60–90 days** — noticeable disengagement * **180–365 days** — deep sleepers worth an aggressive offer Click **Add Reward** and choose **Amount discount**, **% off discount**, **Free shipping**, **Free product**, **Bonus points** or **Store credit** (Shopify only). Add **Targeting Rules** (for example **Min lifetime spend** to focus on valuable customers). With **Place an order**, **Products** and **Collections** rules are also available. Set **Max participants** and **Max completions per customer** if needed. **Evergreen (always on)** is the usual choice. **One-time** and **Recurring** (by weeks or months) are also available. The **Body text** widget label defaults to *"Welcome back — place an order to earn \[reward]."* Tokens: `[title]`, `[reward]`, `[points_label]`. **Status** is enabled by default. Click **Save**. ## How it works 1. A targeted customer completes the qualifying action while the campaign is active. 2. Yuko looks up their previous order (or previous review, if the qualifying action is **Write a review**) and counts the days since then. 3. If the gap is at least the **Inactivity Threshold**, the reward is issued. The **Participants** tab shows how many days the customer was idle. 4. Customers with no previous order (or review) don't qualify, because there's no earlier activity to measure from. Use [First Purchase Boost](/loyalty/booster-campaigns/first-purchase-boost) for first-time buyers. ## Use cases / Examples **1. Early lapser net.** 30 days, **Place an order** → 200 bonus points. Catches customers who skipped a routine purchase before they fully disengage. **2. Quarterly winback.** 90 days → \$10 off the next order. **3. Annual reactivation.** 365 days with a **Min lifetime spend** rule → a free product. Reserved for valuable customers who have been away a long time. **4. Review comeback.** **Write a review**, 60 days → 100 bonus points, to bring quiet reviewers back. **Layer campaigns at different thresholds** (for example 30, 90 and 365 days) with escalating rewards. A long-absent customer meets several thresholds at once, so uncheck **Stackable with other campaigns** on these campaigns and order the list with the most generous one at the top if you want only one reward to apply. ## How to promote it The reward is automatic, but customers still need a reason to come back. * **Email:** run a winback flow through your ESP that mentions the reward. Yuko syncs loyalty data to **[Klaviyo](/integrations/klaviyo)**, so you can segment by points balance and activity. * **WhatsApp:** if you've connected a WhatsApp provider, a short personal message to long-lapsed, high-value customers works well. * **Storefront:** with **Show in loyalty widget** checked, returning customers see the campaign in the **[Loyalty Nudges](/onsite-widgets/loyalty-nudges)** widget, the **[Floating Rewards](/onsite-widgets/floating-launcher)** launcher and customer account page. ## FAQs 14 days. The maximum is 365 days. No. Dormant Reactivation needs a previous order (or review) to measure inactivity from. Yes, if **Max completions per customer** is blank or higher than 1 and they go inactive again. ## Next Steps Schedule, targeting, stacking and display settings shared by all boosters. Reward first-time buyers. Build winback emails with Yuko loyalty data. Look up a customer's activity and points history. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # First Purchase Boost Source: https://docs.yuko.so/loyalty/booster-campaigns/first-purchase-boost Give customers an extra reward on their very first order. Makes the loyalty program tangible from minute one. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns → Create campaign → **First Purchase Boost** ## Overview A First Purchase Boost issues an extra reward when a customer places their first order, on top of the normal **Place an order** points. The reward can be bonus points, a discount for the next order, free shipping, a free product or store credit. There are no type-specific settings: you choose the reward, and optionally who qualifies. ## Why you need it? The first order is the most fragile moment in the relationship; the customer is still deciding whether your brand is worth a second visit. A standard program rewards the first order like any other. A First Purchase Boost makes the program *immediately* tangible: *"they already gave me 500 points and I haven't even unboxed yet."* That tangibility is what drives the second order. ## When to use it? This is another booster worth running all the time. * First-to-second order conversion is your key retention metric. * You're launching your loyalty program and want new customers to see the value right away. * You run paid memberships and want joining to feel worth it on day one. ## Before you start The **Place an order** Way to Earn is enabled. If it's off, this type is greyed out in the **Create Booster Campaign** picker. ## How to configure it? Go to **Apps → Yuko Loyalty → Loyalty → Programs**. In the **Booster Campaigns** section, click **Create campaign** and select **First Purchase Boost**. Enter a **Campaign Name** (internal) and an optional **Description**. Click **Add Reward** and choose **Amount discount**, **% off discount**, **Free shipping**, **Free product**, **Bonus points** or **Store credit** (Shopify only). You can add more than one reward. Add **Targeting Rules**, for example **Customer Tags** or **Membership**, or **Products** / **Collections** rules to require the first order to contain certain items. Set **Max participants** if you want to cap the campaign. Each customer can only complete it once, so there is no **Max completions per customer** field. **Evergreen (always on)** is the usual choice. Use **One-time** for a launch period (for example, a bigger first-order reward during your program launch month). The **Body text** widget label defaults to *"Place your first order to unlock \[reward]."* Tokens: `[title]`, `[reward]`, `[points_label]`. **Status** is enabled by default. Click **Save**. The boost applies to first orders placed from now on. ## How it works 1. A targeted customer places an order while the campaign is active. 2. Yuko checks it is the customer's first order (their only order that hasn't been refunded). 3. If so, the reward is issued and the customer is marked **Completed** in the **Participants** tab. 4. The boost fires only once per customer. ## Use cases / Examples **1. Flat onboarding bonus.** +500 **Bonus points** on the first order. The customer knows the exact reward before checking out. **2. Second-order hook.** An **Amount discount** (\$10 off) issued on the first order, to use on the second. It gives the customer a concrete reason to come back. **3. Member welcome.** A **Membership** rule with **Free shipping** as the reward, so paid members feel the benefit straight away. **4. Category starter.** A **Collections** rule so only first orders containing your starter-kit collection qualify. ## How to promote it The boost rewards a specific moment, so non-customers need to see it. * **Storefront:** with **Show in loyalty widget** checked, the **[Loyalty Nudges](/onsite-widgets/loyalty-nudges)** widget, the **[Floating Rewards](/onsite-widgets/floating-launcher)** launcher and customer account page show the offer to signed-in customers. * **Email:** mention the first-order reward in your welcome series. Yuko syncs loyalty data to **[Klaviyo](/integrations/klaviyo)** so you can target customers who signed up but haven't ordered. ## FAQs No. Multiplier rewards are only available for Multiplier and Product & Collection Multiplier campaigns. Use **Bonus points** for a fixed extra amount. The customer's first order in your store that hasn't been refunded. Customers who already ordered before the campaign started don't qualify. There's no signup-source rule. Use **Customer Tags** if your signup flow tags customers. ## Next Steps Schedule, targeting, stacking and display settings shared by all boosters. Reward customers for creating an account. Reward customers who come back after a long break. Show the first-order offer on every storefront page. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Multi-Action Challenge Booster Source: https://docs.yuko.so/loyalty/booster-campaigns/multi-action-challenge Reward customers for completing a set of different actions, such as ordering, reviewing and following you on social. Drives breadth of engagement, not just transactions. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns → Create campaign → **Multi-Action Challenge** ## Overview The customer earns a reward when they complete a set of actions, for example **Place an order + Write a review + Instagram Follow = 500 bonus points**. Pick 2 to 10 actions from your enabled Ways to Earn, and choose whether customers must complete all of them or any one. ## Why you need it? A customer who only buys is fragile. A customer who buys, reviews and follows you on social is **sticky**: they've invested in several touchpoints with your brand, and switching has a real cost. Most programs reward each of those actions separately with small per-action points. A challenge bundles them into one goal with a bigger reward, so the breadth of engagement is worth chasing. ## When to use it? * Onboarding new customers across the channels you care about. * Driving reviews and social engagement during a launch. * Running a seasonal challenge with several themed actions. * Engaging your most active customers with something richer than a multiplier. ## How to configure it? Go to **Apps → Yuko Loyalty → Loyalty → Programs**. In the **Booster Campaigns** section, click **Create campaign** and select **Multi-Action Challenge**. Enter a **Campaign Name** (internal) and an optional **Description**. Under **Actions Required**, click **Add action** and pick an earning action. Only enabled Ways to Earn are listed, and each action can be used once. Add between 2 and 10 actions. For **Place an order**, you can check **Set a minimum order amount** and enter a **Min order amount**; the order must meet it to count toward this action. * **Match all** — the customer must complete every action. * **Match any** — completing any one action unlocks the reward. **Time Window** (days): customers must complete the actions within this many days. Leave blank for no time limit. Click **Add Reward** and choose **Amount discount**, **% off discount**, **Free shipping**, **Free product**, **Bonus points** or **Store credit** (Shopify only). Add **Targeting Rules** and **Max participants**. This type has no **Max completions per customer** field. **Products** and **Collections** rules aren't available for this type. **One-time**, **Recurring** (by weeks or months) or **Evergreen (always on)**. Widget labels: **Call-to-action above progress bar**, **Reward banner — locked** and **Reward banner — unlocked**. The defaults change with the completion logic (for example *"Complete all \[total\_count] steps to earn:"* or *"Complete any 1 step to earn:"*). Tokens include `[done_count]`, `[total_count]` and `[remaining_count]`, plus `[title]`, `[reward]` and `[points_label]`. **Status** is enabled by default. Click **Save**. ## How it works 1. Each time a targeted customer completes one of the challenge actions while the campaign is active, it's ticked off on their progress. 2. With **Match all**, the reward is issued once every action is done. With **Match any**, it's issued after the first action. 3. With a **Time Window**, the clock starts at the customer's first completed action. If they don't finish within the window, their progress expires (shown as **Expired** in **Participants**) and they start again from zero. ## Use cases / Examples **1. Welcome challenge.** Evergreen: **Sign Up** + **Place an order** + **Write a review**, **Match all**, 30-day **Time Window** → 500 bonus points. **2. Social starter.** **Instagram Follow** + **Facebook Like** + **Subscribe to Newsletter**, **Match all** → free shipping on the next order. **3. Launch buzz.** One-time, launch month: **Place an order** (with a minimum order amount) + **Write a review**, **Match all** → \$10 off. **4. Any-step nudge.** **Match any** across several social actions → 50 bonus points. A low-effort entry point for less engaged customers. ## How to promote it * **Storefront:** with **Show in loyalty widget** checked, the **[Loyalty Nudges](/onsite-widgets/loyalty-nudges)** widget, the **[Floating Rewards](/onsite-widgets/floating-launcher)** launcher and customer account page show the challenge as a checklist with the reward banner. * **Email:** list the steps and the reward clearly in a launch email, then follow up with customers who have completed some but not all steps. * **WhatsApp:** if you've connected a WhatsApp provider, nudge customers who are one step away before the window closes. ## FAQs No. The options are **Match all** (every action) or **Match any** (any one action). The action's Way to Earn must be enabled, and each action can only be added once per challenge. The customer's progress is marked **Expired** and resets. Their next qualifying action starts a new attempt. ## Next Steps Schedule, targeting, stacking and display settings shared by all boosters. The actions you can include in a challenge. Reward repeating one action over time. Show the challenge checklist on every storefront page. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Points Multiplier Booster Source: https://docs.yuko.so/loyalty/booster-campaigns/multiplier Multiply the points customers earn on an action for a window you control — without touching your prices. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns → Create campaign → **Multiplier** ## Overview While the campaign runs, every time a customer completes the chosen earning action they earn a multiple (for example 2× or 3×) of the points that Way to Earn normally gives. The customer pays the same price and simply earns more. The multiplier works on any enabled Way to Earn, not just orders. To boost only certain products or collections, use the [Product & Collection Multiplier](/loyalty/booster-campaigns/product-collection-multiplier) instead. ## Why you need it? When sales are flat, the default reflex is to discount. Discounting trains customers to wait for the next promotion, eats into margin and slowly erodes the perceived value of your products. A points multiplier creates the same urgency without cutting price. The customer sees an obvious reason to buy now, your margin holds, and loyal customers feel rewarded rather than pushed into a sale. ## When to use it? * You want a near-term lift in revenue without discounting. * You're entering a slow week and need a lever that doesn't condition customers to expect markdowns. * You want an alternative to a competitor's discount campaign during a high-stakes period. * You want to give a VIP tier or paid members an always-on earning advantage. * You want to boost a non-purchase action for a while, such as reviews. ## How to configure it? Go to **Apps → Yuko Loyalty → Loyalty → Programs**. In the **Booster Campaigns** section, click **Create campaign** and select **Multiplier**. Enter a **Campaign Name** (internal) and an optional **Description**. Under **Earning action**, pick the Way to Earn this campaign applies to (for example **Place an order**). Only enabled Ways to Earn are listed. The earning action can't be changed after the campaign is saved. Click **Add Reward**. Enter a **Name** (visible on the storefront) and the **Multiplier**, a value between 1.1 and 10.0. A Multiplier campaign has exactly one reward. Add **Targeting Rules** (for example **VIP Tiers** or **Customer Tags**). If the earning action is **Place an order**, you can also add **Products** or **Collections** rules. Set **Max participants** and **Max completions per customer** if needed. **One-time** (start and end date), **Recurring** (by days, weeks or months) or **Evergreen (always on)**. **Stackable with other campaigns** is checked by default. Uncheck it to make the campaign exclusive. Check **Ignore if customer earned VIP tier multiplier** to skip the boost when the customer's VIP tier already gave them a bonus on the same action. Edit the **Body text** widget label if you want custom copy (tokens: `[title]`, `[reward]`, `[points_label]`, `[action]`), keep **Online store** selected under **Publishing**, and pick an **Icon**. **Status** is enabled by default. Click **Save**. The boost applies from the moment the schedule is active. ## How it works 1. The customer completes the earning action and earns their normal points (plus any VIP tier bonus). 2. Yuko credits the boost as a separate bonus entry: **base points × (multiplier − 1)**. With a 2× multiplier, a 100-point order earns 100 extra points. 3. The bonus is calculated on the base points only, so it doesn't compound with the VIP tier bonus. The bonus also inherits the base points' pending period and expiry. 4. If **Ignore if customer earned VIP tier multiplier** is checked and a VIP tier bonus was awarded for that same action, no boost is added. ## Use cases / Examples ### One-time uses **1. Slow week rescue.** Numbers are flat on Monday morning, so you run a 3-day 2× event on **Place an order** instead of reaching for a discount code. **2. BFCM alternative.** Instead of joining the discount race in November, run a 3× points event. Same urgency, no price cut. **3. Review drive.** 2× on **Write a review** for two weeks after a big launch to collect feedback faster. **4. Store anniversary.** A natural reason to run a celebration event. Feels earned, not manufactured. ### Recurring uses **5. Double-points month every quarter.** Recurring, **Months**, **Every quarter**: one month in every three runs at 2×. Customers learn the rhythm and plan purchases around it. **6. Fortnightly boost week.** Recurring, **Weeks**, **Every 2 weeks**: a 2× week, then a normal week, repeating. ### Always-on uses **7. VIP tier accelerator.** Evergreen 2× with a **VIP Tiers** rule for your top tier. The points program becomes a real reason to climb. **8. Member perk.** Evergreen 1.5× with a **Membership** rule so paid members always earn more. ## How to promote it ### Storefront The **[Loyalty Nudges](/onsite-widgets/loyalty-nudges)** widget shows active campaigns in a pinned strip and drawer on every storefront page. The **[Floating Rewards](/onsite-widgets/floating-launcher)** launcher and the customer account page also list active boosters when **Show in loyalty widget** is checked. ### Email and WhatsApp Announce the multiplier through your ESP. Yuko syncs loyalty data such as `yuko_points_balance` and `yuko_vip_tier` to **[Klaviyo](/integrations/klaviyo)**, so you can segment the send. * **Subject line:** lead with the multiplier and the urgency, for example *"3× points — this weekend only"*. * **Body:** state the multiplier, the exact dates and what to buy. * **Last call:** if you've connected a WhatsApp provider, save WhatsApp for the last 24 hours of the campaign. For always-on multipliers (VIP tier, membership), promote once at the moment of qualification, then let the widgets do the rest. ## FAQs Not inside a Multiplier campaign; it accepts one Multiplier reward. Create a separate [Product & Collection Multiplier](/loyalty/booster-campaigns/product-collection-multiplier) campaign. If both are stackable, both apply to matching orders. Yes. The bonus copies the base points' pending period and expiry, so it becomes available at the same time as the base points. It's hidden when the earning action can only be earned once per customer, such as **Sign Up**, **Instagram Follow** or **Subscribe to Newsletter**. ## Next Steps Schedule, targeting, stacking and display settings shared by all boosters. Multiply points on selected products or collections only. Prefer a fixed bonus per action? Bonus Flat is simpler to communicate. Pair always-on multipliers with VIP tier targeting. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Order Booster Source: https://docs.yuko.so/loyalty/booster-campaigns/order-frequency Reward customers as they reach order-count milestones while the campaign runs. Drives repeat-purchase frequency. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns → Create campaign → **Order Booster** ## Overview An Order Booster counts the orders a customer places while the campaign runs and rewards them at each milestone, for example **3 orders → 500 bonus points, 5 orders → free shipping**. Set up to 20 milestones (each up to 100 orders), and give each milestone one or more rewards of any type. Order Booster was previously called *Order Frequency*. ## Why you need it? Lifetime value is basket size times frequency. Multipliers and spending goals push basket size; an Order Booster closes the loop on frequency. It also builds habit. A customer who places three orders in a month has a buying rhythm with your brand, and is far more likely to keep it after the campaign ends. ## When to use it? * You want to drive purchase frequency over a defined window. * You sell repeat-purchase categories (consumables, fashion drops, replenishment). * You want a "virtual subscription" nudge without a subscription product. * You're running a holiday campaign and want to capture multi-order gift shopping. ## Before you start The **Place an order** Way to Earn is enabled. If it's off, this type is greyed out in the **Create Booster Campaign** picker. ## How to configure it? Go to **Apps → Yuko Loyalty → Loyalty → Programs**. In the **Booster Campaigns** section, click **Create campaign** and select **Order Booster**. Enter a **Campaign Name** (internal) and an optional **Description**. Under **Milestones**, enter the **Number of Orders** for **Milestone 1** (the target number of orders to unlock it, 1–100). Click **Add milestone** for more, up to 20. Each milestone must be higher than the one before. In each milestone, click **Add reward** and choose **Amount discount**, **% off discount**, **Free shipping**, **Free product**, **Bonus points** or **Store credit** (Shopify only). Every milestone needs at least one reward. Under **Order Booster Goal**, check **Set a minimum order amount** and enter the **Minimum Order Amount**. Only orders above this amount count toward each milestone, so the campaign can't be gamed with tiny orders. Add **Targeting Rules**, including **Products** or **Collections** rules. Set **Max participants** and **Max completions per customer** if needed. The schedule is the window in which orders count: **One-time**, **Recurring** (by weeks or months, with progress tracked per cycle) or **Evergreen (always on)**. Two widget labels apply: **Call-to-action above progress bar** (default *"Place \[remaining\_orders] more order(s) to unlock \[next\_reward]"*) and **Status text under progress bar** (default *"Order \[current\_orders] of \[total\_orders]"*). Other tokens: `[title]`, `[reward]`, `[points_label]`, `[milestones_done]`, `[milestones_total]`. **Status** is enabled by default. Click **Save**. ## How it works 1. Each qualifying order a targeted customer places while the campaign is active adds 1 to their order count. 2. When the count reaches a milestone, that milestone's rewards are issued. 3. When every milestone is reached, the customer has completed the campaign. If **Max completions per customer** allows it, their next order starts a fresh run. 4. On a recurring schedule, progress is tracked separately for each cycle. ## Use cases / Examples **1. Loyalty sprint.** One-time, 30 days: 3 orders → 500 bonus points. Run it mid-quarter when frequency dips. **2. Virtual subscription.** One-time, 60 days: 2 orders → free shipping, 4 orders → 1,000 bonus points. Creates a replenishment cadence without a recurring charge. **3. Holiday cadence push.** One-time, Nov 1 – Dec 31: 3 orders → a free product. Captures gift shopping across several occasions. **4. Quarterly ladder.** Recurring, **Months**, **Every quarter**: 2 orders → 200 points, 4 orders → \$15 off, in each active month. ## How to promote it Frequency campaigns sell themselves once the customer sees their progress. * **Storefront:** with **Show in loyalty widget** checked, the **[Loyalty Nudges](/onsite-widgets/loyalty-nudges)** widget, the **[Floating Rewards](/onsite-widgets/floating-launcher)** launcher and customer account page show the customer's order count and next reward. * **Email:** state the ladder explicitly in the launch email (*"3 orders = 500 points. 5 orders = free shipping."*). With **[Klaviyo](/integrations/klaviyo)**, follow up after each order. * **WhatsApp:** if you've connected a WhatsApp provider, nudge customers who are one order away as the window closes. ## FAQs No. Only orders placed while the campaign is active count. Use the **Schedule**. A one-time schedule sets a fixed window; a recurring schedule repeats it. Yes. Click **Add reward** again inside the milestone. ## Next Steps Schedule, targeting, stacking and display settings shared by all boosters. Reward spend milestones instead of order counts. Reward consistency across consecutive periods. Show order progress on every storefront page. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Booster Campaigns Source: https://docs.yuko.so/loyalty/booster-campaigns/overview Time-limited or targeted loyalty promotions that layer on top of your standard Ways to Earn — drive urgency without touching your prices. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns ## Overview Booster campaigns are loyalty promotions that layer on top of your standard **Ways to Earn**. A Way to Earn is *always on* and quietly rewards every qualifying action. A booster is a *campaign*: it can run in a window, target a group of customers, and reward a specific behaviour such as a bigger basket, more orders or a return visit. Where a discount cuts the price, a booster increases the reward. The customer pays the same and earns more. ## Why you need them? Loyalty programs work in the background. They reward customers reliably, but they rarely create urgency. When you need a near-term result (a slow week, a launch, a winback push), most stores reach for a discount. Discounts work, but they train customers to wait. Boosters give you the same urgency lever without touching your margin or teaching customers to hold out for the next sale. ## When to use them? * You need a near-term lift in revenue without discounting. * You're launching a new product or collection and want focused earning on it. * You're running a campaign during a high-stakes period (BFCM, holidays, anniversaries). * You want to give a VIP tier or paid members a permanent earning advantage. * You want to automatically reward returning customers or first-time buyers. ## The 9 booster types Multiply the points earned on an action during a window. Multiply points only on selected products or collections. Fixed bonus points on each qualifying action. Reward customers at each spend milestone. Reward customers at each order-count milestone. Reward consecutive periods of activity. Complete a set of different actions to earn a reward. Reward inactive customers when they come back. Extra reward on a customer's very first order. | Type | What it rewards | Reward options | | - | - | - | | **Multiplier** | Every time the chosen earning action happens | One **Multiplier** reward (1.1× to 10×) | | **Product & Collection Multiplier** | Orders containing selected products or collections | One **Multiplier** reward (1.1× to 10×) | | **Bonus Flat** | Every time the chosen earning action happens | **Bonus points** | | **Spending Goal** | Cumulative spend reaching each milestone | Any reward, per milestone | | **Order Booster** | Number of orders reaching each milestone | Any reward, per milestone | | **Streak** | Repeating an action across consecutive periods | Any reward | | **Multi-Action Challenge** | Completing a set of different actions | Any reward | | **Dormant Reactivation** | An inactive customer coming back | Any reward | | **First Purchase Boost** | A customer's very first order | Any reward | "Any reward" means **Amount discount**, **% off discount**, **Free shipping**, **Free product**, **Bonus points** or **Store credit** (Store credit is Shopify only). Discount rewards are always issued as a **One-time discount code**; automatic discounts aren't available in boosters. **Product & Collection Multiplier**, **Spending Goal**, **Order Booster** and **First Purchase Boost** are driven by orders, so they need the **Place an order** Way to Earn to be enabled. If it's off, these types are greyed out in the **Create Booster Campaign** picker with a note telling you to enable it in Ways to Earn first. For the other types, the earning-action list only shows Ways to Earn that are currently enabled. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). The Ways to Earn you want to boost are enabled (for example, **Place an order**). ## Setup guide Go to **Apps → Yuko Loyalty → Loyalty → Programs**. Under **Booster Campaigns Status**, make sure the toggle shows *Booster campaigns are currently enabled*. In the **Booster Campaigns** section, click **Create campaign**. The **Create Booster Campaign** picker opens. Select a booster type. * **Campaign Name** — internal name, not visible to customers. * **Description** — optional internal note. Each type has its own section (earning action, milestones, streak period and so on). See the page for each type. Click **Add Reward** and configure it. Spending Goal and Order Booster attach rewards to each milestone instead. Configure **Targeting Rules**, **Limits** and **Display Settings**, described below. These are in the right-hand column, together with the **Status** toggle and a live **Summary** of the campaign. **Status** is enabled by default. Click **Save**. ## Common settings Every booster type shares the settings below. ### Schedule | Option | How it works | | - | - | | **One-time** | Runs between a **Start Date & Time** and an **End Date & Time** (both required). | | **Recurring** | Repeats on a cycle from a **Start Date & Time**. Choose a **Recurring Period**: **Days** (select weekdays under **Recurring days**; only offered for Multiplier, Product & Collection Multiplier and Bonus Flat), **Weeks** (**Every 2 weeks** or **Every 3 weeks**) or **Months** (**Every 2 months**, **Every quarter** or **Every 6 months**). | | **Evergreen (always on)** | Runs continuously with no dates. This is the default. | For weekly and monthly recurrence, each cycle is active for one week or one calendar month, then the campaign is quiet until the next cycle starts. For example, *Every 2 weeks* from June 5 is active June 5–11, quiet June 12–18 and active again from June 19. Progress on goal-based boosters (spending, orders, streaks, challenges) is tracked per cycle. ### Targeting Rules By default a campaign applies to every loyalty customer. Click **Add Rule** to narrow it down, then choose whether **Customers must** **Match ALL rules (AND)** or **Match ANY rule (OR)**. | Rule | What it checks | | - | - | | **Customer Tags** | The customer has one of the selected Shopify customer tags. | | **VIP Tiers** | The customer is in one of the selected VIP tiers. Multiplier and Product & Collection Multiplier only. | | **Membership** | The customer holds one of the selected memberships. | | **Products** | **All products** with optional **Exclude specific products from this campaign**, or **Specific products**. Only for order-driven campaigns (see below). | | **Collections** | **All collections** with optional **Exclude specific collections from this campaign**, or **Specific collections**. Only for order-driven campaigns. | | **Min lifetime orders** | The customer has placed at least this many orders. | | **Min lifetime spend** | The customer has spent at least this amount. | | **Min account age** | The customer's account is at least this many days old. | | **Min points earned** | Total points the customer has earned to date. | | **Min points spent** | Total points the customer has redeemed to date. | The **Products** and **Collections** rules appear when there's an order to check: always for Spending Goal, Order Booster and First Purchase Boost, and for Multiplier, Bonus Flat, Streak and Dormant Reactivation when the action is **Place an order**. They aren't offered for Multi-Action Challenge or Product & Collection Multiplier (which has its own product picker). Minimum values must be greater than 0. ### Limits * **Max participants** — the most customers who can join the campaign. Leave blank for unlimited. * **Max completions per customer** — how many times one customer can complete it. Leave blank for unlimited. On a recurring schedule, the limit applies to each cycle. This field is hidden for First Purchase Boost (which fires once per customer) and Multi-Action Challenge, and for Multiplier or Bonus Flat campaigns built on an action customers can only earn once (**Sign Up**, **Facebook Like**, **Facebook Share**, **Instagram Follow**, **Twitter Follow**, **Twitter Share**, **Subscribe to Newsletter** or **Subscribe to SMS**). ### Stacking * **Stackable with other campaigns** — checked by default. If unchecked, this campaign is exclusive. When an exclusive campaign qualifies, only one exclusive campaign is applied to that action (the one highest in your campaign list) and other boosters don't fire alongside it. Drag campaigns in the list to set their order. * **Ignore if customer earned VIP tier multiplier** — Multiplier and Product & Collection Multiplier only. Skips the boost for an action where the customer already received a VIP tier bonus, so tier and campaign multipliers don't pile up. ### Display Settings * **Show in loyalty widget** — display this campaign across all loyalty widgets. Checked by default. * **Widget labels** — customer-facing copy for the campaign. Which labels appear depends on the type: **Body text**, **Call-to-action above progress bar**, **Status text under progress bar**, **Reward banner — locked** and **Reward banner — unlocked**. New campaigns start with the default copy filled in, and each label lists the tokens you can use (for example `[title]`, `[reward]`, `[points_label]`). Labels are required while **Show in loyalty widget** is checked. ### Publishing Choose where the campaign is available. **Online store** is currently the only sales channel, and at least one channel must be selected. ### Icon Pick one of the preset icons. It's shown in the widgets next to the campaign title. ## Managing campaigns * **Tabs** — the list has **Active & inactive** and **Archived** tabs. Each row shows the earning action, a **Stackable** or **Exclusive** badge, the type and the schedule. * **Enable/disable** — use the toggle on each row. * **Reorder** — drag rows to set priority. Order matters for exclusive campaigns. * **Archive** — the archive icon stops the campaign and moves it to the **Archived** tab. You can unarchive it at any time. * **Delete** — campaigns that already have participants can't be deleted. Archive them instead to keep the participant history. * **Turn off all boosters** — switching off **Booster Campaigns Status** opens **Disable Booster Campaigns**. Confirming hides booster campaigns from your widgets and stops all boosted earning. When you open a saved campaign, it has three tabs: * **Configuration** — the campaign settings. * **Participants** — customers in the campaign, with their progress and a status of **In Progress**, **Completed** or **Expired**. Search by name or email, filter by status and sort by joined date, progress or completion date. * **Activity** — every reward the campaign issued, with customer, activity, value, reward (including any coupon code) and date. ## How boosters work 1. A customer performs an action (for example, places an order). 2. Yuko checks every enabled booster campaign whose schedule is active, and filters by the campaign's targeting rules and limits. 3. Each matching campaign updates the customer's progress. When a campaign's condition is met (an action is multiplied, a milestone is reached, a streak completes), its reward is issued. 4. Exclusive campaigns win over stackable ones, as described under **Stacking**. 5. The reward shows in the customer's activity, and in the campaign's **Activity** tab. ## When to use a booster vs. a Way to Earn | You want to… | Use | | - | - | | Reward every qualifying action, always | **Way to Earn** | | Drive a result over a specific window or for a specific cohort | **Booster Campaign** | | Give VIP members a permanent earning advantage | **Multiplier** (evergreen, VIP Tiers rule) | | Push a specific product range | **Product & Collection Multiplier** | | Reward a customer's first order | **First Purchase Boost** | | Recover customers who come back after being inactive | **Dormant Reactivation** | | Drive basket size | **Spending Goal** | | Drive purchase frequency | **Order Booster** or **Streak** | ## Best practices **Start with one or two boosters.** A storefront with five overlapping boosters dilutes attention and confuses your earning math. **Use a multiplier instead of a discount** the next time you'd reach for a percentage off. Same urgency, no margin hit. **Reserve evergreen boosters for cohorts** such as VIP tiers or paid members. Store-wide boosters that never end become invisible. **Test with a real customer record** before launching publicly, then check the **Participants** and **Activity** tabs. ## FAQs Product & Collection Multiplier, Spending Goal, Order Booster and First Purchase Boost need the **Place an order** Way to Earn to be enabled. Turn it on under Ways to Earn and the type becomes selectable. No. The earning action (or qualifying action) is locked once the campaign is saved. Create a new campaign if you need a different action. Campaigns with participants can't be deleted. Archive them instead; archiving stops the campaign and keeps its history. Yes, by default. On Multiplier and Product & Collection Multiplier campaigns, check **Ignore if customer earned VIP tier multiplier** to skip the boost when a tier bonus was already awarded for the same action. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Product & Collection Multiplier Booster Source: https://docs.yuko.so/loyalty/booster-campaigns/product-collection-multiplier Multiply the points earned on selected products or collections only. Everything else in the order earns at the standard rate. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns → Create campaign → **Product & Collection Multiplier** ## Overview A Product & Collection Multiplier boosts points only for the part of an order that matches the products or collections you pick. If a customer buys a boosted item and a regular item in one order, only the boosted item's share of the order earns the multiplied points. It always works on the **Place an order** Way to Earn. ## Why you need it? A store-wide multiplier rewards whatever the customer happens to buy. When you want to steer attention to a launch, a hero category or overstock, you need the boost to apply to those products only, so you don't pay extra points on everything else. ## When to use it? * You're launching a new collection and want to drive traffic to it. * You want to move slow-selling or overstocked items without marking them down. * You want a permanent earning advantage on a high-margin category. * You want to promote a seasonal range (gifting, summer, back-to-school) for a few weeks. ## Before you start The **Place an order** Way to Earn is enabled. If it's off, this type is greyed out in the **Create Booster Campaign** picker. ## How to configure it? Go to **Apps → Yuko Loyalty → Loyalty → Programs**. In the **Booster Campaigns** section, click **Create campaign** and select **Product & Collection Multiplier**. Enter a **Campaign Name** (internal) and an optional **Description**. In **Products & Collections**, click **Browse** next to **Products** and/or **Collections** and pick the items. You must select at least one product or collection. Click **Add Reward**. Enter a **Name** (visible on the storefront) and the **Multiplier**, a value between 1.1 and 10.0. The campaign has exactly one reward. Add **Targeting Rules** such as **VIP Tiers**, **Customer Tags** or **Membership**. Set **Max participants** and **Max completions per customer** if needed. **One-time**, **Recurring** or **Evergreen (always on)**. Keep **Stackable with other campaigns** checked, or uncheck it to make the campaign exclusive. Check **Ignore if customer earned VIP tier multiplier** to skip the boost on orders where the customer's VIP tier already gave them a bonus. The **Body text** widget label defaults to *"Earn extra points on selected products & collections while this campaign is live."* Available tokens: `[title]`, `[reward]`, `[points_label]`. Keep **Online store** selected under **Publishing** and choose an **Icon**. **Status** is enabled by default. Click **Save**. ## How it works 1. A customer places an order and earns their normal **Place an order** points. 2. Yuko works out how much of the order subtotal comes from the selected products or collections. 3. The bonus is **base points × (eligible subtotal ÷ order subtotal) × (multiplier − 1)**, credited as a separate entry. 4. If nothing in the order matches, no bonus is added. **Example:** a 2× campaign on your *New Arrivals* collection. A customer places a $100 order (earning 100 base points) where $60 is from *New Arrivals*. They get 100 × 0.6 × 1 = **60 bonus points**, for 160 in total. ## Use cases / Examples **1. Collection launch week.** 2× on the new collection for its first week (**One-time** schedule). **2. Overstock clearance.** 3× on a specific overstocked product for 10 days, instead of a markdown. **3. Evergreen hero category.** 1.5× on your highest-margin collection, always on, so customers learn which range earns fastest. **4. VIP-only launch.** 2× on a new collection with a **VIP Tiers** rule for your top tier, as an early-access perk. ## FAQs Yes. If both campaigns are stackable, a matching order gets both bonuses. Each bonus is calculated on the base order points, so they add up rather than multiply each other. No. This type only works on orders, because it needs the order's items to check against your selection. This type has its own **Products & Collections** picker, so those targeting rules aren't offered. ## Next Steps Schedule, targeting, stacking and display settings shared by all boosters. Multiply points on every order, or on any other earning action. Show the campaign on every storefront page. The base Way to Earn this booster builds on. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Spending Goal Booster Source: https://docs.yuko.so/loyalty/booster-campaigns/spending-goal Reward customers as their cumulative spend crosses one or more milestones. Drives basket size, not just frequency. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns → Create campaign → **Spending Goal** ## Overview A Spending Goal tracks how much a customer spends while the campaign runs and rewards them each time their total crosses a milestone. For example: **spend $150 → 500 bonus points, spend $300 → \$20 off**. The spend can come from one large order or several smaller ones. You can set up to 20 milestones, and each milestone can have one or more rewards of any type. ## Why you need it? Multipliers and flat bonuses reward whatever the customer spends. Spending goals make the customer aim higher. When a customer knows there's a reward for crossing $150, they add the extra item to reach it. *"I was going to spend $90"\* becomes *"\$150 because I want the reward"*. Basket size grows without a discount. ## When to use it? * You want to lift average order value over a defined period. * You're running a launch and want bigger baskets, not just more customers. * You want a recurring stretch goal for your best customers. * You want a ladder of rewards that keeps customers climbing. ## Before you start The **Place an order** Way to Earn is enabled. If it's off, this type is greyed out in the **Create Booster Campaign** picker. ## How to configure it? Go to **Apps → Yuko Loyalty → Loyalty → Programs**. In the **Booster Campaigns** section, click **Create campaign** and select **Spending Goal**. Enter a **Campaign Name** (internal) and an optional **Description**. Under **Milestones**, set the **Spending Amount** for **Milestone 1**: the amount the customer must spend to unlock it. Click **Add milestone** for more (up to 20). Each milestone must be higher than the one before. In each milestone, click **Add reward** and choose **Amount discount**, **% off discount**, **Free shipping**, **Free product**, **Bonus points** or **Store credit** (Shopify only). Every milestone needs at least one reward. Under **Spending Booster Goal**, check **Set a minimum order amount** and enter the **Minimum Order Amount**. Only orders above this amount count toward each milestone. Add **Targeting Rules**, including **Products** or **Collections** rules. Set **Max participants** and **Max completions per customer** if needed. The schedule defines the window in which spend counts: **One-time** (start and end date), **Recurring** (by weeks or months, with progress tracked per cycle) or **Evergreen (always on)**. Two widget labels apply: **Call-to-action above progress bar** (default *"Spend \[remaining] more to unlock \[next\_reward]"*) and **Status text under progress bar** (default *"\[current] / \[target]"*). Other tokens: `[title]`, `[reward]`, `[points_label]`, `[milestones_done]`, `[milestones_total]`. **Status** is enabled by default. Click **Save**. ## How it works 1. Each order a targeted customer places while the campaign is active adds its order total to their running spend (orders below the minimum order amount are skipped). 2. When the running spend reaches a milestone, that milestone's rewards are issued. One large order can unlock several milestones at once. 3. Once every milestone is reached, the customer has completed the campaign. If **Max completions per customer** allows it, their next order starts a fresh run. 4. On a recurring schedule, progress is tracked separately for each cycle. Track customers' progress in the campaign's **Participants** tab and issued rewards in the **Activity** tab. ## Use cases / Examples **1. Launch-week ladder.** One-time, launch week: $100 → 200 bonus points, $200 → free shipping, $300 → $25 off. **2. Quarterly stretch goal.** Recurring, **Months**, **Every quarter**: spend \$300 in the active month → 1,000 bonus points. **3. Collection-focused spend.** Add a **Collections** rule so only customers buying from a specific range qualify, with milestones at $150 and $250. **4. Holiday gifting goal.** One-time, Dec 1–15: spend \$250 → 1,000 points. Gift baskets are bigger anyway; the reward tilts the customer's full gift list toward you. **5. VIP-only stretch.** Evergreen with a **Customer Tags** or **Min lifetime spend** rule, and a free product at the top milestone. ## How to promote it Spending goals work best when the customer can see their progress. * **Storefront:** with **Show in loyalty widget** checked, the **[Loyalty Nudges](/onsite-widgets/loyalty-nudges)** widget, the **[Floating Rewards](/onsite-widgets/floating-launcher)** launcher and customer account page show a progress bar using your widget labels. * **Email:** announce the milestones and the window through your ESP. With **[Klaviyo](/integrations/klaviyo)**, you can trigger a follow-up after each order to remind customers how close they are. * **WhatsApp:** if you've connected a WhatsApp provider, save it for customers who are close to a milestone as the window closes. ## FAQs The window is the campaign's **Schedule**. Use a one-time schedule for a fixed window, or a recurring schedule for a repeating one. No. Each order is counted once per cycle. Yes. Click **Add reward** again inside the milestone. ## Next Steps Schedule, targeting, stacking and display settings shared by all boosters. Want to drive the number of orders instead of basket size? Reward consistent buying across consecutive periods. Show spending progress on every storefront page. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Streak Booster Source: https://docs.yuko.so/loyalty/booster-campaigns/streak Reward customers for repeating an action across consecutive weeks, months or quarters. Borrows the streak psychology that makes habit apps sticky. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Booster Campaigns → Create campaign → **Streak** ## Overview A Streak rewards customers for repeating a qualifying action in consecutive periods (weeks, months or quarters). For example: **order at least once a month for 3 consecutive months → 1,000 bonus points**. If the customer misses a period, the streak resets. ## Why you need it? Most loyalty programs reward transactions. Streaks reward **consistency**. Consistency compounds into habit. A customer who is two months into a three-month streak protects it, and will place an order sooner than they normally would to keep it alive. ## When to use it? * You sell repeat-purchase categories where a weekly or monthly cadence is natural. * You want to reward customers for *not pausing*, not just for buying more. * You're trying to build a buying rhythm rather than a one-off spike. * You want to keep reviews flowing steadily (with **Write a review** as the qualifying action). ## How to configure it? Go to **Apps → Yuko Loyalty → Loyalty → Programs**. In the **Booster Campaigns** section, click **Create campaign** and select **Streak**. Enter a **Campaign Name** (internal) and an optional **Description**. Under **Qualifying action**, pick **Place an order** or **Write a review** (only enabled Ways to Earn are listed). For **Place an order**, you can also check **Set a minimum order amount**; only orders above this amount count toward the streak. The qualifying action can't be changed after the campaign is saved. * **Period** — **Week**, **Month** or **Quarter**: the unit of time for each streak interval. * **Consecutive Periods** — how many periods in a row the customer must keep up (2–24). * **Min Actions Per Period** — the minimum number of times the qualifying action must happen in each period (at least 1). Click **Add Reward** and choose **Amount discount**, **% off discount**, **Free shipping**, **Free product**, **Bonus points** or **Store credit** (Shopify only). The reward is issued when the streak is complete. Add **Targeting Rules**. With **Place an order** as the qualifying action, **Products** and **Collections** rules are also available. Set **Max participants** and **Max completions per customer** if needed. **One-time**, **Recurring** (by weeks or months) or **Evergreen (always on)**. Streaks usually run evergreen, because the streak itself defines the time frame. Streak has four widget labels: **Call-to-action above progress bar**, **Status text under progress bar**, **Reward banner — locked** and **Reward banner — unlocked**. Tokens include `[current]`, `[target]`, `[remaining]`, `[period]` and `[period_plural]`, plus `[title]`, `[reward]` and `[points_label]`. **Status** is enabled by default. Click **Save**. ## How it works 1. The first qualifying action starts the customer's current period. 2. A period counts toward the streak when the customer reaches **Min Actions Per Period** in it. 3. If a whole period passes without the action, the streak resets to zero. 4. When the customer has kept the streak for **Consecutive Periods** in a row, the reward is issued and the participant is marked **Completed**. You can follow each customer's streak in the campaign's **Participants** tab, which shows the periods completed and the actions in the current period. ## Use cases / Examples **1. Monthly buyer streak.** Period **Month**, 3 consecutive periods, 1 action per period, **Place an order** → 500 bonus points. Subscription-like behaviour without a recurring charge. **2. Weekly replenishment streak.** Period **Week**, 4 consecutive periods, **Place an order** with a minimum order amount → free shipping on the next order. **3. Quarterly loyalist.** Period **Quarter**, 4 consecutive periods → a free product. A year of steady buying earns a meaningful reward. **4. Steady reviewer.** Period **Month**, 3 consecutive periods, **Write a review** → 300 bonus points. ## How to promote it * **Storefront:** with **Show in loyalty widget** checked, the **[Loyalty Nudges](/onsite-widgets/loyalty-nudges)** widget, the **[Floating Rewards](/onsite-widgets/floating-launcher)** launcher and customer account page show the customer's current streak and the reward banner. * **Email:** at the start of each period, remind customers on a streak that they need to act again to keep it. With **[Klaviyo](/integrations/klaviyo)**, you can segment by loyalty activity. * **WhatsApp:** if you've connected a WhatsApp provider, use it for *"your streak ends this week"* nudges. ## FAQs No. The **Period** options are **Week**, **Month** and **Quarter**. **Place an order** and **Write a review**. The action's Way to Earn must be enabled. Create two Streak campaigns with different **Consecutive Periods**, each with its own reward. ## Next Steps Schedule, targeting, stacking and display settings shared by all boosters. Reward the number of orders instead of consecutive periods. Reward a mix of different actions. Show the streak on every storefront page. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Customers Source: https://docs.yuko.so/loyalty/customers Find customers, see their points, tier and activity, adjust balances, assign tiers, exclude them from the program and import points. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Customers ## Introduction The **Customers** page is your day-to-day view of the loyalty program. It lists your store's customers with their loyalty status, points and tier, and opens a detail page for each one with their activity, rewards, orders and the actions you need for support. **Customers is a top-level item** in the Yuko sidebar, next to Loyalty, VIP, Referral and Membership. You don't need to be inside Loyalty to reach it. You can also see a customer's loyalty details and adjust their points without leaving Shopify, from the [Yuko Loyalty block](#in-shopify-admin) on the Shopify customer page. ## What problem this solves When a customer asks *"where are my points?"* you need to answer quickly. The Customers page gives you the full history, and lets you fix balances or change a tier without touching anything else. ## When to use * Answering support questions about missing or incorrect points. * Giving a goodwill credit or removing points awarded in error. * Placing a customer in a VIP tier manually. * Removing a customer (for example a staff or test account) from the program. * Moving point balances in from a previous loyalty app. ## Overview * Searchable, sortable list with **Status**, **VIP Tier**, **Birthday**, **Membership**, point totals and **Referral Count**. * Filters for status, points balance, total earned, total redeemed, VIP tier, membership and referral count. * Customer detail page with **Activities**, **Active Rewards**, **Recent Orders**, a loyalty summary, VIP tier and referrals. * **Adjust balance** to credit or debit points, with optional expiry on credits. * **Assign tier** to override a customer's VIP tier. * **Exclude from program**, optionally resetting the customer's points, discounts and tags. * **Import customer points** from a CSV. * A **Yuko Loyalty** block and an **Adjust balance** action on the Shopify admin customer page. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## The customer list The list shows these columns: **Name** (with email), **Phone**, **Status**, **VIP Tier**, **Birthday**, **Membership**, **Point Balance**, **Point Earned**, **Point Redeemed** and **Referral Count**. VIP Tier, Membership and Referral Count appear only when those programs are enabled. **Status** is one of: | Status | Meaning | | - | - | | **Member** | A customer who has taken part in the program, for example by earning or redeeming points | | **Guest** | A customer synced from your store who hasn't taken part in the program yet | | **Excluded** | Excluded from the loyalty program with **Exclude from program** on the customer's page | ### Search, filter and sort In your Shopify admin, go to **Apps → Yuko Loyalty → Customers**. Type in the search box to search across customers, for example by name or email. Add any of these filters: * **Status** — All, Member, Guest or Excluded. * **Points Balance**, **Total Earned**, **Total Redeemed** — pick an operator (**Greater than or equal (≥)**, **Less than or equal (≤)** or **Equal (=)**) and enter a value. * **VIP Tier** and **Membership** — pick one or more. * **Referral Count** — operator and value. Sort by **Date Joined**, **Points Balance**, **Total Earned**, **Total Redeemed**, **Email** or **Referral Count**. The list is sorted by highest points balance first by default. Click a row to open the customer's detail page. ## The customer detail page The detail page shows the customer's name and status badge, and three main sections: * **Activities** — every points credit, debit, redemption and tier change, newest first. * **Active Rewards** — reward codes the customer has and hasn't used yet. * **Recent Orders** — the customer's latest orders. The side panel shows: * **Overview** — the **Loyalty point balance**, with the **Adjust balance** button. * **Loyalty summary** — **Points earned**, **Points spent**, **Points expired** and **Total orders**. * **VIP tier** — the current tier (marked **Manual** if assigned by hand), **Tier multiplier**, **Next tier**, **Progress to next tier** and **Highest tier reached**, with **Assign tier** and **Clear override**. * **Membership** — the customer's paid membership, if the Membership program is enabled. * **Referrals** — referrals made, completed, who referred them, and their referral link. From the page header you can also open **View on Shopify** and **Exclude from program**. ### Adjust balance On the customer's detail page, click **Adjust balance**. Pick **Credit (Add points)** or **Debit (Remove points)**. Enter the number of **Points** (a whole number, at least 1) and an optional **Update reason** for your team's records. For a credit, set **Is expire enabled** to **Yes**, then choose **Expire after** and an **Expire period** (Day, Week, Month or Year). Points expiry is available on select plans. Click **Adjust points**. The balance updates straight away and the adjustment appears in **Activities**. A debit can't remove more points than the customer has. Excluded customers can't have their balance adjusted. ### Assign tier Click **Assign tier**, then: * **Tier** — the VIP tier to place the customer in. * **Expires at (optional)** — leave empty for no expiry. This sets both the manual override expiry and the tier retention expiry. * **Note (optional)** — the reason for the manual override. The tier shows a **Manual** badge and, if set, **Override expires**. Click **Clear override** to return the customer to their earned tier. See [VIP Tiers](/vip-tiers/overview). ### Exclude from program Click **Exclude from program** in the page header. In the confirmation: * Leave **Reset all points, discounts, and tiers** unticked to exclude the customer without resetting their points, discounts or tags. * Tick it to also reset their points and activities, remove their active discounts and clear their loyalty tags. Click **Exclude**. The customer's status becomes **Excluded** and they stop earning. To bring them back, click **Add to program**. ## Import customer points Use import to bring in balances from another loyalty app or a spreadsheet. On the Customers page, click **Import customer points**. Yuko checks that your customers have finished syncing from your store. If not, click **Go to Integrations** and wait for the sync to complete. Drag in or browse to a CSV file of **500 KB or less**. The file needs these headers: `platform_customer_id`, `customer_email`, `phone`, `points`. Yuko validates the file and shows **Import Statistics**: **Total Rows**, **Invalid Rows** and **Skipped Rows**. Click **Continue to Import**, tick **I confirm and want to proceed with the import**, and click **Confirm & Import**. Customers who already exist are given the points. Customers who don't exist yet are added. **Migrating from another loyalty app?** If you'd rather base starting balances on real Shopify order history, use [Backfill Points](/loyalty/backfill-points). It calculates points from past orders using your Place an order rule. ## In Shopify admin Yuko adds two extensions to the **customer page in your Shopify admin** (Shopify admin → Customers → a customer): * **Yuko Loyalty block** — shows **Points balance**, **Points earned**, **Points redeemed**, **VIP tier** (when VIP tiers are enabled), **Referrals** and **Referral link**. When collapsed, it summarises the balance and tier. It has two buttons: **Adjust points balance** and **View in Yuko**, which opens the customer in the Yuko app. * **Adjust balance action** — opens from the block's **Adjust points balance** button or from the customer page's **More actions** menu. Choose **Credit (Add points)** or **Debit (Remove points)**, enter **Points** and an optional **Update reason**, and click **Adjust points**. Use these when your team works from Shopify's customer page, for example while handling an order or support request. If you don't see the **Yuko Loyalty** block, check that it's added and visible in the app blocks on the Shopify customer page. ## How it works * Customers sync from your Shopify store into Yuko. Every synced customer is listed, starting as a **Guest** until they take part in the program. * Every adjustment and import is written to the customer's points ledger and appears in **Activities**. * Adjustments are direct changes to the balance. They don't trigger Ways to Earn. * Excluded customers stay on the list with the **Excluded** status but don't earn. * Customers with a tag listed under **Exclude customers by tag** in [Loyalty Settings](/loyalty/program-settings) don't earn either, but they keep their **Member** or **Guest** status on this list. ### Decision guidance * **Always add an Update reason** when adjusting points. It helps your team understand the history later. * **Use import for one-off migrations.** For ongoing syncs from another system, use the [REST API](/integrations/rest-api). * **Use Backfill Points instead of import** when you want balances to reflect actual order history. * **Exclude rather than debit** staff or test accounts, so they stop earning altogether. ### Limitations * There's no customer export from this page. * Import files must be CSV, 500 KB or less, with the exact headers listed above. * Import adds points; it doesn't overwrite existing balances. * A debit can't take a balance below zero. ## Examples * A support agent credits 200 points to a customer whose delivery was late, with the reason *Goodwill credit, delivery delay*. * A store migrating from another app imports a CSV of 12,000 customers and their old balances. * A merchant excludes staff accounts and ticks **Reset all points, discounts, and tiers** to clear what they'd earned. ## Best practices **Treat Activities as the source of truth.** It's the full record of what happened to a customer's points. **Prefer manual tier assignment with an expiry** for temporary upgrades, such as a VIP trial, so customers return to their earned tier automatically. ## FAQs They're in your store's customer list but haven't taken part in the loyalty program yet. They become a **Member** once they take part, for example by earning or redeeming points. Not from the Customers page. Use the [REST API](/integrations/rest-api) or an integration such as [Klaviyo](/integrations/klaviyo) to get loyalty data out of Yuko. Yes. Use the **Adjust points balance** button on the **Yuko Loyalty** block, or the Adjust balance action in **More actions**. They're added as new customers and given the points. Import takes balances you supply in a CSV. [Backfill Points](/loyalty/backfill-points) calculates points from past Shopify orders using your Place an order rule, with no CSV needed. ## Related Award points for orders placed before loyalty was enabled. Award points to a group of customers in one go. Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # One-time Campaigns Source: https://docs.yuko.so/loyalty/one-time-campaigns Award a one-off batch of points to a Shopify segment, tagged customers or everyone, immediately or on a schedule, and track the orders it drives. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → One-time Campaigns ## Overview A one-time campaign is a **single, targeted points award** to a group of customers. Pick the audience, set the points, decide when it runs, and Yuko awards every matched customer once. Where a [Way to Earn](/loyalty/ways-to-earn/overview) rewards *every* qualifying action, and a [Booster Campaign](/loyalty/booster-campaigns/overview) *multiplies or adds* to those rewards over a period, a one-time campaign is the loyalty version of an email blast: **a one-shot event with a clear start, a clear end and a measurable audience**. One-time Campaigns are available on select plans. ## Why you need them Boosters and Ways to Earn are structural: they change the *rules* of your program. One-time campaigns are tactical: they let you act right now. * *"We just launched and every balance is 0. Let's give everyone 200 points so day-one activity happens."* * *"A batch of orders shipped late. Let's give those customers 300 points to smooth things over."* * *"Black Friday morning. Everyone opens their inbox to find fresh points already on their account."* A coupon could do the same job, but every recipient has to remember and apply it. A points award lands **directly on the customer's balance**, where your loyalty program already shows them how to spend it. ## When to use them * You need a targeted goodwill gesture (apology, thank-you, VIP recognition). * You want to seed balances at program launch so customers *have something to spend on day one*. * You want a scheduled push tied to a moment (BFCM, an anniversary, a product launch). * You want to reward a defined group (contest winners, beta testers, early adopters) that you've tagged in Shopify. * You want to reward a Shopify segment you've already built for email or ads. If you need a *rule that keeps rewarding*, use a [Way to Earn](/loyalty/ways-to-earn/overview). If you need a *multiplier or bonus over a period*, use a [Booster Campaign](/loyalty/booster-campaigns/overview). One-time campaigns award **once per matched customer** and then close. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You've chosen the audience: a Shopify segment, one or more customer tags, or all customers. You've chosen how many points each customer gets. You've decided whether the points should expire (recommended for goodwill and launch awards). ## How to configure a one-time campaign Go to **Apps → Yuko Loyalty → Loyalty → Programs**, scroll to **One-time Campaigns** and click **Create campaign**. * **Campaign Name** — internal, not shown to customers. Pick something you'll recognise later (for example `bfcm-2026-all-200pts`, not `Test 1`). * **Points amount** — the flat amount every matched customer gets, from 1 to 10,000,000. * **Shopify Segment** (default) — type to search, or click **Browse** to pick from your Shopify customer segments. * **Customer Tags** — pick one or more Shopify customer tags. Customers matching ANY selected tag are awarded. * **All Customers** — every customer in Yuko. Tick **Run immediately**, or set a **Send date** and **Send time** for a scheduled run. Turn on **Expiry**, then set **Expires after** (1 to 3,650) and a **Period** of **Days**, **Weeks** or **Months**. The awarded points expire that long after they're awarded. Under **Workflow events**, tick **Trigger workflow events** to fire the **One-time Campaign Points Awarded** event for each customer who receives points. Any matching workflow can then send WhatsApp or email messages. See [Workflow events and identifiers](#workflow-events-and-identifiers). In **Estimated reach**, click **Preview audience**. Yuko shows how many customers match and the total points you're about to award. Nothing is awarded yet. Click **Save**. A campaign set to **Run immediately** starts right away; otherwise it shows as **Scheduled** until its send time. The form checks your input before saving. For example: *Campaign name is required*, *Segment is required*, *Select at least one tag* and *Send time is required*. HTML isn't allowed in text fields. ### Audience types in detail | Audience | What it targets | Best for | | - | - | - | | **Shopify Segment** | Members of a Shopify customer segment | Precise groups you've already built for marketing ("VIP dormant 90d", "Bought Collection X") | | **Customer Tags** | Customers with ANY of the selected Shopify tags | Hand-picked lists: contest winners, affected customers, beta testers | | **All Customers** | Every customer in Yuko | Launch awards, storewide holiday bonuses, apologies that affect everyone | Audiences are resolved **when the campaign runs**, not when you create it. A scheduled campaign targeting a segment awards whoever is in that segment at send time. Customers excluded from the loyalty program are never awarded. ### Points expiry Expiry is optional but powerful. Points from a one-time campaign are a gift, so customers feel less urgency to use them and they can sit unused for months. A short expiry (for example **30 days**) turns the gift into a *"use it or lose it"* moment, which drives the redemption and next order you're after. The campaign summary shows *Points do not expire (lifetime)* when expiry is off. ### Preview before you run **Preview audience** shows: 1. **Customers** — how many customers match right now. 2. **Total points** — customers × Points amount. Use it as often as you like. Nothing is written until you save. ## Tracking the campaign Open a campaign from the list (click **View**) to see three tabs. ### Configuration * **Progress** — a progress bar with **Recipients**, **Processed**, **Awarded** and **Failed** counts. * **Status** — **Scheduled**, **Running**, **Completed**, **Completed with errors**, **Cancelling**, **Cancelled** or **Failed**. * **Banners** for the current state: * **Campaign in progress** — points are being awarded; the page refreshes every 5 seconds. * **Completed with errors** — some customers couldn't be awarded; see the Participants tab. * **No customers matched** — the audience matched 0 customers, so no points were awarded. * **Campaign failed** — the run stopped with an error. Contact support if this happens. * **Status** toggle (side panel) — while a campaign is scheduled or running, you can disable it. A disabled campaign is skipped by the scheduler until you enable it again. * **Identifier** — the campaign's unique ID, with a **Copy** button (see below). You can edit a campaign's settings only while it's **Scheduled**. ### Participants The per-customer log: customer, points, status and when they were processed. * Search by name or email, and filter by status: **Awarded**, **Skipped**, **Failed** or **Pending**. * Customers are **Skipped** (not failed) when, for example, they're excluded from the loyalty program or no longer exist in Yuko. * Once the campaign is **Completed** or **Completed with errors**, click **Export** to download a CSV with these columns: `customer_name`, `email`, `phone`, `platform_customer_id`, `point_balance`, `points_awarded`, `status`, `expiry_date` and `redemption_link`. The `redemption_link` column holds a personal, signed link parameter for each customer (it starts with `?customer_uuid=`). Add it to the end of your store URL in an SMS, WhatsApp or email send, and Yuko recognises the customer when they land on your store so they can redeem their points straight away. ### Conversions Shows **orders placed using coupons that were redeemed with points awarded by this campaign**: * **Revenue**, **Orders**, **Customers** and **Points redeemed** totals. * A table of each order with the customer, order number and discount code, points used, order total and date. The campaign list also shows **Orders** and **Revenue** for each campaign at a glance. ## Workflow events and identifiers Tick **Trigger workflow events** to fire the **One-time Campaign Points Awarded** workflow trigger for every customer who receives points. Build a [workflow](/workflows/overview) on that trigger to send a WhatsApp or email message the moment the points land. The event carries the campaign name, the points awarded, their expiry date and the customer's details, so your messages can include them. To send different messages for different campaigns, add a condition to the workflow: * **Campaign Identifier** — matches the campaign's **Identifier**. Copy it from the campaign's Configuration tab. * **Campaign Name** — matches the campaign's name. See [Triggers and conditions](/workflows/triggers-and-conditions) for how conditions work. ## Cancelling a campaign Click **Cancel campaign** on a **Scheduled** or **Running** campaign. * A scheduled campaign is cancelled before it awards anyone. * A running campaign stops processing. Customers already awarded keep their points. Once a campaign is **Completed**, **Completed with errors**, **Cancelled** or **Failed**, it's final and can't be resumed. ## Use cases Seven ways teams use one-time campaigns. Each pairs naturally with a message; see [How to promote it](#how-to-promote-it). ### 1. Program launch: seed everyone with a starter balance **The problem:** you just switched Yuko on. Every balance is 0, so there's nothing to redeem and no reason to visit the loyalty page. **The play:** run a one-time campaign to **All Customers** for a modest starter amount (100–300 pts) with a 30–60 day expiry. Announce it with an email such as *"There's already \$5 waiting on your account."* ### 2. VIP win-back: a targeted award for dormant high-value customers **The problem:** customers who spent more than \$500 last year haven't ordered in 90+ days. A discount would work, but it teaches them to wait for discounts. **The play:** build a Shopify segment for `lifetime_spend > 500 AND days_since_last_order > 90`. Run a one-time campaign to that segment with 500–1,000 pts and a **21-day expiry**. Announce it personally: *"It's been a while, so we've added 500 points to your account."* The short expiry does the heavy lifting. ### 3. Apology or service recovery **The problem:** something went wrong (a shipping delay, a defective batch, an outage) and you want to make it right for every affected customer without creating coupons by hand. **The play:** tag the affected customers in Shopify (for example `delay-oct-2026`) and run a one-time campaign with **Customer Tags**. Use a proportional amount (for example 500 pts for a delay, 1,000 pts for a defective product) and turn on **Trigger workflow events** so a workflow sends the apology the moment the points land. ### 4. BFCM or holiday bonus for everyone **The problem:** on Black Friday morning, every inbox is full of "50% off" subject lines. You need to stand out without matching a discount you can't afford. **The play:** **schedule** a one-time campaign to **All Customers** for 8:00 AM on Black Friday. Award 200 pts with a **3-day expiry**. The message says *"200 loyalty points added to your account. Redeem by Sunday."* There's no code to remember, so redeeming is one click. ### 5. Cohort anniversary **The problem:** you want to reward a group, such as customers who joined in March 2025, on the anniversary of joining. This isn't a personal birthday (use the [Birthday Way to Earn](/loyalty/ways-to-earn/birthday) for that). **The play:** tag the cohort in Shopify or build a segment on the sign-up date range, then schedule a one-time campaign on the anniversary. 150–250 pts, 30-day expiry, with a message like *"It's been a year since you joined us."* ### 6. Contest or campaign winners **The problem:** you ran a UGC contest, a referral push or an ambassador drive with a defined winner list. Crediting each winner by hand is slow and error-prone. **The play:** tag the winners in Shopify (`contest_winner_nov2026`) and run a one-time campaign to that tag with **Customer Tags** for the prize value (2,000–5,000 pts). ### 7. Migration bonus after switching loyalty platforms **The problem:** you moved to Yuko from another loyalty platform. Even if you migrated balances, customers may not feel the continuity. **The play:** run a one-time campaign to **All Customers** for a symbolic bonus (100–250 pts) with a clear message: *"We've moved your account to a new loyalty program. Here's a welcome bonus for staying with us."* Combine it with [Backfill Points](/loyalty/backfill-points) if you also want to award points for customers' past orders. ## How to promote it A one-time campaign quietly adds points to a customer's balance, but the customer only *knows* if you tell them. Every use case above works better with a message sent at the same time. Tick **Trigger workflow events** and send a WhatsApp or email message from a workflow the moment each customer is awarded. Use the synced points balance on Klaviyo profiles to send an email that shows each customer their new balance. Reach customers where email won't cut through: apologies, VIP win-backs, BFCM. Show the fresh balance on your storefront the next time the customer visits. ### Sequencing a launch For a 200-point award to all customers on BFCM morning: 1. **2 days before.** Create the campaign, schedule it for 8:00 AM on BFCM, tick **Trigger workflow events** and preview the audience. 2. **Send time.** Yuko awards the points and fires **One-time Campaign Points Awarded** for each customer. 3. **Minutes later.** Your workflow (filtered by **Campaign Identifier**) sends *"You now have new points. Redeem by Sunday."* 4. **Same day.** Loyalty Nudges on the storefront show the fresh balance when customers visit. 5. **After it runs.** Watch the **Conversions** tab for orders, revenue and points redeemed. 6. **3 days later.** The points expire. Optionally send a last-call reminder to customers who haven't redeemed. ## Limitations * **One award per customer per campaign.** Create a new campaign to award the same customers again. * **Edits only while Scheduled.** Once a campaign is running, you can only cancel it. * **Audiences are resolved at send time.** Anyone in the segment or with the tag at that moment is awarded. * **Flat points only.** Every matched customer gets the same Points amount. * **Expiry is a duration**, not a fixed calendar date. ## FAQs Boosters change the earning rules over a period, for example *"2× points on all orders this weekend"*. One-time campaigns don't touch the rules; they award a fixed amount of points to a fixed audience once. Yes. Create a new campaign. Each campaign awards a customer only once, but nothing stops you running campaign A on Monday and campaign B to the same audience on Friday. They're awarded once. Customer Tags matches customers with ANY selected tag, and each customer is awarded once per campaign. Yes, while it's **Scheduled** or **Running**. Cancelling a running campaign stops further awards; customers already awarded keep their points. You can also disable a scheduled campaign with the **Status** toggle and enable it again later. Expiry is a duration (days, weeks or months after the award). For a fixed date, schedule the campaign so the duration ends on the day you want. Customers are skipped when they're excluded from the loyalty program or no longer exist in Yuko. Skipped customers don't make the campaign fail. Open the **Conversions** tab. It shows revenue, orders, customers and points redeemed for orders that used coupons redeemed with this campaign's points. Use [Backfill Points](/loyalty/backfill-points). It's a related, separate flow for past orders. No fixed cap. Large campaigns are processed in the background and the progress bar updates as they run. Very large audiences can take a few minutes. Yes. Tag 5–10 test customers, run a campaign with **Customer Tags**, check the Participants tab and your workflow messages, then run the real one. ## Related Award points for orders placed before you launched Yuko. Change the earning rules over a period instead of awarding a fixed amount. The always-on earning rules your boosters and one-time campaigns build on. Use the One-time Campaign Points Awarded trigger and campaign conditions. Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Loyalty Program Source: https://docs.yuko.so/loyalty/overview Reward customers with points for orders, sign-ups, reviews, marketing opt-ins, social actions and more, then let them redeem points for discounts, free products, free shipping or store credit. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty ## What is the Yuko Loyalty Program Your loyalty program is the centre of Yuko. It defines: * **How customers earn** — [Ways to Earn](/loyalty/ways-to-earn/overview) like *Place an order*, *Sign Up*, *Birthday* or *Subscribe to SMS*. * **How customers redeem** — [Ways to Redeem](/loyalty/ways-to-redeem/overview) like *Amount Discount*, *Free Product* or *Store Credit*, online and at Shopify POS. * **When to give extra** — [Booster Campaigns](/loyalty/booster-campaigns/overview) and [One-time Campaigns](/loyalty/one-time-campaigns). * **The program rules** — [Loyalty Settings](/loyalty/program-settings): point labels, which order statuses earn and revert points, and excluded customers. * **What customers see** — loyalty [widgets](/onsite-widgets/overview) and [emails](/emails/loyalty-emails). ## Where things are The **Loyalty** section of the Yuko app has four tabs: | Tab | What's there | | - | - | | **Programs** | **Loyalty Program Status** (turn the program on or off), **Quick Start**, **Setup Overview**, **Ways to earn**, **Ways to redeem**, **Booster Campaigns** and **One-time Campaigns** | | **Widgets** | The storefront loyalty widgets and branding | | **Emails** | Loyalty email templates | | **Settings** | Program-wide settings, Backfill points for past orders, and Reset customer activities | [Customers](/loyalty/customers) and [VIP Tiers](/vip-tiers/overview) have their own items in the Yuko sidebar. **Setup Overview** appears once **Place an order** is active. It shows your **Reward value rate** (how much value customers get back for what they spend, usually 1–10%) and the cost of each point. ## Who it's for * Stores that want to drive **repeat purchases**. * Brands that want to **own their customer relationship** instead of renting it from ad channels. * Teams ready to reward loyalty with points instead of relying only on blanket discounts. ## How it fits together ``` Customer action ──→ Way to Earn ──→ Points credited (× VIP multiplier) │ ▼ Customer redeems ←── Way to Redeem ←── Points balance │ ▼ Discount / free product / free shipping / store credit ``` Every page in this section documents one piece of that loop. ## Turning the program on or off Use the **Loyalty Program Status** toggle at the top of the **Programs** tab. Disabling the program turns off all loyalty widgets and stops all loyalty activity until you enable it again. ## Get started in 15 minutes Follow the [Quickstart](/getting-started/quickstart) to launch a working program: install Yuko, set up one way to earn and one reward, add the widgets to your theme and test with a real order. ## Recommended reading Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Loyalty Settings Source: https://docs.yuko.so/loyalty/program-settings Program-wide loyalty settings — point rounding and labels, cash value of points, which order statuses earn and revert points, login trigger, storefront languages, customer exclusions, Shopify order tags and reset. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Settings ## Introduction The **Settings** tab holds the rules that apply across your whole loyalty program: what points are called, how fractional points are rounded, which order status earns points and which status takes them back, and which customers are left out of the program. Earning amounts, expiry and product exclusions are **not** set here. Those live on each [Way to Earn](/loyalty/ways-to-earn/overview) and [Way to Redeem](/loyalty/ways-to-redeem/overview). ## What problem this solves Every store handles orders differently. Some want points the moment an order is paid, others only once it ships or is delivered. Settings lets you match the program to how your store actually works, in one place, without editing each earning rule. ## When to use * During initial setup, before you launch the program. * When you rename points (for example *Stars* or *Coins*). * When you change when orders earn points (Paid, Fulfilled or Delivered). * When you want to keep staff, wholesale or test accounts out of the program. * When you need to wipe test data before going live. ## Overview | Setting | What it controls | | - | - | | **Rounding Type** | How fractional points are rounded: Round, Floor or Ceil | | **Point Label** | Singular and plural name for points | | **Store Credit Label** | Singular and plural name for store credit | | **Points to Cash Conversion Rate** | What 100 points are worth, used to show customers the value of their balance | | **Earning Status** | Which order status earns points: Paid, Fulfilled and/or Delivered | | **Revert Point Status** | Which order status takes points back: Refunded and/or Cancelled | | **Custom login trigger** | How logged-out customers are sent to log in from Yuko widgets | | **Primary language** / **Languages** | The storefront languages your loyalty widgets use | | **Exclude customers by tag** | Customer tags that keep customers out of the program | | **Orders** (Shopify only) | Tags Yuko adds to Shopify orders that earned or redeemed points | | **Backfill points for past orders** | A one-time award for orders placed before loyalty was enabled | | **Reset customer activities** | Wipes all customer points and activity | ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty** and open the **Settings** tab. Pick **Round** (the default), **Floor** (always round down) or **Ceil** (always round up). This decides what happens when a calculation produces a fraction of a point, for example 1 point per $1 on a $24.60 order. * **Point Label** — **Singular** and **Plural** fields (defaults `point` and `points`). Customers see these in widgets and emails. * **Store Credit Label** — **Singular** and **Plural** fields (defaults `store credit` and `store credits`). Answer *"What are 100 points worth in your store?"*. Enter the cash value of 100 points, for example `1` for \$1. Yuko uses this to show customers what their points balance is worth in notifications and emails. Tick one or more of **Paid** (the default), **Fulfilled** and **Delivered**. An order earns points the first time it reaches any ticked status, and only once. Tick **Refunded**, **Cancelled** or both (both are ticked by default). When an order reaches a ticked status, the points it earned are taken back. When a logged-out customer opens the launcher, spotlight or cart redeem widget, Yuko can start your store's own login flow instead of redirecting to the Shopify account page: * **Use a CSS element** — enter a **Login element selector** (for example `#login-button` or `a[href='/account']`). Yuko clicks that element, such as your theme's own login button. * **Use a link** — enter a **Login link** (for example `https://example.com/account/login`). Yuko sends the customer to that URL. Leave it empty to keep the default redirect. Choose a **Primary language** and add every language you want available under **Languages**. Edit the wording for each language in [Translations](/account/translations). Under **Exclude customers by tag**, search for and add the customer tags to keep out of the loyalty program (for example `wholesale` or `staff`). Under **Orders**, edit the tags Yuko adds to Shopify orders: * **Earned orders** — tags added to orders where customers earned points (default `YUKO:EARNED`). * **Redeemed orders** — tags added to orders where customers redeemed points (default `YUKO:REDEEMED`). Type a tag and press Enter to add it. Click **Save**. Changes apply to earning and redemption events from then on. ## How it works ### Earning Status * **Paid** — the order earns when Shopify marks it as paid. * **Fulfilled** — the order earns when it's fulfilled. * **Delivered** — the order earns when Shopify records the fulfillment as delivered. If you tick more than one, the order earns at whichever ticked status it reaches first. Yuko records that the order has earned, so reaching a second ticked status later doesn't award points again. Cancelled orders never earn. ### Revert Point Status * **Refunded** — points are taken back when the order's payment status becomes refunded. * **Cancelled** — points are taken back when the order is cancelled. Both the base points and any VIP tier bonus points from that order are reverted. If the order's points are still in their [holding period](/loyalty/ways-to-earn/place-an-order#holding-period), they're cancelled before they ever reach the customer's balance. ### Excluded customers A customer is excluded from the program if they have one of your excluded tags, or if you excluded them manually from [Customers](/loyalty/customers). Excluded customers don't earn points. Only customers excluded manually show the **Excluded** status on the Customers list; tag-excluded customers keep their Member or Guest status there. ### Order tags Order tags are written to the Shopify order, not the customer. Use them to filter orders in Shopify, build reports, or trigger Shopify Flow automations for loyalty orders. ### Points to Cash Conversion Rate This rate is for display. Each reward defines its own points cost and value, so changing the rate doesn't change what any reward costs or gives. ### Decision guidance * **Paid** suits most stores. Choose **Fulfilled** or **Delivered** if you see many cancellations before shipping, or if you want points to arrive when the customer has the product. * Keep both **Refunded** and **Cancelled** ticked unless you have a clear reason to let customers keep points from those orders. * For a return window, combine **Paid** with a **Holding period** on [Place an order](/loyalty/ways-to-earn/place-an-order) instead of switching to Delivered. * Pick a points name that fits your brand but stays obvious: *Points*, *Stars* and *Coins* all work. ### Limitations * Changing the Earning Status doesn't re-process past orders. * Revert Point Status works on the whole order. A partial refund doesn't take back a share of the points. * Order tags and the Orders section are only available on Shopify stores. * There's no program-wide points expiry or product exclusion here. Set expiry on each Way to Earn and Way to Redeem, and product or collection exclusions on [Place an order](/loyalty/ways-to-earn/place-an-order). ## Backfill points for past orders The Settings tab also holds **Backfill points for past orders**, a one-time award for orders customers placed before loyalty was enabled. See [Backfill Points](/loyalty/backfill-points). ## Reset customer activities **Reset customer activities** deletes all customer points activity for your store: activity history, points transactions and balances. It also resets VIP tier memberships and removes the reward discount codes Yuko created for customers in Shopify. Your customers, ways to earn, rewards and settings stay as they are. To run it, click **Reset customer activities**, type `RESET` in the confirmation box and click **Confirm Reset**. **Reset customer activities can't be undone.** Use it only to clear test data before launch. ## Examples * A fashion store keeps **Paid** as the Earning Status and adds a 14-day holding period on Place an order to cover returns. * A furniture brand switches the Earning Status to **Delivered** so points land when the customer receives their order. * A B2B and retail store adds the `wholesale` tag under **Exclude customers by tag** so trade accounts don't earn. ## Best practices **Lock in your points name early.** Customers anchor on it the first time they see the program. **Use order tags in Shopify.** Filtering orders by `YUKO:REDEEMED` is a quick way to see how many orders used a loyalty reward. **Never reset a live program.** Reset removes every customer's balance and history. ## FAQs Yes. Customers see the new label straight away in widgets and emails, so pick it carefully before launch. No. The order earns at the first ticked status it reaches. Yuko marks it as earned so later statuses don't award again. If **Refunded** is ticked under Revert Point Status, Yuko takes back the points the order earned, including any VIP tier bonus. Points still on hold are cancelled instead. The tagging setting here tags **orders**, not customers. Use the **Earned orders** and **Redeemed orders** tags to label orders that earned or redeemed points. All customer points activity, transactions and balances, plus tier memberships and the customer discount codes Yuko created. Customers and your program setup stay. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Anniversary Source: https://docs.yuko.so/loyalty/ways-to-earn/anniversary Award customers a yearly points bonus on the anniversary of their account creation. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Anniversary** ## Introduction Reward customers each year on the anniversary of joining your store. It's a simple way to thank customers for sticking around. ## What problem this solves Most stores never thank customers for staying loyal. Anniversary points create a yearly moment of appreciation tied to a date you already have. ## When to use * You have customers who've been with you for at least a year. * You want a yearly engagement moment that doesn't depend on collecting birthdays. * You want to reward long-term customers without setting up VIP tiers. ## Overview * Yearly bonus on the anniversary of the customer's account creation. * Based on the date the customer account was created in Shopify. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Anniversary**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on anniversary** (a whole number, at least 1). Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works * Yuko runs a daily check for customers whose account creation date (month and day) is today. * Customers earn from their first anniversary onward; nothing is awarded in the year the account was created. * Each customer earns once per year. * Accounts created on 29 February are rewarded on 1 March in non-leap years. * You can also send the [Anniversary Reminder](/emails/loyalty-emails) email and use the Anniversary Reminder trigger in [Shopify Flow](/integrations/shopify-flow). With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Turn on Tiers** so VIP customers get a bigger anniversary bonus. * **Combine with an email** acknowledging the milestone ("3 years with us!"). ### Limitations * Based on the Shopify account creation date, not the first order date. * No points for anniversaries that passed before you enabled it. * Excluded customers don't earn. * You can have one Anniversary way to earn. ## Examples * An apparel brand awards 200 anniversary points with a 60-day expiry, alongside a thank-you email. ## Best practices **Send a thank-you email alongside.** The points are the gift; the email makes the moment. ## FAQs The date the customer's account was created in Shopify. No. Customers earn on their next anniversary after you enable it. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Birthday Source: https://docs.yuko.so/loyalty/ways-to-earn/birthday Award customers a yearly points bonus on their birthday. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Birthday** ## Introduction Give customers a points bonus on their birthday. It's a low-cost, high-emotion gesture that brings customers back to your store. ## What problem this solves Birthday emails are everywhere. A points bonus stands out because it's a gift the customer can actually spend. ## When to use * You collect (or are willing to collect) birthdays from customers. * You want a yearly engagement moment that doesn't feel promotional. * You want to reward customers with something their inbox doesn't already offer. ## Overview * Yearly bonus on the customer's birthday. * Needs the customer's birth date, which customers can add in your loyalty widgets. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). Customers can add their birthday, for example through the birthday section of the [Floating Rewards](/onsite-widgets/floating-launcher) launcher. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Birthday**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on birthday** (a whole number, at least 1). Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works * Yuko runs a daily check for customers whose birthday is today (month and day; the year is ignored). * Matching customers with an active Birthday way to earn get the points. * Each customer earns once per year. * Customers born on 29 February are rewarded on 1 March in non-leap years. * You can also send the [Birthday Reminder](/emails/loyalty-emails) email and use the Birthday Reminder trigger in [Shopify Flow](/integrations/shopify-flow). With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Pick a generous bonus.** Birthdays happen once a year; 200–500 points is a common range. * **Add an expiry** so the gift creates a reason to come back soon. ### Limitations * Customers without a birth date don't earn. * Excluded customers don't earn. * Birthday points are awarded to Shopify customers. * You can have one Birthday way to earn. ## Examples * A homeware brand awards 300 points on birthdays with a 30-day expiry. Customers use them on a self-treat purchase. ## Best practices **Ask for birthdays early.** Prompt customers to add their birthday when they join. **Pair with a birthday email.** Points plus a celebratory message work better than either alone. ## FAQs Through the birthday section in your loyalty widgets, such as the [Floating Rewards](/onsite-widgets/floating-launcher) launcher. You can also see each customer's birthday on the [Customers](/loyalty/customers) list. Not from the storefront. Once a birthday is saved through the loyalty widget, the customer can't change it there. No. Customers earn the Birthday reward on their birthday, once a year. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Daily Visit Source: https://docs.yuko.so/loyalty/ways-to-earn/daily-visit Reward logged-in customers for visiting your store on a daily, weekly or monthly cadence. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Daily Visit** ## Introduction Award a small bonus to customers who come back to your store regularly. Effective for stores with content beyond products, such as lookbooks, blogs, restock pages or drop calendars. ## What problem this solves It's easy to focus on the first purchase and forget about repeat visits. Daily Visit rewards customers for coming back between orders. ## When to use * You publish content beyond products (blogs, lookbooks, drop calendars). * You run regular product drops or restocks. * You want customers visiting between purchases. ## Overview * Reward a visit once per **Earning interval**: Daily, Weekly or Monthly. * Optional **URL** to only count visits to a specific page. * Points are awarded automatically; the customer doesn't need to click anything. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Daily Visit**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on daily visit** (a whole number, at least 1). * **URL** (optional) — a store path where customers must visit to earn, for example `/pages/about-us` or `/products/example`. Leave it empty to allow earning on any page. * **Earning interval** — how often customers can earn: **Daily** (the default), **Weekly** or **Monthly**. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works * When a logged-in customer loads a storefront page, the Yuko theme app embed checks whether Daily Visit is active. * If you set a URL, the visit only counts on that path or pages under it. The launcher also shows a **Visit** button that links to it. * If the customer hasn't earned yet in the current interval, the points are credited automatically. * **Daily** resets each day, **Weekly** each calendar week (Monday start), **Monthly** each calendar month. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Keep the value tiny** — 5 points a day, not 50. This shouldn't dominate your points economy. * **Use a URL** when you have a page worth visiting, like a drops calendar. * **Add a short expiry** so daily points don't pile up. ### Limitations * Customers must be logged in. Anonymous visits don't earn. * The [Theme App Embed](/installation-and-setup/theme-app-embed) must be enabled. * Reloading or opening more tabs doesn't add points; one credit per interval. * You can have one Daily Visit way to earn. ## Examples * A streetwear brand awards 5 points per day for visiting `/pages/drops`, with a 14-day expiry. * A content-led store awards 10 points weekly for any logged-in visit. ## Best practices **Use a URL whenever you can.** It rewards visiting a page that matters, not just any page. **Pair it with content worth visiting.** Daily Visit works best when there's something new to see. ## FAQs No. The customer must be logged in. Only one credit is awarded per interval per customer. No. Points are awarded automatically when a logged-in customer loads a matching page. Yes. Any device counts as long as the customer is logged in and the theme app embed is enabled. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Facebook Like Source: https://docs.yuko.so/loyalty/ways-to-earn/facebook-like Reward customers with points for liking your Facebook page. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Facebook Like** ## Introduction Award customers a one-time points bonus when they like your Facebook page from your loyalty widgets. ## What problem this solves Growing a Facebook page audience organically is hard. A small points reward gets your existing customers to take a two-second action that adds to your social proof. ## When to use * You have an active Facebook page. * Your audience is on Facebook in meaningful numbers. * You want a low-effort, one-time way to earn. ## Overview * One-time reward per customer. * Configured with your **Facebook Page** name or ID. * Points are credited when the customer clicks **Like**. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You have an active Facebook page. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Facebook Like**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on Facebook like** (a whole number, at least 1). Enter your **Facebook Page** name or ID (the part after `facebook.com/`). Customers are sent to `https://www.facebook.com/yourpage`. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works 1. The way to earn appears in the **Ways to earn** list of your loyalty widgets (for example the [Floating Rewards](/onsite-widgets/floating-launcher) launcher, [rewards landing page](/onsite-widgets/rewards-landing-page) and [customer account page](/onsite-widgets/customer-account-page)) with a **Like** button. 2. A logged-in customer clicks **Like**. Your Facebook page opens in a new tab. 3. Yuko credits the points as soon as the customer clicks. Social networks don't let apps confirm the action, so earning is based on the click. 4. The way to earn then shows as completed for that customer. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Keep the reward modest** (5–20 points). It's a quick one-time action. * **Only run networks where your customers are active.** Pick two or three rather than every network. ### Limitations * Earning is based on the click; Yuko can't check whether the customer actually liked the page. * One reward per customer. * Customers must be logged in to earn. * You can have one Facebook Like way to earn. ## Examples * A beauty brand awards 10 points for a Facebook like, expiring in 30 days. ## Best practices **Check your page name before saving.** Open `facebook.com/yourpage` yourself to make sure it's the right page. ## FAQs It isn't. Facebook doesn't let apps confirm likes, so Yuko credits points when the customer clicks **Like**. No. It's a one-time reward per customer. Your page name or ID only, for example `yourpage`, not the full URL. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Facebook Share Source: https://docs.yuko.so/loyalty/ways-to-earn/facebook-share Reward customers with points for sharing a link to your store on Facebook. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Facebook Share** ## Introduction Award customers a one-time points bonus when they share a link to your store or a product on Facebook from your loyalty widgets. ## What problem this solves Word of mouth is a high-converting acquisition channel and hard to create on demand. A points reward gives customers a nudge to share. ## When to use * Your audience is on Facebook. * You have a page worth sharing, such as your homepage, a launch or a bestseller. * You want a low-effort, one-time way to earn. ## Overview * One-time reward per customer. * Configured with a **Share URL**. * Points are credited when the customer clicks **Share**. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Facebook Share**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on Facebook share** (a whole number, at least 1). Enter the complete **Share URL** customers will share, for example `https://yourwebsite.com/product`. It must be a valid URL. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works 1. The way to earn appears in the **Ways to earn** list of your loyalty widgets (for example the [Floating Rewards](/onsite-widgets/floating-launcher) launcher, [rewards landing page](/onsite-widgets/rewards-landing-page) and [customer account page](/onsite-widgets/customer-account-page)) with a **Share** button. 2. A logged-in customer clicks **Share**. Facebook's share dialog opens with your Share URL. 3. Yuko credits the points as soon as the customer clicks. Social networks don't let apps confirm the action, so earning is based on the click. 4. The way to earn then shows as completed for that customer. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Share a page worth sharing.** A launch page or bestseller gets more clicks from friends than a generic homepage. * **Keep the reward modest.** It's a quick one-time action. ### Limitations * Earning is based on the click; Facebook doesn't let apps confirm that a post was published. * One reward per customer. Sharing again doesn't earn more. * Customers must be logged in to earn. * You can have one Facebook Share way to earn, with one Share URL. ## Examples * 15 points for sharing a new collection page on Facebook during a launch. ## Best practices **Update the Share URL for big moments.** Point it at your current launch or sale page. ## FAQs No. Facebook Share is a one-time reward per customer. Yes. Edit the **Share URL** and save. Customers who already earned won't earn again. It isn't. Yuko credits points when the customer clicks **Share** and the share dialog opens. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Instagram Follow Source: https://docs.yuko.so/loyalty/ways-to-earn/instagram-follow Reward customers with points for following your Instagram account. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Instagram Follow** ## Introduction Award customers a one-time points bonus when they follow your Instagram account from your loyalty widgets. ## What problem this solves Growing a Instagram audience organically is slow. A small points reward gets existing customers to take a two-second action that builds your following and social proof. ## When to use * You have an active Instagram account. * Your audience is active on Instagram. * You want a low-effort, one-time way to earn. ## Overview * One-time reward per customer. * Configured with your **Instagram Username**. * Points are credited when the customer clicks **Follow**. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You have an active Instagram account. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Instagram Follow**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on Instagram follow** (a whole number, at least 1). Enter your **Instagram Username** without the @ symbol. Customers are sent to `https://www.instagram.com/yourusername`. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works 1. The way to earn appears in the **Ways to earn** list of your loyalty widgets (for example the [Floating Rewards](/onsite-widgets/floating-launcher) launcher, [rewards landing page](/onsite-widgets/rewards-landing-page) and [customer account page](/onsite-widgets/customer-account-page)) with a **Follow** button. 2. A logged-in customer clicks **Follow**. Your Instagram profile opens in a new tab. 3. Yuko credits the points as soon as the customer clicks. Social networks don't let apps confirm the action, so earning is based on the click. 4. The way to earn then shows as completed for that customer. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Keep the reward modest** (5–20 points). It's a quick one-time action. * **Only run networks where your customers are active.** Pick two or three rather than every network. ### Limitations * Earning is based on the click; Yuko can't check whether the customer actually followed. * One reward per customer. Following again doesn't earn more. * Customers must be logged in to earn. * You can have one Instagram Follow way to earn. ## Examples * A beauty brand awards 10 points for following on Instagram, with a 30-day expiry. ## Best practices **Check the username before saving.** A typo sends customers to the wrong profile. ## FAQs It isn't. Instagram doesn't let apps confirm follows, so Yuko credits points when the customer clicks **Follow**. No. It's a one-time reward per customer. No. Enter only the username, without the @ symbol. Yuko builds the link `https://www.instagram.com/yourusername`. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Ways to Earn Source: https://docs.yuko.so/loyalty/ways-to-earn/overview Configure how customers earn points, from placing orders to birthdays, marketing opt-ins and social actions. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn Ways to Earn (also called **campaigns**) are the rules that award points. Each type maps to one customer action, and you can have one way to earn of each type. To add one, click **Add another way** in the **Ways to earn** section (or **Create campaign** if you have none yet) and pick a type. Types you've already added don't appear in the picker, and types that aren't on your plan are marked with an upgrade badge. ## Purchases and accounts Points per amount spent or per order. The cornerstone of any loyalty program. One-time reward when a customer creates an account. Reward product reviews, with an optional bonus for photos. ## Visits and marketing opt-ins Reward logged-in visits daily, weekly or monthly. Reward customers for opening a link you choose, like your YouTube channel. Reward email marketing opt-in (Shopify only). Reward SMS marketing opt-in (Shopify only). Reward WhatsApp marketing opt-in (Shopify only). ## Personal milestones Yearly bonus on the customer's birthday. Yearly bonus on the anniversary of the customer's account. ## Social actions One-time reward for liking your Facebook page. One-time reward for sharing a link on Facebook. One-time reward for following on Instagram. One-time reward for following on X (Twitter). One-time reward for sharing a link on X (Twitter). One-time reward for following on TikTok. One-time reward for following on Pinterest. Looking for **Refer a Friend**? Referrals are configured in the dedicated [Referrals](/referrals/overview) section, not here. ## Settings every way to earn shares * **Campaign Name** and **Description** — shown to customers on the storefront. The name supports `[earn_value]` and `[points_label]` (Place an order also supports `[earn_from_amount]`). * **Points** — a whole number of at least 1. * **Expiry** — optional; set **Expire after** and a **Period** (Day, Week, Month or Year). Available on select plans. * **Status** — turn the way to earn on or off. New ways to earn are on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — apply [VIP tier](/vip-tiers/overview) multipliers and bonus points to this way to earn. ## How ways to earn work 1. Yuko listens for the customer action (order reaches your Earning Status, account created, consent recorded, widget button clicked, and so on). 2. It checks the customer isn't excluded from the program and hasn't already earned within the way to earn's limit. 3. It calculates the points and rounds them using the **Rounding Type** in [Loyalty Settings](/loyalty/program-settings). 4. If **Tiers** is on, it adds the tier's multiplier and bonus points as a separate tier bonus entry. 5. It credits the customer's balance (or holds the points first, for Place an order with a holding period) and records the activity. How often a customer can earn depends on the type: | Type | How often | | - | - | | Place an order | Once per order | | Write a review | Once per product | | Birthday, Anniversary | Once a year | | Daily Visit | Once per Earning interval (Daily, Weekly or Monthly) | | Visit URL | Once, or once per day, week or month (Frequency) | | All other types | Once per customer | ## Managing ways to earn * **Reorder** ways to earn by dragging them in the list. * **Disable** a way to earn with its **Status** toggle to stop earning without losing its settings. * A way to earn used as the earning action by a [booster campaign](/loyalty/booster-campaigns/overview) can't be disabled or deleted. Disable or archive those booster campaigns first. ## Decision guidance * Start with **Place an order** and **Sign Up**. Those two cover the first account and the next purchase. * Add **Birthday** and **Anniversary** for engagement; they're personal, infrequent and feel generous. * Add **Write a review** if you collect reviews. It lifts submission rates. * Add **Subscribe to Newsletter**, **SMS** or **WhatsApp** to grow your owned channels. * Add **social** ways to earn only on networks where your customers actually spend time. ## Best practices **Don't overstuff the program.** Four or five well-tuned ways to earn beat fifteen that customers never notice. **Use VIP tiers to reward top customers more.** Turn on **Tiers** instead of creating bigger rewards for everyone. **Watch the activity feed** in [Customers](/loyalty/customers) for the first 30 days to see how customers actually earn. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Pinterest Follow Source: https://docs.yuko.so/loyalty/ways-to-earn/pinterest-follow Reward customers with points for following your Pinterest account. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Pinterest Follow** ## Introduction Award customers a one-time points bonus when they follow your Pinterest account from your loyalty widgets. ## What problem this solves Growing a Pinterest audience organically is slow. A small points reward gets existing customers to take a two-second action that builds your following and social proof. ## When to use * You have an active Pinterest account. * Your audience uses Pinterest for inspiration (home, fashion, food, crafts). * You want a low-effort, one-time way to earn. ## Overview * One-time reward per customer. * Configured with your **Pinterest Username**. * Points are credited when the customer clicks **Follow**. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You have an active Pinterest account. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Pinterest Follow**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on Pinterest follow** (a whole number, at least 1). Enter your **Pinterest Username** without the @ symbol. Customers are sent to `https://www.pinterest.com/yourusername`. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works 1. The way to earn appears in the **Ways to earn** list of your loyalty widgets (for example the [Floating Rewards](/onsite-widgets/floating-launcher) launcher, [rewards landing page](/onsite-widgets/rewards-landing-page) and [customer account page](/onsite-widgets/customer-account-page)) with a **Follow** button. 2. A logged-in customer clicks **Follow**. Your Pinterest profile opens in a new tab. 3. Yuko credits the points as soon as the customer clicks. Social networks don't let apps confirm the action, so earning is based on the click. 4. The way to earn then shows as completed for that customer. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Keep the reward modest** (5–20 points). It's a quick one-time action. * **Only run networks where your customers are active.** Pick two or three rather than every network. ### Limitations * Earning is based on the click; Yuko can't check whether the customer actually followed. * One reward per customer. Following again doesn't earn more. * Customers must be logged in to earn. * You can have one Pinterest Follow way to earn. ## Examples * A home décor store awards 10 points for following its Pinterest account. ## Best practices **Check the username before saving.** A typo sends customers to the wrong profile. ## FAQs It isn't. Pinterest doesn't let apps confirm follows, so Yuko credits points when the customer clicks **Follow**. No. It's a one-time reward per customer. No. Enter only the username, without the @ symbol. Yuko builds the link `https://www.pinterest.com/yourusername`. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Place an order Source: https://docs.yuko.so/loyalty/ways-to-earn/place-an-order Reward customers with points every time they place an order, either per amount spent or a fixed amount per order. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Place an order** ## Introduction Reward customers with points whenever they place an order. This is the highest-impact way to earn in any loyalty program: it ties earning directly to revenue and is the foundation for repeat purchases. ## What problem this solves Customers who buy once often don't return. By visibly rewarding every order, you give shoppers a reason to come back to your store instead of a competitor's. The points balance becomes a reason to stay. ## When to use * You want every paying customer earning, not just high spenders. * You're optimising for repeat-purchase rate or customer lifetime value. * You want VIP tiers to multiply what your best customers earn. ## Overview * **Incremented points (recommended)** — points for every amount spent (for example 1 point per \$1), or **Fixed amount of points** per order. * Optional **Expiry** on awarded points. * Optional **Holding period** before points reach the customer's balance. * **Exclusions** — leave out specific products or collections, and specific customers or customer tags. * Optional **Tiers** toggle to apply VIP tier multipliers. * You can have one Place an order way to earn. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You've chosen which order status earns points (**Earning Status**) in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Place an order**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]`, `[earn_from_amount]` and `[points_label]`, for example `Earn [earn_value] [points_label] per [earn_from_amount] spent`. * **Description** — short copy shown with the way to earn. Points scale with the order value. Enter **Amount spent** and **Points to earn**, for example 1 point for every \$1 spent. This is the default. Every eligible order earns the same amount. Enter **Points to earn**. Points and amounts must be whole numbers of at least 1. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. Turn on **Holding period**, then set **Hold points for** and a **Period** (Day, Week, Month or Year). Points are credited after the holding period ends. * **Exclude specific products or collections** — choose **Exclude by** **Products** or **Collections**, then search and select them. Excluded items don't count toward the points. * **Exclude customers** — search and select individual **Customers**, **Customer tags**, or both. These customers don't earn from orders. If you tick an exclusion, select at least one item or untick it again. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers. When on, **Tier Multipliers** lists the multiplier each tier gets. * **Summary** — a plain-language recap of your settings. Click **Save**. ## How it works 1. A customer places an order. 2. When the order reaches an **Earning Status** you ticked in [Loyalty Settings](/loyalty/program-settings) (Paid, Fulfilled or Delivered), Yuko checks it. Cancelled orders don't earn. 3. Yuko works out the eligible order amount. If you excluded products or collections, only the remaining items count. 4. Points are calculated with your earning method and rounded using your **Rounding Type**. 5. If **Tiers** is on, the customer's VIP tier multiplier and any tier bonus points for this way to earn are added as a separate tier bonus entry. 6. Points go to the customer's balance, or wait out the holding period first. 7. Each order earns once, even if it later reaches another ticked status. ### Holding period Use a holding period when you have a return or warranty window. Points sit **on hold** for the period you set, then become available. If the order is refunded or cancelled while the points are on hold, they're cancelled and never reach the customer's balance. ### Refunds and cancellations When an order reaches a **Revert Point Status** you ticked in [Loyalty Settings](/loyalty/program-settings) (Refunded and/or Cancelled), Yuko takes back the points that order earned, including the tier bonus. ### Tiers and multipliers With **Tiers** on and VIP tiers enabled, a customer in a tier earns base points × the tier's multiplier. The tier can set its own multiplier and bonus points for Place an order; otherwise its default point multiplier applies. Configure these in [VIP Tiers](/vip-tiers/overview). ### Decision guidance * **Use Incremented points** for most stores, especially with varied basket sizes or high-ticket items. * **Use Fixed amount of points** when basket sizes are similar or you want simple, predictable earning. * **Add a 7–30 day holding period** if refunds and returns are common. It saves you from taking points back after customers have spent them. * **Set expiry (12–24 months)** only if you want to push redemption; otherwise leave points without expiry. ### Limitations * One Place an order way to earn per store. * Points are awarded once per order. * A partial refund doesn't remove a share of the points. Points are reverted when the whole order reaches a Revert Point Status. * The tier multiplier is applied when points are awarded, not retroactively if the customer changes tier later. ## Examples * **Fashion store**: Incremented points, 1 point per \$1, 14-day holding period. Simple and refund-safe. * **Subscription brand**: Fixed amount of points, 50 per order. Predictable regardless of order value. * **Electronics store**: Incremented points, 2 points per \$1, gift cards collection excluded, Tiers on so Gold customers earn 1.5×. ## Best practices **Keep the math obvious.** "1 point per $1" is faster to grasp than "3 points per $7". **Match the holding period to your return window.** Customers rarely notice a short wait, and you avoid negative balances. **Don't exclude every sale collection.** Wide exclusions train customers to ignore the program. Reserve them for gift cards or promo-only items. ## FAQs When the order reaches an **Earning Status** ticked in [Loyalty Settings](/loyalty/program-settings): Paid (default), Fulfilled or Delivered. If a holding period is on, the points become available after it ends. If that status is ticked under **Revert Point Status** in Loyalty Settings, Yuko takes back the order's points. Points still on hold are cancelled. Yes. Tick **Exclude specific products or collections** and pick products or collections. The rest of the order still earns. Yes. Tick **Exclude customers** and pick customers or customer tags. To remove customers from the whole program, use **Exclude customers by tag** in [Loyalty Settings](/loyalty/program-settings) or **Exclude from program** on the customer's page in [Customers](/loyalty/customers). Turn on **Tiers** in the side panel. Customers in a VIP tier then earn the tier's multiplier (and any bonus points) on top of the base points, shown as a separate tier bonus entry. No. Points need a customer record, so the order must be linked to a customer. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Sign Up Source: https://docs.yuko.so/loyalty/ways-to-earn/sign-up Reward customers with points when they create an account on your Shopify store. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Sign Up** ## Introduction Give new customers a points bonus when they create an account. It turns a low-commitment action into the start of a loyalty relationship. ## What problem this solves Guest checkout is convenient, but it leaves you no way to recognise the customer next time. A sign-up bonus gives shoppers a reason to create an account and something to spend on their next order. ## When to use * You want to grow your registered customer base. * You want to move guest shoppers toward creating accounts. * You want a friendly first touch with the loyalty program. ## Overview * One-time reward per customer. * Awarded when a new customer account is created in Shopify. * Optional points expiry and VIP tier multipliers. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Sign Up**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on signup** (a whole number, at least 1). Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works * Yuko awards the points when Shopify creates a new customer account for your store. * Each customer earns the Sign Up reward once. * Excluded customers don't earn. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Pair with an expiry** to encourage a first redemption while interest is high. * **Calibrate the bonus** so it covers a meaningful part of your cheapest reward (for example half of it). ### Limitations * One reward per customer. * Only new Shopify customer accounts trigger it. Customers who existed before you enabled Sign Up don't earn it. * You can have one Sign Up way to earn. ## Examples * A skincare brand awards 200 points on sign-up, expiring in 30 days, where 500 points = \$5 off. * A wellness store awards 100 points on sign-up with no expiry to keep the program simple. ## Best practices **Mention the bonus on your sign-up form.** Customers won't take an action they don't know about. **Combine with Subscribe to Newsletter** so customers who sign up and opt in earn twice. ## FAQs No. It's a one-time reward per customer. No. Only accounts created after it's enabled earn. To reward existing customers, use a [one-time campaign](/loyalty/one-time-campaigns). Only if a customer account is created in Shopify for them. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Subscribe to Newsletter Source: https://docs.yuko.so/loyalty/ways-to-earn/subscribe-to-newsletter Reward customers with points when they subscribe to email marketing in Shopify. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Subscribe to Newsletter** ## Introduction Award customers a one-time points bonus when they subscribe to your email marketing. Points are awarded automatically when Shopify records their email consent. ## What problem this solves Email is one of your most valuable owned channels. A points reward gives customers a concrete reason to opt in. ## When to use * You're growing an email list. * You want to turn email sign-ups into loyalty members from day one. ## Overview * One-time reward per customer. * Triggered when Shopify records the customer's email marketing consent as subscribed. * Optional points expiry and VIP tier multipliers. * Available on Shopify stores, on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Subscribe to Newsletter**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn for newsletter subscription** (a whole number, at least 1). Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works * Shopify notifies Yuko when a customer's email marketing consent changes. * If the customer is now subscribed, Yuko awards the points. * It doesn't matter where the customer subscribed (for example your storefront, checkout, or an app that updates consent in Shopify), as long as Shopify records the consent. * Each customer earns once. Unsubscribing doesn't remove the points, and subscribing again doesn't earn more. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Calibrate the bonus** so it doesn't outweigh your other one-time ways to earn. * **Tell customers about the reward** wherever you ask them to subscribe. ### Limitations * Shopify stores only. It doesn't appear on other platforms. * Customers who were already subscribed before you enabled it don't earn for past consent. * One reward per customer. * You can have one Subscribe to Newsletter way to earn. ## Examples * 30 points for subscribing, promoted in a pop-up that says *Join our list, get 30 points.* ## Best practices **Mention the points in your sign-up pop-up copy.** It's a clear reason to subscribe. ## FAQs The points stay. They aren't reversed. Not for consent given before you enabled it. Only new consent updates recorded by Shopify trigger the reward. It works whenever the customer's email marketing consent is recorded in Shopify. If your email app writes consent back to Shopify, those sign-ups earn too. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Subscribe to SMS Source: https://docs.yuko.so/loyalty/ways-to-earn/subscribe-to-sms Reward customers with points when they subscribe to SMS marketing in Shopify. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Subscribe to SMS** ## Introduction Award customers a one-time points bonus when they subscribe to your SMS marketing. Points are awarded automatically when Shopify records their SMS consent. ## What problem this solves SMS has high open rates, but customers are cautious about sharing their number. A points reward makes the opt-in feel worth it. ## When to use * You send SMS marketing. * You want to grow your SMS subscriber list. ## Overview * One-time reward per customer. * Triggered when Shopify records the customer's SMS marketing consent as subscribed. * Optional points expiry and VIP tier multipliers. * Available on Shopify stores, on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Subscribe to SMS**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn for SMS subscription** (a whole number, at least 1). Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works * Shopify notifies Yuko when a customer's SMS marketing consent changes. * If the customer is now subscribed, Yuko awards the points. * It doesn't matter where the customer subscribed (for example your storefront, checkout, or an app that updates consent in Shopify), as long as Shopify records the consent. * Each customer earns once. Unsubscribing doesn't remove the points, and subscribing again doesn't earn more. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Calibrate the bonus** so it doesn't outweigh your other one-time ways to earn. * **Tell customers about the reward** wherever you ask them to subscribe. ### Limitations * Shopify stores only. It doesn't appear on other platforms. * Customers who were already subscribed before you enabled it don't earn for past consent. * One reward per customer. * You can have one Subscribe to SMS way to earn. ## Examples * 50 points for subscribing to SMS, promoted at checkout next to the SMS consent box. ## Best practices **Offer more than for email.** Customers value their phone number more, so a slightly bigger reward helps. ## FAQs The points stay. They aren't reversed. Not for consent given before you enabled it. Only new consent updates recorded by Shopify trigger the reward. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Subscribe to WhatsApp Source: https://docs.yuko.so/loyalty/ways-to-earn/subscribe-to-whatsapp Reward customers with points when they subscribe to WhatsApp marketing in Shopify. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Subscribe to WhatsApp** ## Introduction Award customers a one-time points bonus when they subscribe to your WhatsApp marketing. Points are awarded automatically when Shopify records their WhatsApp consent. ## What problem this solves WhatsApp is a personal, high-engagement channel. A points reward gives customers a reason to opt in to your messages. ## When to use * You send WhatsApp marketing messages. * You want to grow your WhatsApp subscriber list. ## Overview * One-time reward per customer. * Triggered when Shopify records the customer's WhatsApp marketing consent as subscribed. * Optional points expiry and VIP tier multipliers. * Available on Shopify stores, on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Subscribe to WhatsApp**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn for WhatsApp subscription** (a whole number, at least 1). Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works * Shopify notifies Yuko when a customer's WhatsApp marketing consent changes. * If the customer is now subscribed, Yuko awards the points. * It doesn't matter where the customer subscribed (for example your storefront, checkout, or an app that updates consent in Shopify), as long as Shopify records the consent. * Each customer earns once. Unsubscribing doesn't remove the points, and subscribing again doesn't earn more. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Calibrate the bonus** so it doesn't outweigh your other one-time ways to earn. * **Tell customers about the reward** wherever you ask them to subscribe. ### Limitations * Shopify stores only. It doesn't appear on other platforms. * Customers who were already subscribed before you enabled it don't earn for past consent. * One reward per customer. * You can have one Subscribe to WhatsApp way to earn. ## Examples * 50 points for subscribing to WhatsApp marketing, then a welcome message through your [WhatsApp integration](/integrations/whatsapp). ## Best practices **Follow up with a welcome message.** Use [Workflows](/workflows/overview) or your WhatsApp provider to confirm the points. ## FAQs The points stay. They aren't reversed. Not for consent given before you enabled it. Only new consent updates recorded by Shopify trigger the reward. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # TikTok Follow Source: https://docs.yuko.so/loyalty/ways-to-earn/tiktok-follow Reward customers with points for following your TikTok account. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **TikTok Follow** ## Introduction Award customers a one-time points bonus when they follow your TikTok account from your loyalty widgets. ## What problem this solves Growing a TikTok audience organically is slow. A small points reward gets existing customers to take a two-second action that builds your following and social proof. ## When to use * You have an active TikTok account. * Your audience is active on TikTok. * You want a low-effort, one-time way to earn. ## Overview * One-time reward per customer. * Configured with your **TikTok Username**. * Points are credited when the customer clicks **Follow**. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You have an active TikTok account. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **TikTok Follow**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on TikTok follow** (a whole number, at least 1). Enter your **TikTok Username** without the @ symbol. Customers are sent to `https://www.tiktok.com/@yourusername`. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works 1. The way to earn appears in the **Ways to earn** list of your loyalty widgets (for example the [Floating Rewards](/onsite-widgets/floating-launcher) launcher, [rewards landing page](/onsite-widgets/rewards-landing-page) and [customer account page](/onsite-widgets/customer-account-page)) with a **Follow** button. 2. A logged-in customer clicks **Follow**. Your TikTok profile opens in a new tab. 3. Yuko credits the points as soon as the customer clicks. Social networks don't let apps confirm the action, so earning is based on the click. 4. The way to earn then shows as completed for that customer. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Keep the reward modest** (5–20 points). It's a quick one-time action. * **Only run networks where your customers are active.** Pick two or three rather than every network. ### Limitations * Earning is based on the click; Yuko can't check whether the customer actually followed. * One reward per customer. Following again doesn't earn more. * Customers must be logged in to earn. * You can have one TikTok Follow way to earn. ## Examples * A streetwear brand awards 15 points for following on TikTok ahead of a product drop. ## Best practices **Check the username before saving.** A typo sends customers to the wrong profile. ## FAQs It isn't. TikTok doesn't let apps confirm follows, so Yuko credits points when the customer clicks **Follow**. No. It's a one-time reward per customer. No. Enter only the username, without the @ symbol. Yuko builds the link `https://www.tiktok.com/@yourusername`. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Twitter Follow Source: https://docs.yuko.so/loyalty/ways-to-earn/twitter-follow Reward customers with points for following your Twitter (X) account. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Twitter Follow** ## Introduction Award customers a one-time points bonus when they follow your Twitter (X) account from your loyalty widgets. ## What problem this solves Growing a Twitter (X) audience organically is slow. A small points reward gets existing customers to take a two-second action that builds your following and social proof. ## When to use * You have an active Twitter (X) account. * Your audience is active on X. * You want a low-effort, one-time way to earn. ## Overview * One-time reward per customer. * Configured with your **Twitter Username**. * Points are credited when the customer clicks **Follow**. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You have an active Twitter (X) account. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Twitter Follow**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn on Twitter (X) follow** (a whole number, at least 1). Enter your **Twitter Username** without the @ symbol. Customers are sent to `https://x.com/yourusername`. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works 1. The way to earn appears in the **Ways to earn** list of your loyalty widgets (for example the [Floating Rewards](/onsite-widgets/floating-launcher) launcher, [rewards landing page](/onsite-widgets/rewards-landing-page) and [customer account page](/onsite-widgets/customer-account-page)) with a **Follow** button. 2. A logged-in customer clicks **Follow**. Your Twitter (X) profile opens in a new tab. 3. Yuko credits the points as soon as the customer clicks. Social networks don't let apps confirm the action, so earning is based on the click. 4. The way to earn then shows as completed for that customer. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Keep the reward modest** (5–20 points). It's a quick one-time action. * **Only run networks where your customers are active.** Pick two or three rather than every network. ### Limitations * Earning is based on the click; Yuko can't check whether the customer actually followed. * One reward per customer. Following again doesn't earn more. * Customers must be logged in to earn. * You can have one Twitter Follow way to earn. ## Examples * A gaming accessories store awards 10 points for following its X account. ## Best practices **Check the username before saving.** A typo sends customers to the wrong profile. ## FAQs It isn't. Twitter (X) doesn't let apps confirm follows, so Yuko credits points when the customer clicks **Follow**. No. It's a one-time reward per customer. No. Enter only the username, without the @ symbol. Yuko builds the link `https://x.com/yourusername`. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Twitter Share Source: https://docs.yuko.so/loyalty/ways-to-earn/twitter-share Reward customers with points for sharing a link to your store on Twitter (X). **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Twitter Share** ## Introduction Award customers a one-time points bonus when they share a link to your store or a product on Twitter (X) from your loyalty widgets. You can pre-fill the post with your own message. ## What problem this solves Word of mouth is a high-converting acquisition channel and hard to create on demand. A points reward plus a ready-made message makes sharing quick. ## When to use * Your audience is active on X. * You have a page worth sharing, such as a launch or a bestseller. * You want to suggest the wording customers post. ## Overview * One-time reward per customer. * Configured with a **Share URL** and an optional **Share Message**. * Points are credited when the customer clicks **Share**. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Twitter Share**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn** (a whole number, at least 1). * **Share URL** — the complete URL customers will share, for example `https://yourwebsite.com/product`. Required. * **Share Message** — optional text included with the post, for example *Check out this amazing product!* Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works 1. The way to earn appears in the **Ways to earn** list of your loyalty widgets (for example the [Floating Rewards](/onsite-widgets/floating-launcher) launcher, [rewards landing page](/onsite-widgets/rewards-landing-page) and [customer account page](/onsite-widgets/customer-account-page)) with a **Share** button. 2. A logged-in customer clicks **Share**. A new X post opens with your Share URL and Share Message filled in. 3. Yuko credits the points as soon as the customer clicks. Social networks don't let apps confirm the action, so earning is based on the click. 4. The way to earn then shows as completed for that customer. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Write a message customers would actually post.** Short and specific beats salesy. * **Keep the reward modest.** It's a quick one-time action. ### Limitations * Earning is based on the click; X doesn't let apps confirm that the post was published. * One reward per customer. * Customers must be logged in to earn. * You can have one Twitter Share way to earn. ## Examples * 15 points for sharing a launch page, with the message *Just found my new favourite sneakers*. ## Best practices **Keep the Share Message short.** Leave room for the link and for customers to add their own words. ## FAQs Yes. The message is only pre-filled; customers can change it before posting. No. Twitter Share is a one-time reward per customer. It isn't. Yuko credits points when the customer clicks **Share**. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Visit URL Source: https://docs.yuko.so/loyalty/ways-to-earn/visit-url Reward customers with points for opening a link you choose, such as your YouTube channel, blog or community page. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Visit URL** ## Introduction Award customers points for opening a link you want to promote, like your YouTube channel, blog, podcast or community page. You choose how often a customer can earn: once, daily, weekly or monthly. ## What problem this solves Your social channels and content need traffic, but customers rarely go looking for them. A points reward in your loyalty widget sends them there. ## When to use * You want to drive traffic to a channel that isn't covered by the follow and share ways to earn (for example YouTube or a community forum). * You publish regular content and want customers to keep coming back to it. * You want to promote one link at a time. ## Overview * Configured with one **URL**. * **Frequency**: Once, Daily, Weekly or Monthly. * Points are credited when the customer clicks **Visit**. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Visit URL**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label]`. * **Description** — short copy shown with the way to earn. Enter **Points to earn for visiting the URL** (a whole number, at least 1). * **URL** — the link customers open to earn points, for example `https://www.youtube.com/@yourchannel`. It must start with `http://` or `https://`. * **Frequency** — how often each customer can earn from this URL: **Once** (the default), **Daily**, **Weekly** or **Monthly**. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers to this way to earn. Click **Save**. ## How it works 1. The way to earn appears in the **Ways to earn** list of your loyalty widgets (for example the [Floating Rewards](/onsite-widgets/floating-launcher) launcher, [rewards landing page](/onsite-widgets/rewards-landing-page) and [customer account page](/onsite-widgets/customer-account-page)) with a **Visit** button. 2. A logged-in customer clicks **Visit**. Your URL opens in a new tab. 3. Yuko credits the points as soon as the customer clicks. Yuko can't see what happens on the other site, so earning is based on the click. 4. The way to earn then shows as completed for that customer until they can earn again. 5. With a Daily, Weekly or Monthly frequency, the customer can earn again in the next day, week (weeks start on Monday) or calendar month. Periods follow UTC. With **Tiers** on and [VIP tiers](/vip-tiers/overview) enabled, customers in a tier earn the tier's multiplier for this way to earn, plus any bonus points the tier sets for it. The extra points appear as a separate tier bonus entry. ### Decision guidance * **Use Once** for a one-off push, like a new channel launch. * **Use Weekly or Monthly** for content you update regularly, like a newsletter archive or video series. * **Keep the reward small** if you allow repeat earning. ### Limitations * **Only one Visit URL way to earn per store**, so you can promote one link at a time. To promote a different link, edit the URL. * Earning is based on the click; Yuko can't check how long the customer stayed. * Customers must be logged in to earn. ## Examples * A cooking brand awards 10 points once for visiting its YouTube channel. * A wellness store awards 5 points weekly for opening its blog, to build a reading habit. ## Best practices **Promote your newest content.** Swap the URL when you publish something you want customers to see. ## FAQs No. A store can have one Visit URL way to earn with one link. Edit the URL to promote something else. It depends on **Frequency**: never again for Once, the next day for Daily, the next week (Monday start) for Weekly, and the next calendar month for Monthly. [Daily Visit](/loyalty/ways-to-earn/daily-visit) rewards customers for visiting your own store, automatically. Visit URL rewards a click on a link you choose, which can be on any website. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Write a review Source: https://docs.yuko.so/loyalty/ways-to-earn/write-a-review Reward customers with points when they review a product, with an optional bonus for reviews that include photos or videos. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to earn → Add another way → **Write a review** ## Introduction Award points to customers who review a product they bought. Reviews are one of the most valuable forms of social proof, and a small points reward consistently lifts submission rates. ## What problem this solves Most customers don't write reviews unless asked, and even fewer add photos. A points reward turns a forgettable post-purchase task into something worth doing. ## When to use * You collect product reviews with a reviews app connected to Yuko. * You want more reviews, or more reviews with photos. * You're launching a new product and need fresh social proof. ## Overview * Points for each product review. * Optional **Media Bonus**: extra points when the review includes media. * Optional **Limits**: verified purchases only, and one reward per order. * One reward per product per customer. * Optional points expiry and VIP tier multipliers. * Available on select plans. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). Reviews reach Yuko from your reviews app: [Judge.me](/integrations/judgeme), or any app through the Shopify Flow action **Add Points for Review** (see [Shopify Flow](/integrations/shopify-flow)). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to earn**, click **Add another way** and pick **Write a review**. * **Campaign Name** — shown to customers on the storefront. You can use `[earn_value]` and `[points_label]`, for example `Earn [earn_value] [points_label] for a review`. * **Description** — short copy shown with the way to earn. Enter **Points to earn for product review** (a whole number, at least 1). Tick **Enable Media Earning**, then enter the **Media earning value**: additional points awarded when the customer includes media with their review (default 10). * **Limit to verified purchase** — reward only reviews of products purchased in the linked order. * **Limit to one reward per order** — only the first rewarded review in an order earns points. The media bonus applies only to that same review. Limits apply only to reviews collected by Yuko's own reviews module, not to reviews from Judge.me or the Shopify Flow action. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. * **Status** — on by default. * **Icon** — **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB). * **Tiers** — turn on to apply VIP tier multipliers. Click **Save**. ## How it works 1. A customer reviews a product in your reviews app. 2. The review reaches Yuko: * **Judge.me** sends published reviews to Yuko automatically once the [integration](/integrations/judgeme) is connected. A review counts as having media when it includes pictures. * **Other reviews apps** use the Shopify Flow action **Add Points for Review**. Map the **Customer identifier** (customer ID or email), **Product ID** and **Photo Url** from your app's Flow trigger. If a photo URL is passed, the review counts as having media. 3. Yuko matches the customer and product and awards **Points to earn for product review**. 4. If the media bonus is on and the review has media, Yuko awards the **Media earning value** as a separate entry. 5. With **Tiers** on, the tier multiplier applies to both the base and media lines. Tier bonus points are added once per review. Each customer earns the base points once per product. If a customer first reviews without media and later adds media to the same review, they can still earn the media bonus once. ### Decision guidance * **Make the media bonus worth it.** Photo reviews convert better than text-only ones, so reward them. * **Pair with your reviews app's review-request email** so customers know the reward exists. * **Use moderation in your reviews tool** to keep low-quality reviews from being published. ### Limitations * Only published reviews earn. Unpublished Judge.me reviews are ignored. * Points aren't reversed if a review is later unpublished or deleted. Adjust the balance manually in [Customers](/loyalty/customers) if needed. * One base reward per customer per product, even if the customer submits several reviews. * The Shopify Flow action needs a customer and product that Yuko can match. Unmatched runs don't award points. ## Examples * 20 points per review plus a 30-point media bonus: a photo review earns 50 points. * A store using Loox connects it through Shopify Flow, mapping the reviewer's email, the product ID and the photo URL into **Add Points for Review**. ## Best practices **Set the media bonus higher than the base reward.** Photos drive conversion; pay for them. **Moderate before publishing.** Since points follow published reviews, moderation is your first line of defence against fake reviews. ## FAQs [Judge.me](/integrations/judgeme) through its integration, and any other app that can trigger Shopify Flow, through the **Add Points for Review** action. See [Shopify Flow](/integrations/shopify-flow). The points stay with the customer. Yuko doesn't reverse review points automatically. Use **Adjust balance** in [Customers](/loyalty/customers) to remove them manually. No. The base reward is paid once per customer per product, and the media bonus once per customer per product. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Amount Discount Source: https://docs.yuko.so/loyalty/ways-to-redeem/amount-discount Let customers redeem points for a fixed-amount discount code they use at checkout. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to redeem → Add another way → **Amount Discount** ## Introduction Let customers spend points on a fixed-amount discount (for example, `500 points = $5 off`). It's the simplest, most predictable reward type and usually the one customers expect to see first. ## What problem this solves Percentage discounts can feel abstract ("how much is 10% off?"). A flat amount is concrete: customers know exactly what they get before they redeem. ## When to use * You want the simplest possible reward to launch the program. * Your basket sizes are predictable, so a fixed amount maps cleanly to value. * You want to discount only certain products or collections by a set amount. ## Overview * Fixed amount off, in your store currency. * **Fixed amount of points** (one price) or **Incremented points** (customers choose how many points to spend). * Optional **Coupon Prefix**, **Purchase type** and product or collection targeting. * Optional minimum purchase amount or minimum quantity of items. * Optional combinations with other discounts and an optional expiry. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). You have at least one Way to Earn active, so customers actually have points. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to redeem**, click **Add another way** and pick **Amount Discount** under **Online Store**. * **Reward Name** — customer-facing name. You can use `[reward_value]`, `[points_required]` and `[points_label]`, for example `[reward_value] off for [points_required] [points_label]`. * **Description** — short copy shown with the reward. One price. Set **Points Required** and **Discount Amount**, for example 500 points for \$5 off. Customers choose how many points to spend, in steps. * **Point Increments** — points per discount unit (for example 100). * **Discount per Increment** — discount for each increment (for example \$1). * **Minimum points to redeem** — the fewest points a customer can spend in one redemption. * **Maximum points to redeem** — the most points a customer can spend in one redemption. Leave it at 0 for no cap. If set, it must be at least the minimum. * **Coupon Prefix** — the start of every code this reward creates (up to 8 characters, default `yuko`). Codes look like `YUKO-AB1-C2D`. * **Purchase type** — **One-time purchase**, **Subscription** or **Both** (default). Subscription options only take effect if your store sells subscriptions; otherwise the discount applies to one-time purchases. * **Applies to specific products or collections** — leave unchecked to discount the whole order. When checked, choose **Specific products** or **Specific collections** and select at least one. * **Only apply discount once per order** — shown when you target specific products or collections, and checked by default. If unchecked, the amount is taken off each eligible item in the order. Under **Minimum purchase requirements**, choose **No minimum requirements**, **Minimum purchase amount** (enter a **Minimum Subtotal**) or **Minimum quantity of items** (enter a **Minimum Quantity**). Values must be at least 1. Under **Combine with other discounts**, tick any of **Product discount**, **Order discount** and **Free shipping**. Turn on **Expiry**, then set **Expire after** and a **Period** (Day, Week, Month or Year). The code stops working after that time. Expiry is available on select plans. Turn on **Status** in the side panel and click **Save**. ## How it works 1. The customer opens a loyalty widget (for example the Cart Redeem widget or the customer account page) and redeems this reward. With incremented points, they also choose how many points to spend. 2. Yuko deducts the points and creates a Shopify discount code for that customer. The code can be used once. 3. The customer applies the code at checkout. Widgets that apply it to the cart do this for them. 4. Yuko logs the redemption in the customer's activity. ### Decision guidance * **Start with a fixed amount of points.** It's the easiest to explain. * **Switch to incremented points** when customers have large balances and want to spend more at once. * **Set a minimum purchase** so the discount isn't used on a near-empty cart. * **Leave combinations off** unless you deliberately want stacking with sales. ### Limitations * The code is a Shopify discount, so Shopify's discount rules apply. If it doesn't combine with another discount in the cart, Shopify applies only one. * The discount can't take an order below zero. ## Examples * *Starter program:* fixed, `500 pts = $5 off`, Minimum Subtotal \$25, expires after 30 days. * *Flexible balance:* incremented, 100 points per \$1, minimum 500 points, maximum 5,000 points. * *Collection promo:* fixed, `300 pts = $3 off` items in a "Basics" collection, applied once per order. ## Best practices **Anchor your value clearly.** "500 pts = \$5" is the easiest mental model. Avoid awkward ratios. **Use a 30–60 day expiry** on the issued code to encourage prompt use. **Use a recognisable Coupon Prefix** (for example `LOYAL`) so you can spot loyalty codes in Shopify reports. Combining with site-wide percentage promos can stack in ways customers don't expect. Test combinations before launch. ## FAQs Only if both discounts allow combining with an order discount in Shopify. Otherwise Shopify applies one. No. The code is restricted to the customer who redeemed it and can be used once. Shopify caps the discount at the eligible amount. The customer doesn't get the difference back. No. Leave it on **Both**. Without subscriptions, the discount applies to one-time purchases. ## Related Fixed amount off in exchange for points. Percentage off, with an optional maximum discount amount. A chosen product at no cost. Free shipping, with optional country and rate restrictions. Convert points into Shopify store credit. Fixed amount off, redeemed in-store at Shopify POS. Percentage off, redeemed in-store at Shopify POS. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Free Product Source: https://docs.yuko.so/loyalty/ways-to-redeem/free-product Let customers redeem points for a specific product at no cost. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to redeem → Add another way → **Free Product** ## Introduction Let customers spend points on a specific product at no cost. It's useful for moving inventory, promoting a new launch, or giving loyal customers a tangible perk. Free Product is available on select plans. ## What problem this solves A free product feels more generous than a discount of the same value. It also puts a specific item in customers' hands: a launch sample, a slow-moving product or a brand essential. ## When to use * You're promoting a specific product or launch. * You want a reward with high perceived value. * You want to move slow-moving inventory through the loyalty program. ## Overview * One product per reward. Create more Free Product rewards to offer more products. * The reward is a discount code worth the selected product's price, applied to that product. * Optional **Coupon Prefix**. * Optional minimum purchase amount or minimum quantity of items. * Optional combinations with other discounts and an optional expiry. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). The product you want to give away is published and in stock. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to redeem**, click **Add another way** and pick **Free Product** under **Online Store**. Set the **Reward Name** (shortcodes `[points_required]` and `[points_label]` are supported) and a **Description**. Under **Product Selection**, use **Select Product** to search for and choose the product. A product is required. * **Points Required** — the points cost. * **Coupon Prefix** — the start of every code (up to 8 characters, default `yuko`). Choose **No minimum requirements**, **Minimum purchase amount** (**Minimum Subtotal**) or **Minimum quantity of items** (**Minimum Quantity**). Under **Combine with other discounts**, tick any of **Product discount**, **Order discount** and **Free shipping**. Turn on **Expiry** and set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. Turn on **Status** in the side panel and click **Save**. ## How it works 1. The customer redeems the reward from a loyalty widget. 2. Yuko deducts the points and creates a single-use Shopify discount code for that customer, worth the product's current price and applied only to that product. 3. When the customer applies the reward from the storefront widget, Yuko adds the product to the cart if it isn't there already. 4. At checkout, the code makes that product free. Any minimum requirement must be met. ### Decision guidance * **Set a minimum purchase** so the free product comes with a paid order. * **Pair it with a launch announcement** so redeeming feels like a privilege. ### Limitations * One product per reward. * Shopify can't sell an out-of-stock product, so the customer can't check out with it until it's back in stock (unless you allow overselling). ## Examples * *Sample drop:* 800 pts for a trial-size product, Minimum Subtotal \$50, expires after 30 days. * *Accessory add-on:* 1,500 pts for a tote bag, Minimum quantity of items 2. ## Best practices **Pick products that benefit from being tried.** Trials and discovery items turn into repeat purchases. **Keep stock topped up.** A redeemed reward the customer can't use is worse than no reward. ## FAQs The code stays valid until it expires, but Shopify won't let the customer buy an out-of-stock product. Restock it or help the customer directly. No. Create one Free Product reward per product. ## Related Fixed amount off in exchange for points. Percentage off, with an optional maximum discount amount. A chosen product at no cost. Free shipping, with optional country and rate restrictions. Convert points into Shopify store credit. Fixed amount off, redeemed in-store at Shopify POS. Percentage off, redeemed in-store at Shopify POS. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Free Shipping Source: https://docs.yuko.so/loyalty/ways-to-redeem/free-shipping Let customers redeem points for free shipping, with optional country and shipping-rate restrictions. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to redeem → Add another way → **Free Shipping** ## Introduction Let customers spend points to remove shipping costs from their order. It works especially well where shipping is a known reason carts are abandoned. ## What problem this solves Many customers drop out of checkout when they see the shipping cost. A points-funded free-shipping reward turns your loyalty program into a direct fix for that. ## When to use * Shipping is expensive relative to your average order value. * You see a big drop-off between cart and checkout. * You want a value reward that's easy to explain. ## Overview * 100% off shipping. * Optional **Shipping Restrictions**: limit it to selected countries or exclude expensive shipping rates. * Optional **Coupon Prefix** and **Purchase type**. * Optional minimum purchase amount or minimum quantity of items. * Optional combinations with product and order discounts, and an optional expiry. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to redeem**, click **Add another way** and pick **Free Shipping** under **Online Store**. Set the **Reward Name** (shortcodes `[points_required]` and `[points_label]` are supported) and a **Description**. * **Points Required** — the points cost. * **Coupon Prefix** — the start of every code (up to 8 characters, default `yuko`). * **Purchase type** — **One-time purchase**, **Subscription** or **Both** (default). Subscription options only take effect if your store sells subscriptions. * **Countries** — **All countries** (default) or **Selected countries**. Selected countries must be within your store's shipping zones, and you must pick at least one. * **Shipping rates** — tick **Exclude shipping rates over a certain amount** and enter the maximum shipping rate. Rates above it aren't discounted. Choose **No minimum requirements**, **Minimum purchase amount** (**Minimum Subtotal**) or **Minimum quantity of items** (**Minimum Quantity**). Under **Combine with other discounts**, tick **Product discount** and/or **Order discount**. A free-shipping code can't combine with another shipping discount. Turn on **Expiry** and set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. Turn on **Status** in the side panel and click **Save**. ## How it works 1. The customer redeems the reward from a loyalty widget. 2. Yuko deducts the points and creates a single-use Shopify free-shipping code for that customer. 3. At checkout, the code removes the shipping cost when the destination and shipping rate meet your restrictions and any minimum requirement is met. ### Decision guidance * **Pair it with a minimum purchase** so you aren't shipping a very small order for free. * **Use Selected countries** if you only want to absorb domestic or regional shipping. * **Exclude expensive rates** so express or international upgrades aren't free. ### Limitations * Selected countries must be in your Shopify shipping zones. * If shipping is already free for the order, the code saves the customer nothing, but the points are still spent once they redeem. ## Examples * *Domestic only:* 300 pts, Selected countries = United States, Minimum Subtotal \$40, expires after 30 days. * *Standard shipping only:* 500 pts, all countries, exclude shipping rates over \$15. ## Best practices **Test checkout in each country you allow** before launch. **Expect high redemption.** Free shipping is popular, so plan your points economy for it. ## FAQs Yes, unless you tick **Exclude shipping rates over a certain amount**. Then rates above your maximum aren't discounted. Only countries within your store's shipping zones can be selected. Add the country to a shipping zone in Shopify first. No. Yuko doesn't offer a shipping-discount combination for free-shipping codes. It can combine with product and order discounts if you allow it. ## Related Fixed amount off in exchange for points. Percentage off, with an optional maximum discount amount. A chosen product at no cost. Free shipping, with optional country and rate restrictions. Convert points into Shopify store credit. Fixed amount off, redeemed in-store at Shopify POS. Percentage off, redeemed in-store at Shopify POS. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Ways to Redeem Source: https://docs.yuko.so/loyalty/ways-to-redeem/overview Configure the rewards customers can claim with their points, online and at Shopify POS. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to redeem Ways to Redeem (also called **rewards**) are what customers can spend their points on. Each reward type has its own settings, conditions and customer-facing behaviour. ## Reward channels When you click **Add another way**, the **Ways to Redeem** picker groups reward types by the channel where customers redeem them. | Section | Reward types | Where customers redeem | | - | - | - | | **Online Store** | Amount Discount, Percentage Discount, Free Product, Free Shipping, Store Credit | Your storefront: the cart, the loyalty widgets and the customer account | | **Shopify POS** | POS Amount Discount, POS Percentage Discount | In-store, through the Yuko tile in Shopify POS | * The **Shopify POS** section appears only after you connect the [Shopify POS integration](/integrations/shopify-pos). POS rewards show a **POS** badge in the rewards list. * Channels are kept apart: online rewards can't be redeemed at POS, and POS rewards can't be redeemed online. * **Store Credit** is only offered on Shopify stores. * Free Product and Store Credit are available on select plans. ## All reward types Fixed amount off in exchange for points. Percentage off, with an optional maximum discount amount. A chosen product at no cost. Free shipping, with optional country and rate restrictions. Convert points into Shopify store credit. Fixed amount off, redeemed in-store at Shopify POS. Percentage off, redeemed in-store at Shopify POS. ## Settings at a glance | Setting | Amount | Percentage | Free Product | Free Shipping | Store Credit | POS Amount | POS Percentage | | - | - | - | - | - | - | - | - | | Fixed or incremented points | Yes | — | — | — | — | Yes | — | | Coupon Prefix | Yes | Yes | Yes | Yes | — | — | — | | Purchase type | Yes | Yes | — | Yes | — | — | — | | Specific products or collections | Yes | Yes | — | — | — | — | — | | Maximum Discount Amount | — | Yes | — | — | — | — | — | | Shipping Restrictions | — | — | — | Yes | — | — | — | | Minimum purchase amount | Yes | Yes | Yes | Yes | — | Yes | Yes | | Minimum quantity of items | Yes | Yes | Yes | Yes | — | — | — | | Combine with other discounts | Yes | Yes | Yes | Yes | — | Yes | Yes | | Expiry | Yes | Yes | Yes | Yes | Yes | — | — | ## How rewards work 1. A customer has enough points for an active reward. 2. The reward appears in your loyalty widgets (for example the Cart Redeem widget, the customer account page or the rewards landing page), or in the Yuko tile at Shopify POS for POS rewards. 3. The customer redeems it. Yuko deducts the points and creates a single-use Shopify discount code for that customer. Store Credit is the exception: it adds Shopify store credit to the customer's account instead. 4. The customer applies the code at checkout, or the cashier applies it at POS. 5. Yuko logs the redemption in the customer's activity. ## Common settings Every reward has: * **Reward Name** — the customer-facing name. Supports the shortcodes `[points_required]`, `[reward_value]` and `[points_label]`, which are resolved on the storefront (Free Product and Free Shipping support `[points_required]` and `[points_label]`). * **Description** — short copy shown with the reward. POS rewards have no description. * **Status** — enable or disable the reward from the side panel. * **Icon** — **Default** or **Custom** (upload your own image, under 1MB). * **Rewards Summary** — a live summary of what you've configured. You can drag rewards in the list to change the order customers see them in. ## Decision guidance * **Start with one reward.** Amount Discount is the simplest way to prove the earn-and-redeem loop works. * **Use Store Credit** for a flexible balance that doesn't feel like a coupon. * **Use Free Product** to move specific inventory or give customers a tangible perk. * **Use Free Shipping** where shipping costs drive cart abandonment. * **Add POS rewards** if you sell in person, so in-store customers can spend the same points. ## Best practices **Make the cheapest reward reachable in 2–3 orders.** If it takes 10 orders to get anything, customers lose interest. **Keep the reward menu short.** 3–4 well-priced rewards beat 12 mediocre ones. **Test redemption end-to-end** as a real customer before launch, online and at POS. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Percentage Discount Source: https://docs.yuko.so/loyalty/ways-to-redeem/percentage-discount Let customers redeem points for a percentage discount, with an optional cap on the discount amount. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to redeem → Add another way → **Percentage Discount** ## Introduction Let customers spend points on a percentage discount (for example, `1,000 points = 10% off`). Bigger orders get a bigger reward, and you can cap it with a **Maximum Discount Amount**. ## What problem this solves Flat discounts under-reward big spenders. A percentage discount scales with the cart, so a customer placing a $300 order gets a meaningfully bigger reward than one on a $40 order. The cap keeps very large orders from producing a discount you didn't plan for. ## When to use * You sell higher-priced products where 10–20% is meaningful. * You want the reward to scale with order size. * You want a percentage off specific products or collections only. ## Overview * Percentage off, from 1% to 50%. * Optional **Maximum Discount Amount** to cap the discount. * Optional **Coupon Prefix**, **Purchase type** and product or collection targeting. * Optional minimum purchase amount or minimum quantity of items. * Optional combinations with other discounts and an optional expiry. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to redeem**, click **Add another way** and pick **Percentage Discount** under **Online Store**. Set the **Reward Name** (shortcodes `[reward_value]`, `[points_required]` and `[points_label]` are supported) and a **Description**. * **Points Required** — the points cost. * **Percentage Discount** — a whole number from 1 to 50. * **Maximum Discount Amount** — caps the discount at this amount. Leave it empty for no limit. * **Coupon Prefix** — the start of every code (up to 8 characters, default `yuko`). * **Purchase type** — **One-time purchase**, **Subscription** or **Both** (default). Subscription options only take effect if your store sells subscriptions. * **Applies to specific products or collections** — leave unchecked to discount the whole order. When checked, choose **Specific products** or **Specific collections** and select at least one. Choose **No minimum requirements**, **Minimum purchase amount** (**Minimum Subtotal**) or **Minimum quantity of items** (**Minimum Quantity**). Under **Combine with other discounts**, tick any of **Product discount**, **Order discount** and **Free shipping**. Turn on **Expiry** and set **Expire after** and a **Period** (Day, Week, Month or Year). Expiry is available on select plans. Turn on **Status** in the side panel and click **Save**. ## How it works 1. The customer redeems the reward from a loyalty widget. 2. Yuko deducts the points and creates a single-use Shopify discount code for that customer. 3. The percentage applies to the eligible items at checkout. ### How the Maximum Discount Amount works Shopify's standard percentage codes can't be capped. So when you set a **Maximum Discount Amount**, Yuko creates the code as a Shopify app discount that runs on Yuko's discount function, **Percentage discount (Yuko)**. The function applies your percentage and stops at the cap. It also respects the minimum requirement, purchase type and products or collections you chose. In **Shopify admin → Discounts**, these codes show a **Yuko discount details** panel with the discount, maximum discount, minimum requirement, purchase type and what it applies to. You can't edit their settings there; you can only deactivate or delete them. To change future codes, edit the reward in Yuko. Without a cap, Yuko creates a standard Shopify percentage discount code. ### Decision guidance * **Set a Maximum Discount Amount** for higher percentages. Without it, a $2,000 order at 20% off produces a $400 discount. * **Target specific collections** to keep the discount off sale items or low-margin products. ### Limitations * The maximum percentage is 50%. * The code is a Shopify discount, so Shopify's combination rules apply. * Shopify percentage discounts don't reduce taxes or shipping. ## Examples * *Higher-priced store:* `1,000 pts = 10% off`, Maximum Discount Amount $50, Minimum Subtotal $100. * *Apparel store:* `2,000 pts = 15% off` a "New arrivals" collection, expires after 30 days. ## Best practices **Set a cap for anything above 5–10%.** It protects margin on unusually large orders. **Leave combinations off with sale promos** unless you've modelled the impact. ## FAQs Because you set a Maximum Discount Amount. Capped codes run on Yuko's discount function so the cap can be enforced. Uncapped codes are standard Shopify percentage codes. No. It applies to the eligible items only, before tax and shipping. Percentage scales with cart value; Amount Discount is a fixed value and also supports incremented points. ## Related Fixed amount off in exchange for points. Percentage off, with an optional maximum discount amount. A chosen product at no cost. Free shipping, with optional country and rate restrictions. Convert points into Shopify store credit. Fixed amount off, redeemed in-store at Shopify POS. Percentage off, redeemed in-store at Shopify POS. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # POS Amount Discount Source: https://docs.yuko.so/loyalty/ways-to-redeem/pos-amount-discount Let in-store customers redeem points for a fixed-amount discount at Shopify POS. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to redeem → Add another way → **Shopify POS** → **POS Amount Discount** ## Introduction A POS Amount Discount lets customers spend their points in your physical store. The cashier redeems it from the Yuko tile in Shopify POS, and a fixed amount comes off the sale (for example, `500 points = $5 off`). ## What problem this solves Customers who earn points online also shop in person. Without a POS reward, they can't spend their balance at the counter. This reward gives in-store customers the same earn-and-redeem loop. ## When to use * You sell in person with Shopify POS. * You want in-store customers to redeem points at the register. * You want a simple, fixed value the cashier can explain quickly. ## Overview * Redeemable **only at Shopify POS**. It doesn't appear in your online widgets, and online rewards can't be redeemed at POS. * **Fixed amount of points** or **Incremented points**. * Optional minimum purchase amount. * Optional combinations with other discounts. * No description, coupon prefix, product targeting or expiry settings. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). The [Shopify POS integration](/integrations/shopify-pos) is connected. The **Shopify POS** section only appears in the reward picker after that. The Yuko tile is added to the smart grid on your POS devices. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to redeem**, click **Add another way** and pick **POS Amount Discount** under **Shopify POS**. Under **Basic Details**, set the **Reward Name**. Cashiers and customers see it in POS. Set **Points Required** and **Discount Amount**, for example 500 points for \$5 off. The cashier chooses how many points to spend, in steps. * **Point Increments** — points per discount unit. * **Discount per Increment** — discount for each increment. * **Minimum points to redeem** and **Maximum points to redeem** — the range allowed in one redemption. If you set a maximum, it must be at least the minimum. Choose **No minimum requirements** or **Minimum purchase amount** and enter a **Minimum Subtotal**. POS rewards don't support a minimum quantity of items. Under **Combine with other discounts**, tick any of **Product discount**, **Order discount** and **Free shipping**. All three are ticked by default. Turn on **Status** in the side panel and click **Save**. The reward shows a **POS** badge in the rewards list. ## How it works 1. The cashier adds the customer and at least one product to the cart in Shopify POS. 2. They open the Yuko tile, go to the **Loyalty discounts** tab and tap **Redeem points**. 3. Under **Available rewards**, they tap **Redeem** on this reward. For incremented rewards, they first set the points to spend with the stepper. 4. After the confirmation, Yuko deducts the points, creates a single-use discount code for that customer and applies it to the cart. 5. If the cart is below the Minimum Subtotal, the reward stays disabled and POS shows how much more the customer needs to spend. Codes a customer already redeemed but hasn't used are listed in the **Loyalty discounts** tab, so the cashier can apply them to the cart without spending more points. ### Decision guidance * **Use the same value as your online Amount Discount** so customers get a consistent rate in both channels. * **Use incremented points** if customers often have large balances to spend in store. ### Limitations * Only redeemable at Shopify POS. * Minimum requirement is subtotal only. * If another discount is already in the cart, Shopify applies only the best discount unless both allow combinations. POS warns the cashier about this before applying. ## Examples * *Boutique:* fixed, `500 pts = $5 off`, Minimum Subtotal \$30. * *Flexible balance:* incremented, 100 points per \$1, minimum 500, maximum 5,000. ## Best practices **Train cashiers to add the customer first.** The tile can't show rewards until a customer is on the cart. **Allow combinations** if you often run in-store promotions, so the loyalty discount isn't silently dropped. ## FAQs Connect the [Shopify POS integration](/integrations/shopify-pos) first. The section only appears when POS is connected. No. POS rewards are only offered at Shopify POS, and online rewards are only offered online. Yes. The POS tile and modal text are edited in the [Shopify POS integration](/integrations/shopify-pos) settings. ## Related Fixed amount off in exchange for points. Percentage off, with an optional maximum discount amount. A chosen product at no cost. Free shipping, with optional country and rate restrictions. Convert points into Shopify store credit. Fixed amount off, redeemed in-store at Shopify POS. Percentage off, redeemed in-store at Shopify POS. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # POS Percentage Discount Source: https://docs.yuko.so/loyalty/ways-to-redeem/pos-percentage-discount Let in-store customers redeem points for a percentage discount at Shopify POS. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to redeem → Add another way → **Shopify POS** → **POS Percentage Discount** ## Introduction A POS Percentage Discount lets customers spend points in your physical store for a percentage off the sale (for example, `1,000 points = 10% off`). The cashier redeems it from the Yuko tile in Shopify POS. ## What problem this solves In-store baskets vary a lot in size. A percentage discount scales with the sale, so customers making bigger in-store purchases get a bigger reward. ## When to use * You sell in person with Shopify POS. * Your in-store basket sizes vary widely. * You already offer a percentage reward online and want the same in store. ## Overview * Redeemable **only at Shopify POS**. * One fixed exchange: **Points Required** for a **Percentage Discount** from 1% to 50%. * Optional minimum purchase amount. * Optional combinations with other discounts. * No description, coupon prefix, maximum discount amount, product targeting or expiry settings. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). The [Shopify POS integration](/integrations/shopify-pos) is connected. The **Shopify POS** section only appears in the reward picker after that. The Yuko tile is added to the smart grid on your POS devices. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to redeem**, click **Add another way** and pick **POS Percentage Discount** under **Shopify POS**. Under **Basic Details**, set the **Reward Name**. * **Points Required** — the points cost. * **Percentage Discount** — a whole number from 1 to 50. Choose **No minimum requirements** or **Minimum purchase amount** and enter a **Minimum Subtotal**. POS rewards don't support a minimum quantity of items. Under **Combine with other discounts**, tick any of **Product discount**, **Order discount** and **Free shipping**. All three are ticked by default. Turn on **Status** in the side panel and click **Save**. The reward shows a **POS** badge in the rewards list. ## How it works 1. The cashier adds the customer and at least one product to the cart in Shopify POS. 2. They open the Yuko tile, go to the **Loyalty discounts** tab and tap **Redeem points**. 3. Under **Available rewards**, they tap **Redeem** on this reward and confirm. 4. Yuko deducts the points, creates a single-use percentage discount code for that customer and applies it to the cart. 5. If the cart is below the Minimum Subtotal, the reward stays disabled and POS shows how much more the customer needs to spend. ### Decision guidance * **Match your online Percentage Discount** so customers get the same value in both channels. * **Add a Minimum Subtotal** to keep percentage discounts for meaningful purchases. ### Limitations * Only redeemable at Shopify POS. * There's no Maximum Discount Amount for POS percentage rewards, so the percentage applies to the full eligible amount. * Minimum requirement is subtotal only. * Shopify applies only the best discount when discounts don't combine. POS warns the cashier before applying. ## Examples * *Furniture showroom:* `2,000 pts = 10% off`, Minimum Subtotal \$200. * *Café:* `300 pts = 15% off`, no minimum, combines with product discounts. ## Best practices **Keep percentages modest.** Without a cap, a large in-store sale gets the full percentage off. **Train cashiers to add the customer first.** Rewards only appear once a customer is on the cart. ## FAQs No. Maximum Discount Amount is only available on the online Percentage Discount. No. POS rewards are only offered at Shopify POS. ## Related Fixed amount off in exchange for points. Percentage off, with an optional maximum discount amount. A chosen product at no cost. Free shipping, with optional country and rate restrictions. Convert points into Shopify store credit. Fixed amount off, redeemed in-store at Shopify POS. Percentage off, redeemed in-store at Shopify POS. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Store Credit Source: https://docs.yuko.so/loyalty/ways-to-redeem/store-credit Let customers convert points into Shopify store credit they can spend on future orders. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs → Ways to redeem → Add another way → **Store Credit** ## Introduction Convert points into Shopify store credit: a balance on the customer's account they can spend at checkout. It's the most flexible reward type and the closest to cash on file. Store Credit is available on select plans and only on Shopify stores. ## What problem this solves Discount codes feel transactional. Store credit feels like money on account, which raises the perceived value of your program. ## When to use * You want a flexible reward customers can spend on anything. * You want customers to come back to use their balance. * You want loyalty to feel premium rather than discount-driven. ## Overview * Uses **Shopify's native store credit**. There's no separate Yuko balance and no discount code. * One fixed exchange: **Points Required** for a **Store Credit Amount** (for example, `500 points = $5`). * Optional expiry on the issued credit. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). Your store can use Shopify store credit, and customers can sign in to their account to use it at checkout. ## Setup guide In your Shopify admin, go to **Apps → Yuko Loyalty → Loyalty → Programs**. In **Ways to redeem**, click **Add another way** and pick **Store Credit** under **Online Store**. Set the **Reward Name** and a **Description**. * **Points Required** — the points cost. * **Store Credit Amount** — the credit the customer receives, a whole number of at least 1. Turn on **Expiry** and set **Expire after** and a **Period** (Day, Week, Month or Year). The issued credit expires after that time. Expiry is available on select plans. Turn on **Status** in the side panel and click **Save**. ## How it works 1. The customer redeems the reward from a loyalty widget. 2. Yuko deducts the points and adds the credit to the customer's Shopify store credit account, with an expiry date if you set one. 3. The customer spends the credit at checkout like any Shopify store credit. 4. Yuko logs the redemption in the customer's activity. ### Decision guidance * **Use a clean ratio.** `100 pts = $1` is the easiest to read. * **Don't offer it alongside an Amount Discount at the same rate.** Two rewards with the same value confuse customers. ### Limitations * Shopify only. The reward isn't offered on other platforms. * Store credit is a store balance, not cash. * Store credit has no minimum requirement, product targeting or combination settings. ## Examples * *Premium beauty brand:* `200 pts = $2 store credit`, expires after 12 months, the only reward offered. * *Repeat-purchase brand:* `500 pts = $5 store credit`, no expiry. ## Best practices **Choose store credit over discount codes** if you want loyalty to feel premium. **Show the balance prominently** in your loyalty widgets and customer account. Don't change the conversion rate after launch. Customers anchor to it. ## FAQs It's Shopify store credit, so it shows in the customer's Shopify account and is available at checkout when they're signed in. Store credit is applied at checkout as a payment, separately from discount codes, so customers can use both on one order. No. Every redemption creates native Shopify store credit. ## Related Fixed amount off in exchange for points. Percentage off, with an optional maximum discount amount. A chosen product at no cost. Free shipping, with optional country and rate restrictions. Convert points into Shopify store credit. Fixed amount off, redeemed in-store at Shopify POS. Percentage off, redeemed in-store at Shopify POS. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Membership Object Source: https://docs.yuko.so/membership-object Fields returned for a customer's loyalty membership summary by the Yuko REST API. The membership object summarizes a customer's standing in your loyalty program: points balance, current VIP tier, next tier and progress toward it. It's returned by [Get customer membership](/developer/api/list-memberships) (`GET /public/customers/memberships`, requires the `read:customers` scope). This object describes loyalty program membership. Paid membership plans (Membership → Plans) aren't available through the REST API. ## Properties The customer's membership status. Always `active` for a customer returned by this endpoint. When the customer was added to Yuko (ISO 8601). The customer's points summary. The customer's spendable points balance. Always `0` for a customer who is banned or excluded from the loyalty program by a customer tag. Total points the customer has earned. Total points the customer has redeemed. The customer's current VIP tier, or `null` if VIP tiers are turned off or the customer hasn't reached a tier. The tier's unique identifier. The tier's name. The value needed to reach the tier. The tier's points multiplier, `1` when none is set. The tier's icon. The tier's benefits. The benefit's name. One of `fixed`, `percentage`, `free_product`, `free_shipping`, `bonus_points`, `store_credit`, `custom`. The benefit's value configuration. Its structure depends on `benefit_type`; see [List VIP tiers](/developer/api/list-vip-tiers). When the tier was created. The next VIP tier the customer can reach, with the same fields as `current_tier`. `null` if VIP tiers are turned off, the customer hasn't been evaluated for tiers yet, or the customer is already at the highest tier. The customer's progress toward `next_tier`, or `null` if VIP tiers are turned off or there's no next tier. The customer's current qualifying value, rounded down. The value needed for the next tier. How much more is needed. Progress as a percentage, rounded to 2 decimal places. The metric used for tier progression (`total_earned_points`, `total_amount_spents` or `total_orders`). Can be `null` even when VIP tiers are set up. ```json The Membership object theme={null} { "status": "active", "member_since": "2025-11-02T10:15:00+00:00", "points": { "balance": 650, "earned": 1200, "redeemed": 550 }, "current_tier": { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "name": "Silver", "threshold_value": 500, "multiplier": 1, "icon": null, "benefits": [], "created_at": "2025-01-10T09:00:00+00:00" }, "next_tier": { "id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "name": "Gold", "threshold_value": 2000, "multiplier": 1.5, "icon": null, "benefits": [], "created_at": "2025-01-10T09:00:00+00:00" }, "progress_to_next_tier": { "current_value": 1200, "required_value": 2000, "remaining_value": 800, "progress_percentage": 60, "threshold_type": "total_earned_points" } } ``` # Members Source: https://docs.yuko.so/memberships/contracts See every customer's membership, pause, cancel or reactivate it, change the next billing date, and review earned and scheduled benefits. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Membership → Members ## Introduction The **Members** tab lists every membership: one row per customer per plan, backed by a Shopify subscription contract. Each membership has its own status, billing frequency and next renewal date. ## What problem this solves You need one place to see who is subscribed to what, and to act on individual memberships when customers contact support. ## When to use * Answering a customer's question about their membership. * Pausing, cancelling or reactivating a membership. * Moving a member's next billing date. * Checking which benefits a member has received or has coming up. ## Overview * Status tabs: **All**, **Active**, **Paused**, **Cancelled**, **Expired**, **Failed**. * Columns: **Membership**, **Customer**, **Billing frequency**, **Next renewal**, **Created at** and **Status**. * **Search memberships** by customer, membership number or product, and sort by membership, customer, status or created date. * A detail page per membership with plan details, subscriber details, **Earned benefits** and **Scheduled benefits**. ## Before you start At least one plan exists in **Membership → Plans**. See [Membership Plans](/memberships/plans). ## Setup guide ### Find a membership Go to **Membership → Members**. Pick a status tab, or type in **Search memberships**. Click a row to open **Membership #\**. ### Read the detail page * **Membership details**: **Plan name**, **Billing frequency**, **Price**, **Product**, **Next renewal date**, **Created at** and the originating **Order**. * **Subscriber**: customer name, **Email** and **Phone**. * **Earned benefits**: benefits already issued, with **Benefit**, **Value**, **Reward** and **Date**. * **Scheduled benefits**: upcoming benefits, with **Benefit**, **Value** and **Scheduled at**. Recurring benefits are marked **Recurring**. ### Pause, cancel or activate On the Members list, click the status badge of the membership. * **Active** memberships offer **Pause** and **Cancel**. * **Paused** memberships offer **Activate** and **Cancel**. Confirm in the dialog. Yuko updates the subscription contract in Shopify. Cancelled, expired and failed memberships have no actions. ### Change the next billing date Open an **Active** membership's detail page. Next to **Next renewal date**, click **Change**. Choose a **Next billing date** (tomorrow at the earliest) and click **Continue**. Future cycles are calculated from this date. Review the old and new dates and click **Confirm**. The customer is charged the full membership price on the new billing date. No proration is applied. ## How it works * A membership is created when a customer buys the plan's linked product with the subscription option, or when you add them from the plan page. * Shopify bills each renewal. Yuko keeps the status and next renewal date in sync. * When a membership becomes active, Yuko tags the customer and schedules the plan's benefits. * When a membership ends, Yuko removes the plan's customer tag, and removes the general `YUKO:Membership` tag if the customer has no other active membership. ### Limitations * Status changes are limited to Pause, Activate and Cancel. A cancelled membership can't be reactivated; the customer has to join again. * Refunds aren't issued from Yuko. Refund the order in Shopify if needed. * Search runs on the memberships loaded in the list. ## Examples * A customer travelling for two months asks to stop payments: **Pause** the membership, then **Activate** it when they're back. * A customer wants their billing to fall after payday: **Change** the next billing date to the 1st of the month. ## Best practices **Pause before you cancel.** If a customer wants a break, pausing keeps their membership so they don't have to sign up again. **Tell customers about billing-date changes.** They're charged the full price on the new date. ## FAQs Yes. With the [Profile Membership](/memberships/widgets/profile-membership) widget, members can upgrade, cancel and (if you allow it) downgrade from their customer account. Yes. They buy the plan again, which creates a new membership. Refund the order in Shopify. ## Related Create paid plans with benefits, pricing and members. Manage each customer's membership, status and billing date. Cart, checkout, profile and product-page widgets. Stop existing members from buying a second membership. Created, upgraded, downgraded and cancelled emails. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Memberships Source: https://docs.yuko.so/memberships/overview Sell paid membership plans as Shopify subscriptions, with benefits such as discounts, free shipping, bonus points and store credit. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Membership ## What is the Memberships module Memberships let you sell paid plans. Customers pay a monthly or yearly fee and get benefits in return, such as discounts, free shipping, bonus points, store credit or a custom perk. Memberships are different from [VIP tiers](/vip-tiers/overview), which customers *earn* through activity rather than buy. Memberships are a separate recurring revenue line tied to your most committed customers. Memberships are available on select plans. ## Who it's for * Brands with repeat purchases that would benefit from a paid membership layer. * DTC brands that want a paid plan above their free loyalty program. * Stores that want predictable recurring revenue from their best customers. ## The Membership menu | Tab | What you do there | | - | - | | **Plans** | Turn memberships on, create and order plans, add members, and set **Membership Settings**. See [Membership Plans](/memberships/plans). | | **Members** | See every customer's membership, change its status and next billing date, and review benefits. See [Members](/memberships/contracts). | | **Widgets** | Configure the cart, checkout, customer profile and product-page widgets. See [Cart Membership Upsell](/memberships/widgets/cart-membership-upsell). | | **Emails** | Edit the membership emails (created, upgraded, downgraded, cancelled). See [Membership emails](/emails/membership-emails). | ## How it fits together ``` Plan (Membership → Plans) │ Yuko creates a Shopify selling plan and a linked membership product ▼ Customer buys the product with the subscription option, or you add them manually │ ▼ Shopify subscription contract → Member (Membership → Members) │ Yuko tags the customer and schedules the plan's benefits ▼ Benefits issued · Status shown in the profile widget · Renewals billed by Shopify ``` ## Get started The **Quick Start** card on the Plans tab walks you through these steps: Add a plan with a price, billing interval and at least one benefit. See [Membership Plans](/memberships/plans). Promote your plan in the cart. See [Cart Membership Upsell](/memberships/widgets/cart-membership-upsell). Let members view and manage their membership from their customer account. See [Profile Membership](/memberships/widgets/profile-membership). You can also add the [Purchase Options](/memberships/widgets/purchase-options) widget to product pages, and turn on [Membership Validation](/memberships/validation-extension) to stop customers buying a second membership. ## Recommended reading Create paid plans with benefits, pricing and members. Manage each customer's membership, status and billing date. Cart, checkout, profile and product-page widgets. Stop existing members from buying a second membership. Created, upgraded, downgraded and cancelled emails. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Membership Plans Source: https://docs.yuko.so/memberships/plans Create paid membership plans with a price, billing interval and benefits, add members manually or by customer tag, and set membership-wide settings. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Membership → Plans ## Introduction A membership plan defines what members pay and what they get. When you save a plan, Yuko creates it in Shopify as a subscription selling plan with a linked membership product, so Shopify handles checkout, billing and renewals. ## What problem this solves Without a plan structure, you'd manage perks customer by customer. Plans standardise pricing, billing and benefits, and Yuko issues the benefits automatically to every member. ## When to use * When you launch paid memberships. * When you add another plan (for example Silver and Gold). * When you change a plan's price or benefits. ## Overview The **Plans** tab has these sections: * **Membership Status:** turns the whole membership program on or off. Turning it off asks you to confirm; customers can't buy or manage memberships until you turn it back on. * **Quick Start:** setup checklist. * **Paid Memberships:** your plans. Click **Add Membership** to create one. Drag plans to reorder them; the order decides what counts as an upgrade or a downgrade (see [Membership Settings](#membership-settings)). * **Membership Settings:** **Show downgrade option to customers** and **Membership to upsell**. ## Before you start Yuko is installed on your Shopify store. See [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). Your store can sell subscriptions in Shopify. ## Setup guide ### 1. Create a plan Go to **Membership → Plans** and click **Add Membership**. * **Membership name** (required), for example `Premium Membership`. * **Merchant Code**: an optional internal code saved on the plan's Shopify selling plan group. * **Description**: shown to customers in membership widgets. * **Membership price**: enter the **Amount per month** or **Amount per year** charged each billing period. * **Billing interval**: **Monthly** or **Yearly**. You can't change the interval after the plan is created. The **Summary** card shows the amount per month or year and the number of benefits. Click **Add Benefits** and pick a benefit type. Each plan needs at least one benefit. See [Benefit types](#benefit-types). Click **Save**. Yuko creates the Shopify selling plan and the linked membership product. After saving, the plan editor also shows: * **Membership Identifier**: the plan's read-only customer tag, in the form `YUKO:Membership:`, with a copy button. Yuko adds this tag to members' Shopify customer records, plus the general `YUKO:Membership` tag. Use it to reference the plan in segments and integrations. * **Membership Status**: switch the plan **Active** or **Inactive**. You can't make a plan inactive while it has active members. * **Linked product**: the Shopify product customers buy to join. Yuko tags it `YUKO:Membership:Product`. ### 2. Add members manually (optional) You can enrol customers without them buying the product. Manually added memberships are free: Yuko creates a zero-price subscription contract that tracks the billing cycle but never charges the customer. Click a plan in **Paid Memberships**. The plan must be **Active**. In the **Add Member** card, click **Add**, search for a customer and click **Add member**. Click **Add by tag**, enter a **Customer tag** (or click **Browse** to pick one) and click **Create memberships**. Yuko queues every customer with that tag. Check the **Members** tab for the results. A customer who already has an active or paused membership on the plan isn't added again. ### 3. Set Membership Settings Turn this on to let members move to a lower plan from their customer account. When it's off, members can only upgrade or cancel. Pick the plan to promote in the cart upsell, checkout upsell, rewards landing page and Floating Rewards launcher widgets. ## Benefit types | Benefit | What members get | Key settings | | - | - | - | | **Amount discount** | A fixed amount off. | **Method** (**Automatic discount** or **One-time discount code**), **Discount value**, **Applies to** (all products, specific collections or specific products), **Only apply discount once per order**, **Purchase type**, **Minimum purchase requirements**, **Combine with other discounts**, **Coupon Prefix** (one-time codes only), **Expiry Settings**. | | **% off discount** | A percentage off. | As Amount discount, without the once-per-order option. The **Discount value** can be up to 50%. | | **Free shipping** | Free shipping. | **Method** (**Automatic** or **One-time code**), **Purchase type**, minimum requirements, combinations, prefix and expiry. | | **Free product** | A chosen product for free. | **Method**, **Select Product**, minimum requirements, combinations, prefix and expiry. | | **Bonus points** | Loyalty points. | **Name**, **Number of points**, optional expiry (**Expire after**). | | **Store credit** | Shopify store credit. | **Store Credit Type**: **One time**, **Recurring** (with a **Recurring Period** and schedule) or **% cashback after every purchase**. Optional expiry and **Enable Holdings**. Only one store credit benefit per plan, and only on Shopify stores. | | **Custom benefit** | A perk you deliver yourself, such as early access. | **Name**. It's shown to members but Yuko doesn't issue anything. | ## How it works 1. Saving a plan creates a Shopify selling plan group, a customer segment and a linked membership product. 2. A customer buys the product with the subscription option (or you add them manually). Shopify creates a subscription contract, which appears on the **Members** tab. 3. Yuko tags the customer and schedules the plan's benefits. Scheduled benefits are issued in the background; custom benefits are informational only. 4. Shopify bills renewals at the plan's interval. ### Limitations * The billing interval is **Monthly** or **Yearly**. * You can't delete a plan, or make it inactive, while it has active members. * Members can only be added to an **Active** plan. ## Examples * *Gold*: \$9.99/month with **Free shipping** (automatic) and **% off discount** of 10% (automatic). * *Annual Club*: \$79/year with **Bonus points** (500) and a recurring monthly **Store credit**. ## Best practices **Lead with the most valuable benefit.** Customers scan, and the first benefit gets the click. **Order plans from lowest to highest.** The order on the Plans tab decides which moves count as upgrades and downgrades in the profile widget. **Test the purchase as a real customer** before launching. ## FAQs Yes. Create a plan for each level and drag them into order. No. Members added with **Add Member** or **Add by tag** get a zero-price contract and are never charged. Billing and retries are handled by Shopify. The Members tab reflects the subscription contract's status, so a contract Shopify marks as failed shows as **Failed**. ## Related Create paid plans with benefits, pricing and members. Manage each customer's membership, status and billing date. Cart, checkout, profile and product-page widgets. Stop existing members from buying a second membership. Created, upgraded, downgraded and cancelled emails. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Membership Validation at Checkout Source: https://docs.yuko.so/memberships/validation-extension A Shopify checkout rule that stops customers who already have an active membership from buying another one. **Where to find this:** Shopify admin → Settings → Checkout → Checkout rules. This isn't a tab in the Yuko admin; it's a Shopify Function (**yuko-membership-validation**) that ships with the Yuko app. ## Introduction Membership Validation is a cart and checkout validation function. When the cart contains a membership product, it checks whether the customer already has an active membership. If they do, checkout is blocked with the message **"You already have an active membership"**. ## What problem this solves Without it, an existing member could buy a membership product again and end up with two paid subscriptions. Members who want a different plan should switch plans from their customer account instead (see [Profile Membership](/memberships/widgets/profile-membership)). ## Where it appears * Shopify checkout. The error only shows when the rule blocks the purchase. ## When to use * You sell more than one plan, or you want to make sure no customer pays for two memberships at once. ## Overview * Runs on every cart and checkout validation. * Looks for products tagged `YUKO:Membership:Product`. Yuko adds this tag to each plan's linked product. * Checks whether the customer has the `YUKO:Membership` tag. Yuko adds it to customers with an active membership and removes it when they no longer have one. * There's nothing to configure in Yuko; the message is fixed. ## Before you start At least one membership plan exists in **Membership → Plans**, so its linked product carries the `YUKO:Membership:Product` tag. ## Setup guide ### 1. Turn on the checkout rule in Shopify In your Shopify admin, go to **Settings → Checkout**. In **Checkout rules**, click **Add rule** and choose **yuko-membership-validation**. Turn the rule on and save. ### 2. Verify Log in as a customer with an active membership, add a membership product to the cart and go to checkout. You should see **"You already have an active membership"** and be unable to complete the order. Repeat as a customer without a membership. Checkout should proceed normally. ## How it works 1. The rule reads the cart lines and the customer's tags. 2. If no line is a product tagged `YUKO:Membership:Product`, checkout continues. 3. If there is one and the customer has the `YUKO:Membership` tag, the rule returns an error and checkout is blocked. ### Limitations * It only checks for an existing active membership. It doesn't restrict regular products to members. * It relies on Shopify customer and product tags. Don't remove the `YUKO:Membership` or `YUKO:Membership:Product` tags manually. * Guest checkouts without an identified customer can't be matched to a membership. ## Best practices **Turn on the profile widget too.** Members who want a different plan can upgrade or downgrade from their account instead of buying again. ## FAQs No. The rule only stops existing members from buying a second membership. No. The message is set in the function. ## Related Create paid plans with benefits, pricing and members. Manage each customer's membership, status and billing date. Cart, checkout, profile and product-page widgets. Stop existing members from buying a second membership. Created, upgraded, downgraded and cancelled emails. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Cart Membership Upsell Widget Source: https://docs.yuko.so/memberships/widgets/cart-membership-upsell Promote your membership plan in the cart drawer or cart page so customers can join before checking out. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Membership → Widgets → Cart membership upsell ## Introduction The **Cart membership upsell** widget shows a membership offer in the cart drawer or on the cart page, so customers can add the plan to their cart before checkout. ## What problem this solves The cart is the highest-intent moment on your storefront. Showing the membership offer there turns one-time buyers into members just before they pay. ## Where it appears * The cart drawer and the cart page. * It's placed automatically through the **Yuko App** embed. You can also place it yourself with the **Yuko: Member Cart Upsell** theme app block, or point it at a specific element with a CSS selector. ## Overview * Promotes the plan chosen in **Membership → Plans → Membership Settings → Membership to upsell**. * **Configuration** and **Styles** tabs. * Hidden from customers who already have a membership, and when the cart is empty. ## Before you start At least one plan exists in **Membership → Plans**. A plan is selected in **Membership to upsell** (in **Membership Settings** on the Plans tab). The **Yuko App** embed is turned on in your theme. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## Setup guide ### 1. Configure the widget in Yuko Go to **Membership → Widgets** and click **Customize** on **Cart membership upsell**. | Field | Default | | - | - | | **Title** | `Save with membership` | | **Description** | `Save on all your future orders by becoming a member` | | **Monthly interval label** | `month` (as in "\$9.99/month") | | **Yearly interval label** | `year` (as in "\$99/year") | Under **App embed placement**, enter a **CSS Selector** for the element the upsell should appear above, for example `.cart__footer`. Leave it empty to use the default placement. On the **Styles** tab, set **Border color**, **Background color**, **Title text color**, **Description text color**, **Padding** and optional **Custom CSS**. Click **Save**. If the Yuko App embed isn't on yet, click **Enable Theme Extension** to open the theme editor with the embed ready to turn on. Then switch the widget on with the toggle on its card in **Membership → Widgets**. ### 2. Place the block manually (optional) To control exactly where the upsell appears, add the theme app block: Theme blocks get their content from Yuko's storefront script, which loads through the **Yuko App** app embed. If you haven't already, enable it in **Online Store → Themes → Customize → App embeds**. See [Theme App Embed](/installation-and-setup/theme-app-embed). In your Shopify admin, go to **Online Store → Themes**, find your active theme, and click **Customize**. Use the template selector at the top to open the page where this widget should appear (Product, Cart, a page template, and so on). Click **Add block** in the section where you want the widget. Under **Apps**, select the Yuko block named for this widget (block names start with **Yuko:**). Drag the block to your preferred position and click **Save**. Open the **Cart** template and add **Yuko: Member Cart Upsell**. The block has no theme-editor settings; text and styles come from Yuko. ### 3. Verify As a logged-out customer (or one without a membership), add a product to the cart and open the cart. The upsell should appear with your plan's price. ## How it works 1. When the cart changes, the Yuko App embed checks that memberships and the widget are on, the customer has no membership, a plan is set to upsell, and the cart isn't empty. 2. If all checks pass, the widget shows the upsell plan with its price and billing interval. 3. The customer adds the plan to the cart and becomes a member once they complete checkout. ### Limitations * The widget promotes one plan: the **Membership to upsell**. * Customers have to check out with the plan to start their membership. ## Best practices **Quote a concrete saving in the description**, for example "Members save 10% on every order". **Test in your cart drawer on mobile.** Space is tight there, so use the CSS selector if the default spot doesn't work. ## FAQs The widget hides itself. Set **Membership to upsell** in **Membership → Plans → Membership Settings**. The same plan is used by the checkout upsell, the rewards landing page and the Floating Rewards launcher. Enter a **CSS Selector** under **App embed placement**, or add the **Yuko: Member Cart Upsell** block exactly where you want it. ## Related Promote your plan in the cart drawer or cart page. Offer your plan inside Shopify Checkout (Shopify Plus). Let members view and manage their plan in their account. Show one-time and subscription options on product pages. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Checkout Membership Upsell Widget Source: https://docs.yuko.so/memberships/widgets/checkout-membership-upsell Offer your membership plan inside Shopify Checkout so customers can add it to their order. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Membership → Widgets → Checkout: Membership upsell ## Introduction The **Checkout: Membership upsell** widget shows your membership plan inside Shopify Checkout. It's the **Yuko Checkout Membership Upsell** checkout UI extension block. ## What problem this solves If a customer didn't add the membership in the cart, checkout is your last chance. The block lets them add the plan to the order in one click. ## Where it appears * Shopify Checkout (`purchase.checkout.block.render`). By default it sits in the order summary; you can move it in the checkout editor. ## Overview * Promotes the plan chosen in **Membership → Plans → Membership Settings → Membership to upsell**. * Text fields only. The block uses Shopify's checkout styling. * Hidden from customers who already have a membership. * Requires Shopify Plus. On other Shopify plans, the widget card shows a **Shopify Plus** badge and can't be turned on. ## Before you start Your store is on Shopify Plus. A plan is selected in **Membership to upsell**. ## Setup guide ### 1. Configure the widget in Yuko Go to **Membership → Widgets** and click **Customize** on **Checkout: Membership upsell**. | Field | Default | | - | - | | **Title** | `Become a member and save` | | **Description** | `Save on all your future orders by becoming a member` | | **Shipping upsell description** | `Get FREE shipping on this and future orders by becoming a member` | | **Add button** | `Add` | | **Added button** | `Added` | | **View benefits button** | `View benefits` | | **Monthly interval label** | `month` | | **Yearly interval label** | `year` | Click **Save**, then switch the widget on with the toggle on its card in **Membership → Widgets**. ### 2. Add the block in the checkout editor In your Shopify admin, go to **Settings → Checkout** and click **Customize**. Click **Add app block** in the section where you want the widget and choose the Yuko block for this widget (for example **Yuko Potential points earn** or **Yuko Redeem rewards**). Drag the block to its final position in the checkout and click **Save**. Checkout app blocks are only available on **Shopify Plus**. In Yuko, the Checkout Process widgets show "Available only on Shopify Plus plan" on other Shopify plans. See [Theme compatibility & requirements](/getting-started/theme-compatibility). Choose the **Yuko Checkout Membership Upsell** block. ### 3. Verify Go through a test checkout as a customer without a membership. The block should show the plan and an **Add** button. ## How it works 1. Shopify renders the block in checkout. 2. The block checks that memberships and the widget are on, and that the customer has no membership. 3. It shows the upsell plan with its price, billing interval, and a **View benefits** button that expands the plan's benefits. 4. **Add** adds the plan's product, with its subscription option, to the order. The button then shows the **Added** label. ### Limitations * Requires Shopify Plus. * Promotes one plan: the **Membership to upsell**. * Visual styling follows Shopify's checkout. ## Best practices **Use it alongside the cart upsell** as a second, lighter touchpoint. **Test in the checkout editor preview and in a real checkout.** Shopify can cache checkout settings for a short time. ## FAQs Check that your store is on Shopify Plus, the widget is switched on in Yuko, the block is added in the checkout editor, and you're testing as a customer without a membership. The block hides itself. ## Related Promote your plan in the cart drawer or cart page. Offer your plan inside Shopify Checkout (Shopify Plus). Let members view and manage their plan in their account. Show one-time and subscription options on product pages. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Profile Membership Widget Source: https://docs.yuko.so/memberships/widgets/profile-membership Let members see their plan, renewal date, benefits and rewards in their customer account, and upgrade, downgrade or cancel themselves. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Membership → Widgets → Profile: Membership ## Introduction The **Profile: Membership** widget shows a customer's membership in their Shopify customer account and lets them manage it themselves. It's the **Yuko Profile membership management** customer account UI extension block, not a theme block. ## What problem this solves Members want to know what they're paying for, when they renew, and how to change plans. A self-serve card answers those questions and handles plan changes without a support ticket. ## Where it appears * The **Profile** page in Shopify customer accounts (`customer-account.profile.block.render`). * The **Orders** page in Shopify customer accounts (`customer-account.order-index.block.render`). ## Overview * Shows the current plan, price, renewal date and benefits. * **View rewards** opens a modal with the rewards issued by the membership. * **Manage** opens plan cards where the member can **Upgrade**, **Downgrade** (if allowed) or **Cancel**. The current plan's card also has an **Update payment method** button that gets the member a secure link to change their card. * Customers without a membership see the **No membership text**. * Text fields only. The block uses Shopify's customer account styling. ## Before you start At least one plan exists in **Membership → Plans**. Your store uses Shopify's new customer accounts (**Settings → Customer accounts**). To let members move to a lower plan, turn on **Show downgrade option to customers** in **Membership → Plans → Membership Settings**. ## Setup guide ### 1. Configure the widget in Yuko Go to **Membership → Widgets** and click **Customize** on **Profile: Membership**. | Field | Default | | - | - | | **Title** | `Your Membership` | | **No membership text** | `No active membership` | | **Subscription renews** | Use `[renewal_date]` for the membership renewal date, for example `Renews: [renewal_date]`. | | **Manage button** | `Manage` | | **Manage modal title** | `Manage membership` | | **Active badge label** | `Active` | | **Upgrade button** | `Upgrade` | | **Downgrade button** | `Downgrade` | | **Benefits list title** | `Benefits` | | **Benefits more label** | `more` (as in "+5 more") | | Field | Default | | - | - | | **View rewards button** | `View rewards` | | **Rewards modal title** | `Your Rewards` | | **No rewards text** | `No active rewards found.` | | **Reward expires text** | `Expires on [discount_expiry_date]` | | **Load more button** | `Load more` | | **Cancel button** | `Cancel` | **Monthly interval label** (`month`) and **Yearly interval label** (`year`). * **Cancel membership confirmation**: **Title** (`Cancel membership`), **Description** (`If you cancel your membership you will lose your benefits immediately. Canceling a membership cannot be undone.`), **Close button** (`Close`), **Cancel button** (`Cancel membership`). * **Upgrade membership confirmation**: **Title** (`Upgrade membership`), **Description** (`You are about to upgrade your membership.`). * **Downgrade membership confirmation**: **Title** (`Downgrade membership`), **Description** (`You are about to downgrade your membership.`). * **Action in progress**: **In progress text** (`Your membership change is being processed. This may take a few moments.`), shown while a purchase, cancellation, upgrade or downgrade is processed. Click **Save**, then switch the widget on with the toggle on its card in **Membership → Widgets**. ### 2. Add the block in the customer accounts editor In your Shopify admin, go to **Settings → Customer accounts** and click **Customize**. Use the page selector at the top to open the page where the block should appear (Order status, Orders, or Profile). Click **Add app block** and choose the Yuko block for this widget (for example **Yuko Order status earned points**, **Yuko Order index points display** or **Yuko Profile loyalty program**). Position the block where customers will see it and click **Save**. Customer account blocks only work with Shopify's **new customer accounts**. Check that they're turned on in **Settings → Customer accounts**. On the **Profile** page (and the **Orders** page if you want it there too), add the **Yuko Profile membership management** block. See [Customer Account Extension](/installation-and-setup/customer-account-extension). ### 3. Verify Log in as a member and open your profile. Check the plan, renewal date and benefits, then open **Manage** to see the plan options. ## How it works 1. The block reads the customer's active membership. Without one, it shows the **No membership text**. 2. **Manage** lists your plans in the order set on the **Plans** tab: * Plans after the member's current plan show **Upgrade**. * Plans before it show **Downgrade**, but only if **Show downgrade option to customers** is on. 3. Upgrade and downgrade move the member's existing Shopify subscription to the new plan and its price. 4. **Cancel** cancels the subscription in Shopify. The membership tags are removed and benefits end. 5. While a change is processing, the block shows the **In progress text**. ### Limitations * Works only with Shopify's new customer accounts. * The look follows Shopify's customer account styling. ## Best practices **Order your plans from lowest to highest** on the Plans tab, so upgrade and downgrade labels make sense. **Keep the cancel description honest.** It's the last thing a member reads before cancelling. ## FAQs Yes. **Manage → Cancel** cancels their membership after a confirmation step. You can also cancel from **Membership → Members**. Turn on **Show downgrade option to customers** in **Membership → Plans → Membership Settings**. ## Related Promote your plan in the cart drawer or cart page. Offer your plan inside Shopify Checkout (Shopify Plus). Let members view and manage their plan in their account. Show one-time and subscription options on product pages. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Purchase Options Widget Source: https://docs.yuko.so/memberships/widgets/purchase-options Show one-time and subscription purchase options, with the price and charge timing, on product pages. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Membership → Widgets → Product page: Purchase options ## Introduction The **Product page: Purchase options** widget shows a product's purchase options on the product page: a one-time purchase plus each subscription plan, with its price and how often it's charged. It's the **Yuko: Purchase Options** theme app block. ## What problem this solves Many themes don't show subscription options clearly, or don't show them at all. Without them, customers can't pick the subscription on your membership product. This widget lists every option with clear pricing and renewal terms. ## Where it appears * Product pages, wherever you add the **Yuko: Purchase Options** block. * It shows only on products that have subscription options (selling plans), such as your plans' linked membership products. ## Overview * A one-time purchase option (unless the product is subscription-only) and one option per subscription plan. * A summary under the options showing the charge, your renewal terms and a link to your subscription policy. * Optionally changes the theme's buy button text when a subscription is selected. * A **Custom CSS** field. ## Before you start At least one plan exists in **Membership → Plans**, so its linked product has a subscription option. The **Yuko App** embed is turned on in your theme. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## Setup guide ### 1. Configure the widget in Yuko Go to **Membership → Widgets** and click **Customize** on **Product page: Purchase options**. | Field | Default | | - | - | | **Title** | `Purchase options` | | **One-time purchase label** | `One-time purchase` | | **Charge prefix** (under **Charge timing**) | `Billed`, shown before the frequency, as in "Billed every month" | | **Renewal terms** | `Auto-renews, skip or cancel anytime` | | **Subscription policy link label** | `View subscription policy`. Shown only when your store has a subscription policy in Shopify's legal settings. | Under **Buy button**, **Update the buy button text when a subscription is selected** is on by default. Set the **Subscription buy button label** (default `Add subscription to cart`), or turn the option off to keep your theme's button text. Use the **Custom CSS** field to adjust the widget's look. Click **Save**, then switch the widget on with the toggle on its card in **Membership → Widgets**. ### 2. Add the block to your product template Theme blocks get their content from Yuko's storefront script, which loads through the **Yuko App** app embed. If you haven't already, enable it in **Online Store → Themes → Customize → App embeds**. See [Theme App Embed](/installation-and-setup/theme-app-embed). In your Shopify admin, go to **Online Store → Themes**, find your active theme, and click **Customize**. Use the template selector at the top to open the page where this widget should appear (Product, Cart, a page template, and so on). Click **Add block** in the section where you want the widget. Under **Apps**, select the Yuko block named for this widget (block names start with **Yuko:**). Drag the block to your preferred position and click **Save**. Open the **Product** template used by your membership product and add **Yuko: Purchase Options**, usually just above the buy buttons. The block has no theme-editor settings. ### 3. Verify Open your membership product on the storefront. Check that the options appear, that selecting the subscription shows the charge summary, and that the buy button text changes (if enabled). ## How it works 1. On a product with subscription options, the block lists the one-time option (if allowed) and each plan with its price. 2. When the customer selects a subscription, the summary shows the price with your charge prefix and frequency, your renewal terms and the policy link. 3. The selected plan is added to the cart with the product. ### Limitations * Shows only on products with subscription options. * In the theme editor, the block always shows so you can position it; on the live store it shows only when the widget is switched on. ## FAQs Check that the product has a subscription option, the widget is switched on in Yuko, and the block is added to the product template that product uses. The link appears only when your store has a subscription policy set in Shopify's legal policy settings. ## Related Promote your plan in the cart drawer or cart page. Offer your plan inside Shopify Checkout (Shopify Plus). Let members view and manage their plan in their account. Show one-time and subscription options on product pages. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Branding & Locale Source: https://docs.yuko.so/onsite-widgets/branding-and-locale Pick a colour palette for your loyalty widgets, apply it to every widget at once, and edit widget text in each of your store's languages. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → **Customize Branding** ## Introduction **Branding Settings** sets the colours for your loyalty widgets in one place. Choose a ready-made palette or your own colours, then apply them to every widget at once. Widget **language** is set per widget: each widget editor has an **Editing language** picker, so you can write its text in each language your store publishes. ## What problem this solves Restyling a dozen widgets one by one is slow and easy to get inconsistent. Branding gives every widget the same colours in one save, and you can still fine-tune individual widgets afterwards. ## Where it applies Branding colours can be applied to all loyalty widgets: Product page, Cart earn, Cart redeem, Checkout earn and redeem, Order status, Order list, Customer profile, the Customer account page, the Rewards Landing Page, Floating Rewards and Loyalty Nudges. ## When to use * You're setting up widgets for the first time and want them all to match your store. * You've rebranded and want to update every widget in one go. ## Overview * **8 colour palettes** to start from. * **5 colours** you can adjust: Primary, Secondary, Primary text, Secondary text and Icon. * **Apply changes to all widgets?** copies the colours into every widget's own style settings. * **Editing language** in each widget editor, for text in each of your store's published languages. ## Before you start Yuko is installed and your loyalty program is set up. For more than one language, the languages are published in your Shopify store (**Settings → Languages**). ## Setup guide ### Set your brand colours Go to **Apps → Yuko Loyalty → Loyalty → Widgets** and click **Customize Branding**. Pick one of the eight palettes: **Eclipse Black** (default), **Coral Pink**, **Herbal Green**, **Golden Ochre**, **Crimson Red**, **Expresso Brown**, **Pacific Blue** or **Modern Gray**. Choosing a palette fills in the colours below. Adjust any of the five colours. Before you pick a palette, they start at these values: | Colour | Starting value | | - | - | | **Primary color** | `#000000` | | **Secondary color** | `#ffffff` | | **Primary text color** | `#000000` | | **Secondary text color** | `#666666` | | **Icon color** | `#000000` | Tick **Apply changes to all widgets?** to copy these colours into every loyalty widget. This overwrites any colours you've set on individual widgets. Click **Save**. ### Edit widget text in another language Go to **Loyalty → Widgets** and click **Customize** on the widget. At the top of the editor, choose a language from **Editing language**. Your default language is marked **(default)**. The picker appears only when your store has more than one language. Edit the text and click **Save**. Each language keeps its own copy of the widget's text. Repeat for each language. Labels in your loyalty content, such as campaign names, reward names, VIP tier names and system labels, are translated separately in [Translations](/account/translations). ## How it works * **Branding** stores your palette and colours. When **Apply changes to all widgets?** is ticked on save, Yuko writes those colours into each widget's style settings. After that, each widget keeps its own colours, so you can still change one widget without affecting the rest. * **Language** is chosen on the storefront from the language the customer is browsing in. Yuko shows the widget text you saved for that language. ### Limitations * Branding sets colours only. There are no logo, font or typography settings. Each widget has its own style options (such as **Custom CSS** and shapes) in its editor. * Branding doesn't change your [loyalty emails](/emails/overview). Email branding is set separately. ## Best practices **Set branding first.** Pick your palette before you customise individual widgets, then tick **Apply changes to all widgets?** once. **Re-apply after a rebrand.** Ticking **Apply changes to all widgets?** again brings every widget back in line. **Write every language.** If you sell in several languages, open each widget in each language so customers never see untranslated text. ## FAQs Yes. Branding is a starting point. After applying it, open any widget and change its colours on its own Styles or Customization settings. Ticking **Apply changes to all widgets?** again later overwrites those changes. Colours reach existing widgets only when **Apply changes to all widgets?** is ticked when you save. Tick it and save again. No. Branding covers colours only. For images, use the widget's own settings, such as **Banner images** in [Floating Rewards](/onsite-widgets/floating-launcher) or the image settings on the [Rewards Landing Page](/onsite-widgets/rewards-landing-page) blocks. It appears only when your store publishes more than one language. Add and publish languages in Shopify under **Settings → Languages**. In [Translations](/account/translations), which covers system labels and dynamic content such as campaigns, rewards and VIP tiers. ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Cart Earn Widget Source: https://docs.yuko.so/onsite-widgets/cart-earn Show customers how many points they'll earn for the items in their cart, on the cart page and cart drawer. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Cart earn message ## Introduction The **Cart earn message** shows the points a customer will earn for the items currently in their cart. It updates as the cart changes. ## What problem this solves The cart is where customers decide whether to check out. Showing the points they're about to earn gives them one more reason to complete the order, and to add one more item. ## Where it appears * Cart page and cart drawer. It is placed automatically through the **Yuko App** embed, or wherever you add the **Yuko: Cart Earn Message** block. ## When to use * You want a simple earn reminder at the cart. * You run spend-based earning, so the points grow as the cart grows. ## Overview * One message field with placeholders, plus a default or custom icon. * Automatic placement above your theme's cart footer, or a **Custom placement** selector. * Styles tab with four colours, padding, height and **Custom CSS**. * Updates when items are added, removed or changed. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. ## Setup guide ### 1. Configure the widget in Yuko Go to **Loyalty → Widgets**, find **Cart earn message** under **Shopping Cart**, and click **Customize**. **Cart earn message**. Default: `You'll earn [points_value] [points_label] on this purchase!` Under **Customize cart earn message icon**, keep **Default** or choose **Custom** to upload your own icon (JPG, PNG, GIF or WEBP, under 1 MB). Leave **Custom placement** empty to let Yuko place the message above your theme's cart footer. To put it somewhere else, enter a CSS selector, for example `.cart__footer`. Yuko inserts the message just before each matching element. On the **Styles** tab, set: * **Color Configuration:** Primary color, Secondary color, Text color and Body description color. * **Widget Style:** Padding (px, default 10) and Height (px, leave empty for automatic). * **Custom CSS:** add your own CSS rules for this widget. Click **Save**. Back on **Loyalty → Widgets**, switch the widget's toggle on. ### 2. Make sure it can render on your theme Automatic placement needs the **Yuko App** embed. If it's off, the widget editor shows an **Enable Theme Extension** button that opens the theme editor so you can switch it on. See [Theme App Embed](/installation-and-setup/theme-app-embed). To control the exact position yourself, add the block instead: Theme blocks get their content from Yuko's storefront script, which loads through the **Yuko App** app embed. If you haven't already, enable it in **Online Store → Themes → Customize → App embeds**. See [Theme App Embed](/installation-and-setup/theme-app-embed). In your Shopify admin, go to **Online Store → Themes**, find your active theme, and click **Customize**. Use the template selector at the top to open the page where this widget should appear (Product, Cart, a page template, and so on). Click **Add block** in the section where you want the widget. Under **Apps**, select the Yuko block named for this widget (block names start with **Yuko:**). Drag the block to your preferred position and click **Save**. Pick the **Cart** template and add **Yuko: Cart Earn Message**. The block has no theme editor settings; all text and styling come from Yuko. ### 3. Verify Add a product to the cart on your live store. Check that the message shows on the cart page and in the cart drawer, and that it updates when you change quantities. ## Available placeholders | Placeholder | Replaced with | | - | - | | `[points_value]` | Total points earned with the purchase. | | `[points_label]` | Your loyalty points label. | | `[points_cash_value]` | Cash value of the points earned. | ## How it works 1. When the cart loads or changes, Yuko recalculates the points for the cart contents. 2. The message renders inside the block (if you added one) and in the automatically placed spot from the **Yuko App** embed. 3. Automatic placement uses your **Custom placement** selector if set; otherwise it uses common cart-footer positions in Shopify themes. ### Limitations * The message is hidden when the cart earns 0 points (for example, an empty cart or excluded products). * Automatic placement depends on your theme's cart markup. If the message doesn't appear, or appears in the wrong spot, use **Custom placement** or add the block. ## Best practices **Pair with Cart Redeem.** Customers should see what they'll earn and what they can spend. **Test your Custom placement selector** on both the cart page and the cart drawer, since themes often use different markup for each. ## FAQs Check that the **Yuko App** embed is on. If it is, your theme's drawer may use markup Yuko doesn't recognise; enter a selector for an element inside your drawer in **Custom placement**. The block and automatic placement both render the message. If you added the **Yuko: Cart Earn Message** block and the embed also places it, remove the block and use **Custom placement** to position the automatic message instead. ## Full placeholder reference Placeholders are written in square brackets, for example `[points_label]`. Each text field's help text in the widget editor lists the placeholders that field supports. **Available in every storefront widget text** | Placeholder | Replaced with | | - | - | | `[points_label]` | Your points label from **Loyalty → Settings** (singular or plural, e.g. *point* / *points*). | | `[point_balance]` | The customer's current points balance. | | `[points_cash_value]` | What the customer's balance is worth in your store currency, based on your points-to-cash conversion rate. | | `[store_name]` | Your store name. | **Widget-specific placeholders** | Placeholder | Replaced with | Used in | | - | - | - | | `[points_value]` | Points the customer can earn on this product, cart or order. | Product page, Cart earn, Checkout earn, Order status earn | | `[first_name]` | The customer's first name (logged-in customers only). | Cart redeem greeting, Loyalty Nudges | | `[customer_name]` | The customer's full name (logged-in customers only). | Loyalty Nudges | | `[points_needed]` | How many more points the customer needs for a reward. | Insufficient-points text (Cart redeem, Loyalty Nudges) | | `[expiration_date]` | The expiry date of an earned reward. Hidden automatically when the reward doesn't expire. `[discount_expiry_date]` works the same way. | Reward expiry text (Cart redeem, Loyalty Nudges, Floating Rewards) | | `[points_to_redeem]` | The number of points the customer chose to redeem. | Checkout redeem summary | | `[discount_value]` | The discount those points unlock. | Checkout redeem summary | | `[tier_name]` | A VIP tier name. | VIP tier text (Floating Rewards) | | `[next_tier]` | The name of the customer's next VIP tier. | VIP progress text | | `[tier_entry_amount]` | The threshold needed to enter a tier. | Cart redeem tier entry text | | `[tier_reach_level]` | The threshold needed to reach a tier. | Floating Rewards VIP text | | `[multiplier_value]` | The points multiplier for a VIP tier (e.g. *2*). Shown only when the multiplier is greater than 1. | Points multiplier benefit text | | `[renewal_date]` | The date a paid membership renews. | Floating Rewards membership text | ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Cart Redeem Widget Source: https://docs.yuko.so/onsite-widgets/cart-redeem Show customers their points balance in the cart and let them redeem rewards, see VIP progress and add their birthday without leaving the page. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Cart redeem message ## Introduction The **Cart redeem message** shows the customer's points balance in the cart with a **Rewards** button. The button opens a redeem modal where customers see their existing rewards, redeem points for new ones, check VIP tier progress and set their birthday. Rewards are applied to the cart in one click. ## What problem this solves Customers often forget they have points. Showing the balance at the cart, with a one-click way to redeem and apply a reward, turns that balance into a reason to check out now. ## Where it appears * Cart page and cart drawer. It is placed automatically through the **Yuko App** embed, or wherever you add the **Yuko: Cart Redeem Message** block. ## When to use * You want to drive redemption at the moment of purchase. * You want logged-out shoppers to see a prompt to log in and use their points. ## Overview * Separate content for logged-in and logged-out customers. * A redeem modal with header, existing rewards, ways to redeem, VIP tiers and a birthday prompt. * Automatic placement above your theme's cart footer, or a **Custom placement** selector. * Styles tab with four colours, padding, height and **Custom CSS**. * Edit the text per language with the **Editing language** picker. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. You've set up at least one [Way to Redeem](/loyalty/ways-to-redeem/overview). ## Setup guide ### 1. Configure the widget in Yuko Go to **Loyalty → Widgets**, find **Cart redeem message** under **Shopping Cart**, and click **Customize**. The **Configuration** tab is split into the cards below. * **Point balance in cart**: default `You have: [point_balance] [points_label]` * **Reward button**: default `Rewards` * **Customize cart reward icon**: **Default**, or **Custom** to upload your own (JPG, PNG, GIF or WEBP, under 1 MB) * **Custom placement**: leave empty to place the widget above your theme's cart footer automatically, or enter a CSS selector (for example `.cart__footer`). Yuko inserts the widget just before each matching element. * **Hide for logged out customers**: off by default * **Log in to redeem points**: default `Log in to redeem your [points_label] for rewards.` * **Log in button**: default `Log In` * **Heading title**: default `Redeem rewards`. Shown when the customer has no first name on file. * **Greeting**: default `Hey [first_name],`. Shown instead of the heading title when the customer is logged in. * **Available balance label**: default `Available Balance` * **Set birthday button**: default `Set birthday` * **Existing rewards title**: default `Existing Rewards` * **Apply button**: default `Apply` * **Expiration date label**: default `Expires on [expiration_date]`. Hidden automatically when a reward has no expiry. * **Ways to redeem title**: default `Ways to Redeem` * **Insufficient points label**: default `Needs [points_needed] more [points_label]` * **Load more button label**: default `Load more` * **Redeem button**: default `Redeem` * **Next tier**: default `Next tier: [next_tier]` * **Progress to next tier**: default `Earn [points] [points_label] to reach [tier_name]` * **Maximum tier reached**: default `You have reached the maximum tier` * **Benefits title**: default `Benefits` * **Tiers title**: default `Upcoming Tiers` * **Tier entry threshold**: default `Earn [tier_entry_amount] [points_label]` * **Points multiplier benefit text**: default `[multiplier_value]x multiplier`. Shown as the first benefit when the tier's multiplier is above 1. * **Title**: default `Birthday Reward`. Used when your Birthday earn rule has no name. * **Description**: default `Tell us your birthday and earn special rewards!`. Used when your Birthday earn rule has no description. * **Save date button**: default `Save date` * **Day label**, **Month label**, **Year label**: defaults `Day`, `Month`, `Year` On the **Styles** tab, set: * **Color Configuration:** Primary color, Secondary color, Text color and Body description color. * **Widget Style:** Padding (px, default 10) and Height (px, leave empty for automatic). * **Custom CSS:** add your own CSS rules for this widget. Click **Save**. Back on **Loyalty → Widgets**, switch the widget's toggle on. ### 2. Make sure it can render on your theme Automatic placement needs the **Yuko App** embed. If it's off, the widget editor shows an **Enable Theme Extension** button that opens the theme editor so you can switch it on. See [Theme App Embed](/installation-and-setup/theme-app-embed). To control the exact position yourself, add the block instead: Theme blocks get their content from Yuko's storefront script, which loads through the **Yuko App** app embed. If you haven't already, enable it in **Online Store → Themes → Customize → App embeds**. See [Theme App Embed](/installation-and-setup/theme-app-embed). In your Shopify admin, go to **Online Store → Themes**, find your active theme, and click **Customize**. Use the template selector at the top to open the page where this widget should appear (Product, Cart, a page template, and so on). Click **Add block** in the section where you want the widget. Under **Apps**, select the Yuko block named for this widget (block names start with **Yuko:**). Drag the block to your preferred position and click **Save**. Pick the **Cart** template and add **Yuko: Cart Redeem Message**. The block has no theme editor settings; all text and styling come from Yuko. ### 3. Verify Log in as a customer with points. Check the balance message, open the modal and redeem a reward. Open the cart in a private window. You should see the login prompt, or nothing if **Hide for logged out customers** is on. Click **Apply** on an existing reward and check that the discount shows in the cart and at checkout. ## Custom login trigger By default, the **Log In** button sends logged-out shoppers to Shopify's account login page. If your store uses its own login (a popup, a drawer or a third-party login app), set a **Custom login trigger** in [Loyalty → Settings](/loyalty/program-settings): * **Use a CSS element**: enter a **Login element selector** (for example `#login-button`). Yuko clicks that element to start your login flow. * **Use a link**: enter a **Login link** to send the shopper to that URL. The same setting is used by the Floating Rewards launcher and Loyalty Nudges. ## Available placeholders | Placeholder | Replaced with | | - | - | | `[point_balance]` | Customer's points balance. | | `[points_label]` | Your loyalty points label. | | `[points_cash_value]` | Cash value of the customer's points. | | `[first_name]` | Customer's first name. | | `[expiration_date]` | The reward's expiry date. | | `[points_needed]` | Points still needed for a reward. | | `[next_tier]` | The customer's next VIP tier. | | `[points]` | Points (or spend) still needed to reach the next tier. | | `[tier_name]` | The next tier's name. | | `[tier_entry_amount]` | Points or spend needed to enter a tier. | | `[multiplier_value]` | A tier's points multiplier, for example 2. | ## How it works 1. When the cart loads or changes, Yuko renders the balance message in the block and in the automatically placed spot. 2. Logged-out shoppers see the login prompt, unless **Hide for logged out customers** is on. 3. Logged-in customers with a zero balance don't see the widget. 4. Clicking the **Rewards** button opens the redeem modal. 5. **Redeem** turns points into a discount code for that customer. **Apply** adds the code to the cart. ### Limitations * Automatic placement depends on your theme's cart markup. If the widget doesn't appear, or appears in the wrong spot, use **Custom placement** or add the block. * The VIP tiers page needs [VIP tiers](/vip-tiers/overview) to be set up. ## Best practices **Pair with Cart Earn.** Customers should see what they'll earn and what they can spend. **Keep the logged-out prompt on.** It doubles as a login and sign-up nudge. **Set a Custom login trigger** if your theme uses a login popup, so shoppers don't leave the cart to log in. ## FAQs The widget is hidden for logged-in customers with a zero balance. Check the customer's balance in **Customers**. The block and automatic placement both render the widget. Remove the **Yuko: Cart Redeem Message** block and use **Custom placement** to position the automatic one instead. VIP tiers aren't set up, or the customer hasn't been placed in a tier yet. ## Full placeholder reference Placeholders are written in square brackets, for example `[points_label]`. Each text field's help text in the widget editor lists the placeholders that field supports. **Available in every storefront widget text** | Placeholder | Replaced with | | - | - | | `[points_label]` | Your points label from **Loyalty → Settings** (singular or plural, e.g. *point* / *points*). | | `[point_balance]` | The customer's current points balance. | | `[points_cash_value]` | What the customer's balance is worth in your store currency, based on your points-to-cash conversion rate. | | `[store_name]` | Your store name. | **Widget-specific placeholders** | Placeholder | Replaced with | Used in | | - | - | - | | `[points_value]` | Points the customer can earn on this product, cart or order. | Product page, Cart earn, Checkout earn, Order status earn | | `[first_name]` | The customer's first name (logged-in customers only). | Cart redeem greeting, Loyalty Nudges | | `[customer_name]` | The customer's full name (logged-in customers only). | Loyalty Nudges | | `[points_needed]` | How many more points the customer needs for a reward. | Insufficient-points text (Cart redeem, Loyalty Nudges) | | `[expiration_date]` | The expiry date of an earned reward. Hidden automatically when the reward doesn't expire. `[discount_expiry_date]` works the same way. | Reward expiry text (Cart redeem, Loyalty Nudges, Floating Rewards) | | `[points_to_redeem]` | The number of points the customer chose to redeem. | Checkout redeem summary | | `[discount_value]` | The discount those points unlock. | Checkout redeem summary | | `[tier_name]` | A VIP tier name. | VIP tier text (Floating Rewards) | | `[next_tier]` | The name of the customer's next VIP tier. | VIP progress text | | `[tier_entry_amount]` | The threshold needed to enter a tier. | Cart redeem tier entry text | | `[tier_reach_level]` | The threshold needed to reach a tier. | Floating Rewards VIP text | | `[multiplier_value]` | The points multiplier for a VIP tier (e.g. *2*). Shown only when the multiplier is greater than 1. | Points multiplier benefit text | | `[renewal_date]` | The date a paid membership renews. | Floating Rewards membership text | ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Checkout Earn Widget Source: https://docs.yuko.so/onsite-widgets/checkout-earn Show customers how many points they'll earn on their order, inside Shopify Checkout. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Checkout: Earn points ## Introduction The **Checkout: Earn points** widget shows the points a customer will earn on the order, inside Shopify Checkout. It's the **Yuko Potential points earn** checkout UI extension block. ## What problem this solves Checkout is the last step before the order is placed. A reminder of the points the customer is about to earn reinforces the value of completing the purchase. ## Where it appears * Shopify Checkout, in the order summary by default. You can move the block in the checkout editor. ## When to use * Your store is on Shopify Plus. * You want the earn message to follow the customer all the way to payment. ## Overview * A checkout UI extension block on the `purchase.checkout.block.render` target, named **Yuko Potential points earn**. * Two text fields: a title and a message. * No Styles tab; the block uses Shopify Checkout's own styling. * Recalculates as the checkout total changes. On the Widgets list, checkout widgets show the note **Available only on Shopify Plus plan** when your store isn't on Shopify Plus. This widget is also available on select Yuko plans. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. Your store is on Shopify Plus. ## Setup guide ### 1. Configure the widget in Yuko Go to **Loyalty → Widgets**, find **Checkout: Earn points** under **Checkout Process**, and click **Customize**. * **Checkout earn title**: default `Earn [points_label]` * **Checkout earn message**: default `Earn up to [points_value] [points_label] for this purchase!` Click **Save**. Back on **Loyalty → Widgets**, switch the widget's toggle on. ### 2. Add the block in the checkout editor In your Shopify admin, go to **Settings → Checkout** and click **Customize**. Click **Add app block** in the section where you want the widget and choose the Yuko block for this widget (for example **Yuko Potential points earn** or **Yuko Redeem rewards**). Drag the block to its final position in the checkout and click **Save**. Checkout app blocks are only available on **Shopify Plus**. In Yuko, the Checkout Process widgets show "Available only on Shopify Plus plan" on other Shopify plans. See [Theme compatibility & requirements](/getting-started/theme-compatibility). Choose the **Yuko Potential points earn** block. By default it sits in the order summary; drag it wherever suits your checkout. See [Checkout UI Extension](/installation-and-setup/checkout-ui-extension) for more detail. ### 3. Verify Start a checkout on your live store and check that the block shows the expected points. ## Available placeholders | Placeholder | Replaced with | | - | - | | `[points_value]` | The points the order will earn. | | `[points_label]` | Your loyalty points label. | | `[points_cash_value]` | Cash value of the points earned. | ## How it works 1. Shopify loads the **Yuko Potential points earn** block in checkout. 2. Yuko calculates the points for the current checkout from your active earn rules. 3. If the order earns points, the block shows your title and message. If it earns nothing, the block stays hidden. 4. When the checkout total changes, the points are recalculated. ### Limitations * Shopify only allows checkout UI extension blocks on Shopify Plus stores. * The block's look follows Shopify Checkout's styling; you can't add custom CSS. ## Best practices **Keep the message short.** Checkout is a busy screen; one line is enough. **Pair with [Checkout: Redeem points](/onsite-widgets/checkout-redeem)** so customers can also spend points before paying. ## FAQs Check that your store is on Shopify Plus, that the **Yuko Potential points earn** block is added and saved in the checkout editor, that the widget toggle is on in **Loyalty → Widgets**, and that the order actually earns points. Use the [Order Status: Earn Points Message](/onsite-widgets/order-status-earn) widget. It confirms the points earned after the order is placed. ## Full placeholder reference Placeholders are written in square brackets, for example `[points_label]`. Each text field's help text in the widget editor lists the placeholders that field supports. **Available in every storefront widget text** | Placeholder | Replaced with | | - | - | | `[points_label]` | Your points label from **Loyalty → Settings** (singular or plural, e.g. *point* / *points*). | | `[point_balance]` | The customer's current points balance. | | `[points_cash_value]` | What the customer's balance is worth in your store currency, based on your points-to-cash conversion rate. | | `[store_name]` | Your store name. | **Widget-specific placeholders** | Placeholder | Replaced with | Used in | | - | - | - | | `[points_value]` | Points the customer can earn on this product, cart or order. | Product page, Cart earn, Checkout earn, Order status earn | | `[first_name]` | The customer's first name (logged-in customers only). | Cart redeem greeting, Loyalty Nudges | | `[customer_name]` | The customer's full name (logged-in customers only). | Loyalty Nudges | | `[points_needed]` | How many more points the customer needs for a reward. | Insufficient-points text (Cart redeem, Loyalty Nudges) | | `[expiration_date]` | The expiry date of an earned reward. Hidden automatically when the reward doesn't expire. `[discount_expiry_date]` works the same way. | Reward expiry text (Cart redeem, Loyalty Nudges, Floating Rewards) | | `[points_to_redeem]` | The number of points the customer chose to redeem. | Checkout redeem summary | | `[discount_value]` | The discount those points unlock. | Checkout redeem summary | | `[tier_name]` | A VIP tier name. | VIP tier text (Floating Rewards) | | `[next_tier]` | The name of the customer's next VIP tier. | VIP progress text | | `[tier_entry_amount]` | The threshold needed to enter a tier. | Cart redeem tier entry text | | `[tier_reach_level]` | The threshold needed to reach a tier. | Floating Rewards VIP text | | `[multiplier_value]` | The points multiplier for a VIP tier (e.g. *2*). Shown only when the multiplier is greater than 1. | Points multiplier benefit text | | `[renewal_date]` | The date a paid membership renews. | Floating Rewards membership text | ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Checkout Redeem Widget Source: https://docs.yuko.so/onsite-widgets/checkout-redeem Let customers redeem points and apply their loyalty rewards inside Shopify Checkout. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Checkout: Redeem points ## Introduction The **Checkout: Redeem points** widget lets customers apply rewards they already have, or redeem points for a new reward, without leaving Shopify Checkout. It's the **Yuko Redeem rewards** checkout UI extension block. ## What problem this solves Customers who decide to use their points at checkout shouldn't have to go back to the cart. Redeeming inside checkout keeps them moving towards payment. ## Where it appears * Shopify Checkout, at the top of the order summary by default. You can move the block in the checkout editor. ## When to use * Your store is on Shopify Plus. * You want customers to redeem at the most decisive screen. ## Overview * A checkout UI extension block on the `purchase.checkout.block.render` target, named **Yuko Redeem rewards**. * An **existing rewards** row: pick a code the customer already has and apply it. * A **redeem** row: pick a reward and redeem points for it. Rewards set to **Incremented points** show a points stepper. * A login prompt for guests. * A **Visibility** option to hide the widget for customers with specific tags. * No Styles tab; the block uses Shopify Checkout's own styling. On the Widgets list, checkout widgets show the note **Available only on Shopify Plus plan** when your store isn't on Shopify Plus. This widget is also available on select Yuko plans. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. Your store is on Shopify Plus. You've set up at least one [Way to Redeem](/loyalty/ways-to-redeem/overview). ## Setup guide ### 1. Configure the widget in Yuko Go to **Loyalty → Widgets**, find **Checkout: Redeem points** under **Checkout Process**, and click **Customize**. | Field | Default | | - | - | | **Header title** | `Redeem your [points_label] for rewards` | | **Point balance text** | `You have [point_balance] [points_label]. Redeem them for rewards.` | | **Reward selection label** | `Select a reward` | | **Points to redeem label** | `[points_label] to redeem` | | **Summary text** | `[points_to_redeem] [points_label] for [discount_value] off` | | **Redeem button text** | `Redeem` | | **Apply button text** | `Apply` | | **Existing rewards label** | `Your rewards` | | **Login link text** | `Log in` | | **Login prompt text** | `to claim loyalty rewards.` | Under **Visibility**, turn on **Hide widget for customers with specific tags**, then search for and select the **Customer tags** to hide it from. Customers with any of these tags won't see the widget. Click **Save**. Back on **Loyalty → Widgets**, switch the widget's toggle on. ### 2. Add the block in the checkout editor In your Shopify admin, go to **Settings → Checkout** and click **Customize**. Click **Add app block** in the section where you want the widget and choose the Yuko block for this widget (for example **Yuko Potential points earn** or **Yuko Redeem rewards**). Drag the block to its final position in the checkout and click **Save**. Checkout app blocks are only available on **Shopify Plus**. In Yuko, the Checkout Process widgets show "Available only on Shopify Plus plan" on other Shopify plans. See [Theme compatibility & requirements](/getting-started/theme-compatibility). Choose the **Yuko Redeem rewards** block. By default it sits at the top of the order summary; drag it wherever suits your checkout. See [Checkout UI Extension](/installation-and-setup/checkout-ui-extension) for more detail. ### 3. Verify Log in as a customer with enough points, start a checkout, redeem a reward and check that the discount is applied. Start a checkout without logging in. You should see the login link and prompt. ## Available placeholders | Placeholder | Replaced with | | - | - | | `[points_label]` | Your loyalty points label. | | `[point_balance]` | Customer's available points balance. | | `[points_cash_value]` | Cash value of the customer's points. | | `[points_to_redeem]` | Points being redeemed. | | `[discount_value]` | The discount amount the customer will get. | ## How it works 1. Shopify loads the **Yuko Redeem rewards** block in checkout. 2. **Logged-in customers** see the header and their balance, then: * an existing rewards row (when they have unused codes) to pick a code and click **Apply**; * a redeem row (when they can afford at least one reward) to pick a reward and click **Redeem**. 3. For rewards set to **Incremented points**, a points stepper appears under the redeem row. It starts at the most the customer can redeem, moves in steps of the reward's points, and respects the reward's minimum and maximum. The **Summary text** shows what they'll get. 4. Clicking **Redeem** creates the discount code and applies it to the checkout. 5. **Guests** see the **Login link text** and **Login prompt text**. The link sends them to your store's login page and back to checkout afterwards. They also see the rewards list, so they know what logging in unlocks. 6. The widget stays hidden if the customer has a hidden tag, or if there's nothing to show. ### Limitations * Shopify only allows checkout UI extension blocks on Shopify Plus stores. * The block's look follows Shopify Checkout's styling; you can't add custom CSS. * Whether a loyalty discount combines with other discounts depends on the reward's combination settings in Shopify. ## Best practices **Keep it in the order summary.** Customers look there for discounts when they want to save money. **Hide it for wholesale or staff tags** with **Hide widget for customers with specific tags**, if those customers shouldn't redeem points. ## FAQs The widget hides when the customer has no unused rewards and can't afford any reward, or when they have one of the tags you chose under **Visibility**. It appears for rewards set to **Incremented points**. Customers choose how many points to redeem, in steps of the reward's points, and the **Summary text** shows the resulting discount. ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Customer Account Page (Loyalty Hub) Source: https://docs.yuko.so/onsite-widgets/customer-account-page Give customers a full loyalty page inside Shopify customer accounts, with balance, VIP tiers, ways to earn and redeem, referrals and membership. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Loyalty Rewards: Customer Account Page ## Introduction The **Loyalty Rewards: Customer Account Page** widget is a full loyalty page inside Shopify customer accounts. It's the **Yuko Loyalty account page** extension, a full-page extension on the `customer-account.page.render` target, not a block you drop into an existing page. Customers see their balance and activity, their VIP tier, ways to earn and redeem, their referral link and their membership, all on one page. ## What problem this solves Customers expect to find their loyalty status where they manage their orders and profile. A dedicated page in the customer account removes the need to hunt for it on the storefront. ## Where it appears * A dedicated page in Shopify customer accounts. ## When to use * You use Shopify's customer accounts. * You want a complete loyalty hub without building a storefront page. ## Overview * Six sections you can drag into any order: **Header**, **VIP Tiers**, **Ways to Earn**, **Ways to Redeem**, **Referrals** and **Membership**. * Every heading, label, button and empty state is editable. * **Ways to earn — order** lets you show booster campaigns or standard campaigns first. * Membership management modals (manage, update payment, cancel, upgrade, downgrade). * VIP Tiers, Referrals and Membership sections show only when those features are active for your store. * This widget is available on select plans. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. Your store uses Shopify customer accounts (**Settings → Customer accounts**). ## Setup guide ### 1. Configure the page in Yuko Go to **Loyalty → Widgets**, find **Loyalty Rewards: Customer Account Page** under **Post-Purchase**, and click **Customize**. Drag sections by their handle to change the order they appear on the page. The default order is Header, VIP Tiers, Ways to Earn, Ways to Redeem, Referrals, Membership. Click a section to expand it and edit its text. See [Sections and fields](#sections-and-fields) below. Click **Save**. Back on **Loyalty → Widgets**, switch the widget's toggle on. ### 2. Make the page available in customer accounts In your Shopify admin, go to **Settings → Customer accounts** and click **Customize**. Use the page selector at the top to open the page where the block should appear (Order status, Orders, or Profile). Click **Add app block** and choose the Yuko block for this widget (for example **Yuko Order status earned points**, **Yuko Order index points display** or **Yuko Profile loyalty program**). Position the block where customers will see it and click **Save**. Customer account blocks only work with Shopify's **new customer accounts**. Check that they're turned on in **Settings → Customer accounts**. The **Yuko Loyalty account page** is a full page, so instead of adding a block, link to it from your customer account menu so customers can open it. See [Customer Account Extension](/installation-and-setup/customer-account-extension) for details. ### 3. Verify Log in as a customer and open the loyalty page from the customer account. Check each section and the order you set. ## Sections and fields The welcome card, balance, activity and VIP progress. * **Landing banner image**: **Default** or **Custom** (upload your own banner) * **Page title**: `Welcome!` * **Page description**: `Track your progress and unlock rewards as you earn more [points_label] ...` * **Available Points**: `[points_label] Balance` * **View activity link**: `View activity` * **Recent activities title**: `Recent Activities` * **Admin reason text when point adjustment happens**: `note: [admin_reason]` * **Recent activities load more text**: `Load more` * **Total earned card title** / **Total earned description**: `TOTAL EARNED` / `Lifetime [points_label] earned` * **Total redeemed card title** / **Total redeemed description**: `TOTAL REDEEMED` / `Rewards claimed and used` * **Current VIP tier card title**: `Current VIP tier` * **Next tier text**: `Next tier: [tier_name]` * **Points to unlock text**: `To achieve [tier_name], [remaining_points] [points_label] more.` * **Max tier reached text**: `You have reached the maximum tier` * **Section title**: `VIP rewards & perks` * **Benefits section title**: `Benefits` * **Active badge text** / **Upcoming badge text**: `Active` / `Upcoming` * **No benefits text**: `No benefits` * **Points multiplier benefit text**: `[multiplier_value]x multiplier` * **Section title**: `Ways to Earn Rewards` * **Ways to earn — order**: **Booster campaigns first** (default) or **Standard campaigns first** * **Earn points** group: **Place an order earning rule** (`Earn [points_value] [points_label] for every [currency] [amount_spent]`), and button labels **Follow**, **Share**, **Like** and **Visit** * **Empty state title** / **Empty state description**: `No Ways to Earn` / `Nothing here yet.` * **Birthday update** group: **Header prompt (shown under page description)** (`Enter your birthday to earn rewards.`), **Modal title** (`Birthday Reward`), **Birthday configure modal description**, **Day label**, **Month label**, **Year label**, **Configure button text** (`Set date`) and **Confirm button text** (`Save date`) * **Existing rewards** group: **Existing rewards section title** (`Existing rewards`), **Points spent text** (`Spent [used_points] [points_label]`), **Discount code label**, **Show more button**, **No rewards data text**, **Copy button** (`Copy code`) and **Expires on text** (`Expires on [discount_expiry_date]`) * **Ways to redeem** group: **Section title** (`Ways to redeem`), **Free products section title** (`Free Products`), **Earn more text** (`Earn [remaining] more [points_label]`), **Redeem button text**, **Redeem modal title** (`Redeem reward`), **Confirm redeem button text** (`Confirm Redeem`), **Show more button** and **Points to redeem label** (`[points_label] to Redeem`) * **Empty states** group: **No rewards empty title** (`No Rewards`), **No coupons empty title** (`No Coupons`) and **Empty state description** (`Nothing here yet.`) * **Section title**: `Referrals` * **Card heading**: `Refer your friends` * **Card description**: `Invite your friends or family to enjoy our products by sharing the link below, and we will reward you.` * **Referrer Reward label** / **Friend reward label**: `You get` / `They get` * **Get referral link button text**: `Get referral link` * **Copy link button text** / **Copied confirmation text**: `Copy link` / `Copied!` * **Section title** (`Membership`), **Benefits title** (`Your benefits:`), **No benefits text**, **Benefits more label**, **Renews label** * Buttons: **Manage button**, **Update payment button**, **Cancel button**, **Upgrade button**, **Downgrade button**, **Close button** * **Monthly interval label** / **Yearly interval label**: `month` / `year` * **Manage membership modal**: **Title** (`Manage membership`) * **Update payment modal**: **Title**, **Description**, **Confirm button** (`Continue`), **Success text (no direct link)**, **Success text (direct link)** and **Open link button** * **Cancel membership confirmation**: **Title**, **Description**, **Membership subtitle**, **Dismiss button (keep membership)** (`Close`) and **Confirm button** (`Cancel membership`) * **Upgrade membership confirmation** and **Downgrade membership confirmation**: **Title** and **Description** * **Action in progress**: **In progress text** (`Your membership change is being processed. This may take a few moments.`) * **Activity log**: **View activity link text**, **Activity modal title** (`Membership Activity`) and **Empty state text** (`No membership activity found.`) ## How it works 1. A logged-in customer opens the loyalty page in their customer account. 2. The extension loads their balance, tier, rewards, ways to earn, referral link and membership from Yuko. 3. Sections render in the order you set. VIP Tiers, Referrals and Membership are skipped when those features aren't active. 4. Customers can redeem rewards, copy codes, set their birthday, get their referral link and manage their membership without leaving the page. ### Limitations * Works only with Shopify customer accounts. * The page's look follows Shopify's customer accounts styling; there's no custom CSS. * You can reorder sections but not hide individual ones; VIP Tiers, Referrals and Membership hide automatically when the feature isn't active. ## Best practices **Put what matters most first.** If your program is VIP-led, drag **VIP Tiers** above **Ways to Earn**. **Show boosters first** during promotions so time-limited campaigns get noticed. ## FAQs No. Use the [Rewards Landing Page](/onsite-widgets/rewards-landing-page) instead. The section is skipped when VIP tiers aren't active for your store. If they are, check the customer has been placed in a tier. [Order List: Point Balance](/onsite-widgets/order-list-balance) and [Customer Profile: Point Balance](/onsite-widgets/customer-profile-balance) are small blocks on existing account pages. This widget is a full page of its own. ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Customer Profile Balance Widget Source: https://docs.yuko.so/onsite-widgets/customer-profile-balance Show loyalty program information and the customer's points balance on the Profile page in Shopify customer accounts. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Customer Profile: Point Balance ## Introduction The **Customer Profile: Point Balance** widget shows a loyalty program card with the customer's points balance on the Profile page of their customer account. It's the **Yuko Profile loyalty program** customer account UI extension block, not a theme app block. ## What problem this solves The Profile page is where customers manage their details. A loyalty card there makes the program part of their account, not something they have to look for. ## Where it appears * The Profile page in Shopify customer accounts (`customer-account.profile.block.render`), at the top of the page by default. ## When to use * You use Shopify's customer accounts. * You want the balance visible on the Profile page. ## Overview * Two text fields: a title and a point title. * No Styles tab; the block uses Shopify customer accounts styling. * Shows only for customers with a points balance. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. Your store uses Shopify customer accounts (**Settings → Customer accounts**). ## Setup guide ### 1. Configure the widget in Yuko Go to **Loyalty → Widgets**, find **Customer Profile: Point Balance** under **Post-Purchase**, and click **Customize**. * **Title**: default `Loyalty program` * **Point title**: default `You have earned [point_balance] [points_label]` Click **Save**. Back on **Loyalty → Widgets**, switch the widget's toggle on. ### 2. Add the block in the customer accounts editor In your Shopify admin, go to **Settings → Customer accounts** and click **Customize**. Use the page selector at the top to open the page where the block should appear (Order status, Orders, or Profile). Click **Add app block** and choose the Yuko block for this widget (for example **Yuko Order status earned points**, **Yuko Order index points display** or **Yuko Profile loyalty program**). Position the block where customers will see it and click **Save**. Customer account blocks only work with Shopify's **new customer accounts**. Check that they're turned on in **Settings → Customer accounts**. On the **Profile** page, add the **Yuko Profile loyalty program** block. See [Customer Account Extension](/installation-and-setup/customer-account-extension) for more detail. ### 3. Verify Log in as a customer with points and open their Profile page. ## Available placeholders | Placeholder | Replaced with | | - | - | | `[point_balance]` | Customer's points balance. | | `[points_label]` | Your loyalty points label. | | `[points_cash_value]` | Cash value of the customer's points. | ## How it works 1. A logged-in customer opens their Profile page. 2. The block fetches their balance from Yuko. 3. If they have a balance, the block shows your title and point title. Customers with no points don't see it. ### Limitations * Works only with Shopify customer accounts; it isn't a theme block. * The block's look follows Shopify's customer accounts styling. ## FAQs The block is hidden when the customer's balance is zero. Also check that the widget toggle is on and the block is added to the **Profile** page. Use the [Loyalty Rewards: Customer Account Page](/onsite-widgets/customer-account-page) widget. ## Full placeholder reference Placeholders are written in square brackets, for example `[points_label]`. Each text field's help text in the widget editor lists the placeholders that field supports. **Available in every storefront widget text** | Placeholder | Replaced with | | - | - | | `[points_label]` | Your points label from **Loyalty → Settings** (singular or plural, e.g. *point* / *points*). | | `[point_balance]` | The customer's current points balance. | | `[points_cash_value]` | What the customer's balance is worth in your store currency, based on your points-to-cash conversion rate. | | `[store_name]` | Your store name. | **Widget-specific placeholders** | Placeholder | Replaced with | Used in | | - | - | - | | `[points_value]` | Points the customer can earn on this product, cart or order. | Product page, Cart earn, Checkout earn, Order status earn | | `[first_name]` | The customer's first name (logged-in customers only). | Cart redeem greeting, Loyalty Nudges | | `[customer_name]` | The customer's full name (logged-in customers only). | Loyalty Nudges | | `[points_needed]` | How many more points the customer needs for a reward. | Insufficient-points text (Cart redeem, Loyalty Nudges) | | `[expiration_date]` | The expiry date of an earned reward. Hidden automatically when the reward doesn't expire. `[discount_expiry_date]` works the same way. | Reward expiry text (Cart redeem, Loyalty Nudges, Floating Rewards) | | `[points_to_redeem]` | The number of points the customer chose to redeem. | Checkout redeem summary | | `[discount_value]` | The discount those points unlock. | Checkout redeem summary | | `[tier_name]` | A VIP tier name. | VIP tier text (Floating Rewards) | | `[next_tier]` | The name of the customer's next VIP tier. | VIP progress text | | `[tier_entry_amount]` | The threshold needed to enter a tier. | Cart redeem tier entry text | | `[tier_reach_level]` | The threshold needed to reach a tier. | Floating Rewards VIP text | | `[multiplier_value]` | The points multiplier for a VIP tier (e.g. *2*). Shown only when the multiplier is greater than 1. | Points multiplier benefit text | | `[renewal_date]` | The date a paid membership renews. | Floating Rewards membership text | ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Floating Rewards Source: https://docs.yuko.so/onsite-widgets/floating-launcher A floating rewards button on every storefront page that opens a loyalty panel with points, ways to earn and redeem, VIP tiers, rewards, referrals and membership. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Floating Rewards ## Introduction Floating Rewards is a button that floats in a bottom corner of every storefront page. Tapping it opens a loyalty panel where customers can see their balance, browse ways to earn and redeem, track VIP progress, apply rewards they've earned, share their referral link and manage a paid membership, without leaving the page they're on. It's marked **Recommended** on the Widgets list because it's the quickest way to make your program visible everywhere. ## What problem this solves Customers shouldn't have to hunt for a loyalty page to find out what they can earn or redeem. A floating button keeps the whole program one tap away on every page. ## Where it appears * Every storefront page, rendered through the **Yuko App** theme app embed. There's no block to place. * In the bottom-left or bottom-right corner, set separately for desktop and mobile. The default is **left**. * It doesn't appear in Shopify Checkout. Use [Checkout Earn](/onsite-widgets/checkout-earn) and [Checkout Redeem](/onsite-widgets/checkout-redeem) there. ## When to use * You want loyalty visible on every page with no theme editing. * You want one panel that covers points, VIP, rewards, referrals and membership. * You want to link to a specific part of the panel from your menu, emails or ads. ## Overview * Ten editor tabs: **Customization**, **Home page**, **Floating Rewards button**, **Birthday**, **VIP**, **Your Rewards**, **Activity log**, **Ways to earn**, **Ways to redeem** and **Membership Detail**. * Most text tabs have two audiences: **Anonymous** (visitors without an account) and **With account** (logged-in members). * Home page sections can be dragged into a new order. * A **Deep link** opens the panel straight to a chosen section. * Each language has its own copy of the text. Use the **Editing language** picker at the top of the editor. * The widget renders inside a shadow DOM, so your theme's CSS doesn't leak into the panel and the panel's CSS doesn't leak into your theme. Use the **Custom CSS** section to style it. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. The **Yuko App** embed is turned on in your published theme. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## Setup guide Go to **Apps → Yuko Loyalty → Loyalty → Widgets** and click **Customize** on **Floating Rewards**. The editor opens on the **Home page** tab, with a live preview you can switch between mobile and desktop. Work through the **Customization** accordions: Colors, Shapes, Placement, Visibility, Banner images, Custom CSS and Deep link. See [Customization](#customization) below. On the **Floating Rewards button** tab, pick a mode, text and icon for desktop and for mobile. On the **Home page** tab, edit each section for **Anonymous** and **With account** visitors, and drag sections into the order you want. Update the text on the Birthday, VIP, Your Rewards, Activity log, Ways to earn, Ways to redeem and Membership Detail tabs. Click **Save**, then switch the widget on with the toggle. The button appears on your storefront through the Yuko App embed. ## Customization ### Colors | Setting | What it controls | | - | - | | **Primary color** | Button backgrounds, headers, icons and borders. | | **Secondary color** | Card and surface backgrounds across the widget. | | **Body text color** | General text for labels, descriptions and content. | | **Body description color** | Default text colour for elements without their own colour. | To set these colours across every widget at once, use [Branding & Locale](/onsite-widgets/branding-and-locale). ### Shapes Each element can be **Square**, **Shaved**, **Rounded** or **Circular**: * **Panel:** Container, Cards, Buttons and Inputs. Each defaults to **Rounded**. * **Floating Rewards:** Container, which is the button itself. It defaults to **Circular**. ### Placement Set on separate **Desktop** and **Mobile** tabs: * **Placement:** **Left** (default) or **Right**. * **Side spacing:** 0–100 px. The default is 20 px on desktop and 16 px on mobile. * **Bottom spacing:** 0–100 px. The default is 20 px on desktop and 16 px on mobile. Placement moves both the button and the panel. ### Visibility * **Where to display the Floating Rewards:** **Desktop and mobile** (default), **Desktop**, **Mobile** or **None**. * **Hide on homepage:** hides the button on your home page. * **Hide Floating Rewards in URLs that contain:** click **Add new condition**, enter text such as `/blog` and click **Add**. The button is hidden on any URL that contains that text. Add as many conditions as you need. ### Banner images * **Banner image:** optional. It appears in the panel header. * **Brand icon:** optional. A small icon shown near the banner area. Images must be JPG, PNG, GIF or WEBP and smaller than 1 MB. ### Custom CSS Add CSS to fine-tune the panel and button. Because the widget renders in a shadow DOM, write your CSS here rather than in your theme stylesheet. ### Deep link Open the panel directly on one section from a menu link, button, email or ad: 1. Under **Choose which part of the panel you want to open**, pick **Ways to earn** (default), **Ways to redeem**, **Points**, **VIP**, **Your rewards** or **Activity**. 2. Copy the link from **Your link**. It looks like `#yuko-ways-to-earn`. 3. Paste it into your navigation as a menu item link. To link from an email or another website, add it to the end of your store URL, for example `https://yourstore.com/#yuko-ways-to-redeem`. | Section | Link | | - | - | | Ways to earn | `#yuko-ways-to-earn` | | Ways to redeem | `#yuko-ways-to-redeem` | | Points | `#yuko-points` | | VIP | `#yuko-vip` | | Your rewards | `#yuko-your-rewards` | | Activity | `#yuko-activity` | ## Floating Rewards button Set on separate **Desktop** and **Mobile** tabs: * **Mode:** **Icon with text**, **Text only** or **Icon only**. * **Text:** the button label, shown in the two modes that include text. The default is *Rewards*. * **Icon:** **Default** or **Upload your own icon**. ## Home page The home page is what customers see when they open the panel. Switch between **Anonymous** and **With account** to edit each version. **Header** (and **Account creation** for visitors) stays at the top. Drag the other sections to reorder them. | Section | Audience | Settings | | - | - | - | | **Header** | Both | **Caption** and **Title**. Visitor defaults: *Welcome to* / `[store_name]`. Member defaults: *Welcome back!* / *You have `[point_balance]` `[points_label]`*. | | **Account creation** | Anonymous | **Title**, **Description**, **Join now button (Lists)**, **Create account** and **Sign in**. In **Sign in**, `[signin:Sign in]` becomes a sign-in link, and the text after the colon is the link text. | | **Featured booster** | Both | **Show a featured booster card on the home page**, **Booster campaign to feature** and **Booster text**. The reward summary comes from the selected [booster campaign](/loyalty/booster-campaigns/overview). Off by default. | | **Your rewards** | With account | **Your rewards** and **Your rewards description**. | | **Points** | Both | **Title**, **Description**, **Ways to earn label** and **Ways to redeem label**, each with an icon (**Default** or **Upload your own icon**). | | **VIP** | Both | **Title**, **Description**, **Starting tier label** (default *Free Entry*), **Tier reach text**, **Next tier text**, **Earn points to reach text** and **Maximum tier reached text**. | | **Membership** | Both | **Title**, **Description**, **Monthly label**, **Yearly label**, **Button text** and **Renewal label** (`[renewal_date]`). | | **Referral** | Both | **Title**, **Description**, **Referrer reward label**, **Friend reward label**, **Get referral link button text**, **Enable social share icons** and **Social share label**. Visitors see **Visitor button text** in place of the referral tools, which prompts them to sign in or create an account. | | **Activity** | With account | **Your activity title**. | ## Inner page tabs | Tab | Settings | | - | - | | **Birthday** | **Title**, **Description**, **Day label**, **Month label**, **Year label** and **Save date button**. | | **VIP** | **VIP tiers header**, **Starting tier label**, **Tier reach text**, **Next tier text**, **Earn points to reach text**, **Maximum tier reached text**, **Benefits title** and **Points multiplier benefit text**. | | **Your Rewards** | **Page title**, **Apply discount button text**, **Expiration date text** and **No rewards available text**. | | **Activity log** | **Page title**, **Balance notice text**, **No activity found text**, **Page info text**, **Previous button text** and **Next button text**. | | **Ways to earn** | **Page title**, **Ways to earn — order** (**Booster campaigns first** or **Standard campaigns first**), **No campaigns available text**, and the **Like**, **Follow**, **Share** and **Edit date** button text. | | **Ways to redeem** | **Page title**, **Redeem button text** and **No rewards available text**. | | **Membership Detail** | **Page title**, **Plans section label**, **Benefits label**, **Monthly label**, **Yearly label**, **Renewal label**, **Become a member button text**, **Upgrade button text**, **Downgrade button text**, **Cancel membership button text** and **Action in progress text**. | Text fields accept placeholders: Placeholders are written in square brackets, for example `[points_label]`. Each text field's help text in the widget editor lists the placeholders that field supports. **Available in every storefront widget text** | Placeholder | Replaced with | | - | - | | `[points_label]` | Your points label from **Loyalty → Settings** (singular or plural, e.g. *point* / *points*). | | `[point_balance]` | The customer's current points balance. | | `[points_cash_value]` | What the customer's balance is worth in your store currency, based on your points-to-cash conversion rate. | | `[store_name]` | Your store name. | **Widget-specific placeholders** | Placeholder | Replaced with | Used in | | - | - | - | | `[points_value]` | Points the customer can earn on this product, cart or order. | Product page, Cart earn, Checkout earn, Order status earn | | `[first_name]` | The customer's first name (logged-in customers only). | Cart redeem greeting, Loyalty Nudges | | `[customer_name]` | The customer's full name (logged-in customers only). | Loyalty Nudges | | `[points_needed]` | How many more points the customer needs for a reward. | Insufficient-points text (Cart redeem, Loyalty Nudges) | | `[expiration_date]` | The expiry date of an earned reward. Hidden automatically when the reward doesn't expire. `[discount_expiry_date]` works the same way. | Reward expiry text (Cart redeem, Loyalty Nudges, Floating Rewards) | | `[points_to_redeem]` | The number of points the customer chose to redeem. | Checkout redeem summary | | `[discount_value]` | The discount those points unlock. | Checkout redeem summary | | `[tier_name]` | A VIP tier name. | VIP tier text (Floating Rewards) | | `[next_tier]` | The name of the customer's next VIP tier. | VIP progress text | | `[tier_entry_amount]` | The threshold needed to enter a tier. | Cart redeem tier entry text | | `[tier_reach_level]` | The threshold needed to reach a tier. | Floating Rewards VIP text | | `[multiplier_value]` | The points multiplier for a VIP tier (e.g. *2*). Shown only when the multiplier is greater than 1. | Points multiplier benefit text | | `[renewal_date]` | The date a paid membership renews. | Floating Rewards membership text | ## How it works 1. The **Yuko App** embed loads the Floating Rewards script on every storefront page. 2. The button mounts in the corner and at the spacing you set, unless a Visibility rule hides it on that device or URL. 3. Visitors see the **Anonymous** home page, with prompts to create an account or sign in. Logged-in customers see the **With account** version, with their balance, rewards and activity. 4. A URL ending in a `#yuko-
` deep link opens the panel straight to that section. 5. Customers can apply earned rewards, redeem points, set their birthday and share their referral link from inside the panel. ### Custom login trigger By default, a logged-out customer who taps a sign-in link in the panel goes to the Shopify account login page. If your store uses its own login (a popup or a third-party login app), set a **Custom login trigger** in [Loyalty → Settings](/loyalty/program-settings): * **Use a CSS element:** Yuko clicks an existing element on the page, such as your theme's login button. Enter its **Login element selector**, for example `#login-button` or `a[href='/account']`. * **Use a link:** Yuko sends the customer to the **Login link** you enter. The same setting applies to Loyalty Nudges and the Cart redeem widget. ### Limitations * The button sits in a bottom corner. Mid-page positions aren't supported. * It doesn't render in Shopify Checkout. * The **Yuko App** embed must be on. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## Examples * **Menu link to rewards:** add a "Rewards" item to your main menu that links to `#yuko-ways-to-redeem`, so the panel opens on what customers can spend their points on. * **Booster spotlight:** turn on **Featured booster** during a double-points weekend so every panel opens with that offer at the top of the home page. * **Clear of your chat app:** place Floating Rewards on the left and keep your support chat on the right, or raise **Bottom spacing** so the two don't overlap. ## Best practices **Stay clear of chat widgets.** Use the opposite corner, or raise **Bottom spacing**, so Floating Rewards doesn't sit on top of your support chat. **Add a deep link to your navigation.** A menu item that opens the panel is easier to find than the floating button alone. **Use Icon only on mobile.** On small screens a compact button covers less of your product content. **Write both audiences.** Visitors and members see different home pages, so check both in the preview. ## FAQs Yes. In **Customization → Visibility**, tick **Hide on homepage** or add URL conditions under **Hide Floating Rewards in URLs that contain**. To hide it on one device type, set **Where to display the Floating Rewards** to **Desktop** or **Mobile**. Yes. Copy the link from **Customization → Deep link** (for example `#yuko-vip`) and use it as the link on any menu item or button. Floating Rewards renders inside a shadow DOM to keep its styles separate from your theme. Add styling in **Customization → Custom CSS** instead. Set a **Custom login trigger** in [Loyalty → Settings](/loyalty/program-settings) so Yuko starts your store's own login flow. Use the **Editing language** picker at the top of the editor. Each of your store's published languages keeps its own copy of the text. Campaign and reward names are translated in [Translations](/account/translations). No. Use [Checkout Earn](/onsite-widgets/checkout-earn) and [Checkout Redeem](/onsite-widgets/checkout-redeem) in Shopify Checkout. ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Loyalty Nudges Source: https://docs.yuko.so/onsite-widgets/loyalty-nudges A strip pinned to the top or bottom of every storefront page that opens a loyalty drawer with the customer's points, VIP tier, rewards, ways to earn (including booster campaigns) and ways to redeem. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Loyalty Nudges ## Introduction Loyalty Nudges is a slim strip pinned to the top or bottom of every storefront page. When a customer taps it, a drawer slides open with their points balance, VIP tier, earned rewards, ways to earn (including active **booster campaigns**) and ways to redeem, without leaving the page. It's a natural home for [Booster Campaigns](/loyalty/booster-campaigns/overview): once a booster is live, shoppers see it on every page without you sending an email. ## What problem this solves A loyalty program that only lives in the customer account is invisible to someone browsing products. Loyalty Nudges keeps the program in view on every page with one short line of text, and opens the full detail only when the customer asks for it. ## Where it appears * A **strip** pinned to the **Bottom of page** (default) or **Top of page**. * A **drawer** that opens when the customer taps the strip. * Every storefront page, rendered through the **Yuko App** theme app embed. There's no block to place. ## When to use * You run booster campaigns and want them visible on every page. * You want a persistent loyalty surface that carries a short personalised message. * You want points, rewards, VIP and boosters together in one place on the storefront. ## Overview * A strip with separate **Logged-out text** and **Logged-in text**. * A drawer with four sections (**Header banner**, **Your rewards**, **Ways to earn** and **Ways to redeem**) that you can reorder by dragging and switch on or off. * The header banner has a **Member** version (points and tier) and a **Visitor** version (a "join our loyalty program" card). The rest of the drawer is the same for both, but visitors don't get action buttons until they join. * Booster campaigns can show all active boosters or a hand-picked list. * **Visibility** controls for top or bottom placement, device and URL exclusions. * Colours, **Drawer Height** and **Custom CSS** on the **Styles** tab. * Each language has its own copy of the text. Use the **Editing language** picker. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. The **Yuko App** embed is turned on in your published theme. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## Setup guide ### 1. Configure in Yuko All content settings are on the **Configuration** tab. Go to **Apps → Yuko Loyalty → Loyalty → Widgets** and click **Customize** on **Loyalty Nudges**. In **Widget content → Trigger Strip**: * **Logged-out text**, shown to visitors. Default: *Earn `[points_label]` & rewards every time you shop*. Keep it inviting: visitors can still open the drawer and browse. * **Logged-in text**, shown to members. Supports `[first_name]`, `[customer_name]`, `[point_balance]` and `[points_label]`, for example *Hey `[first_name]`, you have `[point_balance]` `[points_label]`!* In **Widget content → Drawer Content**: * **Drawer title**, shown in the drawer's header bar. Default: *MY LOYALTY PROGRAM*. * **Greeting**, shown at the top of the drawer. Supports `[first_name]` and `[customer_name]`. In **Drawer sections**, drag **Header banner**, **Your rewards**, **Ways to earn** and **Ways to redeem** into order, tick the ones to show, and expand each one to edit its text (see the table below). In **Booster campaigns**, keep **Show booster campaigns** on to show boosters inside Ways to earn. Under **Campaigns to show**, leave everything unselected to show every active booster, or select specific campaigns. The **Ways to earn** section must be on for boosters to appear. In **Visibility**: * **Placement:** **Bottom of page** (default) or **Top of page**. * **Where to display the loyalty strip:** **Desktop and mobile** (default), **Desktop** or **Mobile**. * **Hide loyalty strip in URLs that contain:** click **Add new condition** and enter text such as `/blog`. The strip is hidden on every URL that contains it. On the **Styles** tab, set **Primary color**, **Secondary color**, **Text color** and **Body description color**, the **Drawer Height** (30–100 vh; leave empty for the default) and any **Custom CSS**. Click **Save** and switch the widget on. #### Drawer section settings | Section | Settings | | - | - | | **Header banner** (Member) | **Points section heading** (default *Your Balance*), **Points balance text** (`[point_balance] [points_label]`), **Points worth text** (*Worth `[points_cash_value]`*), **Points multiplier benefit text** (`[multiplier_value]x multiplier`, shown only when the multiplier is greater than 1), and the **Points balance**, **Points worth value** and **VIP tier** toggles. | | **Header banner** (Visitor) | **Title** (default *Join Our Loyalty Program*), **Description**, **Create account button** (default *Join Now*) and **Sign in**. In **Sign in**, `[signin:Sign in]` becomes a sign-in link and the text inside becomes the link text. | | **Your rewards** | **Your Rewards heading**, **Apply button text (Your Rewards)** and **Expiration label (Your Rewards)** (*Expires on `[expiration_date]`*, hidden automatically when a reward doesn't expire). | | **Ways to earn** | **Ways to earn heading**, **Ways to earn — order** (**Booster campaigns first**, the default, or **Standard campaigns first**), **Edit date button text**, **Save date button text** and **Cancel button text** for birthday campaigns, and **Like**, **Follow**, **Share** and **Visit** button text for social and visit campaigns. | | **Ways to redeem** | **Ways to redeem heading**, **Redeem button text (Ways to Redeem)**, **Insufficient points text** (*Needs `[points_needed]` more `[points_label]`*) and **Load more button**. | At least one of **Points balance**, **VIP tier** or **Your rewards** must stay on. ### 2. Add to your storefront Loyalty Nudges renders on every page through the **Yuko App** embed, so there's no block to add. If the embed is on and the widget is active, the strip appears on your storefront. ### 3. Verify Open your store in a private window. The strip shows your logged-out text, and the drawer opens with the visitor header card. Log in as a customer. The strip switches to your logged-in text, and the drawer shows their balance, tier and rewards. With at least one active booster campaign, open the drawer and check that it appears under Ways to earn. Open a URL that matches one of your conditions and confirm the strip is hidden. ## Available placeholders | Placeholder | Replaced with | | - | - | | `[first_name]` | The customer's first name (logged-in only). | | `[customer_name]` | The customer's full name (logged-in only). | | `[point_balance]` | The customer's current points balance. | | `[points_label]` | Your points label from Loyalty → Settings. | | `[points_cash_value]` | What the balance is worth in your store currency. | | `[multiplier_value]` | The customer's VIP tier multiplier. | | `[expiration_date]` | A reward's expiry date. | | `[points_needed]` | How many more points a reward needs. | See [all widget placeholders](/onsite-widgets/overview#placeholders). ## How it works 1. The **Yuko App** embed loads Loyalty Nudges on every page, unless the device or URL is excluded. 2. Visitors see the logged-out strip. Members see the logged-in strip, personalised with their name and balance. 3. Tapping the strip opens the drawer with the sections you enabled, in your order. 4. Booster campaigns load live, filtered by your **Campaigns to show** selection, and show progress where the campaign type supports it. 5. Members can apply rewards and redeem points straight from the drawer. Visitors can browse, then create an account or sign in. ### Custom login trigger By default, the visitor **Create account button** and sign-in link go to the Shopify account login page. If your store uses its own login (a popup or a third-party login app), set a **Custom login trigger** in [Loyalty → Settings](/loyalty/program-settings). Choose **Use a CSS element** and enter a **Login element selector** (such as your theme's login button), or **Use a link** and enter a **Login link**. The same setting applies to Floating Rewards and Cart redeem. ### Decision guidance * **Top or bottom:** bottom is easier to reach on mobile and stays out of the way of sticky headers. Top is more prominent. * **All boosters or a hand-picked list:** start with all. Narrow the list if you run many campaigns at once. * **Boosters first or standard campaigns first:** boosters first puts time-limited offers at the top. ### Limitations * Loyalty Nudges doesn't render in Shopify Checkout. Use [Checkout Earn](/onsite-widgets/checkout-earn) and [Checkout Redeem](/onsite-widgets/checkout-redeem) there. * It reaches only customers who are on your store. Use [emails](/emails/overview) for everyone else. ## Examples * **Double-points weekend:** the drawer opens with your Multiplier booster at the top of Ways to earn on every page. * **Spending-goal progress:** a Spending Goal booster shows each member how close they are to the bonus. * **Personal strip:** *Hey Sarah, you have 240 points!* on every page reminds members of their balance. ## Best practices **Turn on Loyalty Nudges before you launch a booster.** It's the simplest way to show the campaign on every page. **Personalise the logged-in text.** Use `[first_name]` and `[point_balance]` so the strip reads as personal. **Exclude pages where the strip competes.** Blog posts and dedicated landing pages are common choices. **Test on mobile first.** Most shoppers will open the drawer on a phone, so check the **Drawer Height** there. ## FAQs [Floating Rewards](/onsite-widgets/floating-launcher) is a corner button that opens a full panel with VIP, referrals, membership and activity. Loyalty Nudges is a full-width strip with a message, which opens a drawer focused on points, rewards, earning and redeeming. You can use either or both. Check that the booster is active, **Show booster campaigns** is on, the **Ways to earn** section is on, and the booster is selected under **Campaigns to show** (or nothing is selected, so all show). The customer must also match the campaign's targeting. Yes. Use the **Editing language** picker at the top of the editor. Each of your store's published languages keeps its own copy of the text. Yes. Add URL conditions under **Visibility → Hide loyalty strip in URLs that contain**. To show it on only one device type, choose **Desktop** or **Mobile**. Set **Drawer Height** on the **Styles** tab, between 30 and 100 (percent of the screen height). Leave it empty to use the default. ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Order List Balance Widget Source: https://docs.yuko.so/onsite-widgets/order-list-balance Show the customer's points balance on the Orders page in Shopify customer accounts. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Order List: Point Balance ## Introduction The **Order List: Point Balance** widget shows the customer's points balance at the top of the Orders page in their customer account. It's the **Yuko Order index points display** customer account UI extension block, not a theme app block. ## What problem this solves Customers check their orders often. Showing their balance there reminds them they have points to spend on the next order. ## Where it appears * The Orders page in Shopify customer accounts (`customer-account.order-index.block.render`), at the top of the page by default. ## When to use * You use Shopify's customer accounts. * You want a lightweight balance reminder without a full loyalty page. ## Overview * Two text fields: a title and a description. * No Styles tab; the block uses Shopify customer accounts styling. * Shows only for customers with a points balance. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. Your store uses Shopify customer accounts (**Settings → Customer accounts**). ## Setup guide ### 1. Configure the widget in Yuko Go to **Loyalty → Widgets**, find **Order List: Point Balance** under **Post-Purchase**, and click **Customize**. * **Title**: default `You have [point_balance] [points_label]` * **Description**: default `Redeem your [points_label] for rewards & discounts on your next order` Click **Save**. Back on **Loyalty → Widgets**, switch the widget's toggle on. ### 2. Add the block in the customer accounts editor In your Shopify admin, go to **Settings → Customer accounts** and click **Customize**. Use the page selector at the top to open the page where the block should appear (Order status, Orders, or Profile). Click **Add app block** and choose the Yuko block for this widget (for example **Yuko Order status earned points**, **Yuko Order index points display** or **Yuko Profile loyalty program**). Position the block where customers will see it and click **Save**. Customer account blocks only work with Shopify's **new customer accounts**. Check that they're turned on in **Settings → Customer accounts**. On the **Orders** page, add the **Yuko Order index points display** block. See [Customer Account Extension](/installation-and-setup/customer-account-extension) for more detail. ### 3. Verify Log in as a customer with points and open the Orders page in their account. ## Available placeholders | Placeholder | Replaced with | | - | - | | `[point_balance]` | Customer's points balance. | | `[points_label]` | Your loyalty points label. | | `[points_cash_value]` | Cash value of the customer's points. | ## How it works 1. A logged-in customer opens the Orders page. 2. The block fetches their balance from Yuko. 3. If they have a balance, the block shows your title and description. Customers with no points don't see it. ### Limitations * Works only with Shopify customer accounts; it isn't a theme block. * The block's look follows Shopify's customer accounts styling. ## FAQs The block is hidden when the customer's balance is zero. Also check that the widget toggle is on and the block is added to the **Orders** page. Use the [Loyalty Rewards: Customer Account Page](/onsite-widgets/customer-account-page) widget. ## Full placeholder reference Placeholders are written in square brackets, for example `[points_label]`. Each text field's help text in the widget editor lists the placeholders that field supports. **Available in every storefront widget text** | Placeholder | Replaced with | | - | - | | `[points_label]` | Your points label from **Loyalty → Settings** (singular or plural, e.g. *point* / *points*). | | `[point_balance]` | The customer's current points balance. | | `[points_cash_value]` | What the customer's balance is worth in your store currency, based on your points-to-cash conversion rate. | | `[store_name]` | Your store name. | **Widget-specific placeholders** | Placeholder | Replaced with | Used in | | - | - | - | | `[points_value]` | Points the customer can earn on this product, cart or order. | Product page, Cart earn, Checkout earn, Order status earn | | `[first_name]` | The customer's first name (logged-in customers only). | Cart redeem greeting, Loyalty Nudges | | `[customer_name]` | The customer's full name (logged-in customers only). | Loyalty Nudges | | `[points_needed]` | How many more points the customer needs for a reward. | Insufficient-points text (Cart redeem, Loyalty Nudges) | | `[expiration_date]` | The expiry date of an earned reward. Hidden automatically when the reward doesn't expire. `[discount_expiry_date]` works the same way. | Reward expiry text (Cart redeem, Loyalty Nudges, Floating Rewards) | | `[points_to_redeem]` | The number of points the customer chose to redeem. | Checkout redeem summary | | `[discount_value]` | The discount those points unlock. | Checkout redeem summary | | `[tier_name]` | A VIP tier name. | VIP tier text (Floating Rewards) | | `[next_tier]` | The name of the customer's next VIP tier. | VIP progress text | | `[tier_entry_amount]` | The threshold needed to enter a tier. | Cart redeem tier entry text | | `[tier_reach_level]` | The threshold needed to reach a tier. | Floating Rewards VIP text | | `[multiplier_value]` | The points multiplier for a VIP tier (e.g. *2*). Shown only when the multiplier is greater than 1. | Points multiplier benefit text | | `[renewal_date]` | The date a paid membership renews. | Floating Rewards membership text | ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Order Status Earn Widget Source: https://docs.yuko.so/onsite-widgets/order-status-earn Confirm the points a customer earned for an order on the order status page in Shopify customer accounts. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Order Status: Earn Points Message ## Introduction The **Order Status: Earn Points Message** widget tells customers how many points an order earned them, on that order's status page. It's the **Yuko Order status earned points** customer account UI extension block, not a theme app block. ## What problem this solves Right after buying, customers are most engaged. Confirming the points they earned shows the program is working and plants the idea of the next purchase. ## Where it appears * The order status page in Shopify customer accounts (`customer-account.order-status.block.render`). By default it sits in the order summary; you can move it in the customer accounts editor. ## When to use * You use Shopify's customer accounts. * You want a simple confirmation of earned points after every order. ## Overview * Two text fields: a title and a message. * No Styles tab; the block uses Shopify customer accounts styling. * Shows only for orders that earned points. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. Your store uses Shopify customer accounts (**Settings → Customer accounts**). ## Setup guide ### 1. Configure the widget in Yuko Go to **Loyalty → Widgets**, find **Order Status: Earn Points Message** under **Post-Purchase**, and click **Customize**. * **Order status earn title**: default `You have earned` * **Order status earn message**: default `[points_value] [points_label] for this order.` Click **Save**. Back on **Loyalty → Widgets**, switch the widget's toggle on. ### 2. Add the block in the customer accounts editor In your Shopify admin, go to **Settings → Customer accounts** and click **Customize**. Use the page selector at the top to open the page where the block should appear (Order status, Orders, or Profile). Click **Add app block** and choose the Yuko block for this widget (for example **Yuko Order status earned points**, **Yuko Order index points display** or **Yuko Profile loyalty program**). Position the block where customers will see it and click **Save**. Customer account blocks only work with Shopify's **new customer accounts**. Check that they're turned on in **Settings → Customer accounts**. On the **Order status** page, add the **Yuko Order status earned points** block. See [Customer Account Extension](/installation-and-setup/customer-account-extension) for more detail. ### 3. Verify Place a test order as a logged-in customer, then open that order in the customer account. Check that the block shows the points earned. ## Available placeholders | Placeholder | Replaced with | | - | - | | `[points_value]` | The points earned on this order. | | `[points_label]` | Your loyalty points label. | | `[points_cash_value]` | Cash value of the points earned. | ## How it works 1. A customer opens an order in their customer account. 2. The block reads the points recorded for that order. 3. If the order earned points, the block shows your title and message. Otherwise it stays hidden. ### Limitations * Works only with Shopify customer accounts; it isn't a theme block. * The block's look follows Shopify's customer accounts styling. ## FAQs The block is hidden when the order didn't earn points, for example if no earn rule applied or the customer is excluded from the program. Also check that the widget toggle is on and the block is added to the **Order status** page. No. [Checkout: Earn points](/onsite-widgets/checkout-earn) shows the points a customer *will* earn during checkout. This widget confirms the points recorded for a placed order. ## Full placeholder reference Placeholders are written in square brackets, for example `[points_label]`. Each text field's help text in the widget editor lists the placeholders that field supports. **Available in every storefront widget text** | Placeholder | Replaced with | | - | - | | `[points_label]` | Your points label from **Loyalty → Settings** (singular or plural, e.g. *point* / *points*). | | `[point_balance]` | The customer's current points balance. | | `[points_cash_value]` | What the customer's balance is worth in your store currency, based on your points-to-cash conversion rate. | | `[store_name]` | Your store name. | **Widget-specific placeholders** | Placeholder | Replaced with | Used in | | - | - | - | | `[points_value]` | Points the customer can earn on this product, cart or order. | Product page, Cart earn, Checkout earn, Order status earn | | `[first_name]` | The customer's first name (logged-in customers only). | Cart redeem greeting, Loyalty Nudges | | `[customer_name]` | The customer's full name (logged-in customers only). | Loyalty Nudges | | `[points_needed]` | How many more points the customer needs for a reward. | Insufficient-points text (Cart redeem, Loyalty Nudges) | | `[expiration_date]` | The expiry date of an earned reward. Hidden automatically when the reward doesn't expire. `[discount_expiry_date]` works the same way. | Reward expiry text (Cart redeem, Loyalty Nudges, Floating Rewards) | | `[points_to_redeem]` | The number of points the customer chose to redeem. | Checkout redeem summary | | `[discount_value]` | The discount those points unlock. | Checkout redeem summary | | `[tier_name]` | A VIP tier name. | VIP tier text (Floating Rewards) | | `[next_tier]` | The name of the customer's next VIP tier. | VIP progress text | | `[tier_entry_amount]` | The threshold needed to enter a tier. | Cart redeem tier entry text | | `[tier_reach_level]` | The threshold needed to reach a tier. | Floating Rewards VIP text | | `[multiplier_value]` | The points multiplier for a VIP tier (e.g. *2*). Shown only when the multiplier is greater than 1. | Points multiplier benefit text | | `[renewal_date]` | The date a paid membership renews. | Floating Rewards membership text | ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Onsite Widgets Source: https://docs.yuko.so/onsite-widgets/overview Show points, rewards and VIP status across your storefront, cart, checkout and customer accounts, plus a floating rewards panel and a dedicated loyalty page. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets ## What are onsite widgets Onsite widgets are the customer-facing parts of your loyalty program. They show points balances, what customers can earn, rewards to redeem and VIP status at each step of the shopping journey, with no theme code to write. Each widget has a toggle to switch it on and a **Customize** button to edit its text, colours and settings. **Customize Branding** at the top of the page sets colours for all widgets at once. See [Branding & Locale](/onsite-widgets/branding-and-locale). Widgets render through three kinds of Shopify extension: * **Theme app extension**: the **Yuko App** app embed (Floating Rewards, Loyalty Nudges and automatic cart placement) and the Yuko theme blocks you add in the theme editor (product, cart and landing page blocks). * **Checkout UI extension**: blocks inside Shopify Checkout. * **Customer account UI extension**: blocks on the Order status, Orders and Profile pages, plus a full loyalty page, in Shopify's new customer accounts. ## The Widgets list Widgets are grouped as they appear in the admin. ### Landing & Promotional | Widget | Where it appears | How it renders | | - | - | - | | [Floating Rewards](/onsite-widgets/floating-launcher) (Recommended) | A floating button and panel on every page | Yuko App embed | | [Rewards Landing Page](/onsite-widgets/rewards-landing-page) (Recommended) | A loyalty page at `/pages/loyalty-info-page` | Seven Yuko theme blocks | | [Loyalty Nudges](/onsite-widgets/loyalty-nudges) | A strip pinned to the top or bottom of every page | Yuko App embed | ### Shopping Cart | Widget | Where it appears | How it renders | | - | - | - | | [Product page](/onsite-widgets/product-page-earn) | Product detail page | Theme block **Yuko:Product Earn Message** | | [Cart earn message](/onsite-widgets/cart-earn) | Cart page or drawer | Automatic placement through the Yuko App embed, or theme block **Yuko: Cart Earn Message** | | [Cart redeem message](/onsite-widgets/cart-redeem) | Cart page or drawer | Automatic placement through the Yuko App embed, or theme block **Yuko: Cart Redeem Message** | ### Checkout Process | Widget | Where it appears | How it renders | | - | - | - | | [Checkout: Earn points](/onsite-widgets/checkout-earn) | Shopify Checkout | Checkout UI extension block **Yuko Potential points earn** | | [Checkout: Redeem points](/onsite-widgets/checkout-redeem) | Shopify Checkout | Checkout UI extension block **Yuko Redeem rewards** | Checkout widgets are **available only on the Shopify Plus plan**, because Shopify allows checkout UI extension blocks only on Plus stores. They're also available on select Yuko plans. ### Post-Purchase | Widget | Where it appears | How it renders | | - | - | - | | [Order Status: Earn Points Message](/onsite-widgets/order-status-earn) | Order status page in customer accounts | Customer account UI extension block **Yuko Order status earned points** | | [Order List: Point Balance](/onsite-widgets/order-list-balance) | Orders page in customer accounts | Customer account UI extension block **Yuko Order index points display** | | [Customer Profile: Point Balance](/onsite-widgets/customer-profile-balance) | Profile page in customer accounts | Customer account UI extension block **Yuko Profile loyalty program** | | [Loyalty Rewards: Customer Account Page](/onsite-widgets/customer-account-page) | A full loyalty page in customer accounts | Customer account UI extension page **Yuko Loyalty account page** (available on select plans) | ## All widgets Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. ## Placeholders Most widget text fields accept placeholders that Yuko replaces with live values: Placeholders are written in square brackets, for example `[points_label]`. Each text field's help text in the widget editor lists the placeholders that field supports. **Available in every storefront widget text** | Placeholder | Replaced with | | - | - | | `[points_label]` | Your points label from **Loyalty → Settings** (singular or plural, e.g. *point* / *points*). | | `[point_balance]` | The customer's current points balance. | | `[points_cash_value]` | What the customer's balance is worth in your store currency, based on your points-to-cash conversion rate. | | `[store_name]` | Your store name. | **Widget-specific placeholders** | Placeholder | Replaced with | Used in | | - | - | - | | `[points_value]` | Points the customer can earn on this product, cart or order. | Product page, Cart earn, Checkout earn, Order status earn | | `[first_name]` | The customer's first name (logged-in customers only). | Cart redeem greeting, Loyalty Nudges | | `[customer_name]` | The customer's full name (logged-in customers only). | Loyalty Nudges | | `[points_needed]` | How many more points the customer needs for a reward. | Insufficient-points text (Cart redeem, Loyalty Nudges) | | `[expiration_date]` | The expiry date of an earned reward. Hidden automatically when the reward doesn't expire. `[discount_expiry_date]` works the same way. | Reward expiry text (Cart redeem, Loyalty Nudges, Floating Rewards) | | `[points_to_redeem]` | The number of points the customer chose to redeem. | Checkout redeem summary | | `[discount_value]` | The discount those points unlock. | Checkout redeem summary | | `[tier_name]` | A VIP tier name. | VIP tier text (Floating Rewards) | | `[next_tier]` | The name of the customer's next VIP tier. | VIP progress text | | `[tier_entry_amount]` | The threshold needed to enter a tier. | Cart redeem tier entry text | | `[tier_reach_level]` | The threshold needed to reach a tier. | Floating Rewards VIP text | | `[multiplier_value]` | The points multiplier for a VIP tier (e.g. *2*). Shown only when the multiplier is greater than 1. | Points multiplier benefit text | | `[renewal_date]` | The date a paid membership renews. | Floating Rewards membership text | ## Languages and logged-out customers * **Languages:** every widget editor has an **Editing language** picker when your store publishes more than one language. Each language keeps its own copy of the widget text. See [Branding & Locale](/onsite-widgets/branding-and-locale). * **Custom login trigger:** when a logged-out customer signs in from Floating Rewards, Loyalty Nudges or Cart redeem, Yuko sends them to the Shopify account login by default. If your store uses its own login, set a **Custom login trigger** (a CSS element to click, or a login link) in [Loyalty → Settings](/loyalty/program-settings). ## Decision guidance * **Start with the recommended pair:** Floating Rewards keeps the program one tap away on every page, and the Rewards Landing Page gives your emails, ads and footer a destination. * **Add cart widgets** so customers see what they'll earn and can redeem before checkout. * **Add checkout widgets** if you're on Shopify Plus. * **Add the customer account widgets** so balances and rewards show up where customers check their orders. * **Add Loyalty Nudges** when you run booster campaigns and want them visible on every page. ## Best practices **Less is more.** Pick the surfaces that matter for your store rather than switching everything on. **Keep widget copy short.** Link to the Rewards Landing Page for the full explanation. **Always test on mobile.** Most loyalty interactions happen on phones. ## Related The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Product Page Earn Widget Source: https://docs.yuko.so/onsite-widgets/product-page-earn Show customers how many points they will earn on a product, directly on the product detail page. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Product page ## Introduction The **Product page** widget shows the points a customer will earn by buying the product they're looking at, right on the product detail page. ## What problem this solves Customers who don't realise they're earning won't change their behaviour because of the program. Showing the earn value on the product page, while the customer is deciding, makes the program visible at the right moment. ## Where it appears * Product detail pages, wherever you place the **Yuko:Product Earn Message** theme app block. ## When to use * You want loyalty visible while customers consider a purchase. * Your order values are high enough that the per-product earn is meaningful. ## Overview * One message field with placeholders. * Default or custom icon. * Styles tab with colours, padding, width, height and **Custom CSS**. * Updates when the customer switches variants. * Edit the text per language with the **Editing language** picker. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. ## Setup guide ### 1. Configure the widget in Yuko Go to **Loyalty → Widgets**, find **Product page** under **Shopping Cart**, and click **Customize**. **Points earned on product page**. Default: `You'll earn [points_value] [points_label] on this purchase!` Under **Customize product message icon**, keep **Default** or choose **Custom** to upload your own icon (JPG, PNG, GIF or WEBP, under 1 MB). On the **Styles** tab, set: * **Color Configuration:** Border color, Background color, Text color and Button background color. * **Widget Style:** Padding (px, default 10), Width (%, default 100) and Height (px, leave empty for automatic). * **Custom CSS:** add your own CSS rules for this widget. Click **Save**. Back on **Loyalty → Widgets**, switch the widget's toggle on. ### 2. Add the block to your product template The widget editor shows an **Add Block** button that opens the theme editor on your product template with the block ready to add. You can also add it manually: Theme blocks get their content from Yuko's storefront script, which loads through the **Yuko App** app embed. If you haven't already, enable it in **Online Store → Themes → Customize → App embeds**. See [Theme App Embed](/installation-and-setup/theme-app-embed). In your Shopify admin, go to **Online Store → Themes**, find your active theme, and click **Customize**. Use the template selector at the top to open the page where this widget should appear (Product, Cart, a page template, and so on). Click **Add block** in the section where you want the widget. Under **Apps**, select the Yuko block named for this widget (block names start with **Yuko:**). Drag the block to your preferred position and click **Save**. Pick a **Product** template and add the **Yuko:Product Earn Message** block (no space after the colon). Place it near the price or the **Add to cart** button. The block has no theme editor settings; all text and styling come from Yuko. Once the block is added, the widget editor shows a banner confirming it. ### 3. Verify Open a product page on your live store and check that the message shows the calculated points. ## Available placeholders | Placeholder | Replaced with | | - | - | | `[points_value]` | Total points earned with the purchase. | | `[points_label]` | Your loyalty points label. | | `[points_cash_value]` | Cash value of the points earned. | See the full [placeholder reference](#full-placeholder-reference) below. ## How it works 1. A customer opens a product page that has the block. 2. Yuko reads the selected variant's price and works out the points from your active earn rules. 3. When the customer switches variants, the message updates to the new variant's price. ### Limitations * The block shows only on templates where you've added it. * The widget has no **Custom placement** field; position it with the theme editor. ## Best practices **Keep the message short.** Under 10 words is easy to scan on a busy product page. **Use Custom CSS sparingly.** Small spacing or font tweaks are usually enough to match your theme. ## FAQs Make sure the **Yuko:Product Earn Message** block is added to the product template you're viewing, and that the widget toggle is on in **Loyalty → Widgets**. No. It's built for product detail templates. Yes. Use the **Editing language** picker at the top of the widget editor to set the text for each language published in your store. ## Full placeholder reference Placeholders are written in square brackets, for example `[points_label]`. Each text field's help text in the widget editor lists the placeholders that field supports. **Available in every storefront widget text** | Placeholder | Replaced with | | - | - | | `[points_label]` | Your points label from **Loyalty → Settings** (singular or plural, e.g. *point* / *points*). | | `[point_balance]` | The customer's current points balance. | | `[points_cash_value]` | What the customer's balance is worth in your store currency, based on your points-to-cash conversion rate. | | `[store_name]` | Your store name. | **Widget-specific placeholders** | Placeholder | Replaced with | Used in | | - | - | - | | `[points_value]` | Points the customer can earn on this product, cart or order. | Product page, Cart earn, Checkout earn, Order status earn | | `[first_name]` | The customer's first name (logged-in customers only). | Cart redeem greeting, Loyalty Nudges | | `[customer_name]` | The customer's full name (logged-in customers only). | Loyalty Nudges | | `[points_needed]` | How many more points the customer needs for a reward. | Insufficient-points text (Cart redeem, Loyalty Nudges) | | `[expiration_date]` | The expiry date of an earned reward. Hidden automatically when the reward doesn't expire. `[discount_expiry_date]` works the same way. | Reward expiry text (Cart redeem, Loyalty Nudges, Floating Rewards) | | `[points_to_redeem]` | The number of points the customer chose to redeem. | Checkout redeem summary | | `[discount_value]` | The discount those points unlock. | Checkout redeem summary | | `[tier_name]` | A VIP tier name. | VIP tier text (Floating Rewards) | | `[next_tier]` | The name of the customer's next VIP tier. | VIP progress text | | `[tier_entry_amount]` | The threshold needed to enter a tier. | Cart redeem tier entry text | | `[tier_reach_level]` | The threshold needed to reach a tier. | Floating Rewards VIP text | | `[multiplier_value]` | The points multiplier for a VIP tier (e.g. *2*). Shown only when the multiplier is greater than 1. | Points multiplier benefit text | | `[renewal_date]` | The date a paid membership renews. | Floating Rewards membership text | ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Rewards Landing Page Source: https://docs.yuko.so/onsite-widgets/rewards-landing-page A dedicated loyalty page on your storefront, built from seven Yuko theme blocks, that explains how to join, earn, redeem, reach VIP tiers and become a member. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets → Rewards Landing Page ## Introduction The Rewards Landing Page is the public home of your loyalty program. Yuko creates a Shopify page for it, and you build the page from seven **Yuko** theme blocks: Hero Banner, How It Works, Ways to Earn, Ways to Redeem, VIP Tiers, Membership and FAQ. You write the text in Yuko and style each block in the Shopify theme editor. The widget is marked **Recommended** on the Widgets list. ## What problem this solves Emails, ads, social posts and footer links need somewhere to send people. The landing page explains the program in one place, before customers reach the cart. ## Where it appears * A Shopify page titled **Loyalty Program** at `/pages/loyalty-info-page`, created by Yuko. * Any other page or template where you add the Yuko landing page blocks in the theme editor. ## When to use * You link to your loyalty program from emails, ads or your site footer. * You want one page that covers joining, earning, redeeming, VIP tiers, membership and FAQs. ## Overview * **Seven theme blocks**, each with its own colours, sizes and **Custom CSS** in the theme editor. * **Separate hero text** for visitors (**Anonymous**) and logged-in customers (**When customer is authenticated**). * **Automatic content:** earn rules, rewards, VIP tiers and membership plans come from your live Yuko setup. * **FAQ editor:** add, remove and reorder questions and answers. * **Add Block** buttons that open the theme editor with the right block ready to add. * **Per-language text:** use the **Editing language** picker. ## Before you start Yuko is installed on your Shopify store. The program this widget belongs to is set up and enabled. The widget is switched on with the toggle on its card in Yuko's **Widgets** page (for loyalty widgets, **Shopify admin → Apps → Yuko Loyalty → Loyalty → Widgets**). For storefront widgets, your active theme is an Online Store 2.0 theme that supports app embeds and app blocks. The **Yuko App** embed is turned on in your published theme. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## Setup guide ### 1. Create the page Go to **Apps → Yuko Loyalty → Loyalty → Widgets** and click **Customize** on **Rewards Landing Page**. The first time you open the widget, Yuko asks **Are you sure you want to create a landing page?** Click **Create**. Yuko creates a published Shopify page titled **Loyalty Program** with the handle `loyalty-info-page`. If a page with that handle already exists, Yuko uses it. If you delete the page in Shopify, click **Check landing page** next to the widget's status badge. Yuko confirms whether the page is still there, and offers to create it again the next time you open the widget. ### 2. Write the content in Yuko Each section below matches one theme block. Expand a section to edit its text. | Section | What you set | | - | - | | **Hero Section** | **Anonymous**: title (default *Join Our Rewards Program*), description, join button (*Join Now*) and sign-in button (*Sign In*). **When customer is authenticated**: title (*Welcome Back!*), description, and two buttons (*Earn `[points_label]`* and *Redeem Rewards*). | | **How It Works** | Section title (default *How It Works*) and the title and description for three steps (*Sign up*, *Earn*, *Redeem*). | | **Ways to Earn Points** | Title (default *Ways to Earn `[points_label]`*), description and **Ways to earn — order** (**Booster campaigns first** by default, or **Standard campaigns first**). | | **Ways to Redeem Points** | Title (default *Ways to Redeem `[points_label]`*) and description. | | **VIP Tiers** | Title, description, **Current tier badge text** (default *Current tier*) and **Points multiplier benefit text** (`[multiplier_value]x multiplier`, shown when the multiplier is greater than 1). | | **Paid membership block** | **Title** (default *Become a member & save*), **Benefits title** (*Benefits:*), **Join button** (*Join the club*), and under **Pricing labels**, **Monthly interval label** (*month*) and **Yearly interval label** (*year*). | | **FAQ Section** | **Section Title** (default *Frequently Asked Questions*), **Section Description**, and **FAQ Items**, each with a **Question** and **Answer**. Add items with **Add FAQ Item**, drag to reorder and remove with the delete button. At least one item is required. | | **General Settings** | **Logged-in User Redirect URL**: where logged-in customers go when they click a campaign or reward card. Leave it empty to use the default customer account page. | Click **Save**, then switch the widget on. ### 3. Add the blocks to the page Each section in the editor has an **Add Block** button. It opens the Shopify theme editor on `/pages/loyalty-info-page` with that Yuko block ready to add. Drop the block into a section, then adjust its settings in the theme editor sidebar (see below). Add the remaining blocks in the order you want them on the page and click **Save** in the theme editor. The page uses your theme's page template. If other pages share that template, the blocks appear on them too. To avoid this, create a dedicated page template in your theme, assign it to the **Loyalty Program** page in **Online Store → Pages**, and add the blocks there. ## Theme block settings Every block has a **Custom CSS** field. Colours and sizes are set per block in the theme editor. | Block | Theme editor settings | | - | - | | **Yuko: Hero Banner** | **Background & Colors**: Background Color, Background Image (Desktop), Background Image (Mobile), Background Image Brightness, Card Background, Card Heading and Card Text. **Layout**: Card Position (Left/Center/Right), Card Vertical Position (Top/Center/Bottom), Text Alignment, Card Spacing and Button Alignment. **Buttons**: primary and secondary button background and text colours. **Desktop** and **Mobile**: Section Height, Section Padding, Heading Size and Text Size, plus a mobile **Card Position** (**Below Hero Banner** or **Over Hero Banner**). | | **Yuko: How It Works** | **Colors**: Background, Heading and Text. **Steps**: **Steps Type** (**Numbers** or **Images**), Step 1–3 Image, Number, Step Heading and Step Text colours, Number Size, Step Heading Size, Step Text Size and Step Image Height. | | **Yuko: Ways to Earn** | **Campaign Ordering** (**Ordering Ascending**, **Ordering Descending** or **Recent First**). Background colour and image, Heading and Text colours. **Campaign Cards**: Card Background, Card Border and Card Spacing. **Campaign Text** and **Campaign Icons**: colours and sizes. **Join Button**: background and text colours. | | **Yuko: Ways to Redeem** | **Reward Ordering** (**Ordering Ascending**, **Ordering Descending** or **Recent First**), plus the same colour, card, text, icon and **Join Button** settings as Ways to Earn. | | **Yuko: VIP Tiers** | Background colour and image, Heading and Text. **Tier Cards**: Card Background (Regular Tiers). **Current Tier**: Card Background, Border Color, Badge Background and Badge Text Color. **Tier Text**: tier name and description colours and sizes. **Benefits**: Benefit Text Color and Size, Tick Icon Size and Benefit Item Gap. | | **Yuko: Membership** | Section Background. **Card Styles**: Image, Image Background, Card background color, Section Radius, Title Text Color and Body Text Color. **Button Styles**: Button Color, Button Border Color, Button Text Color and Button Radius. | | **Yuko: FAQ** | Background Color, Heading Color, Question Color, Answer Color and Border Color. | ## How it works 1. Yuko creates the **Loyalty Program** page at `/pages/loyalty-info-page`. 2. You add Yuko blocks to the page in the theme editor. The **Yuko App** embed loads the scripts that fill them. 3. The blocks pull your live earn rules, rewards, VIP tiers and membership plans from Yuko, so the page stays up to date. 4. Visitors see the **Anonymous** hero with join and sign-in buttons. Logged-in customers see the authenticated hero. 5. When a logged-in customer clicks a campaign or reward card, they go to the **Logged-in User Redirect URL**, or to the customer account page if it's empty. ## Examples * **Email destination:** link your welcome email's "See how it works" button to `/pages/loyalty-info-page`. * **Footer link:** add a "Rewards" link in your footer menu that points to the landing page. * **Short page:** use only Hero Banner, Ways to Earn and Ways to Redeem for a quick overview. ## Best practices **Lead with the hero.** Put the Hero Banner first so visitors see the join button straight away. **Answer real questions.** Replace the default FAQ items with the questions your support team actually gets. **Check both hero versions.** Preview the page logged out and logged in. **Link to it everywhere.** Add it to your footer, welcome email and [Floating Rewards](/onsite-widgets/floating-launcher) content. ## FAQs Yuko creates the page at `/pages/loyalty-info-page`. You can also add the Yuko landing page blocks to any other page or template in the theme editor. Click **Check landing page** to confirm it's missing, then reopen the widget. Yuko offers to create the page again. Yes. Every block has colour and size settings plus a **Custom CSS** field in the theme editor. The Membership block shows your paid membership plans. Set up a plan in [Memberships](/memberships/plans) first. Yes. Use the **Editing language** picker at the top of the widget editor to write the text for each of your store's published languages. Campaign and reward names are translated in [Translations](/account/translations). ## Related Floating button and loyalty panel on every page. A dedicated loyalty page built from seven theme blocks. Pinned strip and drawer on every page, ideal for boosters. Show points to earn on product pages. Show points to earn on the cart. Let customers redeem points and apply rewards in the cart. Show points to earn in Shopify Checkout (Shopify Plus). Redeem points and apply rewards in Shopify Checkout (Shopify Plus). Show points earned on the order status page in customer accounts. Show the points balance on the Orders page in customer accounts. Show loyalty details on the Profile page in customer accounts. A full loyalty page inside Shopify customer accounts. Colour palettes for all widgets, and per-language widget text. The Yuko App embed that powers Floating Rewards, Loyalty Nudges and the theme blocks. Add the earn and redeem blocks to Shopify Checkout (Shopify Plus). Add the loyalty blocks and full loyalty page to Shopify customer accounts. Confirm widgets render correctly on the live storefront. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Points Transaction Object Source: https://docs.yuko.so/points-transaction-object Fields returned for a points transaction by the Yuko REST API. A points transaction is a ledger entry that changes a customer's points balance. Points added are a `credit`; points removed are a `debit`. Transactions are returned by [List points transactions](/developer/api/list-points-transactions) (`GET /public/customers/transactions`, requires the `read:transactions` scope). You can add or deduct points with [Create a points transaction](/developer/api/create-a-points-transaction) (`POST /public/customers/transactions`, requires the `write:transactions` scope). ## Properties Unique identifier for the points transaction. Yuko's internal UUID for the customer whose balance changed. This is not the Shopify customer ID you pass as the `customer_id` parameter. Whether points were added or removed. One of `credit`, `debit`. The number of points added or removed. Always positive; use `entry_type` for the direction. For the `store_credit` credit entry recorded when a customer redeems a store credit reward, this is the store credit amount (rounded down to a whole number) rather than points. The action that created the transaction, for example `purchase`, `point_adjustment` (manual and REST API adjustments) or the reward type for redemptions. The current status of the transaction. One of `active`, `on_hold`, `used`, `failed`. A description of the change, if one was provided. Where the transaction came from. Transactions created through the REST API have the source `rest_api`. The date and time the transaction took effect (ISO 8601). The date and time the transaction record was created (ISO 8601). ```json The Points Transaction object theme={null} { "id": "b2c3d4e5-f6a1-7890-bcde-f01234567890", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "entry_type": "credit", "points": 100, "action_type": "purchase", "status": "active", "description": "Points correction", "source": "rest_api", "transacted_at": "2026-02-15T08:30:00+00:00", "created_at": "2026-02-15T08:30:00+00:00" } ``` # Referrals Source: https://docs.yuko.so/referrals/overview Turn customers into advocates with a two-sided referral program. Set referrer and friend rewards, fraud checks, social sharing and UTM tracking in one place. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Referral ## What is the Referral Program The Referral Program lets your customers (referrers) share a personal link with friends. Both sides get rewarded: * The **friend** gets a welcome reward (a discount code) when they open the link and enter their details. * The **referrer** gets their reward once the friend places a paid order using that discount code. It isn't a separate app. Referrals sit alongside your loyalty program and use the same customers, points balance and storefront widgets. ## Who it's for * Brands with strong word of mouth that want to make it repeatable. * High-AOV or considered-purchase stores, where a personal recommendation carries weight. * Stores that want to lower acquisition costs by rewarding existing customers. ## The Referral menu The **Referral** section of the Yuko admin has three tabs: | Tab | What you do there | | - | - | | **Program** | Turn the program on, set the referrer and friend rewards, and configure the landing URL, social sharing, fraud prevention, auto enrollment and UTM tracking. See [Program Setup](/referrals/program-setup). | | **Widgets** | Configure the storefront and post-purchase referral widgets. See [Referral widgets](/referrals/widget). | | **Emails** | Edit the referral emails. See [Referral emails](/emails/referral-emails). | ## How it fits together ``` Referrer gets a referral link ─→ Shares it ─→ Friend opens the link │ ▼ Friend Welcome Popup: friend enters email │ ▼ Friend gets a discount code (friend reward) │ ▼ Friend places a paid order with that code │ ▼ Referrer gets their reward (discount, points or store credit) ``` The referrer reward and the friend reward are set separately, so you can pick what suits each side. See [Reward Types](/referrals/reward-types). ## Get started Open **Referral → Program**. The **Quick Start** card walks you through **Set up referrer reward**, **Set up friend reward** and **Enable referral popup**. Check the landing URL, sharing channels and fraud prevention in [Program Setup](/referrals/program-setup). Enable the **Friend Welcome Popup** so friends can claim their reward, then add a way for customers to get their link, such as the **Post-Purchase Widget** or the **Referral Landing Page**. See [Referral widgets](/referrals/widget). ## Recommended reading Rewards, landing URL, sharing, fraud prevention and UTM tracking. Pick the right reward for the referrer and the friend. Post-Purchase Widget, Referral Landing Page and Friend Welcome Popup. The emails sent to referrers and friends. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Program Setup Source: https://docs.yuko.so/referrals/program-setup Turn on the referral program and configure rewards, the landing URL, social sharing, fraud prevention, auto enrollment and UTM tracking. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Referral → Program ## Introduction The **Program** tab is where you configure the whole referral program: rewards for both sides, where referral links land, which sharing channels customers see, and how Yuko blocks fraudulent referrals. ## What problem this solves Running referrals usually means combining a referral app, a discount tool and a tracking setup. The Program tab covers all three. Yuko creates the Shopify discount codes, tracks referral links with a UTM campaign, and checks every claim against your fraud rules. ## When to use * When you launch the referral program. * When you change reward values or sharing channels. * When you want to tighten fraud controls. ## Overview The Program tab has these sections: | Section | What it controls | | - | - | | **Referrals Program Status** | Turns the program on or off. | | **Quick Start** | Setup checklist: **Set up referrer reward**, **Set up friend reward**, **Enable referral popup**. | | **Referral Rewards** | The **Referrer Reward** and the **Friend Reward**. | | **Referrals Landing URL** | The page a referral link opens. | | **Social Sharing Settings** | Which share channels customers see, and the pre-filled messages. | | **Fraud Prevention** | **IP Address Match** and **Block Self-Referrals**. | | **Auto Enrollment** | **Enroll on first point earned**. | | **UTM Tracking** | The **UTM Campaign** value added to referral links. | ## Before you start Yuko is installed on your Shopify store. See [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The **Yuko App** embed is turned on in your theme, so the Friend Welcome Popup can open. See [Theme App Embed](/installation-and-setup/theme-app-embed). You've decided what each side gets. See [Reward Types](/referrals/reward-types). ## Setup guide ### 1. Turn on the program In your Shopify admin, go to **Apps → Yuko Loyalty → Referral → Program**. In **Referrals Program Status**, switch the toggle on. The card shows "This program is currently enabled". If you later switch it off, Yuko asks you to confirm in a **Disable Referrals Program** dialog. ### 2. Set up the rewards In **Referral Rewards**, click **Add Reward** on the **Referrer Reward** card (or **Change Reward** to replace the current one). Pick a reward type and fill in the configuration page. See [Reward Types](/referrals/reward-types). Do the same on the **Friend Reward** card. On a new install, Yuko seeds both rewards as an **Amount Discount** of 10 in your store currency: "Referral reward" (coupon prefix `YRA`) for the referrer and "Welcome reward" (coupon prefix `YRF`) for the friend. Change them to suit your store. ### 3. Set the landing URL In **Referrals Landing URL**, fill in **Referrals Landing URL Path**, for example `/collections/best-sellers` or `/pages/welcome`. If you leave it blank, referral links open your homepage. ### 4. Choose the sharing channels In **Social Sharing Settings**, tick the channels customers can share through: **Twitter**, **Facebook**, **Email** and **Whatsapp**. Each ticked channel shows its message fields: * **Twitter**: **Message to tweet** * **Email**: **Email Subject** and **Email Body** * **Whatsapp**: **Message to Whatsapp** Use `[shop_name]` for your store name and `[referral_link]` for the customer's referral link. The Email Subject supports `[shop_name]` only. Facebook doesn't let third-party apps pre-fill share messages, so there's no message field for Facebook. Customers write their own message when they share. ### 5. Configure fraud prevention Stops customers from using their own referral link. It's **on by default**. Yuko blocks the claim when the friend's email matches the referrer's, or when the friend resolves to the same Shopify customer as the referrer. Blocks the claim when the friend and the referrer share the same IP address. This toggle is available on select plans. ### 6. Configure auto enrollment Turn this on to enroll a customer in the referral program automatically the first time they earn loyalty points. Enrolled customers get a referral code and link without having to request one. Customers who aren't enrolled can still join by clicking **Get referral link** in a referral widget. ### 7. Set the UTM campaign In **UTM Tracking**, set **UTM Campaign**. This is the `utm_campaign` value added to every referral link. If you leave it empty, Yuko uses `yuko_referral_program`. Only the campaign value is configurable. A referral link looks like this: ``` https://your-store.com/?yuko_referral=&utm_campaign=yuko_referral_program ``` ### 8. Save Click **Save** in the save bar. ## How it works 1. A customer becomes a referrer, either automatically (if **Enroll on first point earned** is on) or by clicking **Get referral link** in a referral widget. Yuko gives them a unique referral code and link. 2. The referrer shares the link through a widget or one of the enabled channels. 3. A friend opens the link. The **Friend Welcome Popup** asks for their details (at least an email). 4. Yuko checks the claim: * The referral code is valid and the referrer isn't blocked. * **Block Self-Referrals** and **IP Address Match** rules pass (when turned on). * The friend has no previous orders and hasn't already received a friend reward. 5. If the claim passes, Yuko creates the friend's discount code and shows it in the popup. 6. When the friend places a paid order using that code, Yuko issues the referrer reward and counts the referral as successful. ### Limitations * The referrer is rewarded only for a paid order that uses the friend's referral discount code. * Friends must be new customers. A friend with an existing order can't claim a friend reward. * Each customer can receive only one friend reward. * Referral links rely on the `yuko_referral` URL parameter, so the friend must open the full link. ## Examples * Referrer gets 500 points (**Earn Points**); friend gets \$10 off (**Amount Discount**), with **Block Self-Referrals** and **IP Address Match** on. * Referrer gets \$20 **Store Credit**; friend gets 15% off (**Percentage Off**), with the landing URL set to `/collections/best-sellers`. ## Best practices **Test the whole flow before you promote it.** Share a link, open it in a private window, claim the friend reward, place an order with the code, and check that the referrer is rewarded. **Keep Block Self-Referrals on.** It's the main guard against customers rewarding themselves. **Promote referrals in your post-purchase moments.** The Post-Purchase Widget and your order emails reach customers when they're most engaged. ## FAQs When the friend places a paid order that uses the friend's referral discount code. Orders without that code don't count as referral orders. Not while **Block Self-Referrals** is on. Yuko blocks claims where the friend's email or Shopify customer matches the referrer. Turn on **IP Address Match** too if you want to block claims from the referrer's IP address. No. Only **UTM Campaign** is configurable. Links copied or shared from the Referral Landing Page also add `utm_source=yuko_referral`, a `utm_medium` for the share channel (for example `copy_link`) and `utm_content` set to the referral code. In the referral widgets (the Post-Purchase Widget and the Referral Landing Page), and in the referral sections of the Floating Rewards launcher and the customer account page. See [Referral widgets](/referrals/widget). ## Related Rewards, landing URL, sharing, fraud prevention and UTM tracking. Pick the right reward for the referrer and the friend. Post-Purchase Widget, Referral Landing Page and Friend Welcome Popup. The emails sent to referrers and friends. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Reward Types Source: https://docs.yuko.so/referrals/reward-types The reward types available to referrers and friends, and every setting on the reward configuration page. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Referral → Program → Referral Rewards ## Introduction The referral program has two independent rewards: the **Referrer Reward** (for the customer who shares) and the **Friend Reward** (for the new customer who opens the link). You can give each side a different kind of reward. ## What problem this solves Referrers and friends want different things. A referrer may value points or store credit they can use later. A friend needs a clear reason to place a first order. Setting the two rewards separately lets you match each side. ## Available reward types | Reward type | Referrer | Friend | What the customer gets | | - | - | - | - | | **Amount Discount** | Yes | Yes | A discount code for a fixed amount off. | | **Percentage Off** | Yes | Yes | A discount code for a percentage off. | | **Free Shipping** | Yes | Yes | A free-shipping discount code. | | **Free Product** | Yes | Yes | A discount code that makes a chosen product free. | | **Earn Points** | Yes | No | Loyalty points added to the referrer's balance. | | **Store Credit** | Yes | No | Shopify store credit added to the referrer's account. | Friend rewards are always discount codes. The friend sees the code in the Friend Welcome Popup and can apply it at checkout. **Earn Points** needs your loyalty program to be enabled. If it isn't, no points are issued. ## Configuration options When you click **Add Reward** (or **Change Reward**) on a reward card, you pick a type and then fill in its configuration page. Which settings appear depends on the type. | Setting | Shown for | What it does | | - | - | - | | **Title** | All types | The reward name customers see, for example `$5 off coupon`. Referral widgets show it through the `{{friend_reward}}` and `{{referrer_reward}}` shortcodes. | | **Value** / **Reward value** | All types except Free Shipping and Free Product | The amount, percentage or number of points. | | **Applies to** | Amount Discount, Percentage Off | **All products**, **Specific collections** or **Specific products**. | | **Only apply discount once per order** | Amount Discount applied to specific collections or products | If not selected, the amount comes off each eligible item. | | **Select product** | Free Product | The product given as the reward. | | **Shipping restrictions** | Free Shipping | **Countries** (**All countries** or **Selected countries**) and **Exclude shipping rates over a certain amount** with a **Maximum shipping rate**. | | **Coupon prefix** | Discount-code types | Text added to the start of each generated code (letters and numbers, up to 8 characters). | | **Coupon expiry** | Discount-code types | Turn on to make the code expire after a **Duration** in Days, Weeks, Months or Years. | | **Reward expires** | Earn Points, Store Credit | Turn on to make the points or store credit expire after a set duration. | | **Who can use this reward** | Referrer discount-code types | **Limit the reward usage only to the recipient** restricts the code to the referrer's Shopify customer account. | | **Purchase type** | Amount Discount, Percentage Off, Free Shipping | **One-time purchase**, **Subscription** or **Both**. Subscription options only take effect if your store sells subscriptions. | | **Minimum purchase requirements** | Discount-code types | **No minimum requirements**, **Minimum purchase amount** or **Minimum quantity of items**. | | **Combinations** | Discount-code types | Whether the code combines with **Product discounts**, **Order discounts** and **Shipping discounts** (the shipping option isn't shown for Free Shipping rewards). | Friend discount codes are always limited to the friend's customer account. ## Decision guidance ### Picking the referrer reward Good for engagement-led programs. It ties the referrer back into your loyalty program and lets them redeem on any reward. Good for premium brands. It feels like money on file rather than a coupon. Good when you want the referrer to come back and buy again soon. Good when you want a non-cash reward that reads like a gift. ### Picking the friend reward Easy to explain: "Get \$10 off your first order." Add a minimum purchase amount to protect margin. Works well for higher-AOV stores, where 10 to 20% is a meaningful amount. Works where shipping cost is a known reason for abandoned carts. Works for product launches or sample-size items, putting a specific product in the friend's hands. ## How it works * **Friend reward:** Yuko creates the friend's discount code when they claim it in the Friend Welcome Popup. The friend must be a new customer (no previous orders), and each customer can receive only one friend reward. * **Referrer reward:** Yuko issues it when the friend places a paid order that uses the friend's referral code: * Discount-code types create a Shopify discount code for the referrer. * **Earn Points** credits the referrer's points balance. * **Store Credit** adds Shopify store credit to the referrer's account. * Expiry is counted from the moment the reward is issued. ### Limitations * Friends can't receive points or store credit; friend rewards are discount codes only. * There is one referrer reward and one friend reward per program. * There's no cap on how many successful referrals one referrer can be rewarded for. ## Examples | Referrer reward | Friend reward | Why it works | | - | - | - | | 500 points (**Earn Points**) | $10 off (**Amount Discount**) with a $50 minimum | Pulls the referrer back into the loyalty program and protects margin on the friend's order. | | \$20 **Store Credit** | 15% off (**Percentage Off**) | Discount-led, with a premium feel for the referrer. | | **Free Product** | **Free Shipping** | Non-cash on both sides; feels like a gift. | ## Best practices **Don't make either side feel cheap.** A \$1 discount looks like an afterthought. **Keep the two rewards in proportion.** A big friend reward with a tiny referrer reward reduces the referrer's motivation to share. **Give each reward a clear Title.** The title is what customers see in the referral widgets. ## FAQs No. Friend rewards are discount codes only. Friends earn points the usual way after their first order. No. Each program has one referrer reward and one friend reward. To change one, click **Change Reward** on its card. No. There's no per-referrer cap. ## Related Rewards, landing URL, sharing, fraud prevention and UTM tracking. Pick the right reward for the referrer and the friend. Post-Purchase Widget, Referral Landing Page and Friend Welcome Popup. The emails sent to referrers and friends. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Referral Widgets Source: https://docs.yuko.so/referrals/widget An overview of the referral widgets, the theme block and the checkout block that let customers get their referral link and let friends claim their reward. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Referral → Widgets ## Introduction Referral widgets are the storefront surfaces of your referral program. They let customers get and share their referral link, and let friends claim their welcome reward when they open a link. ## The widgets The **Widgets** tab lists three widgets. Each card has a toggle to turn it on or off, and opens its own editor. | Widget | What it does | Where it appears | Storefront block | | - | - | - | - | | [**Post-Purchase Widget**](/referrals/widgets/post-purchase) | Invites customers to get their referral link right after they buy. | Thank-you page and order status page. | **Yuko Referral Signup** (checkout and customer account UI extension). | | [**Referral Landing Page**](/referrals/widgets/landing-page) | A dedicated page where visitors sign up for a referral link and logged-in customers copy theirs. | A Shopify page, created for you at `/pages/referral-info-page`. | **Yuko: Referral Signup** (theme app block). | | [**Friend Welcome Popup**](/referrals/widgets/friend-welcome-popup) | The popup friends see when they open a referral link. It collects their details and reveals the friend discount code. | Any storefront page opened from a referral link. | No block. It loads through the **Yuko App** embed. | Referral links can also be shared from the referral section of the [Floating Rewards launcher](/onsite-widgets/floating-launcher) and the [customer account page](/onsite-widgets/customer-account-page). Those are configured with the loyalty widgets. ## Storefront blocks ### Yuko: Referral Signup (theme app block) The theme app block behind the **Referral Landing Page**. Add it to any page template in the theme editor. It has its own theme-editor settings: * **Content:** **Show Banner Image**, **Banner Image**, **Image Position (Desktop)** (Top, Left, Right; default Left), **Text Alignment** (Left, Center, Right; default Center). * **Colors:** **Background**, **Text**, **Button Background**, **Button Text**, **Border**, **Error Text**. * **Typography:** **Heading Size** (16 to 48, default 28) and **Text Size** (12 to 24, default 16). * **Spacing & Shape:** **Border Width** (0 to 5, default 1) and **Corner Radius** (0 to 24, default 8). * **Custom CSS**. The text lives in Yuko, under **Referral → Widgets → Referral Landing Page**. ### Yuko Referral Signup (checkout and customer account block) The extension block behind the **Post-Purchase Widget**. It has two targets: * The **Thank you** page in the checkout editor. * The **Order status** page in the customer accounts editor. Its text lives in Yuko, under **Referral → Widgets → Post-Purchase Widget**. Its look follows Shopify's checkout and customer account styling. ## Before you start The referral program is enabled and both rewards are set in **Referral → Program**. Widgets stay hidden until a friend reward exists. The **Yuko App** embed is turned on in your theme. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## Common editor features * **Editing language:** each widget editor has a language picker, so you can enter text for every language published in your Shopify store. * **Reward shortcodes:** text fields accept `{{friend_reward}}` and `{{referrer_reward}}`. They're replaced with the **Title** of the friend and referrer rewards. * **Form fields:** the Referral Landing Page and Friend Welcome Popup let you choose which fields the form collects (**First Name**, **Last Name**, **Phone**, **Marketing Consent**; **Email** is always included). * **Preview:** each editor shows a live preview of the widget's states. ## Recommended setup Without it, friends who open a referral link can't claim their reward. It's the **Enable referral popup** step in the Program tab's Quick Start. Turn on the **Post-Purchase Widget**, the **Referral Landing Page**, or both. Get a link as a customer, open it in a private window, and claim the friend reward. ## FAQs Check that the referral program is enabled, a friend reward is set, the widget's toggle is on, and its block (or the Yuko App embed) is added to your theme, checkout or customer accounts. The Friend Welcome Popup has a **Styles** tab in Yuko. The Referral Landing Page is styled in the theme editor through the **Yuko: Referral Signup** block. The Post-Purchase Widget follows Shopify's checkout styling. ## Related Rewards, landing URL, sharing, fraud prevention and UTM tracking. Pick the right reward for the referrer and the friend. Post-Purchase Widget, Referral Landing Page and Friend Welcome Popup. The emails sent to referrers and friends. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Friend Welcome Popup Source: https://docs.yuko.so/referrals/widgets/friend-welcome-popup The popup friends see when they open a referral link. It collects their details and reveals their welcome discount code. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Referral → Widgets → Friend Welcome Popup ## Introduction The **Friend Welcome Popup** is what a friend sees after clicking a referral link. In two steps, it asks for their details, then reveals their friend reward code with a button to apply it. ## What problem this solves This popup is how friends claim their reward. Without it, a friend who opens a referral link gets no discount code, and the referrer can't be rewarded. That's why turning it on is a Quick Start step (**Enable referral popup**). ## Where it appears * On any storefront page opened from a referral link (a URL that contains `yuko_referral`). It opens on the landing page set in **Referral → Program → Referrals Landing URL**. * It loads through the **Yuko App** embed. There's no block to add. ## Overview * **Step 1: Input Screen** collects the friend's details. * **Step 2: Reward Screen** shows the discount code and an apply button. * A **Styles** tab with colours, sizes and Custom CSS. * An optional hero image (desktop only). ## Before you start The referral program is enabled and a friend reward is set in **Referral → Program**. The popup doesn't open without a friend reward. The **Yuko App** embed is turned on in your theme. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## Setup guide ### 1. Configure the content Go to **Referral → Widgets** and open **Friend Welcome Popup**. The **Configuration** tab opens first. | Field | Default | | - | - | | **Enable Hero Image** / **Hero Image** | On, with a default banner image. Recommended size 800×1000px (JPG, PNG or GIF). Shown on desktop only. | | **Label** | `Friend Invitation` | | **Heading** | `Unlock your offer!` | | **Message** | `Enter your email to reveal your discount code.` | | **Form** | First Name, Last Name and Your email. **Email** is always included. You can also add **Phone** or **Marketing Consent** with **Add form field**. | | **Button Text** (max 30 characters) | `Unlock Offer` | For each form field you can edit the **Label** and **Placeholder**, mark it as a **Required field**, show or hide it, and drag fields into a new order. | Field | Default | | - | - | | **Label** | `Your Reward` | | **Heading** | `Welcome! Enjoy {{friend_reward}}` | | **Message** | `Use the code below at checkout to get {{friend_reward}}.` | | **Button Text** (max 30 characters) | `Apply at checkout` | Set **Success message (toast)**, shown after the friend clicks the apply button and the discount is applied. Default: `Your discount code has been revealed! Use it at checkout.` Headings and messages accept `{{friend_reward}}` and `{{referrer_reward}}`, which are replaced with your reward titles. The default Step 2 text uses `{{friend_reward}}`, so it stays accurate when you change the reward. ### 2. Style the popup On the **Styles** tab, set the font size and weight, heading and label font sizes, padding, border radius, border width and colour, background and text colours, button colours, success and error colours, and optional **Custom CSS**. ### 3. Save and enable Click **Save**, then switch the toggle next to the widget title on. ### 4. Verify Copy a customer's referral link and open it in a private window. The popup should open. Enter a new email address and check that a discount code appears and that **Apply at checkout** applies it. ## How it works 1. A friend opens a referral link. The Yuko App embed sees the referral code in the URL and opens the popup. 2. The friend fills in the form and clicks the Step 1 button. 3. Yuko checks the claim against your fraud rules and confirms the friend is a new customer, then creates their discount code. 4. Step 2 shows the code. Clicking the apply button adds the code to the cart and shows the success message. 5. When the friend places a paid order with that code, the referrer is rewarded. If the claim fails (for example, a self-referral, or a friend who already has orders), the popup shows an error and no code is issued. ## Best practices **Use `{{friend_reward}}` in the heading** so the popup always matches the real reward. **Ask only for what you need.** Email is required. Every extra field lowers completion. ## FAQs Check that the widget toggle is on, a friend reward is set, the referral program is enabled, and the Yuko App embed is on in your live theme. No. Friends must have no previous orders, and each customer can receive only one friend reward. ## Related Rewards, landing URL, sharing, fraud prevention and UTM tracking. Pick the right reward for the referrer and the friend. Post-Purchase Widget, Referral Landing Page and Friend Welcome Popup. The emails sent to referrers and friends. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Referral Landing Page Source: https://docs.yuko.so/referrals/widgets/landing-page A dedicated referral page where visitors sign up for a referral link and logged-in customers copy and share theirs. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Referral → Widgets → Referral Landing Page ## Introduction The **Referral Landing Page** is a dedicated page for your referral program. Visitors can sign up for a referral link, and logged-in customers can copy and share theirs. On the storefront, it's rendered by the **Yuko: Referral Signup** theme app block. ## What problem this solves Customers can't refer friends if they can't find their link. A dedicated page gives you one URL to promote in emails, ads and your navigation, and it works for both guests and logged-in customers. ## Where it appears * A Shopify page Yuko creates for you: **Referral Program**, at `/pages/referral-info-page`. * Any other page template where you add the **Yuko: Referral Signup** block. ## Overview * **Guest View** and **Logged In View**, each with its own text. * A configurable sign-up form for guests. * Optional social share buttons. * No Styles tab in Yuko. Colours, fonts, banner image and Custom CSS are set on the theme block. ## Before you start The referral program is enabled and a friend reward is set in **Referral → Program**. The **Yuko App** embed is turned on in your theme. See [Theme App Embed](/installation-and-setup/theme-app-embed). ## Setup guide ### 1. Create the page Go to **Referral → Widgets** and open **Referral Landing Page**. If your store has no referral landing page yet, Yuko opens a **Create referral landing page** dialog. Click **Create** to add a Shopify page titled **Referral Program** at `/pages/referral-info-page`. Once the page exists, a **Check landing page** button appears next to the widget title. Use it to confirm the page is still in Shopify, for example if someone may have deleted it. ### 2. Edit the content | Field | Default | | - | - | | **Page Title** | `Refer a friend. You & your friend both get rewarded` | | **Page Subtitle** | `Get your personalized referral link. Once a friend uses your link and makes a successful purchase, you'll get a reward for your next order with us.` | | **Form** | **First Name**, **Last Name**, **Email** and **Marketing Consent** (`I agree to receive marketing emails`). **Email** is always included. Add **Phone** with **Add form field**. | | **Button Text** (submit button, max 30 characters) | `Submit` | For each form field you can edit the **Label** and **Placeholder**, mark it as a **Required field**, show or hide it, and drag fields into a new order. | Field | Default | | - | - | | **Page Title** | `Earn for every friend you refer` | | **Page Subtitle** | `Copy and share your personalized referral link with your friends` | | **Copy Button Text** (max 30 characters) | `Copy` | | **Get Link Button Text** (shown before the link is loaded, max 30 characters) | `Get referral link` | Turn on **Enable Social Share** to show share buttons, and set **Or share via text** (default `Or share via:`). Only the channels enabled in **Referral → Program → Social Sharing Settings** appear on the storefront. The preview always shows every channel. Click **Save**, then switch the toggle next to the widget title on. Titles and subtitles accept `{{friend_reward}}` and `{{referrer_reward}}`, which are replaced with your reward titles. ### 3. Add or style the block in your theme The page Yuko creates is ready to use. To add the widget to another page, or to style it, click **Add block** in the widget editor, or follow these steps: Theme blocks get their content from Yuko's storefront script, which loads through the **Yuko App** app embed. If you haven't already, enable it in **Online Store → Themes → Customize → App embeds**. See [Theme App Embed](/installation-and-setup/theme-app-embed). In your Shopify admin, go to **Online Store → Themes**, find your active theme, and click **Customize**. Use the template selector at the top to open the page where this widget should appear (Product, Cart, a page template, and so on). Click **Add block** in the section where you want the widget. Under **Apps**, select the Yuko block named for this widget (block names start with **Yuko:**). Drag the block to your preferred position and click **Save**. Choose the **Yuko: Referral Signup** block. Its theme-editor settings cover the banner image and position, text alignment, colours, heading and text size, border width, corner radius and Custom CSS. See [Referral widgets](/referrals/widget#yuko-referral-signup-theme-app-block). ### 4. Verify Open `/pages/referral-info-page` in a private window and sign up with a test email. Then log in as a customer and check that the Logged In View shows a referral link. ## How it works 1. A guest fills in the form and submits it. Yuko enrolls them as a referrer and shows their link. 2. A logged-in customer clicks **Get referral link** (or sees their existing link) and copies it. 3. If social sharing is on, customers can share through your enabled channels. ## Best practices **Link to the page from your navigation and emails.** A dedicated URL is easy to promote. **Keep the form short.** Email alone is enough to create a referral link. ## FAQs Open the widget in Yuko. If the page no longer exists, the **Create referral landing page** dialog appears again. This widget is styled in the Shopify theme editor, through the **Yuko: Referral Signup** block settings. ## Related Rewards, landing URL, sharing, fraud prevention and UTM tracking. Pick the right reward for the referrer and the friend. Post-Purchase Widget, Referral Landing Page and Friend Welcome Popup. The emails sent to referrers and friends. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Post-Purchase Widget Source: https://docs.yuko.so/referrals/widgets/post-purchase Invite customers to get and share their referral link on the thank-you and order status pages, right after they buy. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Referral → Widgets → Post-Purchase Widget ## Introduction The **Post-Purchase Widget** asks customers to refer a friend straight after checkout. It's the **Yuko Referral Signup** extension block, shown on the thank-you page and on the order status page in customer accounts. ## What problem this solves Customers are most enthusiastic right after buying. Showing the referral offer at that moment, with a one-click way to get a link, turns that enthusiasm into referrals. ## Where it appears * The **Thank you** page (`purchase.thank-you.block.render`). * The **Order status** page in Shopify customer accounts (`customer-account.order-status.block.render`). ## Overview * Four text fields: title, description and two button labels. * No Styles tab. The block uses Shopify's checkout and customer account styling. * A customer who isn't a referrer yet sees **Get referral link**. Clicking it enrolls them and shows their link with a copy button. Existing referrers see their link straight away. ## Before you start The referral program is enabled and a friend reward is set in **Referral → Program**. The widget stays hidden without a friend reward. For the order status page, your store uses Shopify customer accounts (**Settings → Customer accounts**). ## Setup guide ### 1. Configure the widget in Yuko Go to **Referral → Widgets** and open **Post-Purchase Widget**. | Field | Default | | - | - | | **Title** | `Refer a friend & get rewarded!` | | **Description** | `Give your friends {{friend_reward}} and get {{referrer_reward}} for each successful referral.` | | **Copy Button Text** (shown once the link is displayed, max 30 characters) | `Copy Link` | | **Get Link Button Text** (shown before the link is loaded, max 30 characters) | `Get referral link` | In **Title** and **Description**, use `{{friend_reward}}` and `{{referrer_reward}}` to insert the reward titles, so the text stays in sync with your rewards. Click **Save**, then switch the toggle next to the widget title on. The badge changes to **Active**. ### 2. Add the block to the thank-you page In your Shopify admin, go to **Settings → Checkout** and click **Customize**. Use the page selector at the top to switch to **Thank you**. Click **Add app block**, choose **Yuko Referral Signup**, position it and click **Save**. ### 3. Add the block to the order status page In your Shopify admin, go to **Settings → Customer accounts** and click **Customize**. Use the page selector at the top to open the page where the block should appear (Order status, Orders, or Profile). Click **Add app block** and choose the Yuko block for this widget (for example **Yuko Order status earned points**, **Yuko Order index points display** or **Yuko Profile loyalty program**). Position the block where customers will see it and click **Save**. Customer account blocks only work with Shopify's **new customer accounts**. Check that they're turned on in **Settings → Customer accounts**. On the **Order status** page, add the **Yuko Referral Signup** block. ### 4. Verify Place a test order and check that the widget appears on the thank-you page. Click **Get referral link**, then copy the link and open it in a private window to check that the Friend Welcome Popup appears. ## How it works 1. The block checks that the referral module is on, a friend reward exists and the widget is enabled. 2. If the customer already has a referral code, the block shows their link. 3. Otherwise the block shows **Get referral link**. Clicking it enrolls the customer as a referrer and shows the new link. 4. The customer copies the link and shares it. ### Limitations * The block's look follows Shopify's checkout and customer account styling. * The order status target needs Shopify customer accounts and a logged-in customer. ## FAQs Thank-you and order status page blocks don't require Shopify Plus. Checkout-step blocks, such as the loyalty checkout widgets, do. Check that a friend reward is set, the widget's toggle is on, and the **Yuko Referral Signup** block is added to the page you're looking at. ## Related Rewards, landing URL, sharing, fraud prevention and UTM tracking. Pick the right reward for the referrer and the friend. Post-Purchase Widget, Referral Landing Page and Friend Welcome Popup. The emails sent to referrers and friends. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Retrieve a points transaction Source: https://docs.yuko.so/retrieve-a-points-transaction How to look up a customer's points transactions with the REST API. The Yuko REST API doesn't have an endpoint to fetch a single points transaction by ID. To find a transaction, list the customer's transactions with [List points transactions](/developer/api/list-points-transactions). ## Listing a customer's transactions `GET /public/customers/transactions` Requires the `read:transactions` scope. See [Scopes](/developer/api/scopes). * Pass the platform customer ID (for example, the Shopify customer ID) as `customer_id`. * Optionally filter with `entry_type` (`credit` or `debit`) and page through results with `page` and `per_page` (maximum `100`). * Results are sorted newest first. ## Matching a transaction you created When you create a transaction with [Create a points transaction](/developer/api/create-a-points-transaction), the response includes its `transaction_id`. That value matches the `id` of the transaction in the list results. See the [Points Transaction Object](/points-transaction-object) for every field returned. # Support Source: https://docs.yuko.so/support/index Get help with Yuko — browse articles, chat with our team, or book a setup call. If you ever need assistance, we're here to help. ## Get help Help articles, troubleshooting guides and live chat. 30 minutes with our team for personalised setup help. You can also start a live chat with our team from inside Yuko (**Shopify admin → Apps → Yuko Loyalty**). ## What to include in a support request To speed up the back-and-forth, please share: * Your Shopify store URL. * The Yuko area you're working in (Loyalty, Referral, Memberships, Workflows, etc.). * A short description of what you expected vs what you saw. * A screenshot if relevant. Our support specialists will get back to you quickly with the guidance you need. Support # Third Party Checkout Provider Integration Guide Source: https://docs.yuko.so/third-party-checkout-integrations Step-by-step guide for third party checkout providers to integrate Yuko Loyalty into the checkout experience. IMPORTANT: This guide is only applicable for checkout providers in Shopify platform ## Overview When a customer reaches your checkout, this integration lets you show them three things from Yuko — in real time: | What the customer sees / does | API endpoint | | - | - | | Their current points balance | `GET /customers/rewards/redeemable` | | Rewards available to redeem right now | `GET /customers/rewards/redeemable` | | Spend their points to get a discount code or store credit | `POST /customers/rewards/redeem` | | Points they will earn on this purchase | `POST /points/estimate` | Three API calls. One seamless checkout experience. *** ## How it works ```text theme={null} Customer reaches checkout │ ▼ Your checkout identifies the customer (Shopify Customer ID is required for Endpoints 1 & 3) │ ├─────────────────────────────────────────────┐ ▼ ▼ API Call #1 API Call #2 GET /customers/rewards/redeemable POST /points/estimate Requires Shopify Customer ID No customer ID needed Only for logged-in customers Works for guests too │ │ ▼ ▼ Returns: Returns: · Points balance · Points earned on this cart · Rewards available to redeem · Rewards already issued (codes) │ │ └────────────────┬────────────────────────────┘ ▼ Your checkout UI renders: "You have 650 points" "Redeem: $5 off (costs 500 pts)" ← customer clicks this "Unused coupon: YUKO-TVJ-BL1" "You'll earn 120 points on this order" │ Customer clicks "Redeem" on a reward │ ▼ API Call #3 POST /customers/rewards/redeem Sends: customer_id + reward_id │ ▼ Returns: · New discount code (e.g. YUKO-ABC-123) · Points deducted · Expiry date │ ▼ Your checkout applies the discount code Customer completes purchase ``` All Yuko API calls must be made from your **backend server** — never directly from the customer's browser. See [Security Rules](#security-rules) for details. *** ## Before you start ### What the merchant needs to do The merchant must have Yuko installed on their Shopify store. Once installed: Go to the merchant's **Shopify Admin Dashboard**. Click **Apps → Yuko Loyalty**. Navigate to **Integrations → REST API** and click **Create new key**. Choose **Custom Key** and give the key **Read/Write Access** on **Rewards** (`write:rewards`, needed to redeem) and **Read Access** on **Points** (`read:points`, needed for the estimate). Copy the API key and share it securely with your team. It looks like this: ```text theme={null} py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` Each merchant generates their own API key. If you are integrating across multiple merchants, each one will have a different key. ### What your team needs * The customer's **Shopify Customer ID** at checkout time — required for Endpoint 1, only available when the customer is logged in * **Shopify Product IDs and Variant IDs** for every item in the cart — required for Endpoint 2 *** ## Authentication Yuko uses **Bearer Token Authentication**. Every API request must include the merchant's API key in the `Authorization` header. ```text theme={null} Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` This header is required on **every single request** — no exceptions. Full authentication details are in the [Authentication reference](/developer/api/authentication). ### Base URL All Yuko API requests start with: ```text theme={null} https://api.yukoapp.com/api/v1/public ``` ### General rules * Always use **HTTPS** * Always set `Content-Type: application/json` on POST requests * All responses are JSON * Successful responses wrap data inside a `"data"` key * Error responses include an `"error"` object with `code` and `message` See the [API Introduction](/developer/api/introduction) for a full overview of request and response formats. *** ## Endpoint 1: Get points balance and redeemable rewards This is the primary endpoint for your checkout loyalty panel. One call returns everything: * The customer's current points balance * All rewards they can redeem (with a flag showing if they have enough points for each) * Rewards already issued to the customer (with their discount codes and status) `/customers/rewards/redeemable` is a single endpoint that covers both the points balance **and** the full rewards list. You do not need a separate "get balance" call. Full API reference → [`GET /customers/rewards/redeemable`](/developer/api/get-redeemable-rewards) ### Request ```text theme={null} GET https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable ``` Requires the `read:rewards` scope (or `write:rewards`). The merchant configures this in **Shopify Admin → Apps → Yuko Loyalty → Integrations → REST API**. See [Scopes](/developer/api/scopes). ### Query parameters The Shopify Customer ID of the logged-in customer, for example `9049402769586`. This is mandatory — do not call this endpoint for guest checkouts. ### Example request ```bash theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=9049402769586" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ### Example response ```json 200 theme={null} { "data": { "points_balance": 650, "rewards": [ { "id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5", "name": "$5 off your next order", "description": "Redeem 500 points for a $5 discount.", "reward_type": "fixed", "points_cost": 500, "reward_rule": { "points_required": 500, "value": 5 }, "icon": null, "can_redeem": true, "points_needed": 0 }, { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "name": "10% off your next order", "description": "Redeem 1000 points for 10% off.", "reward_type": "percentage", "points_cost": 1000, "reward_rule": { "points_required": 1000, "value": 10 }, "icon": null, "can_redeem": false, "points_needed": 350 } ], "customer_rewards": [ { "id": "1fd80ced-326f-4082-951b-21a38632a603", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "reward_id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5", "reward_type": "fixed", "status": "active", "discount_code": "YUKO-TVJ-BL1", "points_used": 500, "expires_at": "2026-06-01T00:00:00+00:00", "used_at": null, "created_at": "2026-02-15T08:30:00+00:00" } ] } } ``` ### Response fields The customer's current redeemable points balance. Always `0` for customers who are excluded (banned) from the loyalty program. Display this prominently at the top of your loyalty panel. All active rewards for the online store (point-of-sale rewards are excluded), enriched with affordability data for this specific customer. Unique ID of the reward. The reward name to display to the customer. Optional longer description of the reward. The type of reward. One of `fixed`, `percentage`, `free_shipping`, `free_product`, `store_credit`. How many points the customer must spend to redeem this reward (taken from `reward_rule.points_required`). The reward configuration, returned as stored. Structure varies by `reward_type`. Every reward includes `points_required`; `fixed`, `percentage` and `store_credit` rewards include `value` (the amount, percentage or credit amount). The reward's icon, or `null` if none is set. Contains `source` (`default` or `custom`), `slug`, `id` and `url`. `true` if the customer has enough points. `false` if not. How many more points the customer needs. Always `0` when `can_redeem` is `true`. Every reward already issued to the customer, newest first, in any status (including used and expired ones) and from any source (points redemptions as well as VIP tier, referral and membership rewards, so `reward_id` isn't always a catalogue reward ID). Filter on `status === "active"` to find codes the customer can still apply. Each item is a [Customer Reward Object](/customer-reward-object). The actual coupon code (e.g. `YUKO-TVJ-BL1`). This is a standard Shopify discount code — pass it directly through your checkout discount flow. Current status. Only show coupons where `status === "active"`. One of `active`, `used`, `inactive`, `expired`, `deleted`, `revert`. When this coupon expires. `null` means no expiry. `null` if the coupon has not been used yet. How many points were spent to create this coupon. ### Display logic ```text theme={null} If points_balance > 0: Show: "You have {points_balance} points" For each reward in rewards[]: If can_redeem === true → Show active "Redeem" button: "{name} — {points_cost} pts" If can_redeem === false → Show greyed out: "{name} — earn {points_needed} more points" For each item in customer_rewards[] where status === "active": Show: "You have an unused reward: {discount_code}" ``` *** ## Endpoint 2: Points estimate at checkout This endpoint tells the customer how many loyalty points they will **earn** when they complete this purchase. No Shopify Customer ID is required (you still need the API key), so it works for both logged-in customers and guests. The request carries product and variant IDs only, with no prices or quantities, so the cart amount Yuko calculates with is always `0`. As a result the endpoint currently returns `points_earned: 0` for every request. With the display logic below, the earn message stays hidden. Confirm it returns non-zero values for the merchant's earn rules before you rely on it. Full API reference → [`POST /points/estimate`](/developer/api/checkout-points-estimate) Requires the `read:points` scope. See [Scopes](/developer/api/scopes). ### Request ```text theme={null} POST https://api.yukoapp.com/api/v1/public/points/estimate ``` ### Request body Optional. Include only if the customer is logged in. Omit entirely for guest checkouts. If you send it, include at least `id` or `email`. Shopify Customer ID. Used to look up the customer if `email` is not provided. Customer email address. Takes priority over `id` when both are provided; if no customer matches the email, `id` isn't tried. The line items in the cart. Must contain at least one item. The Shopify Product ID. The Shopify Variant/SKU ID. ### Example request: logged-in customer ```bash theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/points/estimate" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "customer": { "id": "9049402769586", "email": "rahul.sharma@example.com" }, "items": [ { "product_id": "prod_1001", "variant_id": "var_1001_red_m" }, { "product_id": "prod_2044", "variant_id": "var_2044_black_42" } ] }' ``` ### Example request: guest checkout ```bash theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/points/estimate" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "items": [ { "product_id": "prod_1001", "variant_id": "var_1001_red_m" } ] }' ``` ### Example response ```json 200 theme={null} { "data": { "points_earned": 0, "message": "You will earn 0 points after completing this purchase" } } ``` ### Response fields The number of loyalty points the customer will earn after completing the purchase. Currently always `0` (see the warning above). A ready-to-display string. You can show this directly in your UI without additional formatting. The message is always returned, even when `points_earned` is `0`, so check `points_earned` before showing it. ### Display logic ```text theme={null} If points_earned > 0: Show the message field directly in your UI If points_earned === 0: Hide this section entirely — never show "You will earn 0 points" ``` *** ## Endpoint 3: Redeem a reward (burn points) This is the endpoint your checkout calls when a customer **actively chooses to spend their points** on a reward. When the customer clicks "Redeem" on an available reward, call this endpoint. Yuko will: 1. Deduct the required points from the customer's balance 2. Generate a fresh Shopify discount code for that reward 3. Return the discount code so you can apply it to the order This endpoint is triggered by a **customer action** — not automatically at checkout load. Only call it when the customer explicitly clicks "Redeem" on a reward option. The request has no points amount, so only rewards with a fixed points cost can be redeemed here. A reward whose `reward_rule.method` is `increment` (customer chooses how many points to spend) always fails with `Insufficient points balance`, even when `can_redeem` is `true`. Hide the Redeem button for those rewards. Full API reference → [`POST /customers/rewards/redeem`](/developer/api/redeem-reward) Requires the `write:rewards` scope. Read-only keys can't redeem. See [Scopes](/developer/api/scopes). ### Request ```text theme={null} POST https://api.yukoapp.com/api/v1/public/customers/rewards/redeem ``` ### Required headers | Header | Value | | - | - | | `Authorization` | `Bearer YOUR_API_KEY` | | `Content-Type` | `application/json` | ### Request body The Shopify Customer ID of the logged-in customer. The UUID of the reward the customer wants to redeem. Get this from the `rewards[].id` field in the Endpoint 1 response (`GET /customers/rewards/redeemable`). ### Example request ```bash theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeem" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "customer_id": "9049402769586", "reward_id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5" }' ``` The `reward_id` comes directly from the `rewards[].id` field in the Endpoint 1 response. Store these IDs when you render the rewards list so you have them ready when the customer clicks "Redeem". ### Example response A `201 Created` status means the redemption was successful and a new coupon code has been generated. ```json 201 theme={null} { "data": { "coupon_code": "YUKO-TVJ-BL1", "points_spent": 500, "reward_type": "fixed", "discount_value": 5, "expires_at": "2026-06-01T00:00:00+00:00" } } ``` ### Response fields The newly generated Shopify discount code (e.g. `YUKO-TVJ-BL1`). Apply this directly through your checkout's discount flow. `null` for `store_credit` reward types — the credit is added to the customer's account automatically. The number of points deducted from the customer's balance. The type of reward that was redeemed. One of `fixed`, `percentage`, `free_shipping`, `free_product`, `store_credit`. The discount amount or percentage associated with the coupon. * For `fixed`: this is the amount in the store's currency (e.g. `5` means 5 off) * For `percentage`: this is the percentage (e.g. `10` means 10% off) * For `free_product`: the free product's price, or `0` if it isn't known * `0` for `free_shipping` and `store_credit` reward types When the generated coupon expires. `null` if the reward has no expiry, and always `null` for `store_credit` rewards. ### Errors | Code | Scenario | What to do | | - | - | - | | `422` | Customer doesn't have enough points (`redemption_failed`, `Insufficient points balance`) | This shouldn't happen if you used `can_redeem` from Endpoint 1 correctly. Show the customer a message: "You don't have enough points for this reward." | | `422` | Reward not found or is inactive (`redemption_failed`, `Reward not found or inactive`) | The reward may have been deactivated by the merchant. Refresh the rewards list by calling Endpoint 1 again. | | `422` | Customer is excluded from the loyalty program (`Customer banned`), or loyalty is turned off (`Loyalty not enabled`) (`redemption_failed`) | Hide the loyalty panel. | | `422` | The discount or store credit couldn't be created on Shopify (`redemption_failed`, e.g. `Failed to generate platform coupon`) | Show a generic error and let the customer retry or continue without the reward. | | `422` | `customer_id` or `reward_id` missing, or `reward_id` isn't a UUID (`validation_error`) | Fix the request body. | | `404` | Customer not found | The `customer_id` is not in Yuko. | | `401` | Invalid API key | Check the `Authorization` header. | ### Display logic after a successful redemption ```text theme={null} On successful 201 response: 1. Show the customer their new discount code: "Your reward is ready! Code: {coupon_code}" 2. Auto-apply the discount code to the order if your checkout supports it 3. Update the displayed points balance: New balance = old points_balance - points_spent 4. Remove the redeemed reward from the "available rewards" list in your UI ``` After a successful redemption, the customer's points balance has decreased. If you have the old balance cached, subtract `points_spent` from it to show the updated balance without making another API call. *** ## Full checkout flow * **Shopify Customer ID** — only if the customer is logged in (needed for Endpoint 1) * **Product IDs and Variant IDs** for every item in the cart (needed for Endpoint 2) | Customer state | Call Endpoint 1? | Call Endpoint 2? | Call Endpoint 3? | | - | - | - | - | | Logged in, Shopify Customer ID available | ✅ Yes | ✅ Yes — include `customer` field | ✅ Yes — when customer clicks "Redeem" | | Guest checkout | ❌ No — skip | ✅ Yes — omit `customer` field | ❌ No — guests can't redeem points | Do not wait for one to finish before starting the other. Running them in parallel keeps checkout fast. ```bash theme={null} # Call 1 — Only if the customer is logged in curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=9049402769586" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` ```bash theme={null} # Call 2 — Always run this, for both logged-in and guest customers curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/points/estimate" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "customer": { "id": "9049402769586" }, "items": [ { "product_id": "prod_1001", "variant_id": "var_1001_red_m" } ] }' ``` Combine both responses to display the loyalty section. This is only an example; adapt it to your UI. ```text theme={null} ┌──────────────────────────────────────────────┐ │ 🏆 Your Rewards │ │ │ │ Points Balance: 650 pts │ │ │ │ ✅ $5 off your next order │ │ Costs 500 pts [Redeem →] │ │ │ │ 🔒 10% off your next order │ │ Earn 350 more points to unlock │ │ │ │ 🎟️ You have an unused coupon │ │ YUKO-TVJ-BL1 [Apply to order] │ │ │ │ 💰 You'll earn 120 points on this order! │ └──────────────────────────────────────────────┘ ``` When a customer clicks "Redeem" on an available reward, call Endpoint 3 with their `customer_id` and the `reward_id` of the reward they selected. ```bash theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeem" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "customer_id": "9049402769586", "reward_id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5" }' ``` On a `201` response: * Take the `coupon_code` from the response and apply it to the checkout order * Update the displayed points balance: `new_balance = old_balance - points_spent` * Remove the redeemed reward from the UI rewards list The `reward_id` is the `id` field from the `rewards[]` array in the Endpoint 1 response. You should store these IDs when you render the rewards list so they're ready when the customer clicks. *** ## Error handling The loyalty panel is an **enhancement** to checkout — it must never block or break the purchase. If any Yuko API call fails, hide the loyalty panel silently and let checkout continue. Full list of error codes → [Errors reference](/developer/api/errors) ### HTTP status codes | Code | Meaning | What to do | | - | - | - | | `200` | Success | Use the response data | | `401` | Unauthorized — API key missing or incorrect | Check the `Authorization` header and key value | | `403` | Forbidden — token missing the right scope (`insufficient_scope`) | Ask the merchant to create a key with `write:rewards` and `read:points` | | `404` | Customer not found | The `customer_id` doesn't exist in Yuko — hide the panel silently | | `422` | Validation error (`validation_error`) or failed redemption (`redemption_failed`) | Check the `message` field in the response | | `429` | Rate limit exceeded | Wait 1 second and retry once — see [Rate Limits](#rate-limits) | | `500` | Yuko internal error | Retry once. If it persists, hide the panel and let checkout continue. | ### Error response format All error responses from Yuko return an `error` object with a `code` and a `message`: ```json theme={null} { "error": { "code": "not_found", "message": "Customer not found" } } ``` ### Recommended handling pattern ```text theme={null} 401 → Log the error. Hide the loyalty panel. 404 → Customer has no Yuko account yet (common for new customers). Hide silently. 429 → Wait 1 second. Retry the same request once. 5xx → Retry once after a short delay. If it fails again, hide the panel. Any other error → Hide the loyalty panel. Never block checkout. ``` *** ## Rate limits See full details → [Rate Limits reference](/developer/api/rate-limits) | Limit | Value | | - | - | | Requests per second (per API token) | 10 | | Error when exceeded | HTTP `429 Too Many Requests` | | Reset interval | 1 second | **Cache the rewards list.** The `rewards[]` catalogue changes infrequently — you can cache it for 5–15 minutes. The `points_balance` and `customer_rewards[]` are customer-specific and should be fetched fresh each checkout session. * **Don't poll.** Call both endpoints once when the customer arrives at checkout. * **Retry with a delay.** On a 429, wait 1 second and retry once. Never retry immediately. *** ## Security rules **These rules are not optional.** Violating them exposes the merchant's API key and puts their store at risk. ### Rule 1: Never expose the API key on the frontend The key is a secret. It must only ever live on your backend server. * ❌ Never put it in browser-side JavaScript * ❌ Never put it in a mobile app binary * ❌ Never commit it to a public code repository * ✅ Make all Yuko API calls from your backend — pass only the results to your frontend ### Rule 2: Use HTTPS everywhere Always send requests to the `https://` base URL so the API key is never sent unencrypted. *** ## Authentication setup options Choose whichever approach fits your architecture. This is the simplest approach. No OAuth flow required. How it works: The merchant goes to **Shopify Admin → Apps → Yuko Loyalty → Integrations → REST API** and creates a **Custom Key** with `write:rewards` and `read:points`. The merchant copies the token and pastes it into your checkout platform's merchant settings. Your backend reads the token from your settings and includes it in every Yuko API request for that merchant. **Pros:** Fast to set up. No OAuth flow required.\ **Cons:** The merchant must manually copy-paste the token. If they regenerate it, it needs to be updated on your side. This gives merchants a one-click **Connect Yuko** button inside your checkout dashboard — no manual copy-pasting. How it works: Add a "Connect Yuko" button in your merchant dashboard settings. When the merchant clicks it, redirect them to Yuko's OAuth authorization page. The merchant reviews and approves the connection inside Yuko. Yuko redirects back to your platform with an authorization code. Your backend exchanges this code for an access token. Store the token securely. Use it for all Yuko API calls for that merchant going forward. Integration can be initiated from either side: | Initiated by | Description | | - | - | | **Your checkout platform** | You add the "Connect to Yuko" button. The merchant clicks it from your dashboard. | | **Yuko** | Yuko lists your platform as an option. The merchant connects from inside their Yuko settings. | To get started with OAuth, contact the Yuko team to receive your OAuth client credentials (client ID and client secret) and configure your redirect URI → [Book a call](https://cal.com/rameshelamathi/yuko-demo) *** ## Testing Contact the Yuko team for a test key, or use a real merchant's key on a development Shopify store. ```bash theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=9049402769586" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` **Expected:** HTTP 200 with `data.points_balance` in the response body.\ If you get HTTP 401, the API key is wrong — check for extra spaces or incorrect values. ```bash theme={null} curl --request GET \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=REAL_CUSTOMER_ID" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ``` Verify: * `points_balance` returns a number * `rewards[]` is populated with the merchant's reward options * `can_redeem` correctly reflects the customer's balance * `customer_rewards[]` returns any existing coupons ```bash theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/points/estimate" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "customer": { "id": "REAL_SHOPIFY_CUSTOMER_ID" }, "items": [ { "product_id": "REAL_PRODUCT_ID", "variant_id": "REAL_VARIANT_ID" } ] }' ``` Verify: the request returns HTTP 200 with `points_earned` and `message`. `points_earned` is currently always `0` (see the warning in Endpoint 2). Use a `reward_id` from the Endpoint 1 response (choose one where `can_redeem === true`). ```bash theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeem" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "customer_id": "REAL_SHOPIFY_CUSTOMER_ID", "reward_id": "REWARD_ID_FROM_ENDPOINT_1_RESPONSE" }' ``` Verify: * Response is HTTP `201` (not 200) * `coupon_code` is returned and is a valid Shopify discount code * `points_spent` matches the `points_cost` of the reward you redeemed * `expires_at` is present (or `null` if the reward has no expiry or is store credit) ```bash theme={null} curl --request POST \ --url "https://api.yukoapp.com/api/v1/public/points/estimate" \ --header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ --header "Content-Type: application/json" \ --data '{ "items": [ { "product_id": "REAL_PRODUCT_ID", "variant_id": "REAL_VARIANT_ID" } ] }' ``` Verify: Returns HTTP 200 with no `customer` field in the request body. | Test | How to trigger | Expected result | | - | - | - | | Wrong API key | Use `Bearer wrong_key` | HTTP 401 | | Unknown customer | Use `customer_id=0000000` | HTTP 404 | | Missing items | Send `"items": []` | HTTP 422 | | Guest checkout | Omit `customer` entirely | HTTP 200 | | Redeem with insufficient points | Use a `reward_id` where `can_redeem === false` | HTTP 422 | | Redeem with invalid reward ID | Use a made-up UUID as `reward_id` | HTTP 422 | * Customer with 0 points — panel shows rewards, all greyed out * Customer with no prior redemptions — `customer_rewards[]` is an empty array — handle without crashing * Guest customer — Endpoint 1 and Endpoint 3 are not called; only show earn estimate from Endpoint 2 * `points_earned === 0` — hide the earn message; do not show "0 points" * After a successful redemption — UI updates the balance and removes the redeemed reward from the list *** ## Go-live checklist ### Security * API key stored as an environment variable — not hardcoded anywhere * All Yuko API calls made from the backend server — not the browser * HTTPS used for all requests ### API integration * `GET /customers/rewards/redeemable` working and returning correct data * `POST /points/estimate` working for both logged-in and guest customers * `POST /customers/rewards/redeem` working — returns `201` with a valid `coupon_code` * Endpoints 1 and 2 fire in parallel at checkout load — not sequentially * Endpoint 3 is only called on an explicit customer "Redeem" click — not at page load * If any call fails, checkout continues without breaking ### UI * Points balance displayed clearly * Redeemable rewards shown with a "Redeem" button for rewards where `can_redeem === true` * Rewards with insufficient points shown as greyed-out with "X more points needed" * Unused coupon codes from `customer_rewards[]` surfaced with an apply action * Points earn estimate shown when `points_earned > 0` * After a successful redemption: balance updates, redeemed reward is removed from list, new coupon code is surfaced or auto-applied * No loyalty UI shown for guest checkouts * Empty `customer_rewards[]` handled gracefully — no crash, no blank space ### Rate limiting * Retry logic in place for HTTP 429 — wait 1 second, retry once * No polling within a single checkout session ### Authentication * Plan in place for token rotation if the merchant regenerates their API key *** ## API reference links Points balance, available rewards, and unused coupons for a customer. Burn a customer's points and generate a discount code. How many points a customer earns on a given cart. How Bearer Token authentication works in the Yuko API. Full list of HTTP error codes and what they mean. Request limits and how to handle 429 errors. *** ## Support For integration questions, OAuth setup, and onboarding support. Full Yuko API reference. # VIP Tier Change Object Source: https://docs.yuko.so/vip-tier-change-object How VIP tier changes appear in a customer's activities in the Yuko REST API. When a customer enters, moves up or down, or keeps a VIP tier, Yuko records it in the customer's activity log. These records are returned by [List customer activities](/developer/api/list-customer-activities) (`GET /public/customers/activities`, requires the `read:activities` scope) as [activities](/activity-object) with `source_type` set to `loyalty_tiers`. To get only tier changes, pass `source_type=loyalty_tiers`. To read a customer's current tier instead of the history, use [Get customer tier](/developer/api/get-customer-tier). ## Properties Unique identifier for the tier change activity. Yuko's internal UUID for the customer whose tier changed. The kind of tier change. One of `vip_tier_entry` (the customer reached their first tier), `vip_tier_upgrade`, `vip_tier_downgrade`, `vip_tier_retained` (the customer kept their tier at re-evaluation). Always `loyalty_tiers` for tier changes. For tier changes, this is the customer's Yuko UUID. Always `null`; tier changes don't change the points balance. Always `0` for tier changes. Always `null` for tier changes. The tier details of the change. The tier the customer was in before the change. `null` when the customer had no tier (always for `vip_tier_entry`, and for a manual tier assignment to a customer with no tier). The tier's unique identifier. The tier's name. An empty string if the tier has since been deleted. The tier the customer is in after the change. `null` for a `vip_tier_downgrade` where the customer dropped out of all tiers. The tier's unique identifier. The tier's name. When the tier change was recorded (ISO 8601). ```json The VIP Tier Change object theme={null} { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "activity_type": "vip_tier_upgrade", "source_type": "loyalty_tiers", "source_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76", "entry_type": null, "points": 0, "earning_type": null, "metadata": { "previous_tier": { "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "name": "Silver" }, "current_tier": { "uuid": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28", "name": "Gold" } }, "created_at": "2025-12-17T12:36:33+00:00" } ``` # VIP Tiers Source: https://docs.yuko.so/vip-tiers/overview Reward your most valuable customers with tier levels, point multipliers, per-campaign bonuses and entry benefits. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → VIP ## Introduction VIP Tiers add levels to your loyalty program, such as Bronze, Silver and Gold. Customers move into a tier when their points earned, amount spent or order count reaches the tier's threshold. Each tier can earn points faster and unlock benefits such as discounts, free shipping, free products, bonus points or store credit. VIP is its own item in the Yuko sidebar, next to Loyalty and Referral. ## What problem this solves A flat loyalty program rewards every customer the same way. Your best customers usually drive most of your revenue. Tiers recognise them and give everyone else a clear goal to work toward. ## When to use * A small group of customers contributes a large share of revenue. * You want a progression customers can climb, with a clear "you've made it" moment. * You want top customers to earn faster on specific actions, such as orders or reviews. * You want to give recurring perks, such as monthly store credit, to high-value customers. ## Overview The VIP page has four sections: * **VIP Tiers Status**: turns the VIP program on or off. * **Tiers**: your tier list. Click **Add New Tier** to create a tier, or **Edit** to open one. * **Tiers Calculation**: what qualifies a customer for a tier and over which period. * **Advanced Program Settings**: the program start month and what happens when a period resets. Below it, **Reset VIP Tiers** recalculates every customer's tier. Each tier has: * A name, description and icon. * A **Tier entry** threshold. * A **Default point multiplier**, plus optional **Campaign rewards** that override it for specific Ways to Earn. * **Entry benefits** that customers receive when they enter the tier. New stores start with three tiers: **Bronze** (the default tier, 0 points, 1x), **Silver** (1,000 points, 2x) and **Gold** (5,000 points, 3x). The default qualification is **Total points earned** over a **Rolling year**. You can rename and change all of these. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). At least one [Way to Earn](/loyalty/ways-to-earn/overview) is active, so customers build up measurable activity. You've decided whether tiers should reward spend, points or order frequency. VIP Tiers are available on select plans. If your plan doesn't include them, the status toggle is disabled and shows an upgrade badge. ## Setup guide ### 1. Turn on VIP Tiers In your Shopify admin, go to **Apps → Yuko Loyalty → VIP**. Under **VIP Tiers Status**, switch the toggle on. The badge next to the page title changes to **Enabled**. Turning VIP Tiers off asks for confirmation and disables all tier-related features. ### 2. Choose how customers qualify Under **Tiers Calculation**, set **Qualification for tier is based on**: | Option | Customers move up by… | Good for | | - | - | - | | **Total points earned** | Earning points from any Way to Earn | Rewarding engagement | | **Total amount spent** | Spending more in your store | Growing revenue | | **Order count** | Placing more orders | Growing purchase frequency | Then set the **Qualification period type**: Customer progress accumulates forever from the program start date. Once achieved, tiers are permanent unless manually adjusted. Customer progress is tracked over a 12-month window. During the first program year, the window runs from your program start date to today. After the first anniversary, it becomes the trailing 12 months from today. Customer qualification progress restarts each calendar year on January 1. In the first program year, progress counts from your program start date. When Calendar year is selected, you can also tick **Include the last year**. This keeps earned tiers active through December 31 of the following calendar year, so a tier earned in 2026 is kept until the end of 2027. Changing the qualification metric, the period type, **Include the last year**, the program start month or the reset option asks you to confirm. After you save, Yuko recalculates tiers for all customers, and some customers may move to a different tier. ### 3. Set the start month and reset behaviour Under **Advanced Program Settings**, pick a month and year. The program starts on the 1st day of that month. Activity before this date doesn't count toward tiers. Under **Tier Reset Options**, pick one: * **Reset After Period End**: automatically moves customers back to lower tiers when program periods reset, based on what they qualify for in the new period. * **No Tier After Reset**: removes customers from all tiers when periods reset, so they have to re-qualify. Click **Save** in the save bar at the top of the page. ### 4. Create or edit a tier Under **Tiers**, click **Add New Tier**, or click **Edit** on an existing tier. * **Tier name**: shown to customers on your storefront. * **Description**: optional text about the tier. Enter the points, amount or number of orders needed to enter this tier. The label matches your qualification metric. The default tier's threshold can't be changed. The multiplier applied to points earned by customers in this tier, for example `1.5` for 1.5x. Use **Campaign rewards** (next step) to override it for a specific Way to Earn. Under **Campaign rewards**, click **Add campaign reward** and fill in: * **Name**: shown on your storefront. * **Campaign**: the Way to Earn this reward applies to. * **Point multiplier**: multiplies the points this campaign awards. Between 1.1x and 10x. * **Bonus points**: adds a fixed number of points on top (a whole number, at least 1). Turn on at least one of the two options. Each Way to Earn can have only one campaign reward per tier. Campaigns without an entry keep the tier's default multiplier. Under **Entry benefits**, click **Add Benefits** and pick a benefit type. See [Tier benefits](#tier-benefits) below. Under **Customize tier icon**, keep **Default** or choose **Custom** and upload your own image (JPG, PNG, GIF or WEBP, under 1 MB). Click **Save**. The **Summary** card on the right lists the threshold, multiplier, benefits and campaign rewards. After you save a tier, a read-only **Tier Identifier** appears under the name, for example `YUKO:TIER:…`. Copy it to reference the tier in integrations. Yuko adds this identifier as a Shopify customer tag to customers in the tier and creates a matching Shopify customer segment, so you can target tier members in Shopify and in your marketing tools. ### 5. Turn on tiers for your Ways to Earn Tier multipliers and campaign rewards only apply to a Way to Earn when its **Tiers** toggle is on. Open the Way to Earn under **Loyalty → Programs** and check **Tiers**. The panel then lists the **Tier Multipliers** for each tier. The default campaigns created at install have Tiers turned on. If a campaign reward points at a Way to Earn that was deleted, turned off or has Tiers turned off, the tier shows a warning and the reward isn't applied until you fix it. ## Tier benefits Entry benefits are given to a customer when they enter the tier. The types are: | Benefit | What the customer gets | | - | - | | **Amount discount** | A fixed amount off | | **% off discount** | A percentage off (up to 50%) | | **Free shipping** | Free shipping, with optional country restrictions and a maximum shipping price | | **Free product** | A selected product for free | | **Bonus points** | A one-off number of points (**Number of points**), with optional expiry | | **Store credit** | Store credit: one time, recurring or as cashback (see below) | | **Custom benefit** | A text-only perk shown to customers, such as "Early access to new products". Yuko doesn't apply it automatically. | ### Discount benefit options Amount discount, % off discount, Free shipping and Free product benefits share these settings: * **Method**: **Automatic** applies the discount at checkout without a code. **One-time code** (labelled **One-time discount code** on discount benefits) issues the customer a code and lets you set a **Coupon Prefix**. * **Applies to**: All products, Specific collections or Specific products (amount and percentage discounts). Amount discounts can also be set to **Only apply discount once per order**. * **Purchase type** (amount, percentage and free shipping benefits): One-time purchase, Subscription or Both. Subscription options only take effect if your store sells subscriptions. * **Minimum purchase requirements**: none, a minimum purchase amount or a minimum quantity of items. * **Combine with other discounts**: product and order discounts. Amount, percentage and free product benefits can also combine with free shipping. * **Expiry Settings**: an optional expiry after a number of days, weeks, months or years. ### Store credit benefits Each tier can have one store credit benefit. Pick a **Store Credit Type**: * **One time**: a single store credit amount when the customer enters the tier. * **Recurring**: credit issued on a schedule. Set the **Recurring Period** (weeks, months or years), the start day or date, the **Recurring Interval** (for example, every 2 months) and the **Maximum Times** it repeats. * **% cashback after every purchase**: the customer earns a percentage of each purchase back as store credit (**Cashback %**). You can add an expiry, and with **Enable Holdings** you can hold each credit for a set period (**Holding Value** and **Holding Period**) before the customer can use it. ## How it works * **Evaluation.** Yuko evaluates a customer's tier when their points change (for points-based tiers) or when an order completes (for spend- and order-based tiers). It also re-checks tiers on a schedule, so period resets are applied. * **Placement.** The customer is placed in the highest tier whose threshold they meet within the current qualification window. * **Upgrades** apply straight away. Entry benefits for the new tier are issued, and the Shopify customer tag is updated. * **Retention.** Once a customer enters a tier, they keep it until their retention window ends, even if their activity drops. The window ends: * **Lifetime**: never. * **Calendar year**: December 31 of the year they entered the tier, or December 31 of the following year with **Include the last year**. * **Rolling year**: 12 months after they entered the tier. When the window ends, the **Tier Reset Options** setting decides whether they move down to the tier they qualify for or lose their tier. * **Admin changes skip retention.** Changing the qualification settings or using **Reset All Tiers** re-evaluates everyone under the new rules, regardless of retention. These recalculations don't send customer-facing workflow events. * **Points.** The tier multiplier and campaign bonus points are added as a separate tier bonus entry in the customer's activity, alongside the base points. Multipliers apply when points are awarded, not retroactively. * **Bulk updates.** While Yuko updates customer tags or metafields in bulk, a banner at the top of the VIP page shows the update is in progress, or that it failed. ### On your storefront * The tier name, description, icon and benefits appear in [Floating Rewards](/onsite-widgets/floating-launcher), the [Rewards Landing Page](/onsite-widgets/rewards-landing-page) VIP block and the [Customer Account Page](/onsite-widgets/customer-account-page). * **Free product** tier benefits are shown as product cards in Floating Rewards, [Cart Redeem](/onsite-widgets/cart-redeem) and [Loyalty Nudges](/onsite-widgets/loyalty-nudges). ### Notifications and automations * The **Tier unlocked** email is sent when a customer reaches a new tier. Edit it under **Loyalty → Emails**. See [Loyalty emails](/emails/loyalty-emails). * [Workflows](/workflows/triggers-and-conditions) have VIP triggers: VIP Tier Entry, Upgrade, Downgrade, Retained, Retention Warning, Milestone Nudge and Period Start. **VIP Tier Retention Warning** fires before a customer's retention window ends, so you can nudge them to keep their tier. * [Shopify Flow](/integrations/shopify-flow) has VIP Tier Entry, Upgrade and Downgrade triggers. ### Assign a tier manually You can override a customer's tier from **Customers**: Go to **Customers** and click the customer. In the **VIP tier** card, click **Assign tier**. Pick a **Tier**, optionally set **Expires at (optional)** and add a **Note (optional)** with the reason. The card now shows a **Manual** badge and when the override expires. The expiry date sets both the override expiry and the retention expiry. Leave it empty for no expiry. Click **Clear override** to return the customer to automatic evaluation. See [Customers](/loyalty/customers). ### Reset all tiers Under **Reset VIP Tiers**, click **Reset All Tiers** and confirm with **Reset Tiers**. Yuko recalculates every customer's tier from their current points or spend history and places them in the tier they qualify for now. This can't be undone. ### Limitations * The default tier can't be deleted, and its threshold can't be changed. You can rename it. * A Way to Earn can have only one campaign reward per tier. * Each tier can have only one store credit benefit. * Tier multipliers apply only to Ways to Earn with **Tiers** turned on. They don't apply to points you add manually. * Multiplier booster campaigns can be set to **Ignore if customer earned VIP tier multiplier**. See [Booster campaigns](/loyalty/booster-campaigns/overview). ## Examples * **Revenue-focused (Total amount spent, Lifetime):** * Bronze: \$0, 1x * Silver: \$400, 1.5x, 5% off discount (one-time code) * Gold: $1,000, 2x, free shipping (automatic) and $10 store credit every month * **Engagement-focused (Total points earned, Rolling year):** * Bronze: 0 points, 1x * Silver: 1,000 points, 1.5x, plus a campaign reward of 3x on **Write a review** * Gold: 5,000 points, 2x, 5% cashback as store credit after every purchase * **Frequency-focused (Order count, Calendar year with Include the last year):** * Bronze: 0 orders * Silver: 3 orders, 200 bonus points on entry * Gold: 8 orders, a free product and a +100 bonus points campaign reward on **Place an order** ## Best practices **Keep it to 3–4 tiers.** More tiers make each one feel less special. **Make higher tiers clearly better.** A 1.1x multiplier rarely changes behaviour; 2x usually does. **Use campaign rewards to steer behaviour.** A bigger multiplier on reviews or social follows for top tiers rewards the actions you want most. **Use the Tier Identifier segment** to send VIP-only campaigns from Shopify or your email tool. **Set up a retention reminder.** A workflow on **VIP Tier Retention Warning** gives customers a reason to buy before they lose their tier. ## FAQs No. The default tier can't be deleted and its threshold is fixed. You can rename it and change its multiplier, benefits and icon. Usually, because the default tier has no threshold. A customer can show **No tier** in Customers, for example after a period reset with **No Tier After Reset**, until they're evaluated again. Yes. Yuko recalculates tiers, so some customers may move. Tell your customers about major changes so VIPs aren't surprised. A campaign reward replaces the tier's default multiplier for that Way to Earn and can also add fixed bonus points. Ways to Earn without a campaign reward use the default multiplier. Nothing until their retention window ends. Downgrades are skipped while the window is active. After it ends, the customer moves to the tier they qualify for, or loses their tier if you chose **No Tier After Reset**. Yes. Yuko adds the identifier as a tag to customers in the tier, removes it when they leave, and keeps a Shopify customer segment for the tier up to date. ## Related Configure how customers earn points across your store. Set up the rewards customers can redeem with their points. Run time-bound multipliers, bonuses and challenges on top of earning. Point labels, earning and revert statuses, exclusions and order tags. View balances and activity, adjust points and assign tiers. Reward your best customers with tier multipliers and benefits. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Action Nodes Source: https://docs.yuko.so/workflows/action-nodes The workflow steps that do something for the customer, Send Email, Coupon, Points Credit and Points Debit, with every setting explained. **Where to find this:** Inside any workflow, click the **+** on a connecting line → **Add Node** → **Actions** ## Introduction Action nodes are the steps that actually do something when a customer reaches them. The **Add Node** dialog lists these actions: | Node | What it does | | - | - | | [Send Email](#send-email) | *"An email will be sent to the contact when they reach this step."* | | [Coupon](#coupon) | *"Generate a unique coupon code for the contact at this step."* | | [Points Credit](#points-credit) | *"Credit loyalty points to the contact when they reach this step."* | | [Points Debit](#points-debit) | *"Deduct loyalty points from the contact when they reach this step."* | | [WhatsApp](/workflows/whatsapp-node) | Send a WhatsApp template through a connected provider | | [Engati](/workflows/partner-nodes) / [kwikEngage](/workflows/partner-nodes) | Send a template message through Engati or Kwik Engage | Timing and logic nodes (**Time Delay**, **If / Else**) are covered in [Time Delay & Exit](/workflows/wait-and-exit) and [Triggers & Conditions](/workflows/triggers-and-conditions). Click any node on the canvas to open its settings panel. Save the panel to apply your changes. ## Send Email Sends an email to the customer. Pick **Send Email** in **Add Node**. A new email node starts with the subject *New Email*. Click the node. The panel shows a preview of the email (switch between **Desktop view** and **Mobile view**). Click **Edit** to open the [Template Editor](/emails/template-editor). Set the subject, preview text, title, message, CTA and footer. Use [shortcodes](/emails/shortcodes). The **Available Template Variables** card lists the shortcodes for this workflow's trigger, plus the Redemption group. Click **Save**. * The node card shows **Emails sent** so far. * Emails use your sender settings from [Email Settings](/emails/sender-and-branding). * The [Advanced Editor](/emails/template-editor#advanced-editor) is available on select plans. ## Coupon Creates a unique Shopify discount code for the customer at this step. Show it in a later Send Email node with the **Coupon** block in the Advanced Editor. | Setting | Options | | - | - | | **Node Identifier** | A random identifier for this node, with a copy button (*"Unique identifier for this coupon node."*). Email coupon blocks use it to find this coupon. | | **Discount Type** | **Percentage (%)** (default, 10), **Amount** or **Free Shipping** | | **Value** | The percentage or amount (not shown for Free Shipping) | | **Set validity** | Toggle on and enter **Valid upto (in days)** to make the code expire | | **Purchase type** | **One-time purchase**, **Subscription** or **Both** | | **Minimum purchase requirements** | **No minimum requirements**, **Minimum purchase amount** or **Minimum quantity of items** | | **Product Restrictions** | **Applies to**: **All products**, **Specific collections** or **Specific products**. For Amount discounts, **Only apply discount once per order**. | | **Shipping Restrictions** (Free Shipping) | **All countries** or **Selected countries**, and **Exclude shipping rates over a certain amount** with a **Maximum shipping rate** | | **Combinations** | Whether the code combines with **Product discounts**, **Order discounts** and **Shipping discounts** | **Pair Coupon with Send Email.** Put the Coupon node first, then add the **Coupon** block in the email and pick this node's identifier, so the customer sees their code. ## Points Credit Adds points to the customer's balance. Available on Shopify stores. | Setting | What it does | | - | - | | **Method** | **Fixed amount of points**: the same number of points for everyone. **Incremental points**: points based on the order amount. You can only choose **Incremental points** when the workflow trigger is **Order Paid**. On every other trigger, Method is fixed to **Fixed amount of points**. | | **Points to earn** | Fixed: the number of points to credit. Incremental: the points earned *for every* **Amount spent**. | | **Amount spent** | Incremental only. For example, 1 point for every 10 spent gives 25 points on an order with a subtotal of 250. | | **Credited reason** | *"Store why these points were credited for support and audit logs."* Shown in the customer's points history. | | **Enable points expiry for this credit** | Expire these points after **Expire after** N **Days**, **Weeks**, **Months** or **Years**. | | **Enable on-hold period before crediting points** | Hold the points as pending for **Hold points for** N **Days**, **Weeks**, **Months** or **Years** before they become available. | **Incremental points** use the order subtotal, which is why they're only offered on the **Order Paid** trigger. If the order can't be found or its subtotal is zero, the step fails and the customer's run stops there. Points credited by a workflow count as earned points. Without an on-hold period, they fire the **Earn Points** event right away, which also sends the built-in **Points earned** email if it's active. ## Points Debit Removes points from the customer's balance. Available on Shopify stores. | Setting | What it does | | - | - | | **Points to debit** | The number of points to remove | | **Debited reason** | *"Store why this debit happened for support and audit logs."* | If the customer doesn't have enough points, the step fails with *"Insufficient point balance"* and nothing is deducted. The customer doesn't continue to the next steps, and their subscriber status becomes **Failed**. You can see the reason in [Analytics](/workflows/analytics). To avoid failed runs, put an **If / Else** with **Points Balance** *is at least* your debit amount before the Points Debit node (available on loyalty, VIP and booster triggers). ## Examples **1. Welcome bonus.** Trigger **Joined Loyalty Program** → Points Credit (Fixed, 100, reason *Welcome bonus*) → Send Email. **2. Downgrade win-back.** Trigger **VIP Tier Downgrade** → Coupon (Percentage, 15, valid 14 days) → Send Email with the Coupon block. **3. Extra points on paid orders.** Trigger **Order Paid** → Points Credit (Incremental, 1 point for every 20 spent, hold for 14 days). ## Best practices **Always fill in the reason.** Support teams rely on **Credited reason** and **Debited reason** to explain balance changes. **Use the on-hold period for order-based credits.** It gives returns time to happen before the points can be spent. **Give coupons a validity.** An expiry date creates urgency and keeps old codes from piling up. ## FAQs No. The Coupon node supports Percentage, Amount and Free Shipping discounts. Free-product rewards are available as a [way to redeem](/loyalty/ways-to-redeem/free-product). The node credits exactly the points you set (or the incremental calculation). A credit fires **Earn Points**. If your workflow's trigger is also Earn Points, use **No re-entry** or a **Has Not in This Flow** profile filter so customers don't loop through it again. ## Related A step-by-step example from blank canvas to a Live workflow. Events that start a workflow, filters, re-entry and If / Else. Send Email, Coupon, Points Credit and Points Debit. Pause a workflow and end it cleanly. Send WhatsApp templates through any of 13 providers. Subscribers, timelines, failures and email performance. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Workflow Analytics Source: https://docs.yuko.so/workflows/analytics Follow every customer through a workflow on the Subscribers tab, see why a step failed, and track email delivery, opens and clicks on the Emails tab. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Workflows → (any workflow) → **Analytics** ## Introduction Each workflow has its own **Analytics** page (*"Track subscribers and email performance for this workflow."*). It has two tabs: * **Subscribers**: every customer who entered the workflow, their status, and a step-by-step timeline. * **Emails**: every email the workflow's Send Email nodes sent, with delivery, open and click status. Open it with the **Analytics** button at the top of the workflow editor. ## Subscribers tab A **subscriber** is one customer's run through the workflow. If re-entry is allowed, the same customer can appear more than once. **Metric cards:** **Completed**, **In Progress** and **Failed**. Click a card to filter the table to that status. **Table columns:** | Column | Shows | | - | - | | **Subscriber ID** | The ID of this run | | **Email** | The customer's email | | **Trigger Type** | The trigger that started the run | | **Date Entered** | When the customer entered the workflow | | **Status** | **Completed**, **In Progress** or **Failed** | | **Timeline** | **View** opens the step-by-step timeline. **Hide** closes it. | Search the table with **Search by email**, or filter it by **Status**. ### Timeline and failure reasons Click **View** on a row to see each step the customer went through, with its **Step Name**, **Type**, **Status**, **Retries** and **Completed At** time. Use the refresh button in the timeline header to reload it. When a step **failed**, an **"i"** icon appears next to its status. Hover over it to see the reason, for example: * *"Customer phone number not found"* (WhatsApp, Engati or kwikEngage node) * *"Insufficient point balance"* (Points Debit) * *"Order not found"* (Points Credit set to Incremental when the order can't be found) * A provider API error from a WhatsApp node Some failures (WhatsApp and partner nodes) let the customer continue to the next step. Others, such as Points Credit and Points Debit failures, stop the run and mark the subscriber **Failed**. ## Emails tab **Metric cards:** **Delivered**, **Opened**, **Clicked** and **Bounced**. Click a card to filter. **Table columns:** | Column | Shows | | - | - | | **Subscriber ID** | The run the email belongs to | | **Customer** | The recipient | | **Node Name** | Which Send Email node sent it | | **Sent At** | Send time, or *Not sent* | | **Status** | Delivery status | | **Skipped** | **Yes** if the email wasn't sent. Hover the info icon for the reason. | | **Opened** / **Clicked** | Whether the customer opened the email or clicked a link | Search with **Search emails** or filter by **Status** (**Delivered**, **Clicked**, **Opened**, **Bounced**, **Skipped**). ## How to use it After you turn a workflow on, open **Analytics** and check that subscribers move from **In Progress** to **Completed**. Filter by **Failed**, click **View** on a row, and hover the **"i"** icon on the failed step. Fix the cause (connect a provider, add a balance check, change the trigger), then watch new subscribers. ## Best practices **Check Failed weekly.** Most failures point to a setup issue, such as a disconnected WhatsApp provider or customers without phone numbers. **Compare Opened and Clicked across nodes.** **Node Name** tells you which email in a multi-step workflow performs best. **Look at Skipped reasons.** They explain emails that were triggered but never sent. ## FAQs They're usually waiting on a **Time Delay** node. Open their timeline to see the last completed step. Open the email from **Loyalty**, **Referral** or **Membership → Emails**. The editor shows **Stats** and a **View Details** link. See [Emails](/emails/overview#email-analytics). No. Use the subscriber statuses and timelines to see where customers stopped. ## Related A step-by-step example from blank canvas to a Live workflow. Events that start a workflow, filters, re-entry and If / Else. Send Email, Coupon, Points Credit and Points Debit. Pause a workflow and end it cleanly. Send WhatsApp templates through any of 13 providers. Subscribers, timelines, failures and email performance. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Build your first workflow Source: https://docs.yuko.so/workflows/build-your-first A step-by-step tutorial that rewards customers who move up a VIP tier with bonus points and a congratulations email, then takes the workflow Live. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Workflows → **Create Workflow** ## Introduction In this tutorial you'll build a **VIP upgrade bonus** workflow: ``` VIP Tier Upgrade ──→ Points Credit (200 points) ──→ Send Email ──→ Exit ``` When a customer moves up to a higher [VIP tier](/vip-tiers/overview), they get 200 bonus points and an email congratulating them on the new tier. The built-in [Tier unlocked](/emails/loyalty-emails#tier-unlocked) email only covers a customer's first tier, so this workflow fills the gap for upgrades. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). VIP tiers are set up with at least two tiers. See [VIP Tiers](/vip-tiers/overview). Your sender details are set in **Account → Email Settings**. See [Email Settings & Custom Domains](/emails/sender-and-branding). ## Setup guide Go to **Workflows** and click **Create Workflow** → **Create from Scratch**. The new workflow opens on the canvas as a **Draft**. Click the title at the top and rename it, for example *VIP upgrade bonus*. Click the **Trigger** node. In the trigger list (grouped by **Loyalty**, **VIP Tiers**, **Referral**, **Membership** and **Orders**), search for and select **VIP Tier Upgrade**. In the trigger panel under **Re-entry criteria**, choose **Allow re-entry**, so a customer who upgrades again later (Silver → Gold → Platinum) gets the bonus each time. Under **Trigger filters**, click **Add**, choose the **Current Tier Name** field and set it to, for example, *Gold*. Only upgrades into Gold will enter the workflow. Skip this step to reward every upgrade. Click the **+** on the line below the trigger. In **Add Node**, pick **Points Credit**. Set **Method** to **Fixed amount of points**, **Points to earn** to *200* and **Credited reason** to *VIP upgrade bonus*. Save the node. Click the **+** below Points Credit and pick **Send Email**. In the node panel, click **Edit** to open the [Template Editor](/emails/template-editor). Write a subject such as *Welcome to `{{ current_tier_name }}`, `{{ first_name }}`!* and a message that mentions the bonus and the new balance with `{{ points_balance }}`. Click **Save**, then go back to the workflow. Every path already ends in an **Exit** node (*"The automation will stop here."*). There's nothing to configure. In the Template Editor, click **Send Test Email** to see the email in your inbox with sample data. Changes save automatically (you'll see **Saved** at the top). Click **Turn on workflow**. The status changes from **Draft** to **Live**. Running workflows Live is available on select plans. ## How it works 1. A customer's tier is re-evaluated and they move to a higher tier. Yuko fires **VIP Tier Upgrade**. 2. If the customer passes your trigger filters and re-entry rule, they become a **subscriber** of the workflow. 3. **Points Credit** adds 200 points with the reason *VIP upgrade bonus*. You'll see it in the customer's activity on the [Customers](/loyalty/customers) page. 4. **Send Email** sends your email. Shortcodes like `{{ current_tier_name }}` are filled in for this customer. 5. The subscriber reaches **Exit** and is marked **Completed** in [Analytics](/workflows/analytics). ## Variations * **Wait before emailing:** add a [Time Delay](/workflows/wait-and-exit) of 1 Day(s) before Send Email, with **Set a delay until a specific time of day** at 10:00. * **WhatsApp instead of email:** swap Send Email for the [WhatsApp node](/workflows/whatsapp-node). * **Different bonus per tier:** add an **If / Else** node after the trigger with **Current Tier Name** equals *Platinum*. Give the **Yes** path a bigger Points Credit. * **Downgrade win-back:** build a second workflow on **VIP Tier Downgrade** with a [Coupon](/workflows/action-nodes#coupon) and a Send Email. ## Best practices **Use a clear Credited reason.** It appears in the customer's points history, so support can see where the points came from. **Mind the order.** Put Points Credit before Send Email so `{{ points_balance }}` already includes the bonus. **Watch the first few subscribers.** Open **Analytics** after going Live and check that subscribers reach **Completed**. ## FAQs Pick the trigger carefully. Once a trigger is set, the trigger panel shows its filters and re-entry settings rather than the trigger list. To use a different trigger, create a new workflow. Running workflows Live is available on select plans. You can still build and save workflows as Draft. Yes. Points credited by a workflow count as earned points, so the built-in **Points earned** email (if active) also sends. Turn it off, or rely on it instead of a separate Send Email node. ## Related A step-by-step example from blank canvas to a Live workflow. Events that start a workflow, filters, re-entry and If / Else. Send Email, Coupon, Points Credit and Points Debit. Pause a workflow and end it cleanly. Send WhatsApp templates through any of 13 providers. Subscribers, timelines, failures and email performance. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Workflows Source: https://docs.yuko.so/workflows/overview Build visual automations that react to loyalty, VIP, referral, membership and order events by sending emails and WhatsApp messages, issuing coupons and adjusting points. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Workflows ## Introduction Workflows are automations you build on a visual canvas. Each workflow starts with one **trigger** (an event such as *Earn Points*, *VIP Tier Upgrade* or *Order Delivered*), then runs the steps you add: wait, branch with **If / Else**, send an email or WhatsApp message, create a coupon, or credit or debit points. Use workflows when the [built-in emails](/emails/overview) aren't enough, for example to send a WhatsApp message when a customer reaches a new tier, wait three days before a follow-up, or treat VIP customers differently from everyone else. ## How a workflow fits together ``` Trigger ──→ Time Delay ──→ If / Else ──Yes──→ Send Email ──→ Exit │ └──No───→ WhatsApp ──→ Exit ``` * **Trigger:** the event that starts the workflow, plus optional trigger and profile filters and re-entry rules. See [Triggers & Conditions](/workflows/triggers-and-conditions). * **Actions:** **Send Email**, **Coupon**, **Points Credit**, **Points Debit**, **WhatsApp**, **Engati** and **kwikEngage**. See [Action Nodes](/workflows/action-nodes), the [WhatsApp node](/workflows/whatsapp-node) and [Partner Nodes](/workflows/partner-nodes). * **Timing:** **Time Delay**. See [Time Delay & Exit](/workflows/wait-and-exit). * **Logic:** **If / Else** splits customers into a **Yes** and a **No** path. * **Exit:** every path ends in an Exit node that Yuko adds for you. Each customer who enters a workflow is a **subscriber**. You can follow every subscriber's path in [Analytics](/workflows/analytics). ## The Workflows list * **Create Workflow** → **Create from Scratch** opens a new, blank workflow. * Tabs: **All**, **Live** and **Draft**, plus an **Event Type** filter and search. * Columns: **Title**, **Trigger Type**, **Subscribers** and **Status** (**Live** or **Draft**). * Select several workflows to set them Live, set them to Draft, or delete them in bulk. New workflows start as **Draft**. Changes on the canvas save automatically. When you're ready, click **Turn on workflow** to make it **Live**. Running workflows Live is available on select plans. The workflow editor needs a desktop-sized screen. On a phone, Yuko shows *"Workflow editor requires desktop view"*. ## Workflows and built-in emails The emails under **Loyalty → Emails**, **Referral → Emails** and **Membership → Emails** run on the same engine, but you manage them from those tabs, not from the Workflows list. If you build a workflow on the same trigger as a built-in email, turn the built-in email off so customers don't get two messages. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). ## Get started [Build your first workflow](/workflows/build-your-first) walks through a complete example. See the full list in [Triggers & Conditions](/workflows/triggers-and-conditions). Choose from [Action Nodes](/workflows/action-nodes) and the [WhatsApp node](/workflows/whatsapp-node). Turn the workflow on, then watch subscribers and emails in [Analytics](/workflows/analytics). ## Best practices **Start small.** A trigger, one action and an exit is a complete workflow. Add branches once the basics work. **Set re-entry deliberately.** Decide whether a customer should go through the workflow once, every time, or at most once per period. **Check Analytics after launch.** Failed steps show the reason, so you can fix setup issues early. ## FAQs Not today. New workflows start from scratch with **Create from Scratch**. A Draft workflow stops accepting new subscribers. Customers who are already in it, for example waiting on a Time Delay, carry on through their remaining steps. Check [Analytics](/workflows/analytics) for subscribers still marked **In Progress**. Not from the workflow builder. For outbound data, see [Integrations](/integrations/overview). ## Related A step-by-step example from blank canvas to a Live workflow. Events that start a workflow, filters, re-entry and If / Else. Send Email, Coupon, Points Credit and Points Debit. Pause a workflow and end it cleanly. Send WhatsApp templates through any of 13 providers. Subscribers, timelines, failures and email performance. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Partner Nodes Source: https://docs.yuko.so/workflows/partner-nodes The standalone Engati and kwikEngage workflow nodes, and why the WhatsApp node, which supports 13 providers, is usually the better choice. **Where to find this:** Inside any workflow, click the **+** on a connecting line → **Add Node** → **Actions** → **Engati** or **kwikEngage** ## Introduction Before the unified [WhatsApp node](/workflows/whatsapp-node) existed, Yuko had two standalone partner nodes: **Engati** and **kwikEngage**. Each sends a template message to the customer's phone number through that partner. They still appear in the **Add Node** picker on Shopify stores, and existing workflows that use them keep working. **For new workflows, use the [WhatsApp node](/workflows/whatsapp-node).** It supports Engati and Kwik Engage as providers, plus 11 others (AISensy, Zoko, WATI, DelightChat, QuickReply.ai, Interakt, BiteSpeed, BotSpace, AskEva, [Whamaa](/integrations/whamaa) and [ConvertWay](/integrations/convertway)), with a provider picker that shows connection status and the same shortcodes as your trigger. ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). The partner is connected under **Integrations**: [Engati](/integrations/engati) or [Kwik Engage](/integrations/kwik-engage). The node uses that connection's credentials to send. ## Engati node *"Send an Engati message to the contact when they reach this step."* | Setting | What to enter | | - | - | | **Namespace** | Your Engati namespace, a unique identifier such as `550e8400-e29b-41d4-a716-446655440000` | | **Endpoint URL** | The Engati API endpoint URL | | **Template Name** | The template identifier (no spaces) | | **Parameters** | One value per template variable, in order. Use plain text or shortcodes. | ## kwikEngage node *"Send a kwikEngage message to the contact when they reach this step."* | Setting | What to enter | | - | - | | **Endpoint URL** | The Kwik Engage API endpoint URL | | **Template Name** | The template identifier (no spaces) | | **Language Code** | The template language, for example `en_US` or `hi_IN` | | **Parameter Count** | How many variables the template has | | **Parameters** | One value per template variable, in order | ## How partner nodes work 1. The customer reaches the node. 2. Yuko takes the phone number from the customer's record. Without one, the step fails with *"Customer phone number not found"*. 3. Yuko calls the partner's API with your template and parameters. 4. The step is marked completed or failed, and the workflow continues to the next node either way. It doesn't wait for the customer to reply. ## Best practices **Migrate when convenient.** Rebuilding a partner node as a WhatsApp node (choosing Engati or Kwik Engage as the provider) gives you the connection badge and trigger-aware shortcodes. **Don't send the same template through two nodes.** Using a partner node and a WhatsApp node for the same message sends it twice. ## FAQs Check that the partner is still connected under **Integrations** and that the customer has a phone number. The failure reason is shown in the subscriber timeline in [Analytics](/workflows/analytics). Use the [WhatsApp node](/workflows/whatsapp-node), which covers 13 providers. ## Related One node for all 13 WhatsApp providers. Choosing and connecting a WhatsApp provider. A step-by-step example from blank canvas to a Live workflow. Events that start a workflow, filters, re-entry and If / Else. Send Email, Coupon, Points Credit and Points Debit. Pause a workflow and end it cleanly. Send WhatsApp templates through any of 13 providers. Subscribers, timelines, failures and email performance. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Triggers & Conditions Source: https://docs.yuko.so/workflows/triggers-and-conditions Every event that can start a Yuko workflow, the trigger and profile filters that narrow who enters, re-entry rules, and If / Else branching. **Where to find this:** Shopify admin → Apps → Yuko Loyalty → Workflows → (any workflow) → click the **Trigger** node ## Introduction Every workflow starts with one **trigger**, the event that puts a customer into the workflow. On the trigger node you can also: * add **trigger filters** (conditions on the event's data) and **profile filters** (conditions on the customer), * choose a **re-entry** rule. Inside the workflow, an **If / Else** node splits customers into a **Yes** and a **No** path using the same kinds of conditions. ## Triggers The trigger list is grouped into **Loyalty**, **VIP Tiers**, **Referral**, **Membership** and **Orders**, and you can search it. A trigger only appears when its module is turned on. For example, booster triggers need Booster Campaigns, and membership triggers need Memberships. ### Loyalty | Trigger | Fires when | | - | - | | **Earn Points** | A customer earns points (including points credited by a workflow) | | **Redeem Points** | A customer redeems points for a reward | | **Points Adjusted** | Points are adjusted manually, for example from the Customers page | | **Points Expiring Reminder** | A customer's points are about to expire | | **Points Expired** | A customer's points expire | | **Reward Expiry Reminder** | A redeemed reward is about to expire | | **Reward Expired** | A redeemed reward has expired | | **Joined Loyalty Program** | A customer joins the loyalty program | | **Birthday Reminder** | A customer's birthday is coming up | | **Customer Birthday** | On the customer's birthday | | **Anniversary Reminder** | A customer's anniversary is coming up | | **Customer Anniversary** | On the customer's anniversary | | **One-time Campaign Points Awarded** | A customer receives points from a [One-time Campaign](/loyalty/one-time-campaigns) that has **Trigger workflow events** turned on | | **Benefit Unlocked** | A tier, booster or membership benefit is executed for a customer (including each recurring execution) | | **Booster Campaign Entered** | A customer takes their first qualifying action in a [booster campaign](/loyalty/booster-campaigns/overview) | | **Booster Campaign Progression** | A customer's progress toward a booster goal advances (streak step, milestone, spending goal) | | **Booster Campaign Rewarded** | A customer completes a booster campaign and its rewards are issued (fires once, even with several rewards) | ### VIP Tiers | Trigger | Fires when | | - | - | | **VIP Tier Entry** | A customer qualifies for a VIP tier for the first time | | **VIP Tier Upgrade** | A customer qualifies for a higher tier | | **VIP Tier Downgrade** | A customer's tier is downgraded after retention expires | | **VIP Tier Retained** | A customer re-qualifies before their retention window expires | | **VIP Tier Retention Warning** | A customer's retention window expires in about 30 days | | **VIP Milestone Nudge** | A customer passes a progress milestone (25%, 50%, 75%, 90%) toward the next tier | | **VIP Period Start** | A new qualifying period begins (the calendar year rolls over or the rolling window shifts) | ### Referral | Trigger | Fires when | | - | - | | **Referrer welcome** | A customer joins the referral program as a referrer | | **Friend reward unlocked** | A referred friend claims their friend reward | | **Referrer Rewarded** | A referrer is rewarded for a successful referral | | **Referral Completed** | A referral is completed | ### Membership | Trigger | Fires when | | - | - | | **Membership Subscribed** | A customer subscribes to a membership for the first time | | **Membership Upgraded** | A subscription changes to a higher-priced plan | | **Membership Downgraded** | A subscription changes to a lower-priced plan | | **Membership Paused** | A subscription is paused | | **Membership Reactivated** | A paused or cancelled membership is activated again | | **Membership Cancelled** | A subscription is cancelled | ### Orders | Trigger | Fires when | | - | - | | **Order Paid** | A Shopify order is paid | | **Order Delivered** | A Shopify order is marked delivered | ## Trigger filters After you pick a trigger, click **Add** under **Trigger filters** to only let in events that match. Conditions are grouped, and you choose whether groups and conditions combine with **AND** or **OR**. Each condition has a **Field**, an **Operator** (such as *equals*, *contains*, *is greater than*) and a **Value**. The fields depend on the trigger: | Fields | Triggers | | - | - | | **Email**, **First name**, **Last name**, **Phone number** | Every trigger except Benefit Unlocked | | **City**, **Country Code** | Order, loyalty, VIP, booster and membership triggers | | **Points Balance**, **Total Earned Points** | Loyalty, VIP and booster triggers | | **Point Source** | Earn Points, Redeem Points, Points Expired, Points Adjusted, One-time Campaign Points Awarded | | **Days Before** | Points Expiring Reminder, Reward Expiry Reminder, Birthday Reminder, Anniversary Reminder, VIP Tier Retention Warning | | **Campaign Identifier**, **Campaign Name** | One-time Campaign Points Awarded | | **Current Tier Name** | VIP triggers | | **Previous Tier Name** | VIP Tier Upgrade, VIP Tier Downgrade | | **Tier Progress %** | VIP Tier Entry, Upgrade, Downgrade, Retained, Retention Warning, Milestone Nudge, Period Start | | **Milestone %** | VIP Milestone Nudge | | **Booster Campaign Name**, **Booster Campaign Type**, **Booster Completed Actions**, **Booster Campaign Progress %** | Booster triggers | | **Benefit Module**, **Benefit Type** | Benefit Unlocked | | **Membership Name**, **Subscription Status** | Membership triggers | | **Referral Link** | Referral triggers and several loyalty triggers | | **Category**, **Collection**, **Product Name**, **Product ID**, **Variant ID**, **Order Status**, **Order Financial Status**, **Order Fulfillment Status**, **Currency**, **Language**, **Province Code**, **Order Count** | Order Paid, Order Delivered (**Currency**, **Product Name** and **Province Code** are also available on Earn Points) | ### One-time campaign conditions To run a workflow for one specific [One-time Campaign](/loyalty/one-time-campaigns): 1. In the campaign, turn on **Trigger workflow events** and copy its read-only **Identifier**. 2. In the workflow, use the **One-time Campaign Points Awarded** trigger. 3. Add a trigger filter **Campaign Identifier** *equals* the identifier you copied. Or use **Campaign Name** to match on the name. The identifier never changes, so it's safer than the name if you might rename the campaign. ## Profile filters Click **Add** under **Profile filters** to filter on the customer rather than the event. Choose a **Condition type**: | Condition type | What it checks | | - | - | | **User Action** | Whether the person has performed an action, with a count and a **Time frame** | | **Properties About Someone** | A property of the customer, such as email or name | | **IN or NOT in the EU** | **Is** / **Is Not** in a **Region** (**European Union** or **United States**) | | **Receive Marketing** | Whether the customer accepts marketing (**Yes** / **No**) | | **Has Not in This Flow** | The customer hasn't been in this workflow **At Any Time**, or **In The Last** N Hours, Days, Months or Years | ## Re-entry criteria Under **Re-entry criteria** on the trigger node, set whether a customer can go through the workflow more than once: | Option | Behaviour | | - | - | | **No re-entry** | *"Profiles will only enter once, even if trigger conditions are met again."* | | **Allow re-entry** | *"Profiles will re-enter whenever trigger conditions are met."* | | **Allow re-entry after a time period** | Re-enter only after a **Time period** you set in hours, days or weeks has passed | ## If / Else Add **If / Else** from the **Logic** group in **Add Node**: *"Profiles are split into two paths based on whether they meet the condition."* Customers who match take the **Yes** path. Everyone else takes the **No** path. The If / Else panel has two sections: * **Source-Based Filters**: conditions on the trigger's data, with the same fields as the trigger filters above. * **Profile Filters**: the same condition types as the trigger's profile filters. Each path continues to its own actions and ends in its own **Exit**. ## Examples **1. Thank-you for a specific campaign.** Trigger **One-time Campaign Points Awarded** → filter **Campaign Identifier** equals your Diwali campaign → Send Email *"Your festive bonus is here"*. **2. Tiered birthday message.** Trigger **Customer Birthday** → If / Else **Points Balance** *is greater than* 1000 → Yes: WhatsApp message, No: Send Email. **3. Retention nudge.** Trigger **VIP Tier Retention Warning** → Send Email reminding the customer how to keep their tier. ## Best practices **Filter at the trigger when you can.** Customers who don't match never enter, which keeps Analytics clean. Use If / Else when both groups need something. **Use Has Not in This Flow** to stop customers from getting the same message too often, even with re-entry allowed. **Turn off the matching built-in email.** If you build a workflow on Earn Points or Birthday Reminder, turn off the built-in email for that event to avoid duplicates. ## FAQs Triggers only appear when their module is active. Turn on Memberships or Booster Campaigns first. No. For win-back flows, use **VIP Tier Retention Warning**, **VIP Tier Downgrade** or **Points Expiring Reminder**. No. Use **Order Paid** or **Order Delivered**. ## Related A step-by-step example from blank canvas to a Live workflow. Events that start a workflow, filters, re-entry and If / Else. Send Email, Coupon, Points Credit and Points Debit. Pause a workflow and end it cleanly. Send WhatsApp templates through any of 13 providers. Subscribers, timelines, failures and email performance. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # Time Delay & Exit Source: https://docs.yuko.so/workflows/wait-and-exit Pause a workflow for minutes, hours or days, optionally until a time of day or chosen weekdays, and understand how every path ends at an Exit node. **Where to find this:** Inside any workflow, click the **+** on a connecting line → **Add Node** → **Timing** → **Time Delay** ## Time Delay A **Time Delay** node holds each customer for a set time before they move on to the next step. In the picker it's described as: *"The workflow will wait for this duration before moving to the next step."* ### Settings | Setting | What it does | | - | - | | **Duration** | How long to wait. Must be at least 1. | | **Unit** | **Minute(s)**, **Hour(s)** or **Day(s)** | | **Set a delay until a specific time of day** | After the duration, wait until a set **Time** in a chosen **Time Zone**. Only available with **Day(s)**. | | **Set a delay until chosen day(s) of the week** | After the duration, wait until one of the weekdays you select. Pick at least one day. Only available with **Day(s)**. | ### Setup Click the **+** where you want the pause, then choose **Time Delay**. Enter a **Duration** and pick the **Unit**, for example *3* **Day(s)**. With **Day(s)** selected, turn on **Set a delay until a specific time of day** and choose the **Time** and **Time Zone**. You can also turn on **Set a delay until chosen day(s) of the week** and select the days. Save the panel. The node on the canvas shows the delay. ### When to use * **Space out messages:** Send Email → Time Delay 3 Day(s) → WhatsApp. * **Give a coupon time to work:** Coupon → Send Email → Time Delay 5 Day(s) → reminder email. * **Send at a friendly hour:** Time Delay 1 Day(s) until 10:00 in your store's time zone. ## Exit Every path in a workflow ends at an **Exit** node: *"The automation will stop here."* Yuko adds Exit nodes for you, including one at the end of each **If / Else** branch. There's nothing to configure. When a customer reaches Exit, their subscriber status in [Analytics](/workflows/analytics) becomes **Completed**. ## How it works 1. A customer reaches the Time Delay node and their status stays **In Progress**. 2. Yuko waits for the duration, then, if set, until the next matching time of day or weekday. 3. The customer moves to the next node. 4. At the end of the path they reach Exit and are marked **Completed**. ## Best practices **Avoid back-to-back messages.** Put a Time Delay between two sends on different channels, so customers don't get an email and a WhatsApp in the same minute. **Use a time of day for multi-day delays.** "1 Day(s) until 10:00" lands in inboxes in the morning instead of whenever the trigger happened. **Remember re-entry.** If re-entry is allowed, a customer can be in the workflow more than once at the same time, each waiting separately. ## FAQs No. Use **Day(s)** (for example 14 days for two weeks). There's no option to wait until a calendar date. **Set a delay until a specific time of day** and the weekday option only work when the unit is **Day(s)**. No. Exit has no settings. It simply ends the path. Yes. Add an **If / Else** node after the Time Delay. See [Triggers & Conditions](/workflows/triggers-and-conditions). ## Related A step-by-step example from blank canvas to a Live workflow. Events that start a workflow, filters, re-entry and If / Else. Send Email, Coupon, Points Credit and Points Debit. Pause a workflow and end it cleanly. Send WhatsApp templates through any of 13 providers. Subscribers, timelines, failures and email performance. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store. # WhatsApp Workflow Node Source: https://docs.yuko.so/workflows/whatsapp-node Send an approved WhatsApp template at any step of a workflow through any of 13 connected WhatsApp providers, with shortcodes for personalisation. **Where to find this:** Inside any workflow, click the **+** on a connecting line → **Add Node** → **Actions** → **WhatsApp** ## Introduction The WhatsApp node sends one WhatsApp template message to the customer when the workflow reaches it. It uses a WhatsApp provider you've connected under **Integrations**, and fills the template's parameters with [shortcodes](/emails/shortcodes) such as `{{first_name}}` or `{{points_balance}}`. ## Supported providers The node supports **13** providers: | Provider | Integration guide | | - | - | | AISensy | [AISensy](/integrations/aisensy) | | Zoko | [Zoko](/integrations/zoko) | | WATI | [WATI](/integrations/wati) | | DelightChat | [DelightChat](/integrations/delightchat) | | Kwik Engage | [Kwik Engage](/integrations/kwik-engage) | | Engati | [Engati](/integrations/engati) | | QuickReply.ai | [QuickReply.ai](/integrations/quickreply-ai) | | Interakt | [Interakt](/integrations/interakt) | | BiteSpeed | [BiteSpeed](/integrations/bitespeed) | | BotSpace | [BotSpace](/integrations/botspace) | | AskEva | [AskEva](/integrations/askeva) | | Whamaa | [Whamaa](/integrations/whamaa) | | ConvertWay | [ConvertWay](/integrations/convertway) | ## Before you start Yuko app is installed on your Shopify store — see [Install Yuko on Shopify](/installation-and-setup/install-on-shopify). The Yuko **Theme App Embed** is enabled in your active theme — see [Theme App Embed](/installation-and-setup/theme-app-embed). Your loyalty program is enabled under **Loyalty Program Status** at **Shopify admin → Apps → Yuko Loyalty → Loyalty → Programs**. Your point labels are set in [Loyalty Settings](/loyalty/program-settings). At least one WhatsApp provider is connected under **Integrations**. See the [WhatsApp overview](/integrations/whatsapp). The template you want to send is **approved** in your provider's dashboard, and you know its name or ID. ## Setup guide Click the **+** where the message should go and choose **WhatsApp**. The panel shows every provider as a card with a **Connected** or **Disconnected** badge. Disconnected providers can't be selected. Click the provider you want to use. Enter the fields your provider needs (see the table below), for example **Template Name** and **Language Code**. Set the parameter count to match your template, then fill each parameter in order. Type plain text or insert a shortcode, for example `{{first_name}}` for the first variable and `{{points_balance}}` for the second. Save the node. If a field is missing, the panel shows what to fix. ### Provider fields | Provider | Fields | | - | - | | AISensy | Endpoint URL, Campaign Name, Source, Tags, Attributes, Template Parameter Count | | Zoko | Message Type (**Template**, **Rich Template (with media header)**, **Button Template (with interactive buttons)**), Template ID, Template Language, Template Argument Count | | WATI | Template Name, Broadcast Name, Channel Number, Client ID, Parameter Count | | DelightChat | Automation ID, Message Data Count, CTA Button Text, CTA Button URL | | Kwik Engage | Endpoint URL, Template Name, Language Code, Parameter Count, Add CTA Button / CTA Button Count | | Engati | Namespace, Endpoint URL, Template Name, Parameter Count | | QuickReply.ai | Template ID, Parameter Count, Media URL (Optional), Button Parameters (Optional) | | Interakt | Template Name, Language Code, Template Parameter Count, Callback Data, Add CTA Button / CTA Button Count | | BiteSpeed | Template ID, Channel ID, Params Count, Add CTA Button / CTA URL | | BotSpace | Template ID, Channel ID, Template Parameter Count | | AskEva | Template Name, Language Code, Parameter Count, Add CTA Button / CTA Button Count | | Whamaa | Template Name, Language Code, Parameter Count, Add CTA Button / CTA Button Count | | ConvertWay | Template Name, Language Code, Parameter Count, Add CTA Button / CTA Button Count | ## Shortcodes The shortcode picker in each parameter field lists the shortcodes for your workflow's **trigger**, the same set a Send Email node gets, plus `{{redemption_link}}`. For example, a **VIP Tier Upgrade** workflow offers `{{current_tier_name}}`, while a **Redeem Points** workflow offers `{{reward_code}}`. See the [Shortcodes Reference](/emails/shortcodes) for what each one means. ## How it works 1. A customer reaches the WhatsApp node. 2. Yuko uses the phone number on the customer's record. If there's no phone number, the step is marked **failed** with *"Customer phone number not found"* and the workflow moves on. 3. Yuko fills the template parameters with the customer's data and sends the template through the provider's API. 4. The step is marked **completed**, or **failed** with the provider's error. Either way, the workflow continues to the next node. You can see each step's result and failure reason in [Analytics](/workflows/analytics). ### Limitations * One template per node. To send a second message, add another WhatsApp node, ideally after a Time Delay. * Templates must be created and approved in your provider's dashboard. Yuko sends them but doesn't edit their wording. * Delivery, read and reply status stay in your provider's dashboard. Yuko tracks completed or failed. * The provider must be included in your plan. Otherwise the step fails with a message asking you to upgrade. ## Examples **1. Tier upgrade celebration.** **VIP Tier Upgrade** → WhatsApp: *"Welcome to `{{current_tier_name}}`, `{{first_name}}`! Your balance is `{{points_balance}}` points."* **2. Points expiry nudge.** **Points Expiring Reminder** → WhatsApp: *"`{{first_name}}`, `{{expiring_points}}` points expire in `{{days_until_expiry}}` days."* **3. One-time campaign announcement.** **One-time Campaign Points Awarded** with a **Campaign Identifier** filter → WhatsApp: *"We've added bonus points to your account. Redeem here: `{{redemption_link}}`"*. **4. Friend reward.** **Friend reward unlocked** → WhatsApp with `{{discount_code}}`. ## Best practices **Get templates approved first.** Unapproved templates fail at send time. **Back up with email.** WhatsApp fails when there's no phone number. Use an **If / Else** on **Phone number** to send an email to customers without one. **Space out messages.** Put a **Time Delay** between an email and a WhatsApp so they don't arrive in the same minute. **Test with your own customer record.** Make sure it has a phone number, and trigger the event yourself before going Live. ## FAQs It shows **Disconnected**. Connect it under **Integrations** (see the provider's guide above), then reopen the node. The step fails with *"Customer phone number not found"* and the workflow continues to the next node. No. The wording is fixed in the approved template in your provider's dashboard. Yuko only fills the parameters. Use the WhatsApp node. It supports Engati and Kwik Engage as providers, plus 11 others. See [Partner Nodes](/workflows/partner-nodes). ## Related Choosing and connecting a WhatsApp provider. Send Email, Coupon, Points Credit and Points Debit. India / SEA — cost-effective high-volume Business API. Shopify-native — fast onboarding, plain / rich / button templates. Global — named-parameter templates, team inbox. Multi-channel — WhatsApp + Instagram + email, automation-driven sends with CTA. India-leaning — templates with optional dynamic-URL CTA buttons. Conversational AI — namespace-scoped templates. AI-first — media headers, dynamic CTA buttons (requires Client ID + Secret Key). India — template messages with CTA URL buttons and callback metadata. Shopify-focused — named parameters and optional CTA URLs with shortcodes. Multi-channel WhatsApp automation — lightweight setup, positional parameters. SEA / MENA — templates with dynamic URL-suffix CTA buttons. Template messages with language codes and up to 2 dynamic CTA URL buttons. WhatsApp marketing platform — templates with up to 2 dynamic CTA URL buttons. Talk to our team for personalised setup help. **Time:** 30 minutes Visit our support hub for help articles, live chat and ticket submission. Documentation across loyalty, referrals, memberships and more. Add Yuko to your Shopify store from the Shopify App Store.