# ReadX Tweet Search API

> ReadX Tweet Search API is a paid API for AI agents from readx.sh, paid per call via x402, $0.01/call, status unknown (last checked 2026-09-14).

Search X/Twitter tweets by query and return matching tweet objects with metadata, paginated via cursor, paid per call with USDC micropayments.

## Facts

- Endpoint: GET https://readx.sh/api/search/tweets
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/readx-tweet-search-api-0c8ddaad
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_lQCWoicvUFB09aMWIm3Sk

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability readx-tweet-search-api-0c8ddaad
```

Example prompt: Search X/Twitter for recent tweets about 'AI agents' and show me the top results including who posted them, when, and how many likes each got.

## When to prefer this

Use this endpoint when you need to search public X/Twitter tweets by keyword, hashtag, or phrase without managing Twitter API keys or OAuth. Ideal for agents that need lightweight, pay-per-call access to tweet search with USDC micropayments (x402 protocol) on Base or Solana. Prefer this over scraping or full Twitter API integrations when cost predictability and no-key access are priorities.

## Known failure modes

- Payment not provided or insufficient USDC — 402 Payment Required
- Invalid or missing search query parameter — 400 Bad Request
- Rate limit exceeded on the underlying X/Twitter data source — 429 Too Many Requests
- Cursor value is invalid or expired — may return empty results or error
- Network timeout reaching readx.sh infrastructure — 503 or timeout error

## How this service works

Search for tweets by query (optional product filter; paginate with cursor). Example: GET /api/search/tweets?q=typescript

## Output

A JSON object containing an array of tweets, each with fields: id, text, userName, createdAt, and likeCount. Also includes a has_more boolean and a next_cursor string for pagination through additional results.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "required": {
   "type": "string"
  },
  "properties": {
   "type": "string"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "code": 0,
  "data": {
   "tweets": [
    {
     "id": "22",
     "card": null,
     "isAI": false,
     "isAd": false,
     "note": null,
     "poll": null,
     "text": "... typescript ...",
     "time": 1142974214,
     "user": {
      "id": "99",
      "bio": "",
      "likes": 0,
      "media": 0,
      "banner": "",
      "tweets": 30000,
      "userPic": "",
      "website": "",
      "fullname": "Someone",
      "joinDate": 1142974214,
      "location": "",
      "username": "someone",
      "followers": 599,
      "following": 307,
      "protected": false,
      "suspended": false,
      "pinnedTweet": "0",
      "verifiedType": "Blue"
     },
     "media": null,
     "quote": null,
     "reply": [],
     "stats": {
      "likes": 42,
      "views": 0,
      "quotes": 0,
      "replies": 0,
      "retweets": 0
     },
     "pinned": false,
     "source": "",
     "history": null,
     "replyId": "0",
     "retweet": null,
     "location": "",
     "threadId": "20",
     "available": true,
     "hasThread": false,
     "mediaTags": null,
     "tombstone": "",
     "attribution": null
    }
   ]
  },
  "pagination": {
   "has_more": true,
   "next_cursor": "DAABCgABG...cursor"
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/readx-tweet-search-api-0c8ddaad/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from readx.sh](https://www.zero.xyz/host/readx.sh/llms.txt)
