本文へスキップ

任意のXアカウントのTwitterメンションAPI

アカウントの@ハンドルをタグ付けした公開投稿は、リプライも含め、メンションのエンドポイントからJSONとして読み取れます。X公式のGET /2/users/{id}/mentionsは投稿1件あたり$0.005を課金し、返すのは最新の800件だけです。

要点: 公式X APIのメンション用エンドポイントは、数値のユーザーIDと開発者アカウントのベアラートークンを受け取り、メンション1,000件あたり$5.00を課金します。任意のアカウントのメンションをハンドルで読み取るには、Sorsa APIのPOST /mentionsを使います。いいね、リプライ、リツイート、日付のフィルターを1つのボディで指定でき、1,000件あたり$0.07からです。100回分の無料リクエストで始められます。

エンドポイント
POST /mentions
ページサイズ
1リクエストあたり最大20メンション
価格
1,000件あたり$0.07から

#TwitterメンションAPIが返すもの

TwitterメンションAPIは、1つのアカウントを受け取り、その@ハンドルをタグ付けした公開投稿を、新しい順にJSONのページとして返すエンドポイントです。リプライの冒頭、文章の途中、複数のハンドルが並ぶ列の中など、タグの位置はどこでも対象になります。

1つのアカウントの最近のメンションをコードなしで確認したいなら、無料のTwitterメンション確認ツールが、期間と最小いいね数でメンションを一覧にします。このガイドの残りでは、同じ作業を、任意の数のアカウントと任意の数のページに対して、コードで行います。

各メンションは完全な投稿として返ります。テキストと日時、いいね、リプライ、リポスト、引用、表示回数、誰かへの返信かどうか、書いた人です。非公開アカウントの投稿は表示されません。@なしでブランド名を挙げた投稿は、そもそもメンションではありません。それはキーワード検索が必要で、後半で解説します。

公式X APIでは、メンションはGET /2/users/{id}/mentionsから取得します(Xのリファレンス(新しいタブで開きます))。アカウントの数値ユーザーIDを受け取るため、ハンドルから始めるにはまずユーザー検索が必要です。1リクエストで5〜100件の投稿が返り、タイムラインにはアカウントの最新800件のメンションしか含まれません(Xのタイムラインの概要(新しいタブで開きます))。投稿はIDとテキストだけで返り、日時、数値、投稿者は、tweet.fields、expansions、user.fieldsで要求したときにだけ届きます。

公式エンドポイントが受け付けるフィルターは時間だけで、start_time、end_time、since_id、until_idです。いいねやリプライの設定はないため、サポートデスクとPRチームが同じフィードをダウンロードして、それぞれの手元で並べ替えることになります。

#Sorsa APIでハンドルからメンションを取得する

