twitterapi.io は独立した第三者サービスです。 X Corp. とは無関係。

ブログx api 制限

X (Twitter) API 制限の完全ガイド — レート制限・月間 2M cap・回避方法

Yuki Tanaka 著19 分で読了
X API の 3 層制限構造 — per-endpoint 15分レート制限 + 月間 2M Post reads ハードキャップ + アカウントレベル制限の関係図
X API の「制限」は実は 3 層の異なる仕組み。HTTP 429 が 15分レートと月間 cap の両方をカバーするため、x-rate-limit-reset header で区別する必要があります。

X (旧Twitter) API の「制限」は実は 3 層の異なる仕組み が同時に動いています:per-endpoint レート制限(15分単位の上限)、月間ハードキャップ(月 2,000,000 Post reads)、アカウントレベルの利用制限(2023年の閲覧制限騒動の原因)。多くの JA SERP 記事はこの 3 層を混在させてしまい、ユーザーが「自分の状況がどの層に当たっているか」分からないまま放置するケースが多発しています。

この記事では docs.x.com の公式仕様に基づいて、13 個の主要 endpoint のレート制限表(per-15min app 認証 / user 認証)、月間 2M Post reads ハードキャップ の挙動、HTTP 429 と 403 の正確な使い分け(429 は "15分レート OR 月キャップ exceeded"、403 は scope/権限不足)、そして 回避方法 3 つ(24時間重複排除を活用した cache 設計、Owned Reads $0.001 単価、第三者 API twitterapi.io への切替)まで実装に直結する具体的な情報を提供します。

JA SERP の競合記事(camtsuku / note / chiebukuro / nojima 等)は「VPN 切替で IP を変える」「proxy 旋転」といった 2026年現在は通用しない古い対策 を未だに掲載していますが、X は behavioral fingerprinting を採用しているため、IP だけ変えても他の signal (TLS 指紋・cookie 履歴・タイミング) が継続している限り検出されます。技術的に正しい回避策はこの記事の Section 4 で扱います。

01 — Section

X API 制限とは — 3 層構造を理解する

X API の「制限」と一言で言っても、実際には 3 つの異なる仕組み が同時に動いています。これを混在させて議論してしまうと、解決策がまったく違う方向に向かいます。順番に区別していきましょう。

第 1 層 — per-endpoint レート制限 (rate limit)。 エンドポイント別に 15 分単位の上限が定義されています。例えば /2/tweets の read は app 認証で 3,500 リクエスト/15分、user 認証で 5,000 リクエスト/15分。/2/users は app 300 / user 900 と、endpoint ごとに数字が違います。これは「短期間にどれだけリクエストを連発できるか」の上限で、超えると HTTP 429 が返ります。15 分待つ(または x-rate-limit-reset header の Unix timestamp まで待つ)と自動で解除されます。

第 2 層 — 月間ハードキャップ (monthly cap)。 Post reads は 月 2,000,000 リクエスト/月 が上限で、これを超えると 公式 API では翌月 1 日まで取得不可能 になります(2026 年 4 月 16 日以降明確化)。これも HTTP 429 で返るため、「429 = 15 分レート」とは限らず、月キャップ到達もあり得る ことに注意。区別の方法は x-rate-limit-reset header の reset 時刻が「15 分以内」か「月末まで」かでチェックします。

第 3 層 — アカウントレベルの利用制限 (account-level limit)。 これは API 経由でない通常閲覧にも適用される制限で、特定アカウントの行動パターン(短時間の大量 follow / unfollow、自動化された投稿等)が検知された場合に、X 全体での閲覧・投稿・API 利用が制限されます。2023 年の "閲覧制限" 騒動 はこれが massive スケールで発動した事例。これは Day 4 ページ「スパムと判断された場合の解除方法」(/ja/blog/x-spam-kaijo)で詳しく扱います。

3 層を区別する重要性。 検索する人の多くは(1) の レート制限 か(2) の 月キャップ に当たっています。VPN 切替やプロキシ旋転は(3) のアカウント問題には少し効くかもしれませんが、(1) (2) には完全に無効です。正しい区別から正しい対策が始まります。

