---
title: 'Complete Loyalty Rule'
description: 'Verify a loyalty rule based on user action and reward them if applicable. This endpoint currently only supports following rule types: code_entry, text_input, link_click, external_rule, connect_wallet, check_in, connected_twitter, drip_x_follow, drip_x_new_tweet, drip_x_text_in_bio, drip_x_text_in_name, drip_x_text_in_comment, drip_x_tweet, connected_phone, instagram_post, instagram_follow, connected_steam, steam_wishlist, connected_epic, connected_email, profile_completed, connected_telegram, telegram_messages, telegram_join, connected_discord, discord_member, DiscordMessages, discord_join, discord_role_grant, quiz, poll, TokenHold, token_hold_erc20, connected_github, github_repo_star, github_repo_fork, github_repo_collaborator, connected_youtube, youtube_subscribers, youtube_comment, connected_reddit, reddit_comment, connected_instagram, points_airdrop, shopify_spend, swap, connected_tiktok, tiktok_post, tiktok_follow, post_impressions, stratus_function, dapps_by_gas_spent, dapps_by_active_users, dapps_by_new_users'
openapi: POST /api/loyalty/rules/{id}/complete
---

> **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}/complete` — path parameters: `id`

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

Verify a loyalty rule based on user action and reward them if applicable. This endpoint currently only supports following rule types: code_entry, text_input, link_click, external_rule, connect_wallet, check_in, connected_twitter, drip_x_follow, drip_x_new_tweet, drip_x_text_in_bio, drip_x_text_in_name, drip_x_text_in_comment, drip_x_tweet, connected_phone, instagram_post, instagram_follow, connected_steam, steam_wishlist, connected_epic, connected_email, profile_completed, connected_telegram, telegram_messages, telegram_join, connected_discord, discord_member, DiscordMessages, discord_join, discord_role_grant, quiz, poll, TokenHold, token_hold_erc20, connected_github, github_repo_star, github_repo_fork, github_repo_collaborator, connected_youtube, youtube_subscribers, youtube_comment, connected_reddit, reddit_comment, connected_instagram, points_airdrop, shopify_spend, swap, connected_tiktok, tiktok_post, tiktok_follow, post_impressions, stratus_function, dapps_by_gas_spent, dapps_by_active_users, dapps_by_new_users

## Authentication

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

## Path parameters

- `id` (string, required)

## Request body

- Content type: `application/json`
  - request body (object) — Schema for completing a loyalty rule
    - `verificationCode` (string) — Optional verification code for completing the loyalty rule
    - `userId` (string, uuid) — Unique identifier for the user
    - `walletAddress` (string) — Wallet address of the user can only be used if userId is not provided
    - `contentUrl` (string) — Link to the post/comment made by user
    - `loyaltyQuestionChoiceId` (string) — ID of the choice selected by the user
    - `verifyOnly` (string, default: "false") — Flag indicating if only verification is required, this will not create a transaction and reward the user.
    - `rangeValue` (number) — Value to compare with the range
    - `amount` (number) — Override amount for the reward (rounded to nearest whole number). This will override the rule amount and reward the integer passed.
    - `idempotencyKey` (string) — Unique key to ensure idempotent requests.
    - `skipChainOrRequiredCheck` (boolean) — Flag indicating if the chain or required check should be skipped.

## Response 200

200
  - response (object)
    - `message` (string, required, one of: Completion request added to queue, Link click being verified, come back later to check the status)

## Response 304

304
  - response (object)
    - `message` (string, required, one of: Completion request already in queue)

## Response 400

400
  - response (object)
    - `message` (string, required, one of: loyaltyRuleId must be a uuid, Loyalty rule {NAME} has expired, Loyalty rule {NAME} has not started yet, Only external rules can have amount override, Only external rules can have idempotency key override, Loyalty currency not found, Api key is required to skip chain or required check, Access restricted. Your account is blocked., Please complete other required rules to unlock this quest., Unfortunately, this quest is only available for new users, Unfortunately, we couldn't verify the code you entered. Please ensure it's correct and try again, Invalid Verification, try again, Quest not completed, You have already clicked the link, please wait for the reward to be processed, Check-in amount rule cannot be completed when amount is 0, Twitter not connected, Phone not connected or not verified, Instagram not connected, Telegram not connected, Discord not connected, Epic not connected, Email not verified, GitHub not connected, Youtube not connected, Reddit not connected, Comment link is required, TikTok not connected, Twitter not connected or content url is required, Steam not connected, Email not connected or not verified, No choice selected, Question not found, Invalid choice selected, Claim on token hold is not supported for Sui, Claim on token hold is not supported for paid full royalty or native purchases, Claim on token hold is only supported for multipliers, Rule is not setup, Quest not achieved, please try again., Invalid request) — Categorized examples of messages that may be returned for a loyalty rule's processing result. possible messages: 'loyaltyRuleId must be a uuid', 'Loyalty rule {NAME} has expired', 'Loyalty rule {NAME} has not started yet', 'Only external rules can have amount override', 'Only external rules can have idempotency key override', 'Loyalty currency not found', 'Api key is required to skip chain or required check', 'Access restricted. Your account is blocked.', 'Please complete other required rules to unlock this quest.', 'Unfortunately, this quest is only available for new users', "Unfortunately, we couldn't verify the code you entered. Please ensure it's correct and try again", 'Invalid Verification, try again', 'Quest not completed', 'You have already clicked the link, please wait for the reward to be processed', 'Check-in amount rule cannot be completed when amount is 0', 'Twitter not connected', 'Phone not connected or not verified', 'Instagram not connected', 'Telegram not connected', 'Discord not connected', 'Epic not connected', 'Email not verified', 'GitHub not connected', 'Youtube not connected', 'Reddit not connected', 'Comment link is required', 'TikTok not connected', 'Twitter not connected or content url is required', 'Steam not connected', 'Email not connected or not verified', 'No choice selected', 'Question not found', 'Invalid choice selected', 'Claim on token hold is not supported for Sui', 'Claim on token hold is not supported for paid full royalty or native purchases', 'Claim on token hold is only supported for multipliers', 'Rule is not setup', 'Quest not achieved, please try again.', 'Invalid request'

## Response 401

401
  - response (object)
    - `message` (string, required, one of: Unauthorized, Invalid token)

## Response 403

403
  - response (object)
    - `message` (string, required, one of: Failed to claim, limit reached for the website, The rewards program is temporarily paused, so claiming is currently unavailable. Please try again later.)

## Response 404

404
  - response (object)
    - `message` (string, required, one of: Loyalty rule not found, Loyalty currency not found, User not found)

## Response 429

429
  - response (object) — Schema for too many request response
    - `message` (string, required) — Error message

## Response 500

500
  - response (object)
    - `message` (string, required, one of: An error occurred while verifying the link click, Internal server error)


---

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