はじめに
2026年2月7日、X(旧Twitter)の開発者向けAPIが Pay-Per-Use(従量課金) モデルに正式移行しました。
従来は月額200ドルのBasicプランか月額5,000ドルのProプランしか選択肢がなく、個人開発者にはハードルが高かったのですが、今回の変更で 最低$5のチャージから使えるプリペイド方式 になりました。
「じゃあ、前から気になっていたブックマーク・いいねのAPI取得、安くできるようになったのでは?」と思い、実際に試してみました。
この記事でやること:
- Developer Console でのアプリ作成・設定
- OAuth 2.0 PKCE 認証でアクセストークンを取得
- ブックマーク一覧・いいね一覧を API で取得
コード全体は GitHub で公開しています:
https://github.com/kirozero119/x-api-bookmarks
コマンド数行でテストができるので、ぜひご活用ください。
対象読者
- X API を触ってみたいけど、料金が気になって手を出せなかった人
- 従量課金になったと聞いて試してみたい人
- ブックマーク・いいねをプログラムで管理したい人
API やOAuth の予備知識がなくても進められるように書いています。
背景:X API 従量課金の概要
料金モデル
| 項目 | 内容 |
|---|---|
| 課金方式 | プリペイド(前払い) — クレジットを購入し、APIリクエストごとに消費 |
| 最低チャージ | $5(約750円) |
| ポスト読み取り (GET) | $0.005/件 |
| ポスト作成 (POST) | $0.01/件 |
| 重複排除 | 同じリソースを同日内に再取得しても課金は1回 |
たとえば自分のブックマーク100件を取得すると 100 × $0.005 = $0.50。
$5チャージすれば1,000件取得できる計算です。
従来プランと比較するとかなり安いですが、やっぱりちょっと高いですね。。。笑
従来プランとの比較
| 旧Free | 旧Basic | Pay-Per-Use | |
|---|---|---|---|
| 月額費用 | $0 | $200 | 使った分だけ |
| ブックマーク取得 | ❌ | ✅ | ✅ |
| いいね取得 | ❌ | ✅ | ✅ |
| 参入コスト | — | 約3万円/月 | 約750円($5) |
Step 0:Developer Console のセットアップ
0-1. 開発者アカウントの申請
https://console.x.com にアクセスします。
初めてアクセスする場合、以下のフォームが表示されます:
-
アカウント名: 任意(例:
MyBookmarkApp) - ユースケースの説明: APIの利用目的を英語で250文字以上記述
ユースケースの例:
I am a software developer building a personal knowledge management tool
that integrates with the X platform. My use cases are as follows:
1. Bookmark and Like retrieval: I plan to use the GET /2/users/:id/bookmarks
and GET /2/users/:id/liked_tweets endpoints to retrieve posts that I have
previously saved or liked.
2. Content categorization: The retrieved posts will be processed through
an AI-based classification system to automatically label and organize
them by topic. This is purely for my own personal use.
3. Personal database storage: Labeled posts will be stored in a local
database for efficient search and retrieval. No data will be shared
publicly or with third parties.
I will not resell any data obtained through the X API. All usage is
strictly personal and low-volume.
3つのチェックボックスにすべてチェックを入れて送信します。
0-2. アプリの認証設定
アプリが作成されたら、認証設定を行います:
| 設定項目 | 値 |
|---|---|
| アプリの権限 | 読む |
| アプリの種類 | ウェブアプリ、自動化アプリまたはボット(機密クライアント) |
| コールバックURI | http://localhost:3000/callback |
| ウェブサイトURL | https://example.com |
コールバックURIは http(https ではない)です。ローカル開発用なのでHTTPで問題ありません。
0-3. Client ID と Client Secret をメモ
アプリのキーページで OAuth 2.0 セクションの以下をコピー:
- Client ID
- Client Secret
API Key / API Key Secret とは別物です。
「OAuth 2.0」と書かれたセクションから取得してください。
0-4. クレジットの購入
左メニューの「Billing」から最低 $5 を購入します。
これをしないと 402 CreditsDepleted エラーになります。 新規アカウントは従量課金への登録が自動で行われ、無料枠はありません。
Step 1:プロジェクトの作成
uv でプロジェクトを作成します。
# リポジトリをクローンする場合
git clone https://github.com/YOUR_USERNAME/x-api-bookmarks.git
cd x-api-bookmarks
uv sync
手動で作る場合:
uv init x-api-bookmarks --python 3.12
cd x-api-bookmarks
uv add requests python-dotenv
mkdir src
Step 2:環境変数の設定
cp .env.example .env
.env を編集して、Step 0 でメモした値を入力:
X_CLIENT_ID=あなたのClient ID
X_CLIENT_SECRET=あなたのClient Secret
Step 3:テストスクリプトの実装
src/x_api_test.py の全体像を説明します。
3-1. OAuth 2.0 PKCE 認証フロー
ブックマークやいいねはユーザーのプライベートデータなので、Bearer Tokenだけでは取得できません。ユーザー本人の同意を得る OAuth 2.0 Authorization Code Flow with PKCE が必要です。
[ユーザー] → ブラウザでXにログイン → 「アプリを認証」クリック
↓
[X] → 認証コードをコールバックURLに返す
↓
[スクリプト] → ローカルサーバー(localhost:3000)で認証コードを受け取る
↓
[スクリプト] → 認証コードをアクセストークンに交換
↓
[スクリプト] → アクセストークンでAPI呼び出し
PKCE(Proof Key for Code Exchange)は、認証コードの横取りを防ぐ仕組みです。code_verifier と code_challenge のペアを使います:
import hashlib, base64, secrets
code_verifier = secrets.token_urlsafe(64)[:128]
code_challenge = base64.urlsafe_b64encode(
hashlib.sha256(code_verifier.encode()).digest()
).rstrip(b"=").decode()
3-2. ローカルサーバーでコールバックを受け取る
Python の http.server でコールバックを受け取ります。
from http.server import HTTPServer, BaseHTTPRequestHandler
class CallbackHandler(BaseHTTPRequestHandler):
def do_GET(self):
# URLのクエリパラメータから認証コードを取得
query = urllib.parse.urlparse(self.path).query
params = urllib.parse.parse_qs(query)
auth_code = params["code"][0]
# ...
server = HTTPServer(("localhost", 3000), CallbackHandler)
server.handle_request() # 1リクエストだけ受け取って終了
3-3. アクセストークンの取得
認証コードを受け取ったら、X の token エンドポイントに POST して、アクセストークンに交換します:
resp = requests.post(
"https://api.x.com/2/oauth2/token",
data={
"grant_type": "authorization_code",
"code": auth_code,
"redirect_uri": "http://localhost:3000/callback",
"code_verifier": code_verifier,
},
auth=(CLIENT_ID, CLIENT_SECRET),
)
access_token = resp.json()["access_token"]
3-4. ブックマーク・いいねの取得
あとはアクセストークンを使ってGETリクエストを送るだけです:
# ブックマーク取得
resp = requests.get(
f"https://api.x.com/2/users/{user_id}/bookmarks",
params={
"max_results": 5,
"tweet.fields": "created_at,author_id,text",
},
headers={"Authorization": f"Bearer {access_token}"},
)
# いいね取得
resp = requests.get(
f"https://api.x.com/2/users/{user_id}/liked_tweets",
params={
"max_results": 5,
"tweet.fields": "created_at,author_id,text",
},
headers={"Authorization": f"Bearer {access_token}"},
)
Step 4:実行と結果
uv run python src/x_api_test.py
実行するとブラウザが開きます。Xにログインして「アプリを認証」をクリック。
実行結果
🔍 X API ブックマーク・いいね取得テスト
============================================================
Step 1: ブラウザで X の認証ページを開きます
============================================================
✅ 認証コード取得成功!
============================================================
Step 2: アクセストークンを取得します
============================================================
✅ アクセストークン取得成功!
スコープ: offline.access bookmark.read like.read users.read tweet.read
有効期限: 7200 秒
リフレッシュトークン: あり
============================================================
Step 3: 自分のユーザー情報を取得 (GET /2/users/me)
============================================================
ステータスコード: 200
✅ ユーザー名: @kirozero72
============================================================
Step 4: ブックマーク取得テスト
============================================================
ステータスコード: 200
✅ ブックマーク取得成功! (5 件)
[1] ID: 2022470515001319671
AIエージェントがWebサイトと構造化された方法でやり取りするための標準規格...
[2] ID: 2022447231006306615
これおもしろい "Hono on Node.js 最速レスポンス選手権"...
============================================================
Step 5: いいね取得テスト
============================================================
ステータスコード: 200
✅ いいね取得成功! (5 件)
[1] ID: 2022297749593682130
ClaudeのSkillsが教えてくれたことは...
ブックマーク・いいねともに問題なく取得できました。
レートリミットと課金
実行結果から確認できたレートリミット:
| エンドポイント | レートリミット |
|---|---|
GET /2/users/me |
75回/15分 |
GET /2/users/:id/bookmarks |
180回/15分 |
GET /2/users/:id/liked_tweets |
75回/15分 |
注意点
- 同日内の同一リソースへの重複リクエストは課金されない(デデュプリケーション)
- ブックマークは最大 800件 まで取得可能(ページネーション対応)
- アクセストークンの有効期限は 2時間。リフレッシュトークンで再取得可能
Pay-Per-Useプランの注意事項
2026年2月の正式ローンチ直後ということもあり、開発者フォーラムではいくつかの問題が報告されています:
- ブックマーク・いいねAPIが429エラーを返し続ける という報告あり(筆者環境では再現せず)
- Developer Console(console.x.com)のUI不具合 — 支払い設定の失敗、認証設定の404エラーなど
-
旧プランからの移行時に
client-not-enrolledエラーが発生するケース
問題が起きた場合は、X Developer Community Forumを確認してみてください。
まとめ
- X APIの従量課金モデルにより、$5(約750円)からブックマーク・いいね取得が可能になった
- OAuth 2.0 PKCE認証が必要だが、Pythonのローカルサーバーで簡潔に実装できる
- 2026年2月14日時点で、ブックマーク・いいね取得ともに正常動作を確認
コードは GitHub で公開しています。
https://github.com/kirozero119/x-api-bookmarks
