For the complete documentation index, see llms.txt. This page is also available as Markdown.

Tiers

Tier management

Get all tiers

get
/rest_api/v2/tiers

Retrieve all customer tiers for the authenticated shop

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Responses
200

List of tiers

application/json
successbooleanOptionalExample: true
messagestringOptionalExample: Operation completed successfully
timestampstring · date-timeOptionalExample: 2023-07-28T07:27:54.123Z
get/rest_api/v2/tiers

Create a new tier

post
/rest_api/v2/tiers

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)

  • targetPoint is required and must be ≥ 0

Side effects: publishApp() triggered after creation.

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Body
namestringRequired

Tier name (must be unique)

targetPointintegerRequired

Points required to reach this tier

targetPointUpdateintegerOptional

Defaults to targetPoint if not provided

iconstringOptional

Icon ID (tier_bronze_icon, tier_sliver_icon, tier_gold_icon, tier_diamond_icon, tier_platinum_icon, tier_crown_icon)

iconCustomstringOptional

Custom icon URL

hideDefaultTierbooleanOptional
isExclusiveTierbooleanOptional
tierNamesLanguageobjectOptional

Multi-language tier names {locale: name}

textColorstringOptional

Hex color

progressBarColorstringOptional
boxBgColorstringOptional
boxTextColorstringOptional
bgCardColorstringOptional
cardOpacitynumber · max: 1Optional
iconColorstringOptional
bgTypestringOptional
Responses
201

Tier created

application/json
successbooleanOptionalExample: true
metaobjectOptional

Additional metadata such as counts and pagination

messagestringOptionalExample: Operation completed successfully
timestampstring · date-timeOptionalExample: 2023-07-28T07:27:54.123Z
post/rest_api/v2/tiers

Get global tier settings

get
/rest_api/v2/tiers/settings

Returns the global VIP tier program settings (entry method, demotion, reset cycle, tags, etc.). This is a single document per shop.

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Responses
200

Tier settings

application/json
successbooleanOptionalExample: true
metaobjectOptional

Additional metadata such as counts and pagination

messagestringOptionalExample: Operation completed successfully
timestampstring · date-timeOptionalExample: 2023-07-28T07:27:54.123Z
get/rest_api/v2/tiers/settings
200

Tier settings

Update tier settings (safe fields only)

put
/rest_api/v2/tiers/settings

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.

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Body

Safe tier settings fields only. Fields requiring tier launch (entryMethod, milestone, startDate, progressionType, status) are excluded.

prefixstringOptional
isUsePrefixDiscountCodebooleanOptional
useDemotionTierbooleanOptional
typeDemotionstring · enumOptionalPossible values:
downgradeAfterstringOptional
downgradeAfterUnitstring · enumOptionalPossible values:
useResetTierbooleanOptional
resetAfterstringOptional
resetAfterUnitstring · enumOptionalPossible values:
monthResetTierstringOptional
dayResetTierstringOptional
isSyncTagsCustomerTierbooleanOptional
customerTierTagPrefixstringOptional
notificationDowngradeBeforestringOptional
notificationDowngradeBeforeUnitstring · enumOptionalPossible values:
Responses
200

Updated tier settings

No content

put/rest_api/v2/tiers/settings

No content

Get tier by ID

get
/rest_api/v2/tiers/{tierId}
Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Path parameters
tierIdstringRequired

Tier ID

Responses
200

Tier details

application/json
successbooleanOptionalExample: true
metaobjectOptional

Additional metadata such as counts and pagination

messagestringOptionalExample: Operation completed successfully
timestampstring · date-timeOptionalExample: 2023-07-28T07:27:54.123Z
get/rest_api/v2/tiers/{tierId}

Update a tier

put
/rest_api/v2/tiers/{tierId}

Updates tier fields. Only whitelisted fields accepted (name, design, milestone). Tier name must be unique — returns 409 if duplicate.

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Path parameters
tierIdstringRequired
Body

All fields optional — only send fields to change

