当社独自のアクセス統計は常に有効です。Google Analyticsは、公開ページ(ログイン後のワークスペースは対象外)の利用状況を把握するためのもので、許可をいただいた場合のみ有効になります。詳しくは プライバシーポリシーをご覧ください。

X (Twitter)コメントAPI

POST

APIの稼働状況

24時間の稼働状況
正常
24時間の平均応答時間
—
  • 良好/正常
  • 利用可能
  • 制限あり
  • ほぼ停止
正常

X(Twitter)の投稿に付いた返信を収集します。各返信には本文、投稿者、投稿者のフォロワー数、その返信自体のエンゲージメント数が含まれます。元の投稿の数値IDをidに指定してください。会話全体が取得できるとは限りません。

X (Twitter) Commentsは、X投稿の数値idを指定して、その投稿に付いた返信を読み取ります。各行が1件の返信で、全文、リンク、いいね数、リポスト数、返信数、表示回数、投稿日時、投稿者のハンドル、表示名、プロフィールリンク、フォロワー数が含まれます。ブランド、サポート、リサーチの各チームが、投稿への反応を把握するために利用しています。たとえば、発表への反応、ブランドの投稿に寄せられた顧客の不満、公に発表された声明をめぐる会話のトーンなどです。

送信するidは元の投稿を示し、返される各行のidは返信を示します。返信自体のreply_countを見れば、その返信から派生した会話が生まれたかどうかがわかり、author_follower_countからは返信者の発言がどこまで届くかがわかります。元の投稿の本文や各種数値を読み取るには、同じidでX (Twitter) Post details機能を呼び出してください。

料金は1,000リクエストあたり$0.56(1回あたり$0.000556)です。失敗した呼び出しと空の結果には課金されません。 同期処理です。時間のかかるジョブでは、ボディに"mode": "async"を追加し、job_idを取得してポーリングしてください。

AIプロンプト

EveryInfraのX (Twitter) コメントエンドポイント(twitter/comments)を使ったデータ収集スクリプトの作成を手伝ってください。

エンドポイントの仕組み:
- リクエスト:ヘッダーにAuthorization: Bearer <API key>を指定して、https://api.everyinfra.com/api/v1/socialにPOSTします。APIキーは環境変数EVERYINFRA_API_KEYから読み込み、ハードコードしないでください。
- リクエストボディでplatformにtwitter、actionにcommentsを指定し、パラメータはparamsの中に入れます。
- 必須パラメータ:
  - id: postまたはcommentsで使用する数値の投稿IDで、x.com/username/status/に続く数字に当たります。JavaScriptで大きな整数の精度が失われないよう、文字列として保持することをおすすめします。idに完全なURLは指定しないでください。
- 任意パラメータ:
  - tweet_id: idの互換用入力です。idより優先度が低く、公開仕様上の必須のidフィールドの代わりにはなりません。
  - limit: この呼び出しで返す最大行数で、1〜50の整数で指定します。省略するとデフォルト値が適用されます。また、返される行数がこれより少なくなる場合があります。最大値を超える値を指定すると、課金前に422が返されます。(デフォルト:20)
- レコードのリストを返します。各レコードの主なフィールド: id、url、text、like_count、retweet_count、reply_count、view_count、posted_at、author_username、author_name、author_url、author_follower_count。フィールドは全部で37個です。一覧はhttps://api.everyinfra.com/api/v1/social/catalog?platform=twitterを参照してください。.
- リクエストボディの例:
{
  "platform": "twitter",
  "action": "comments",
  "params": {
    "id": "2103610284464316469"
  }
}
- 料金:1,000リクエストあたり$0.56。失敗時および結果が空の場合は課金されません。
- 対象が数十〜数百件ある場合は、ボディに"mode": "async"を追加します。すぐにjob_idが返されるので、GET https://api.everyinfra.com/api/v1/jobs/{job_id}をポーリングして結果を取得します。
- 422の場合は、エラーに含まれる推奨パラメータ名と指定可能な値を使ってリクエストを修正します。429または503の場合は、Retry-Afterの指定に従って待ってから再試行します。

コードを書く前に、必要な対象とその件数、必要なフィールド、希望する出力形式を私に質問してください。そのうえで、計画と概算費用を私に確認してください。

リクエストパラメータ