メンションをコードで取得するなら、Twitter(X)API兼スクレイピングツールであるSorsa APIを使います。POST /mentionsは、任意のアカウントのメンションを1,000件あたり$0.07から返します。公式X APIの$5.00に対して大幅に安価です。ハンドルは入力したままの形で受け取り、いいね、リプライ、リツイート、日付による絞り込みを同じJSONボディで指定できます。ApiKeyヘッダー1つで開発者アカウントとOAuthの代わりになり、あなたのXアカウントは一切関与しません。

  1. キーを取得します。 サインアップして、ダッシュボードからAPIキーをコピーします。100回分の無料リクエストはすでに付いています。

  2. アカウントを指定します。 ハンドルを@なしでqueryに入れます。たとえばnorthwind_billingです。自社のブランド、クライアント、競合のどれでもかまいません。公開アカウントならどれでも機能します。

  3. リクエストを送ります。 ボディをPOST /mentions(新しいタブで開きます)にPOSTし、"order": "latest"で新しいメンションから順に取得します。

    Terminal
    curl -X POST "https://api.sorsa.io/v3/mentions" \
      -H "ApiKey: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"query": "northwind_billing", "order": "latest"}'
    
    Response200 OK
    {
      "tweets": [
        {
          "id": "2116933823886904728",
          "full_text": "@northwind_billing invoices still pending, is sync down?",
          "created_at": "2026-11-01T16:42:09Z",
          "lang": "en",
          "likes_count": 14,
          "retweet_count": 2,
          "reply_count": 3,
          "quote_count": 0,
          "view_count": 2310,
          "bookmark_count": 1,
          "is_reply": false,
          "is_quote_status": false,
          "conversation_id_str": "2116933823886904728",
          "entities": [],
          "user": {
            "id": "1587702913445103616",
            "username": "ops_notes_by_priya",
            "display_name": "Priya, ops notes",
            "followers_count": 4180,
            "verified": false,
            "created_at": "2022-11-02T08:31:44Z"
          }
        },
        {
          "id": "2116909085882164728",
          "full_text": "@northwind_billing the usage export saved me an afternoon",
          "created_at": "2026-11-01T15:03:51Z",
          "lang": "en",
          "likes_count": 87,
          "retweet_count": 9,
          "reply_count": 4,
          "quote_count": 1,
          "view_count": 11920,
          "bookmark_count": 6,
          "is_reply": true,
          "in_reply_to_username": "northwind_billing",
          "in_reply_to_tweet_id": "2116851177420881920",
          "is_quote_status": false,
          "conversation_id_str": "2116851177420881920",
          "entities": [],
          "user": {
            "id": "1371240448912351233",
            "username": "dana_ships_daily_x",
            "display_name": "Dana Okafor",
            "followers_count": 12650,
            "verified": true,
            "created_at": "2021-03-15T00:00:00Z"
          }
        }
      ],
      "next_cursor": "DAADDAABCgABHWD2c1tQkCsKAAIdYAk3gl1QYQ"
    }
    
  4. カーソルをたどります。 1ページには最大20件のメンションが入り、それぞれuserの中に投稿者の完全なプロフィールが含まれます。次のページには、同じボディにnext_cursorを入れて送り返し、カーソルのないレスポンスが返ったら止めます。

403はキーがないか、リクエストを使い切ったことを意味し、401はキーが誤っていることを意味します。429は1秒間に20を超えるリクエストを送ったことを意味するので、1秒待ってからもう一度送ってください。失敗したリクエストには課金されません。

下にハンドルと、ブランドを指す人々の言葉を入力してください。ビルダーが、curl、Python、Node.jsで/mentionsのリクエストを書き、あわせて、タグなしでブランド名に言及した投稿を見つける検索クエリも作ります。

名称、誤字、自社ドメイン。ドットを含む語はリンクとして扱われます。

並び順

POST /mentions ハンドルをタグ付けした投稿

curl -X POST "https://api.sorsa.io/v3/mentions" \
  -H "ApiKey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "northwind_billing", "order": "latest"}'

1リクエストで最大20メンション: Sorsa APIは1,000メンションあたり$0.07から、公式X APIは$5.00です。重複して返る投稿を除くため、両方のフィードをツイートIDで突き合わせてください。

1つのブランド用の2つのリクエスト: タグ付けされたメンションはPOST /mentions、タグ付けなしはPOST /search-tweets。実行前にYOUR_API_KEYを置き換えてください。

#いいね、リプライ、日付でメンションを絞り込む

POST /mentionsの絞り込みはSorsa API側で行われるので、リクエストでは作業に必要なメンションだけを要求でき、ページ送りの回数も減ります。すべてのフィルターはハンドルと同じJSONボディに入り、自由に組み合わせられます。