namestringOptional
targetPointUpdateintegerOptional
iconstringOptional
iconCustomstringOptional
hideDefaultTierbooleanOptional
isExclusiveTierbooleanOptional
tierNamesLanguageobjectOptional
textColorstringOptional
progressBarColorstringOptional
boxBgColorstringOptional
boxTextColorstringOptional
bgCardColorstringOptional
cardOpacitynumberOptional
iconColorstringOptional
bgTypestringOptional
Responses
200

Updated tier with rewards

No content

put/rest_api/v2/tiers/{tierId}

No content

Delete a tier

delete
/rest_api/v2/tiers/{tierId}

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 matching tierId

  • Auto-discounts (Shopify) cleaned up for privilege rewards

  • publishApp() triggered

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Path parameters
tierIdstringRequired
Responses
200

Tier deleted

application/json
delete/rest_api/v2/tiers/{tierId}

Add a reward to a tier

post
/rest_api/v2/tiers/{tierId}/rewards

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)

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Path parameters
tierIdstringRequired
Body
eventstring · enumRequired

Reward event type

Possible values:
titlestringRequired

Reward name

typestring · enumOptionalDefault: tier_spendingPossible values:
earnAmountstringOptional

Discount amount/percentage. For free_gift always '100'

spendPointstringOptional

Points required to redeem

bonusPointsstringOptional

Bonus points (for bonus_point event, ≥1)

codeNamestringOptional

Code name (for privilege rewards)

appliedTostring · enumOptionalPossible values:
orderReqstring · enumOptionalPossible values:
orderReqAmountstringOptional
specificProductsobject[]Optional

Product list (max 1 for free_gift)

specificCollectionsstring[]Optional
hasLimitShippingbooleanOptional
limitShippingnumberOptional
expiredAfternumberOptional
expiredUnitstring · enumOptionalPossible values:
statusbooleanOptional
Responses
201

Reward created

No content

post/rest_api/v2/tiers/{tierId}/rewards

No content

Update a tier reward

put
/rest_api/v2/tiers/{tierId}/rewards/{rewardId}

Partial update of a tier reward. Only send fields to change. All fields are optional.

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Path parameters
tierIdstringRequired
rewardIdstringRequired
Body

All fields optional — only send fields to change

titlestringOptional
earnAmountstringOptional
spendPointstringOptional
bonusPointsstringOptional
codeNamestringOptional
appliedTostring · enumOptionalPossible values:
orderReqstring · enumOptionalPossible values:
orderReqAmountstringOptional
specificProductsobject[]Optional
combinedWithstring[]Optional
hasLimitShippingbooleanOptional
limitShippingnumberOptional
expiredAfternumberOptional
expiredUnitstring · enumOptionalPossible values:
statusbooleanOptional
prioritynumberOptional
Responses
200

Reward updated

No content

put/rest_api/v2/tiers/{tierId}/rewards/{rewardId}

No content

Delete a tier reward

delete
/rest_api/v2/tiers/{tierId}/rewards/{rewardId}

Permanently deletes the reward. If the reward is a privilege type with a Shopify auto-discount, the discount is also cleaned up.

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Path parameters
tierIdstringRequired
rewardIdstringRequired
Responses
200

Reward deleted

application/json
delete/rest_api/v2/tiers/{tierId}/rewards/{rewardId}

Get tier benefits by type

get
/rest_api/v2/tiers/benefits/{benefitType}

Retrieve tier benefits filtered by benefit type

Authorizations
X-Joy-Loyalty-App-KeystringRequired
X-Joy-Loyalty-Secret-KeystringRequired
Path parameters
benefitTypestringRequired

Type of benefit to retrieve

Responses
200

List of tier benefits

application/json
successbooleanOptionalExample: true
messagestringOptionalExample: Operation completed successfully
timestampstring · date-timeOptionalExample: 2023-07-28T07:27:54.123Z
get/rest_api/v2/tiers/benefits/{benefitType}

Last updated