GetXAPI
Articles

Get Article

Fetch full Twitter/X article and note content by wrapper tweet ID (public) or by article entity ID (owner-only). $0.001 per call.

GET/twitter/article/get

This endpoint costs $0.001 per API call.

Query Parameters

Provide one of the two lookups below:

By wrapper tweet ID (public read)

ParameterTypeRequiredDescription
idstringYesTweet ID that wraps the article (e.g. from x.com/<user>/status/<id>)

By article entity ID (owner-only read)

ParameterTypeRequiredDescription
article_idstringYesThe article's entity rest_id (as returned by /article/list or /article/create)
auth_tokenstringYesRequired when using article_id. The article entity lookup is owner-scoped — returns no data for non-owners
proxystringNoCaller-supplied proxy URL (http, https, socks5, socks4)

Notes

  • Both paths return the same response shape — your client doesn't need to branch.
  • For id (wrapper tweet ID), the tweet must be an article tweet (e.g. x.com/i/article/...). Regular tweets return 404.
  • For article_id lookups, the auth_token must own the article entity. Returns 404 with Article not found or not owned by caller otherwise.
  • Owner-only lookups (article_id path) include two extra fields in the response: tweet_id (null for drafts) and lifecycle ("Draft" or "Published").
  • contents is an array of rich text blocks with types: unstyled, header-two, header-three, image (with url, width, height), divider, blockquote, ordered-list-item, unordered-list-item.
  • Text blocks may include inlineStyleRanges for formatting (Bold, Italic).

Response (200)

{
  "status": "success",
  "msg": "success",
  "article": {
    "id": "QXJ0aWNsZUVudGl0eToxOTA1NTQxMTM5MTQ0Mjk4NDk4",
    "author": {
      "type": "user",
      "userName": "Decentralisedco",
      "url": "https://x.com/Decentralisedco",
      "twitterUrl": "https://twitter.com/Decentralisedco",
      "id": "1764631141926002689",
      "name": "DCo",
      "isVerified": false,
      "isBlueVerified": true,
      "verifiedType": null,
      "profilePicture": "https://pbs.twimg.com/profile_images/..._normal.jpg",
      "coverPicture": "https://pbs.twimg.com/profile_banners/...",
      "description": "Investments and Research.",
      "location": "Subscribe →",
      "followers": 13657,
      "following": 325,
      "canDm": true,
      "createdAt": "Mon Mar 04 12:37:18 +0000 2024",
      "favouritesCount": 1620,
      "statusesCount": 1053,
      "mediaCount": 487,
      "pinnedTweetIds": ["2029569587029934133"]
    },
    "replyCount": 16,
    "likeCount": 160,
    "quoteCount": 8,
    "viewCount": 44300,
    "createdAt": "Fri Mar 28 09:01:12 +0000 2025",
    "title": "When Tokens Burn",
    "preview_text": "Breaking down how crypto protocols approach revenue and cash flow...",
    "cover_media_img_url": "https://pbs.twimg.com/media/GnHXrznXUAEs-v5.jpg",
    "contents": [
      {
        "type": "unstyled",
        "text": "Breaking down how crypto protocols approach revenue and cash flow",
        "inlineStyleRanges": [{ "length": 65, "offset": 0, "style": "Italic" }]
      },
      { "type": "header-two", "text": "The Zero-Sum Attention Game" },
      {
        "type": "unstyled",
        "text": "In 2021, each crypto asset had, on average, ~$1.8M in stablecoin liquidity..."
      },
      {
        "type": "image",
        "url": "https://pbs.twimg.com/media/GnHZB47WwAAb6hU.png",
        "width": 2040,
        "height": 1372
      },
      { "type": "divider" },
      { "type": "blockquote", "text": "One key insight here is..." },
      {
        "type": "ordered-list-item",
        "text": "First point",
        "inlineStyleRanges": [{ "length": 5, "offset": 0, "style": "Bold" }]
      }
    ]
  }
}

Error Responses

400 - Missing or invalid parameters

{
  "error": "Missing required query param. Provide either `id` (wrapper tweet ID, public) or `article_id` (article entity rest_id, owner-only — also requires `auth_token`)."
}
{
  "error": "`article_id` requires `auth_token` (owner-only read). Use `id` (wrapper tweet ID) for public lookups."
}

404 - Not an article tweet / not owned

{
  "error": "No article found for tweet: 2019264360682778716"
}
{
  "error": "Article not found or not owned by caller: 2055606612363202560"
}

Examples

Public read — by wrapper tweet ID

curl -X GET "https://api.getxapi.com/twitter/article/get?id=1905545699552375179" \
  -H "Authorization: Bearer API_KEY"
const response = await fetch(
  "https://api.getxapi.com/twitter/article/get?id=1905545699552375179",
  {
    headers: {
      Authorization: "Bearer API_KEY",
    },
  }
);
const data = await response.json();
console.log(data.article);
import requests

response = requests.get(
    "https://api.getxapi.com/twitter/article/get",
    headers={"Authorization": "Bearer API_KEY"},
    params={"id": "1905545699552375179"},
)
print(response.json()["article"])

Owner-only read — by article entity ID

curl -X GET "https://api.getxapi.com/twitter/article/get?article_id=2055606612363202560&auth_token=YOUR_AUTH_TOKEN" \
  -H "Authorization: Bearer API_KEY"
const response = await fetch(
  "https://api.getxapi.com/twitter/article/get?article_id=2055606612363202560&auth_token=YOUR_AUTH_TOKEN",
  {
    headers: {
      Authorization: "Bearer API_KEY",
    },
  }
);
const data = await response.json();
console.log(data.article.lifecycle, data.article.tweet_id);
import requests

response = requests.get(
    "https://api.getxapi.com/twitter/article/get",
    headers={"Authorization": "Bearer API_KEY"},
    params={
        "article_id": "2055606612363202560",
        "auth_token": "YOUR_AUTH_TOKEN",
    },
)
article = response.json()["article"]
print(article["lifecycle"], article["tweet_id"])

On this page