Please note:
The Yotpo integration is only available to customers that use email as the client customer ID that is passed to Optimove daily.
Yotpo Loyalty allows brands to build customized loyalty and referral programs to reward customers for actions they perform on their websites.
By supercharging Yotpo Loyalty with Optimove’s robust real-time solution, you can engage customers with a variety of highly customizable campaigns, increase lifetime value, drive new customer acquisition, and reduce the risk of cross-firing journeys.
If you are using Yotpo Loyalty for your business and are also a Track and Trigger customer, you can integrate Yotpo Loyalty with Optimove in just a few steps.
Closed Beta:
This capability is currently in Closed Beta and may not be available to all customers. For information beyond this article, please reach out to your Customer Success Manager.
Setting up the Integration
- Get the Yotpo Loyalty endpoint.
The first step to integrating Yotpo Loyalty and Optimove is to ask your CSM for the Yotpo Loyalty endpoint. You should receive a URL with a similar structure to the URL below: https://server-<your tenant ID>.optimove.net/yotpo - Place the Optimove endpoint within the Webhook URL section underYotpo Loyalty’s General Settings (Settings -> General -> Webhook URL).

- Once done, 12 different events will be made available automatically on your Optimove site.
- Coupon Earned
- Customer Birthday
- Customer Anniversary
- Points Reminder
- Points Changed
- Points Earned
- Loyalty Opt-In / Out
- Redemption Reminder
- Referral Completed
- VIP Tier Earned
- VIP Tier Lost
- VIP Tier Status Changed

Example Use Cases
Trigger a Realtime Campaign to Let Customers Know When There's a Change in their Loyalty Points


Trigger a Thank You Campaign Rewarding Customers on Purchase Completion


Trigger a Realtime Welcome or Re-engagement Campaign Upon Opting in/out of the Loyalty Plan

Trigger a Realtime Celebration Email Upon Changes in VIP Tiers


Encourage Engagement by Letting Your Customers Know the Next Step to Upgrade Their VIP Status