フィールド役割
queryメンションを取得したいハンドル。@なし
orderlatestは新しい順(デフォルト)、popularはエンゲージメントの多い順
min_likesこのいいね数以上のメンションだけを残す
min_repliesこのリプライ数以上のメンションだけを残す
min_retweetsこのリポスト数以上のメンションだけを残す
since_date日付範囲の開始。YYYY-MM-DD形式
until_date日付範囲の終了。YYYY-MM-DD形式
next_cursor次のページに進むための、前回のレスポンスのカーソル
  • query

    役割
    メンションを取得したいハンドル。@なし
  • order

    役割
    latestは新しい順(デフォルト)、popularはエンゲージメントの多い順
  • min_likes

    役割
    このいいね数以上のメンションだけを残す
  • min_replies

    役割
    このリプライ数以上のメンションだけを残す
  • min_retweets

    役割
    このリポスト数以上のメンションだけを残す
  • since_date

    役割
    日付範囲の開始。YYYY-MM-DD形式
  • until_date

    役割
    日付範囲の終了。YYYY-MM-DD形式
  • next_cursor

    役割
    次のページに進むための、前回のレスポンスのカーソル

ほとんどのチームが送るのは、次の4種類のボディです。どれも、上のcurlコマンドにそのまま使える完全なリクエストボディです。

リクエストボディ
# Support queue: every mention, newest first, no thresholds
{"query": "northwind_billing", "order": "latest"}

# PR and reputation: mentions that reached people
{"query": "northwind_billing", "order": "popular", "min_likes": 100}

# Campaign report: one month of mentions
{"query": "northwind_billing",
 "since_date": "2026-10-01", "until_date": "2026-10-31"}

# Competitor: what people tell a rival, with some traction
{"query": "ledgerly_founder_hq", "order": "popular", "min_retweets": 10}

サポート用のフィードには閾値を付けないでください。いいねが2件のバグ報告は、500件のいいねがついたジョークよりも早く返信が必要です。閾値はレポートやアラートに向いています。そこでは、すべてのリプライよりも、広まった少数のメンションのほうが重要だからです。競合のメンションを、そのフォロワーや投稿の傾向と並べて見るには、Twitter競合分析のガイドを参照してください。

#全ページを集め、その後は新着メンションだけを取得する

過去分の取得とモニタリングは、同じリクエストで停止の条件が違うだけです。過去分の取得は、カーソルが尽きるまで日付範囲を読み取ります。モニターは最新のメンションを読み取り、すでに保存した最初の1件で止まります。

次の過去分取得は、1か月分のメンションを、ページが届くたびに1メンション1行のJSON Linesファイルに書き込みます。ページ数の上限で止まるため、忙しいアカウントでもリクエストが暴走することはありません。

import json
import requests

API = "https://api.sorsa.io/v3/mentions"
HEADERS = {"ApiKey": "YOUR_API_KEY"}


def mentions(handle, max_pages=100, **filters):
    body = {"query": handle, "order": "latest", **filters}
    for _ in range(max_pages):
        r = requests.post(API, json=body, headers=HEADERS, timeout=30)
        r.raise_for_status()
        page = r.json()
        yield from page.get("tweets", [])
        cursor = page.get("next_cursor")
        if not cursor:
            break
        body["next_cursor"] = cursor


with open("mentions.jsonl", "w", encoding="utf-8") as f:
    for t in mentions("northwind_billing",
                      since_date="2026-10-01",
                      until_date="2026-10-31"):
        f.write(json.dumps(t) + "\n")

フィードを最新に保つには、次の関数をスケジュールで実行します。最新のメンションをページごとにたどり、以前に見たことのある最初のIDで止まるため、新着がない確認は1リクエストで済みます。ツイートIDは時間とともに大きくなりますが文字列で届くので、比較のために整数に変換しています。

Python
from pathlib import Path

STATE = Path("last_mention_id.txt")


def new_mentions(handle):
    last = int(STATE.read_text()) if STATE.exists() else 0
    fresh = []
    for t in mentions(handle, max_pages=10):
        if int(t["id"]) <= last:
            break
        fresh.append(t)
    if fresh:
        STATE.write_text(fresh[0]["id"])
    return fresh

