Available Verification Checks
Here is what you can verify, which endpoint to use, and what you cannot check:| Action | Endpoint | Method | What it returns |
|---|---|---|---|
| User follows an account | /check-follow | POST | {follow: true/false} |
| User retweeted a tweet | /check-retweet | POST | {retweet: true/false} |
| User quoted a tweet | /check-quoted | POST | {status: "quoted" / "retweet" / "not_found"} |
| User commented on a tweet | /check-comment | GET | {commented: true/false} |
| User is a community member | /check-community-member | POST | {is_member: true/false} |
Check 1: Did the User Follow an Account?
The most common campaign task. “Follow @YourBrand to enter the giveaway.” Endpoint:POST /v3/check-follow
Simplest Example
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
project_handle | string | One of | The account that should be followed (your brand). |
project_id | string | these | Alternatively, the numeric user ID of the target account. |
username | string | One of | The participant’s handle. |
user_link | string | these | Or their profile URL. |
user_id | string | Or their numeric user ID. |
Python
JavaScript
user_protected is true, the user’s follow relationships are private and cannot be verified.
Check 2: Did the User Retweet a Tweet?
“Retweet this post to enter.” The endpoint checks up to 100 retweets per request and supports pagination for tweets with thousands of retweets. Endpoint:POST /v3/check-retweet
Simplest Example
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
tweet_link | string | Yes | Full URL of the tweet that should be retweeted. |
username | string | One of | Participant’s handle. |
user_link | string | these | Or profile URL. |
user_id | string | Or numeric user ID. | |
next_cursor | string | No | For pagination if checking tweets with many retweets. |
next_cursor you can use to check the next batch. For most campaign verification, one request is sufficient - users typically retweet shortly after the campaign starts, and their retweet will be in the most recent batch.
Check 3: Did the User Quote a Tweet?
“Quote tweet this post with your thoughts.” The/check-quoted endpoint distinguishes between a quote tweet and a plain retweet, returning a status string.
Endpoint: POST /v3/check-quoted
Simplest Example
Response
status field returns one of three values: "quoted" (user posted a quote tweet), "retweet" (user retweeted without adding text), or "not_found" (neither action detected). The response also includes the date and text of the quote, which you can use for content quality checks.
Check 4: Did the User Comment on a Tweet?
“Leave a comment under this post.” This is the only verification endpoint that uses GET instead of POST. Endpoint:GET /v3/check-comment
Simplest Example
Parameters (query string)
| Parameter | Type | Required | Description |
|---|---|---|---|
tweet_link | string | Yes | URL of the tweet to check for comments. |
user_handle | string | One of | Participant’s handle. |
user_id | string | these | Or numeric user ID. |
commented is true, the response includes the full tweet object of the comment itself - with text, engagement metrics, and timestamp. You can use this to verify comment quality (e.g., minimum length, must contain a specific hashtag) beyond just checking existence.
Check 5: Is the User a Community Member?
“Join our X Community to participate.” Useful for campaigns that require community membership as a prerequisite. Endpoint:POST /v3/check-community-member
Simplest Example
Building a Campaign Verification Pipeline
In a real campaign, users complete multiple tasks. Here is a pattern that checks all tasks for a single participant and returns which ones they have completed:Verifying Participants in Bulk
When a campaign has hundreds or thousands of participants, you need to verify them in batch. Here is a pattern that processes a list of usernames and outputs a summary:time.sleep(0.3) in the example above keeps you safely within limits.
Account Ownership Verification
Before a user can participate in your campaign, you may want to prove they actually own the X handle they provided. A common pattern:- Generate a unique code (e.g.,
VERIFY-a8f3b2) and show it to the user. - Ask them to post a tweet containing that code.
- Use
/user-tweetsto fetch their recent tweets and check if the code appears.
Scoring Participants by Influence
Not all participants have equal reach. A retweet from an account with 50,000 followers is worth more to your campaign than one from an account with 50 followers. Use the/info endpoint to fetch the participant’s profile and weight their reward accordingly:
Anti-Fraud Considerations
Automated campaigns attract bots. A few checks to keep your campaign clean: Minimum account age. Fetch the participant’s profile via/info and check created_at. Reject accounts created in the last 30 days - most bot farms use fresh accounts.
Minimum activity. Check tweets_count and followers_count. An account with 0 tweets and 2 followers is almost certainly not a real participant.
Comment quality. When verifying comments via /check-comment, the response includes the full tweet text. Check for minimum length, presence of required keywords or hashtags, and reject single-character or emoji-only replies.
Quote quality. The /check-quoted response includes the quote text. Apply the same quality checks as for comments.
Rate of completion. If a user completes all 5 tasks within 3 seconds of receiving the task list, that is a bot. Log timestamps and flag suspiciously fast completions.
A Note on Likes
X (Twitter) made likes private in 2024. The platform no longer exposes which users liked a specific tweet through any public API - not Sorsa, not the official X API, not any third-party tool. If your campaign previously included a “Like this tweet” task, replace it with a retweet or comment requirement, both of which remain fully verifiable.Next Steps
- How to Search Tweets via API - find campaign-related tweets by keyword for broader monitoring.
- Search Mentions Guide - track organic mentions of your brand alongside campaign-driven mentions.
- Real-Time Monitoring - verify tasks in near-real-time by polling for new activity.
- Followers and Following - extract your own follower list to cross-reference with campaign participants.
- API Reference - full specification for
/check-follow,/check-retweet,/check-quoted,/check-comment,/check-community-member, and all 38 endpoints.