Skip to content
ScrapeField

Get the replies to an X post

Fetch the replies to one post, about 30 a page: each is a post, with its author, text, likes and replies, and referenced_tweets naming the post it answers.

13credits
GEThttps://api.scrapefield.com/v1/x/replies
Try itno key needed13 credits on a real call · 0 here
https://api.scrapefield.com/v1/x/replies?url=https%3A%2F%2Fx.com%2FFerrari%2Fstatus%2F1930652241230168143

In your code

const params = new URLSearchParams({
  "id": "1930652241230168143"
});

const res = await fetch(`https://api.scrapefield.com/v1/x/replies?${params}`, {
  headers: { Authorization: `Bearer ${process.env.SCRAPEFIELD_KEY}` },
});

const { data, meta } = await res.json();
console.log(data, meta.credits_charged);

Parameters

ParameterWhat it does
url
string · one of the post ids
The post's URL.
id
string · one of the post ids
The post's id.
cursor
string
The meta.next_cursor from the previous page. Omit for the first page.
fresh
boolean
Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.
default false

Response

Returns an array of x_post. This is the demo’s answer, the one the playground above returns, in full rather than abbreviated — including the fields that come back null, because a field is null when the platform does not show it and you should know which ones those are before you build on them. A call with your key returns the account you ask for.

{
  "data": [
    {
      "id": "1927617023005246828",
      "url": "https://x.com/tomas0/status/1927617023005246828",
      "text": "Same corner, four years apart. #filmphoto",
      "created_at": "2026-08-17T16:30:17.000Z",
      "lang": "en",
      "author": {
        "id": "893921039531484800",
        "username": "tomas0",
        "name": "Tomas",
        "profile_url": "https://x.com/tomas0",
        "profile_image_url": "https://cdn.example/x/-c-wJEmz3yOw.jpg",
        "verified": false
      },
      "conversation_id": "1930652241230168143",
      "referenced_tweets": [
        {
          "type": "replied_to",
          "id": "1930652241230168143"
        }
      ],
      "public_metrics": {
        "retweet_count": 843,
        "reply_count": 200,
        "like_count": 8192,
        "quote_count": 26,
        "bookmark_count": 10,
        "impression_count": 319488
      },
      "media": [],
      "hashtags": [
        "filmphoto"
      ],
      "mentions": []
    },
    {
      "id": "1920118263078257666",
      "url": "https://x.com/tomas1/status/1920118263078257666",
      "text": "Three days of proofing and it finally behaved. #sourdough",
      "created_at": "2026-08-05T03:04:20.000Z",
      "lang": "en",
      "author": {
        "id": "829026189812174276",
        "username": "tomas1",
        "name": "Tomas",
        "profile_url": "https://x.com/tomas1",
        "profile_image_url": "https://cdn.example/x/PfPOuwSojx1E.jpg",
        "verified": false
      },
      "conversation_id": "1930652241230168143",
      "referenced_tweets": [
        {
          "type": "replied_to",
          "id": "1930652241230168143"
        }
      ],
      "public_metrics": {
        "retweet_count": 12,
        "reply_count": 68,
        "like_count": 138,
        "quote_count": 24,
        "bookmark_count": 29,
        "impression_count": 9660
      },
      "media": [
        {
          "type": "photo",
          "url": "https://cdn.example/x/media/GfLH0s-BZwF70q.jpg"
        }
      ],
      "hashtags": [
        "sourdough"
      ],
      "mentions": []
    }
  ],
  "meta": {
    "request_id": "req_7f3ac1e94b2d40f8a1c6e5d2",
    "credits_charged": 13,
    "credits_remaining": 74218,
    "cached": false,
    "fetched_at": "2026-09-20T09:12:03Z",
    "next_cursor": "eyJwIjoxLCJzIjoiYTNmOSJ9"
  }
}

Fields of x_post

A post on X: a post, a reply or a quote. Named after X's API v2.

FieldWhat it is
id
string
X's id for the post.
url
URL
The post on X.
text
string · or null
The whole text. Links stay as X shortens them.
created_at
time, ISO 8601 UTC · or null
When it was posted. null when the source does not say.
lang
string · or null
The language X detected, e.g. en.
author
object
Who posted it.
author.id
string · or null
X's numeric id for the account.
author.username
string
Without the @.
author.name
string · or null
The display name.
author.profile_url
URL
The account on X.
author.profile_image_url
URL · or null
The profile picture, at full size.
author.verified
boolean · or null
Whether the account has a checkmark.
conversation_id
string · or null
The first post of the thread it belongs to.
referenced_tweets
array of objects
The post it replies to, quotes or reposts, as X's API names them.
referenced_tweets[].type
string, one of
How this post refers to it: a reply, a quote or a repost.
replied_to · quoted · retweeted
referenced_tweets[].id
string
X's id for that post.
public_metrics
object
null where the source does not give one.
public_metrics.retweet_count
integer · or null
Reposts.
public_metrics.reply_count
integer · or null
Replies.
public_metrics.like_count
integer · or null
Likes.
public_metrics.quote_count
integer · or null
Quotes.
public_metrics.bookmark_count
integer · or null
Bookmarks.
public_metrics.impression_count
integer · or null
Views.
media
array of objects
Photos and videos, in order.
media[].type
string, one of · or null
null where the source does not say.
photo · video · animated_gif
media[].url
URL
The image, or a video's preview image.
hashtags
array of strings
Without the #.
mentions
array of strings
Usernames, without the @.

What it costs

13 credits per successful call, whether we fetch it or serve it from cache — you pay for the answer, not for how we produced it. Responses are cached for 1 hour and a cached one tells you when the data was actually fetched. A call we fail costs 0 and is refunded automatically.

On the smallest pack that is $10.14 per 1,000 calls; on the largest, $5.72. The full table.

Questions

How much does the X (Twitter) replies API cost?

13 credits a call: $10.14 per 1,000 calls on the smallest pack and $5.72 on the largest. A call that fails costs nothing, and the refund is automatic. A cached answer costs the same as a fresh one. Credits are bought in packs and never expire; there is no subscription.

Do I need a X account, a login or cookies?

No. You need a key from us and nothing from X. We never take a customer's login, cookies or session, at any price, and no account of yours is ever at risk.

Can I try it without signing up?

Yes. Add demo=true and leave the key out, or press Send request in the playground on this page. The demo answers with a real answer about Ferrari, captured once a week, in exactly the shape a live call returns, whatever you ask, and charges nothing.

How fresh is the data?

An answer is kept for up to 1 hour, and a cached one says when it was fetched, in meta.fetched_at. Add fresh=true to fetch it again now, at the same price; it needs any purchase, not the trial.

What does it return?

A list of x_post objects. Its fields are named after X's API v2. A field is null when X does not show it, never missing. Every field is described on this page.

How do I get more than one page?

Pass meta.next_cursor back as cursor, and stop when it is null. Each page is a call, priced the same. A cursor lasts as long as the answer it belongs to is cached.

Can an AI agent call it?

Yes: it is the MCP tool get_x_replies on our MCP server, with the same parameters, answer and price. Without a key, the tool answers from the demo.