Pick the proof path
Follow task
Use
GET /api/v1/x/followers/check?source={participant}&target={brand} to
check one participant and one target account.Retweet task
Use
GET /api/v1/x/tweets/{id}/retweeters to page retweeters.Reply or quote task
Use
GET /api/v1/x/tweets/{id}/replies for replies.
Use GET /api/v1/x/tweets/{id}/quotes for quote posts.Giveaway selection
Use
POST /api/v1/draws for winner selection and published filters.Choose the focused picker guide
Use the Twitter giveaway picker guide for random winner selection, backups, exports, and public result URLs. Use the comment and retweet picker guide for reply authors, retweeters, hashtags, cursors, and stable user IDs.Follow check
Check one relationship at a time. Store both handles, the result, and time. A follow check proves one source-to-target relationship at one checked time. Store the source handle, target handle, stable user IDs, and response state. Repeat the same request only when the first read is uncertain. Do not treat follower counts as proof for one participant. Use separate rows when campaigns require several target accounts. This prevents one successful relationship from satisfying every follow rule.Tweet-Level checks
Use tweet endpoints when one source tweet defines campaign participation. Keep each cursor with its participant page. Retrieve every available reply, retweeter, or quote page before evaluation. Save each page before requesting the next cursor. Normalize participants to stable X user IDs. Then join required activities by that stable key. Remove duplicate authors only when published uniqueness rules require it. Keep rejection reasons for missing replies, retweets, quotes, or required text. Do not replace missing proof with displayed engagement counts.Retweeters
GET /api/v1/x/tweets/{id}/retweetersReplies
GET /api/v1/x/tweets/{id}/repliesQuotes
GET /api/v1/x/tweets/{id}/quoteshas_next_page is false. Pass next_cursor back as cursor.
Store the campaign ID with every page.
Giveaway draw
Use the Draws API when campaign rules require winner selection. Define every filter before entries close. Never add hidden rules afterward. Record the number of winners and backup winners before running a giveaway. Random selection starts only after every published check completes. Do not randomly pick from an unchecked participant list. Do not pick multiple winners by repeating uncertain create requests. Save the original draw request and returned draw ID immediately. Poll that stored draw until completion or failure. Export inspected entries and selected winners as separate records. Reconcile exported row counts with the stored request before publishing results.type=entries. Export selected winners with
type=winners.
Store one audit row
Use stable user IDs as keys. Display names and handles can change. One audit row should answer who, what, when, and how. Store the participant ID, source Tweet ID, proof endpoint, cursor, and state. Add the campaign ID and checked timestamp. Keep the published rule that required the check. Preserve rejection reasons without exposing private operator notes.Handle costs and retries
Direct X read endpoints are metered. Budget by participants and pages.
Draw execution can meter tweet, reply, retweeter, and follow checks.
402 insufficient_credits stops the audit. Fund or narrow it first.402 insufficient_credits. Add credits or narrow the participant set.
Respect 429 backoff before repeating reads. Never change campaign rules to
avoid a billing or rate-limit response.
Next steps
Create draw
Run a giveaway draw with published eligibility filters.
Export draw
Export winners or all inspected entries.
Check follower
Verify one source and target relationship.
Get retweeters
Page users who retweeted one campaign tweet.