B2Bリアルタイム API ・ WebSocket + REST

X(旧ツイッター)リアルタイムAPI
取引ボット、ターミナル、AIエージェント向け

Xanguard B2B は、開発者向けのX(旧Twitter/ツイッター)リアルタイムデータAPIです。1本の WebSocket 接続で、監視中アカウントの新規ツイート、削除ツイート、プロフィール変更、新規フォロワー、フォロー・フォロー解除を JSON で受け取れ、REST API でリストを管理できます。有料プランの検知中央値は約200ミリ秒です(実測データ)。50アカウントで月額$49から、最大1000アカウント、SOLで支払い、自動で有効になります。

料金は2026年10月5日時点で確認

開発者より:取引ボットやターミナルを開発されている方、ご訪問ありがとうございます。AIエージェントをお使いの場合もご一緒にどうぞ。連携、お見積り、フィールドの対応づけのご相談は、Telegramの @notAdegen へ直接どうぞ。私が個人的に返信します。

t.me/notAdegen アプリで開く

Xanguard 開発者 @notAdegen ・ ダイレクトメッセージには本人が返信します

リンクが開かない場合は、Telegramで @B2B_Xanguard_bot を検索してください

約200ms
検知中央値
5種類
リアルタイムのイベントモジュール
1,000
最大アカウント数(それ以上は個別相談)
$49から
50アカウント/月

5種類のリアルタイムイベントを、1本の WebSocket で

取引ボットやターミナルに必要なもの:ツイート、削除ツイート、プロフィール変更、新規フォロワー、フォロー・フォロー解除。そのまま使える JSON です。

ツイート twitter.post.new

ツイート、返信、引用、リポスト。検知中央値は約200ミリ秒。全文、メディアのリンク、引用・返信元のツイート、投稿者情報、コントラクトアドレスの自動抽出を含みます。全プラン対象。

削除ツイート twitter.tweet.deleted

監視中のアカウントがツイートを削除したときに、ツイートIDと本文付きで送信します。削除は確認できたものの対象を特定できない場合、この2つのフィールドは null になります。全プラン対象。

プロフィール変更 twitter.profile.update

名前、自己紹介、アイコン、固定ツイートの変更を、変更前と変更後の値付きで送信します。プロジェクトの方針が変わるときは、プロフィールから始まることがよくあります。Pro 以上。

新規フォロワー twitter.follower.new

監視中のアカウントにフォロワーが増えたとき、誰がフォローしたかを送信します。重要な開発者を、誰が静かにフォローしているかを知るのに役立ちます。Pro 以上。

REST API

dt_ で始まるキーで、アカウントの追加・削除(POST /v1/dt/targets)と、プロフィールや過去の変更の参照ができます。画像内のコントラクトアドレスの OCR は Enterprise に含まれます。

5分で接続し、イベントの受信を開始

打ち合わせも営業担当の対応待ちもありません。ボットで購入し、キーを受け取り、接続するだけです。

1

申し込む

Telegramで @B2B_Xanguard_bot を開き、プランを選んでSOLで支払います。

2

キーを受け取る

オンチェーンで確認されるとプランが自動で有効になり、ボットが dt_ で始まるAPIキーを送ります。

3

アカウントを追加する

ボットで、ユーザー名を付けて /add を送るか、POST /v1/dt/targets を呼び出します。

4

WebSocket に接続する

接続すると HELLO が届きます。LOGIN(op 2 + キー)を送ると、以降 EVENT が継続的に届きます。

opcode プロトコルと、Python・Node で動くサンプル

URL:wss://api.xanguard.tech/v1/dt/realtime/ws。TweetCatcher 互換の opcode フローで、1キーあたり最大5本の同時接続に対応し、90秒間ハートビートがないと切断されます。

op名称方向説明
10HELLOサーバー → クライアント接続時に送信。heartbeat_interval(ミリ秒)を含みます
2LOGINクライアント → サーバー15秒以内にAPIキーを送信: {"op": 2, "d": "dt_..."}
4READYサーバー → クライアント認証成功。有効なモジュールとアカウント数を含みます
0EVENTサーバー → クライアントリアルタイムイベント。d.event がイベントタイプです
1HEARTBEATクライアント → サーバーheartbeat_interval に従って送信
11HEARTBEAT_ACKサーバー → クライアントハートビートへの応答
3DISCONNECTサーバー → クライアント切断。d.reason に理由(無効なキー、期限切れなど)が入ります
Python (pip install websockets)
import asyncio, json
import websockets

URL = "wss://api.xanguard.tech/v1/dt/realtime/ws"
API_KEY = "dt_your_key"

