Product · Twitter webhook & account monitor
Twitter account monitor — new posts to Discord or your webhook.
Watch any public X/Twitter account. When xfetch observes a new post, route it to your team’s Discord, your generic signed webhook, or both — without polling code to run. Monitor deliveries never spend API credits.
@elonmusk · illustrative postSet up your Twitter account monitor
Choose a public account
Select a dashboard suggestion or resolve the exact @handle you want to watch.
Choose where posts go
Connect a Discord channel, add a generic webhook endpoint, or use both delivery branches.
Start the monitor
When xfetch observes a new post, it sends the configured notification or signed POST. No polling job to schedule.
Send Twitter posts to Discord — no bot to run
When xfetch observes a post from a watched account, it can send a notification card to the channel where your team already works.
A notification card, not a bare link
See the author name, @handle, post text, an optional avatar, and an Open on X link.
The channel your team already watches
Deliveries land in the Discord channel you pick, so alerts live where the conversation already is.
Hand setup to the channel's admin
Send a one-time setup link and a Discord channel manager in another server can authorize the channel — no xfetch login needed.
No Discord bot to host
Choose the account and authorize the channel from the dashboard. There is no bot process for your team to deploy.
Receive posts through a signed Twitter webhook
The generic webhook branch receives a tweet.created POST your pipeline can verify, dedupe, and act on. Discord receives a notification card instead of this signed JSON payload.
content-type: application/json x-xfetch-event-id: evt_example x-xfetch-delivery-id: dlv_example x-xfetch-timestamp: 2026-08-18T12:34:56.000Z x-xfetch-signature: v1=<hmac-sha256>
{
"type": "tweet.created",
"event_id": "evt_example",
"delivery_id": "dlv_example",
"timestamp": "2026-08-18T12:34:56.000Z",
"monitor": {
"subscription_id": "mon_example",
"account": {
"id": "123456",
"username": "acme",
"name": "Acme"
}
},
"tweet": {
"id": "987654321",
"text": "A new product update",
"author_id": "123456",
"created_at": "2026-08-18T12:34:50.000Z",
"lang": "en",
"like_count": 12,
"retweet_count": 3,
"reply_count": 2,
"quote_count": 1,
"bookmark_count": 4,
"is_quote_status": false,
"entities": {
"hashtags": [],
"urls": [],
"mentions": []
}
}
}Verify generic webhook deliveries
Each generic webhook POST carries x-xfetch-signature (HMAC-SHA256), so your receiver can authenticate it before acting.
Transient retries built in
Transient delivery failures retry automatically with bounded backoff.
Dedupe-safe
event_id and delivery_id are stable, so dropping duplicates is one lookup.
Verify the raw request before parsing JSON
Build the signed input from the timestamp, event ID, delivery ID, and exact raw request body in that order. Compare the result with x-xfetch-signature using a timing-safe equality check.
HMAC-SHA256(secret, timestamp + '.' + event_id + '.' + delivery_id + '.' + raw_body)
import { createHmac, timingSafeEqual } from "node:crypto";
const signedPayload = [timestamp, eventId, deliveryId, rawBody].join(".");
const expected = `v1=${createHmac("sha256", secret)
.update(signedPayload)
.digest("hex")}`;
const actualBuffer = Buffer.from(signature, "ascii");
const expectedBuffer = Buffer.from(expected, "ascii");
const valid =
/^v1=[0-9a-f]{64}$/.test(signature) &&
actualBuffer.length === expectedBuffer.length &&
timingSafeEqual(actualBuffer, expectedBuffer);Treat the delivery as your wake-up signal. When the workflow needs depth — the author’s profile, the thread, engagement context — call the /v1 read API from your handler. Twitter data API for AI agents → API reference →
Twitter account monitoring workflows
Trading & market desks
Use a signed webhook to start signal ingestion when xfetch observes a post from a watched account.
See the Bitcoin build →Competitive & founder intel
Route observed product announcements and founder posts into the channel your team already reads.
Community & brand ops
Use one Discord channel as a shared tweet tracker for the public accounts your ecosystem follows.
AI agents
A generic tweet.created webhook wakes your agent; /v1 can then add the author, thread, and engagement context.
See the agent pipeline →Need topics or keywords instead of a known account? Use the Twitter Search API for keyword monitoring →
Twitter account monitor vs notifications and polling
| X app notifications | Generic automation tools | DIY poller + data API | xfetch monitor | |
|---|---|---|---|---|
| When you find out | as personal app notifications arrive | depends on the tool's trigger schedule | when your poller runs — if it's healthy | P99 < 15s objective to first delivery attempt for eligible events |
| Where it lands | your app or device notifications | the connectors your tool supports | wherever you build it | Discord, a generic signed webhook, or both |
| Can it trigger machines | not as a signed webhook | depends on the available connectors | yes — you build it | yes — signed tweet.created webhook |
| Setup & upkeep | enable notifications per account | configure each workflow | code, hosting, cursors, rate limits | dashboard-configured; no polling job to run |
| Cost shape | included with the app | varies by tool and task | infra + per-read costs | trial or plan capacity; extra-account rate is $3 per account per month |
Twitter account monitor pricing
- Free & PAYG: watch 1 account free for 10 days — no card needed.
- Monthly plans include monitor accounts: Starter 2 · Growth 5 · Pro 10 · Scale 25.
- One monitored account can deliver to Discord and a signed webhook at the same time.
- Deliveries never spend your credits.
Twitter webhook and account monitor FAQ
- What is a Twitter account monitor?
- A Twitter account monitor watches a selected public X/Twitter account. When xfetch observes a new post, it can send a Discord notification card, a generic signed tweet.created webhook, or both.
- How do I send Twitter posts to Discord?
- Create a monitor for a public @handle and connect the Discord channel your team uses. Observed posts arrive as notification cards, so the channel can work as a shared tweet tracker without a bot process for you to host.
- Do monitor deliveries cost API credits?
- No — deliveries never spend your credits. Free and PAYG include 1 account for a 10-day trial, monthly plans include 2–25 accounts, and the extra-account rate is $3 per account per month.
- Can xfetch monitor keywords or search terms?
- Account monitors watch selected public accounts. Keyword and topic tracking is a Twitter Search API workflow: run the query you care about on /v1 search endpoints and page through results on your own schedule.
- How does the signed Twitter webhook work?
- Generic webhook deliveries carry an x-xfetch-signature header (HMAC-SHA256) plus event_id and delivery_id values. Verify the signature against the raw request body before parsing JSON, then use the IDs to drop duplicates. Discord receives a notification card rather than a signed tweet.created payload.
- What happens when a delivery fails?
- Transient delivery failures retry automatically with bounded backoff. Other failures update destination health and may pause the channel.
- Who can set up the Discord channel?
- You can connect a channel from the dashboard. Or send a one-time setup link — a Discord channel manager in another server can authorize the channel without an xfetch login, scoped to that one monitor.
- How fast do deliveries arrive?
- The published monitor timeliness objective is P99 < 15s, measured from an eligible source-event timestamp to the first delivery attempt. The methodology does not treat destination acceptance or post completeness as part of that measurement.