Introducing the Instagram APIRead more →

X (Twitter) Post API. Send a post link or ID.

Full text, media and exact view counts. We handle the proxies, blocks and platform changes.

X (Twitter) Post API at a glance

Returns a public X (formerly Twitter) post from its link or ID: full text, author, media, and exact view, like, repost, reply and bookmark counts. Long posts and X Articles come whole. It also has the quote count, the post it quotes or replies to with its own text and counts, its poll with exact votes, link card, hashtags, mentions, cashtags, community and edit history.

  • 1 credit per request, $0.75–$1.97 per 1,000 requests
  • 22 typed fields null when unknown
  • url is all it needs, e.g. https://x.com/NASA/status/2117633046002225363
  • 100 credits free when you sign up, no card, so you can build before you spend

Send one request. Get 22 fields back.

Copy the request in your language, or hand it to your agent. Sign up for an API key and your first 100 credits are free.

$ npm install socialtap
url = https://x.com/NASA/status/2117633046002225363
GET /v1/x/postTry in
const params = new URLSearchParams({
  url: "https://x.com/NASA/status/2117633046002225363",
});
const res = await fetch(`https://socialtap.dev/v1/x/post?${params}`, {
  headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, meta } = body;
console.log(data, meta.credits_charged);
200 OK · GET https://socialtap.dev/v1/x/postDocs

One schema on 21 platforms.

The response reference lists every field, its type and when it is null. See the full schema.

  • Null means unknown

    A field X doesn't show is null, never zero or an empty string, so a real zero always means zero.

  • What it accepts

    X post: a link (x.com or twitter.com, /<username>/status/<id> with or without a view such as /photo/1 or a query such as ?s=20, /i/web/status/<id>, /i/status/<id>, /<username>/article/<id>, old /statuses/ and #! links, mobile.twitter.com) or a bare numeric post ID.

  • Write one parser

    X, TikTok, Instagram and 18 more platforms answer in these fields, so the code that reads one reads them all.

platformstring
Platform ID (tiktok, youtube, …).
idstring
Platform-native post ID (string; Instagram shortcode, Reddit with its t3_ prefix).
urlstring
Canonical post URL.
typestring
Normalized content shape. New values may be added; treat unknown values as other.
platform_typestring
The platform's own product label, lowercase (reel, short, story, live, tweet, …).
titlestring
Headline (YouTube title, Reddit title); null on caption-only platforms.
textstring
Caption, description or body as plain text.
languagestring
BCP-47 language of text, when the platform states it.

What teams build with the X (Twitter) Post API.

  • Track a post's views, likes and reposts

  • Turn pasted links into text, author and media

  • Download a post's video or photos

  • Read poll votes and X Article text

  • Trace quotes and replies to the original post

Good to know before you build.

  • metrics.comment_count is replies and metrics.save_count is bookmarks. metrics.share_count is always null, because X shows no such count.
  • metrics.view_count is null on older posts, which X has no view count for.
  • text is the whole post, with X's t.co links written out and without the trailing link to its own media or quoted post.
  • A repost (platform_type repost) keeps its own id, author and published_at, but its text, media and metrics are the reposted post's, also in platform_specific.x.reposted_post, because X counts nothing on a repost itself.
  • On an X Article, title and text are the article's and platform_type is article.
  • platform_type is post, reply, quote, repost or article. platform_specific.x.source is null on most recent posts, because X no longer says which client posted them.
  • When X's API fails, the post comes from its page, with conversation_id, source and the quoted post's save_count null.
  • When the page fails too, the post comes from the embed widget's API: repost, quote, view and save counts are null, a long post's text is cut and listed in approximate_fields, and a repost returns upstream_error, because that API returns the reposted post in its place.
  • Deleted posts and posts from suspended accounts return not_found. Posts from protected accounts and age-restricted posts return private_or_unavailable.

1 credit per request. Failed requests are free.

Buy credits once and spend them on any endpoint, on any platform.

SourcePrice per successful requestPer 1,000 requests
Any source1 credit$0.75–$1.97
  • Cache hits are free.
  • Credits from packs and top-ups never expire.
  • A monthly plan's credits are spent first, and what is left of them ends at each renewal.
  • Prices exclude tax: sales tax is added at checkout where it applies.
  • Outside the US, plans and packs are sold to businesses: checkout asks for your VAT, GST or other business tax ID.

Questions about the X (Twitter) Post API.

More in the API reference.

Can I download the video from a tweet?
Yes. media[].url is the highest-bitrate MP4 of each video or GIF, and platform_specific.x.media_variants lists every rendition and the HLS playlist.
How much does the X (Twitter) Post API cost?
A request costs 1 credit. SocialTap credits cost $0.75–$1.97 per 1,000, depending on the plan or pack.

Try it on a link you already have.

Paste it in the playground, or copy the request into your code.

100free credits
  • No credit card
  • Failed requests are free
  • Works on all 218 endpoints
Start for free Read the docs