重要(v2 で訂正): 従来「Basic 月 10K reads / Pro 月 1M reads」という per-tier の月間上限がありましたが、2026 年 4 月 16 日以降、月額プランは legacy 扱い となりました。新規ユーザーは pay-per-use がデフォルトで、月間制限は per-endpoint レート制限 + 月 2M Post reads cap の組み合わせとなっています。古い記事の per-tier 月額制限の話は現在のユーザーには適用されません。

02 — Section

現在の per-endpoint レート制限 — docs.x.com 最新仕様

docs.x.com の rate-limits ページから抽出した、主要 13 endpoint の 15 分単位上限 です(app 認証 = Bearer Token、user 認証 = OAuth tokens で異なる):

Read 系 endpoint (取得):

EndpointApp 認証User 認証
/2/tweets (read)3,500 / 15min5,000 / 15min
/2/tweets/:id450 / 15min900 / 15min
/2/tweets/search/recent450 / 15min300 / 15min
/2/users300 / 15min900 / 15min
/2/users/by300 / 15min900 / 15min
/2/users/by/username/:username300 / 15min900 / 15min
/2/users/:id300 / 15min900 / 15min
/2/users/:id/tweets10,000 / 15min900 / 15min
/2/spaces300 / 15min300 / 15min
/2/spaces/search300 / 15min300 / 15min
/2/lists/:id75 / 15min75 / 15min
/2/lists/:id/tweets900 / 15min900 / 15min

Write 系 endpoint (作成):

EndpointApp 認証User 認証
/2/tweets (POST, 作成)10,000 / 24時間100 / 15min

重要な観察 (3つ):

(1) app 認証 vs user 認証で 2-3 倍違うことがある。 例えば /2/users/:id/tweets は app 認証 10,000/15min vs user 認証 900/15min と 10 倍以上の差。app 認証(Bearer Token)で叩ける場合は app を使うのが圧倒的に効率的。

(2) Lists 系が一番厳しい。 /2/lists/:id は app/user 共に 75/15min — 1 秒に 1 リクエスト以下しか叩けない。Lists ヘビーな use case は最初から twitterapi.io を検討するべき

(3) Post 作成は 24 時間ベースでも制限あり。 /2/tweets POST は app 認証で 10,000/24hrs(15 分単位ではない、日次)。自動投稿ボットは「毎日 10,000 リクエストを 24 時間に分散」する設計が必要。

月間ハードキャップ (pay-per-use プラン):

- Post reads: 2,000,000 / 月 ← この上限を超えると公式では翌月 1 日まで取得不可

- Spending limits: user-configurable(払う金額のキャップ)

- 24時間重複排除: 同 post を 1 日内に複数 query しても 1 回のみ計上

Rate limits and billing are separate — docs.x.com 明記の重要なルール。レート制限に達しなくても料金は発生し、料金キャップに達しなくてもレート制限は発生し得ます。両者は独立した仕組み。

X API 主要 13 endpoint のレート制限を横バーで可視化したチャート — /2/tweets read 3,500/15min が最高、/2/lists/:id 75/15min が最低、app 認証と user 認証を 2 色で対比
X API 主要 13 endpoint の 15分単位レート制限 — app 認証(青)と user 認証(緑)で 2-10 倍差がある endpoint に注目。
03 — Section

「API呼び出しの回数制限を超えました」エラー — HTTP 429 と 403 の区別

この画面を見ると焦りますが、HTTP ステータスコードによって原因と対処が大きく違います。最新の docs.x.com 仕様では:

HTTP 429 (Too Many Requests) — 統一エラー (v2 で重要訂正):

docs.x.com の最新仕様では、429 は 「レート制限超過 OR 月間 cap 到達」を統一して カバーします。つまり 429 が出たら 2 つのケースが考えられます。区別は x-rate-limit-reset header の Unix timestamp で行います。

ケース A: 15分レート制限超過 (一時的)

- 例: /2/tweets read を 1 分で 5,000 リクエスト発射 → 4,000 リクエスト以降 429 が返る

- x-rate-limit-reset header: 15 分以内 の Unix timestamp

- 対処: 15 分待ち、または exponential backoff (30秒 → 1分 → 5分)。リセット時刻まで待つのが最も効率的

- 根本対策: cache 設計を見直し、リクエストを 15 分間に分散

ケース B: 月間 2M Post reads キャップ到達 (致命的)

