> ## 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 community posts API & X timeline export

> Export X community tweets with authors, text, replies, reposts, likes, quotes, and media. Traverse cursor pages or save CSV, JSON, and XLSX exports for reviews.

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

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

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

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

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

    <Tab title="424" id="response-x-community-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-community-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-community-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-community-tweets-503">
      ```json theme={null}
      {
        "error": "x_api_unavailable",
        "message": "Xquik is busy right now. 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>

<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="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>

Export Twitter community posts from one known Community timeline. Keep Tweet
text, authors, engagement counts, media, and cursor state. Save live pages or CSV, JSON, and XLSX exports.
This Twitter community scraping guide builds a community timeline export from
cursor pages.

## Archive the unfiltered community feed

This endpoint accepts a community ID without a keyword. It keeps the
returned feed order for timeline archives, content review, and moderation.

| Feed decision | Request or response field | Archive rule |
| - | - | - |
| Community scope | Path `{id}` | Keep this ID on every exported tweet row. |
| Feed coverage | No `q` parameter | Archive posts without text filtering. |
| Returned order | Response tweet sequence | Keep the order. Do not re-rank rows. |
| Continuation | `has_next_page` and `next_cursor` | Save each page before advancing. |
| Duplicate control | Tweet `id` | Deduplicate pages by tweet ID, because new posts shift the feed. |
| Saved export | `community_post_extractor` | Produce CSV, JSON, or XLSX timeline files. |

Send `queryType=Top` for the Community's Top posts, the ones X ranks highest.
Send it again with each `cursor`.
The first page opens with the post the Community pinned, as x.com shows it.
That post has `isPinned: true`, and later pages leave it out.
Choose Community Search for keyword filters.
For photo and video posts only, use [Community media](/api-reference/x/community-media).

## X community tweet export questions

### Export community tweets

Call `GET /api/v1/x/communities/{id}/tweets` for the recent community feed.
Keep the Community ID, Tweet ID, text, author, creation time, and media. Store
each returned engagement count and cursor checkpoint.

Choose Community Search when the workflow requires a keyword. Feed retrieval
returns recent posts. Search returns posts that match a query.

Save each page and cursor before requesting another page.
Deduplicate by stable Tweet ID when new posts enter the feed. Record Community
ID, Tweet ID, author ID, text, and creation time. Store each engagement count
with media and collection timestamps.
Label interrupted, result-capped, or credit-bounded collections as partial.

### Are Twitter community posts public or private?

X says Community posts can appear on the Community page, profiles, global
search, and other timelines. Read the official
[Communities guide](https://help.x.com/en/using-x/communities) for current
visibility and participation rules. A restricted membership policy does not
make every visible Community post private.

This endpoint returns posts available to the read service for the requested
Community. A missing Tweet does not prove deletion, privacy, or moderation.
Store the collection time and observed cursor window with every export.

### Where can I find analytics for X community posts?

Use the returned reply, repost, like, quote, view, and bookmark counts when
available. Keep each count beside its Tweet ID and collection time. Compare
complete snapshots to measure changes without rewriting the original values.

Calculate concrete measures from the captured rows:

* Unique Tweet IDs and authors.
* Earliest and latest creation times.
* Replies, reposts, likes, quotes, views, and bookmarks.
* Tweets with photos, videos, or animated GIFs.
* Repeated Tweet IDs removed after retries.

Use these fields to analyze Community engagement. They do not expose unique
viewers, link clicks, conversions, or moderation decisions. Never invent a
missing metric or replace it with zero.

### Do I need to join a community to export community tweets?

This read route never changes membership. It exports Community posts visible
to the connected read context. An export never proves membership.
Use X's Communities tab to join a Community.

### What rules apply to members posting in communities?

Each Community sets its posting rules for members. X controls posting access,
membership, visibility, and moderation. Community moderators manage roles
through X. Xquik reads visible community content without changing those
settings.

### Can this API schedule or moderate community posts?

No. This route reads a Community feed. It cannot publish, schedule, hide,
report, or remove posts. Use X's own Community tools for role changes and
moderation actions.

Use the captured community content to prepare a review queue. Require a human
decision before any moderation action. Keep private review notes outside Tweet
text, author profiles, and exported engagement fields.

### What does the Twitter community API return?

The member route returns community profiles. The tweet route returns community
posts and author fields. The info route returns community details. Moderator
and search routes return their own records.

Choose one route per task. Do not combine profile membership and tweet activity
in one row. Join them later with stable user and community IDs.

### How do I build a complete community tweet export?

Save every page and cursor before requesting another page.
Deduplicate Tweet IDs when new posts change the live feed. Record the
first and last observed Tweet timestamps.

Use a saved Community extraction for CSV, JSON, or XLSX exports. Keep direct
API pages for live ingestion. Mark interrupted or credit-bounded runs as
partial.

<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/communities/1234567890/tweets \
    -H "x-api-key: xq_your_api_key_here" | jq
  ```

  ```javascript Node.js theme={null}
  const communityId = "1234567890";
  const response = await fetch(`https://xquik.com/api/v1/x/communities/${communityId}/tweets`, {
    headers: { "x-api-key": "xq_your_api_key_here" },
  });
  const data = await response.json();
  const nextCursor = data.has_next_page && data.next_cursor ? data.next_cursor : null;
  const tweetRows = data.tweets.map((tweet) => ({
    community_id: communityId,
    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) ?? [],
    has_next_page: data.has_next_page,
    next_cursor: nextCursor,
  }));

  process.stdout.write(JSON.stringify(tweetRows, null, 2));
  ```

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

  community_id = "1234567890"
  response = requests.get(
      f"https://xquik.com/api/v1/x/communities/{community_id}/tweets",
      headers={"x-api-key": "xq_your_api_key_here"},
  )
  data = response.json()
  next_cursor = data.get("next_cursor") if data.get("has_next_page") else None
  tweet_rows = [
      {
          "community_id": community_id,
          "tweet_id": tweet["id"],
          "text": tweet["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")
          ],
          "has_next_page": data.get("has_next_page", False),
          "next_cursor": next_cursor,
      }
      for tweet in data["tweets"]
  ]

  print(json.dumps(tweet_rows, indent=2))
  ```