async def main():
    async with websockets.connect(URL) as ws:
        # op 10 HELLO:ハートビート間隔(ms)を含む
        hello = json.loads(await ws.recv())
        interval = hello["d"]["heartbeat_interval"] / 1000

        # op 2 LOGIN:15秒以内にキーを送信
        await ws.send(json.dumps({"op": 2, "d": API_KEY}))
        ready = json.loads(await ws.recv())
        if ready["op"] != 4:  # 失敗時は op 3 DISCONNECT が届く
            raise SystemExit(ready["d"].get("reason"))
        print("接続しました:", ready["d"]["modules"])

        # 間隔に合わせてハートビート送信。90秒なしで切断
        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:  # 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("削除:", d["tweet_id"])
            elif ev == "twitter.profile.update":
                print("プロフィール変更:", d["field"], d["updated"])

asyncio.run(main())
Node.js (npm i ws)
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:LOGIN を送信してハートビート開始
      ws.send(JSON.stringify({ op: 2, d: 'dt_your_key' }));
      hb = setInterval(
        () => ws.send(JSON.stringify({ op: 1 })),
        msg.d.heartbeat_interval
      );
      break;
    case 4: // READY:認証成功
      console.log('接続しました', msg.d.modules);
      break;
    case 3: // DISCONNECT:無効または期限切れのキーなど
      console.error('切断されました:', msg.d.reason);
      break;
    case 0: { // EVENT:リアルタイムイベント
      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('新規フォロー:', data.handle);
      }
      break;
    }
  }
});

ws.on('close', () => clearInterval(hb));

JSONの例

以下はサンプルです。有効なフィールドはAPIドキュメント(英語)に従います。ツイートは先に twitter.post.new として届き、同じ data.id の twitter.post.update で内容が補完されることがあります。

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, new version ships tonight",
      "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 以上)
{
  "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": "deleted tweet text"
    }
  }
}

data.type の値:post、reply、quote、repost。プロフィール変更では、field は bio、name、avatar、pinned_tweet のいずれかです。

レベルはモジュールで、料金はアカウント数で決まります

まずモジュールのレベルを選び、次に監視するアカウント数を選びます。月額、米ドル表記、SOLでお支払い(2026年10月5日時点で確認)。

Starter
月額$49から
  • ツイートのイベント
  • 削除ツイートのイベント
  • WebSocket + REST
Enterprise
月額$249から
  • Pro のすべて
  • フォロー・フォロー解除のイベント
  • 画像内のコントラクトアドレス(OCR)
監視アカウント数Starter
ツイート + 削除
Pro
+ プロフィール変更 + 新規フォロワー
Enterprise
+ フォロー・解除
Starter 1アカウントあたり
50 $49 $99 $249 $0.98
250 $229 $429 $979 $0.92
500 $449 $749 $1649 $0.90
1000 $849 $1349 $2849 $0.85

1000アカウントを超える場合は個別にご相談ください。CA Search アドオン(コントラクトアドレス、トークン名、キーワードで過去24時間のツイートを検索。1クエリ最大200件):1日1000クエリで月額$100、2000クエリで$180、5000クエリで$250。支払いはSOLのみで、確定後の返金はできません。英語の完全な料金表:B2B API pricing。

200アカウントをリアルタイム監視する月額コスト

他社の料金は各社の公式サイトで2026年9月20日に確認したもの、X公式APIの料金は2026年10月5日(docs.x.com)に確認したものです。最新の料金は必ず各社サイトでご確認ください。

選択肢200アカウント/月備考
Xanguard B2B Starter 250$229WebSocket + REST。削除ツイートのイベントを含み、最大250アカウント
TweetStream(250アカウントの Pro プラン)$499同社サイトに掲載の料金
twitterapi.io(250アカウントのプラン)$499同社サイトの価格
X公式API(従量課金)約$210ツイートの読み取りのみ。1件 $0.005、1アカウントあたり1日7ツイートの場合。フォローやプロフィール変更は別料金で、利用制限あり

他のサービスからの移行

  • TweetCatcher:WebSocket は互換の opcode フロー(HELLO → LOGIN → EVENT + ハートビート)です。URL とキーを切り替え、少数の異なるフィールドを調整すれば、通常1時間以内に移行できます。移行ガイド(英語)
  • twitterapi.io:リクエスト先URLを api.xanguard.tech に変更し、X-API-Key ヘッダーとデータ構造をそのままお使いください。移行ガイド(英語)
  • その他のサービス:現在お使いのデータのドキュメントまたはサンプルをお送りください。通常は数時間でフィールドの対応表を用意し、同じチャットで一緒に連携します。

