# 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.

[Get API key](https://socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Dx.post)

## 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.

GET `/v1/x/post`

[Read the API reference](https://socialtap.dev/docs/reference/x/post/index.md)

- **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`

[Open in playground](https://socialtap.dev/playground/?endpoint=x.post)

cURL:

```shell
curl -G 'https://socialtap.dev/v1/x/post' \
  --data-urlencode 'url=https://x.com/NASA/status/2117633046002225363' \
  -H "x-api-key: $SOCIALTAP_API_KEY"
```

TypeScript SDK:

```typescript
import { SocialTap } from "socialtap";

const client = new SocialTap(); // apiKey defaults to process.env.SOCIALTAP_API_KEY

const res = await client.x.post.get({ url: "https://x.com/NASA/status/2117633046002225363" });
console.log(res.data);
console.log(res.credits.charged, res.meta.request_id);
```

Node.js (fetch):

```javascript
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);
```

Python (requests):

```python
import os

import requests

res = requests.get(
    "https://socialtap.dev/v1/x/post",
    params={"url": "https://x.com/NASA/status/2117633046002225363"},
    headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
    raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, meta = body["data"], body["meta"]
print(data, meta["credits_charged"])
```

Go (net/http):

```go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("url", "https://x.com/NASA/status/2117633046002225363")
	req, err := http.NewRequest("GET", "https://socialtap.dev/v1/x/post?"+q.Encode(), nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	var body struct {
		Data  json.RawMessage `json:"data"`
		Meta  map[string]any  `json:"meta"`
		Error *struct {
			Code    string `json:"code"`
			Message string `json:"message"`
		} `json:"error"`
	}
	if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
		log.Fatal(err)
	}
	if body.Error != nil {
		log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
	}
	fmt.Println(string(body.Data), body.Meta["credits_charged"])
}
```

200 OK:

```json
{
  "data": {
    "approximate_fields": [],
    "author": {
      "avatar_url": "https://pbs.twimg.com/profile_images/1321163587679784960/0ZxKlEKB.jpg",
      "display_name": "NASA",
      "id": "11348282",
      "is_verified": true,
      "url": "https://x.com/NASA",
      "username": "NASA"
    },
    "coauthors": [],
    "duration_ms": null,
    "hashtags": [],
    "id": "2117633046002225363",
    "is_nsfw": false,
    "is_pinned": null,
    "is_sponsored": null,
    "language": "en",
    "media": [
      {
        "alt_text": "An intricate cloud of white dust takes center stage in this photo, rising in a windy pillar. The background features rust-colored dust with dots of distant stars and galaxies shining through.",
        "duration_ms": null,
        "expires_at": null,
        "height": 1385,
        "thumbnail_url": null,
        "type": "image",
        "url": "https://pbs.twimg.com/media/HWNYCEHWsAAO3PW.jpg?name=orig",
        "width": 2000
      }
    ],
    "mentions": [
      "NASAWebb"
    ],
    "metrics": {
      "comment_count": 181,
      "like_count": 2300,
      "quote_count": 42,
      "repost_count": 315,
      "save_count": 120,
      "share_count": null,
      "view_count": 490407
    },
    "platform": "x",
    "platform_specific": {
      "x": {
        "article": null,
        "author_metrics": {
          "follower_count": 92294019,
          "following_count": 115,
          "post_count": 74490,
          "total_like_count": null,
          "total_view_count": null
        },
        "author_verified_type": "government",
        "card": null,
        "cashtags": [],
        "community": null,
        "conversation_id": "2117633046002225363",
        "edit_post_ids": [
          "2117633046002225363"
        ],
        "is_author_blue_verified": true,
        "is_edited": false,
        "links": [],
        "media_variants": [],
        "poll": null,
        "quoted_post": null,
        "quoted_post_id": null,
        "reply_to_author": null,
        "reply_to_post_id": null,
        "reposted_post": null,
        "reposted_post_id": null,
        "source": null
      }
    },
    "platform_type": "post",
    "published_at": "2026-11-03T15:00:36Z",
    "text": "This smoky specter is the Cat’s Head Nebula, captured in intricate detail by @NASAWebb. Its name comes from its shape, which resembles a cosmic kitty sitting with its back toward the viewer. What do you see?",
    "thumbnail_url": "https://pbs.twimg.com/media/HWNYCEHWsAAO3PW.jpg?name=orig",
    "title": null,
    "type": "image",
    "unknown_fields": [],
    "url": "https://x.com/NASA/status/2117633046002225363"
  },
  "meta": {
    "request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
    "platform": "x",
    "source": "api",
    "is_cached": false,
    "credits_charged": 1,
    "latency_ms": 272,
    "fetched_at": "2026-10-25T12:00:00Z",
    "input": {
      "kind": "post",
      "id": "2117633046002225363",
      "url": "https://x.com/NASA/status/2117633046002225363"
    },
    "credits_remaining": 9999,
    "client_request_id": null,
    "warnings": []
  }
}
```

## One schema on 21 platforms.

The [response reference](https://socialtap.dev/docs/reference/x/post/index.md#response) lists every field, its type and when it is `null`. [See the full schema](https://socialtap.dev/resources/post/index.md).

- ### 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.

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

Live data from 33 platforms.

[TikTok](https://socialtap.dev/apis/tiktok/index.md) · [Instagram](https://socialtap.dev/apis/instagram/index.md) · [Facebook](https://socialtap.dev/apis/facebook/index.md) · [YouTube](https://socialtap.dev/apis/youtube/index.md) · [Reddit](https://socialtap.dev/apis/reddit/index.md) · [Threads](https://socialtap.dev/apis/threads/index.md) · [Spotify](https://socialtap.dev/apis/spotify/index.md) · [Amazon](https://socialtap.dev/apis/amazon/index.md) · [Apple Music](https://socialtap.dev/apis/applemusic/index.md) · [Pinterest](https://socialtap.dev/apis/pinterest/index.md) · [Rumble](https://socialtap.dev/apis/rumble/index.md) · [X](https://socialtap.dev/apis/x/index.md) · [Bluesky](https://socialtap.dev/apis/bluesky/index.md) · [Twitch](https://socialtap.dev/apis/twitch/index.md) · [LinkedIn](https://socialtap.dev/apis/linkedin/index.md) · [Telegram](https://socialtap.dev/apis/telegram/index.md) · [TikTok Shop](https://socialtap.dev/apis/tiktokshop/index.md) · [Kwai](https://socialtap.dev/apis/kwai/index.md) · [Snapchat](https://socialtap.dev/apis/snapchat/index.md) · [SoundCloud](https://socialtap.dev/apis/soundcloud/index.md) · [Truth Social](https://socialtap.dev/apis/truthsocial/index.md) · [Kick](https://socialtap.dev/apis/kick/index.md) · [Komi](https://socialtap.dev/apis/komi/index.md) · [Lnk.Bio](https://socialtap.dev/apis/linkbio/index.md) · [Linkme](https://socialtap.dev/apis/linkme/index.md) · [Linktree](https://socialtap.dev/apis/linktree/index.md) · [Pillar](https://socialtap.dev/apis/pillar/index.md) · [TikTok Ad Library](https://socialtap.dev/apis/tiktok-ad-library/index.md) · [Facebook Ad Library](https://socialtap.dev/apis/facebook-ad-library/index.md) · [Facebook Events](https://socialtap.dev/apis/facebook-events/index.md) · [Facebook Marketplace](https://socialtap.dev/apis/facebook-marketplace/index.md) · [Google Ads Transparency Center](https://socialtap.dev/apis/google-ads-transparency/index.md) · [LinkedIn Ad Library](https://socialtap.dev/apis/linkedin-ad-library/index.md)

## 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.

[Plans and packs](https://socialtap.dev/pricing/index.md) · [How this endpoint is priced](https://socialtap.dev/docs/reference/x/post/index.md#pricing) · [How credits work](https://socialtap.dev/docs/credits/index.md)

| Source | Price per successful request | Per 1,000 requests |
| --- | --- | --- |
| Any source | 1 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](https://socialtap.dev/docs/reference/x/post/index.md).

**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.

Other platforms

## Posts on 20 more platforms.

- [TikTok Post API](https://socialtap.dev/apis/tiktok/post/index.md) (1 credit · `GET /v1/tiktok/post`)
- [Instagram Post API](https://socialtap.dev/apis/instagram/post/index.md) (1 credit · `GET /v1/instagram/post`)
- [Facebook Post API](https://socialtap.dev/apis/facebook/post/index.md) (1 credit · `GET /v1/facebook/post`)
- [YouTube Video API](https://socialtap.dev/apis/youtube/post/index.md) (1 credit · `GET /v1/youtube/post`)
- [Reddit Post API](https://socialtap.dev/apis/reddit/post/index.md) (1 credit · `GET /v1/reddit/post`)
- [Threads Post API](https://socialtap.dev/apis/threads/post/index.md) (1 credit · `GET /v1/threads/post`)
- [Spotify Track API](https://socialtap.dev/apis/spotify/track/index.md) (1 credit · `GET /v1/spotify/track`)
- [Amazon Shop Posts API](https://socialtap.dev/apis/amazon/shop_posts/index.md) (1 credit / page · `GET /v1/amazon/shop_posts`)
- [Apple Music Track API](https://socialtap.dev/apis/applemusic/track/index.md) (1 credit · `GET /v1/applemusic/track`)
- [Pinterest Pin API](https://socialtap.dev/apis/pinterest/pin/index.md) (1 credit · `GET /v1/pinterest/pin`)
- [Rumble Video API](https://socialtap.dev/apis/rumble/post/index.md) (1 credit · `GET /v1/rumble/post`)
- [Bluesky Post API](https://socialtap.dev/apis/bluesky/post/index.md) (1 credit · `GET /v1/bluesky/post`)
- [Twitch Video and Clip API](https://socialtap.dev/apis/twitch/video/index.md) (1 credit · `GET /v1/twitch/video`)
- [LinkedIn Post API](https://socialtap.dev/apis/linkedin/post/index.md) (1 credit · `GET /v1/linkedin/post`)
- [Telegram Post API](https://socialtap.dev/apis/telegram/post/index.md) (1 credit · `GET /v1/telegram/post`)
- [Kwai Post API](https://socialtap.dev/apis/kwai/post/index.md) (1 credit · `GET /v1/kwai/post`)
- [Snapchat Spotlight API](https://socialtap.dev/apis/snapchat/spotlight/index.md) (1 credit · `GET /v1/snapchat/spotlight`)
- [SoundCloud Track API](https://socialtap.dev/apis/soundcloud/track/index.md) (1 credit · `GET /v1/soundcloud/track`)
- [Truth Social Post API](https://socialtap.dev/apis/truthsocial/post/index.md) (1 credit · `GET /v1/truthsocial/post`)
- [Kick Clip API](https://socialtap.dev/apis/kick/post/index.md) (1 credit · `GET /v1/kick/post`)

More X

## X API. 7 endpoints, one key.

- [X (Twitter) Profile API](https://socialtap.dev/apis/x/profile/index.md) (1 credit · `GET /v1/x/profile`)
- [X (Twitter) Post Search API](https://socialtap.dev/apis/x/search_posts/index.md) (From 1 credit / page · `GET /v1/x/search_posts`)
- [X (Twitter) User Search API](https://socialtap.dev/apis/x/search_profiles/index.md) (From 1 credit / page · `GET /v1/x/search_profiles`)
- [X (Twitter) Hashtag Search API](https://socialtap.dev/apis/x/search_hashtags/index.md) (1 credit / page · `GET /v1/x/search_hashtags`)
- [X (Twitter) Community Search API](https://socialtap.dev/apis/x/search_communities/index.md) (From 1 credit / page · `GET /v1/x/search_communities`)
- [X (Twitter) Community API](https://socialtap.dev/apis/x/community/index.md) (1 credit · `GET /v1/x/community`)

## 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](https://socialtap.dev/signup/) [Read the docs](https://socialtap.dev/docs/index.md)

---

[HTML version](https://socialtap.dev/apis/x/post/) · [Docs index for AI agents](https://socialtap.dev/llms.txt) · [All docs in one file](https://socialtap.dev/llms-full.txt)