</CodeGroup>

## Direct community tweet handoff

Use `GET /x/communities/{id}/tweets` for community monitoring, content review,
post exports, or moderation queues. It creates one row per community tweet.
Store each Tweet ID in its own record. Keep the Community ID, author, text,
creation time, engagement counts, media, and cursor checkpoint.

<CardGroup cols={2}>
  <Card title="Community tweet rows" icon="message-square-text">
    Store one row per post in the community. Keep author fields and engagement
    counts with the tweet row for review queues and exports.
  </Card>

  <Card title="Next page" icon="arrow-right">
    Keep `has_next_page` beside `next_cursor` for each page. Continue only when
    `has_next_page` is `true` and `next_cursor` is present.
  </Card>

  <Card title="Default page" icon="rows-3">
    Request 1 to 100 tweets with `pageSize`. The default is 20. The value
    is an upper bound because the source or available credits can return fewer.
  </Card>

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

## Audit a cursor-based community feed

Start each feed run with one numeric community ID. Record the request time and
requested `pageSize`. Do not add a keyword to this route. Use community search
when the workflow needs text matching.

Save every response before advancing its cursor. Record `has_next_page` beside
`next_cursor` for each response. Continue only when `has_next_page` is true and
`next_cursor` is present. Reuse `next_cursor` without modification.

Count returned rows and unique Tweet IDs after each page. A busy community can
receive new posts during pagination. Deduplicate repeated Tweet IDs without
discarding richer author, engagement, or media fields.

Keep the first and last tweet timestamps for every run. They describe the
observed feed window. They do not prove a complete historical archive. Label
result caps, credit limits, and interrupted cursors on the run.

Store a completion record after the final page. Include community ID, page
count, unique Tweet count, first timestamp, and last timestamp. Add collection
time and the interrupted cursor when applicable. Store a final
`has_next_page` value of `false` for a completed cursor chain.

## Keep community tweet authors and media

Store each stable Tweet ID in its own record. Keep author ID, username, profile
name, and verification when returned. Separate Tweet content from author
attributes.

Keep replies, reposts, likes, and quotes as measured engagement fields. Store
their ISO 8601 collection time. Counts can change after publication.

Store each media URL with its owning Tweet ID. Keep media type when available.
Do not infer missing images or videos from tweet text. Do not move media URLs
into an author profile column.

Use JSON when an application needs nested authors or media. Use CSV when
analysts need one normalized row. Use XLSX for reviewed spreadsheet handoffs.
Document any column flattening beside the exported file.

