# Tweet with article content

`GET https://api.twittrapi.com/tweet/{tweetId}/article`

Like /tweet/{tweetId}, but also asks X for the full content of an X Article attached to the tweet.

HTML page: https://www.twittrapi.com/docs/reference/tweet-tweetid-article

## Parameters

| Name | In | Type | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `tweetId` | path | string | yes |  | Numeric tweet ID (digits only, up to 30), the number at the end of the tweet URL. |
| `rankingMode` | query | string | no | Relevance | Order of the replies, passed to X: Relevance, Recency or Likes. |
| `includePromotedContent` | query | boolean | no | false | Ask X to include promoted tweets. Accepts true/false, 1/0. |
| `cursor` | query | string | no |  | Cursor from the previous page to load more replies. |

Every read endpoint also accepts `format=simple` (or the header `X-Response-Format: simple`) for compact, flat JSON with a fixed schema. Same price.

Paginated: pass the bottom cursor of one page as `cursor` to get the next. Each page is one billed call.

## Response

Raw JSON of X's TweetDetail query with the article fields turned on. For a tweet without an X Article the response is the same as /tweet/{tweetId}.

With `format=simple`: Collection of Tweet objects: {data: [Tweet], nextCursor, previousCursor, hasNextPage}. Like the tweet detail; the article is in the tweet's article field (id, title, previewText, coverImageUrl, publishedAt, text).

## Errors

| Status | When |
| --- | --- |
| 422 | tweetId is not numeric. |
| 404 | X reports the tweet as not found. |

Shared errors (401 missing key, 402 no balance, 429 rate limit, 5xx) are listed on https://www.twittrapi.com/docs/helpful-infos/error-handling. Calls that fail with 400, 408, 409 or a 5xx error are refunded.

## Example request

curl:

```bash
curl 'https://api.twittrapi.com/tweet/20/article' \
  --header 'X-API-KEY: YOUR_API_KEY'
```

Python:

```python
import httpx

# No SDK method for this endpoint yet, so this is a plain HTTP call.
resp = httpx.get(
    "https://api.twittrapi.com/tweet/20/article",
    headers={"X-API-KEY": "YOUR_API_KEY"},
    timeout=60,
)
data = resp.json()
```

Node.js:

```js
import { TwittrAPI } from "twittrapi";

const client = new TwittrAPI({ apiKey: process.env.TWITTRAPI_API_KEY });
// No wrapper method for this endpoint yet; client.get() sends the same authenticated GET.
const data = await client.get({
  path: "/tweet/20/article",
});
```

RapidAPI:

```bash
curl 'https://twitter-aio.p.rapidapi.com/tweet/20/article' \
  --header 'x-rapidapi-key: YOUR_RAPIDAPI_KEY' \
  --header 'x-rapidapi-host: twitter-aio.p.rapidapi.com'
```

## Example response

Shortened: arrays keep their first items and long strings are cut.

Raw (default):

