How to Search X Cashtag Discussions with TwexAPI
Cashtags turn market conversations into searchable labels. When people post about $TSLA, $NVDA, or $BTC, you can use POST https://api.twexapi.io/twitter/cashtags to collect relevant X posts and build a monitoring workflow around them.
This guide keeps the job narrow: request the posts, normalize the fields you need, and send the results into a review queue. The endpoint gives you social context; it should not be treated as investment advice or a trading signal by itself.
When This Endpoint Fits
Use Search Cashtags when you need a current feed of posts mentioning one or more market symbols. It is useful for:
- Tracking which posts are driving discussion around a ticker.
- Collecting language-specific samples for sentiment or topic analysis.
- Finding high-engagement posts for manual review.
- Building internal alerts when a symbol receives unusual attention.
For financial work, keep the boundary clear. Cashtag activity can show what people are discussing, but it does not confirm whether the information is accurate, material, or already reflected in price.
Request Model
Send a JSON body to POST /twitter/cashtags and authenticate with Authorization: Bearer <token>.
| Field | Type | Notes |
|---|---|---|
cashtags | array of strings | Symbols to search for, with or without the $ prefix. Example: ["AAPL", "TSLA"]. |
startTime / endTime | string or null | UNIX timestamp strings that bound the search window. |
sortBy | "Latest" or "Top" | Use Latest for monitoring and Top for review of higher-engagement posts. |
maxItems | integer | Number of posts to return, from 1 to 1000. |
mininumLikes / mininumRetweets / mininumReplies | integer | Engagement filters. Use the field names as documented, including the mininum spelling. |
blueVerified / verified | boolean | Optional account verification filters. |
language | string | Language code such as en, ja, or zh. |
onlyImage / onlyVideo / onlyQuote / onlyReply | boolean | Optional content-type filters. Leave them unset when you want a broad sample. |
Basic Request
This request pulls recent English posts that mention three symbols, sorted by newest first.
1curl --request POST \
2 --url https://api.twexapi.io/twitter/cashtags \
3 --header 'Authorization: Bearer <token>' \
4 --header 'Content-Type: application/json' \
5 --data '{
6 "cashtags": ["TSLA", "NVDA", "BTC"],
7 "startTime": "1775726400",
8 "endTime": "1775727300",
9 "sortBy": "Latest",
10 "maxItems": 50,
11 "language": "en",
12 "mininumLikes": 5
13 }'A successful response returns code, msg, and data. Each item in data is a tweet object with fields such as tweet_id, text, full_text, created_at, created_at_datetime, favorite_count, retweet_count, reply_count, quote_count, cashtags, hashtags, media, and user information.
1{
2 "code": 200,
3 "msg": "success",
4 "data": [
5 {
6 "tweet_id": "1803006263529541838",
7 "text": "Example post mentioning $TSLA",
8 "created_at_datetime": "2024-06-17T03:51:48.000Z",
9 "favorite_count": 123,
10 "retweet_count": 45,
11 "reply_count": 8,
12 "cashtags": ["$TSLA"]
13 }
14 ]
15}Python Client
Keep the API call small and explicit. This client returns the raw data array, so your application can decide how to store, rank, or review the posts.
1import os
2from typing import Any
3
4import requests
5
6API_URL = "https://api.twexapi.io/twitter/cashtags"
7TOKEN = os.environ["TWEXAPI_BEARER_TOKEN"]
8
9def search_cashtags(
10 cashtags: list[str],
11 *,
12 start_time: str | None = None,
13 end_time: str | None = None,
14 sort_by: str = "Latest",
15 max_items: int = 50,
16 language: str | None = "en",
17 min_likes: int = 0,
18) -> list[dict[str, Any]]:
19 payload: dict[str, Any] = {
20 "cashtags": cashtags,
21 "sortBy": sort_by,
22 "maxItems": max_items,
23 "mininumLikes": min_likes,
24 }
25
26 if start_time:
27 payload["startTime"] = start_time
28 if end_time:
29 payload["endTime"] = end_time
30 if language:
31 payload["language"] = language
32
33 response = requests.post(
34 API_URL,
35 headers={
36 "Authorization": f"Bearer {TOKEN}",
37 "Content-Type": "application/json",
38 },
39 json=payload,
40 timeout=30,
41 )
42 response.raise_for_status()
43 return response.json().get("data", [])
44
45if __name__ == "__main__":
46 tweets = search_cashtags(["TSLA", "NVDA", "BTC"], max_items=25, min_likes=5)
47 for tweet in tweets[:5]:
48 text = tweet.get("full_text") or tweet.get("text") or ""
49 print(tweet.get("tweet_id"), tweet.get("cashtags"), text[:140])Build a Review Queue
The most useful first version is usually not a sentiment dashboard. It is a clean queue that tells an analyst what to inspect next.
1def review_row(tweet: dict[str, Any]) -> dict[str, Any]:
2 favorite_count = tweet.get("favorite_count") or 0
3 retweet_count = tweet.get("retweet_count") or 0
4 reply_count = tweet.get("reply_count") or 0
5 quote_count = tweet.get("quote_count") or 0
6 engagement = favorite_count + retweet_count + reply_count + quote_count
7
8 return {
9 "tweet_id": tweet.get("tweet_id"),
10 "created_at": tweet.get("created_at_datetime") or tweet.get("created_at"),
11 "cashtags": ", ".join(tweet.get("cashtags") or []),
12 "language": tweet.get("lang"),
13 "engagement": engagement,
14 "text": tweet.get("full_text") or tweet.get("text") or "",
15 "url": f"https://x.com/i/status/{tweet.get('tweet_id')}",
16 }
17
18tweets = search_cashtags(["TSLA", "NVDA"], sort_by="Latest", max_items=100)
19rows = sorted((review_row(tweet) for tweet in tweets), key=lambda row: row["engagement"], reverse=True)
20
21for row in rows[:10]:
22 print(row["engagement"], row["cashtags"], row["url"])From there, write rows to your database, spreadsheet, or internal moderation tool. Store tweet_id as a unique key so repeated monitoring runs do not create duplicates.
Monitoring Pattern
A practical monitoring loop has five parts:
- Query
sortBy: "Latest"for the symbols you care about. - Store every new
tweet_idwith its raw response payload. - Compute a simple review score from replies, reposts, likes, quotes, and recency.
- Route only the highest-priority rows to humans or downstream analysis.
- Keep price data, news validation, and compliance review in separate systems.
This pattern avoids the common trap of turning noisy social posts into false precision. The API gives you the conversation; your workflow decides what deserves attention.
Common Pitfalls
- Use the documented engagement filter names:
mininumLikes,mininumRetweets, andmininumReplies. - Send
startTimeandendTimeas UNIX timestamp strings, not date strings. - Do not set
onlyImage,onlyVideo,onlyQuote, andonlyReplyall totrueunless you really want to narrow the result set that much. - Keep
maxItemssmall while you tune filters, then increase it once the query returns useful posts. - Treat cashtag posts as social data. They can include jokes, spam, rumors, and coordinated campaigns.
Wrap-up
POST /twitter/cashtags is a focused endpoint for collecting X posts around stock and crypto symbols. The strongest workflow is simple: search the right cashtags, filter by time and language, normalize the response, deduplicate by tweet_id, and review the posts before drawing conclusions.
Use it to monitor the conversation, not to replace financial research.