---
title: "Get full conversation thread for a tweet"
method: GET
path: "/x/tweets/{id}/thread"
tags: ["Tweets"]
---

# Get full conversation thread for a tweet

`GET /x/tweets/{id}/thread`

## Path parameters

- `id` string, required

## Query parameters

- `cursor` string
- `pageSize` integer

## Response `200`

Thread tweets

- PaginatedTweets — Paginated tweet results. The item count can be lower than pageSize when the source returns fewer tweets, filters remove tweets, or remaining credits cover fewer results. Follow next_cursor while has_next_page is true. An empty page can still have has_next_page true after filtering. Zero affordable results returns 402 insufficient_credits.
  - `tweets` SearchTweet[], required
    - `id` string, required
    - `text` string, required
    - `type` string
    - `createdAt` string
    - `isNoteTweet` boolean — True for Note Tweets (long-form content, up to 25,000 characters)
    - `isReply` boolean — True when this search result is a reply
    - `isQuoteStatus` boolean — True when this search result quotes another tweet
    - `isLimitedReply` boolean — Whether the tweet has limited reply permissions
    - `inReplyToId` string — Tweet ID being replied to
    - `inReplyToUserId` string — User ID being replied to
    - `inReplyToUsername` string — Username being replied to
    - `conversationId` string — Root tweet ID for the search result conversation
    - `source` string — Client application used to post the tweet
    - `displayTextRange` integer[] — Start and end offsets for rendered tweet text
    - `contentDisclosure` ContentDisclosure — Content disclosure metadata shown by X when a tweet is labeled as paid partnership content or AI-generated media.
      - `advertising` object
        - `isPaidPromotion` boolean — True when X labels the tweet as paid promotion content.
      - `aiGenerated` object
        - `detectionSource` string — Source of the AI-generated media disclosure.
        - `canEdit` boolean — Whether the disclosure can be edited on X.
        - `hasAiGeneratedMedia` boolean — True when X labels the tweet as containing AI-generated media.
    - `entities` object — Parsed search-result entities including URLs, mentions, hashtags, and media markers
    - `quoted_tweet` EmbeddedTweet — Quoted or retweeted tweet context. Every object includes id, text, and engagement metrics. A zero metric can mean X did not report the count. Author, media, and conversation fields appear when available.
      - `id` string, required
      - `text` string, required
      - `type` string
      - `createdAt` string
      - `url` string
      - `lang` string
      - `retweetCount` integer, required
      - `replyCount` integer, required
      - `likeCount` integer, required
      - `quoteCount` integer, required
      - `viewCount` integer, required
      - `bookmarkCount` integer, required
      - `isReply` boolean
      - `isLimitedReply` boolean
      - `isNoteTweet` boolean
      - `isQuoteStatus` boolean
      - `inReplyToId` string
      - `inReplyToUserId` string
      - `inReplyToUsername` string
      - `conversationId` string
      - `source` string
      - `displayTextRange` integer[]
      - `contentDisclosure` ContentDisclosure — Content disclosure metadata shown by X when a tweet is labeled as paid partnership content or AI-generated media.
        - `advertising` object
          - `isPaidPromotion` boolean — True when X labels the tweet as paid promotion content.
        - `aiGenerated` object
          - `detectionSource` string — Source of the AI-generated media disclosure.
          - `canEdit` boolean — Whether the disclosure can be edited on X.
          - `hasAiGeneratedMedia` boolean — True when X labels the tweet as containing AI-generated media.
      - `entities` object
      - `media` TweetMedia[]
        - `mediaUrl` string, required — Media preview URL
        - `type` 'photo' | 'video' | 'animated_gif', required
        - `url` string, required — X media link from the tweet
        - `videoVariants` object[] — Available video encodings, ordered as returned
          - `bitrate` integer
          - `contentType` string, required
          - `url` string, required
      - `author` UserProfile — X user profile with bio, follower counts, and verification status.
        - `id` string, required
        - `username` string, required
        - `name` string, required
        - `description` string
        - `followers` integer
        - `following` integer
        - `verified` boolean
        - `isBlueVerified` boolean — Whether X shows a blue verification badge
        - `isVerified` boolean — Whether X marks the profile as verified
        - `profilePicture` string
        - `coverPicture` string
        - `profileBannerUrl` string — Original X profile banner field when available
        - `location` string
        - `createdAt` string
        - `statusesCount` integer
        - `mediaCount` integer
        - `canDm` boolean
        - `protected` boolean — Whether the profile protects its posts
        - `url` string
        - `favouritesCount` integer
        - `hasCustomTimelines` boolean
        - `isTranslator` boolean
        - `withheldInCountries` string[]
        - `possiblySensitive` boolean
        - `pinnedTweetIds` string[]
        - `isAutomated` boolean
        - `automatedBy` string
        - `unavailable` boolean
        - `unavailableReason` string
        - `verifiedType` string
        - `communityRole` string — Community role when returned by community member reads
        - `viewerFollowedBy` boolean — Whether this profile follows the authenticated viewer
        - `viewerFollowing` boolean — Whether the authenticated viewer follows this profile
        - `profile_bio` object — Structured profile bio with entity annotations
    - `retweeted_tweet` EmbeddedTweet — Quoted or retweeted tweet context. Every object includes id, text, and engagement metrics. A zero metric can mean X did not report the count. Author, media, and conversation fields appear when available.
      - `id` string, required
      - `text` string, required
      - `type` string
      - `createdAt` string
      - `url` string
      - `lang` string
      - `retweetCount` integer, required
      - `replyCount` integer, required
      - `likeCount` integer, required
      - `quoteCount` integer, required
      - `viewCount` integer, required
      - `bookmarkCount` integer, required
      - `isReply` boolean
      - `isLimitedReply` boolean
      - `isNoteTweet` boolean
      - `isQuoteStatus` boolean
      - `inReplyToId` string
      - `inReplyToUserId` string
      - `inReplyToUsername` string
      - `conversationId` string
      - `source` string
      - `displayTextRange` integer[]
      - `contentDisclosure` ContentDisclosure — Content disclosure metadata shown by X when a tweet is labeled as paid partnership content or AI-generated media.
        - `advertising` object
          - `isPaidPromotion` boolean — True when X labels the tweet as paid promotion content.
        - `aiGenerated` object
          - `detectionSource` string — Source of the AI-generated media disclosure.
          - `canEdit` boolean — Whether the disclosure can be edited on X.
          - `hasAiGeneratedMedia` boolean — True when X labels the tweet as containing AI-generated media.
      - `entities` object
      - `media` TweetMedia[]
        - `mediaUrl` string, required — Media preview URL
        - `type` 'photo' | 'video' | 'animated_gif', required
        - `url` string, required — X media link from the tweet
        - `videoVariants` object[] — Available video encodings, ordered as returned
          - `bitrate` integer
          - `contentType` string, required
          - `url` string, required
      - `author` UserProfile — X user profile with bio, follower counts, and verification status.
        - `id` string, required
        - `username` string, required
        - `name` string, required
        - `description` string
        - `followers` integer
        - `following` integer
        - `verified` boolean
        - `isBlueVerified` boolean — Whether X shows a blue verification badge
        - `isVerified` boolean — Whether X marks the profile as verified
        - `profilePicture` string
        - `coverPicture` string
        - `profileBannerUrl` string — Original X profile banner field when available
        - `location` string
        - `createdAt` string
        - `statusesCount` integer
        - `mediaCount` integer
        - `canDm` boolean
        - `protected` boolean — Whether the profile protects its posts
        - `url` string
        - `favouritesCount` integer
        - `hasCustomTimelines` boolean
        - `isTranslator` boolean
        - `withheldInCountries` string[]
        - `possiblySensitive` boolean
        - `pinnedTweetIds` string[]
        - `isAutomated` boolean
        - `automatedBy` string
        - `unavailable` boolean
        - `unavailableReason` string
        - `verifiedType` string
        - `communityRole` string — Community role when returned by community member reads
        - `viewerFollowedBy` boolean — Whether this profile follows the authenticated viewer
        - `viewerFollowing` boolean — Whether the authenticated viewer follows this profile
        - `profile_bio` object — Structured profile bio with entity annotations
    - `media` TweetMedia[] — Search-result media attachments, omitted when no media is present
      - `mediaUrl` string, required — Media preview URL
      - `type` 'photo' | 'video' | 'animated_gif', required
      - `url` string, required — X media link from the tweet
      - `videoVariants` object[] — Available video encodings, ordered as returned
        - `bitrate` integer
        - `contentType` string, required
        - `url` string, required
    - `url` string — Tweet permalink URL
    - `lang` string — Tweet language code
    - `likeCount` integer, required
    - `retweetCount` integer, required
    - `replyCount` integer, required
    - `quoteCount` integer, required
    - `viewCount` integer, required
    - `bookmarkCount` integer, required
    - `author` UserProfile — X user profile with bio, follower counts, and verification status.
      - `id` string, required
      - `username` string, required
      - `name` string, required
      - `description` string
      - `followers` integer
      - `following` integer
      - `verified` boolean
      - `isBlueVerified` boolean — Whether X shows a blue verification badge
      - `isVerified` boolean — Whether X marks the profile as verified
      - `profilePicture` string
      - `coverPicture` string
      - `profileBannerUrl` string — Original X profile banner field when available
      - `location` string
      - `createdAt` string
      - `statusesCount` integer
      - `mediaCount` integer
      - `canDm` boolean
      - `protected` boolean — Whether the profile protects its posts
      - `url` string
      - `favouritesCount` integer
      - `hasCustomTimelines` boolean
      - `isTranslator` boolean
      - `withheldInCountries` string[]
      - `possiblySensitive` boolean
      - `pinnedTweetIds` string[]
      - `isAutomated` boolean
      - `automatedBy` string
      - `unavailable` boolean
      - `unavailableReason` string
      - `verifiedType` string
      - `communityRole` string — Community role when returned by community member reads
      - `viewerFollowedBy` boolean — Whether this profile follows the authenticated viewer
      - `viewerFollowing` boolean — Whether the authenticated viewer follows this profile
      - `profile_bio` object — Structured profile bio with entity annotations
  - `has_next_page` boolean, required
  - `next_cursor` string, required