Events Examples
Coupon Earned (Awarded + Redeemed)
{
"tenant": integer,
"event": "yotpo_coupon_earned",
"category": "track",
"origin": "yotpo",
"context": {
"reward_text" :"string", -- The coupon code earned or redeemed
"name": "string", -- A short description of what the coupon is for
"points_redeemed": integer, -- The amount of points redeemed
"history_title": "string", -- A short description of the action that leads them to earn this discount.)
"email": "string",
"first_name": "string",
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer
},
"customer": "string",
"timestamp": "DateTime"}
Customer Birthday
{
"tenant": integer,
"event": "yotpo_customer_birthday",
"category": "track",
"origin": "yotpo",
"context": {
"reward_text" :"string", --If customer was gifted a coupon, this is the coupon code
"name": "string", --If customer was gifted a coupon, this is the discount name
"reward_points": integer, --If customer was gifted points, this is how many
"email": "string",
"first_name": "string",
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer
},
"customer": "string",
"timestamp": "DateTime"}Customer Anniversary
{
"tenant": integer,
"event": "yotpo_customer_anniversary",
"category": "track",
"origin": "yotpo",
"context": {
"reward_text" :"string", --If customer was gifted a coupon, this is the coupon code
"name": "string", --If customer was gifted a coupon, this is the discount name
"reward_points": integer, --If customer was gifted points, this is how many
"email": "string",
"first_name": "string",
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer
},
"customer": "string",
"timestamp": "DateTime"}
Loyalty Opt-In / Out
{
"tenant": integer,
"event": "yotpo_loyalty_opt_in_out",
"category": "track",
"origin": "yotpo",
"context": {
"email": "string",
"first_name": "string",
"accepts_marketing": bool
"is_opt_in": bool --Whether the customer is opted in to the loyalty program following this event trigger
"has_store_account": bool --Whether the customer has an account with the ecommerce platform
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer
},
"customer": "string",
"timestamp": "DateTime"}
Points Changed
{
"tenant": integer,
"event": "yotpo_points_changed",
"category": "track",
"origin": "yotpo",
"context": {
"email": "string",
"first_name": "string",
"accepts_marketing": bool
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer,
"previous_balance": integer, --The customer’s point balance before the change
"current_balance": integer, --The customer’s point balance after the change
"difference": integer, --How many points were added or removed from the customer’s point balance
"added_or_removed": "string", --Delineates whether points were added or removed from the customer’s point balance
"points_changed_reason": "string"--Describes why there was a change in point balance
},
"customer": "string",
"timestamp": "DateTime"}Points Earned
{
"tenant": integer,
"event": "yotpo_points_earned",
"category": "track",
"origin": "yotpo",
"context": {
"email": "string",
"first_name": "string",
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer, --The customers' updated point balance
"reward_points": integer, --The number of points they just earned
"history_title": "string" --A short description of the action that lead them to earn these points
},
"customer": "string",
"timestamp": "DateTime"}Points Reminder
{
"tenant": integer,
"event": "yotpo_points_reminder",
"category": "track",
"origin": "yotpo",
"context": {
"email": "string",
"first_name": "string",
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer, --The customers' updated point balance
"points_needed" integer, --The number of points the customer needs to earn to gain the next reward
"name": "string", --A short description of what next reward option available to the customer after they earn the points_needed
"amount": integer --The amount of points needed for the next reward option available to the customer after they earn the points_needed
},
"customer": "string",
"timestamp": "DateTime" }Redemption Reminder
{
"tenant": integer,
"event": "yotpo_redemption_reminder",
"category": "track",
"origin": "yotpo",
"context": {
"email": "string",
"first_name": "string",
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer, --The customers' updated point balance
"name": "string", --A short description of what reward available to the customer
"amount": integer --The amount of points needed for the reward option
},
"customer": "string",
"timestamp": "DateTime" }Referral Completed
{
"tenant": integer,
"event": "yotpo_referral_completed",
"category": "track",
"origin": "yotpo",
"context": {
"email": "string",
"first_name": "string",
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer, --The referrers' updated point balance
"referred_customer_email": "string" --The email address of the customer they referred
"referred_customer_first_name": "string" --The first name of the customer they referred
"reward_text": "string" --If referrer earned a coupon, this is the coupon code
"name": "string", --If referrer earned a coupon, this is the discount name
"reward_points": "string" --If referrer earned points, this is how many
},
"customer": "string",
"timestamp": "DateTime" }
VIP Tier Earned
{
"tenant": integer,
"event": "yotpo_vip_tier_earned",
"category": "track",
"origin": "yotpo",
"context": {
"email": "string",
"first_name": "string",
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer, --The customers' updated point balance
"new_tier_name": "string" --the name of the new tier they just earned
"old_tier_name": "string" --the name of the new tier they came from (will be null if did not have a tier)
},
"customer": "string",
"timestamp": "DateTime"}VIP Tier Lost
{
"tenant": integer,
"event": "yotpo_vip_tier_earned",
"category": "track",
"origin": "yotpo",
"context": {
"email": "string",
"first_name": "string",
"total_purchases": integer,
"perks_redeemed": integer,
"points_earned": integer,
"points_balance": integer, --The customers' updated point balance
"new_tier_name": "string" --describing the new tier they dropped to. Attribute won’t be present if they now have no tier.
"old_tier_name": "string" --describing the tier they just lost
},
"customer": "string",
"timestamp": "DateTime" }VIP Tier Status Changed
{
"tenant": integer,
"event": "yotpo_vip_status_changed",
"category": "track",
"origin": "yotpo",
"context": {
"email": "string",
"first_name": "string",
"vip_stats_pointsEarned": integer,
"vip_stats_amountSpentCents": integer,
"vip_stats_purchasesMade": integer,
"vip_stats_referralsCompleted": integer,
"vip_stats_needed_maintain_points_needed": integer, --Points needed to maintain current VIP tier
"vip_stats_needed_maintain_amount_cents_needed": integer, --Cents needed to maintain current VIP tier
"vip_stats_needed_maintain_purchases_needed": integer, --Purchases needed to maintain current VIP tier
"vip_stats_needed_maintain_referrals_needed": integer, --Referrals needed to maintain current VIP tier
"vip_stats_needed_next_points_needed": integer, --Points needed to achieve next VIP tier
"vip_stats_needed_next_amount_cents_needed": integer, --Cents needed to achieve next VIP tier
"vip_stats_needed_next_purchases_needed": integer, --Purchases needed to achieve next VIP tier
"vip_stats_needed_next_referrals_needed": integer --Referrals needed to achieve next VIP tier
},
"customer": "string",
"timestamp": "DateTime"}
FAQs
> Do I need to be a Real-Time Triggers (formerly Track & Trigger) customer to use this integration?
Yes
> Can I use the events above to fire triggered campaigns?
Yes, you can trigger a campaign based on any of the events above.
> I currently have T&T implemented through a different setup (Web/Mobile SDK, Server, Segment, etc), can I use this integration in parallel?
Yes, you can set up the Shopify integration in addition to your existing one.
Please note:
- Yotpo Loyalty can only be integrated with Optimove for Track&Trigger clients.
- The integration requires that you use email as a customer ID within Optimove.
- At this stage, the integration targets existing customers only (Not visitors).
- You must be on a Yotpo Gold plan to integrate Yotpo with Optimove.