- 例: 月初から大量 read で月の 20 日めに 2M 到達 → 月末まで完全停止

- x-rate-limit-reset header: 月末まで の Unix timestamp(または header なし)

- 対処: 公式では翌月 1 日まで取得不可

- 解決策: 第三者 API (twitterapi.io) に切替 → 月間キャップなし、即時復帰

HTTP 403 (Forbidden) — 認証はあるが権限がない:

これは 「rate limit ではない」。HTTP 403 のレスポンス body には特殊な error code が入る場合があります(例:{"errors":[{"code":226,"message":"..."}]} ← 「自動的なものと判断」の場合)。原因と対処:

- API key の scope に対象 endpoint が含まれていない → API key を再発行 + 適切な scope 付与

- enroll プランで利用不可能な endpoint を呼んだ → Enterprise 契約(contact-sales)または twitterapi.io 切替

- Following / Likes / Quote-Posts は self-serve プランから除外 (2026-04-16〜) → 公式では Enterprise 契約専用、twitterapi.io なら可

- アカウントレベルでロックされている (HTTP 403 + body code 226) → Day 4 ページ「スパムと判断された場合」(/ja/blog/x-spam-kaijo)で扱う解除手順を実行

ステータスコードで切り分けるフローチャート:

```

HTTP 429 受け取った

↓ x-rate-limit-reset header をチェック

├─ < 15分後 → ケース A (レート制限) → 待つ + backoff

└─ 月末 / なし → ケース B (月間 cap) → twitterapi.io 切替

HTTP 403 受け取った

↓ レスポンス body の error code をチェック

├─ code: 226 → アカウントレベル問題 → Day 4 解除手順

├─ scope 不足 → API key 再発行 + 適切な scope 付与

└─ プラン不可 → twitterapi.io 切替 or Enterprise 契約

```

重要な誤解:HTTP 226 は HTTP status code ではない。 RFC 3229 で定義される HTTP 226 "IM Used" は delta encoding 用で、spam/bot detection とは無関係。X API の 226 は レスポンス body 内の error code(HTTP wrapper は 403 Forbidden)です。dev community でこの混乱が頻発するので、レスポンス確認時は HTTP status と body code を別々に ログするのが推奨です。

HTTP 429 と 403 の判別フローチャート — 429 は x-rate-limit-reset header で 15分以内なら待ち、月末なら twitterapi.io 切替。403 はレスポンス body の error code で分岐
API エラー判別フロー — HTTP status と body code を別々にチェックすることで正しい対処方針が分かります。
04 — Section

X API 制限を回避する 3 つのアプローチ

ここから実装に直結する話。3 層構造を理解した上で、それぞれに対する対策は異なります。

アプローチ 1: 24 時間重複排除を活用した cache 設計

公式仕様で 同じ post を 1 日内に複数 query しても 1 リクエスト分のみ計上 されます(docs.x.com post-cap 明記)。自分のアプリで「同じ post の閲覧 / 共有 / 分析」が複数回発生する場合、1 日 cache を入れるだけで実質コストとレート両方を N 倍削減できます。

実装例: Redis に 24 時間 TTL で post id をキーにキャッシュ。同じ post を再 query 時はキャッシュから返す。これだけで:(a) 月キャップ 2M Post reads に到達しにくくなる(同 post 複数回でカウント 1)、(b) 15 分レート制限にもヒットしにくくなる(キャッシュヒットでネットワーク request 自体が減る)。レート制限ケース A の根本対策にも有効です。

アプローチ 2: Owned Reads $0.001 を活用 + 自社アカウントを使う

「自分の dev app と自分のアカウントの data」を読む場合は Owned Reads $0.001/リクエスト (一般 read $0.005 の 1/5)。ただし月 2M Post reads cap は Owned Reads でも適用される ので、cap 回避にはならない点に注意 — Owned Reads はあくまでコスト削減策。

自社運営の bot アカウントから自社アカウント分析を行うユースケースは、この単価を必ず活用すべき(設定によっては年間で数十万円の差)。実装は API call 時に user_id を自社認証ユーザーと一致させるだけ — 内部で自動的に Owned Reads 単価が適用されます。

アプローチ 3: 第三者 API (twitterapi.io) を使う