## Other responses

- `400` — Invalid input
- `401` — Authentication required for a non-MPP paid read. The Bearer challenge requests authentication and is not a Payment challenge. Requests without credentials advertise accountless Stripe checkout, but create no checkout. Explicit invalid credentials return the plain error shape. Call an advertised action only after explicit user confirmation.
- `402` — Payment required. Fixed-price direct MPP requests return a Machine Payments Protocol problem document and a WWW-Authenticate challenge. Authenticated X data requests return balances and explicit Stripe checkout-creation actions. Guest paid-read keys receive only the accountless guest top-up action. Direct MPP challenges also advertise the Stripe wallet action. Other authenticated endpoints return a legacy error shape. A failed request never creates checkout. Create checkout only after the user confirms a payment option.
- `424` — Dependency unavailable, unauthorized, or rate limited. Default v1 returns 502. The best-practice response contract returns 424 for transparent dependency failures.
- `429` — Xquik tier rate limit exceeded. The response includes a `Retry-After` header with the number of seconds to wait before retrying.
- `502` — Dependency unavailable, unauthorized, or rate limited. Default v1 returns 502. The best-practice response contract returns 424 for transparent dependency failures.

## Changes

- **2026-07-13** `83005363f122` — 6 breaking, 59 info
  - added `#/components/schemas/AnonymousGuestAuthenticationRequired, subschema #2` to the response body `oneOf` list for the response status `401`
  - added `#/components/schemas/AuthenticatedPaymentRequired, #/components/schemas/GuestPaymentRequired, subschema #3` to the response body `oneOf` list for the response status `402`
  - the response's body type changed from `object` to no type for status `401`
  - the response's body type changed from `object` to no type for status `402`
  - …61 more
- **2026-04-25** `2adc33156b4b` — 4 warning, 8 info
  - added the new `insufficient_credits` enum value to the `error` response property for the response status `401`
  - added the new `insufficient_credits` enum value to the `error` response property for the response status `402`
  - added the new `no_credits` enum value to the `error` response property for the response status `401`
  - added the new `no_credits` enum value to the `error` response property for the response status `402`
  - …8 more
- **2026-04-08** `d40c57a05527` — 1 info
  - added the optional property `tweets/items/isNoteTweet` to the response with the `200` status

[Change history](https://skmtc.dev/xquik-dev/apis/xquik-api/changes/x/tweets/:id/thread/get.md)

---

[API](https://skmtc.dev/xquik-dev/apis/xquik-api.md) · [All operations](https://skmtc.dev/xquik-dev/apis/xquik-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/xquik-dev/xquik-api/revisions/83005363f122/schema)
