> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xquik.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Twitter list tweets API & timeline export guide

> Retrieve tweets from an X list with authors, text, replies, reposts, likes, quotes, media, timestamps, and cursor-based pagination. 1 credit per tweet.

<Panel>
  <Tabs defaultTabIndex={0} sync={false}>
    <Tab title="200" id="response-x-list-tweets-200">
      ```json theme={null}
      {
        "tweets": [],
        "has_next_page": false,
        "next_cursor": ""
      }
      ```
    </Tab>

    <Tab title="400" id="response-x-list-tweets-400">
      ```json theme={null}
      {
        "error": "invalid_input",
        "message": "Invalid input. Check the request body."
      }
      ```
    </Tab>

    <Tab title="401" id="response-x-list-tweets-401">
      ```json theme={null}
      {
        "error": "unauthenticated",
        "message": "Authentication required."
      }
      ```
    </Tab>

    <Tab title="402" id="response-x-list-tweets-402">
      ```json theme={null}
      {
        "error": "insufficient_credits",
        "message": "Insufficient credits. Top up or subscribe to continue."
      }
      ```
    </Tab>

    <Tab title="404" id="response-x-list-tweets-404">
      ```json theme={null}
      {
        "error": "not_found",
        "message": "Resource not found."
      }
      ```
    </Tab>

    <Tab title="409" id="response-x-list-tweets-409">
      ```json theme={null}
      {
        "error": "coverage_cursor_unavailable",
        "message": "Cursor busy. Retry after the indicated delay."
      }
      ```
    </Tab>

    <Tab title="410" id="response-x-list-tweets-410">
      ```json theme={null}
      {
        "error": "coverage_cursor_gone",
        "message": "Cursor finished, expired, or superseded. Restart pagination without cursor."
      }
      ```
    </Tab>

    <Tab title="424" id="response-x-list-tweets-424">
      ```json theme={null}
      {
        "error": "x_api_unavailable",
        "message": "X data source temporarily unavailable. Try again later."
      }
      ```
    </Tab>

    <Tab title="429" id="response-x-list-tweets-429">
      ```json theme={null}
      {
        "error": "rate_limit_exceeded",
        "message": "Too many requests. Try again later.",
        "retryAfter": 60
      }
      ```
    </Tab>

    <Tab title="502" id="response-x-list-tweets-502">
      ```json theme={null}
      {
        "error": "x_api_unavailable",
        "message": "X data source temporarily unavailable. Try again later."
      }
      ```
    </Tab>

    <Tab title="503" id="response-x-list-tweets-503">
      ```json theme={null}
      {
        "error": "x_api_unavailable",
        "message": "Maximum coverage is busy. Retry shortly."
      }
      ```
    </Tab>
  </Tabs>
</Panel>

<blockquote className="agent-llms-directive">
  For the complete documentation index, see <a href="/llms.txt">llms.txt</a>.
</blockquote>