```json
{
  "data": {
    "threaded_conversation_with_injections_v2": {
      "instructions": [
        {
          "type": "TimelineClearCache"
        },
        {
          "entries": [
            {
              "content": {
                "__typename": "TimelineTimelineItem",
                "clientEventInfo": {
                  "component": "tweet",
                  "element": "tweet"
                },
                "entryType": "TimelineTimelineItem",
                "itemContent": {
                  "__typename": "TimelineTweet",
                  "itemType": "TimelineTweet",
                  "tweetDisplayType": "SelfThread",
                  "tweet_results": {
                    "result": {
                      "__typename": "Tweet",
                      "card": {
                        "legacy": {
                          "binding_values": [
                            {
                              "…": "…"
                            },
                            "… 2 more"
                          ],
                          "card_platform": {
                            "platform": {
                              "…": "…"
                            }
                          },
                          "name": "summary_large_image",
                          "url": "https://t.co/FS66GuIYJD",
                          "user_refs_results": []
                        },
                        "rest_id": "https://t.co/FS66GuIYJD"
                      },
                      "core": {
                        "user_results": {
                          "result": {
                            "__typename": "User",
                            "affiliates_highlighted_label": {
                              "…": "…"
                            },
                            "has_graduated_access": true,
                            "id": "VXNlcjoyMjQ0OTk0OTQ1",
                            "is_blue_verified": true,
                            "legacy": {
                              "…": "…"
                            },
                            "parody_commentary_fan_label": "None",
                            "professional": {
                              "…": "…"
                            },
                            "profile_image_shape": "Square",
                            "rest_id": "2244994945",
                            "super_follow_eligible": false,
                            "super_followed_by": false,
                            "super_following": false,
                            "tipjar_settings": {
                              "…": "…"
                            }
                          }
                        }
                      },
                      "edit_control": {
                        "edit_tweet_ids": [
                          "2019881223666233717"
                        ],
                        "editable_until_msecs": "1770415785000",
                        "edits_remaining": "5",
                        "is_edit_eligible": false
                      },
                      "grok_analysis_button": true,
                      "has_birdwatch_notes": false,
                      "is_translatable": false,
                      "legacy": {
                        "bookmark_count": 2802,
                        "bookmarked": false,
                        "conversation_id_str": "2019881223666233717",
                        "created_at": "Fri Feb 06 21:09:45 +0000 2026",
                        "display_text_range": [
                          0,
                          261
… (58 more lines)
```

Simple (`format=simple`):

```json
{
  "data": [
    {
      "id": "2019881223666233717",
      "url": "https://x.com/XDevelopers/status/2019881223666233717",
      "text": "Officially launching X API Pay-Per-Use\n\nThe core of X developers are indie builders, early stage products, startups, and hobbyists\n\nIt’s time to open up our X API ecosystem and instill a new wave of n…",
      "createdAt": "2026-02-06T21:09:45Z",
      "lang": "en",
      "author": {
        "id": "2244994945",
        "username": "XDevelopers",
        "name": "Developers",
        "description": "The voice of the X Dev team and your official source for updates, news, and events, related to the X API.",
        "location": "127.0.0.1",
        "url": "https://docs.x.com/",
        "createdAt": "2013-12-14T04:35:55Z",
        "avatarUrl": "https://pbs.twimg.com/profile_images/1683501992314798080/xl1POYLw.jpg",
        "bannerUrl": "https://pbs.twimg.com/profile_banners/2244994945/1690213128",
        "verified": true,
        "verifiedType": "Business",
        "protected": false,
        "counts": {
          "followers": 698057,
          "following": 770,
          "tweets": 4376,
          "likes": 2758,
          "media": 832,
          "listed": 2977
        },
        "pinnedTweetIds": [
          "2019881223666233717"
        ],
        "isAutomated": false
      },
      "counts": {
        "likes": 5599,
        "retweets": 896,
        "replies": 791,
        "quotes": 596,
        "bookmarks": 2802,
        "views": 2552259
      },
      "media": [],
      "urls": [
        "http://developer.x.com"
      ],
      "hashtags": [],
      "mentions": [],
      "replyTo": null,
      "quoted": null,
      "retweetOf": null,
      "conversationId": "2019881223666233717",
      "isPinned": false,
      "source": null,
      "article": null
    },
    "… 1 more"
  ],
  "nextCursor": "DAAKCgABHUS5vqW__qkLAAIAAAGoRW1QQzZ3QUFBZlEvZ0dKTjB2R3AvQUFBQUNVY0NSME1jcHB3Ymh3SVJYV2dsc0JPSEFpQW5USWFNTFVjQ0E5R2NWcHgxeHdJRDBZb1ZvRDBIQWdlT0QrYWNQSWNDQ3VkYk5weFBCd0lMZDFXMXBDSUhBaUdnTTRhY0dRY0NHYVhW…",
  "previousCursor": null,
  "hasNextPage": true
}
```
