xanguard docs
Docs Home
Overview
Getting Started Conventions Webhooks
Tweet Alerts API
REST API WebSocket
B2B API
WebSocket API REST API CA Search
Endpoint Request Body Response Quote, Retweet & Reply Context Plans & Limits
Product APIs
Community Watch Convergence Tracker ECA (pump.fun launches) Engagement Tracker Trending Alerts PumpFun Livestream Search Alerts
Overview
Changelog
Guides
Telegram Bot Guides Support
API Docs Telegram Guides
Docs / B2B API / CA Search

Tweet search API by contract address (CA Search)

CA Search is a B2B Extra Feature: full tweet search by contract address, ticker, cashtag, or any keyword — returned as structured JSON with complete tweet and author metadata. Built for trading apps that need to show who called a token and what they said, without sending users to x.com.

It answers the questions degens ask about any CA: which accounts posted it, how big they are, what reach the token has, and the full context of every quote, retweet, and reply.

Endpoint

POST https://api.xanguard.tech/v1/search

Uses your B2B (dt_) API key — issued when you activate CA Search in @B2B_Xanguard_bot, with or without a base B2B subscription (standalone works). Both auth header styles are accepted:

Authorization: Bearer dt_your_api_key_here
# or, twitterapi.io-compatible:
X-API-Key: dt_your_api_key_here

Request Body

FieldTypeDescription
querystringRequired, 1–200 bytes after trimming (UTF-8, so fewer characters for non-Latin text). Contract address, $TICKER, cashtag, or any keywords.
cursorstringOptional. Send the previous response's next_cursor together with the same query, since and until; without since the window resets to the last 24h. An unrecognised cursor restarts from the newest tweet.
sincestringOptional. Window start — RFC3339 (2026-07-20T00:00:00Z), YYYY-MM-DD (midnight UTC), or unix epoch (s or ms). Defaults to 24 hours ago.
untilstringOptional. Window end (exclusive) — same formats as since. If it is more than 24 hours ago you must also send since, e.g. {"query": "...", "since": "2026-07-20", "until": "2026-07-25"}.
curl -X POST https://api.xanguard.tech/v1/search \
  -H "Authorization: Bearer dt_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"query": "0x7a848a5a8169aa6a2f603d056a749f924f504444"}'

Historical window example:

curl -X POST https://api.xanguard.tech/v1/search \
  -H "Authorization: Bearer dt_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"query": "0x7a848a5a8169aa6a2f603d056a749f924f504444", "since": "2026-07-20", "until": "2026-07-25"}'

Response

Standard envelope. Each call searches backwards through the window — the last 24 hours by default, or a custom range when since/until are supplied (echoed back as data.since / data.until; data.window_hours is always 24) — and returns up to 200 tweets per call in data.tweets, each with full engagement metrics and a complete author object. Very hot queries (or long windows) that exceed 200 tweets come back with has_next_page: true — pass next_cursor as cursor to continue. Rarely, a call returns fewer tweets with has_next_page: false. Every call counts once against your daily search allowance, including cursor continuations and calls that fail with 500. data.summary aggregates the result set: how many unique authors posted, total_reach (author followers summed once per returned tweet) and top_callers (the authors of the 5 highest-follower tweets, so an author can repeat).

{
  "ok": true,
  "data": {
    "tweets": [
      {
        "type": "tweet",
        "id": "1947000000000000000",
        "url": "https://x.com/hongxiao_sol/status/1947000000000000000",
        "text": "$EXAMPLE just launched, CA: 0x7a84…4444",
        "createdAt": "Sun Jul 20 10:15:00 +0000 2026",
        "retweetCount": 3,
        "replyCount": 1,
        "likeCount": 42,
        "quoteCount": 0,
        "viewCount": 5100,
        "bookmarkCount": 2,
        "lang": "en",
        "isReply": false,
        "inReplyToId": "",
        "inReplyToUsername": "",
        "conversationId": "1947000000000000000",
        "author": {
          "userName": "hongxiao_sol",
          "name": "Hong",
          "id": "1500000000000000000",
          "followers": 11145,
          "following": 320,
          "isBlueVerified": true,
          "profilePicture": "https://pbs.twimg.com/profile_images/…",
          "description": "sol maxi",
          "location": "",
          "createdAt": "Mon Mar 15 09:00:00 +0000 2021",
          "statusesCount": 8900,
          "mediaCount": 1200,
          "favouritesCount": 4500
        },
        "entities": {"hashtags": [], "urls": [], "user_mentions": []},
        "quoted_tweet": null,
        "retweeted_tweet": null
      }
    ],
    "summary": {
      "total_tweets": 20,
      "unique_authors": 17,
      "total_reach": 208122,
      "top_callers": ["@whalecaller", "@hongxiao_sol"]
    },
    "window_hours": 24,
    "has_next_page": false,
    "next_cursor": null
  }
}

Quote, Retweet & Reply Context

Every tweet keeps its full context, so you can render the original content alongside reposts and replies:

FieldPresent whenContents
quoted_tweetThe tweet quotes anotherNested tweet object: id, url, text, author, metrics
retweeted_tweetThe tweet is a repostNested tweet object of the original
originalThe tweet is a reply (filled for up to the first 30 replies per call; omitted if the parent could not be fetched)The parent tweet: id, text, author username

Plans & Limits

CA Search is a monthly plan — standalone or on top of your B2B subscription (activate in @B2B_Xanguard_bot → Extra Features):

PlanDaily searchesPrice
CA Search 1K1,000/day (~30k/mo)$100/mo
CA Search 2K2,000/day (~60k/mo)$180/mo
CA Search 5K5,000/day (~150k/mo)$250/mo
LimitValue
Rate limit10 requests/sec and 20 requests/min per Telegram account (all your keys share it), in fixed windows that start at your first request
Results per callUp to 200 tweets per call (default window: last 24h; custom via since/until) — continue with cursor for hotter queries or longer windows

200, 429 and 500 responses carry your quota state as headers — check them instead of hard-coding plan values:

HeaderMeaning
X-RateLimit-Daily-LimitYour plan's daily search allowance (e.g. 1000)
X-RateLimit-Daily-RemainingSearches left today (UTC day) after this request
X-RateLimit-Minute-LimitBurst ceiling per minute window (20)
X-RateLimit-Minute-RemainingBurst allowance left in the current minute window
StatusMeaningExample error
400Missing or oversized query, or a bad since/until (bad_request)"Query must be 1-200 characters" · "Invalid since/until" · "since must be before until"
401Missing / invalid dt_ key (unauthorized)"Invalid or inactive API key"
403CA Search add-on not enabled on this key, or expired"CA Search is not enabled for this key"
422Body has no query field (plain-text response)—
429Rate limit (rate_limited, retry_after 1 or 60) or daily allowance exhausted (daily_limit_reached, retry_after = seconds to 00:00 UTC); also a Retry-After header"Daily search limit reached (1000/1000)"
500Temporary search failure (server_error, retry_after 30); still counted against your allowance"Search failed"

Add-on feature. CA Search is enabled per B2B subscription. Buy it under Extra Features → CA Search in @B2B_Xanguard_bot — SOL payment, automatic activation on confirmation. Payments are final and non-refundable; all prices are on xanguard.tech/pricing.

← B2B API REST APICommunity Watch →

© 2026 Xanguard  ·  Last updated October 5, 2026