Real-time X monitoring API
Know what an account posted before the refresh
Name the X accounts you care about. New posts reach your socket in real time, and replies, reposts, deletions, profile edits and follow changes arrive on the same connection. Ask for profiles, posts, searches, lists and trends whenever you need them.
{ "t": "tweet.create", "op": "create",
"target": { "screen_name": "Reuters" },
"d": { "text": "Fed holds rates steady…" } }
Why this exists
Watching X yourself is a job, not a feature
Rate limits decide your speed
Reading timelines costs quota. Watch fifty accounts closely and you are rationing requests, not building product. We carry that so you never see the ceiling.
Real time is an operation, not an endpoint
Being told the moment an account posts takes infrastructure that has to be kept alive every day. That is the part we run.
Silence looks exactly like calm
A stalled feed and a quiet account are indistinguishable from outside. Every account we watch is covered by several independent paths, and we alert on the absence of events, not just on errors.
How it works
Name the accounts. Open one connection.
Everything an account does becomes an event with a stable id and a typed payload. You choose which accounts, which event types, and whether you want them on a socket or at a webhook.
Add an account
One POST with a handle. We resolve it and activate delivery, usually within a minute, with nothing for you to configure. Add up to a hundred at once.
Open a WebSocket, or register a webhook
One connection carries every event for every account and keyword on your key. No subscribe handshake, no channel bookkeeping.
Handle events by
idEach event has a stable id. Store the last position you processed and pass it back after a disconnect to replay what you missed.
Real time, and everything else
Posts as they happen, changes as soon as they can be seen
New posts are delivered in real time. Replies, deletions, profile edits and follow-graph changes follow as soon as they become visible. Every event type documents whether it can arrive in two frames — a thin first frame to act on, then the full payload — so you can build for speed without guessing.
What you receive
Seventeen event types, one envelope
| Event | Fires when | Notable payload |
|---|---|---|
tweet.create | The account posts | Text, media, link preview, the post URL |
tweet.retweettweet.quote | It amplifies someone | The original post in full, not just its id |
tweet.reply | It replies to anyone | The post being replied to, with its text and media |
tweet.delete | A post disappears | The id and the URL it used to have |
profile.* | Avatar, banner, bio, name, handle, link, location, pinned post or verification changes | Old and new value side by side |
follow.addfollow.remove | It follows or unfollows someone | The other account's full profile |
followers.verified.add | A verified account follows it | Bio, counts, location, join date |
search.match | Anyone posts something matching a query you watch | The post, the author's profile, the keyword that matched |
Beyond accounts
Watch a phrase, not just a person
Register a query in X's own search syntax and every new public post matching it arrives as an event. Any language, any script — no English-only restriction. We read the chronological tab, so you get what was just posted rather than what is popular.
curl -X POST https://api.xsignalfeed.com/v1/keywords \ -H "X-API-Key: xsf_your_key" -H "Content-Type: application/json" \ -d '{"query": "($SOL OR \"Solana\") -filter:retweets -filter:replies", "label": "solana"}'
Integrating
Three ways in, whichever suits your runtime
WebSocket
The primary path. One connection, every event, replay from your last position after a disconnect. This is what you want for anything latency-sensitive.
Webhooks
We POST each event to your HTTPS endpoint, signed with HMAC-SHA256 over the raw body. Three retries, then it is yours to catch up via replay.
REST
Ask rather than wait: profiles, posts, replies, quotes, reposters, threads, followers, following, mentions, search, lists, communities, trends.
async with websockets.connect("wss://ws.xsignalfeed.com/v1/stream?api_key=…") as ws: async for raw in ws: ev = json.loads(raw) if ev["t"] == "tweet.create": trade(ev["target"]["screen_name"], ev["d"]["text"])
const ws = new WebSocket("wss://ws.xsignalfeed.com/v1/stream?api_key=…"); ws.on("message", (raw) => { const ev = JSON.parse(raw); if (ev.t === "tweet.create") trade(ev.target.screen_name, ev.d.text); });
c, _, _ := websocket.DefaultDialer.Dial("wss://ws.xsignalfeed.com/v1/stream?api_key=…", nil) for { _, raw, err := c.ReadMessage() if err != nil { break } handle(raw) }
Who uses it
Built for people who act on a post, not just read it
Trading desks
A founder's post moves a price before it reaches a news feed. The push channel is the difference between acting on it and reading about it.
Brand and risk teams
A quietly edited bio, a deleted post or a new high-profile follower is often the first sign of a story forming.
Research and OSINT
Follow-graph changes across a set of accounts, captured continuously, tell you about relationships months before anyone announces one.
Reliability
Designed for the day a machine dies
Redundant by default
Every account you monitor is covered by several independent paths. Losing one changes nothing you can observe.
Work moves on its own
Collection runs across a fleet of machines. Take one away and its share is reassigned automatically, with no gap in the stream.
Absence is an alarm
We watch for events that should have arrived and did not, and repair the path before you notice.
Public status
Component health is public and unauthenticated at status.xsignalfeed.com.
Worth knowing before you build
What this is not
- Not a firehose. You get the accounts and queries you register, not all of X.
- Not a posting API. We read public data and never act on your behalf. There is no write path.
- Not exactly-once. Reconnects can repeat an event. Deduplicate on
id— the docs show how. - Not retroactive. History starts when you add an account; we hold events for 30 days.
- Not able to see what X hides. Protected accounts, and accounts X suppresses in search, stay invisible.
Questions
Frequently asked
How fast is it?
New posts are delivered in real time; replies, deletions, profile edits and follow-graph changes follow as soon as they become visible, with the ultra tier giving an account the highest refresh priority. We do not publish benchmark figures: measure it on your own accounts during a trial.
What is the ultra tier?
A per-subscription setting that gives one account the highest refresh priority for the event types that are not delivered instantly. It never affects what other customers receive.
Does adding an account require anything from me?
One API call with the handle. We resolve it, place it on collector accounts, follow it and enable notifications automatically, typically within a minute.
What happens if my service is down?
Every event carries a stream position. Store the last one you processed and pass it back on reconnect to receive everything you missed. The replay log holds 24 hours; the REST event history holds 30 days.
Is this the official X API?
No. xSignalFeed is an independent service, not affiliated with, endorsed by, or sponsored by X Corp. We read public data only.
What does it cost?
Pricing is set per account during the access process, based on how many accounts you monitor and which tier you need. Ask us and you will get a real number, not a quote form.
Getting started
Request access
We onboard accounts deliberately, because every monitored handle consumes real collector capacity. Tell us roughly how many accounts you want to watch and what you are building, and we will send a key with a trial allowance.
Already have a key? GET /v1/account tells you what it can
do, and the quickstart has you streaming in about five
minutes.