Join later profile snapshots through stable author ID. Usernames and profile
names can change. Store Tweet creation times separately from later
profile checks.

## Compare community timeline snapshots

Create a new snapshot ID for every completed feed run. Keep the same community
ID across snapshots. Compare stable Tweet IDs before engagement counts.

Report newly observed tweets separately from changed tweet fields. A missing
Tweet ID may reflect the observed window. It does not prove deletion from X.

Compare authors through stable user IDs. Report username or profile changes as
attributes. Do not treat them as new authors.

Mark every incomplete run before comparison. Exclude partial snapshots from
claims about feed growth or activity. Keep their rows for troubleshooting
and cursor recovery.

Keep the request time, page count, row count, and completion state. With these
fields, another reviewer can repeat the comparison.

## Path parameters

<ParamField path="id" type="string" required>
  Community 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="pageSize" type="number">
  Upper bound for tweets per page. Range: 1-100. Default: `20`.
</ParamField>

<ParamField query="queryType" type="string" default="Latest">
  `Latest` for newest posts first, or `Top` for the posts X ranks highest. Any case. Aliases: `ranking` and `sort`, which also take `Recency` and `Relevance`. Another value returns `400 invalid_params`. Send the same value with each `cursor`.
</ParamField>

## Which community endpoint?

<CardGroup cols={2}>
  <Card title="Community tweets" icon="message-square-text">
    Use `GET /x/communities/{id}/tweets` for posts from one known community.
  </Card>

  <Card title="Community tweet search" icon="search">
    Use [`GET /x/communities/tweets`](/api-reference/x/community-search)
    with `communityId` and `q` to search within one community.
  </Card>

  <Card title="Community members" icon="users">
    Use [`GET /x/communities/{id}/members`](/api-reference/x/community-members)
    for account rows from the same community.
  </Card>

  <Card title="Bulk community jobs" icon="file-spreadsheet">
    Use [`Create extraction`](/api-reference/extractions/create) with
    `community_post_extractor`, `community_extractor`, or
    `community_moderator_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 community tweets.
  **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": "Community post content",
      "createdAt": "2026-02-24T10:00:00.000Z",
      "likeCount": 150,
      "retweetCount": 42,
      "replyCount": 10,
      "viewCount": 12400,
      "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 community ID

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

The community ID is empty or invalid.

### 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 Community not found

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

Xquik could not resolve the Community. Check the Community 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 }
```

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

### 424 Dependency failed

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

The read service was unavailable. Retry after a short delay.

<Note>
  **Next steps.** [Community Info](/api-reference/x/community-info) for community details, or [Community Members](/api-reference/x/community-members) to list members.
</Note>

<div className="related-api-links">
  <Accordion title="Related follower, list & community APIs" icon="link">
    * Profiles: [Search users](/api-reference/x/search-users) · [Search autocomplete](/api-reference/x/search-autocomplete) · [Get user](/api-reference/x/twitter-profile-lookup) · [Batch users](/api-reference/x/batch-users)
    * Followers: [Followers](/api-reference/x/followers) · [Following](/api-reference/x/following) · [Follower IDs](/api-reference/x/follower-ids) · [Following IDs](/api-reference/x/following-ids) · [Creator subscriptions](/api-reference/x/user-subscriptions) · [Affiliates](/api-reference/x/user-affiliates) · [Similar accounts](/api-reference/x/user-similar) · [Verified followers](/api-reference/x/verified-followers) · [Followers you know](/api-reference/x/followers-you-know) · [Check follower](/api-reference/x/check-follower)
    * Lists: [Search lists](/api-reference/x/search-lists) · [User lists](/api-reference/x/user-lists) · [List memberships](/api-reference/x/user-list-memberships) · [List members](/api-reference/x/list-members) · [List followers](/api-reference/x/list-followers)
    * Communities: [Find](/api-reference/x/community-find) · [Popular](/api-reference/x/community-popular) · [Topics](/api-reference/x/community-topics) · [Suggested](/api-reference/x/community-suggested) · [Details](/api-reference/x/community-info) · [Members](/api-reference/x/community-members) · [Moderators](/api-reference/x/community-moderators) · [Timeline](/api-reference/x/community-tweets) · [Media](/api-reference/x/community-media) · [Keyword search](/api-reference/x/community-search)
  </Accordion>
</div>


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