> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sorsa.io/llms.txt
> Use this file to discover all available pages before exploring further.

# メンションの追跡

`/mentions`は、指定したユーザー名に言及するツイートを返します。ブランドへのメンションの監視、サポート問い合わせの振り分け、キャンペーンの反応測定、競合の動向把握に使えます。Sorsaの検索エンドポイントの中でも最も多くのフィルターを備え、エンゲージメントのしきい値と日付範囲をリクエスト本文のパラメーターとして直接指定できます。結果は1ページ最大20ツイートです。

> **注：** 実運用向けのコード、複数チャネルの監視パターン、競合分析のワークフローは、ブログの[APIでTwitterメンションを追跡する方法](https://api.sorsa.io/blog/twitter-mentions-api)を参照してください。

## クイックスタート

```bash theme={null}
curl -X POST https://api.sorsa.io/v3/mentions \
  -H "ApiKey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "AppleSupport",
    "order": "latest",
    "min_likes": 10,
    "since_date": "2026-03-01"
  }'
```

> **ヒント：** 画面から試したい場合は、[API Playground](https://api.sorsa.io/playground)でコードを書かずに`/mentions`を実行できます。全アカウントに、カード登録不要の無料リクエスト100件が含まれます。

***

## エンドポイントの仕様

```text theme={null}
POST https://api.sorsa.io/v3/mentions
```

| パラメーター         | 型       | 必須  | 説明                                               |
| :------------- | :------ | :-- | :----------------------------------------------- |
| `query`        | string  | はい  | 追跡するユーザー名。@記号は付けません。例：`"elonmusk"`。              |
| `order`        | string  | いいえ | `"latest"`（デフォルト、新しい順）または`"popular"`（エンゲージメント順）。 |
| `since_date`   | string  | いいえ | 開始日。`YYYY-MM-DD`形式。                              |
| `until_date`   | string  | いいえ | 終了日。`YYYY-MM-DD`形式。                              |
| `min_likes`    | integer | いいえ | 必要な「いいね」の最小数。                                    |
| `min_retweets` | integer | いいえ | 必要なリツイートの最小数。                                    |
| `min_replies`  | integer | いいえ | 必要な返信の最小数。                                       |
| `next_cursor`  | string  | いいえ | 前のレスポンスのページネーションカーソル。                            |

結果が1件でも20件でも、呼び出し1回につき割り当て量を1リクエスト消費します。

***

## レスポンス

```json theme={null}
{
  "tweets": [
    {
      "id": "2031847200012345678",
      "full_text": "@AppleSupport My iPhone keeps restarting after the latest update. Anyone else?",
      "created_at": "2026-03-08T14:22:31Z",
      "lang": "en",
      "likes_count": 47,
      "retweet_count": 12,
      "reply_count": 8,
      "quote_count": 2,
      "view_count": 15200,
      "is_reply": false,
      "is_quote_status": false,
      "user": {
        "id": "9876543210",
        "username": "frustrated_user",
        "display_name": "Alex",
        "followers_count": 1240,
        "verified": false
      }
    }
  ],
  "next_cursor": "DAABCgABGSmiaxkA..."
}
```

各メンションには、全エンゲージメント指標と投稿者プロフィールが含まれます。`user`は完全なプロフィールです（上の例では読みやすくするため省略しています）。すべてのタイムスタンプはISO 8601形式です。`next_cursor`があれば続きがあり、`null`または存在しなければ終端です。処理方法は[ページネーション](https://docs.sorsa.io/ja/pagination)、全フィールドは[レスポンス形式](https://docs.sorsa.io/ja/response-format)を参照してください。

***

## /mentionsと/search-tweetsの使い分け

2つのエンドポイントは異なる用途に対応します。

* `/mentions`は特定のユーザー名（`@brand`）をタグ付けした投稿に使います。@タグ、返信、言及を取得でき、`min_likes`、`min_retweets`、`min_replies`、`since_date`、`until_date`を直接指定できます。
* [`/search-tweets`](https://docs.sorsa.io/ja/search-tweets)は、ユーザー名のタグを含まないキーワード一致に使います。`"Nike" -from:Nike lang:en`なら、本文中でブランド名に触れた投稿を取得できます。論理条件、メディアフィルターなど、`/mentions`が対応していない演算子が必要な場合もこちらを使います。

ブランドへの言及を広くカバーするには、両方を並行して実行し、ツイートIDで重複を除去してください。

***

## よく使うパターン

### エンゲージメントで絞り込む

反応を集めたメンションだけを取得します。評判を確認するダッシュボードや広報の監視に便利です。

```python theme={null}
import requests

API_KEY = "YOUR_API_KEY"
URL = "https://api.sorsa.io/v3/mentions"

body = {"query": "nike", "order": "popular", "min_likes": 100}
resp = requests.post(URL, headers={"ApiKey": API_KEY, "Content-Type": "application/json"}, json=body)
resp.raise_for_status()
mentions = resp.json().get("tweets", [])
```

### すべてのメンションを取得する（サポート用キュー）

エンゲージメントの条件を外し、時系列順に取得して、反応がない投稿も含めすべてのメンションを集めます。

```python theme={null}
body = {"query": "YourBrandSupport", "order": "latest", "since_date": "2026-05-10"}
resp = requests.post(URL, headers={"ApiKey": API_KEY, "Content-Type": "application/json"}, json=body)
```

### キャンペーン期間を指定した分析

`since_date`と`until_date`でキャンペーン期間を指定し、`next_cursor`がなくなるまで繰り返し取得します。

```python theme={null}
import time

def all_mentions(handle, since, until, max_pages=50):
    out, cursor = [], None
    for _ in range(max_pages):
        body = {"query": handle, "order": "latest", "since_date": since, "until_date": until}
        if cursor:
            body["next_cursor"] = cursor
        resp = requests.post(URL, headers={"ApiKey": API_KEY, "Content-Type": "application/json"}, json=body)
        resp.raise_for_status()
        data = resp.json()
        out.extend(data.get("tweets", []))
        cursor = data.get("next_cursor")
        if not cursor:
            break
        time.sleep(0.1)
    return out
```

### 新しいメンションを定期的に確認する

繰り返し処理の間で最新のツイートIDを保持し、まだ見ていないメンションだけを取り出します。IDは文字列で返されるため、数値として比較してください。

```python theme={null}
last_seen_id = None
while True:
    resp = requests.post(URL, headers={"ApiKey": API_KEY, "Content-Type": "application/json"},
                         json={"query": "yourbrand", "order": "latest"})
    resp.raise_for_status()
    tweets = resp.json().get("tweets", [])
    if tweets and last_seen_id is None:
        last_seen_id = max((t["id"] for t in tweets), key=int)
    elif tweets:
        new = [t for t in tweets if int(t["id"]) > int(last_seen_id)]
        # handle `new` mentions
        if new:
            last_seen_id = max((t["id"] for t in new), key=int)
    time.sleep(15)
```

この最初のページだけを使う例は、起動時に基準を設定し、既存のページの内容は通知しません。投稿が多い場合は、チェックポイントを進める前に未取得の範囲をページネーションで埋めてください。取得範囲を少し重ね、IDで重複を除去すると、遅れて現れる結果にも対応できます。`last_seen_id`をディスクやRedisに保存して再起動に備え、リクエストを`try`/`except`とバックオフで囲んで、一時的なエラーによる停止を防いでください。重複排除とバックオフを含む完全なパターンは、[リアルタイム監視](https://docs.sorsa.io/ja/real-time-monitoring)を参照してください。

***

## よくある落とし穴

* **サポート用途で`min_likes`を高くしすぎる。** 「いいね」2件の不具合報告は、500件のミームより重要なことがあります。サポート用キューでは`min_likes`を0にして、キーワードで振り分けます。
* **投稿の多いアカウントで1ページしか読まない。** 1リクエストは最大20メンションです。1日数百件あるブランドでは、必ず`next_cursor`で続きを取得してください。1ページごとに1リクエストを消費するため、予算に含めます。
* **`/mentions`だけで網羅できると考える。** @タグ付きの投稿だけが対象です。`/search-tweets`と組み合わせて、タグのないブランドへの言及も取得します。
* **投稿の少ないアカウントを頻繁に確認しすぎる。** メンション数に合わせ、活発なブランドなら15秒ごと、小規模なアカウントなら1〜2分ごとにします。すべてのプランでレート制限は毎秒20リクエストです（[レート制限](https://docs.sorsa.io/ja/rate-limits)）。
* **再起動をまたいで状態を保存しない。** 永続的なチェックポイントがないと、再起動時に古いメンションを再通知したり、停止中の投稿を取り逃したりします。

***

## 次のステップ

* [ツイート検索](https://docs.sorsa.io/ja/search-tweets)：タグのない言及をキーワードで検索。
* [検索演算子](https://docs.sorsa.io/ja/search-operators)：メディア、地域、論理条件などの複雑な検索。
* [リアルタイム監視](https://docs.sorsa.io/ja/real-time-monitoring)：重複排除とバックオフ付きのポーリング構成。
* [過去のデータ](https://docs.sorsa.io/ja/historical-data)：期間を指定して古いツイートを取得。
* [APIリファレンス](https://docs.sorsa.io/ja/api-reference/search/search-mentions)：エンドポイントの完全な仕様。
