X Monitors

Beta

Monitor X (Twitter) for new posts. Webclaw periodically polls a profile, search, list, or reply thread, matches new tweets against your filters, and notifies you via webhook when something matches. This is the X analog of URL watches.

Note
X monitors are a paid feature — free or lapsed accounts receive a 403. Maximum 50 monitors per user. Each check is billed at your plan rate (Starter 5, Growth 3, Pro 2, Scale 1 credits), whether automated or triggered manually.

Create a monitor

POST/v1/x/monitors

Create a new X monitor with a poll interval, filters, and an optional webhook.

json
{
  "kind": "profile",
  "target": "@webclaw",
  "name": "Webclaw posts",
  "interval_minutes": 15,
  "webhook_url": "https://hooks.example.com/webclaw",
  "include_retweets": true,
  "include_replies": true,
  "include_quotes": true,
  "min_faves": 0,
  "keyword": "launch",
  "lang": "en"
}

Parameters

FieldTypeRequiredDescription
kindstringYesWhat to poll. One of profile, search, list, or replies.
targetstringYesInterpreted per kind: a handle (a leading @ is stripped), a search query, a list id, or a tweet id.
namestringNoHuman-readable label for the monitor.
interval_minutesintegerNoPoll interval in minutes (2–10080). Default: 15.
webhook_urlstringNoDiscord, Slack, or generic webhook fired on new matches.
include_retweetsbooleanNoMatch retweets. Default: true.
include_repliesbooleanNoMatch replies. Default: true.
include_quotesbooleanNoMatch quote tweets. Default: true.
min_favesintegerNoMinimum likes for a tweet to match. Default: 0.
keywordstringNoOnly match tweets containing this text.
langstringNoOnly match tweets in this language code (e.g. en).

Response

A monitor object. The create response returns the core fields; the list and detail endpoints return the full object (see below).

json
{
  "id": "xmon_8f3a1b2c",
  "kind": "profile",
  "target": "webclaw",
  "name": "Webclaw posts",
  "interval_minutes": 15,
  "webhook_url": "https://hooks.example.com/webclaw",
  "active": true
}

Monitor kinds

KindTargetPolls
profileHandleNew posts from an account.
searchQueryNew tweets matching a search query.
listList idNew tweets in a list timeline.
repliesTweet idNew replies to a specific tweet.

List monitors

GET/v1/x/monitors

List all X monitors for the authenticated user.

json
// Query params: ?limit=20&offset=0
{
  "monitors": [
    {
      "id": "xmon_8f3a1b2c",
      "kind": "profile",
      "target": "webclaw",
      "name": "Webclaw posts",
      "interval_minutes": 15,
      "webhook_url": "https://hooks.example.com/webclaw",
      "active": true,
      "include_retweets": true,
      "include_replies": true,
      "include_quotes": true,
      "min_faves": 0,
      "keyword": "launch",
      "lang": "en",
      "last_checked_at": "2026-03-19T08:00:00Z",
      "last_matched_at": "2026-03-18T21:14:00Z",
      "created_at": "2026-03-10T14:22:00Z"
    }
  ]
}

Monitor details

GET/v1/x/monitors/{id}

Get a single monitor as a full monitor object.

Monitor object

FieldTypeDescription
idstringUnique monitor identifier.
kindstringprofile, search, list, or replies.
targetstringThe handle, query, list id, or tweet id being polled.
namestringLabel for the monitor.
interval_minutesintegerPoll interval in minutes.
webhook_urlstring | nullWebhook fired on new matches.
activebooleanWhether the monitor is polling.
include_retweetsbooleanWhether retweets match.
include_repliesbooleanWhether replies match.
include_quotesbooleanWhether quote tweets match.
min_favesintegerMinimum likes to match.
keywordstring | nullRequired substring, if set.
langstring | nullRequired language code, if set.
last_checked_atstring | nullISO 8601 timestamp of the most recent check.
last_matched_atstring | nullISO 8601 timestamp of the most recent match.
created_atstringISO 8601 timestamp the monitor was created.

Update a monitor

PATCH/v1/x/monitors/{id}

Update monitor settings. Only provided fields are changed.

json
{
  "name": "Updated Name",
  "interval_minutes": 60,
  "webhook_url": "https://hooks.example.com/new-endpoint",
  "active": false
}
json
{ "success": true }

Delete a monitor

DELETE/v1/x/monitors/{id}

Permanently remove a monitor.

json
{ "success": true }

Trigger manual check

POST/v1/x/monitors/{id}/check

Immediately run a check in the background. Billed at your plan rate (Starter 5, Growth 3, Pro 2, Scale 1 credits).

json
{ "status": "checking" }

Webhook payload

When a check finds new matching tweets and a webhook_url is configured, Webclaw sends a POST request with this payload. Discord and Slack webhook URLs receive native embed/text formatting instead.

json
{
  "event": "x.monitor.matched",
  "monitor_id": "xmon_8f3a1b2c",
  "kind": "profile",
  "target": "webclaw",
  "new_count": 1,
  "tweets": [
    {
      "id": "1770000000000000000",
      "screen_name": "webclaw",
      "text": "We just shipped X monitors.",
      "url": "https://x.com/webclaw/status/1770000000000000000",
      "created_at": "2026-03-19T15:30:00Z",
      "favorite_count": 42,
      "retweet_count": 7,
      "reply_count": 3,
      "lang": "en",
      "is_retweet": false,
      "is_reply": false,
      "is_quote": false
    }
  ],
  "checked_at": "2026-03-19T15:30:05Z"
}

SDK examples

Python

python
from webclaw import Webclaw

client = Webclaw(api_key="wc_...")

# Create a profile monitor
monitor = client.x.monitors.create(
    kind="profile",
    target="@webclaw",
    name="Webclaw posts",
    interval_minutes=15,
    webhook_url="https://hooks.example.com/webclaw"
)

# List all monitors
monitors = client.x.monitors.list()

# Trigger an immediate check
client.x.monitors.check(monitor.id)

TypeScript

typescript
import Webclaw from "@webclaw/sdk";

const client = new Webclaw({ apiKey: "wc_..." });

// Create a profile monitor
const monitor = await client.x.monitors.create({
  kind: "profile",
  target: "@webclaw",
  name: "Webclaw posts",
  intervalMinutes: 15,
  webhookUrl: "https://hooks.example.com/webclaw",
});

// List all monitors
const { monitors } = await client.x.monitors.list();

// Trigger an immediate check
await client.x.monitors.check(monitor.id);

cURL

bash
# Create a monitor
curl -X POST https://api.webclaw.io/v1/x/monitors \
  -H "Authorization: Bearer wc_..." \
  -H "Content-Type: application/json" \
  -d '{"kind": "profile", "target": "@webclaw", "interval_minutes": 15}'

# List monitors
curl https://api.webclaw.io/v1/x/monitors \
  -H "Authorization: Bearer wc_..."

# Trigger manual check
curl -X POST https://api.webclaw.io/v1/x/monitors/xmon_8f3a1b2c/check \
  -H "Authorization: Bearer wc_..."
Note
To page a full audience list instead of watching for new posts, use the X Audience endpoint.

Ready to build? Start extracting.

Cancel anytime. One key for every format and endpoint.