15 分レート制限なし — リクエスト集中スパイクに柔軟対応。月間ハードキャップなし — 公式 2M cap を超える月 5M / 月 10M も対応可能。1 リクエスト $0.00015 — 公式一般 read ($0.005) の 約 1/33 のコスト。X 公式 API と互換性のある endpoint 設計のため、移行コストも低い(Python なら 2 行の置換)。

選択ガイド:

直面している制限おすすめ対策
15 分レート制限頻発アプローチ 1 (cache 設計) + アプローチ 3 (twitterapi.io 切替)
月 2M cap が見えてきたアプローチ 3 (twitterapi.io 必須)
Following / Likes が必要アプローチ 3 (twitterapi.io 一択、公式 self-serve から除外済み)
自社運営 bot の自己読みアプローチ 2 (Owned Reads + cache)
中規模 SaaS で長期持続アプローチ 3 (97% コスト削減 + cap なし)

proxy 旋転は効果がない理由(JA 古い記事の誤解):

JA SERP の多くの記事は「レジデンシャルプロキシで IP を変えれば突破できる」と主張しますが、これは 2026 年現在通用しません。X は behavioral fingerprinting を採用しており、ブラウザ / クライアント / API 行動パターンも見ている ため、IP だけ変えても TLS フィンガープリント、header の順序、cookie 履歴、リクエストタイミング が同じであれば検出されます。根本対策は API 側の使い方を見直すか、構造的に第三者 API に切り替えるかの 2 択(これは Day 4 ページでも詳述)。

3 アプローチの選択ガイド — 直面している制限の種類別に推奨対策をマトリックス化
制限の種類別の対策マップ — どのアプローチが効くかは制限のタイプで決まります。
05 — Section

twitterapi.io で X API の制限から構造的に解放される

twitterapi.io は X 公式 API と互換性を持ちつつ、15 分レート制限・月間キャップ・self-serve 除外の 3 つの制限から開放された第三者 API です。"取得制限の構造" 自体を取り去る という意味で、技術的・経営的に長期持続する選択肢。

主な特徴:

- 15 分レート制限なし — リクエストを 1 秒で 10,000 投げても問題なし

- 月 2M Post reads cap なし — 月 5M、月 10M も対応可能

- Following / Likes / Quote-Posts も取得可能 — 公式 self-serve から除外された endpoint も使える

- 月額固定費ゼロ — 実使用分のみ

- 1 リクエスト $0.00015 — 公式一般 read の 約 1/33(約 ¥0.024)

- X 公式 API と同じ endpoint 設計 — 移行コスト低

- 日本のクレジットカード・請求書対応、消費税対応の領収書発行

月別コスト + 制限の対比表:

使用量 (月)X 公式 (pay-per-use)twitterapi.io削減率
月 100,000 reads$500 (¥79,565)$15 (¥2,387)97%
月 500,000 reads$2,500 (¥397,825)$75 (¥11,935)97%
月 2,000,000 reads (cap 上限)$10,000 (¥1,591,300)$300 (¥47,739)97%
月 5,000,000 reads取得不可 ✗$750 (¥119,348)

移行は 2 行の置換: 認証 header を Bearer Token から X-API-Key に、endpoint base URL を api.x.com/2/ から api.twitterapi.io/twitter/ に。それだけで /twitter/user/info/twitter/user/last_tweets/twitter/tweet/advanced_search 等の互換 endpoint が使えます。

