Xanguard Documentation
Build on top of the fastest Twitter monitoring engine available. Detect tweets in real-time with sub-second latency and deliver them to your app, bot, or trading system through the channel that fits your stack.
What is Xanguard?
Xanguard is a real-time Twitter monitoring platform. It uses a proprietary detection engine to discover new tweets the moment they appear, delivering alerts in typically 250–500ms. Latency varies based on account follower count and tweet complexity.
Whether you are a crypto trader watching influencer wallets, a DeFi protocol monitoring your team accounts, or an AI agent consuming social signals, Xanguard gives you the infrastructure to react before anyone else.
Four Delivery Channels
Telegram Bot
Instant notifications in private chats or organized forum topics. No code required. Add handles with a single command and start receiving alerts.
REST API
14 endpoints to manage accounts, settings, subscriptions, and webhooks programmatically. Standard JSON request/response with Bearer token auth.
WebSocket Streaming
Persistent connection for real-time tweet delivery. Subscribe to handles on the fly and receive structured JSON alerts as they happen.
Signed Webhooks
HMAC-SHA256 signed POST requests to your HTTPS endpoint. Automatic retries with exponential backoff. Zero polling on your end.
Quick Start
Open the bot
Search for @Xanguard_bot on Telegram or click the link to open it directly.
Register
Send /start to create your account and see the available plans. The Free tier gives you 2 monitored accounts instantly.
Add accounts
Send /add elonmusk VitalikButerin to start monitoring. You will receive alerts within seconds when they tweet.
Go programmatic (optional)
Generate an API key with /apikey, then use the REST API, WebSocket, or webhooks to integrate into your own systems.
Telegram Bot
The Telegram bot is the easiest way to use Xanguard. It works in private chats and in groups. In groups with forum topics enabled, the bot automatically creates a dedicated topic thread for each tracked handle, keeping your notifications organized.
Commands
Features
Forum Topics
When you add the bot to a Telegram group with forum topics enabled, it automatically creates a dedicated topic thread for each tracked Twitter handle. All tweets from that handle are routed to their respective topic, keeping your group organized and easy to follow.
Contract Detection
Xanguard automatically detects Solana and Ethereum contract addresses embedded in tweets. When a tweet contains a contract address, it is flagged in the notification. You can enable contracts only mode in settings to receive only tweets that contain contract addresses.
Keyword Filtering
Set per-handle keyword filters so that only tweets matching at least one of your keywords trigger an alert. This is useful for high-volume accounts where you only care about specific topics. Manage keywords through the per-account detail screen in /monitor or via the REST API.
Mute / Unmute
Temporarily mute individual accounts without removing them from your list. Muted accounts retain their keywords and configuration but will not trigger any notifications until you unmute them.
REST API
The REST API exposes 14 endpoints for managing your Xanguard account programmatically. All endpoints live under a single base URL and return consistent JSON responses.
https://api.xanguard.tech/v1
Authentication
All API requests require a Bearer token in the Authorization header. Generate your API key by sending /apikey to the Telegram bot.
Authorization: Bearer xg_your_api_key_here
The server hashes your key with SHA-256 and looks it up in the api_keys table, joining on your subscription tier to determine rate limits and permissions.
Response Envelope
Every response is wrapped in a standard envelope. On success, the ok field is true and the payload is in data. On error, ok is false and the error message is in error.
{
"ok": true,
"data": { ... }
}
{
"ok": false,
"error": "Invalid API key"
}
Rate Limiting
Requests are rate-limited using a per-key sliding window. The limit is determined by your subscription tier (the ws_rate_limit_rps field on your tier). When you exceed the limit, the API returns 429 Too Many Requests.
Accounts
Manage your tracked Twitter accounts. Add, remove, configure keywords, and mute/unmute handles.
| Method | Path | Description |
|---|---|---|
| GET | /v1/accounts |
List all tracked accounts |
| POST | /v1/accounts |
Add accounts (max 25 per request) |
| GET | /v1/accounts/{handle} |
Get account detail + profile data |
| DELETE | /v1/accounts/{handle} |
Remove an account |
| PUT | /v1/accounts/{handle}/keywords |
Set keyword filters (max 20) |
| DELETE | /v1/accounts/{handle}/keywords |
Clear all keywords |
| PUT | /v1/accounts/{handle}/mute |
Mute or unmute an account |
Returns all Twitter accounts you are currently monitoring, along with their keyword filters and mute status.
Response
{
"ok": true,
"data": {
"accounts": [
{
"handle": "elonmusk",
"keywords": [],
"muted": false,
"added_at": 1234567890
}
],
"count": 1,
"limit": 10
}
}
Add one or more Twitter handles to your monitoring list. Maximum 25 handles per request. Handles are case-insensitive and the @ prefix is optional.
Request Body
{
"handles": ["elonmusk", "VitalikButerin"]
}
Response
{
"ok": true,
"data": {
"added": ["elonmusk"],
"already_exists": ["vitalikbuterin"],
"total": 5,
"limit": 10
}
}
Get detailed information about a single tracked account, including profile data fetched from Twitter (display name, follower count, verification status, and profile picture).
Response
{
"ok": true,
"data": {
"handle": "elonmusk",
"keywords": ["bitcoin", "doge"],
"muted": false,
"added_at": 1234567890,
"profile": {
"display_name": "Elon Musk",
"followers": 180000000,
"is_verified": true,
"profile_pic": "https://pbs.twimg.com/..."
}
}
}
Remove a Twitter handle from your monitoring list. This also removes any keyword filters associated with the handle.
Response
{
"ok": true,
"data": {
"removed": "elonmusk",
"total": 4,
"limit": 10
}
}
Set keyword filters for a specific account. Only tweets containing at least one of the specified keywords will trigger an alert. Maximum 20 keywords. This replaces any existing keywords.
Request Body
{
"keywords": ["bitcoin", "solana", "launch"]
}
Response
{
"ok": true,
"data": {
"handle": "elonmusk",
"keywords": ["bitcoin", "solana", "launch"]
}
}
Clear all keyword filters for a specific account. After clearing, all tweets from this account will trigger alerts (subject to global settings).
Response
{
"ok": true,
"data": {
"handle": "elonmusk",
"keywords": []
}
}
Mute or unmute a tracked account. Muted accounts remain in your list but do not trigger any notifications.
Request Body
{
"muted": true
}
Response
{
"ok": true,
"data": {
"handle": "elonmusk",
"muted": true
}
}
Settings
Manage your global notification preferences. These settings apply to all delivery channels.
| Method | Path | Description |
|---|---|---|
| GET | /v1/settings |
Get current notification preferences |
| PATCH | /v1/settings |
Update preferences (partial update) |
Settings Fields
All fields are booleans. The PATCH endpoint accepts partial updates — only include the fields you want to change.
Returns your current notification preferences.
Response
{
"ok": true,
"data": {
"exclude_replies": false,
"contracts_only": false,
"notifications_paused": false,
"exclude_reposts": false,
"auto_topics": true,
"contract_topic": false
}
}
Update one or more notification settings. Only include the fields you want to change. Omitted fields remain unchanged.
Request Body
{
"exclude_replies": true,
"contracts_only": true
}
Response
Returns the full settings object after the update.
{
"ok": true,
"data": {
"exclude_replies": true,
"contracts_only": true,
"notifications_paused": false,
"exclude_reposts": false,
"auto_topics": true,
"contract_topic": false
}
}
Subscription
View your current subscription tier and browse available plans.
| Method | Path | Description |
|---|---|---|
| GET | /v1/subscription |
Current tier, limits, and expiry |
| GET | /v1/plans |
List all available plans |
Returns your current subscription tier, account limit, and expiration date.
Response
{
"ok": true,
"data": {
"tier": "starter",
"account_limit": 10,
"expires_at": "2026-03-21T00:00:00Z"
}
}
Returns all available subscription plans with their prices, account limits, and webhook limits.
Response
{
"ok": true,
"data": {
"plans": [
{
"name": "Free",
"price_usd": 0,
"account_limit": 2,
"max_webhooks": 0
},
{
"name": "Starter",
"price_usd": 19,
"account_limit": 10,
"max_webhooks": 1
}
]
}
}
Webhooks
Register HTTPS endpoints to receive tweet notifications via signed POST requests. The number of webhooks you can register depends on your subscription tier.
| Method | Path | Description |
|---|---|---|
| POST | /v1/webhooks |
Register a new webhook (HTTPS only) |
| GET | /v1/webhooks |
List active webhooks |
| DELETE | /v1/webhooks/{id} |
Deactivate a webhook |
Register a new webhook endpoint. The URL must use HTTPS. On success, the response includes a one-time secret field containing the HMAC-SHA256 signing key. Save this immediately — it is never shown again.
Request Body
{
"url": "https://your-server.com/webhook",
"events": ["tweet"],
"filter_handles": [],
"filter_keywords": []
}
Tip: Leave filter_handles empty to receive tweets from all your tracked accounts. Leave filter_keywords empty to receive all tweets without keyword filtering.
Response
{
"ok": true,
"data": {
"id": "wh_a1b2c3d4",
"url": "https://your-server.com/webhook",
"events": ["tweet"],
"secret": "whsec_k9x8m7...",
"active": true
}
}
Important: The secret field is only returned once, at creation time. Store it securely. You will need it to verify webhook signatures.
List all your registered webhooks. The secret is not included in list responses.
Response
{
"ok": true,
"data": {
"webhooks": [
{
"id": "wh_a1b2c3d4",
"url": "https://your-server.com/webhook",
"events": ["tweet"],
"active": true
}
],
"count": 1,
"limit": 5
}
}
Deactivate a webhook. It will stop receiving deliveries immediately.
Response
{
"ok": true,
"data": {
"id": "wh_a1b2c3d4",
"deactivated": true
}
}
Webhook Delivery
When a tweet matches your filters, Xanguard sends a POST request to your registered URL with a JSON body containing the tweet data.
Signature Verification
Every delivery includes an X-Xanguard-Signature header containing an HMAC-SHA256 hex digest of the request body, computed using your webhook secret. Always verify this signature before processing the payload.
const crypto = require('crypto');
function verifySignature(body, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}
import hmac, hashlib
def verify_signature(body: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
Retry Policy
If your endpoint returns a non-2xx status code or the request times out, Xanguard retries up to 3 times with exponential backoff: 1 second, 2 seconds, then 4 seconds. After 10 consecutive failures across any deliveries, the webhook is automatically disabled. You can re-register it via the API once your endpoint is healthy again.
WebSocket
The WebSocket endpoint provides a persistent, real-time stream of tweet alerts. Connect once, subscribe to handles on the fly, and receive structured JSON messages as tweets happen. This is ideal for trading bots, dashboards, and any application that needs the lowest possible latency.
Connection
Connect with your API key as a query parameter:
wss://api.xanguard.tech/v1/ws?api_key=xg_your_key
Client to Server Messages
After connecting, send JSON messages to subscribe or unsubscribe from handles:
{
"type": "subscribe",
"handles": ["elonmusk", "VitalikButerin"]
}
{
"type": "unsubscribe",
"handles": ["elonmusk"]
}
Server to Client Messages
Tweet Alert
Received when a tracked account posts a tweet:
{
"type": "alert",
"handle": "elonmusk",
"text": "Just bought more $BTC",
"url": "https://twitter.com/elonmusk/status/123",
"tweet_id": "123",
"timestamp": 1234567890
}
Acknowledgement
Sent after a successful subscribe or unsubscribe action:
{
"type": "ack",
"action": "subscribe",
"handles": ["elonmusk"],
"active": 1,
"max": 25
}
Error
Sent when a request cannot be fulfilled:
{
"type": "error",
"message": "Max handles exceeded"
}
Keepalive
The server sends a WebSocket ping frame every 30 seconds and expects a pong response within 10 seconds. Most WebSocket libraries handle this automatically. If the pong is not received, the server closes the connection. Your client should implement automatic reconnection with backoff.
Example: JavaScript Client
const ws = new WebSocket(
'wss://api.xanguard.tech/v1/ws?api_key=xg_your_key'
);
ws.onopen = () => {
// Subscribe to handles once connected
ws.send(JSON.stringify({
type: 'subscribe',
handles: ['elonmusk', 'VitalikButerin']
}));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === 'alert') {
console.log(`Tweet from @${msg.handle}: ${msg.text}`);
console.log(`Link: ${msg.url}`);
}
if (msg.type === 'ack') {
console.log(`Watching ${msg.active}/${msg.max} handles`);
}
if (msg.type === 'error') {
console.error(`Error: ${msg.message}`);
}
};
ws.onclose = () => {
// Implement reconnection with backoff
console.log('Disconnected, reconnecting...');
};
Example: Python Client
import asyncio, json, websockets
async def main():
uri = "wss://api.xanguard.tech/v1/ws?api_key=xg_your_key"
async with websockets.connect(uri) as ws:
# Subscribe to handles
await ws.send(json.dumps({
"type": "subscribe",
"handles": ["elonmusk", "VitalikButerin"]
}))
async for message in ws:
msg = json.loads(message)
if msg["type"] == "alert":
print(f"@{msg['handle']}: {msg['text']}")
print(f"Link: {msg['url']}")
asyncio.run(main())
Community Watch
Community Watch (CW) is a separate Xanguard product that monitors Twitter community gate activity in real time. It detects when any tracked account creates, joins, or leaves a Twitter community, and delivers alerts via webhook or the Telegram bot @F_xanguard_bot.
How It Works
- Subscribe via @F_xanguard_bot — pick a plan based on how many accounts you want to track.
- Add targets — tell the bot which Twitter accounts to monitor (e.g.
@elonmusk). - Get alerts — within ~30 seconds of a community join/leave/create, you get a notification via your configured webhook or the Telegram bot.
On first add, you'll receive a one-time sync of all communities the target is already in. After that, only changes trigger alerts.
Bot Commands
| Command | Description |
|---|---|
/start | Dashboard & subscription page |
/status | Current subscription status, handles tracked, expiry |
/apikey | View or regenerate your CW API key |
/settings | Configure filters (event types, member count, flap cooldown) |
/help | Command reference and quick-start guide |
Filters
CW supports per-client filters to reduce noise. Configure them via /settings in the bot or the API.
| Filter | Default | Description |
|---|---|---|
| Event Types | All (join, leave, create, rename, description, follow) | Choose which events trigger alerts. E.g. only "join" and "follow" events. |
| Min Member Count | 0 | Ignore communities with fewer members than this threshold. |
| Flap Cooldown | 0s | If a target joins and leaves the same community within this window, suppress the leave event. Useful to filter bots. |
CW API & Webhooks
CW has its own REST API and webhook delivery system, separate from the main Xanguard API.
Authentication
All CW API requests require your CW API key (generated via /apikey in the bot). Pass it as a header:
Authorization: Bearer cw_your_api_key_here
Base URL: https://api.xanguard.tech/cw/v1
Managing Targets
| Method | Endpoint | Description |
|---|---|---|
GET | /targets | List all monitored accounts |
POST | /targets | Add accounts to monitor. Body: {"handles": ["elonmusk", "vitalik"]} |
DELETE | /targets/:handle | Remove a target |
Webhook Format
Configure your webhook URL via /settings in the bot. CW sends a POST request for each event:
{
"event": "community_joined",
"screen_name": "elonmusk",
"twitter_user_id": "44196397",
"community": {
"id": "1234567890",
"name": "Crypto Builders",
"member_count": 15420
},
"detected_at": "2026-03-03T15:30:00Z"
}
Event types: community_joined, community_left, community_created, community_renamed, community_description_changed, account_followed
CW Pricing
Community Watch is billed monthly in SOL. Subscribe via @F_xanguard_bot.
| Plan | Accounts | Price |
|---|---|---|
| CW 20 | 20 | $100/mo |
| CW 50 | 50 | $250/mo |
| CW 100 | 100 | $500/mo |
| CW 200 | 200 | $800/mo |
| CW 500 | 500 | $1,500/mo |
Upgrades are prorated — you only pay the difference for the remaining days. Renewals stack from your current expiry date.
Payment is in SOL. The exact SOL amount is calculated at checkout based on current SOL/USD rate.
Convergence Tracker
Convergence Tracker (CT) detects when multiple tracked Twitter accounts cluster in the same community simultaneously. When 2+ targets appear in one community, CT fires a convergence alert — a strong signal that a coordinated token launch or community event may be imminent. Managed via @T_Xanguard_bot.
Bot Commands
| Command | Description |
|---|---|
/start | Dashboard & subscription |
/add @handle | Add a target for convergence tracking |
/remove @handle | Remove a target |
/list | List all tracked targets |
/apikey | View or regenerate your CT API key |
/help | Command reference |
Pricing
| Plan | Targets | Price |
|---|---|---|
| CT 20 | 20 | $100/mo |
| CT 50 | 50 | $250/mo |
| CT 100 | 100 | $500/mo |
| CT 200 | 200 | $800/mo |
| CT 500 | 500 | $1,500/mo |
CT API
All CT API requests require a Bearer token with ct_ prefix, generated via /apikey in the bot.
Authorization: Bearer ct_your_api_key_hereEndpoints
| Method | Path | Description |
|---|---|---|
| GET | /v1/ct/targets | List tracked targets |
| POST | /v1/ct/targets | Add target. Body: {"handle": "username"} |
| DELETE | /v1/ct/targets/{handle} | Remove target |
| GET | /v1/ct/convergence | Current convergence detections |
| GET | /v1/ct/convergence/history | Historical convergence events |
| GET | /v1/ct/settings | Get CT settings (min_convergence, time_window) |
| PATCH | /v1/ct/settings | Update settings |
| GET | /v1/ct/webhook | Get webhook URL |
| PUT | /v1/ct/webhook | Set webhook URL. Body: {"url": "https://..."} |
| GET | /v1/ct/status | Subscription status |
WebSocket
wss://api.xanguard.tech/v1/ct/ws?api_key=ct_your_keyReceives real-time JSON events when convergence is detected.
Xanguard B2B
Xanguard B2B is a real-time Twitter/X monitoring API. It streams tweets, follow/unfollow events, profile changes, and new follower detection for your tracked accounts via WebSocket and REST API. Managed via @B2B_Xanguard_bot.
Modules
| Module | Events |
|---|---|
| Realtime (tweets) | New tweets, replies, quotes, retweets |
| Follows | Follow and unfollow detection |
| Profile Watch | Name, bio, avatar, follower count changes |
| Followers | New follower detection |
Bot Commands
| Command | Description |
|---|---|
/start | Dashboard & subscription |
/add @handle | Add handle to monitor |
/remove @handle | Remove handle |
/list | List all monitored handles |
/status | Subscription status |
/apikey | View or regenerate API key |
/help | Command reference |
Pricing
| Plan | Handles | Price |
|---|---|---|
| B2B 10 | 10 | $200/mo |
| B2B 25 | 25 | $500/mo |
| B2B 50 | 50 | $1,000/mo |
| B2B 100 | 100 | $2,000/mo |
B2B API
All B2B API requests require a Bearer token with dt_ prefix, generated via /apikey in the bot.
Authorization: Bearer dt_your_api_key_hereREST Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /v1/dt/targets | List monitored handles |
| POST | /v1/dt/targets | Add handle. Body: {"handle": "username"} |
| DELETE | /v1/dt/targets/{handle} | Remove handle |
| GET | /v1/dt/status | Subscription status |
Realtime WebSocket
wss://api.xanguard.tech/v1/dt/realtime/wsTweetCatcher-compatible opcode protocol. Connect, authenticate via LOGIN opcode with your dt_ API key, and receive real-time events for all monitored handles.
Opcodes
| Opcode | Name | Direction | Description |
|---|---|---|---|
| 10 | HELLO | Server → Client | Sent on connect with heartbeat interval |
| 2 | LOGIN | Client → Server | Authenticate: {"op": 2, "d": "dt_your_api_key"} |
| 4 | READY | Server → Client | Auth success with handle count and modules |
| 0 | EVENT | Server → Client | Real-time event (tweet, follow, profile change, new follower) |
| 1 | HEARTBEAT | Client → Server | Keep connection alive |
| 11 | HEARTBEAT_ACK | Server → Client | Server acknowledges heartbeat |
Event Types
| Type | Module | Description |
|---|---|---|
tweet.new | realtime | New tweet, reply, quote, or retweet |
follow.new | follows | Target followed a new account |
follow.lost | follows | Target unfollowed an account |
profile.changed | profile_watch | Name, bio, avatar, or follower count changed |
follower.new | followers | New account followed the target |
B2B Realtime WebSocket
High-volume real-time feed with TweetCatcher-compatible opcode protocol. Delivers tweets, follow detection, profile changes, and new follower alerts via a single WebSocket connection. Managed via @B2B_Xanguard_bot.
Connection
wss://api.xanguard.tech/v1/dt/realtime/wsNo query parameter needed — authentication happens via the LOGIN opcode after connecting. Maximum 2 concurrent WebSocket connections per API key.
Opcodes
| Opcode | Name | Direction | Description |
|---|---|---|---|
10 | HELLO | Server → Client | Sent on connect. Includes heartbeat_interval (ms). |
2 | LOGIN | Client → Server | Send your dt_ API key to authenticate. Must be sent within 15 seconds. |
4 | READY | Server → Client | Auth successful. Includes client_id, modules, handles count. |
0 | EVENT | Server → Client | Realtime event data. |
1 | HEARTBEAT | Client → Server | Keep-alive. Send every heartbeat_interval ms. |
11 | HEARTBEAT_ACK | Server → Client | Response to heartbeat. |
3 | DISCONNECT | Server → Client | Connection terminated with reason. |
Handshake Flow
1. Connect → Receive HELLO:
{"op": 10, "d": {"heartbeat_interval": 30000}}2. Send LOGIN with your API key:
{"op": 2, "d": "dt_your_api_key_here"}3. Receive READY on success:
{"op": 4, "d": {"client_id": 1, "modules": ["realtime", "follows", "profile_watch", "followers"], "handles": 150, "max_handles": 1000, "max_connections": 2}}Modules
Modules are configured per client. You only receive events for enabled modules.
| Module | Events | Description |
|---|---|---|
realtime | twitter.post.new, twitter.post.update | Tweets, replies, quotes, retweets in real-time. Initial delivery via twitter.post.new, enriched re-delivery via twitter.post.update. |
follows | twitter.following.new | When a tracked account follows someone new (~30-60s detection) |
profile_watch | twitter.profile.update | Bio, name, avatar, pinned tweet changes (~500ms detection) |
followers | twitter.follower.new | New followers of tracked accounts (~30min digest) |
Event: twitter.post.new
First delivery of a detected tweet. May have partial metadata. Clients should store this and replace with twitter.post.update if received.
{
"op": 0,
"d": {
"event": "twitter.post.new",
"event_id": "evt_1234567890123456789",
"task_info": {"handle": "elonmusk"},
"data": {
"id": "1234567890123456789",
"created_at": 1712000000000,
"type": "post",
"text": "Hello world",
"media": [{"type": "photo", "url": "https://pbs.twimg.com/media/..."}],
"mentions": [{"screen_name": "vitalikbuterin"}],
"author": {
"id": "44196397",
"handle": "elonmusk",
"name": "Elon Musk",
"avatar": "https://pbs.twimg.com/profile_images/...",
"description": "CEO of Tesla, SpaceX, etc.",
"verification": {"is_verified": true},
"stats": {"followers": 190000000, "following": 800}
},
"in_reply_to": null,
"quoted_tweet": null,
"possibly_sensitive": false
}
}
}Tweet types in data.type: "post", "reply", "quote", "repost"
Event: twitter.post.update
Enriched re-delivery of a previously sent tweet with complete metadata. Shares the same data.id as the original twitter.post.new. Clients should replace any previously stored data for this tweet ID.
{
"op": 0,
"d": {
"event": "twitter.post.update",
"event_id": "evt_u_1234567890123456789",
"task_info": {"handle": "elonmusk"},
"data": {
"id": "1234567890123456789",
"created_at": 1712000000000,
"type": "quote",
"text": "This is huge 👀",
"media": [],
"mentions": [],
"author": {
"id": "44196397",
"handle": "elonmusk",
"name": "Elon Musk",
"avatar": "https://pbs.twimg.com/profile_images/...",
"description": "CEO of Tesla, SpaceX, etc.",
"verification": {"is_verified": true},
"stats": {"followers": 190000000, "following": 800}
},
"in_reply_to": null,
"quoted_tweet": {
"id": "9876543210987654321",
"text": "Original tweet text here",
"author": {"handle": "vitalikbuterin", "name": "Vitalik Buterin"}
},
"possibly_sensitive": false
}
}
}Event: twitter.following.new
{
"op": 0,
"d": {
"event": "twitter.following.new",
"event_id": "evt_f_elonmusk_1712000000",
"task_info": {"handle": "elonmusk"},
"data": {
"id": "44196397",
"handle": "vitalikbuterin",
"name": "Vitalik Buterin"
}
}
}Event: twitter.profile.update
{
"op": 0,
"d": {
"event": "twitter.profile.update",
"event_id": "evt_p_elonmusk_1712000000",
"task_info": {"handle": "elonmusk"},
"data": {
"field": "description",
"prev": "Old bio text",
"updated": "New bio text"
}
}
}Fields: "description", "name", "avatar", "pinned_post"
Event: twitter.follower.new
{
"op": 0,
"d": {
"event": "twitter.follower.new",
"event_id": "evt_fl_elonmusk_1712000000",
"task_info": {"handle": "elonmusk"},
"data": {
"id": "555555555",
"handle": "newfollower",
"name": "New Follower"
}
}
}Example: JavaScript Client
const ws = new WebSocket('wss://api.xanguard.tech/v1/dt/realtime/ws');
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
switch (msg.op) {
case 10: // HELLO
ws.send(JSON.stringify({op: 2, d: 'dt_YOUR_API_KEY'}));
break;
case 4: // READY
console.log('Connected:', msg.d.modules, msg.d.handles, 'handles');
break;
case 0: // EVENT
console.log('Event:', msg.d.event, msg.d.data);
break;
}
};
// Heartbeat every 30s
setInterval(() => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify({op: 1}));
}
}, 30000);Example: Python Client
import asyncio, websockets, json
async def connect():
async with websockets.connect('wss://api.xanguard.tech/v1/dt/realtime/ws') as ws:
hello = json.loads(await ws.recv()) # HELLO
await ws.send(json.dumps({"op": 2, "d": "dt_YOUR_API_KEY"}))
ready = json.loads(await ws.recv()) # READY
print(f"Connected: {ready['d']['modules']}, {ready['d']['handles']} handles")
while True:
msg = json.loads(await ws.recv())
if msg["op"] == 0: # EVENT
print(f"{msg['d']['event']}: {msg['d']['data']}")
asyncio.run(connect())B2B Realtime Pricing
| Plan | Handles | Price | Modules |
|---|---|---|---|
| RT 25 | 25 | $49/mo | All modules |
| RT 100 | 100 | $149/mo | All modules |
| RT 500 | 500 | $499/mo | All modules |
| RT 1000 | 1,000 | $799/mo | All modules |
ECA (Early CA Alerts)
ECA detects pump.fun token launches that match community activity signals. Add a ticker, token name, contract address, or creator wallet to your watchlist, and ECA alerts you when a matching token appears on pump.fun. Entries expire after 4 hours. Free to use. Managed via the ECA section in @Xanguard_bot.
API
Auth: Bearer token with eca_ prefix.
Authorization: Bearer eca_your_api_key_here| Method | Path | Description |
|---|---|---|
| GET | /v1/eca/watchlist | List active watchlist entries |
| POST | /v1/eca/watchlist | Add entry. Body: {"ticker": "DOGE", "token_name": "...", "contract_address": "...", "creator_address": "..."} |
| DELETE | /v1/eca/watchlist/{id} | Remove entry |
| GET | /v1/eca/matches | Recent token matches (last 24h) |
| GET | /v1/eca/webhook | Get webhook URL |
| PUT | /v1/eca/webhook | Set webhook URL |
| GET | /v1/eca/status | Active entries, total matches |
WebSocket
wss://api.xanguard.tech/v1/eca/ws?api_key=eca_your_keyReceives real-time JSON events when a token launch matches your watchlist criteria.
Engagement Tracker
Engagement Tracker (ET) monitors real-time engagement changes on specific tweets — likes, retweets, replies, quotes, and bookmarks. Real-time engagement change detection with zero-delay alerts. Managed via @E_Xanguard_bot.
Bot Commands
| Command | Description |
|---|---|
/start | Dashboard & subscription |
/add <tweet_url> | Add a tweet to monitor |
/remove <tweet_id> | Stop monitoring a tweet |
/list | List watched tweets |
/apikey | View or regenerate API key |
/help | Command reference |
Pricing
| Plan | Tweets | Price |
|---|---|---|
| ET 25 | 25 | $100/mo |
| ET 50 | 50 | $200/mo |
API
Auth: Bearer token with et_ prefix.
Authorization: Bearer et_your_api_key_here| Method | Path | Description |
|---|---|---|
| GET | /v1/et/targets | List watched tweets |
| POST | /v1/et/targets | Add tweets. Body: {"tweet_ids": ["123", "456"]} |
| DELETE | /v1/et/targets/{tweet_id} | Remove watched tweet |
| GET | /v1/et/engagement/{tweet_id} | Current engagement counts |
| GET | /v1/et/webhook | Get webhook URL |
| PUT | /v1/et/webhook | Set webhook URL |
| GET | /v1/et/status | Subscription status |
Engagement Response
{
"ok": true,
"data": {
"tweet_id": "1234567890",
"favorite_count": 42,
"retweet_count": 10,
"reply_count": 5,
"quote_count": 2,
"bookmark_count": 8,
"last_updated": "2026-03-22T11:30:00Z"
}
}
WebSocket
wss://api.xanguard.tech/v1/et/ws?api_key=et_your_keyReceives real-time JSON events when engagement counts change for any watched tweet.
Trending Alerts
Trending Alerts polls Twitter’s trending feed every 60 seconds across 24 categories and delivers new trending tweets to you in real time. Free tier gets 1 non-crypto category. Pro tier ($39/mo) unlocks all 24 categories. Managed via @Trends_Xanguard_bot.
Bot Commands
| Command | Description |
|---|---|
/start | Dashboard & subscription |
/categories | Browse and subscribe to categories |
/list | List subscribed categories |
/upgrade | Upgrade to Pro tier |
/help | Command reference |
Pricing
| Plan | Categories | Price |
|---|---|---|
| Free | 1 (non-crypto) | $0 |
| Pro | All 24 | $39/mo |
API
Auth: Bearer token with trend_ prefix.
Authorization: Bearer trend_your_api_key_here| Method | Path | Description |
|---|---|---|
| GET | /v1/trending/categories | List all 24 categories with subscription status |
| GET | /v1/trending/subscriptions | Your subscribed categories |
| PUT | /v1/trending/subscriptions | Update subscriptions. Body: {"categories": ["crypto", "tech"]} |
| GET | /v1/trending/webhook | Get webhook URL |
| PUT | /v1/trending/webhook | Set webhook URL |
| GET | /v1/trending/status | Subscription status |
WebSocket
wss://api.xanguard.tech/v1/trending/ws?api_key=trend_your_keyReceives real-time JSON events when new trending tweets are detected in your subscribed categories.
PumpFun Livestream
PumpFun Livestream Tracker provides sub-second detection of pump.fun livestream starts and ends for monitored Solana wallets. Sub-second detection with zero cost per event. Managed via @PF_Xanguard_bot.
Bot Commands
| Command | Description |
|---|---|
/start | Dashboard & subscription |
/add <wallet> | Add wallet to monitor |
/remove <wallet> | Remove wallet |
/list | List watched wallets |
/apikey | View or regenerate API key |
/help | Command reference |
Pricing
| Plan | Wallets | Price |
|---|---|---|
| PF 3 | 3 | $100/mo |
| PF 6 | 6 | $180/mo |
| PF 10 | 10 | $270/mo |
| PF 20 | 20 | $500/mo |
API
Auth: Bearer token with pf_ prefix.
Authorization: Bearer pf_your_api_key_here| Method | Path | Description |
|---|---|---|
| GET | /v1/pf/targets | List watched wallets |
| POST | /v1/pf/targets | Add wallet. Body: {"wallet_address": "DYw8j...", "label": "Dev1"} |
| DELETE | /v1/pf/targets/{wallet} | Remove wallet |
| GET | /v1/pf/events | Recent livestream events (max 50) |
| GET | /v1/pf/webhook | Get webhook URL |
| PUT | /v1/pf/webhook | Set webhook URL |
| GET | /v1/pf/status | Subscription status |
Event Response
{
"ok": true,
"data": [
{
"wallet_address": "DYw8j...",
"mint": "9PR3c...",
"token_name": "BONK",
"token_symbol": "BONK",
"event_type": "livestream_started",
"detected_at": "2026-03-22T10:15:00Z",
"delivery_latency_ms": 450
}
]
}
WebSocket
wss://api.xanguard.tech/v1/pf/ws?api_key=pf_your_keyReceives real-time JSON events when watched wallets start or stop livestreaming on pump.fun.
Search Alerts
Search Alerts monitors Twitter/X for keyword matches in real time. Add up to 20 keyword queries and receive alerts when new matching tweets appear. Configurable intervals from 10 minutes to 6 hours. An add-on for @Xanguard_bot — managed via the Add-ons menu.
Pricing
| Plan | Queries | Price |
|---|---|---|
| Search Alerts 20 | 20 | $100/mo |
API
Auth: Bearer token with sa_ prefix, generated via the API Key button in the Search Alerts management screen.
Authorization: Bearer sa_your_api_key_here| Method | Path | Description |
|---|---|---|
| GET | /v1/sa/queries | List search queries |
| POST | /v1/sa/queries | Add query. Body: {"query_text": "solana airdrop"} |
| DELETE | /v1/sa/queries/{id} | Remove query |
| GET | /v1/sa/webhook | Get webhook URL |
| PUT | /v1/sa/webhook | Set webhook URL |
| GET | /v1/sa/status | Subscription status, query count, max queries |
Match Event
{
"type": "search_alert",
"data": {
"query_id": 1,
"query_text": "solana airdrop",
"tweet_id": "1234567890",
"full_text": "Massive Solana airdrop incoming...",
"screen_name": "CryptoWhale",
"display_name": "Crypto Whale"
}
}
WebSocket
wss://api.xanguard.tech/v1/sa/ws?api_key=sa_your_keyReceives real-time JSON events when new tweets match your keyword queries.
Plans & Pricing
Choose a plan based on how many Twitter accounts you need to monitor and how many webhook endpoints you require. All paid plans include full access to the REST API, WebSocket streaming, and webhook delivery.
2 accounts
0 webhooks
10 accounts
1 webhook
35 accounts
2 webhooks
75 accounts
5 webhooks
150 accounts
10 webhooks
500 accounts
25 webhooks
| Plan | Price | Accounts | Webhooks |
|---|---|---|---|
| Free | $0 | 2 | 0 |
| Starter | $19/mo | 10 | 1 |
| Growth | $49/mo | 35 | 2 |
| Pro | $99/mo | 75 | 5 |
| Business | $179/mo | 150 | 10 |
| Enterprise | $349/mo | 500 | 25 |
Payment
All payments are made in SOL on the Solana blockchain. Prices are displayed in USD and converted to SOL at the current market rate at the time of payment. To subscribe or upgrade, use the Telegram bot — send /start and select your plan.
What Every Plan Includes
- Real-time tweet detection (sub-second latency, typically 250-500ms)
- Telegram bot notifications with forum topic support
- REST API access (14 endpoints)
- WebSocket streaming
- Per-handle keyword filtering
- Contract address auto-detection (Solana and Ethereum)
- Notification filters (exclude replies, reposts, contracts only)
- Mute/unmute individual accounts
Support
Need help getting set up or have questions about the API? Reach out through any of these channels.
Telegram Bot
Send /help to @Xanguard_bot for the built-in command reference, or use the bot directly to manage your account.
Direct Contact
For account issues, billing questions, or enterprise inquiries, message @notAdegen on Telegram.
Blog
Read the Xanguard Blog for guides, analysis, and product updates.
Main Site
Visit xanguard.tech for an overview of the platform, feature highlights, and FAQ.