---
title: "Tweet Thread"
method: GET
path: "/tweet/thread"
tags: ["Tweet Details"]
---

# Tweet Thread

`GET /tweet/thread`

## Request

- Base URL: `https://api.twitterapis.com/twitter`
- URL: `https://api.twitterapis.com/twitter/tweet/thread`
- Auth: HTTP bearer

Given the first tweet of a thread, return the ordered list of tweets that make up the author's connected thread. The endpoint reads forward from the tweet you pass and does not walk backwards, so pass the thread's first tweet, which is the conversation_id carried on every tweet in that thread. Passing a later tweet returns only the tail of the thread. Cost: $0.0040 per call.

## Query parameters

- `id` string: Numeric ID of any tweet in the thread. Provide either id or url.
- `url` string: Full status URL of any tweet in the thread. Provide either id or url.
- `fields` string
- `compact` '1'
- `paid_promotion` 'only' | 'exclude'

## Response `200`

Reconstruct a thread forward from its first tweet.

- object
  - `tweets` Tweet[]: Ordered tweets composing the thread.
    - `id` string: Numeric tweet ID as a string (avoids JS number precision loss).
    - `text` string: Full tweet text, including expanded URLs.
    - `created_at` string: Tweet creation timestamp in Twitter date format.
    - `author` User: A Twitter/X user profile.
      - `id` string: Numeric user ID as a string.
      - `username` string: Handle without the leading @.
      - `name` string: Display name.
      - `verified` boolean: Whether the account is legacy-verified.
      - `is_blue_verified` boolean: Whether the account carries the Verified (Blue) badge.
      - `verified_type` string, nullable: Verification type, for example Business or Government, when applicable; null otherwise.
      - `followers_count` integer: Follower count.
      - `following_count` integer: Following count.
      - `tweet_count` integer: Number of tweets the account has posted.
      - `favourites_count` integer: Number of tweets the account has liked.
      - `media_count` integer: Number of media items the account has posted.
      - `description` string: Profile bio text.
      - `location` string: Self-reported location.
      - `url` string: Linked website URL from the profile, when set.
      - `created_at` string: Account creation timestamp in Twitter date format.
      - `profile_image_url` string: Avatar image URL.
      - `cover_picture` string: Profile banner/cover image URL, when set.
      - `listed_count` integer, nullable: Number of public lists the account appears on.
      - `can_dm` boolean, nullable: Whether the account accepts direct messages. Currently null on profile lookups (user/info, user/search) and on tweet authors: X no longer includes DM permission in those payloads. The key stays so it fills again if X restores it. For a real answer between two accounts, use can_dm on /twitter/user/check_follow_relationship.
      - `parody_commentary_fan_label` string, nullable: X's parody / commentary / fan account label, when the account is marked as one; null when it carries no such label.
      - `creator_subscriptions_enabled` boolean, nullable: True when the account sells X Subscriptions to its followers; null when X does not say.
      - `can_media_tag` boolean, nullable: Whether other accounts are permitted to tag this account in media; null when X does not report the media-tag permission.
      - `has_custom_timelines` boolean, nullable: Whether the account has created custom timelines.
      - `is_translator` boolean, nullable: Whether the account is a Twitter/X translator.
      - `possibly_sensitive` boolean, nullable: Whether the account is flagged as possibly posting sensitive media.
      - `default_profile` boolean, nullable: True when the account still uses the default profile theme.
      - `default_profile_image` boolean, nullable: True when the account still uses the default avatar.
      - `professional_type` string, nullable: Professional account type when set, for example "Creator" or "Business"; null otherwise.
      - `profile_bio` object, nullable: Structured bio with entity ranges, when present.
        - `description` string, nullable: The bio text.
        - `entities` object, nullable: Mention/URL entity ranges within the bio, when present.
      - `affiliate_label` object, nullable: Parent-organization/affiliate badge shown on the profile, when present.
        - `description` string, nullable: The affiliate/parent-org label text.
        - `badge_url` string, nullable: Badge image URL.
        - `url` string, nullable: Link the badge points to.
      - `pinned_tweet_ids` string[]: Numeric IDs (as strings) of the account's pinned tweet(s); empty array when the account has none pinned or when a trimmed user object omits the block.
      - `protected` boolean, nullable: Whether the account is protected (locked); null on a trimmed user object that carries no protected flag.
      - `type` string, nullable: The user result __typename, for example "User" or "UserUnavailable"; null when absent.
      - `is_automated` boolean, nullable: True when the profile carries X's automated-account label, which is how an account declares itself a bot. Null when no such label is on the profile. This field is never set to false by inference, so null means only that X did not label the account, never that a human runs it. Null on every account sampled so far, including accounts that are plainly automated.
      - `automated_by` string, nullable: Handle of the account that manages this automated account, read from the link on the automated label. Null unless is_automated is true and that label carries a single-segment x.com or twitter.com profile link. Null on every account sampled so far.
      - `unavailable` boolean, nullable: True when X reports the account as unavailable, for example suspended or withheld. False when X returns an ordinary account result. Null on a trimmed user object that reports no account type at all. It is derived from the same value as type, so the two can never disagree: a type of UserUnavailable always gives true.
      - `unavailable_message` string, nullable: The message X returns explaining why the account is unavailable, for example the text shown in place of the profile. Null when the account is available or when X sends no message.
      - `unavailable_reason` string, nullable: The short reason code X returns for an unavailable account, for example Suspended. Null when the account is available or when X sends no reason.
      - `withheld_in_countries` string[], nullable: ISO country codes in which X withholds this account. The empty array and null mean different things and the difference is legally relevant if you republish profiles: an empty array is X stating the account is withheld nowhere, while null is X not telling us. Do not read null as "not withheld". Null on every account today, because the block this is read from is one X no longer sends; the read is kept so the field fills in on its own if X restores it.
    - `favorite_count` integer: Number of likes (favorites) at fetch time.
    - `retweet_count` integer: Number of retweets at fetch time.
    - `reply_count` integer: Number of replies at fetch time.
    - `quote_count` integer: Number of quote tweets at fetch time.
    - `bookmark_count` integer: Number of bookmarks at fetch time.
    - `view_count` integer, nullable: Number of views (impressions). May be null on older tweets posted before public view counts existed.
    - `url` string: Canonical x.com status URL.
    - `lang` string: BCP-47 language code Twitter detected.
    - `is_retweet` boolean: True when the tweet is a retweet.
    - `is_quote` boolean: True when the tweet quotes another tweet.
    - `is_reply` boolean: True when the tweet is a reply to another tweet.
    - `has_video` boolean: True when the tweet carries at least one native video or animated-GIF media item (a one-field filter for video content, including video quote-retweets).
    - `is_paid_promotion` boolean: True when X shows its own "Paid partnership" label on the post (X's branded-content disclosure). False when X shows no label.
    - `has_community_note` boolean, nullable: True when the post carries a Community Note; null when X does not say.
    - `is_edited` boolean, nullable: True when the post has been edited since it was first posted; null when X sends no edit information.
    - `edit_history_ids` string[], nullable: The ids of every version of the post, oldest first and including the original; null when X sends no edit information.
    - `quoted_status_id` string, nullable: The id of the post this one quotes, present even when the quoted post is not expanded; null when it quotes nothing.
    - `source` string, nullable: Posting client/source label; frequently null.
    - `conversation_id` string: ID of the root tweet of the conversation thread this tweet belongs to.
    - `in_reply_to_status_id` string, nullable: ID of the tweet being replied to; null when the tweet is not a reply.
    - `in_reply_to_user_id` string, nullable: Numeric ID of the user being replied to; null when not a reply.
    - `in_reply_to_username` string, nullable: Handle of the user being replied to; null when not a reply.
    - `display_text_range` integer[], nullable: The UTF-16 character span [start, end) of the display text inside text. It marks the region a client should render, leaving out the leading @mentions on a reply and the trailing t.co link of attached media or a quoted tweet. Always a pair, for example [0, 144] on a plain tweet and [22, 285] on a reply. Null when X sends no range, or sends one whose members are not finite numbers, so a partial range is never passed off as a complete one.
    - `is_limited_reply` boolean, nullable: Whether replying to this tweet is restricted. True when X names a reply limitation, false when X names a limitation that is not about replies, and null when X names no limitation at all. Null is what every tweet sampled so far returns. The flag is relative to the account that read the tweet, and these public reads do not run as your account, so a value here would not describe you. It is a different question from the author's own who-can-reply setting, which this field does not report.
    - `entities` object: Parsed tweet entities. Always present; the arrays are empty when the tweet has none.
      - `hashtags` object[]: Hashtag entities in the tweet text.
        - `text` string: The hashtag text without the leading #.
        - `indices` integer[]: Start/end character offsets in the tweet text.
      - `symbols` object[]: Cashtag entities ($TSLA-style) in the tweet text.
        - `text` string: The cashtag text without the leading $.
        - `indices` integer[]: Start/end character offsets in the tweet text.
      - `timestamps` object[]: Date/time entities X extracts from the tweet text. Forwarded verbatim from X rather than remapped, so the member shape is whatever X sends and may gain fields without notice. Treat it as opaque unless you have verified the shape yourself.
      - `urls` object[]: Link entities in the tweet text.
        - `url` string: The t.co short URL as it appears in the text.
        - `expanded_url` string: The resolved destination URL.
        - `display_url` string: The human-readable display URL.
        - `indices` integer[]: Start/end character offsets in the tweet text.
      - `user_mentions` object[]: @-mention entities in the tweet text.
        - `id_str` string: Numeric ID of the mentioned user as a string.
        - `screen_name` string: Handle of the mentioned user.
        - `name` string: Display name of the mentioned user.
        - `indices` integer[]: Start/end character offsets in the tweet text.
    - `retweeted_tweet` Tweet (recursive)
    - `quoted_tweet` Tweet (recursive)
    - `media` Media[]: Media attachments, top-level for convenience. Same content and item shape as extended_entities.media below (the live API returns media in both places); present only when the tweet has media, omitted for text-only tweets.
      - `type` string: Media type: "photo", "video", or "animated_gif".
      - `media_url_https` string, nullable: Thumbnail/still image URL (normally twimg-hosted). Validate the host before fetching.
      - `url` string, nullable: The t.co display URL for the media in the tweet text.
      - `ext_alt_text` string: Author-supplied alt text, when present.
      - `video_info` object: Present for "video" and "animated_gif". Pick the highest-bitrate video/mp4 variant for playback.
        - `duration_millis` integer: Clip duration in milliseconds.
        - `variants` object[]: Playable renditions (an HLS manifest plus one or more mp4 bitrates).
          - `content_type` string: MIME type, e.g. "video/mp4" or "application/x-mpegURL".
          - `url` string: Rendition URL (normally twimg-hosted). Validate the host before fetching.
          - `bitrate` integer: Bitrate in bps; present on mp4 variants only.
    - `extended_entities` object: Media attached to the tweet, in the standard Twitter shape. Present only when the tweet has media; omitted for text-only tweets.
      - `media` Media[]: Media attachments. Photos have no video_info; videos and GIFs carry video_info.variants.
        - `type` string: Media type: "photo", "video", or "animated_gif".
        - `media_url_https` string, nullable: Thumbnail/still image URL (normally twimg-hosted). Validate the host before fetching.
        - `url` string, nullable: The t.co display URL for the media in the tweet text.
        - `ext_alt_text` string: Author-supplied alt text, when present.
        - `video_info` object: Present for "video" and "animated_gif". Pick the highest-bitrate video/mp4 variant for playback.
          - `duration_millis` integer: Clip duration in milliseconds.
          - `variants` object[]: Playable renditions (an HLS manifest plus one or more mp4 bitrates).
            - `content_type` string: MIME type, e.g. "video/mp4" or "application/x-mpegURL".
            - `url` string: Rendition URL (normally twimg-hosted). Validate the host before fetching.
            - `bitrate` integer: Bitrate in bps; present on mp4 variants only.
  - `count` integer: Number of tweets in the thread. The whole thread is returned in one call, so there is no cursor and no second page.

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `402`: Insufficient credits
- `403`: Forbidden
- `404`: Not found
- `429`: Rate limited
- `5XX`: Server error

---

[API](https://skmtc.dev/twitterapis/apis/twitterapis-api.md) · [All operations](https://skmtc.dev/twitterapis/apis/twitterapis-api/llms.txt) · [OpenAPI document](https://skmtc.dev/twitterapis/apis/twitterapis-api/revisions/a33ce0fedb3c?raw)