(CTA: [twitterapi.io 料金詳細はこちら →](/ja/blog/x-api-ryokin) + [アカウント作成 (無料 + $10 voucher 同等) →](/sign-up) + [X API 互換 endpoint ドキュメント →](https://docs.twitterapi.io))

公式 X API vs twitterapi.io の制限対比 — 15分レート制限・月間 cap・self-serve 除外 endpoint の有無を 4 行カード比較
公式 API vs twitterapi.io の制限対比 — 月 500,000 reads 時で $2,500 → $75、97% 削減 + 全制限解除。
06 — Section

実装例: Python migration コード

公式 X API から twitterapi.io に切り替える最小限のコード例。/2/users/by/username/:username/twitter/user/info に置換する形で、認証 header と base URL の 2 か所だけ変えれば動きます。レート制限 + 月間 cap から解放される最小投資の移行パスです。

python
import os
import time
import requests

API_KEY = os.environ["TWITTERAPI_IO_KEY"]


# === Helper: rate-limit-aware GET (公式 X API 用) ===
def get_official(url, headers, max_retries=5):
    for attempt in range(max_retries):
        r = requests.get(url, headers=headers, timeout=30)
        if r.status_code == 429:
            # 公式 X API のレート制限超過。x-rate-limit-reset で待ち時間を判定
            reset = int(r.headers.get("x-rate-limit-reset", "0"))
            wait = max(reset - int(time.time()), 30)
            if wait > 60 * 60:  # 1時間以上待つ → 月間 cap の可能性
                raise RuntimeError(
                    "X API 月間 cap 到達の可能性 — twitterapi.io 移行を検討してください"
                )
            print(f"  429 — {wait}秒待ち (15分レート制限)")
            time.sleep(wait)
            continue
        r.raise_for_status()
        return r.json()
    raise RuntimeError("max retries exceeded")


# === 移行前 (公式 X API): 15分レート制限 + 月間 2M cap に毎月ヒット ===
# x_headers = {"Authorization": f"Bearer {X_BEARER_TOKEN}"}
# user = get_official(
#     "https://api.x.com/2/users/by/username/elonmusk",
#     x_headers,
# )


# === 移行後 (twitterapi.io): 15分レート制限なし + 月間 cap なし ===
headers = {"X-API-Key": API_KEY}

r = requests.get(
    "https://api.twitterapi.io/twitter/user/info",
    params={"userName": "elonmusk"},
    headers=headers,
    timeout=30,
)
r.raise_for_status()
user = r.json()
print(f"@{user['data']['userName']}: followers {user['data']['followers']:,}")


# === 大量データ取得もレート制限気にせず一気に ===
# `/twitter/user/last_tweets` は cursor-based pagination、ループで全件取得可能
results = []
cursor = None
while True:
    params = {"userName": "nasa"}
    if cursor:
        params["cursor"] = cursor
    r = requests.get(
        "https://api.twitterapi.io/twitter/user/last_tweets",
        params=params,
        headers=headers,
        timeout=30,
    )
    r.raise_for_status()
    body = r.json()
    results.extend(body["data"]["tweets"])
    if not body.get("has_next_page"):
        break
    cursor = body.get("next_cursor")

print(f"取得完了: {len(results):,} tweets — 公式 API なら月キャップ計算が必要、twitterapi.io ならそのまま")
07よくある質問

よくある質問

TwitterのAPI取得の制限は?

X API の取得 (read) 制限は per-endpoint per-15min 単位 で管理されています。例えば /2/tweets read は app 認証で 3,500 リクエスト/15分、user 認証で 5,000 リクエスト/15分。/2/users は app 300 / user 900、/2/tweets/search/recent は app 450 / user 300。さらに pay-per-use プランには 月間 2,000,000 Post reads ハードキャップ があります。従来の月額プラン (Basic / Pro / Enterprise) は 2026年4月16日以降 legacy 扱いとなり、新規ユーザーは pay-per-use がデフォルトです。

なぜTwitterのAPIが制限されたのか?

主な理由は3つ:(1) スパム / bot による大規模 API 利用の抑制(2) X 社のデータ販売を持続可能な収益源とする(3) AI 学習データへの大量無料アクセス制限。Elon Musk による買収以降、X は API データを商業価値の高いアセットとして位置づけ、料金プランの段階的見直しを進めてきました。Following / Likes / Quote-Posts も 2026年4月16日に self-serve プランから除外され、Enterprise 契約専用になりました。

API制限はいつ解除されますか?

15分レート制限15分待てば自動でリセット されます。HTTP レスポンスの x-rate-limit-reset ヘッダー (Unix timestamp) でリセット時刻を確認できます。月間 2M Post reads キャップ翌月1日にリセット。短期解決には exponential backoff (30秒 → 1分 → 5分 → 15分)、長期解決には pay-per-use の cache 設計見直しか、第三者 API (twitterapi.io) への切替が現実的です。

「API呼び出しの回数制限を超えました」と表示されるのはなぜ?

docs.x.com の最新仕様では HTTP 429 が「レート制限超過 OR 月間 cap 到達」を統一してカバー しています。x-rate-limit-reset ヘッダーをチェックして、15分以内なら 15分レート制限(待てば解決)、月末までなら月間 2M Post reads キャップ到達(月末まで完全停止)です。後者の場合、公式 API では翌月まで取得不可能なので、即時復帰したいなら twitterapi.io のような第三者 API への切替が現実的です。なお HTTP 403 はレート制限ではなく権限不足エラーで、API key scope の確認、または body 内の error code(226 = アカウントレベル問題)を確認します。

X API の制限を回避する一番安い方法は?

第三者 API の twitterapi.io が最もコスパ良好 です。1リクエスト $0.00015 で、公式一般 read ($0.005) の 約 1/33 のコスト。月額固定費もなく、15分レート制限も月 2M Post reads キャップもありません。Following / Likes / Quote-Posts なども取得できる(公式 self-serve からは除外)。X 公式 API と互換性のある endpoint 設計のため、移行コストも低めです。個人開発から月500万リクエストの大規模 SaaS まで広くカバーできます。

VPN や residential proxy で X API の制限を回避できますか?

現在の X は IP だけで判断していません。2023年以前は IP が重要 signal でしたが、買収以降は behavioral fingerprinting(TLS フィンガープリント・header の順序・cookie 履歴・タイミング・アクセスパターン)に大きくシフトしています。VPN や proxy で IP だけ変えても、他の 6 次元の signal が同じであれば検出されます。古い JA 記事の "proxy 旋転で突破" という解説は 2026 年現在通用しないので、根本対策は API 側の使い方を見直すか、構造的に第三者 API に切り替えるかの 2 択 です。

X API の月間 cap は何が原因で、回避する方法は?

月間 2,000,000 Post reads cap は X の pay-per-use プランのハードキャップで、X 社が「無制限読み取り」を制度的に抑止するために設けたもの。回避方法は基本的に2つ:(1) 24時間重複排除を活用する cache 設計(同 post を 1 日内に複数 query しても 1 リクエストで計上 → 実質キャップ消費を N 倍削減)、(2) twitterapi.io への切替(月間 cap なし、月 5M / 10M も対応可能)。中規模 SaaS で月 100K-500K reads クラスなら (1) を試し、月 1M+ なら (2) が現実的です。

Following / Likes / Quote-Posts が取得できないのはなぜ?

2026 年 4 月 16 日に、X API の self-serve プランから Following / Likes / Quote-Posts の取得 endpoint が除外 されました(docs.x.com changelog 明記)。これらの endpoint は現在 Enterprise 契約専用 で、contact-sales 経由で月数千ドル〜の契約をしないと公式では使えません。twitterapi.io 経由なら通常の単価($0.005-$0.010 級ではなく $0.00015)で取得可能 なので、これらの endpoint が必要なら twitterapi.io が事実上の選択肢になります。

HTTP 226 は何のエラーですか?

HTTP 226 は X API の HTTP status code ではありません。RFC 3229 で定義される HTTP 226 "IM Used" は delta encoding 用で、spam/bot detection とは無関係。X API における 226 は レスポンス body 内の error code({"errors":[{"code":226,"message":"This request looks like it might be automated..."}]})で、HTTP wrapper は 403 Forbidden です。アカウントレベルで "自動化された行動" と判断された場合に返ります。解除手順は別ページ /ja/blog/x-spam-kaijo で扱います。

app 認証と user 認証で制限が違うのはなぜ?

X API は 2 種類の認証方式を提供しており、レート制限の挙動が異なります。app 認証 (Bearer Token) はアプリ全体の上限を共有する形で、/2/users/:id/tweets のように大量取得向けに 10,000/15min と高めに設定。user 認証 (OAuth tokens) はユーザー単位の上限で、/2/tweets read を 5,000/15min と app より高くしますが、ユーザー数が多い場合は user 認証の方が総量で有利。設計指針:大量取得 = app 認証、ユーザー操作 = user 認証 が基本です。

08関連記事

続けて読む

関連シリーズ
実装に進む

読むのをやめて、作り始めよう。

無料の試用クレジットで本物のデータを使った E2E テストが完結します。Google サインインのみ、カード不要、申請待ちなし。

API キーを取得
    X (Twitter) API 制限の完全ガイド 最新版 — レート制限・月間 2M cap・回避方法 | TwitterAPI.io