> ## 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.

# Fake follower checker API for X (Twitter) accounts

> Audit the newest followers of an X (Twitter) account. Get each follower's class, a quality score, signal counts & arrival bands. 1 credit per follower.

> For the complete documentation index, see [llms.txt](https://docs.xquik.com/llms.txt).

**1 credit per follower read**, plus 1 for the engagement

A user X doesn't know is free · [All plans](https://xquik.com) from \$0.00012/credit

```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/bash.json","/languages/csharp.json","/languages/go.json","/languages/java.json","/languages/javascript.json","/languages/kotlin.json","/languages/php.json","/languages/python.json","/languages/ruby.json","/languages/typescript.json"]}}
curl "https://xquik.com/api/v1/x/users/nasa/follower-audit?limit=500" \
  -H "x-api-key: xq_your_api_key_here" | jq
```

```javascript Node.js theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/bash.json","/languages/csharp.json","/languages/go.json","/languages/java.json","/languages/javascript.json","/languages/kotlin.json","/languages/php.json","/languages/python.json","/languages/ruby.json","/languages/typescript.json"]}}
const response = await fetch("https://xquik.com/api/v1/x/users/nasa/follower-audit?limit=500", {
  headers: { "x-api-key": "xq_your_api_key_here" },
});
const body = await response.json();
if (!response.ok) throw new Error(JSON.stringify(body));

const { audit } = body;
console.log(`Grade ${audit.quality.grade}, ${audit.coverage.read} followers read`);
```

```python Python theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/bash.json","/languages/csharp.json","/languages/go.json","/languages/java.json","/languages/javascript.json","/languages/kotlin.json","/languages/php.json","/languages/python.json","/languages/ruby.json","/languages/typescript.json"]}}
import requests

response = requests.get(
    "https://xquik.com/api/v1/x/users/nasa/follower-audit",
    params={"limit": 500},
    headers={"x-api-key": "xq_your_api_key_here"},
)
body = response.json()
if not response.ok:
    raise RuntimeError(body)

audit = body["audit"]
print(f'Grade {audit["quality"]["grade"]}, {audit["coverage"]["read"]} followers read')
```

## Check an account's followers

Use `GET /x/users/{id}/follower-audit` before you pay for a shoutout or a partnership. Name the account by user ID,
username, or profile URL.




The audit reads the account's newest followers first. It gives each follower 1 class, a score & the signals behind it.
Then it adds a quality score, class counts & arrival bands. It also lists join cohorts, languages, places & top
followers. The account's own engagement comes from its recent posts.




Signals come from public profiles, so a real person can match them. Older followers may differ from the newest ones.




A read stops at your `limit` or at what your balance pays for. A very long read returns the followers it finished.
`coverage` says how many it read out of the account's total.

## Path parameters

| Path parameter | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | User ID, username with or without `@`, or URL-encoded profile URL, such as `x.com/nasa`. See [path IDs](https://docs.xquik.com/api-reference/overview.md#path-ids). |

## Query parameters

| Query parameter | Type | Required | Description |
| - | - | - | - |
| `limit` | `integer` | No | Followers to read, newest first, from `1` up. Left out, a read takes up to 200. A low balance reads fewer. `pageSize`, `count`, `max_results`, `maxItems`, `max_items` & `per_page` are accepted aliases. Default `200`. |

| Query parameter | Type | Required | Description |
| - | - | - | - |
| `fields` | `string` | No | Fields to keep in each row, comma-separated, such as `id,text,author.username`. Use dots for nested fields. Case & underscores do not matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics always stay. An unknown name returns `400 unknown_field` with the valid names, before any read. The price stays the same. |
| `omit` | `string` | No | Fields to drop from each row, comma-separated, such as `entities,media`. It takes the same names as `fields`. With `fields`, it drops from the kept fields. |

## Headers

| Header | Type | Required | Description |
| - | - | - | - |
| `x-api-key` | `string` | No | Full account key. Sessions and OAuth also work. |

## Response

### 200 OK

| Field | Type | Description |
| - | - | - |
| `audit` | `object \| null` | |
| `audit.account` | `object` | The audited account's counts & engagement, in the shape [user insights](https://docs.xquik.com/api-reference/x/user-engagement-insights.md) returns. |
| `audit.coverage` | `object` | `read` followers out of the account's `total`, & the `percent` that makes. |
| `audit.quality` | `object` | A `score` from 0 to 100 & a `grade` from `A` to `F`. A higher score means more followers look real. |
| `audit.classes` | `object[]` | How many followers fall in each `class`, with their `count` & `percent`. |
| `audit.signals` | `object[]` | Each signal's `id`, its matching followers & the `points` it adds. |
| `audit.arrivalBands` | `object[]` | The likely fake share in each slice of the newest-first list. |
| `audit.cohorts` | `object[]` | Followers who joined X in the same UTC week, & how many look fake. |
| `audit.languages` | `object[]` | Follower counts by profile language. |
| `audit.places` | `object[]` | Follower counts by profile location. |
| `audit.verified` | `object` | How many followers are verified, & the `percent` that makes. |
| `audit.followers` | `object[]` | Every follower read, newest first. Each has its `class`, `score`, `signals`, counts & join date. |
| `audit.topFollowers` | `object[]` | Up to 10 followers with the most followers of their own. |

### Follower classes

| Class | Meaning |
| - | - |
| `likelyReal` | Looks like a real, active account |
| `inactive` | Looks real but posts little |
| `tooNew` | Joined too recently to judge |
| `likelyFake` | Matches enough fake signals to look fake |
| `automated` | X labels it automated, & `owner` names who runs it |

### 400 Invalid input

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/bash.json","/languages/csharp.json","/languages/go.json","/languages/java.json","/languages/javascript.json","/languages/kotlin.json","/languages/php.json","/languages/python.json","/languages/ruby.json","/languages/typescript.json"]}}
{ "error": "invalid_user_id" }
```

Send a user ID, a username, or a profile URL.

### 402 Payment required

Your balance pays for no follower. Top up, then try again.

### 403 Protected follower list

X keeps a protected account's follower list private. Xquik charges nothing.

### 404 User not found

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/bash.json","/languages/csharp.json","/languages/go.json","/languages/java.json","/languages/javascript.json","/languages/kotlin.json","/languages/php.json","/languages/python.json","/languages/ruby.json","/languages/typescript.json"]}}
{ "error": "user_not_found", "message": "X user not found. Check the username." }
```

A user X doesn't know is free.

### 503 Busy

Retry after the `Retry-After` header.

> [!NOTE]
>
> **Related.** [Followers](https://docs.xquik.com/api-reference/x/followers.md) · [User insights](https://docs.xquik.com/api-reference/x/user-engagement-insights.md) ·
> [Verified followers](https://docs.xquik.com/api-reference/x/verified-followers.md)

> [accordion] Related follower, list & community APIs
>
> * Profiles
>   * [Search users](https://docs.xquik.com/api-reference/x/search-users.md)
>   * [Search autocomplete](https://docs.xquik.com/api-reference/x/search-autocomplete.md)
>   * [Get user](https://docs.xquik.com/api-reference/x/twitter-profile-lookup.md)
>   * [Batch users](https://docs.xquik.com/api-reference/x/batch-users.md)
> * Followers
>   * [Followers](https://docs.xquik.com/api-reference/x/followers.md)
>   * [Following](https://docs.xquik.com/api-reference/x/following.md)
>   * [Follower IDs](https://docs.xquik.com/api-reference/x/follower-ids.md)
>   * [Following IDs](https://docs.xquik.com/api-reference/x/following-ids.md)
>   * [Creator subscriptions](https://docs.xquik.com/api-reference/x/user-subscriptions.md)
>   * [Affiliates](https://docs.xquik.com/api-reference/x/user-affiliates.md)
>   * [Similar accounts](https://docs.xquik.com/api-reference/x/user-similar.md)
>   * [Translate bio](https://docs.xquik.com/api-reference/x/user-bio-translation.md)
>   * [User insights](https://docs.xquik.com/api-reference/x/user-engagement-insights.md)
>   * [Verified followers](https://docs.xquik.com/api-reference/x/verified-followers.md)
>   * [Followers you know](https://docs.xquik.com/api-reference/x/followers-you-know.md)
>   * [Check follower](https://docs.xquik.com/api-reference/x/check-follower.md)
> * Lists
>   * [Search lists](https://docs.xquik.com/api-reference/x/search-lists.md)
>   * [User lists](https://docs.xquik.com/api-reference/x/user-lists.md)
>   * [List memberships](https://docs.xquik.com/api-reference/x/user-list-memberships.md)
>   * [List details](https://docs.xquik.com/api-reference/x/list-details.md)
>   * [List members](https://docs.xquik.com/api-reference/x/list-members.md)
>   * [List followers](https://docs.xquik.com/api-reference/x/list-followers.md)
> * Communities
>   * [Find](https://docs.xquik.com/api-reference/x/community-find.md)
>   * [Popular](https://docs.xquik.com/api-reference/x/community-popular.md)
>   * [Topics](https://docs.xquik.com/api-reference/x/community-topics.md)
>   * [Suggested](https://docs.xquik.com/api-reference/x/community-suggested.md)
>   * [Details](https://docs.xquik.com/api-reference/x/community-info.md)
>   * [Members](https://docs.xquik.com/api-reference/x/community-members.md)
>   * [Member search](https://docs.xquik.com/api-reference/x/community-member-search.md)
>   * [Moderators](https://docs.xquik.com/api-reference/x/community-moderators.md)
>   * [Timeline](https://docs.xquik.com/api-reference/x/community-tweets.md)
>   * [Media](https://docs.xquik.com/api-reference/x/community-media.md)
>   * [Keyword search](https://docs.xquik.com/api-reference/x/community-search.md)
>   * [Tweets search](https://docs.xquik.com/api-reference/x/community-tweets-search.md)

## Response examples

### 200 example

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/bash.json","/languages/csharp.json","/languages/go.json","/languages/java.json","/languages/javascript.json","/languages/kotlin.json","/languages/php.json","/languages/python.json","/languages/ruby.json","/languages/typescript.json"]}}
{
  "audit": {
    "account": {
      "userId": "11348282",
      "userName": "NASA",
      "followers": 92376187,
      "following": 180,
      "posts": 73919
    },
    "coverage": {
      "percent": 0.0002,
      "read": 200,
      "total": 92376187
    },
    "quality": {
      "grade": "B",
      "score": 71
    },
    "classes": [
      {
        "class": "likelyReal",
        "count": 122,
        "percent": 61
      }
    ],
    "signals": [
      {
        "count": 36,
        "id": "defaultPicture",
        "percent": 18,
        "points": 2
      }
    ]
  }
}
```

* **400** `{ "error": "invalid_input", "message": "Invalid input. Check the request body." }`
* **401** `{ "error": "unauthenticated", "message": "Authentication required." }`
* **402** `{ "error": "insufficient_credits", "message": "Insufficient credits. Top up or subscribe to continue." }`
* **403** `{ "error": "api_key_paused", "message": "This API key is paused. Resume it at dashboard.xquik.com/api-keys to use it again." }`
* **404** `{ "error": "user_not_found", "message": "X user not found. Check the username." }`
* **424** `{ "error": "x_api_unavailable", "message": "X data source temporarily unavailable. Try again later." }`
* **429** `{ "error": "rate_limit_exceeded", "message": "Too many requests. Try again later.", "retryAfter": 60 }`
* **502** `{ "error": "x_api_unavailable", "message": "X data source temporarily unavailable. Try again later." }`
* **503** `{ "error": "x_api_unavailable", "message": "Xquik is busy right now. Retry shortly." }`


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