2.

X (Twitter) API 完全ガイド — v2 移行と有料化対応

編集
この記事の要点
  • 2023 年 2 月に Twitter API が原則有料化、X API v2 が現行。v1.1 は段階的に廃止
  • 料金: Free (read 1 ツイート/月相当) / Basic $100/月 / Pro $5,000/月 / Enterprise (個別契約)
  • 無料 tier では月間ツイート投稿 500 件、検索ほぼ不可、書き込みのみ可能
  • 認証は OAuth 2.0 PKCE または Bearer Token、ユーザー操作系は OAuth 1.0a User Context
  • エンドポイント: /2/tweets / /2/users / /2/users/:id/tweets / /2/spaces
  • クライアント: Python は Tweepy、Node は twitter-api-v2。代替: Mastodon API / Bluesky AT Protocol

X (Twitter) API の概要

2023 年 4 月、Elon Musk 体制下で従来の無料 API がほぼ廃止され、X API v2 という新体系に統一されました。スクレイピング対策強化と収益化が目的で、開発者コミュニティに大きな影響を与えた変更です。

本記事執筆時点 (2026 年) で v1.1 は段階的に停止され、新規開発はすべて v2 で行います。

料金プラン (2026 年時点)

プラン月額投稿上限/月読み取り検索用途
Free$0500 (書き込みのみ)自分のツイートのみ×ボット投稿のみ
Basic$1003,000 (User) / 50,000 (App)月 10,000 件過去 7 日個人開発・小規模
Pro$5,000300,000月 1,000,000 件フルアーカイブ商用サービス
Enterprise応相談制限大制限大フルアーカイブ + Firehose研究機関・大企業

無料 tier が極めて限定的なため、個人開発でも実質 Basic $100/月が最低ラインになっています。

認証方式

v2 API は 3 種類の認証をユースケース別に使い分けます:

方式用途取得物
OAuth 2.0 Bearer TokenApp-only 読み取り (検索、公開タイムライン)Bearer Token
OAuth 2.0 PKCEユーザー認可、ツイート投稿、DMAccess / Refresh Token
OAuth 1.0a User Context従来互換、メディアアップロードAPI Key + Secret + Access Token + Secret

Tweepy (Python) の使い方

# pip install tweepy
import tweepy

# Bearer Token (App-only, 読み取り専用)
client = tweepy.Client(bearer_token="YOUR_BEARER_TOKEN")

# 自分の最新 5 件取得
me = client.get_me()
tweets = client.get_users_tweets(id=me.data.id, max_results=5)
for t in tweets.data:
    print(t.id, t.text)

# 投稿には OAuth 1.0a または OAuth 2.0 User Context が必要
client = tweepy.Client(
    consumer_key="API_KEY",
    consumer_secret="API_SECRET",
    access_token="ACCESS_TOKEN",
    access_token_secret="ACCESS_SECRET",
)
client.create_tweet(text="Hello from API v2!")

twitter-api-v2 (Node.js)

// npm install twitter-api-v2
import { TwitterApi } from 'twitter-api-v2';

const client = new TwitterApi({
  appKey: process.env.X_API_KEY,
  appSecret: process.env.X_API_SECRET,
  accessToken: process.env.X_ACCESS_TOKEN,
  accessSecret: process.env.X_ACCESS_SECRET,
});

// ツイート投稿
const tweet = await client.v2.tweet('Hello X API v2!');
console.log(tweet.data.id);

// 検索 (Basic 以上)
const search = await client.v2.search('from:elonmusk -is:retweet', {
  max_results: 10,
  'tweet.fields': ['created_at', 'public_metrics'],
});
for await (const t of search) {
  console.log(t.text, t.public_metrics);
}

主要エンドポイント (v2)

エンドポイント用途必要プラン
POST /2/tweetsツイート投稿Free 以上
DELETE /2/tweets/:idツイート削除Free 以上
GET /2/tweets/search/recent直近 7 日検索Basic 以上
GET /2/tweets/search/all全期間検索Pro 以上
GET /2/users/:idユーザー情報Basic 以上
GET /2/users/:id/tweetsユーザータイムラインBasic 以上
GET /2/spacesSpaces 情報Basic 以上
GET /2/tweets/:id/liking_usersいいねしたユーザーPro 以上

レート制限の確認

レスポンスヘッダで残量を確認できます:

x-rate-limit-limit: 75
x-rate-limit-remaining: 73
x-rate-limit-reset: 1715000000

# x-rate-limit-reset は Unix 秒。
# 0 になったら 429 Too Many Requests が返る。
import tweepy, time

def safe_call(fn, *args, **kwargs):
    while True:
        try:
            return fn(*args, **kwargs)
        except tweepy.TooManyRequests as e:
            reset = int(e.response.headers.get('x-rate-limit-reset', time.time() + 60))
            wait = max(reset - int(time.time()), 5)
            print(f"Rate limit, sleeping {wait}s")
            time.sleep(wait)

v1.1 から v2 への移行

v1.1v2
POST statuses/update.jsonPOST /2/tweets
GET statuses/user_timeline.jsonGET /2/users/:id/tweets
GET search/tweets.jsonGET /2/tweets/search/recent
GET friends/list.jsonGET /2/users/:id/following
レスポンスがフラットdata + includes + meta 構造

代替プラットフォーム

X API の有料化を受け、開発者の一部は分散型プロトコルへ移行しています:

  • Mastodon API — 各インスタンスごとに OAuth、REST/Streaming、無料。statuses エンドポイントが Twitter v1.1 に近い
  • Bluesky AT Protocol — DID ベースの分散 ID、com.atproto.* / app.bsky.* 名前空間、無料、レート制限緩め
  • Threads API (Meta) — 2024 年から提供開始、Instagram と連携、無料枠あり
  • Misskey / Nostr — フォロワー数は少ないが完全無料

規約変更の経緯

  • 2023 年 2 月: 無料 API 廃止予告
  • 2023 年 3 月: v2 新料金体系発表 ($100 / $5,000)
  • 2023 年 4 月: 旧無料 tier 停止
  • 2023 年 6 月: 読み取り制限 (デイリーリミット) 導入
  • 2024 年: Free tier に「書き込みのみ 500/月」追加
  • 2024 年以降: 学術研究者向け無料アクセスは原則廃止 (個別申請)

FAQ

Q: 個人の bot を運用したい。最低いくらかかる?
A: 投稿のみで月 500 件以内なら Free で可能。タイムライン取得が必要なら Basic $100/月。

Q: v1.1 で動いていたコードが急に動かなくなった
A: v1.1 は段階的に shutdown 中。v2 に書き直すか、互換ラッパー (Tweepy 4.x など) を使ってください。

Q: ローカル開発で課金を抑えたい
A: Free で開発し、本番だけ Basic 契約する運用が一般的。プロジェクト単位で API Key を分けます。

Q: Mastodon や Bluesky は本当に Twitter 代替になる?
A: ユーザー数は 1/10 以下ですが、API は緩く、開発体験は良好です。クロスポスト用ライブラリ (mastodon.py, atproto) が充実。

編集
Post Share
子ページ
  1. APIにアプリケーションを登録する
  2. ツイートできないにもかかわらずエラー内容が出力されない場合
  3. エラー一覧
同階層のページ
  1. YouTube Data API (v3)
  2. Twitter API
  3. Facebook API
  4. Google Trends
  5. Google Custom Search API
  6. App Store Connect API
  7. Revit API

最近更新/作成されたページ