# Tweet Search (`sentiment_twitter`)

> Raw crowd voice: public X posts from the last seven days on a coin, a topic or a single account, with likes, reposts, replies and views attached, so volume can be weighed against actual reach.

- Category: Sentiment
- MCP tool: `sentiment_twitter`
- REST: `GET /sentiment/twitter`
- x402 price: $0.10 per call (USDC on Base)
- HTML: https://www.f1ow.com/docs/tools/sentiment_twitter

## What it does

Searches public X Posts from the last 7 days using X search syntax (keywords, phrases, hashtags, cashtags, or operators such as from:handle). Returns engagement, views and direct links; sorted by relevance unless latest=true. Results are capped at 10 Posts.

## Parameters

| Name | Type | In | Required | Description |
| --- | --- | --- | --- | --- |
| `query` | string | query | yes | X recent-search query (keywords, phrases, hashtags, cashtags, or operators), e.g. "$BTC", "bitcoin ETF", or "from:handle BTC". Self-serve query limit: 512 characters. |
| `latest` | boolean | query | no | Return the newest Posts instead of top relevance. Defaults to false. |
| `minLikes` | integer | query | no | Only Posts with at least this many likes. Defaults to 0. |
| `limit` | integer | query | no | Max Posts to return (1-10). Defaults to 5. |

## Call it

### cURL

```bash
curl "https://mcp.f1ow.com/v1/sentiment/twitter?query=%24BTC&limit=5" \
  -H "Authorization: Bearer $F1OW_API_KEY"
```

### MCP

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "sentiment_twitter",
    "arguments": {
      "query": "$BTC",
      "limit": 5
    }
  }
}
```

### TypeScript

```ts
const res = await fetch("https://mcp.f1ow.com/v1/sentiment/twitter?query=%24BTC&limit=5", {
  headers: { Authorization: `Bearer ${process.env.F1OW_API_KEY}` },
});
const data = await res.json(); // the tool's result as JSON, typed in the OpenAPI spec
console.log(data);
```

### Python

```python
import os, requests

res = requests.get(
    "https://mcp.f1ow.com/v1/sentiment/twitter?query=%24BTC&limit=5",
    headers={"Authorization": f"Bearer {os.environ['F1OW_API_KEY']}"},
)
data = res.json()  # the tool's result as JSON, typed in the OpenAPI spec
print(data)
```

### WebSocket

```jsonc
// wss://mcp.f1ow.com/v1/ws — subprotocol "jsonrpc-2.0", Authorization: Bearer <key>
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "sentiment_twitter",
    "arguments": {
      "query": "$BTC",
      "limit": 5
    }
  }
}