最初の実行には保存済みのIDがないので、最大10ページを読み取って最新の1件を保存します。その後の実行頻度は、誰がどれだけ早く返答すべきかによって決まります。サポートデスクなら1分ごと、週次レポートなら1日1回です。

知っておきたいこと

最後のIDは、プロセスの外に保存してください。ファイル、データベースの行、Redisのキーなどです。それがないまま再起動したモニターは、古いメンションをもう一度アラートするか、停止中に投稿されたものをすべて見逃します。

Slackやメールへのアラートとたくさんのアカウントのスケジュールについては、Twitterのリアルタイム監視のガイドで、パイプライン全体を構築します。アカウント群が何を投稿しているかを見るのは、他の人が彼らに何を言っているかを読むのとは別の作業です。Xリストなら、最大5,000アカウントを1つのフィードでカバーできます。XリストとコミュニティのAPIのガイドを参照してください。

#あなたをタグ付けしないメンションを拾う

POST /mentionsが返すのは、@ハンドルを含む投稿です。しかし人々は、タグを付けずにブランドについて書くこともあります。名前で、誤字で、サイトへのリンクで、あるいはその投稿を引用して、です。これらの形ごとに、Sorsa APIには専用のエンドポイントがあります。

タグ @northwind_billing is the sync down? 返信 @northwind_billing fixed now, thanks POST /mentions ハンドルをタグ付けした投稿、 返信を含む 名前 northwind billing is down again? 誤字 northwnd broke our checkout today リンク 請求書をこちらに移行: northwind.io POST /search-tweets 名前、誤字、リンク。 ブランド自身の投稿は除外 引用 「まさにこれ」 + 公開投稿 POST /quotes 1つの投稿の引用 リポスト リポスト済み 公開投稿 POST /retweeters リポストした人
@ハンドルは、人々がブランドについて語る方法の1つにすぎません。名前、誤字、リンクには検索が必要で、引用とリポストは投稿ごとに読み取ります。

名前、誤字、リンクには、POST /search-tweets(新しいタブで開きます)にクエリを送り、ブランド自身の投稿は除外します。

タグなしクエリ
("northwind billing" OR northwnd OR url:northwind.io) -from:northwind_billing

ブランドをタグ付けし、名前も挙げている投稿は、両方のエンドポイントから返ってきます。そのため両方のフィードをツイートIDで管理し、コピーを1つだけ残します。新しいクエリは、スケジュールを組む前に100件の結果を読んでください。日常的な単語でもあるブランド名には、ページを増やすのではなく、除外条件を増やす必要があります。

1件の投稿の引用は、引用のテキストと投稿者を添えて、POST /quotes(新しいタブで開きます)から取得します。引用がブランドをタグ付けしているかどうかは問いません。投稿をリポストしたアカウントは、POST /retweeters(新しいタブで開きます)からプロフィールとして取得します。クエリの構文と検索ループについてはTwitter検索APIのガイドで、クエリに付けられるすべてのフィルターはTwitter検索コマンドの一覧で解説しています。

#公式のメンション用エンドポイントとの比較

公式X APIのGET /2/users/{id}/mentionsとSorsa APIのPOST /mentionsは、同じ公開投稿を返します。違うのは、送るもの、返るもの、コストです。メンションの作業を決める基準は7つあります。1,000件あたりの価格、履歴、フィルター、投稿者のデータ、セットアップ、レート制限、そしてXアカウントがどうなるかです。

公式X API ユーザー照会 ハンドルを数値IDに、 追加で1リクエスト GET /2/users/{id}/mentions 1リクエスト5~100件、 取得できるのは最新800件のみ $5.00 メンション1,000件あたり、 投稿者1人につき+$0.010 Sorsa API ハンドル + フィルター いいね、返信、リポスト と期間 POST /mentions 1リクエストで最大20件、 各投稿者のプロフィール付き から $0.07 メンション1,000件あたり
検索が1回減り、フィルターはリクエストに含まれ、投稿者も付いてきます。同じメンションが、$5.00ではなく1,000件あたり$0.07です。