現時点でご提供していないもの

  • WebSocket の再接続後の再送は標準では行いません(30秒より古いツイートは遅れて届けず破棄します)。再接続後の直近15分の再送と遅延配信は、ご依頼によりキー単位で有効にできます。
  • 書面による稼働率のSLA。
  • Discordへの公式配信。支払いはSOLのみで、カードは利用できません。
  • ボットの画面は英語のみで、日本語の画面はありません。
想定する利用者:リアルタイムのツイッターデータを必要とする、取引ターミナル、Telegram取引ボット、コピートレードやシグナルのツール、ダッシュボード、AIエージェント。Telegramでツイートを受け取るだけなら、@Xanguard_bot で足り、1アカウントは無料です。

よくある質問

あります。Xanguard B2B は、監視中アカウントのツイート、削除ツイート、プロフィール変更、新規フォロワー、フォロー・フォロー解除を1本の WebSocket で配信し、REST API も提供します。料金はアカウント数とモジュールで決まり、Starter では50アカウントで月額49ドル、250で229ドル、500で449ドル、1000で849ドルです。支払いはSOLで、自動で有効になります。
公式ドキュメント(docs.x.com、2026年10月5日確認)によると、X APIは現在従量課金のみで、料金ページに月額の Basic や Pro プランは掲載されていません。読み取りツイート1件あたり0.005ドル、読み取りユーザー1件あたり0.010ドル、月間の読み取り上限は300万ツイートで、それ以上は X の Enterprise との交渉が必要です。1アカウントあたり1日7ツイートとすると、50アカウントの監視はツイートの読み取りだけで月額約53ドルです。フォローやプロフィール変更は別料金で、利用制限もあります。特定のアカウント群をリアルタイムで追うだけなら、アカウント数で月額定額のサービスのほうがシンプルなことが多いです。
有料プランの検知中央値は約200ミリ秒で、p95 と p99 は xanguard.tech/speed/ で1時間ごとに更新しています。ツイートのイベントには、ツイート自体の投稿時刻 created_at(ミリ秒のタイムスタンプ)が含まれるため、受信時刻と比較して、ご自身で遅延を検証できます。
違いはモジュールです。Starter はツイートと削除ツイート。Pro はそれに加えてプロフィール変更と新規フォロワー。Enterprise はさらにフォロー・フォロー解除のイベントを加えます。3つとも WebSocket と REST を含み、どれでもアカウント数は50、250、500、1000から選べます。コントラクトアドレスの抽出は全レベルに含まれ、画像内のアドレスの OCR は Enterprise のみです。
はい。WebSocket は TweetCatcher 互換の opcode フロー(HELLO、LOGIN、READY、EVENT、HEARTBEAT)を採用しており、URL とキーを切り替え、少数のフィールドを調整すれば動作します(通常1時間以内)。twitterapi.io からは、リクエスト先URLを api.xanguard.tech に変更し、X-API-Key ヘッダーとデータ構造をそのまま使えます。他のサービスの場合は、ドキュメントをお送りいただければ、通常は数時間でフィールドの対応表を用意します。
Telegramで @B2B_Xanguard_bot を開き、プランを選んでSOLで支払います。トランザクションが確認されるとプランが自動で有効になり、ボットがAPIキーを送ります。打ち合わせも営業担当の対応待ちもありません。カード決済には対応していません。
Xanguard の B2B API なら、スクレイパーの構築も保守も不要です。WebSocket に接続し、REST API で対象アカウントを選べば、イベント(ツイート、削除ツイート、プロフィール変更、新規フォロワー、フォロー)が JSON で届きます。50アカウントで月額49ドルから、支払いはSOL、キーは @B2B_Xanguard_bot で受け取れます。
はい、全プランに含まれます。twitter.tweet.deleted イベントが同じ WebSocket で、ツイートIDと、Xanguard が取得済みであれば本文付きで届きます。削除は確認できたもののツイートを特定できなかった場合は、tweet_id と text が null のイベントになります。
はい。リアルタイムのXフィードを必要とするターミナル、ローンチパッド、取引ボットを想定しています。ツイート、削除ツイート、プロフィール変更、フォローを WebSocket で配信し、有料プランの検知中央値は約200ミリ秒です(データは xanguard.tech/speed/ で公開)。Telegramで通知を受け取るだけなら、APIは不要で @Xanguard_bot で足ります。

1本の WebSocket、そのまま使える JSON

50アカウントで月額49ドルから、SOLで支払い。オンチェーンで確認されると、キーが自動で送られます。

リンクが開かない場合は、Telegramで @B2B_Xanguard_bot を検索してください