任意の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アカウントは一切関与しません。
-
キーを取得します。 サインアップして、ダッシュボードからAPIキーをコピーします。100回分の無料リクエストはすでに付いています。
-
アカウントを指定します。 ハンドルを@なしで
queryに入れます。たとえばnorthwind_billingです。自社のブランド、クライアント、競合のどれでもかまいません。公開アカウントならどれでも機能します。 -
リクエストを送ります。 ボディを
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" } -
カーソルをたどります。 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"}'
import requests
r = requests.post(
"https://api.sorsa.io/v3/mentions",
headers={"ApiKey": "YOUR_API_KEY"},
json={
"query": "northwind_billing",
"order": "latest",
},
timeout=30,
)
page = r.json()
for t in page["tweets"]:
print(t["user"]["username"], t["full_text"])
print(page.get("next_cursor"))
const res = await fetch("https://api.sorsa.io/v3/mentions", {
method: "POST",
headers: { ApiKey: "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
query: "northwind_billing",
order: "latest",
}),
});
const page = await res.json();
for (const t of page.tweets) console.log(t.user.username, t.full_text);
console.log(page.next_cursor);
POST /search-tweets タグ付けなしでブランド名に言及した投稿
("northwind billing" OR northwnd OR url:northwind.io) -from:northwind_billing
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 | メンションを取得したいハンドル。@なし |
order | latestは新しい順(デフォルト)、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は時間とともに大きくなりますが文字列で届くので、比較のために整数に変換しています。
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には専用のエンドポイントがあります。
名前、誤字、リンクには、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アカウントがどうなるかです。
下の表は、2つのエンドポイントを並べたもので、公式の制限はXのレート制限の表(新しいタブで開きます)によります。Sorsa APIは、任意のアカウントのメンション1,000件あたり約71分の1のコストで、自分のメンションを読む場合の公式料金と比べても14分の1です。
| Sorsa API | 公式X API | |
|---|---|---|
| アカウントの入力 | ハンドル | 数値のユーザーID(検索後) |
| 1リクエストあたりのメンション数 | 最大20 | 5〜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件あたりの価格は、料金ページにあるリクエスト単価から算出しました。
情報源
- Get Mentions, X API reference(新しいタブで開きます)
- Timelines, X API documentation(新しいタブで開きます)
- Rate limits, X API documentation(新しいタブで開きます)
- X API pay-per-usage pricing and owned reads(新しいタブで開きます)
- X API PPU expansions update, October 23, 2026(新しいタブで開きます)
- Search Mentions, Sorsa API reference(新しいタブで開きます)
- Track Mentions, Sorsa API docs(新しいタブで開きます)