## x/search-tweets

`GET /v1/x/search-tweets`

Keyword search over public X posts, newest or top first: text, author card, like/repost/reply/quote/view counts, media, hashtags, mentions and links — 20 posts a page with cursor pagination.

*Search posts*

| Parameter | Required | Description |
| --- | --- | --- |
| `query` | yes | Search terms. X's advanced operators work: from:handle, to:handle, lang:en, min_faves:100, "exact phrase", -word. — e.g. `Monzo bank` |
| `mode` | no | latest (default) for newest first, top for X's relevance ranking. — e.g. `latest` |
| `cursor` | no | Opaque cursor from the previous page's cursor field. |
| `from_date` | no | ISO date lower bound (translated to X's since_time operator). — e.g. `2026-08-01` |
| `to_date` | no | ISO date upper bound (translated to X's until_time operator). — e.g. `2026-09-01` |
| `include_reposts` | no | Set true to include reposts or false to exclude them. Set this explicitly and preserve it across pages; omitted behavior can differ across sources. — e.g. `false` |
| `sort` | no | Alias for mode: latest or top. mode takes precedence; otherwise sort takes precedence over sort_by. Equivalent spellings share the response cache. — e.g. `latest` |
| `sort_by` | no | Alias for mode: latest or top. mode, then sort, take precedence. Equivalent spellings share the response cache. — e.g. `top` |
| `dry_run` | no | Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. — e.g. `1` |
| `judgments` | no | Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. — e.g. `on` |
| `label` | no | Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. — e.g. `none` |
| `label_evidence` | no | Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. — e.g. `1` |
| `exclude` | no | Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. — e.g. `engagement_bait` |
| `fit` | no | Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. — e.g. `goal` |
| `goal` | no | Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts. — e.g. `Find concrete product complaints` |
| `tokens` | no | Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. — e.g. `4000` |

**Cost:** 1 credit at list price per successful uncached response; variable-cost operations may quote or settle a different charge. Confirmed uncharged or refunded failures report zero. Pending reconciliation can report credits_used:null; retain request_id and the original idempotency key.

```bash
curl "https://www.monocrawl.com/v1/x/search-tweets?query=Monzo%20bank" \
  -H "x-api-key: mn_your_key_here"
```

### Response data

Illustrative abbreviated data; documented core fields are optional and may be null. Additional source fields are allowed.

```json
{
  "items": [
    {
      "id": "1900000000000000001",
      "text": "Our workspace guide is ready.",
      "created_at": "2026-09-01T12:00:00.000Z",
      "author": {
        "handle": "example_creator",
        "name": "Example Creator"
      },
      "stats": {
        "likes": 42,
        "retweets": 8,
        "replies": 5,
        "views": null
      }
    }
  ],
  "cursor": null,
  "has_more": null
}
```

[Field reference](https://www.monocrawl.com/docs/endpoints/x/search-tweets#response) · [JSON Schema for response.data](https://www.monocrawl.com/schemas/x/search-tweets.json)