<Note>
  Repost records include `retweetedAt`, the repost event's UTC ISO 8601 timestamp. It is `null` when
  that timestamp is unavailable. The API omits it for original posts. The nested original post keeps
  its own creation date. This field does not report every account that reposted a post. [Request
  per-account timestamps with Get retweeters.](/api-reference/x/retweeters#retweet-timestamps)
</Note>

This route retrieves tweets from one curated X List
timeline. Export Tweet text, authors, replies, reposts, likes, quotes, media,
and cursor pages. Provide the numeric List ID from its X URL.

## Twitter list tweets questions

### What does the Twitter lists API return?

The endpoint returns posts from accounts in one X List timeline. Each page can
include Tweet text, author profiles, timestamps, engagement counts, media, and
pagination fields.

The response represents one observed timeline window. It does not prove a
complete archive or permanent List membership.

### How do I export tweets from a Twitter list?

Request the first page with the numeric List ID. Normalize each Tweet into one
row. Store `has_next_page` beside `next_cursor` before requesting another page.

Use `sinceTime` and `untilTime` for a bounded collection window. Use
`list_post_extractor` for a saved CSV, JSON, or XLSX export.

### Why are some Twitter list tweets missing?

First, check `includeReplies`. The default excludes replies. Then verify any
`sinceTime` and `untilTime` boundaries.

Visibility also depends on the connected read context. X says protected posts
remain visible only to approved followers. You cannot see private Lists that other
accounts own. Read X's official [Help with Lists](https://help.x.com/en/using-x/x-lists-not-working)
for current visibility rules.

Remaining credits can reduce a paid page. New posts can also shift a moving
timeline between requests. A missing Tweet does not prove deletion.

### Can this endpoint create or edit a Twitter list?

No. This route only reads List tweets. It cannot create a public List or
private List. It cannot add members, remove members, follow Lists, or publish
posts.

Use X's [Lists guide](https://help.x.com/en/using-x/x-lists) to create and
manage Lists. Use the [List Members endpoint](/api-reference/x/list-members)
for the current profile roster.

### How do I measure activity in a curated list timeline?

Group rows by stable author ID. Count Tweets, replies, reposts, likes, quotes,
views, and media items separately. Store every count with its collection time.

These measures describe captured List tweets. They do not expose unique
viewers, link clicks, conversions, or audience sentiment.

### Does the API keep list tweet order?

Keep the returned Tweet sequence in every page. Do not treat that order as
permanent. New posts and membership changes can shift later requests.

Record collection time, List ID, and cursor with every page. Deduplicate
retries by stable Tweet ID without re-ranking the saved rows.

<Note>
  Requested result counts are upper bounds for paid authenticated calls. When remaining credits cannot cover the full page or ID list, Xquik returns fewer results. If zero paid results are affordable, it returns `402 insufficient_credits`.
</Note>

<Callout icon="coins" color="#5c3327">
  **1 credit per tweet returned** · [All plans](https://xquik.com/#pricing) from \$0.00012/credit
</Callout>

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://xquik.com/api/v1/x/lists/1234567890/tweets" \
    -H "x-api-key: xq_your_api_key_here" | jq
  ```

  ```javascript Node.js theme={null}
  const listId = "1234567890";
  const response = await fetch(`https://xquik.com/api/v1/x/lists/${listId}/tweets`, {
    headers: { "x-api-key": "xq_your_api_key_here" },
  });
  const data = await response.json();
  const tweetRows = data.tweets.map((tweet) => ({
    list_id: listId,
    tweet_id: tweet.id,
    text: tweet.text,
    author_id: tweet.author?.id ?? null,
    author_username: tweet.author?.username ?? null,
    author_name: tweet.author?.name ?? null,
    author_followers: tweet.author?.followers ?? null,
    author_verified: tweet.author?.verified ?? null,
    author_profile_picture: tweet.author?.profilePicture ?? null,
    created_at: tweet.createdAt ?? null,
    like_count: tweet.likeCount ?? null,
    reply_count: tweet.replyCount ?? null,
    retweet_count: tweet.retweetCount ?? null,
    media_urls: tweet.media?.map((item) => item.mediaUrl).filter(Boolean) ?? [],
  }));
  const nextCursor = data.has_next_page ? data.next_cursor : null;

  for (const row of tweetRows) {
    process.stdout.write(`${JSON.stringify(row)}\n`);
  }
  if (nextCursor !== null) {
    process.stdout.write(`${JSON.stringify({ list_id: listId, next_cursor: nextCursor })}\n`);
  }
  ```

  ```python Python theme={null}
  import json
  import requests

  list_id = "1234567890"
  response = requests.get(
      f"https://xquik.com/api/v1/x/lists/{list_id}/tweets",
      headers={"x-api-key": "xq_your_api_key_here"},
  )
  data = response.json()
  tweet_rows = [
      {
          "list_id": list_id,
          "tweet_id": tweet["id"],
          "text": tweet.get("text"),
          "author_id": (tweet.get("author") or {}).get("id"),
          "author_username": (tweet.get("author") or {}).get("username"),
          "author_name": (tweet.get("author") or {}).get("name"),
          "author_followers": (tweet.get("author") or {}).get("followers"),
          "author_verified": (tweet.get("author") or {}).get("verified"),
          "author_profile_picture": (tweet.get("author") or {}).get("profilePicture"),
          "created_at": tweet.get("createdAt"),
          "like_count": tweet.get("likeCount"),
          "reply_count": tweet.get("replyCount"),
          "retweet_count": tweet.get("retweetCount"),
          "media_urls": [
              item["mediaUrl"]
              for item in tweet.get("media", [])
              if item.get("mediaUrl")
          ],
      }
      for tweet in data["tweets"]
  ]
  next_cursor = data["next_cursor"] if data["has_next_page"] else None

  for row in tweet_rows:
      print(json.dumps(row))
  if next_cursor is not None:
      print(json.dumps({"list_id": list_id, "next_cursor": next_cursor}))
  ```
</CodeGroup>

The Node.js & Python snippets build one row per returned list tweet.
They do not print the full response page. Store the final `next_cursor`
row when `has_next_page` is true, then pass it back as `cursor` for the next
page.

## Direct list tweet handoff

Use `GET /x/lists/{id}/tweets` when a CRM, warehouse, newsroom, monitoring
job, or agent needs tweets from a curated X List.

Store `list_id`, `tweet_id`, `text`, `author_id`, `author_username`,
`author_name`, `author_followers`, `author_verified`,
`author_profile_picture`, `created_at`, engagement counts, & `media_urls` for
each row. Keep `has_next_page` & `next_cursor` with the export checkpoint. The
next run can then resume the list timeline without duplicating earlier rows.

Use `sinceTime` & `untilTime` for bounded backfills. Set
`includeReplies=true` only when your queue needs reply tweets.

<CardGroup cols={2}>
  <Card title="List tweet rows" icon="message-square-text">
    Store `tweets[]` as timeline rows from accounts in the list. Use the row
    shape above for newsroom, monitoring, CRM, and warehouse imports.
  </Card>

  <Card title="Next page" icon="arrow-right">
    Store `has_next_page` and `next_cursor`. Only request another page when
    `has_next_page` is true.
  </Card>

  <Card title="Default page" icon="rows-3">
    Direct calls use the default paid tweet page size. The returned
    `tweets.length` is the row count for this page.
  </Card>

  <Card title="Time window" icon="calendar-range">
    Use `sinceTime` and `untilTime` for bounded backfills or repeat sync jobs.
  </Card>

  <Card title="Reply filter" icon="message-square-reply">
    Leave `includeReplies` unset to exclude replies. Set
    `includeReplies=true` only when your queue needs reply tweets.
  </Card>

  <Card title="Saved export" icon="file-spreadsheet">
    Use `list_post_extractor` when the workflow needs a saved job with
    CSV, JSON, or XLSX output.
  </Card>
</CardGroup>

## Build a curated-list tweet feed

Use list tweets when a list ID defines the source accounts. Keep the list ID
and collection time with every tweet.

Save tweet ID, text, author, creation time, engagement counts, media URLs, and
cursor. Keep the author ID because list membership can change later.

Use this feed for research queues, newsroom monitoring, or account-group
review. It represents tweets from curated list members, not tweets mentioning
the list.

Deduplicate pages by list ID and tweet ID. Store each page before advancing
its cursor. New posts can shift the first page between runs.

Use list members for the curated profile roster. Use list followers for the
list's audience. Use tweet search when keywords should define the result set.

## Path parameters

<ParamField path="id" type="string" required>
  List ID (numeric string).
</ParamField>

## Query parameters

<ParamField query="cursor" type="string">
  Pagination cursor from a previous response. Omit for the first page.
</ParamField>

<ParamField query="after" type="string">
  Legacy `cursor` alias on automatic pages.
</ParamField>

<ParamField query="pageSize" type="integer">
  Tweets per page. Range: `1-100`. Defaults to `20`.
</ParamField>

<ParamField query="sinceTime" type="string">
  Unix timestamp in seconds. Only return tweets after this time.
</ParamField>

<ParamField query="untilTime" type="string">
  Unix timestamp in seconds. Only return tweets before this time.
</ParamField>

<ParamField query="includeReplies" type="boolean">
  Include reply tweets. Default: `false`. Explicit `replies` takes precedence.
</ParamField>

<ParamField query="mode" type="string">
  Omit it for resumable maximum coverage. Use `standard` for legacy pagination, or
  `coverage` for one diagnostic response without a cursor.
</ParamField>

### Tweet filters

Search operators such as `cardName` or `near` make the read search the List
first. Xquik applies the other filters to each page's rows before billing.

<ParamField query="fromUser" type="string">
  Filter to posts from this username. The `@` prefix is optional.
</ParamField>

<ParamField query="toUser" type="string">
  Filter to replies directed to this username.
</ParamField>

<ParamField query="mentioning" type="string">
  Filter to posts that mention this username.
</ParamField>

<ParamField query="language" type="string">
  Only include posts with this language code.
</ParamField>

<ParamField query="sinceDate" type="string">
  Include posts created on or after this date or timestamp.
</ParamField>

<ParamField query="untilDate" type="string">
  Include posts up to this date or timestamp. A date is a UTC day, inclusive, so its own posts count.
</ParamField>

<ParamField query="mediaType" type="string">
  Use `images`, `videos`, `gifs`, `media`, `links`, or `none`.
</ParamField>

<ParamField query="minLikes" type="integer">
  Require this minimum like count.
</ParamField>

<ParamField query="minRetweets" type="integer">
  Require this minimum repost count.
</ParamField>

<ParamField query="minReplies" type="integer">
  Require this minimum reply count.
</ParamField>

<ParamField query="minQuotes" type="integer">
  Require this minimum quote count.
</ParamField>

<ParamField query="minViews" type="integer">
  Require this minimum view count.
</ParamField>

<ParamField query="minBookmarks" type="integer">
  Require this minimum bookmark count.
</ParamField>

<ParamField query="maxFaves" type="integer">
  Allow this maximum like count. Missing counts pass.
</ParamField>

<ParamField query="maxRetweets" type="integer">
  Allow this maximum repost count. Missing counts pass.
</ParamField>

<ParamField query="maxReplies" type="integer">
  Allow this maximum reply count. Missing counts pass.
</ParamField>

<ParamField query="maxQuotes" type="integer">
  Allow this maximum quote count. Missing counts pass.
</ParamField>

<ParamField query="blueVerifiedOnly" type="boolean">
  When `true`, only return posts from Blue-verified authors.
</ParamField>

<ParamField query="verifiedOnly" type="boolean">
  When `true`, only return posts from verified authors.
</ParamField>

<ParamField query="replies" type="string">
  Use `include`, `exclude`, or `only` for replies.
  This setting overrides `includeReplies` when the endpoint supports both.
</ParamField>

<ParamField query="retweets" type="string">
  Use `include`, `exclude`, or `only` for reposts.
</ParamField>

<ParamField query="exactPhrase" type="string">
  Match this literal phrase, including any hyphens.
</ParamField>

<ParamField query="excludeWords" type="string">
  Exclude comma-separated or whitespace-separated terms.
</ParamField>

<ParamField query="anyWords" type="string">
  Require at least 1 comma-separated or whitespace-separated term.
</ParamField>

<ParamField query="hashtags" type="string">
  Match these hashtags. Separate values with commas or spaces.
</ParamField>

<ParamField query="cashtags" type="string">
  Match these cashtags. Separate values with commas or spaces.
</ParamField>

<ParamField query="quotes" type="string">
  Use `include`, `exclude`, or `only` for quote posts.
</ParamField>

<ParamField query="url" type="string">
  URL substring or domain that must appear in tweet URL entities.
</ParamField>

<ParamField query="conversationId" type="string">
  Filter to tweets in this conversation thread.
</ParamField>

<ParamField query="inReplyToTweetId" type="string">
  Only include replies to this tweet ID.
</ParamField>

<ParamField query="quotesOfTweetId" type="string">
  Filter to quote tweets of this tweet ID.
</ParamField>

<ParamField query="retweetsOfTweetId" type="string">
  Filter to retweets of this tweet ID.
</ParamField>

<ParamField query="cardName" type="string">
  Keep only Tweets with this card type, such as `poll2choice_text_only`. Tweet
  search checks each Tweet's card.
</ParamField>

<ParamField query="source" type="string">
  X search no longer supports `source`. A Tweet search with it answers 424 &
  charges nothing.
</ParamField>

<ParamField query="excludeSource" type="string">
  X search no longer supports `excludeSource`. A Tweet search with it answers 424
  & charges nothing.
</ParamField>

<ParamField query="geocode" type="string">
  X search no longer supports `geocode`. A Tweet search with it answers 424 &
  charges nothing.
</ParamField>

<ParamField query="near" type="string">
  Match this place name.
</ParamField>

<ParamField query="within" type="string">
  X search no longer supports `within`. A Tweet search with it answers 424 &
  charges nothing. Use `near` alone.
</ParamField>

<ParamField query="safe" type="boolean">
  When `true`, enable X safe-search filtering.
</ParamField>

<ParamField query="news" type="boolean">
  X no longer searches `filter:news`, so leave this unset.
</ParamField>

<ParamField query="sinceId" type="string">
  Return Tweets whose IDs exceed this ID.
</ParamField>

<ParamField query="maxId" type="string">
  Return Tweets at or below this ID.
</ParamField>

<ParamField query="nativeRetweets" type="boolean">
  When `true`, only return native reposts.
</ParamField>

<ParamField query="withinTime" type="string">
  Match Tweets from this recent window, such as `90m` or `7d`. Use a whole number & `s`, `m`, `h` or `d`.
</ParamField>

<ParamField query="keywords" type="string">
  Words the Tweets must match, in X search syntax.
</ParamField>

<ParamField query="place" type="string">
  Search within this X place ID. [Search places](/api-reference/x/search-places) finds the ID by name.
</ParamField>

<ParamField query="placeCountry" type="string">
  Search within this country code.
</ParamField>

<ParamField query="pointRadius" type="string">
  Geo point radius in X search syntax, such as `-73.99 40.73 25mi`.
</ParamField>

<ParamField query="boundingBox" type="string">
  Geo bounding box in X search syntax, such as `-74.1 40.6 -73.9 40.8`.
</ParamField>

<ParamField query="advancedQuery" type="string">
  Raw X search operators appended to the final search query.
</ParamField>

## Which list endpoint?

<CardGroup cols={2}>
  <Card title="List tweets" icon="message-square-text">
    Use `GET /x/lists/{id}/tweets` for tweets from accounts in the list.
  </Card>

  <Card title="List members" icon="users">
    Use [`GET /x/lists/{id}/members`](/api-reference/x/list-members) for
    accounts the list owner added to the list.
  </Card>

  <Card title="List followers" icon="user-plus">
    Use [`GET /x/lists/{id}/followers`](/api-reference/x/list-followers) for
    accounts that follow the list.
  </Card>

  <Card title="Bulk list jobs" icon="file-spreadsheet">
    Use [`Create extraction`](/api-reference/extractions/create) with
    `list_post_extractor`, `list_member_extractor`, or `list_follower_explorer`
    when the workflow needs a saved export.
  </Card>
</CardGroup>

## Headers

<ParamField header="x-api-key" type="string">
  Full account key. Sessions and OAuth also work.
</ParamField>

<ParamField header="Authorization" type="string">
  `Bearer xq_your_guest_key_here` for `paid_reads`.
</ParamField>

## Response

### 200 OK

<ResponseField name="tweets" type="object[]">
  Array of tweets from the list.
  **Tweet object fields.**

  <ResponseField name="id" type="string">Tweet ID.</ResponseField>
  <ResponseField name="text" type="string">Contains the complete Tweet text.</ResponseField>
  <ResponseField name="type" type="string">Classifies the Tweet when X returns a type.</ResponseField>
  <ResponseField name="createdAt" type="string">ISO 8601 creation timestamp.</ResponseField>
  <ResponseField name="isNoteTweet" type="boolean">Whether this is a Note Tweet. Omitted if unavailable.</ResponseField>
  <ResponseField name="isPinned" type="boolean">Whether the author pinned this post to their profile. Omitted if unavailable.</ResponseField>
  <ResponseField name="likeCount" type="number">Reports the number of likes when available.</ResponseField>
  <ResponseField name="retweetCount" type="number">Reports the number of reposts when available.</ResponseField>
  <ResponseField name="replyCount" type="number">Reports the number of replies when available.</ResponseField>
  <ResponseField name="quoteCount" type="number">Reports the number of quotes when available.</ResponseField>
  <ResponseField name="viewCount" type="number">Reports the number of views when available.</ResponseField>
  <ResponseField name="bookmarkCount" type="number">Reports the number of bookmarks when available.</ResponseField>
  <ResponseField name="url" type="string">Permalink URL on X. Omitted if unavailable.</ResponseField>
  <ResponseField name="lang" type="string">Reports the Tweet language code when available.</ResponseField>
  <ResponseField name="isReply" type="boolean">Whether the tweet is a reply. Omitted if unavailable.</ResponseField>
  <ResponseField name="inReplyToId" type="string">Tweet ID being replied to. Omitted if not a reply.</ResponseField>
  <ResponseField name="inReplyToUserId" type="string">Identifies the replied-to user when available.</ResponseField>
  <ResponseField name="inReplyToUsername" type="string">Reports the replied-to username when available.</ResponseField>
  <ResponseField name="conversationId" type="string">Conversation thread ID. Omitted if unavailable.</ResponseField>
  <ResponseField name="source" type="string">Client used to post the tweet. Omitted if unavailable.</ResponseField>
  <ResponseField name="displayTextRange" type="number[]">Start and end offsets for rendered tweet text. Omitted if unavailable.</ResponseField>
  <ResponseField name="isLimitedReply" type="boolean">Whether replies are limited. Omitted if unavailable.</ResponseField>
  <ResponseField name="isQuoteStatus" type="boolean">Whether this tweet quotes another tweet. Omitted if unavailable.</ResponseField>
  <ResponseField name="isRetweet" type="boolean">Whether this row is a retweet. `text` carries the original post in full.</ResponseField>
  <ResponseField name="entities" type="object">Parsed entities. Omitted if unavailable.</ResponseField>
  <ResponseField name="contentDisclosure" type="object">Returns paid-promotion and AI-generated-media labels when available. Includes `advertising.isPaidPromotion` and `aiGenerated.hasAiGeneratedMedia`.</ResponseField>

  <ResponseField name="author" type="object">
    Tweet author profile. Omitted if unavailable.
    **Author object fields.**
    <ResponseField name="id" type="string">Author user ID.</ResponseField>
    <ResponseField name="username" type="string">Author X username.</ResponseField>
    <ResponseField name="name" type="string">Author display name.</ResponseField>
    <ResponseField name="followers" type="number">Reports the author's follower count when available.</ResponseField>
    <ResponseField name="verified" type="boolean">Whether the author is verified. Omitted if unavailable.</ResponseField>
    <ResponseField name="profilePicture" type="string">Profile picture URL. Omitted if unavailable.</ResponseField>
  </ResponseField>

  <ResponseField name="media" type="object[]">
    Lists media items attached to the Tweet. Omitted when none exist.
    **Media object fields.**
    <ResponseField name="mediaUrl" type="string">Provides the direct media URL.</ResponseField>
    <ResponseField name="videoVariants" type="object[]">Lists available video renditions and playback details. Omitted for images.</ResponseField>
    <ResponseField name="type" type="string">Identifies the attached media type.</ResponseField>
    <ResponseField name="url" type="string">Shortened URL from the tweet text.</ResponseField>
  </ResponseField>

  <ResponseField name="quoted_tweet" type="object">Embedded quoted tweet. Omitted if not a quote tweet.</ResponseField>
  <ResponseField name="retweeted_tweet" type="object">Original retweeted tweet. Omitted if not a retweet.</ResponseField>
</ResponseField>

<ResponseField name="has_next_page" type="boolean">Whether more results are available.</ResponseField>
<ResponseField name="next_cursor" type="string">Cursor for the next page. Pass as the `cursor` query parameter.</ResponseField>

```json theme={null}
{
  "tweets": [
    {
      "id": "1893456789012345678",
      "text": "Hello from a list!",
      "createdAt": "2026-03-27T10:00:00.000Z",
      "likeCount": 42,
      "retweetCount": 5,
      "viewCount": 1200,
      "author": {
        "id": "987654321",
        "username": "username",
        "name": "Xquik",
        "followers": 12400,
        "verified": true,
        "profilePicture": "https://pbs.twimg.com/profile_images/example.jpg"
      }
    }
  ],
  "has_next_page": true,
  "next_cursor": "DAACCgACGE..."
}
```

### 400 Invalid list ID

```json theme={null}
{ "error": "invalid_list_id", "message": "List ID required" }
```

The list ID path parameter is empty.

### 401 Unauthenticated

Anonymous requests get `WWW-Authenticate: Bearer` and a guest wallet checkout action. This is not a Payment challenge.

```json theme={null}
{ "error": "unauthenticated" }
```

Missing or invalid API key.

### 402 Payment required

Account keys get account options. Guest keys get guest top-up only.
No checkout starts automatically. Confirm any payment action.

### 404 List not found

```json theme={null}
{ "error": "not_found" }
```

Xquik could not resolve the list. Check the list ID.

### 502 X API unavailable

```json theme={null}
{ "error": "x_api_unavailable" }
```

The read service returned an error. Retry after a short delay.

### 429 Rate limit exceeded

```json theme={null}
{ "error": "rate_limit_exceeded", "retryAfter": 60 }
```

You exceeded your tier rate limit. Wait for the `Retry-After` header before retrying.

### 424 Dependency failed

```json theme={null}
{ "error": "x_api_unavailable" }
```

The normalized v1 response contract can return 424 when the read service is unavailable.

<Note>
  **Related.** [List Members](/api-reference/x/list-members) · [List Followers](/api-reference/x/list-followers)
</Note>

<div className="related-api-links">
  <Accordion title="Related tweet, reply & media APIs" icon="link">
    * Tweets: [Get tweet](/api-reference/x/get-tweet) · [Batch tweets](/api-reference/x/batch-tweets) · [Tweet thread](/api-reference/x/tweet-thread) · [Hidden replies](/api-reference/x/tweet-hidden-replies) · [Translate tweet](/api-reference/x/tweet-translation) · [Embed tweet](/api-reference/x/tweet-embed) · [Resolve links](/api-reference/x/resolve-links) · [Tweet subtitles](/api-reference/x/tweet-subtitles) · [X Article](/api-reference/x/get-article)
    * Analysis: [Sentiment analysis](/api-reference/x/sentiment-analysis) · [Brand mentions](/api-reference/x/brand-monitoring) · [News classification](/api-reference/x/news-classification) · [Market signals](/api-reference/x/market-signals) · [Viral score](/api-reference/x/viral-score) · [Classify posts](/api-reference/x/classify-tweets)
    * Engagement: [Tweet replies](/api-reference/x/tweet-replies) · [Quote tweets](/api-reference/x/tweet-quotes) · [Likers](/api-reference/x/favoriters) · [Reposters](/api-reference/x/retweeters) · [Check repost](/api-reference/x/tweet-repost-check)
    * Profiles: [User tweets](/api-reference/x/user-tweets) · [Batch user tweets](/api-reference/x/batch-user-tweets) · [User replies](/api-reference/x/user-replies) · [User likes](/api-reference/x/user-likes) · [User media](/api-reference/x/user-media) · [User highlights](/api-reference/x/user-highlights) · [User articles](/api-reference/x/user-articles)
    * Feeds: [List tweets](/api-reference/x/list-tweets) · [Trends](/api-reference/x/trends) · [Trend locations](/api-reference/x/trend-locations) · [Search Spaces](/api-reference/x/search-spaces) · [Get Space](/api-reference/x/get-space) · [Space replay](/api-reference/x/space-replay) · [Get broadcast](/api-reference/x/get-broadcast) · [Hashflags](/api-reference/x/hashflags) · [Search places](/api-reference/x/search-places) · [Download media](/api-reference/x/download-media)
  </Accordion>
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.