下の表は、2つのエンドポイントを並べたもので、公式の制限はXのレート制限の表(新しいタブで開きます)によります。Sorsa APIは、任意のアカウントのメンション1,000件あたり約71分の1のコストで、自分のメンションを読む場合の公式料金と比べても14分の1です。

Sorsa API公式X API
アカウントの入力ハンドル数値のユーザーID(検索後)
1リクエストあたりのメンション数最大205〜100
どこまでさかのぼれるか設定した任意の日付範囲。/search-tweetsなら何年も前まで最新の800件
フィルターいいね、リプライ、リポスト、日付日付と投稿ID
投稿者のプロフィールすべてのメンションに含まれるexpansionsで取得、2026年11月22日から1人$0.010
レート制限キー1つにつき毎秒20リクエストアプリごとに15分あたり450リクエスト
メンション1,000件あたりの価格$0.07から$5.00。自分のアカウントは$1.00
セットアップAPIキー1つ開発者アカウント、アプリ、ベアラートークン
あなたのXアカウント使われない開発者アカウントと紐づく
  • アカウントの入力

    Sorsa API
    ハンドル
    公式X API
    数値のユーザーID(検索後)
  • 1リクエストあたりのメンション数

    Sorsa API
    最大20
    公式X API
    5〜100
  • どこまでさかのぼれるか

    Sorsa API
    設定した任意の日付範囲。/search-tweetsなら何年も前まで
    公式X API
    最新の800件
  • フィルター

    Sorsa API
    いいね、リプライ、リポスト、日付
    公式X API
    日付と投稿ID
  • 投稿者のプロフィール

    Sorsa API
    すべてのメンションに含まれる
    公式X API
    expansionsで取得、2026年11月22日から1人$0.010
  • レート制限

    Sorsa API
    キー1つにつき毎秒20リクエスト
    公式X API
    アプリごとに15分あたり450リクエスト
  • メンション1,000件あたりの価格

    Sorsa API
    $0.07から
    公式X API
    $5.00。自分のアカウントは$1.00
  • セットアップ

    Sorsa API
    APIキー1つ
    公式X API
    開発者アカウント、アプリ、ベアラートークン
  • あなたのXアカウント

    Sorsa API
    使われない
    公式X API
    開発者アカウントと紐づく

Sorsa APIは設計上、読み取り専用なので、Xのログイン情報を求めることはなく、あなたのアカウントが危険にさらされることもありません。コードからメンションに返信するには、返信用に公式X APIと組み合わせます。読み取りはSorsa API、投稿はX経由です。

#メンション1,000件あたりのコスト

Sorsa APIでは、メンションは1,000件あたり$0.07からです。1リクエストで最大20件が返り、中身にかかわらず1リクエストとして課金されます。公式X APIは返したすべての投稿に$0.005を課金し、メンション1,000件あたり$5.00になります(Xの料金表(新しいタブで開きます))。

収集するメンション

公式X API

$500

メンション10万件の場合

1投稿あたり$0.005

Sorsa API

$7から

メンション10万件の場合

1,000件あたり$0.07から

コストは71分の1

公式の請求額を動かす要素が3つあります。自分のアカウントのメンションを自分の開発者アプリで読み取る場合は、自分のデータの読み取りとして1投稿$0.001になります。2026年11月22日からは、expansionsで返される投稿者ごとに$0.010が加わる(10月23日のXのお知らせ(新しいタブで開きます))ため、1,000人の別々の人からの1,000件のメンションは$15.00に達します。さらに、従量課金は月300万件の投稿読み取りで止まり、そこから先でXが販売するのはEnterprise契約だけです。公式の全料金は、X APIの料金の解説にあります。