名前場所型必須デフォルト説明
Authorizationheaderstringはい-Bearerの後にAPIキーを続けます。APIキーはコンソールで作成してください。URLやコードリポジトリには絶対に含めないでください。
platformbodystringはいtwitterプラットフォームの識別子です。値は固定です。
actionbodystringはいcomments機能の識別子です。値は固定です。
idbody.paramsstringはい-postまたはcommentsで使用する数値の投稿IDで、x.com/username/status/に続く数字に当たります。JavaScriptで大きな整数の精度が失われないよう、文字列として保持することをおすすめします。idに完全なURLは指定しないでください。
tweet_idbody.paramsstringいいえ-idの互換用入力です。idより優先度が低く、公開仕様上の必須のidフィールドの代わりにはなりません。
limitbody.paramsinteger (1–50)いいえ20この呼び出しで返す最大行数で、1〜50の整数で指定します。省略するとデフォルト値が適用されます。また、返される行数がこれより少なくなる場合があります。最大値を超える値を指定すると、課金前に422が返されます。

コードサンプル

bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "twitter",
  "action": "comments",
  "params": {
    "id": "2103610284464316469"
  }
}'

OpenAPI定義(JSON)サンプルは環境変数EVERYINFRA_API_KEYからAPIキーを読み込みます。コピーしたコードにAPIキーが含まれることはありません。

レスポンス例

実際のレスポンス

October 24, 2026 at 18:28(UTC)に、上のコードサンプルのパラメータでこのAPIを呼び出して取得しました。resultsとcountはその呼び出しの実際のレスポンスから個人情報(名前、ハンドル、アバター、プロフィールリンク、連絡先)を削除したものです。リストは先頭の2件のみ掲載しています。id、billing、quotaは呼び出しごとに異なるため、構造のみを示しています。

json
{
  "id": "req_…",
  "platform": "twitter",
  "action": "comments",
  "results": [
    {
      "id": "•••",
      "url": "https://x.com/SmellyCatGME/status/2104363945867825157",
      "text": "@••• @••• @••• here comes #buckrogers25centurymeme to join tokenised space 😂🚀💯🔥🥳 \nca: DRgbVreehxzR9AHNGHnuQPNAQDDFvCxjZbcBJRyJfwpK",
      "like_count": 2,
      "retweet_count": 0,
      "reply_count": 1,
      "view_count": 8,
      "posted_at": "2026-09-28T00:13:56+00:00",
      "author_username": "•••",
      "author_name": "•••",
      "author_url": "https://x.com/•••",
      "author_follower_count": 71,
      "quote_count": 0,
      "bookmark_count": 0,
      "language": "et",
      "conversation_id": "2103610284464316469",
      "is_reply": true,
      "is_pinned": false,
      "reply_to_id": "2103610284464316469",
      "reply_to_user_id": "11348282",
      "reply_to": "NASA",
      "hashtags": [
        "buckrogers25centurymeme"
      ],
      "mentions": [
        "NASA",
        "BoeingSpace",
        "Space_Station"
      ],
      "author_id": "•••",
      "author_avatar_url": "https://pbs.twimg.com/•••",
      "author_is_verified": false,
      "author_following_count": 551,
      "author_post_count": 153,
      "author_media_count": 37,
      "author_created_at": "2026-09-27T17:40:39+00:00",
      "author_banner_url": "https://pbs.twimg.com/profile_banners/2104264552984530944/1790551488",
      "platform": "twitter"
    },
    {
      "id": "•••",
      "url": "https://x.com/RohanArun/status/2103977186055336023",
      "text": "@••• Hey Super, build a\n\nThis request concerns an update from NASA regarding the Starliner development and its crewed missions to the International Space Station. The update was scheduled to be broadcast live on Monday, September 28th, at 3 PM Eastern Time.\n\nThe associated metric…",
      "like_count": 3,
      "retweet_count": 0,
      "reply_count": 5,
      "view_count": 59,
      "posted_at": "2026-09-26T22:37:05+00:00",
      "author_username": "•••",
      "author_name": "•••",
      "author_url": "https://x.com/•••",
      "author_follower_count": 4258,
      "quote_count": 0,
      "bookmark_count": 0,
      "language": "en",
      "conversation_id": "2103610284464316469",
      "is_reply": true,
      "is_pinned": false,
      "reply_to_id": "2103610284464316469",
      "reply_to_user_id": "11348282",
      "reply_to": "NASA",
      "mentions": [
        "Super_Powers_AI"
      ],
      "links": [
        "https://app.getsupers.com/sites/orbital-docking-trainer-48/?card=19b18230f989e036fe86"
      ],
      "author_id": "•••",
      "author_avatar_url": "https://pbs.twimg.com/•••",
      "author_is_verified": true,
      "author_following_count": 2051,
      "author_post_count": 24863,
      "author_media_count": 900,
      "author_created_at": "2011-09-19T23:33:41+00:00",
      "author_banner_url": "https://pbs.twimg.com/profile_banners/376478209/1753025143",
      "platform": "twitter"
    }
  ],
  "count": 20,
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}

レスポンスフィールド

業務データはresultsに含まれます。この表はレコードに含まれうるフィールドの一覧です。プラットフォームに表示されない値を作り出すことはありません。

