Twitter(X)APIキーの取得方法
Twitter(X)のAPIキーを取得するには、Xアカウントでconsole.x.comにサインインし、開発者契約に同意してアプリを作成、キーとBearerトークンを保存したうえで、クレジットを購入します。読み取りは1投稿あたり$0.005です。
要点: コンソールはアプリの作成時に、APIキーとシークレット、Bearerトークン、OAuth認証情報を発行し、それぞれを1度しか表示しません。クレジットを購入するまで、すべてのリクエストがHTTP 402 CreditsDepleted を返します。公開されているXのデータをキー1つで読み取るなら、Sorsa APIが使えます。ツイートは1,000件あたり$0.014から、100リクエストは無料でカードも不要です。
ApiKey: YOUR_API_KEY- キー1つ、OAuth不要
- 料金
- 1,000ツイートあたり$0.014から
#公式X APIキーの取得手順をステップ別に解説
公式X APIキーは、XがAPIの認証情報をすべて発行するサイト、X Developer Console(console.x.com)で取得します。手順は6ステップです。最初の4つは、XのGetting Accessガイド(新しいタブで開きます)に載っています。ステップ5のクレジットはXの料金ページにあり、ステップ6のリクエストはクレジットがないと失敗します。
開発者アカウントの開設とアプリの作成は無料です。費用がかかるのは読み取りで、レスポンスが返す投稿1件につき$0.005、プロフィールまたはフォロワー1件につき$0.010が、事前にチャージした残高から差し引かれます。各単価はX APIの料金の解説にまとめています。
-
console.x.comにサインインします。 アプリを所有させたいXアカウントを使います。開発者専用のログインはありません。
-
開発者契約に同意します。 Xの開発者契約とポリシーを読んで同意し、何を作るのか、どのデータを読み取るのかを平易な言葉で記入します。この手順の審査期間をXは公表していません。
-
アプリを作成します。 New Appをクリックし、名前、説明、ユースケースを入力します。アプリができた時点で、コンソールが認証情報を生成します。
-
認証情報を保存します。 APIキーとシークレット、Bearerトークンをコピーします。アプリが投稿したり、ユーザーに代わって操作したりする場合は、アクセストークンとシークレット、またはOAuth 2.0のクライアントIDとシークレットもコピーします。どの値も表示されるのは1度だけです。
-
クレジットを購入します。 コンソールでカードを追加し、クレジットを購入します。テスト中は利用上限を設定しておきましょう。自動チャージは、ジョブを絶対に止められなくなってからで十分です。
-
テストリクエストを送ります。
AuthorizationヘッダーにBearerトークンを入れて、公開アカウントを検索します。id、name、usernameを含むJSONオブジェクトが返れば、キーは有効です。このルックアップはユーザー1件の読み取りの料金、$0.010がかかります。ターミナル curl "https://api.x.com/2/users/by/username/XDevelopers" \ -H "Authorization: Bearer $X_BEARER_TOKEN"console.x.comから動作する公式キーまでの6ステップ。Getting Accessガイドが触れていないのが、ステップ5のクレジット購入です。
公開されている投稿やプロフィールを読み取るだけなら、コードが送る認証情報はBearerトークンだけです。アクセストークンとOAuth 2.0のペアが必要になるのは、アプリが投稿したり、他のユーザーに代わって操作したりするときで、どれが何にあたるかは後述の認証情報の表で確認できます。
#約3分でSorsa APIキーを取得
公開されているXのデータを読み取るなら、Twitter(X)API兼スクレイピングツールであるSorsa APIが使えます。キー1つで、アプリも認証情報もクレジット残高も不要になり、ツイートは1,000件あたり$0.014からです。公式X APIの250分の1にあたります。Xアカウントは一切関与しないため、アカウントにリスクはなく、キーは無料アカウントも含め、どのプランでも毎秒20リクエストで動作します。
-
サインアップします。 GoogleまたはメールアドレスでSorsa APIにサインアップします。カードもXアカウントも審査も不要で、アカウントには有効期限のない100リクエストが付与されます。
-
キーをコピーします。 ダッシュボードの概要ページにAPIキーが表示されます。サーバーの環境変数、たとえば
SORSA_API_KEYに保存します。 -
キーを無料で確認します。
ApiKeyヘッダーにキーを入れて、GET /key-usage-info(新しいタブで開きます) を呼び出します。この呼び出しはリクエストにカウントされないので、キーの確認に費用はかかりません。ターミナル curl "https://api.sorsa.io/v3/key-usage-info" \ -H "ApiKey: YOUR_API_KEY"レスポンス200 OK { "key_requests": 100, "remaining_requests": 100, "total_requests": 0 }
remaining_requests は、キーで使える残りのリクエスト数です。有料プランでは、レスポンスに valid_until も含まれます。これは現在のリクエスト残高の有効期限で、100リクエストの無料分には期限がありません。ここから先は、Sorsa APIの全45エンドポイントが同じヘッダーを使います。GET /info(新しいタブで開きます) はプロフィールを返し、検索、タイムライン、フォロワー、100ツイート単位のバッチも同じ方法で動きます。
並べて比べると、Sorsa APIキーは必要な部品が少なく、確認も無料で、ツイートの取得は公式料金のごく一部で済みます。
| 必要なもの | Sorsa APIキー | 公式X APIキー |
|---|---|---|
| サインアップ方法 | メールまたはGoogle | Xアカウント |
| キーが発行されるまで | サインアップのみ | 開発者契約、用途の説明、アプリ |
| 保管するもの | APIキー1つ | 最大7つの値:キーとシークレット、Bearerトークン、アクセストークンとシークレット、クライアントIDとシークレット |
| 毎回のリクエストのヘッダー | ApiKey: <key> | Authorization: Bearer <token> |
| 最初の読み取りの前に | 100リクエスト無料、カード不要 | 事前チャージのクレジット、なければHTTP 402 |
| キーの動作確認 | GET /key-usage-info、無料 | 課金される読み取り(プロフィールなら$0.010など) |
| リクエストレート | 全プランで毎秒20リクエスト | エンドポイントごとに別々の15分ウィンドウ |
| 1,000ツイート | $0.014から | $5.00 |
サインアップ方法
- Sorsa APIキー
- メールまたはGoogle
- 公式X APIキー
- Xアカウント
キーが発行されるまで
- Sorsa APIキー
- サインアップのみ
- 公式X APIキー
- 開発者契約、用途の説明、アプリ
保管するもの
- Sorsa APIキー
- APIキー1つ
- 公式X APIキー
- 最大7つの値:キーとシークレット、Bearerトークン、アクセストークンとシークレット、クライアントIDとシークレット
毎回のリクエストのヘッダー
- Sorsa APIキー
ApiKey: <key>- 公式X APIキー
Authorization: Bearer <token>
最初の読み取りの前に
- Sorsa APIキー
- 100リクエスト無料、カード不要
- 公式X APIキー
- 事前チャージのクレジット、なければHTTP 402
キーの動作確認
- Sorsa APIキー
GET /key-usage-info、無料- 公式X APIキー
- 課金される読み取り(プロフィールなら$0.010など)
リクエストレート
- Sorsa APIキー
- 全プランで毎秒20リクエスト
- 公式X APIキー
- エンドポイントごとに別々の15分ウィンドウ
1,000ツイート
- Sorsa APIキー
- $0.014から
- 公式X APIキー
- $5.00
コードでは、キーを環境変数から読み込みます。最初の試行なら YOUR_API_KEY の部分に直接貼り付けても構いません。ステータスが200以外なら処理を止めましょう。JSONの message に原因が書かれています。
import os
import requests
key = os.environ.get("SORSA_API_KEY", "YOUR_API_KEY")
r = requests.get("https://api.sorsa.io/v3/key-usage-info",
headers={"ApiKey": key}, timeout=30)
if r.status_code != 200:
raise SystemExit(f"{r.status_code}: {r.json()['message']}")
print("requests left:", r.json()["remaining_requests"])
Xのコンソール自体を避けたくてこのページに来たのであれば、開発者アカウントなしでTwitter APIを使う方法のガイドで、ツイート、検索、フォロワーリストといった最初の読み取りを順に確認できます。
#Xの認証情報の種類と役割
公式X APIは4種類の認証情報を発行しますが、公開データの読み取りに必要なのはBearerトークンだけです。コンシューマーキーとシークレットとも呼ばれるAPIキーとシークレットは、アプリを識別するもので、アプリのユーザー名とパスワードのように機能します。XのAPI Key and Secretのページ(新しいタブで開きます)も、そう説明しています。そのほかの認証情報は、これらから作られるか、アプリを使う個人のためのものです。
公開投稿をそれだけで読めるのはBearerトークンだけです。投稿しないスクリプトなら、残り3行は無視して構いません。
| 認証情報 | 内容 | 用途 | 単独で公開投稿を読めるか |
|---|---|---|---|
| APIキーとシークレット(コンシューマーキーとシークレット) | アプリのID | OAuth 1.0aリクエストの署名、Bearerトークンの発行 | 読めない |
| Bearerトークン | アプリ単位のOAuth 2.0トークン | 公開データの読み取り:投稿、プロフィール、検索 | 読める |
| アクセストークンとシークレット | アプリを所有するアカウント用のOAuth 1.0aペア | そのアカウントとしての投稿・操作 | 読める(そのアカウントとして) |
| OAuth 2.0のクライアントIDとシークレット | ログインフローにおけるアプリのID | 他のユーザーにXでログインしてもらい、アプリ経由で操作させる | 読めない(ユーザートークンを生成する) |
APIキーとシークレット(コンシューマーキーとシークレット)
- 内容
- アプリのID
- 用途
- OAuth 1.0aリクエストの署名、Bearerトークンの発行
- 単独で公開投稿を読めるか
- 読めない
Bearerトークン
- 内容
- アプリ単位のOAuth 2.0トークン
- 用途
- 公開データの読み取り:投稿、プロフィール、検索
- 単独で公開投稿を読めるか
- 読める
アクセストークンとシークレット
- 内容
- アプリを所有するアカウント用のOAuth 1.0aペア
- 用途
- そのアカウントとしての投稿・操作
- 単独で公開投稿を読めるか
- 読める(そのアカウントとして)
OAuth 2.0のクライアントIDとシークレット
- 内容
- ログインフローにおけるアプリのID
- 用途
- 他のユーザーにXでログインしてもらい、アプリ経由で操作させる
- 単独で公開投稿を読めるか
- 読めない(ユーザートークンを生成する)
紛失したBearerトークンは、キーとシークレットから再発行できます。XのBearerトークンのガイド(新しいタブで開きます)では、これらをBasic認証のペアとして oauth2/token に送ります。返ってきたJSONの access_token フィールドがBearerトークンです。
curl -u "$X_API_KEY:$X_API_SECRET" \
--data "grant_type=client_credentials" \
"https://api.x.com/oauth2/token"
権限はトークンではなくアプリに紐づきます。Read権限のアプリは投稿できません。ユーザー認証の設定でRead and writeに切り替え、アクセストークンとシークレットを再生成してください。トークンは作成時の権限を保持するためです。切り替え前に作ったトークンは、最初の投稿で403が返る原因としてよくあります。
実行したい処理を選ぶと、使うべき認証情報、ヘッダー、最初のリクエストが表示されます。
コードで何をしたいですか?
公開投稿とプロフィールの読み取り
Sorsa API
- 認証情報
- APIキー1つ
- 取得場所
- サインアップ直後のダッシュボード
- ヘッダー
ApiKey: <key>- 最初のリクエスト
GET /v3/key-usage-info無料- 1,000ツイート
- $0.014から
公式X API
- 認証情報
- ベアラートークン
- 取得場所
- アプリの「Keys and tokens」タブ
- ヘッダー
Authorization: Bearer <token>- 最初のリクエスト
GET /2/users/by/username/…$0.010- 1,000ツイート
- $5.00
自分のアカウントとして投稿
公式X API
- 認証情報
- アクセストークンとシークレット(APIキーとシークレットで署名)
- 取得場所
- アプリを「Read and write」に設定した後の「Keys and tokens」
- ヘッダー
Authorization: OAuth …OAuth 1.0aの署名付き- 最初のリクエスト
POST /2/tweets- 投稿1件ごと
- $0.015
リンク付きの投稿は$0.20です。Sorsa APIは設計上読み取り専用で、投稿は一切行わないため、あなたのXアカウントは関与しません。
他の人がXでサインインできるようにする
公式X API
- 認証情報
- OAuth 2.0のクライアントIDとシークレット
- 取得場所
- アプリのユーザー認証設定(コールバックURL付き)
- ヘッダー
Authorization: Bearer <user token>ユーザーごと- 最初のリクエスト
- サインインの流れ:PKCE付き認証コードフロー
- 読み取りと投稿
- 公式料金
サインインした各ユーザーが専用のトークンを持ち、そのトークンでの読み取りや投稿はすべてあなたのクレジットに課金されます。
1つの用途に1つの認証情報:取得場所、使用するヘッダー、最初のリクエストの料金を示します。
#X-API-Key、Bearer、ApiKey:どのヘッダーを使うか
公式X APIがトークンを読み取るのは Authorization: Bearer ヘッダーだけで、Sorsa APIがキーを読み取るのは ApiKey ヘッダーだけです。どちらも X-API-Key は読み取りません。これは他の多くのAPIがキーに使うヘッダー名です。「X APIキー」と読めてしまうため混同されがちですが、Xとは無関係です。APIゲートウェイや多くのSaaSで使われており、そこにキーを入れても、Xのサーバーにはキーなしのリクエストとして届きます。
2026年11月2日に、架空のキーを使って両方のAPIに同じリクエストを送りました。下の各回答が、実際に返ってきたものです。
| 送ったもの | Sorsa APIの回答 | 公式X APIの回答 |
|---|---|---|
| キーなし | 403 missing key in request header | 401 Unauthorized |
| 正しいヘッダーに架空のキー | 401 invalid api key | 401 Unauthorized |
X-API-Key ヘッダーにキー | 403 missing key in request header | 401 Unauthorized |
Authorization: Bearer としてキー | 403 missing key in request header | 401 Unauthorized |
キーなし
- Sorsa APIの回答
- 403
missing key in request header - 公式X APIの回答
- 401
Unauthorized
正しいヘッダーに架空のキー
- Sorsa APIの回答
- 401
invalid api key - 公式X APIの回答
- 401
Unauthorized
X-API-Keyヘッダーにキー- Sorsa APIの回答
- 403
missing key in request header - 公式X APIの回答
- 401
Unauthorized
Authorization: Bearerとしてキー- Sorsa APIの回答
- 403
missing key in request header - 公式X APIの回答
- 401
Unauthorized
つまり、公式X APIの401は、トークンが間違っている、ない、または送り方が違うことを示すだけで、どれなのかは分かりません。Sorsa APIは両者を区別します。401 invalid api key は値が間違っていること、403 missing key in request header はヘッダー名が間違っていることを意味します。
#新しいキーが失敗するとき:401、402、403、429
新しい公式X APIキーが失敗する原因は4つあり、それぞれ固有のステータスコードを返します。401はトークンの誤りまたは再生成、402はクレジット残高の不足、403は権限の不足またはプロジェクトに属さないアプリ、429はレート制限ウィンドウの使い切りです。同じ番号でもSorsa APIでは意味が異なり、メッセージを見れば対処法が分かります。
| ステータス | Sorsa API | 公式X API |
|---|---|---|
| 401 | キーが間違っているか削除された(invalid api key) | トークンが間違っている、ない、または再生成された |
| 402 | 使用しない | CreditsDepleted:アカウントにクレジットがない |
| 403 | ApiKey ヘッダーにキーがないか、リクエストを使い切った | アプリに権限がないか、プロジェクトに属していない(client-not-enrolled) |
| 429 | 1秒間に20リクエストを超えた | そのエンドポイントの15分ウィンドウを使い切った |
401
- Sorsa API
- キーが間違っているか削除された(
invalid api key) - 公式X API
- トークンが間違っている、ない、または再生成された
402
- Sorsa API
- 使用しない
- 公式X API
CreditsDepleted:アカウントにクレジットがない
403
- Sorsa API
ApiKeyヘッダーにキーがないか、リクエストを使い切った- 公式X API
- アプリに権限がないか、プロジェクトに属していない(
client-not-enrolled)
429
- Sorsa API
- 1秒間に20リクエストを超えた
- 公式X API
- そのエンドポイントの15分ウィンドウを使い切った
402は、XのGetting Accessガイドがまったく触れていないエラーです。レスポンスの本文にはタイトル CreditsDepleted と、「Your enrolled account does not have any credits to fulfill this request.」という1文が含まれます。これはXの開発者フォーラム(新しいタブで開きます)で開発者が投稿しており、クレジットを購入すれば解消します。残高がわずかにマイナスになることもあり、その場合は、チャージで不足分が埋まるまでリクエストは止まったままです。
403 client-not-enrolled は、キーが「Projectに紐づけられた」開発者アプリのものでなければならないことを示します。古い単独のアプリで発生し、コンソールでアプリをプロジェクトに紐づけるか、そこで新しいアプリを作成すれば解消します。公式X APIのレート制限はエンドポイントごとに異なり、X APIのレート制限のガイドに一覧があります。Sorsa APIの429は1秒以内に解消し、失敗したリクエストには課金されないため、再試行に費用はかかりません。
#キーは秘密にし、漏えいしたら交換する
APIキーはパスワードと同じように扱います。サーバーの環境変数かシークレットマネージャーに保管し、フロントエンドのコードやGitリポジトリには置かないでください。X_BEARER_TOKEN や SORSA_API_KEY を記した .env ファイルは、最初のコミットの前に .gitignore に追加しましょう。ボットが公開リポジトリからキーを探し回っているためです。
キーが漏れると、どちらのAPIでも損失が出ます。公式X APIでは、Xのベストプラクティスのページ(新しいタブで開きます)が、盗まれたキーによって有料のアクセス枠を使い果たされたり、アプリが停止されたりする恐れがあると警告しています。Sorsa APIでは、リクエストが消費されます。
- 公式X API: アプリのKeys and tokensタブを開き、漏えいした認証情報の横にあるRegenerateをクリックします。古い値は直ちに使えなくなるため、その値を使っていたサーバーはすべて更新してください。Bearerトークンは
oauth2/invalidate_tokenで無効化して、再発行することもできます。 - Sorsa API: ダッシュボードのAPIキーのページで、新しいキーを作成し、漏えいしたキーを削除します。古いキーは直ちに停止し、401を返します。
Sorsa APIキーはサーバー側のコードにだけ置いてください。ブラウザから直接APIを呼び出すことはできず、フロントエンドのJavaScriptに入れたキーは、ページを開いた人なら誰でも読めてしまいます。
知っておきたいこと
Xは各認証情報を、生成した瞬間に1度だけ表示します。そのままパスワードマネージャーかシークレットストアに貼り付けてください。先にページを閉じてしまうと、再生成するしかなく、古い値を持つスクリプトはすべて動かなくなります。
#今すぐデータを読めるキーから始める
公式X APIキーは、最初のレスポンスを得るまでに6ステップとクレジット残高が必要で、読み取る投稿は1件ごとに$0.005かかります。公開されているXのデータの読み取りには、Sorsa APIキーが向いています。サインアップ1回、ヘッダー1つで、ツイートは1,000件あたり$0.014からです。キーをコピーして無料で確認し、支払う前に100リクエスト、最大1万ツイート分を試してください。投稿も行いたい場合は、書き込み用に小さな公式アプリを残し、読み取りはすべてSorsa APIで行います。
#よくある質問
X APIキーとBearerトークンはどこで確認できますか?
console.x.comのX Developer Consoleで、サイドメニューのAppsを開き、アプリを選んでKeys and tokensタブへ進みます。タブにはAPIキーとシークレット、Bearerトークン、アクセストークンが並び、それぞれにRegenerateボタンがあります。Xはシークレットを生成時にしか表示しないため、紛失した値は再表示できず、交換するしかありません。
Twitter APIキーは無料ですか?
公式X APIキーの作成は無料ですが、利用は無料ではありません。公式X APIに新規開発者向けの無料枠はなく、読み取りはすべて事前チャージのクレジットから引かれます。投稿は1件$0.005、プロフィールは1件$0.010です。Sorsa APIキーには、カード不要の100リクエスト、最大1万ツイート分が付いています。両者を詳しく比べたTwitter APIは無料かの記事もご覧ください。
ツイートの読み取りには、どのTwitter APIキーを使えばよいですか?
Sorsa APIキーを使ってください。取得は約3分で、アプリ、OAuth、Xアカウントのいずれも不要です。1つの ApiKey ヘッダーが全45エンドポイントで使え、どのプランも毎秒20リクエストで動作します。ツイートは1,000件あたり$0.014からと、公式X APIの$5.00の250分の1で、最初の100リクエストは無料です。Sorsa APIは2022年からXのデータを提供し、累計60億リクエスト以上を処理しています。
X APIキーの取得にはどのくらいかかりますか?
Xは審査期間を公表していません。Getting Accessガイドには、サインイン、開発者契約への同意、アプリの作成という3ステップが載っており、認証情報はアプリの作成時にコンソールが生成します。ただし、クレジットを購入するまでキーでは何も読み取れないため、支払いの手順も見込んでおきましょう。Sorsa APIキーは、サインアップから最初のレスポンスまで約3分です。
ツイートを投稿するには、どのキーが必要ですか?
投稿に必要なのはBearerトークンではなくユーザートークンです。Read and writeに設定したアプリのアクセストークンとシークレット、または書き込み権限つきのOAuth 2.0ユーザートークンを使います。Xの料金は、投稿が1件$0.015、リンクつき投稿が1件$0.20です。Sorsa APIは設計上、読み取り専用なので、投稿は行わず、Xアカウントにも触れません。ボットが読み取りと公開の両方を行う場合は、2つを組み合わせてください。
#検証方法
2026年11月2日に、docs.x.comのアクセス取得、APIキーとシークレット、Bearerトークン、開発者アプリ、料金、エラー、キーの安全管理に関するページと、402および403のセットアップエラーを扱うX開発者フォーラムのスレッドを確認しました。同じ日に、キーなし、架空のキー、誤ったヘッダーに入れたキーで両方のAPIにリクエストを送っています。返ってきたコードとメッセージはヘッダーの表のとおりです。Sorsa APIのリクエストは最新のAPIリファレンスに従っており、key-usageのレスポンスは、実際に取得した呼び出し結果ではなく、新規アカウントの値を示しています。
出典
- X API: Getting Access(新しいタブで開きます)
- X API: API Key and Secret(新しいタブで開きます)
- X API: Using and generating an app-only Bearer Token(新しいタブで開きます)
- X API: Developer apps(新しいタブで開きます)
- X API: pay-per-usage pricing and credits(新しいタブで開きます)
- X API: Response codes and errors(新しいタブで開きます)
- X API: Authentication best practices(新しいタブで開きます)
- X Developers forum: Auto-Recharge Never Triggers (402 CreditsDepleted)(新しいタブで開きます)
- Sorsa API reference (OpenAPI)