#今日、最初のメンションを取得する

アカウントのメンションは、1リクエストで取得できます。ハンドルをPOST /mentionsに入れ、気になるいいね、リプライ、リポスト、日付を加えると、最大20件のメンションが投稿者付きで返ります。Sorsa APIは、公式X APIの$5.00に対して1,000件あたり$0.07から、開発者アカウント不要で返します。100回分の無料リクエストで、最初の2,000件をまかなえます。

#よくある質問

X(Twitter)にはメンションAPIがありますか?

あります。公式X APIのGET /2/users/{id}/mentionsは、アカウントをタグ付けした投稿を、1リクエストあたり最大100件、最新の800件に限って、投稿1件$0.005で返します。開発者アカウント、ベアラートークン、アカウントの数値IDが必要です。Sorsa APIのPOST /mentionsは、同じ公開メンションをハンドルで、APIキー1つで、1,000件あたり$0.07からで返します。

自分のアカウントだけでなく、任意のアカウントのメンションを取得できますか?

できます。XのNotificationsタブに表示されるのは、サインインしているアカウントのメンションだけですが、2つのAPIはどちらも任意の公開アカウントを読み取れます。公式X APIでは、自分のメンションを自分のアプリで読み取る場合は1投稿$0.001、他人のものは$0.005です。Sorsa APIのPOST /mentionsは、どの公開ハンドルでも同じ価格、1,000件あたり$0.07からです。非公開アカウントの投稿は、どこでも表示されません。

Twitterのメンションはどこまでさかのぼれますか?

公式のメンション用エンドポイントは、アカウントの最新の800件で止まります。それより古いものには、日付範囲を指定した@ハンドルの検索が必要です。Xの全アーカイブ検索は2006年3月までさかのぼれ、投稿1件$0.005です。Sorsa APIでは、POST /mentionsがsince_dateとuntil_dateで日付範囲を受け取り、@handleとsince:、until:を指定したPOST /search-tweetsは2006年まで、1,000件あたり$0.07からでさかのぼれます。

Xアカウントのメンションを取得するにはどのAPIを使うべきですか?

Xアカウントのメンションを取得するなら、Sorsa APIです。POST /mentionsは、メンション1,000件あたり$0.07からで、公式X APIの$5.00に対して安価です。ハンドルを受け取り、いいね、リプライ、リポスト、日付を1つのボディで絞り込み、すべてのメンションに投稿者の完全なプロフィールを含めます。全プランで毎秒20リクエストに対応し、必要なのは開発者アカウントではなくAPIキー1つです。

無料のTwitterメンションAPIはありますか?

Xにはありません。公式X APIに無料枠はなく、メンション用のエンドポイントは1投稿$0.005を課金します。Sorsa APIは、新規アカウントごとに100回分の無料リクエストを、カードなし、有効期限なしで提供し、POST /mentionsで約2,000件のメンションをまかなえます。1つのアカウントの最近のメンションをさっと見るには、無料のTwitterメンション確認ツールが、コードもXログインも不要で使えます。

#検証の方法

2026年11月2日に、GET /2/users/{id}/mentionsのXのリファレンス、タイムラインの概要、レート制限の表を読みました。また、自分のデータの読み取りの料金を含む従量課金の料金表と、expansionsの課金に関するXの10月23日のお知らせも読みました。このページのSorsa APIのリクエストはすべて、/mentions、/search-tweets、/quotes、/retweetersの稼働中のAPIリファレンスをもとに書いています。レスポンスは架空のアカウントによる例です。メンション1,000件あたりの価格は、料金ページにあるリクエスト単価から算出しました。

Sorsa APIチーム 読み取り専用のX(Twitter)APIとスクレイピングツール、Sorsa APIを開発・運営しています。2022年から本番稼働し(旧TweetScout API)、累計60億リクエスト以上を処理しています。 Sorsa APIについて