API de Twitter (X) en tiempo real
Para bots de trading, terminales y Agents
Xanguard B2B es una API de datos de Twitter (X) en tiempo real para desarrolladores. Una sola conexión WebSocket te envía en JSON los tweets nuevos, tweets borrados, cambios de perfil, nuevos seguidores y follows y unfollows de las cuentas que monitoreas; una REST API gestiona la lista. Mediana de detección de ~200 ms en los planes de pago (datos reales). Desde 49 USD al mes por 50 cuentas, hasta 1000 cuentas, pago en SOL y activación automática.
Precios verificados el 5 de octubre de 2026
Hermano, si haces bots de trading o terminales: bienvenido a Xanguard, tú y tu Agent. Integración, cotización y mapeo de campos, escríbeme directo en Telegram: @notAdegen
Desarrollador de Xanguard · los mensajes privados los respondo yo mismo
¿No abre el enlace? Abre Telegram y busca @B2B_Xanguard_bot
Cinco tipos de eventos en tiempo real, un solo WebSocket
Lo que necesita un bot de trading o una terminal: tweets, tweets borrados, cambios de perfil, nuevos seguidores y follows y unfollows. JSON listo para usar.
Tweets twitter.post.new
Tweets, respuestas, citas y retweets, con mediana de detección de ~200 ms. Texto completo, enlaces a medios, el tweet original citado o respondido, datos del autor y extracción automática de direcciones de contrato. Todos los planes.
Tweets borrados twitter.tweet.deleted
Se envía cuando una cuenta monitoreada borra un tweet, con el ID y el texto del tweet borrado; si solo se puede confirmar que hubo un borrado pero no cuál, esos dos campos son null. Todos los planes.
Cambios de perfil twitter.profile.update
Cambios de nombre, bio, foto y tweet fijado, con el valor anterior y el nuevo. Cuando un proyecto cambia de narrativa, suele empezar por el perfil. Pro y superiores.
Nuevos seguidores twitter.follower.new
Se envía cuando una cuenta monitoreada gana un seguidor, indicando quién es. Útil para ver quién sigue en silencio a los devs importantes. Pro y superiores.
Follows / unfollows twitter.following.new / .removed
A quién sigue o deja de seguir una cuenta monitoreada, con nombre, bio y seguidores del otro perfil. Señales de colaboraciones y movimientos de gente clave, todo por la misma conexión. Enterprise.
REST API
Con tu clave dt_ añades y quitas cuentas (POST /v1/dt/targets) y consultas perfiles y cambios anteriores. El OCR para direcciones de contrato dentro de imágenes está en Enterprise.
Conéctate en 5 minutos y empieza a recibir eventos
Sin reuniones y sin esperar a un vendedor. Compras en el bot, recibes tu clave y te conectas.
Suscríbete
Abre @B2B_Xanguard_bot en Telegram, elige un plan y paga en SOL.
Recibe tu clave
Tras la confirmación on-chain, el plan se activa solo y el bot te envía tu clave de API, que empieza con dt_.
Añade cuentas
En el bot, /add con el usuario, o llama a POST /v1/dt/targets.
Conecta el WebSocket
Al conectar recibes HELLO; envía LOGIN (op 2 + tu clave) y luego recibes EVENT de forma continua.
Protocolo de opcodes, con ejemplos que corren en Python y Node
URL: wss://api.xanguard.tech/v1/dt/realtime/ws. Flujo de opcodes compatible con TweetCatcher; hasta 5 conexiones simultáneas por clave, y si pasan 90 segundos sin heartbeat se corta la conexión.
| op | Nombre | Dirección | Descripción |
|---|---|---|---|
| 10 | HELLO | servidor → cliente | Se envía al conectar, con heartbeat_interval (milisegundos) |
| 2 | LOGIN | cliente → servidor | Envía tu clave de API en 15 segundos: {"op": 2, "d": "dt_..."} |
| 4 | READY | servidor → cliente | Autenticación correcta, con los módulos activos y el número de cuentas |
| 0 | EVENT | servidor → cliente | Evento en tiempo real; d.event es el tipo de evento |
| 1 | HEARTBEAT | cliente → servidor | Se envía según heartbeat_interval |
| 11 | HEARTBEAT_ACK | servidor → cliente | Respuesta al heartbeat |
| 3 | DISCONNECT | servidor → cliente | Desconexión; d.reason indica el motivo (por ejemplo, clave inválida o vencida) |
import asyncio, json
import websockets
URL = "wss://api.xanguard.tech/v1/dt/realtime/ws"
API_KEY = "dt_tu_clave"
async def main():
async with websockets.connect(URL) as ws:
# op 10 HELLO: trae el intervalo de heartbeat (ms)
hello = json.loads(await ws.recv())
interval = hello["d"]["heartbeat_interval"] / 1000
# op 2 LOGIN: envía la clave en menos de 15 s
await ws.send(json.dumps({"op": 2, "d": API_KEY}))
ready = json.loads(await ws.recv())
if ready["op"] != 4: # si falla, llega op 3 DISCONNECT
raise SystemExit(ready["d"].get("reason"))
print("Conectado:", ready["d"]["modules"])
# heartbeat según el intervalo; sin heartbeat en 90 s se corta
async def heartbeat():
while True:
await asyncio.sleep(interval)
await ws.send(json.dumps({"op": 1}))
hb = asyncio.create_task(heartbeat())
async for raw in ws:
msg = json.loads(raw)
if msg["op"] != 0: # solo procesamos op 0 EVENT
continue
ev, d = msg["d"]["event"], msg["d"]["data"]
if ev == "twitter.post.new":
print(d["author"]["handle"], d["text"])
elif ev == "twitter.tweet.deleted":
print("Borrado:", d["tweet_id"])
elif ev == "twitter.profile.update":
print("Cambio de perfil:", d["field"], d["updated"])
asyncio.run(main())
const WebSocket = require('ws');
const URL = 'wss://api.xanguard.tech/v1/dt/realtime/ws';
const ws = new WebSocket(URL);
let hb;
ws.on('message', (raw) => {
const msg = JSON.parse(raw.toString());
switch (msg.op) {
case 10: // HELLO: envía LOGIN y empieza el heartbeat
ws.send(JSON.stringify({ op: 2, d: 'dt_tu_clave' }));
hb = setInterval(
() => ws.send(JSON.stringify({ op: 1 })),
msg.d.heartbeat_interval
);
break;
case 4: // READY: autenticación correcta
console.log('Conectado', msg.d.modules);
break;
case 3: // DISCONNECT: clave inválida o vencida, etc.
console.error('Desconectado:', msg.d.reason);
break;
case 0: { // EVENT: evento en tiempo real
const { event, data } = msg.d;
if (event === 'twitter.post.new') {
console.log(data.author.handle, data.text);
} else if (event === 'twitter.following.new') {
console.log('Nuevo follow:', data.handle);
}
break;
}
}
});
ws.on('close', () => clearInterval(hb));
Cómo se ve el JSON
Los datos de abajo son ejemplos; los campos válidos son los de la documentación de la API (en inglés). Un tweet puede llegar primero como twitter.post.new y luego completarse con un twitter.post.update con el mismo data.id.
twitter.post.new{
"op": 0,
"d": {
"event": "twitter.post.new",
"event_id": "evt_1234567890123456789",
"task_info": {"handle": "example_dev"},
"data": {
"id": "1234567890123456789",
"created_at": 1712000000000,
"type": "post",
"text": "gm, la nueva versión sale esta noche",
"media": [],
"author": {
"id": "1234567890",
"handle": "example_dev",
"name": "Example Dev",
"stats": {"followers": 12000, "following": 800}
},
"in_reply_to": null,
"quoted_tweet": null
}
}
}
twitter.following.new(Enterprise){
"op": 0,
"d": {
"event": "twitter.following.new",
"event_id": "evt_f_example_dev_1712000000000",
"event_time": 1712000000000,
"task_info": {"handle": "example_dev", "id": "1234567890"},
"data": {
"id": "2233445566",
"handle": "example_founder",
"name": "Example Founder",
"bio": "building on Solana",
"followers": 5400,
"following": 310
}
}
}
twitter.profile.update(Pro y superiores){
"op": 0,
"d": {
"event": "twitter.profile.update",
"event_id": "evt_p_example_dev_1712000000000",
"task_info": {"handle": "example_dev"},
"data": {
"field": "bio",
"prev": "Old bio text",
"updated": "New bio text"
}
}
}
twitter.follower.new / twitter.tweet.deleted{
"op": 0,
"d": {
"event": "twitter.follower.new",
"task_info": {"handle": "example_dev"},
"data": {
"id": "12345678",
"handle": "newfollower",
"name": "New Follower"
}
}
}
{
"op": 0,
"d": {
"event": "twitter.tweet.deleted",
"task_info": {"handle": "example_dev"},
"data": {
"tweet_id": "1234567890123456789",
"text": "texto del tweet borrado"
}
}
}
Valores de data.type: post, reply, quote, repost. En los cambios de perfil, field puede ser bio, name, avatar o pinned_tweet.
Niveles por módulos, precio por número de cuentas
Primero eliges el nivel de módulos y luego cuántas cuentas monitorear. Precios mensuales en dólares, pagados en SOL, verificados el 5 de octubre de 2026.
- Eventos de tweets
- Eventos de tweets borrados
- WebSocket + REST
- Todo lo de Starter
- Eventos de cambios de perfil
- Eventos de nuevos seguidores
- Todo lo de Pro
- Eventos de follows y unfollows
- Direcciones de contrato en imágenes (OCR)
| Cuentas monitoreadas | Starter tweets + borrados | Pro + cambios de perfil + nuevos seguidores | Enterprise + follows y unfollows | Starter por cuenta |
|---|---|---|---|---|
| 50 | $49 | $99 | $249 | $0.98 |
| 250 | $229 | $429 | $979 | $0.92 |
| 500 | $449 | $749 | $1649 | $0.90 |
| 1000 | $849 | $1349 | $2849 | $0.85 |
Más de 1000 cuentas se negocia aparte. Complemento CA Search (busca tweets de las últimas 24 horas por dirección de contrato, nombre de token o palabra clave, hasta 200 por consulta): 1000 consultas al día por $100/mes, 2000 por $180 y 5000 por $250. Tabla completa de precios en inglés: B2B API pricing.
Cuánto cuesta monitorear 200 cuentas en tiempo real al mes
Los precios de terceros salen de sus sitios oficiales, verificados el 20 de septiembre de 2026; el precio de la API oficial de X, el 5 de octubre de 2026 (docs.x.com). Vale siempre el precio más reciente de cada sitio.
| Opción | 200 cuentas al mes | Notas |
|---|---|---|
| Xanguard B2B Starter 250 | $229 | WebSocket + REST, con eventos de tweets borrados, hasta 250 cuentas |
| TweetStream (plan Pro de 250 cuentas) | $499 | Precio publicado en su sitio |
| twitterapi.io (plan de 150 cuentas + 50 adicionales) | unos $399 | Cada cuenta adicional cuesta $2 |
| API oficial de X (pago por uso) | unos $210 | Solo lectura de tweets: $0.005 por tweet, con 7 tweets al día por cuenta; follows y cambios de perfil se cobran aparte y hay límites de uso |
Migrar desde otros servicios
- TweetCatcher: el WebSocket usa un flujo de opcodes compatible (HELLO → LOGIN → EVENT + heartbeat). Cambias la URL y la clave, ajustas unos pocos campos distintos y normalmente queda en menos de una hora. Guía de migración (inglés)
- twitterapi.io: cambia la URL de las peticiones a
api.xanguard.techy conserva tu cabeceraX-API-Keyy la estructura de datos. Guía de migración (inglés) - Otros proveedores: mándame la documentación o un ejemplo de los datos que usas hoy; normalmente en unas horas tengo el mapeo de campos y lo integramos juntos en el mismo chat.
Lo que no ofrecemos por ahora
- Reenviar, tras una reconexión del WebSocket, los tweets que llegaron mientras estabas desconectado.
- Un SLA de disponibilidad por escrito.
- Envío nativo a Discord; el pago es solo en SOL, no se acepta tarjeta.
Preguntas frecuentes
Un solo WebSocket, JSON listo para usar
Desde 49 USD al mes por 50 cuentas, pago en SOL; tras la confirmación on-chain, la clave se envía automáticamente.
¿No abre el enlace? Abre Telegram y busca @B2B_Xanguard_bot
Inicio en español · Monitor de Twitter · Velocidad real (inglés) · English version