Tiers
Tier management
Get all tiers
Retrieve all customer tiers for the authenticated shop
200List of tiers
trueShow properties
Tier ID
"0cd20cc6-1cac-40fe-b350-49deca03470d"Tier name
"VIP - PRO"Default icon URL
"https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png"Custom icon URL
""Points required to reach this tier
5000Updated points required
5000Number of customers in this tier
42Whether tier has place order rewards
falseMoney rate for earning points
1Points earning configuration
1Shop ID
"umN0f3GKyQC3XS1AwVWg"Image block URL
"https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png"Tier-specific rewards/benefits
[]Show properties
Reward ID
"FNSGeIIRYIagQR9ysmD3"Whether reward is active
trueReward title
"Points for discounts"Type of redemption
"fixed"Points required to redeem
100Minimum points to spend
""Maximum points to spend
""Where reward applies
"all"Order requirements
"none"Minimum order amount required
0When reward expires
"permanent"Specific expiration time
"2025-06-02T07:35:16.908Z"Reward type
"tier_privileges"Code name for reward
"Discount"Amount earned
"1"Event type for reward
"bonus_point"Bonus points awarded
"1"Reward priority
0Whether to show on loyalty page
trueTranslated titles for different languages
{"vi":"Points for discounts (Vietnamese)","ar":"Points for discounts (Arabic)"}Whether reward has expired
falseReward creation timestamp
"2025-06-02T07:47:49.623Z"Last update timestamp
"2025-06-18T08:13:55.794Z"Whether tier is inactive
falseWhether tier is exclusive
falsePrevious names of this tier
[]Tier creation timestamp
"2024-01-15T10:30:00.000Z"Last update timestamp
"2024-01-20T14:45:30.000Z"Show properties
Number of items returned
"Operation completed successfully""2023-07-28T07:27:54.123Z"401Authentication required
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"403Plan upgrade required
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"500Internal server error
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"GET /rest_api/v2/tiers HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYAccept: */*
{"success": true,"data": [{"id": "0cd20cc6-1cac-40fe-b350-49deca03470d","name": "VIP - PRO","icon": "https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png","targetPoint": 0,"members": 0,"isSystemTier": false,"isExclusiveTier": true,"textColor": "#785F4D","boxBgColor": "#EAD8C0","tierRewards": [],"createdAt": "2024-12-05T07:39:18.085Z","updatedAt": "2025-06-12T10:29:00.304Z"},{"id": "1Fe1kqHZbE7Alx1GmFEC","name": "Bronze - 1","icon": "https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png","targetPoint": 0,"members": 0,"isSystemTier": true,"systemType": "bronze","textColor": "#785F4D","boxBgColor": "#EAD8C0","tierRewards": [{"id": "FNSGeIIRYIagQR9ysmD3","status": true,"title": "Points for discounts","redeemType": "fixed","spendPoint": 100,"type": "tier_privileges","showLoyaltyPage": true,"expired": false,"createdAt": "2025-06-02T07:47:49.623Z","updatedAt": "2025-06-18T08:13:55.794Z"}],"createdAt": "2023-12-20T04:15:11.202Z","updatedAt": "2025-06-05T08:09:18.273Z"}]}
Create a new tier
Creates a new VIP tier. Optionally include a rewards array to create
tier rewards inline with the tier.
Constraints:
- Tier name must be unique (409 if duplicate)
targetPointis required and must be ≥ 0
Side effects: publishApp() triggered after creation.
Tier name (must be unique)
Points required to reach this tier
Defaults to targetPoint if not provided
Icon ID (tier_bronze_icon, tier_sliver_icon, tier_gold_icon, tier_diamond_icon, tier_platinum_icon, tier_crown_icon)
Custom icon URL
Multi-language tier names {locale: name}
Hex color
Inline rewards to create with the tier
Show properties
Reward event type
Reward name
Discount amount/percentage. For free_gift always '100'
Points required to redeem
Bonus points (for bonus_point event, ≥1)
Code name (for privilege rewards)
Product list (max 1 for free_gift)
201Tier created
trueCustomer tier with all fields that may be returned by the API. Note: Actual responses may only include non-null fields due to automatic filtering.
Show properties
Tier ID
"0cd20cc6-1cac-40fe-b350-49deca03470d"Tier name
"VIP - PRO"Default icon URL
"https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png"Custom icon URL
""Points required to reach this tier
5000Updated points required
5000Number of customers in this tier
42Whether tier has place order rewards
falseMoney rate for earning points
1Points earning configuration
1Shop ID
"umN0f3GKyQC3XS1AwVWg"Image block URL
"https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png"Tier-specific rewards/benefits
[]Show properties
Reward ID
"FNSGeIIRYIagQR9ysmD3"Whether reward is active
trueReward title
"Points for discounts"Type of redemption
"fixed"Points required to redeem
100Minimum points to spend
""Maximum points to spend
""Where reward applies
"all"Order requirements
"none"Minimum order amount required
0When reward expires
"permanent"Specific expiration time
"2025-06-02T07:35:16.908Z"Reward type
"tier_privileges"Code name for reward
"Discount"Amount earned
"1"Event type for reward
"bonus_point"Bonus points awarded
"1"Reward priority
0Whether to show on loyalty page
trueTranslated titles for different languages
{"vi":"Points for discounts (Vietnamese)","ar":"Points for discounts (Arabic)"}Whether reward has expired
falseReward creation timestamp
"2025-06-02T07:47:49.623Z"Last update timestamp
"2025-06-18T08:13:55.794Z"Whether tier is inactive
falseWhether tier is exclusive
falsePrevious names of this tier
[]Tier creation timestamp
"2024-01-15T10:30:00.000Z"Last update timestamp
"2024-01-20T14:45:30.000Z"Additional metadata such as counts and pagination
"Operation completed successfully""2023-07-28T07:27:54.123Z"400Validation error
409Tier name already exists (TIER_NAME_DUPLICATE)
POST /rest_api/v2/tiers HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYContent-Type: application/jsonAccept: */*Content-Length: 133{"name": "Platinum","targetPoint": 1000,"icon": "tier_platinum_icon","textColor": "#FFFFFF","bgCardColor": "#1A1A2E"}
{"success": true,"data": {"id": "0cd20cc6-1cac-40fe-b350-49deca03470d","name": "VIP - PRO","icon": "https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png","iconCustom": "","targetPoint": 5000,"targetPointUpdate": 5000,"members": 42,"placedOrderReward": false,"rateMoney": 1,"earnPoint": 1,"shopId": "umN0f3GKyQC3XS1AwVWg","imageBlock": "https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png","tierRewards": [],"inactive": false,"isExclusiveTier": false,"prevNames": [],"createdAt": "2024-01-15T10:30:00.000Z","updatedAt": "2024-01-20T14:45:30.000Z"},"meta": {},"message": "Operation completed successfully","timestamp": "2023-07-28T07:27:54.123Z"}
Get global tier settings
Returns the global VIP tier program settings (entry method, demotion, reset cycle, tags, etc.). This is a single document per shop.
200Tier settings
trueGlobal VIP tier program settings
Show properties
Tier program active (read-only via API, requires launch)
How customers qualify for tiers (read-only via API)
Reset cycle (read-only via API)
Points progression type (read-only via API)
Program start date (read-only via API)
Discount code prefix
"JOY-"Enable tier demotion
Duration before downgrade
"6""12""31"Auto-tag customers in Shopify by tier
"joy-vip-""7"Additional metadata such as counts and pagination
"Operation completed successfully""2023-07-28T07:27:54.123Z"GET /rest_api/v2/tiers/settings HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYAccept: */*
{"success": true,"data": {"id": "string","status": true,"entryMethod": "pointEarned","milestone": "lifetime","progressionType": "cumulative","startDate": "string","prefix": "JOY-","isUsePrefixDiscountCode": true,"useDemotionTier": true,"typeDemotion": "downgrade_tier","downgradeAfter": "6","downgradeAfterUnit": "day","useResetTier": true,"monthResetTier": "12","dayResetTier": "31","isSyncTagsCustomerTier": true,"customerTierTagPrefix": "joy-vip-","notificationDowngradeBefore": "7","notificationDowngradeBeforeUnit": "day"},"meta": {},"message": "Operation completed successfully","timestamp": "2023-07-28T07:27:54.123Z"}
Update tier settings (safe fields only)
Updates global tier program settings. Only safe fields are accepted —
fields that require tier launch (entryMethod, milestone, startDate,
progressionType, status) are excluded and must be changed via admin UI.
Safe fields: demotion config, reset schedule, discount prefix, customer tags, notifications.
200Updated tier settings
400No valid fields provided
404Tier settings not found (tiers never launched)
PUT /rest_api/v2/tiers/settings HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYContent-Type: application/jsonAccept: */*Content-Length: 123{"useDemotionTier": true,"typeDemotion": "downgrade_tier","downgradeAfter": "6","downgradeAfterUnit": "month"}
Get tier by ID
Tier ID
200Tier details
trueCustomer tier with all fields that may be returned by the API. Note: Actual responses may only include non-null fields due to automatic filtering.
Show properties
Tier ID
"0cd20cc6-1cac-40fe-b350-49deca03470d"Tier name
"VIP - PRO"Default icon URL
"https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png"Custom icon URL
""Points required to reach this tier
5000Updated points required
5000Number of customers in this tier
42Whether tier has place order rewards
falseMoney rate for earning points
1Points earning configuration
1Shop ID
"umN0f3GKyQC3XS1AwVWg"Image block URL
"https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png"Tier-specific rewards/benefits
[]Show properties
Reward ID
"FNSGeIIRYIagQR9ysmD3"Whether reward is active
trueReward title
"Points for discounts"Type of redemption
"fixed"Points required to redeem
100Minimum points to spend
""Maximum points to spend
""Where reward applies
"all"Order requirements
"none"Minimum order amount required
0When reward expires
"permanent"Specific expiration time
"2025-06-02T07:35:16.908Z"Reward type
"tier_privileges"Code name for reward
"Discount"Amount earned
"1"Event type for reward
"bonus_point"Bonus points awarded
"1"Reward priority
0Whether to show on loyalty page
trueTranslated titles for different languages
{"vi":"Points for discounts (Vietnamese)","ar":"Points for discounts (Arabic)"}Whether reward has expired
falseReward creation timestamp
"2025-06-02T07:47:49.623Z"Last update timestamp
"2025-06-18T08:13:55.794Z"Whether tier is inactive
falseWhether tier is exclusive
falsePrevious names of this tier
[]Tier creation timestamp
"2024-01-15T10:30:00.000Z"Last update timestamp
"2024-01-20T14:45:30.000Z"Additional metadata such as counts and pagination
"Operation completed successfully""2023-07-28T07:27:54.123Z"401Authentication required
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"403Plan upgrade required
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"404Tier not found
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"500Internal server error
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"GET /rest_api/v2/tiers/{tierId} HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYAccept: */*
{"success": true,"data": {"id": "1Fe1kqHZbE7Alx1GmFEC","name": "Bronze - 1","icon": "https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png","iconCustom": "","targetPoint": 0,"targetPointUpdate": 0,"members": 0,"placedOrderReward": false,"rateMoney": "","earnPoint": "","isSystemTier": true,"hideDefaultTier": false,"bgType": "default","bgImage": "","textColor": "#785F4D","progressBarColor": "#785F4D","boxBgColor": "#EAD8C0","boxTextColor": "#785F4D","bgCardColor": "#EAD8C0","cardOpacity": 0,"iconColor": "#222222","systemType": "bronze","shopId": "umN0f3GKyQC3XS1AwVWg","imageBlock": "https://cdnapps.avada.io/joy/vip-tiers/icons/bronze.png","tierRewards": [{"id": "FNSGeIIRYIagQR9ysmD3","status": true,"title": "Points for discounts","redeemType": "fixed","minSpendPoint": "","maxSpendPoint": "","spendPoint": 100,"appliedTo": "all","orderReq": "none","orderReqAmount": 0,"expiredAfter": "permanent","expiredTime": "2025-06-02T07:35:16.908Z","type": "tier_privileges","codeName": "Discount","earnAmount": "1","event": "bonus_point","bonusPoints": "1","priority": 0,"showLoyaltyPage": true,"translateTitle": {"vi": "Points for discounts (Vietnamese)","ar": "Points for discounts (Arabic)"},"expired": false,"createdAt": "2025-06-02T07:47:49.623Z","updatedAt": "2025-06-18T08:13:55.794Z"}],"inactive": false,"isExclusiveTier": false,"prevNames": ["Bronze","Bronze 1","Bronze 12","Bronze "],"createdAt": "2023-12-20T04:15:11.202Z","updatedAt": "2025-06-05T08:09:18.273Z"}}
Update a tier
Updates tier fields. Only whitelisted fields accepted (name, design, milestone). Tier name must be unique — returns 409 if duplicate.
200Updated tier with rewards
400No valid fields provided
404Tier not found (TIER_NOT_FOUND)
409Tier name already exists (TIER_NAME_DUPLICATE)
PUT /rest_api/v2/tiers/{tierId} HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYContent-Type: application/jsonAccept: */*Content-Length: 106{"name": "Diamond","textColor": "#00D4FF","bgCardColor": "#0D0D2B","targetPointUpdate": 1500}
Delete a tier
Permanently deletes the tier and all associated rewards.
Blocked: Cannot delete the Bronze tier (systemType=bronze or targetPoint=0).
Side effects:
afterDeleteTier()deletes all programs with matchingtierId- Auto-discounts (Shopify) cleaned up for privilege rewards
publishApp()triggered
200Tier deleted
400Cannot delete Bronze tier (TIER_DELETE_BRONZE_BLOCKED)
404Tier not found (TIER_NOT_FOUND)
DELETE /rest_api/v2/tiers/{tierId} HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYAccept: */*
{"success": true,"data": {"deleted": true,"id": "tier123"}}
Add a reward to a tier
Creates a new reward linked to the specified tier.
Event types: amount_discount, percentage_discount, free_shipping, free_gift, bonus_point, buy_x_get_y
Key fields by event:
- amount_discount:
earnAmount,appliedTo,orderReq - percentage_discount:
earnAmount(1-100),appliedTo,orderReq - free_shipping:
hasLimitShipping,limitShipping - free_gift:
specificProducts(1 item),earnAmount=100 - bonus_point:
bonusPoints(≥1)
Reward event type
Reward name
Discount amount/percentage. For free_gift always '100'
Points required to redeem
Bonus points (for bonus_point event, ≥1)
Code name (for privilege rewards)
Product list (max 1 for free_gift)
201Reward created
404Tier not found
POST /rest_api/v2/tiers/{tierId}/rewards HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYContent-Type: application/jsonAccept: */*Content-Length: 174{"event": "percentage_discount","title": "10% Off","type": "tier_spending","earnAmount": "10","spendPoint": "100","appliedTo": "all","orderReq": "none"}
Update a tier reward
Partial update of a tier reward. Only send fields to change. All fields are optional.
200Reward updated
400No valid fields provided
PUT /rest_api/v2/tiers/{tierId}/rewards/{rewardId} HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYContent-Type: application/jsonAccept: */*Content-Length: 54{"title": "Updated 15% Off","earnAmount": "15"}
Delete a tier reward
Permanently deletes the reward. If the reward is a privilege type with a Shopify auto-discount, the discount is also cleaned up.
200Reward deleted
404Reward not found or not owned by shop
DELETE /rest_api/v2/tiers/{tierId}/rewards/{rewardId} HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYAccept: */*
{"success": true,"data": {"deleted": true,"id": "reward123"}}
Get tier benefits by type
Retrieve tier benefits filtered by benefit type
Type of benefit to retrieve
200List of tier benefits
trueShow properties
"prog_abc123""Sign Up Bonus""earning""sign_up"true1"2024-01-15T10:30:00.000Z""2024-01-20T14:45:30.000Z"falsefalse"price"1100"2024-01-01T00:00:00.000Z""2024-12-31T23:59:59.000Z"false"all"["web","pos"]{}null[]50010"amount_discount""all"[]"available_in_online_store""none"0"""""""userRedeemed"true"redeemWithoutLimit"0[][][][][][]"none"Show properties
Show properties
Show properties
Show properties
Show properties
"round"falseShow properties
Number of items returned
"Operation completed successfully""2023-07-28T07:27:54.123Z"401Authentication required
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"403Plan upgrade required
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"500Internal server error
falseShow properties
"Resource not found""NOT_FOUND"404"2023-07-28T07:27:54.123Z"GET /rest_api/v2/tiers/benefits/{benefitType} HTTP/1.1Host: dev-api.joy.soX-Joy-Loyalty-App-Key: YOUR_API_KEYX-Joy-Loyalty-Secret-Key: YOUR_API_KEYAccept: */*
{"success": true,"data": [{"id": "prog_abc123","title": "Sign Up Bonus","type": "earning","event": "sign_up","status": true,"priority": 1,"createdAt": "2024-01-15T10:30:00.000Z","updatedAt": "2024-01-20T14:45:30.000Z","expired": false,"isDraft": false,"earnBy": "price","rateMoney": 1,"earnPoint": 100,"startDate": "2024-01-01T00:00:00.000Z","endDate": "2024-12-31T23:59:59.000Z","autoRemovePoints": false,"appliedPlaceOrderTo": "all","appliedSource": ["web","pos"],"translateTitle": {},"typeMilestone": null,"milestones": [],"spendPoint": 500,"earnAmount": 10,"redeemType": "amount_discount","appliedTo": "all","appliedCollectionIds": [],"redeemIn": "available_in_online_store","orderReq": "none","orderReqAmount": 0,"minSpendPoint": "","maxSpendPoint": "","expiredTime": "","userAvailability": "userRedeemed","showLoyaltyPage": true,"limitRedeem": "redeemWithoutLimit","totalLimitationRedeem": 0,"combinedWith": [],"specificProducts": [],"specificProductIds": [],"specificCollections": [],"variantIds": [],"freeProductIds": [],"giftStatus": "none","excludeProducts": [{"id": "string","title": "string","image": {"src": "string"}}],"includeProducts": [{"id": "string","title": "string","image": {"src": "string"}}],"conditions": [{}],"earnPointsTiers": [{"earnPoint": 1,"rateMoney": 1}],"roundingMethod": "round","skipEarnPointGuest": false}],"meta": {"count": 1},"message": "Operation completed successfully","timestamp": "2023-07-28T07:27:54.123Z"}