フィールド意味
idプラットフォーム上でのレコードの一意なIDです。一意性は1つのプラットフォーム内に限られ、プラットフォームが異なるとIDが重複する場合があります。
urlプラットフォーム上のレコードへのリンクです。
textHTMLを除去した本文です。省略されることなく全文が返されます(一部のプラットフォームでは一覧結果自体に抜粋しか含まれません。その場合は各プラットフォームのフィールドの注記に記載しています)。
like_countいいね数です。nullはプラットフォームまたはこの機能が公開していないことを示し、0ではありません。
retweet_countプラットフォーム上の意味のまま
reply_count返信数で、通常はコメントへの返信の数です。nullは非公開を示します。
view_count閲覧数または再生数です。nullは非公開を示し、0ではありません。
posted_at投稿日時です。ISO 8601形式のUTCで返されます(例:2026-08-07T12:34:56+00:00)。プラットフォームから非標準の文字列が返された場合はそのまま渡されるため、パース処理は堅牢に実装してください。nullはプラットフォームが公開していないことを示します。
author_username投稿者のユーザー名(@ハンドル)で、通常はURLに使用できます。
author_name投稿者の表示名です。
author_urlプラットフォーム上の投稿者プロフィールへのリンクです。
author_follower_count投稿者のフォロワー数です。nullは非公開を示します。
quote_countプラットフォーム上の意味のまま
bookmark_countプラットフォーム上の意味のまま
languageプラットフォームが判定したコンテンツの言語コードです(例:zh、en)。誤っている場合があります。
conversation_idプラットフォーム上の意味のまま
is_replyプラットフォーム上の意味のまま
is_quoteプラットフォーム上の意味のまま
is_repostプラットフォーム上の意味のまま
is_pinnedプラットフォーム上の意味のまま
reply_to_idプラットフォーム上の意味のまま
reply_to_user_idプラットフォーム上の意味のまま
reply_toプラットフォーム上の意味のまま
sourceプラットフォーム上の意味のまま
mediaプラットフォーム上の意味のまま
hashtags本文中のハッシュタグで、出現順に並びます。ない場合はフィールド自体が含まれません。
mentionsプラットフォーム上の意味のまま
linksプラットフォーム上の意味のまま
author_idプラットフォーム上での投稿者の一意なIDです。
author_avatar_urlプラットフォーム上の意味のまま
author_bioプラットフォーム上の意味のまま
author_is_verifiedプラットフォーム上の意味のまま
author_following_countプラットフォーム上の意味のまま
author_post_countプラットフォーム上の意味のまま
author_media_countプラットフォーム上の意味のまま
author_created_atプラットフォーム上の意味のまま
author_banner_urlプラットフォーム上の意味のまま
platform取得元プラットフォームの識別子で、リクエストのplatformと同じです(例:xiaohongshu、tiktok)。

FAQ

IDの代わりに投稿のリンクを渡せますか?

idには渡せません。このフィールドは数値のみを受け取ります。x.com/<handle>/status/<number>のようなリンクから数値をコピーし、桁が正確に保たれるよう文字列として送信してください。互換性のためのエイリアスとしてtweet_idも受け付けますが、idは引き続き必須で、こちらが優先されます。

どの返信から読めばよいですか?

like_countで並べ替えると、他の読者が共感した返信がわかります。author_follower_countを確認すれば、フォロワーの多いアカウントからの返信を見つけられます。reply_countが多い返信は、特定の論点をめぐってサブスレッドが生まれた箇所です。

結果が空の場合はどういう意味ですか?

行がない場合は、その投稿IDについて公開返信が返されなかったことを意味します。投稿に返信がないか、その数値が投稿のものではない可能性があります。再試行する前に、idを投稿のリンクと照らし合わせて確認してください。空の結果が返った呼び出しは課金されません。

エラーと課金

401
キーが未指定か無効です。
402
残高が不足しています。先にチャージしてください。
422
パラメータ名または値が無効です。エラーに含まれる候補を参考に修正してください。課金はされません。
429
1分あたりのリクエスト上限に達しました。Retry-Afterの指定に従って待ってから再試行してください。
503
処理を完了できませんでした。保留中の請求額は残高に戻されます。結果が不明な場合は、再試行する前に確認してください。
200(空)
データがありません。課金はされません。

エラー

公式リファレンス

対象と用語の確認にのみ使用しています。プラットフォームによるEveryInfraの承認や推奨を意味するものではありません。

  • X:元ポストのID、会話ID、返信の関係 ↗

    Xではconversation_idを使って会話の起点となった元ポストのIDを示し、階層の深い返信も同じ値を共有できます。親子関係を再構築するには親ポストの識別子が必要です。このエンドポイントはこうした関係のフィールドを公開していないため、公式の例にあるような返信ツリーは現在の出力では得られません。

    確認日:2026-09-04