---
title: 'Update Loyalty Rule'
description: 'Update an existing Loyalty Rule'
openapi: POST /api/loyalty/rules/{id}
---

> **For AI agents:** the complete documentation index is at [llms.txt](https://docs.snagsolutions.io/llms.txt). Append `.md` to any page URL for its markdown version.

`POST /api/loyalty/rules/{id}` — path parameters: `id`

`POST https://admin.snagsolutions.io/api/loyalty/rules/{id}`

Update an existing Loyalty Rule

## Authentication

- `apiKeyAuth` — apiKey in header: `X-API-KEY`

## Path parameters

- `id` (string, required)

## Request body

- Content type: `application/json`
  - request body (object)
    - `name` (string, required) — Name of the loyalty rule
    - `description` (string) — Optional description of the loyalty rule
    - `startTime` (string, date-time, required) — Start time for the loyalty rule
    - `endTime` (string, date-time, required) — End time for the loyalty rule
    - `effectiveStartTime` — Effective start time of the rule
      - (oneOf)
        - value (string, date-time)
        - value (string, null)
    - `effectiveEndTime` — Effective end time of the rule
      - (oneOf)
        - value (string, date-time)
        - value (string, null)
    - `amount` (required) — Reward amount for the loyalty rule
    - `customRewardsCsvUrl` (string, uri) — URL for uploading custom rewards via CSV
    - `customRewardsApiUrl` (string, uri) — API URL for custom rewards integration
    - `subscriptionId` (string) — Optional stratus subscription id for the rule
    - `functionId` (string) — Optional stratus function id for the rule
    - `metadata` (object) — Additional metadata for the loyalty rule
      - `isCheckInOnEveryTxn` (boolean) — If enabled, the first transaction done on the platform will complete this rule
      - `hasPaidFullRoyalty` (boolean) — Indicates if the full royalty has been paid for items.
      - `royaltyAddress` (string) — Wallet address of the user can only be used if userId is not provided
      - `royaltyPercentage` (number) — Royalty percentage of the item.
      - `hasVerifiedTwitter` (boolean) — Indicates if the user has a verified Twitter account.
      - `onlyRewardExistingUser` (boolean) — Indicates if only existing users are rewarded.
      - `hasNeverSold` (boolean) — Indicates if the item has never been sold.
      - `onlyNative` (boolean) — Flag indicating whether to include only native tokens.
      - `hasFillSource` (boolean) — Flag indicating whether the fill source is included.
      - `fillSource` (string) — Fill source of the order for the token sale
      - `liquidity` (object) — Liquidity pool details.
        - `network` (string, one of: abstract, abstractTestnet, apechain, arbitrum, avalanche, avalancheFuji, base, baseSepolia, berachain, berachainArtio, berachainBepolia, binance, bscTestnet, campTestnet, fantom, fantomTestnet, flowMainnet, mainnet, nexus, nexusTestnet, optimism, polygon, polygon_mumbai, skaleNebula, skaleEuropa, skaleCalypso, solana, sophon, sophonTestnet, sui, superseed, superseedSepolia, vanar, xai, zksync, coti, cotiTestnet, dogeosTestnet, morph, morphTestnet, morphHolesky, ultra, ultraTestnet, nitrograph, sepolia, optimism_sepolia, arbitrumSepolia, goerli, optimism_goerli, arbitrumGoerli, basecamp, somnia, zkverify, polkadot, kusama, horizen, horizenTestnet, robinhoodChain, robinhoodChainTestnet, flow_cadence) — Blockchain network of the liquidity pool.
        - `protocol` (string) — Protocol of the liquidity pool.
        - `onlyRewardInRangeLiquidity` (boolean) — Indicates if only in-range liquidity is rewarded.
        - `liquidityPerDay` (number) — Liquidity provided per day in USD
        - `customFunction` (string) — Custom function to calculate the the reward amount based on the liquidity provided per day. X is the reward amount, Y is the liquidity provided per day in USD.
        - `calculationType` (string, one of: fixed, custom) — Calculation type of the liquidity pool.
        - `pools` (array) — Array of liquidity pools associated with the rule.
          - `items` (object)
            - id: … (nested further)
      - `twitterUsername` (string) — Twitter username of the user.
      - `twitterUserId` (string) — Unique identifier of the Twitter user.
      - `twitterHashtag` (string) — Hashtag associated with the Twitter post.
      - `enableVerifiedMultiplier` (boolean) — Flag indicating whether the verified multiplier is enabled.
      - `verifiedMultiplier` (number) — Multiplier applied to rewards for verified users.
      - `isMultiplierApplied` (boolean) — Indicates if the multiplier has been applied to rewards.
      - `onlyKnownUsers` (boolean) — Flag indicating whether to include only known users.
      - `firstReferralReward` (number) — Percentage reward given to a user for their first referral.
      - `referrerReward` (number) — Lump sum reward given to a referrer.
      - `referrerRewardLoyaltyCurrencyId` (string) — Loyalty currency ID of the referrer reward.
      - `secondReferralReward` (number) — Percentage reward given for a second-level referral.
      - `enableStreaks` (boolean) — Flag indicating whether streaks are enabled.
      - `promoCode` (string) — Promotional code associated with the rule.
      - `promoCodeType` (string, one of: code, csv, generate) — Type of the promotional code.
      - `promoCodeLength` (number) — Numbers of the promotional code to be generated.
      - `promoCodeCsvUrl` (string) — URL of the CSV file containing promo codes.
      - `enableJoinDiscordServers` (boolean) — Flag indicating whether joining Discord servers is required.
      - `discordServersToJoin` (array) — Array of Discord servers, channels, and roles to join.
        - `items` (object)
          - `id` (string) — ID of the Discord server to join.
          - `channels` (array) — Array of Discord channels to join.
            - items: … (nested further)
          - `roles` (array) — Array of roles to assign in the Discord server.
            - items: … (nested further)
      - `streakArray` (array) — Array of streak milestones and corresponding rewards.
        - `items` (object)
          - `streakMilestone` (number, required) — Milestone required to achieve the streak.
          - `streakAmount` (number, required) — Reward amount for achieving the streak milestone.
      - `dripQuestsToComplete` (array) — Array of drip quests required to complete the rule.
        - `items` (object)
          - `id` (string, required) — ID of the drip quest to complete.
      - `collection` (array) — Array of collections associated with the rule.
        - `items` (object)
          - `address` (string) — Blockchain address of the collection.
          - `network` (string, one of: abstract, abstractTestnet, apechain, arbitrum, avalanche, avalancheFuji, base, baseSepolia, berachain, berachainArtio, berachainBepolia, binance, bscTestnet, campTestnet, fantom, fantomTestnet, flowMainnet, mainnet, nexus, nexusTestnet, optimism, polygon, polygon_mumbai, skaleNebula, skaleEuropa, skaleCalypso, solana, sophon, sophonTestnet, sui, superseed, superseedSepolia, vanar, xai, zksync, coti, cotiTestnet, dogeosTestnet, morph, morphTestnet, morphHolesky, ultra, ultraTestnet, nitrograph, sepolia, optimism_sepolia, arbitrumSepolia, goerli, optimism_goerli, arbitrumGoerli, basecamp, somnia, zkverify, polkadot, kusama, horizen, horizenTestnet, robinhoodChain, robinhoodChainTestnet, flow_cadence) — Blockchain network of the collection.
          - `multiplier` (number) — Multiplier applied to the rewards for this collection.
      - `range` (array) — Array defining ranges and corresponding rewards.
        - `items` (object)
          - `startRange` (number, required) — Start value of the range.
          - `endRange` (number, required) — End value of the range.
          - `amount` (required) — Reward amount for this range.
            - (oneOf)
              - value: … (nested further)
              - value: … (nested further)
          - `loyaltyBadgeId` (string, uuid) — ID of the loyalty badge for this range.
          - `loyaltyMultiplierAmount` (number) — Amount of the loyalty multiplier for this range.
      - `customRewardsApiKey` (string) — API key for custom rewards integration.
      - `link` (string) — Optional link associated with the metadata.
      - `socialPlatform` (string, one of: Custom, Discord, EpicGames, Instagram, Phone, Steam, Telegram, TikTok, Twitch, X(Twitter), YouTube, Google, GitHub, Reddit) — Social media platform associated with the rule.
      - `socialPlatformName` (string) — Name of the social platform.
      - `socialPlatformLogo` (string) — URL of the social platform's logo.
      - `rewardPerImpression` (boolean) — Flag indicating if rewards are given per impression.
      - `snapshotProposals` (array) — Array of snapshot proposals for the rule.
        - `items` (object)
          - `id` (string, required) — ID of the snapshot proposal.
          - `space` (string, required) — Space associated with the snapshot proposal.
      - `cta` (object) — Object containing details for the call-to-action.
        - `label` (string) — Label for the call-to-action.
        - `href` (string) — Link for the call-to-action.
      - `hasSaleCurrency` (boolean) — Flag indicating if the sale currency is included.
      - `isTokenHoldMultiplier` (boolean) — Flag indicating if the token hold multiplier is applied.
      - `saleCurrency` (string) — Currency associated with sales.
      - `isRetroactive` (boolean) — Flag indicating if rewards are applied retroactively.
      - `timeDelayToVerifySeconds` — Time delay in seconds to verify actions.
        - (oneOf)
          - value (string)
          - value (number)
      - `referralRequirements` (object) — Object defining referral requirements.
        - `points` (object)
          - `amount` (number) — Points required for referral.
          - `loyaltyCurrecyId` (string) — ID of the loyalty currency for referral.
        - `achievePoints` (boolean) — Flag indicating if achieving points is required.
        - `completeProfile` (boolean) — Flag indicating if completing the profile is required.
        - `connectTwitter` (boolean) — Flag indicating if connecting Twitter is required.
        - `connectDiscord` (boolean) — Flag indicating if connecting Discord is required.
        - `connectEmail` (boolean) — Flag indicating if connecting email is required.
      - `multiplierLoyaltyCurrencyIds` (array) — Array of loyalty currency IDs used for multipliers.
        - `items` (string)
      - `verifyPlaceHolderText` (string) — Placeholder text for verification input fields.
      - `verificationTextMinimumLength` (integer) — Minimum length of the verification text.
      - `buttonText` (string) — Text displayed on the action button.
      - `telegramChannelId` (string) — ID of the Telegram channel.
      - `twitterAccountUrl` (string) — URL of the associated Twitter account.
      - `twitterPostUrl` (string) — URL of the associated Twitter post.
      - `checkLike` (boolean) — Flag indicating if liking the post is required.
      - `checkRepost` (boolean) — Flag indicating if reposting is required.
      - `checkComment` (boolean) — Flag indicating if commenting is required.
      - `maxLikes` (integer) — Reaction limit for likes. Once the post reaches this many likes, the Like requirement is hidden from users. Likes are never verified server-side, so this only controls display.
      - `maxReposts` (integer) — Reaction limit for reposts. Once the post reaches this many reposts, the Repost requirement is hidden and no longer verified.
      - `maxComments` (integer) — Reaction limit for comments. Once the post reaches this many comments, the Comment requirement is hidden and no longer verified.
      - `reactionStats` (object) — Latest scraped public reaction counts for the post, written back from social-service (throttled). Drives which reaction requirements are hidden once they hit their configured limit. Not admin-editable.
        - `likeCount` (number)
        - `repostCount` (number)
        - `commentCount` (number)
        - `syncedAt` (string)
      - `checkText` — Text to check in the Twitter post, username, or bio.
        - (oneOf)
          - value (string)
          - value (array)
            - items: … (nested further)
      - `requirePostLink` (boolean) — Flag indicating if the post link is required.
      - `requirePostMediaLink` (boolean) — Flag indicating if media metadata is required.
      - `preGeneratedPostText` (string) — Pre-generated text template that will be used to prefill the post content.
      - `rewardCriteria` (string, one of: IMPRESSIONS_COUNT, ELIGIBLE_POST) — Criteria to evaluate the reward.
      - `smartContract` (object) — Object containing details of the associated smart contract.
        - `contractId` (string) — ID of the smart contract.
        - `event` (string) — Event emitted by the smart contract.
        - `type` (string, one of: function, event, default: "event") — Type of the smart contract interaction.
        - `criteria` (string, one of: everyEvent, byParameter) — Criteria to evaluate the smart contract event.
        - `params` (array) — Array of parameters for the smart contract.
          - `items` (object)
            - name: … (nested further)
            - condition: … (nested further)
            - value: … (nested further)
        - `addressMapping` (string) — Mapping of addresses for the smart contract.
        - `amountMultiplier` (object) — Object containing details of the amount multiplier from the event.
          - `valueMapping` (string) — Mapping of the value for the smart contract.
      - `walletType` (string, one of: evm, solana, imx, sui, ton, cosmos, ultra, agw, flow_cadence, substrate) — Type of wallet associated with the rule.
      - `imageUrl` (string) — URL of the image associated with the rule.
      - `onlyRewardSingleTokenOwnership` (boolean) — give points for only one token ownership per contract
      - `skipMultiplier` (boolean) — Flag indicating if the multiplier is skipped.
      - `completeProfileConditions` (object) — Conditions for completing the profile.
      - `steamAppId` (string) — ID of the Steam app.
      - `githubRepoUrl` (string) — URL of the GitHub repository to check for star.
      - `githubBranchName` (string) — Name of the GitHub branch to check for PR merge.
      - `resetProgressOnClaim` (boolean) — If enabled, the progress tracking row will be deleted after a successful claim, allowing the user to re-earn the rule.
      - `rewardPerAction` (boolean) — Flag indicating if the reward is rewarded per action.
      - `rewardByBatch` (boolean) — Flag indicating if the reward is rewarded by batch.
      - `batchSize` (number) — Number of tokens per batch.
      - `youtubeVideoId` (string) — ID of the Youtube video.
      - `youtubeChannelId` (string) — ID of the Youtube channel.
      - `redditPostId` (string) — ID of the Reddit post.
      - `isRestrictedToNewUsers` (boolean) — Flag indicating if the rule is restricted to new users.
      - `allowMultipleRedemptions` (boolean) — Flag indicating if the rule allows multiple redemptions. Applies to Enter a Code only.
      - `rewardBadgePerRange` (boolean) — Flag indicating if the rule can also reward badges per range.
      - `swap` (object) — Metadata for swap loyalty rules
        - `provider` (string, one of: any, relay, lifi)
        - `relayReferrerId` (string)
        - `from` (object)
          - `mode` (string, one of: any, specific)
          - `chain`
            - (oneOf)
              - value: … (nested further)
              - value: … (nested further)
              - value: … (nested further)
          - `tokens` (array)
            - items: … (nested further)
          - `trackAmount` (boolean)
        - `to` (object)
          - `mode` (string, one of: any, specific)
          - `chain`
            - (oneOf)
              - value: … (nested further)
              - value: … (nested further)
              - value: … (nested further)
          - `tokens` (array)
            - items: … (nested further)
          - `trackAmount` (boolean)
        - `requireCrossChainSwap` (boolean)
      - `rewardPerValue` (boolean) — Flag indicating if the rule should reward based on value of traded tokens instead of count.
      - `conditionDescription` (string) — Description of the external rule condition (only for external rules)
      - `directRpc` (boolean) — Flag indicating if the rule should use direct RPC to get the balance of tokens.
      - `erc20Type` (string, one of: erc20, native) — Type of ERC20 token for the loyalty rule.
      - `rewardQualityPosts` (boolean) — Flag indicating if the rule should reward quality posts.
      - `minimumFollowerCount` (number) — Minimum follower count for the rule. Accepts both number and string values.
      - `autoCheckInRuleIds` (array) — Array of loyalty rule IDs that count as check-in when completed. If ["any"] then any rule completions count as check-in.
        - `items`
          - (oneOf)
            - value: … (nested further)
            - value: … (nested further)
      - `robinhoodSymbols` (array)
        - `items` (string)
    - `network` (string, one of: abstract, abstractTestnet, apechain, arbitrum, avalanche, avalancheFuji, base, baseSepolia, berachain, berachainArtio, berachainBepolia, binance, bscTestnet, campTestnet, fantom, fantomTestnet, flowMainnet, mainnet, nexus, nexusTestnet, optimism, polygon, polygon_mumbai, skaleNebula, skaleEuropa, skaleCalypso, solana, sophon, sophonTestnet, sui, superseed, superseedSepolia, vanar, xai, zksync, coti, cotiTestnet, dogeosTestnet, morph, morphTestnet, morphHolesky, ultra, ultraTestnet, nitrograph, sepolia, optimism_sepolia, arbitrumSepolia, goerli, optimism_goerli, arbitrumGoerli, basecamp, somnia, zkverify, polkadot, kusama, horizen, horizenTestnet, robinhoodChain, robinhoodChainTestnet, flow_cadence, default: "mainnet") — Blockchain network where the rule will apply
    - `collectionAddress` (string) — Blockchain address of the associated collection
    - `collections` (array) — List of associated collections
      - `items` (object)
        - `address` (string, required) — Blockchain address of the collection
        - `network` (string, required, one of: abstract, abstractTestnet, apechain, arbitrum, avalanche, avalancheFuji, base, baseSepolia, berachain, berachainArtio, berachainBepolia, binance, bscTestnet, campTestnet, fantom, fantomTestnet, flowMainnet, mainnet, nexus, nexusTestnet, optimism, polygon, polygon_mumbai, skaleNebula, skaleEuropa, skaleCalypso, solana, sophon, sophonTestnet, sui, superseed, superseedSepolia, vanar, xai, zksync, coti, cotiTestnet, dogeosTestnet, morph, morphTestnet, morphHolesky, ultra, ultraTestnet, nitrograph, sepolia, optimism_sepolia, arbitrumSepolia, goerli, optimism_goerli, arbitrumGoerli, basecamp, somnia, zkverify, polkadot, kusama, horizen, horizenTestnet, robinhoodChain, robinhoodChainTestnet, flow_cadence) — Blockchain network for the collection
        - `symbol` (string) — Symbol of the collection.
    - `hideInUi` (boolean, default: false) — Whether to hide this rule in the user interface
    - `showBeforeStart` (boolean, default: false) — Whether to show this rule before the start time
    - `trackProgress` (boolean) — Flag indicating if the progress is tracked. If enabled, the rule can only be completed once the progress is 100%.
    - `progressType` (string, one of: counter, percentage) — How tracked progress is interpreted. "percentage" counts 0-100 and is shown as a percentage. "counter" counts up to the highest reward range end and is shown as a raw count.
    - `isRequired` (boolean, default: false) — Whether this rule is required for participation
    - `oauthCredentialsId` (string, uuid) — ID for associated OAuth credentials
    - `rewardType` (string, one of: points, multiplier, badge, token, default: "points") — Type of reward issued by this rule
    - `loyaltyCurrencyId` (string, uuid) — Loyalty currency. Optional when rewardType is token and tokenReward is provided; backend resolves the hidden currency from the contract.
    - `tokenReward` (object) — When rewardType is token, provide relayer and either an ERC-20 contract or isNative=true to find or create the hidden loyalty currency and onchain token.
      - `relayerId` (string, uuid, required) — Stratus relayer for token distribution (same network as contract)
      - `contractId` (string, uuid) — ERC-20 contract to reward with; must match relayer network. Required unless isNative is true.
      - `isNative` (boolean) — When true, reward is the chain native gas token (ETH, MATIC, BNB, …) and contractId is omitted.
    - `frequency` (string, one of: none, once, hourly, daily, weekly, monthly, immediately) — Frequency of the rule execution
    - `interval` (string, one of: hourly, daily, weekly, monthly, once, custom, every_message, unlimited) — Time interval for recurring rule execution
    - `loyaltyRuleGroupId` — ID of the rule group section to associate with the rule
      - (oneOf)
        - value (string, uuid)
        - value (string, one of: no-section)
    - `mediaUrl` (string) — URL of the media to be displayed
    - `maxAmountPerInterval` (number) — The maximum amount of points a user can earn per interval. Available for the smart contract and external rules.
    - `maxAmountInterval` (string, one of: daily, weekly, monthly, lifetime) — The interval for the max amount. Available for the smart contract and external rules.
    - `externalIntegrationId` (string, uuid) — ID of the external integration
    - `shopifyStoreUrl` (string) — URL of the Shopify store
    - `rewardLifetime` (string, one of: permanent, dynamic) — The lifetime of the reward
    - `claimType` (string, one of: manual, auto) — The type of claim for the reward
    - `contractIds` (array) — The IDs of the contracts
      - `items` (string)
    - `dappDeployedWithin` (string, one of: daily, weekly, monthly) — Filter dApps by deployment age before ranking.
    - `dappDataWindow` (string, one of: daily, weekly, monthly) — Reward based on data usage within the last day, week, or month. Leave it empty for all time usage.
    - `deletedAt` (string, date-time) — Timestamp when the loyalty rule was deleted. Set to null to restore a deleted rule.

## Response 200

200
  - response
    - (allOf)
      - value (object)
        - `id` (string, uuid, required)
      - value (object)
        - `name` (string, required) — Name of the loyalty rule
        - `description` (string) — Optional description of the loyalty rule
        - `startTime` (string, date-time, required) — Start time for the loyalty rule
        - `endTime` (string, date-time, required) — End time for the loyalty rule
        - `effectiveStartTime` — Effective start time of the rule
          - (oneOf)
            - value: … (nested further)
            - value: … (nested further)
        - `effectiveEndTime` — Effective end time of the rule
          - (oneOf)
            - value: … (nested further)
            - value: … (nested further)
        - `amount` (required) — Reward amount for the loyalty rule
        - `customRewardsCsvUrl` (string, uri) — URL for uploading custom rewards via CSV
        - `customRewardsApiUrl` (string, uri) — API URL for custom rewards integration
        - `subscriptionId` (string) — Optional stratus subscription id for the rule
        - `functionId` (string) — Optional stratus function id for the rule
        - `metadata` (object) — Additional metadata for the loyalty rule
          - `isCheckInOnEveryTxn` (boolean) — If enabled, the first transaction done on the platform will complete this rule
          - `hasPaidFullRoyalty` (boolean) — Indicates if the full royalty has been paid for items.
          - `royaltyAddress` (string) — Wallet address of the user can only be used if userId is not provided
          - `royaltyPercentage` (number) — Royalty percentage of the item.
          - `hasVerifiedTwitter` (boolean) — Indicates if the user has a verified Twitter account.
          - `onlyRewardExistingUser` (boolean) — Indicates if only existing users are rewarded.
          - `hasNeverSold` (boolean) — Indicates if the item has never been sold.
          - `onlyNative` (boolean) — Flag indicating whether to include only native tokens.
          - `hasFillSource` (boolean) — Flag indicating whether the fill source is included.
          - `fillSource` (string) — Fill source of the order for the token sale
          - `liquidity` (object) — Liquidity pool details.
            - network: … (nested further)
            - protocol: … (nested further)
            - onlyRewardInRangeLiquidity: … (nested further)
            - liquidityPerDay: … (nested further)
            - customFunction: … (nested further)
            - calculationType: … (nested further)
            - pools: … (nested further)
          - `twitterUsername` (string) — Twitter username of the user.
          - `twitterUserId` (string) — Unique identifier of the Twitter user.
          - `twitterHashtag` (string) — Hashtag associated with the Twitter post.
          - `enableVerifiedMultiplier` (boolean) — Flag indicating whether the verified multiplier is enabled.
          - `verifiedMultiplier` (number) — Multiplier applied to rewards for verified users.
          - `isMultiplierApplied` (boolean) — Indicates if the multiplier has been applied to rewards.
          - `onlyKnownUsers` (boolean) — Flag indicating whether to include only known users.
          - `firstReferralReward` (number) — Percentage reward given to a user for their first referral.
          - `referrerReward` (number) — Lump sum reward given to a referrer.
          - `referrerRewardLoyaltyCurrencyId` (string) — Loyalty currency ID of the referrer reward.
          - `secondReferralReward` (number) — Percentage reward given for a second-level referral.
          - `enableStreaks` (boolean) — Flag indicating whether streaks are enabled.
          - `promoCode` (string) — Promotional code associated with the rule.
          - `promoCodeType` (string, one of: code, csv, generate) — Type of the promotional code.
          - `promoCodeLength` (number) — Numbers of the promotional code to be generated.
          - `promoCodeCsvUrl` (string) — URL of the CSV file containing promo codes.
          - `enableJoinDiscordServers` (boolean) — Flag indicating whether joining Discord servers is required.
          - `discordServersToJoin` (array) — Array of Discord servers, channels, and roles to join.
            - items: … (nested further)
          - `streakArray` (array) — Array of streak milestones and corresponding rewards.
            - items: … (nested further)
          - `dripQuestsToComplete` (array) — Array of drip quests required to complete the rule.
            - items: … (nested further)
          - `collection` (array) — Array of collections associated with the rule.
            - items: … (nested further)
          - `range` (array) — Array defining ranges and corresponding rewards.
            - items: … (nested further)
          - `customRewardsApiKey` (string) — API key for custom rewards integration.
          - `link` (string) — Optional link associated with the metadata.
          - `socialPlatform` (string, one of: Custom, Discord, EpicGames, Instagram, Phone, Steam, Telegram, TikTok, Twitch, X(Twitter), YouTube, Google, GitHub, Reddit) — Social media platform associated with the rule.
          - `socialPlatformName` (string) — Name of the social platform.
          - `socialPlatformLogo` (string) — URL of the social platform's logo.
          - `rewardPerImpression` (boolean) — Flag indicating if rewards are given per impression.
          - `snapshotProposals` (array) — Array of snapshot proposals for the rule.
            - items: … (nested further)
          - `cta` (object) — Object containing details for the call-to-action.
            - label: … (nested further)
            - href: … (nested further)
          - `hasSaleCurrency` (boolean) — Flag indicating if the sale currency is included.
          - `isTokenHoldMultiplier` (boolean) — Flag indicating if the token hold multiplier is applied.
          - `saleCurrency` (string) — Currency associated with sales.
          - `isRetroactive` (boolean) — Flag indicating if rewards are applied retroactively.
          - `timeDelayToVerifySeconds` (number) — Time delay in seconds to verify actions.
            - (oneOf)
              - value: … (nested further)
              - value: … (nested further)
          - `referralRequirements` (object) — Object defining referral requirements.
            - points: … (nested further)
            - achievePoints: … (nested further)
            - completeProfile: … (nested further)
            - connectTwitter: … (nested further)
            - connectDiscord: … (nested further)
            - connectEmail: … (nested further)
          - `multiplierLoyaltyCurrencyIds` (array) — Array of loyalty currency IDs used for multipliers.
            - items: … (nested further)
          - `verifyPlaceHolderText` (string) — Placeholder text for verification input fields.
          - `verificationTextMinimumLength` (integer) — Minimum length of the verification text.
          - `buttonText` (string) — Text displayed on the action button.
          - `telegramChannelId` (string) — ID of the Telegram channel.
          - `twitterAccountUrl` (string) — URL of the associated Twitter account.
          - `twitterPostUrl` (string) — URL of the associated Twitter post.
          - `checkLike` (boolean) — Flag indicating if liking the post is required.
          - `checkRepost` (boolean) — Flag indicating if reposting is required.
          - `checkComment` (boolean) — Flag indicating if commenting is required.
          - `maxLikes` (integer) — Reaction limit for likes. Once the post reaches this many likes, the Like requirement is hidden from users. Likes are never verified server-side, so this only controls display.
          - `maxReposts` (integer) — Reaction limit for reposts. Once the post reaches this many reposts, the Repost requirement is hidden and no longer verified.
          - `maxComments` (integer) — Reaction limit for comments. Once the post reaches this many comments, the Comment requirement is hidden and no longer verified.
          - `reactionStats` (object) — Latest scraped public reaction counts for the post, written back from social-service (throttled). Drives which reaction requirements are hidden once they hit their configured limit. Not admin-editable.
            - likeCount: … (nested further)
            - repostCount: … (nested further)
            - commentCount: … (nested further)
            - syncedAt: … (nested further)
          - `checkText` — Text to check in the Twitter post, username, or bio.
            - (oneOf)
              - value: … (nested further)
              - value: … (nested further)
          - `requirePostLink` (boolean) — Flag indicating if the post link is required.
          - `requirePostMediaLink` (boolean) — Flag indicating if media metadata is required.
          - `preGeneratedPostText` (string) — Pre-generated text template that will be used to prefill the post content.
          - `rewardCriteria` (string, one of: IMPRESSIONS_COUNT, ELIGIBLE_POST) — Criteria to evaluate the reward.
          - `smartContract` (object) — Object containing details of the associated smart contract.
            - contractId: … (nested further)
            - event: … (nested further)
            - type: … (nested further)
            - criteria: … (nested further)
            - params: … (nested further)
            - addressMapping: … (nested further)
            - amountMultiplier: … (nested further)
          - `walletType` (string, one of: evm, solana, imx, sui, ton, cosmos, ultra, agw, flow_cadence, substrate) — Type of wallet associated with the rule.
          - `imageUrl` (string) — URL of the image associated with the rule.
          - `onlyRewardSingleTokenOwnership` (boolean) — give points for only one token ownership per contract
          - `skipMultiplier` (boolean) — Flag indicating if the multiplier is skipped.
          - `completeProfileConditions` (object) — Conditions for completing the profile.
          - `steamAppId` (string) — ID of the Steam app.
          - `githubRepoUrl` (string) — URL of the GitHub repository to check for star.
          - `githubBranchName` (string) — Name of the GitHub branch to check for PR merge.
          - `resetProgressOnClaim` (boolean) — If enabled, the progress tracking row will be deleted after a successful claim, allowing the user to re-earn the rule.
          - `rewardPerAction` (boolean) — Flag indicating if the reward is rewarded per action.
          - `rewardByBatch` (boolean) — Flag indicating if the reward is rewarded by batch.
          - `batchSize` (number) — Number of tokens per batch.
          - `youtubeVideoId` (string) — ID of the Youtube video.
          - `youtubeChannelId` (string) — ID of the Youtube channel.
          - `redditPostId` (string) — ID of the Reddit post.
          - `isRestrictedToNewUsers` (boolean) — Flag indicating if the rule is restricted to new users.
          - `allowMultipleRedemptions` (boolean) — Flag indicating if the rule allows multiple redemptions. Applies to Enter a Code only.
          - `rewardBadgePerRange` (boolean) — Flag indicating if the rule can also reward badges per range.
          - `swap` (object) — Metadata for swap loyalty rules
            - provider: … (nested further)
            - relayReferrerId: … (nested further)
            - from: … (nested further)
            - to: … (nested further)
            - requireCrossChainSwap: … (nested further)
          - `rewardPerValue` (boolean) — Flag indicating if the rule should reward based on value of traded tokens instead of count.
          - `conditionDescription` (string) — Description of the external rule condition (only for external rules)
          - `directRpc` (boolean) — Flag indicating if the rule should use direct RPC to get the balance of tokens.
          - `erc20Type` (string, one of: erc20, native) — Type of ERC20 token for the loyalty rule.
          - `rewardQualityPosts` (boolean) — Flag indicating if the rule should reward quality posts.
          - `minimumFollowerCount` (number) — Minimum follower count for the rule. Accepts both number and string values.
          - `autoCheckInRuleIds` (array) — Array of loyalty rule IDs that count as check-in when completed. If ["any"] then any rule completions count as check-in.
            - items: … (nested further)
          - `robinhoodSymbols` (array)
            - items: … (nested further)
        - `network` (string, one of: abstract, abstractTestnet, apechain, arbitrum, avalanche, avalancheFuji, base, baseSepolia, berachain, berachainArtio, berachainBepolia, binance, bscTestnet, campTestnet, fantom, fantomTestnet, flowMainnet, mainnet, nexus, nexusTestnet, optimism, polygon, polygon_mumbai, skaleNebula, skaleEuropa, skaleCalypso, solana, sophon, sophonTestnet, sui, superseed, superseedSepolia, vanar, xai, zksync, coti, cotiTestnet, dogeosTestnet, morph, morphTestnet, morphHolesky, ultra, ultraTestnet, nitrograph, sepolia, optimism_sepolia, arbitrumSepolia, goerli, optimism_goerli, arbitrumGoerli, basecamp, somnia, zkverify, polkadot, kusama, horizen, horizenTestnet, robinhoodChain, robinhoodChainTestnet, flow_cadence, default: "mainnet") — Blockchain network where the rule will apply
        - `collectionAddress` (string) — Blockchain address of the associated collection
        - `collections` (array) — List of associated collections
          - `items` (object)
            - address: … (nested further)
            - network: … (nested further)
            - symbol: … (nested further)
        - `hideInUi` (boolean, default: false) — Whether to hide this rule in the user interface
        - `showBeforeStart` (boolean, default: false) — Whether to show this rule before the start time
        - `trackProgress` (boolean) — Flag indicating if the progress is tracked. If enabled, the rule can only be completed once the progress is 100%.
        - `progressType` (string, one of: counter, percentage) — How tracked progress is interpreted. "percentage" counts 0-100 and is shown as a percentage. "counter" counts up to the highest reward range end and is shown as a raw count.
        - `isRequired` (boolean, default: false) — Whether this rule is required for participation
        - `oauthCredentialsId` (string, uuid) — ID for associated OAuth credentials
        - `rewardType` (string, one of: points, multiplier, badge, token, default: "points") — Type of reward issued by this rule
        - `loyaltyCurrencyId` (string, uuid) — Loyalty currency. Optional when rewardType is token and tokenReward is provided; backend resolves the hidden currency from the contract.
        - `tokenReward` (object) — When rewardType is token, provide relayer and either an ERC-20 contract or isNative=true to find or create the hidden loyalty currency and onchain token.
          - `relayerId` (string, uuid, required) — Stratus relayer for token distribution (same network as contract)
          - `contractId` (string, uuid) — ERC-20 contract to reward with; must match relayer network. Required unless isNative is true.
          - `isNative` (boolean) — When true, reward is the chain native gas token (ETH, MATIC, BNB, …) and contractId is omitted.
        - `frequency` (string, one of: none, once, hourly, daily, weekly, monthly, immediately) — Frequency of the rule execution
        - `interval` (string, one of: hourly, daily, weekly, monthly, once, custom, every_message, unlimited) — Time interval for recurring rule execution
        - `loyaltyRuleGroupId` — ID of the rule group section to associate with the rule
          - (oneOf)
            - value: … (nested further)
            - value: … (nested further)
        - `mediaUrl` (string) — URL of the media to be displayed
        - `maxAmountPerInterval` (number) — The maximum amount of points a user can earn per interval. Available for the smart contract and external rules.
        - `maxAmountInterval` (string, one of: daily, weekly, monthly, lifetime) — The interval for the max amount. Available for the smart contract and external rules.
        - `externalIntegrationId` (string, uuid) — ID of the external integration
        - `shopifyStoreUrl` (string) — URL of the Shopify store
        - `rewardLifetime` (string, one of: permanent, dynamic) — The lifetime of the reward
        - `claimType` (string, one of: manual, auto) — The type of claim for the reward
        - `contractIds` (array) — The IDs of the contracts
          - `items` (string)
        - `dappDeployedWithin` (string, one of: daily, weekly, monthly) — Filter dApps by deployment age before ranking.
        - `dappDataWindow` (string, one of: daily, weekly, monthly) — Reward based on data usage within the last day, week, or month. Leave it empty for all time usage.
        - `deletedAt` (string, date-time) — Timestamp when the loyalty rule was deleted. Set to null to restore a deleted rule.

## Response 403

403
  - response (object) — Schema for forbidden response
    - `message` (string, required) — Error message


---

📦 **OpenAPI specs:** Every OpenAPI specification referenced by this documentation is available as a single download — https://docs.snagsolutions.io/api-specs.zip
