---
title: "List followers of a user"
method: GET
path: "/x/users/{id}/followers"
tags: ["Users"]
---

# List followers of a user

`GET /x/users/{id}/followers`

## Path parameters

- `id` string, required

## Query parameters

- `cursor` string
- `mode` 'standard' | 'coverage'
- `after` string
- `pageSize` integer
- `minFollowers` integer
- `maxFollowers` integer
- `minFollowing` integer
- `maxFollowing` integer
- `minStatuses` integer
- `maxStatuses` integer
- `minAccountAgeDays` integer
- `verifiedOnly` boolean
- `verifiedType` string
- `hasWebsite` boolean
- `hasLocation` boolean
- `bioContains` string
- `locationContains` string
- `usernameContains` string
- `limit` integer

## Response `200`

List of user followers

- union
  - PaginatedUsers — Paginated user profiles. No-mode follower, following, and verified follower requests merge independent views automatically. Response fields, page size, aliases, filters, and per-returned-profile billing stay unchanged. Existing unprefixed cursors retain legacy behavior. Follow next_cursor while has_next_page is true.
    - `users` UserProfile[], required
      - `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
      - `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
      - `affiliatesHighlightedLabel` UserAffiliateLabel — Organization affiliation label shown on an X profile.
        - `badgeUrl` string
        - `description` string
        - `url` string
        - `urlType` string
        - `userLabelDisplayType` string
        - `userLabelType` string
      - `businessAccountAffiliatesCount` integer
      - `creatorSubscriptionsCount` integer
      - `hasGraduatedAccess` boolean
      - `hasHiddenSubscriptionsOnProfile` boolean
      - `highlightsInfo` UserHighlightsInfo — Profile highlight availability and count metadata.
        - `canHighlightTweets` boolean
        - `highlightedTweets` string
      - `identityVerification` UserIdentityVerification — Identity verification metadata displayed by X.
        - `description` string
        - `isIdentityVerified` boolean
        - `verifiedSinceMsec` string
      - `isProfileTranslatable` boolean
      - `parodyCommentaryFanLabel` string
      - `profileDescriptionLanguage` string
      - `profileImageShape` string
      - `profileInterstitialType` string
      - `profileSortEnabled` boolean
      - `profileTranslatorType` string
      - `superFollowEligible` boolean
      - `communityRole` string — Community role when returned by community member reads
      - `profile_bio` object — Structured profile bio with entity annotations
    - `has_next_page` boolean, required
    - `next_cursor` string, required
  - UserListCoverageResponse — Paginated user profiles. No-mode follower, following, and verified follower requests merge independent views automatically. Response fields, page size, aliases, filters, and per-returned-profile billing stay unchanged. Existing unprefixed cursors retain legacy behavior. Follow next_cursor while has_next_page is true.
    - `users` UserProfile[], required
      - `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
      - `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
      - `affiliatesHighlightedLabel` UserAffiliateLabel — Organization affiliation label shown on an X profile.
        - `badgeUrl` string
        - `description` string
        - `url` string
        - `urlType` string
        - `userLabelDisplayType` string
        - `userLabelType` string
      - `businessAccountAffiliatesCount` integer
      - `creatorSubscriptionsCount` integer
      - `hasGraduatedAccess` boolean
      - `hasHiddenSubscriptionsOnProfile` boolean
      - `highlightsInfo` UserHighlightsInfo — Profile highlight availability and count metadata.
        - `canHighlightTweets` boolean
        - `highlightedTweets` string
      - `identityVerification` UserIdentityVerification — Identity verification metadata displayed by X.
        - `description` string
        - `isIdentityVerified` boolean
        - `verifiedSinceMsec` string
      - `isProfileTranslatable` boolean
      - `parodyCommentaryFanLabel` string
      - `profileDescriptionLanguage` string
      - `profileImageShape` string
      - `profileInterstitialType` string
      - `profileSortEnabled` boolean
      - `profileTranslatorType` string
      - `superFollowEligible` boolean
      - `communityRole` string — Community role when returned by community member reads
      - `profile_bio` object — Structured profile bio with entity annotations
    - `has_next_page` false, required
    - `next_cursor` '', required
    - `diagnostic` UserListCoverageDiagnostic, required — Coverage evidence across parallel relationship strategies.
      - `complete` boolean, required — True when every strategy exhausted its source.
      - `cursorFailureCount` integer, required
      - `deadlineReached` boolean, required
      - `duplicateCount` integer, required
      - `failedStrategyCount` integer, required
      - `malformedCount` integer, required
      - `pagesFetched` integer, required
      - `responseTruncated` boolean, required — Whether credits or the requested limit reduced output.
      - `resultLimitReached` boolean, required
      - `returnedUsers` integer, required
      - `stalledStrategyCount` integer, required
      - `strategies` UserListCoverageStrategy[], required
        - `duplicateCount` integer, required
        - `pagesFetched` integer, required
        - `stopReason` 'cursor_failure' | 'deadline' | 'exhausted' | 'failed' | 'page_limit' | 'result_limit' | 'stalled', required
        - `strategy` integer, required
        - `uniqueAdded` integer, required
      - `strategyCount` integer, required
      - `uniqueUsers` integer, 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.
- `404` — Not found
- `409` — Automatic coverage cursor expired or is already in use.
- `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.
- `503` — Automatic or explicit maximum coverage is temporarily busy.

---

[API](https://skmtc.net/xquik-dev/apis/xquik-api-3.md) · [All operations](https://skmtc.net/xquik-dev/apis/xquik-api-3/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/xquik-dev/xquik-api-3/revisions/4839804dc9da/schema)