// Or push a fresh result whenever it changes (minimum interval 15 s)
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "subscriptions/subscribe",
  "params": {
    "name": "sentiment_twitter",
    "arguments": {
      "query": "$BTC",
      "limit": 5
    },
    "intervalSeconds": 60
  }
}
```

### x402

```bash
# No account: the first call answers 402 with a PAYMENT-REQUIRED challenge;
# an x402 client pays it in USDC on Base and retries.
curl "https://mcp.f1ow.com/x402/v1/sentiment/twitter?query=%24BTC&limit=5"
```

## Sample response

Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed):

```json
{
  "tweets": [
    {
      "createdAt": "2026-11-13T08:05:30.000Z",
      "likes": 0,
      "replies": 0,
      "retweets": 0,
      "text": "@benjamincowen The Bitcoin bottom still isn't in\" Crowd yelling \"l told you so\" right now is hilarious.\nIf your target is below\n$57K, you still haven't been right yet.\nPut the trophy down before you hurt yourself. $BTC",
      "url": "https://x.com/i/web/status/2121152461197251052",
      "views": 0
    },
    {
      "createdAt": "2026-11-13T08:05:20.000Z",
      "likes": 0,
      "replies": 0,
      "retweets": 0,
      "text": "Fear &amp; Greed hit 20, the lowest since July. Since 2016, $BTC reclaimed the short-term holder cost basis (now ~$75.7K) within 2 weeks in 11 of 14 dips. My line in the sand: a daily close below $60K.",
      "url": "https://x.com/i/web/status/2121152417370665329",
      "views": 0
    },
    {
      "createdAt": "2026-11-13T08:05:19.000Z",
      "likes": 0,
      "replies": 1,
      "retweets": 0,
      "text": "🚨 $BTC just flushed $1.3B in longs and hit $67.9K.\n\nThe 2026 floor sits near $60K. I don't think it breaks.\n\nThis is a higher low. https://t.co/UB8xC4enPw",
      "url": "https://x.com/i/web/status/2121152415210651877",
      "views": 14
    },
    {
      "createdAt": "2026-11-13T08:05:15.000Z",
      "likes": 1,
      "replies": 0,
      "retweets": 0,
      "text": "GM, wtf happened to $BTC? 🥹 https://t.co/ebgiIlNrBO",
      "url": "https://x.com/i/web/status/2121152399716876490",
      "views": 386
    },
    {
      "createdAt": "2026-11-13T08:05:09.000Z",
      "likes": 0,
      "replies": 0,
      "retweets": 0,
      "text": "Bitcoin $BTC just dumped. Latest technical analysis.\nThe 9th point of my 9/21 analysis, the drop, is happening today!\nBut if it breaks below 62500, this scenario no longer works.\n⠀\nStill valid as of today.\n⠀\nIf you're interested, check my earlier detailed analysis below. https://t.co/KVAYxIivcu",
      "url": "https://x.com/i/web/status/2121152371732475906",
      "views": 2
    }
  ],
  "generatedAt": "2026-11-13T08:05:30.0000000+00:00"
}
```

Over MCP the text report a model reads comes with it:

```text
0 likes, 0 reposts, 0 replies, 0 views | 2026-11-13T08:05:30.000Z
  @benjamincowen The Bitcoin bottom still isn't in" Crowd yelling "l told you so" right now is hilarious. If your target is below $57K, you still haven't been right yet. Put the trophy down before you hurt yourself. $BTC
  https://x.com/i/web/status/2121152461197251052
0 likes, 0 reposts, 0 replies, 0 views | 2026-11-13T08:05:20.000Z
  Fear &amp; Greed hit 20, the lowest since July. Since 2016, $BTC reclaimed the short-term holder cost basis (now ~$75.7K) within 2 weeks in 11 of 14 dips. My line in the sand: a daily close below $60K.
  https://x.com/i/web/status/2121152417370665329
0 likes, 0 reposts, 1 replies, 14 views | 2026-11-13T08:05:19.000Z
  🚨 $BTC just flushed $1.3B in longs and hit $67.9K. The 2026 floor sits near $60K. I don't think it breaks. This is a higher low. https://t.co/UB8xC4enPw
  https://x.com/i/web/status/2121152415210651877
1 likes, 0 reposts, 0 replies, 386 views | 2026-11-13T08:05:15.000Z
  GM, wtf happened to $BTC? 🥹 https://t.co/ebgiIlNrBO
  https://x.com/i/web/status/2121152399716876490
0 likes, 0 reposts, 0 replies, 2 views | 2026-11-13T08:05:09.000Z
  Bitcoin $BTC just dumped. Latest technical analysis. The 9th point of my 9/21 analysis, the drop, is happening today! But if it breaks below 62500, this scenario no longer works. ⠀ Still valid as of today. ⠀ If you're interested, check my earlier detailed analysis below. https://t.co/KVAYxIivcu
  https://x.com/i/web/status/2121152371732475906
```

## Related tools

- [Fear & Greed](https://www.f1ow.com/docs/tools/sentiment_fear_greed) — The market-wide Fear & Greed index, 0 to 100 with the label that goes with it. One number for how the crowd is feeling.
- [Social Sentiment](https://www.f1ow.com/docs/tools/sentiment_social) — Per-coin social composite: galaxy score, alt rank, bullish share, social volume, dominance and interactions. How much attention a coin is getting, and from whom.
- [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call.
- [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching.
