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

# X community notes API for a contributor's notes

> List every Community Note a contributor wrote, with its text, rating status, rater tags, and the post it is on. Includes notes x.com hides. 1 credit per note.

<Panel>
  <Tabs defaultTabIndex={0} sync={false}>
    <Tab title="200" id="response-x-community-notes-contributor-notes-200">
      ```json theme={null}
      {
        "notes": [
          {
            "id": "2026375778254868976",
            "createdAt": "2026-02-24T19:16:48.435Z",
            "language": "en",
            "classification": "MisinformedOrPotentiallyMisleading",
            "contributor": {
              "alias": "ardent-beach-friarbird",
              "notesCount": {
                "currentlyRatedHelpful": 1,
                "currentlyRatedNotHelpful": 2
              },
              "ratingsCount": {
                "successful": {
                  "total": 49
                },
                "unsuccessful": {
                  "helpfulCount": 15,
                  "notHelpfulCount": 4
                }
              }
            }
          }
        ],
        "has_next_page": true,
        "next_cursor": "-1767098234260"
      }
      ```
    </Tab>

    <Tab title="400" id="response-x-community-notes-contributor-notes-400">
      ```json theme={null}
      {
        "error": "invalid_contributor_alias",
        "message": "Send a Community Notes alias or its x.com/i/communitynotes/u URL."
      }
      ```
    </Tab>

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

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

    <Tab title="404" id="response-x-community-notes-contributor-notes-404">
      ```json theme={null}
      {
        "error": "contributor_not_found",
        "message": "Contributor not found. Check the alias on its x.com/i/communitynotes/u page."
      }
      ```
    </Tab>

    <Tab title="424" id="response-x-community-notes-contributor-notes-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-notes-contributor-notes-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-notes-contributor-notes-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-notes-contributor-notes-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>

List the Community Notes 1 contributor wrote, newest first. Each note comes with the post it is on.

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

<Callout icon="coins" color="#5c3327">
  **1 credit per note returned** · [All plans](https://xquik.com/#pricing) from \$0.00012/credit · Supports [guest paid reads](/guides/guest-wallets)
</Callout>

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://xquik.com/api/v1/x/community-notes/contributors/ardent-beach-friarbird/notes" \
    -H "x-api-key: xq_your_api_key_here" | jq
  ```

  ```javascript Node.js theme={null}
  const alias = "ardent-beach-friarbird";
  const url = `https://xquik.com/api/v1/x/community-notes/contributors/${alias}/notes`;
  const response = await fetch(url, {
    headers: { "x-api-key": "xq_your_api_key_here" },
  });
  const data = await response.json();
  if (!response.ok) throw new Error(JSON.stringify(data));

  const nextCursor = data.has_next_page ? data.next_cursor : null;
  const noteRows = data.notes.map((note) => ({
    contributor_alias: alias,
    note_id: note.id,
    rating_status: note.ratingStatus ?? null,
    text: note.text ?? null,
    post_id: note.postId ?? null,
    post_author: note.post?.author?.username ?? null,
    next_cursor: nextCursor,
  }));
  ```

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

  alias = "ardent-beach-friarbird"
  response = requests.get(
      f"https://xquik.com/api/v1/x/community-notes/contributors/{alias}/notes",
      headers={"x-api-key": "xq_your_api_key_here"},
  )
  data = response.json()
  if not response.ok:
      raise RuntimeError(data)

  next_cursor = data["next_cursor"] if data["has_next_page"] else None
  note_rows = [
      {
          "contributor_alias": alias,
          "note_id": note["id"],
          "rating_status": note.get("ratingStatus"),
          "text": note.get("text"),
          "post_id": note.get("postId"),
          "post_author": ((note.get("post") or {}).get("author") or {}).get("username"),
          "next_cursor": next_cursor,
      }
      for note in data["notes"]
  ]
  ```
</CodeGroup>

The Node.js and Python snippets build 1 row per note. Store the rows with the cursor before you request the next page.

## Which notes does it return?

It returns every note the contributor wrote, whatever its rating. Only helpful notes show under posts on x.com, so
this list also holds the notes x.com hides.

* `ratingStatus` says how X rates the note now, such as `NeedsMoreRatings` or `CurrentlyRatedHelpful`.
* `helpfulTags` & `notHelpfulTags` say why raters called it helpful or not.
* `timeToHelpfulFromNoteMs` says how long the note took to be rated helpful.
* `post` is the post the note is on, with the same fields as [Get tweet](/api-reference/x/get-tweet).

For a post X no longer shows, `post` is `null`. `postId` still names it, and `postUnavailable.reason` says why when X
gives a reason, such as `Suspended`.

## Page through a contributor's notes

Each page returns `has_next_page` and `next_cursor`. Send `next_cursor` back as `cursor`. Stop when `has_next_page` is
`false`.

A cursor X never issued returns `400 invalid_cursor`, which is free. Start again without `cursor`, then use
`next_cursor`.

Use the note `id` as the key in your store. Overlapping reads then add no duplicates.

## Path parameters

<ParamField path="alias" type="string" required>
  Contributor alias, such as `ardent-beach-friarbird`. The URL-encoded contributor URL also works, such as
  `x.com/i/communitynotes/u/ardent-beach-friarbird`. Any letter case works.
</ParamField>

## Query parameters

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

<ParamField query="pageSize" type="integer">
  Notes per page, from `1` to `10`. Defaults to `10`. Also read as `limit`, `count`, `max_results`, `maxItems`,
  `max_items` & `per_page`.
</ParamField>

### Choose fields

<ParamField query="fields" type="string">
  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.
</ParamField>

<ParamField query="omit" type="string">
  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.
</ParamField>

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

X leaves out a field that a note lacks. Only `id` is always present.

<ResponseField name="notes" type="object[]">
  The contributor's notes, newest first.
  **Note object fields.**

  <ResponseField name="id" type="string">
    Note ID.
  </ResponseField>

  <ResponseField name="createdAt" type="string">
    When the contributor wrote the note, as ISO 8601.
  </ResponseField>

  <ResponseField name="language" type="string">
    Language code of the note.
  </ResponseField>

  <ResponseField name="classification" type="string">
    What the writer says of the post, such as `MisinformedOrPotentiallyMisleading` or `NotMisleading`.
  </ResponseField>

  <ResponseField name="text" type="string">
    What the note says.
  </ResponseField>

  <ResponseField name="entities" type="object[]">
    Links, tags & accounts inside the text, each with `fromIndex`, `toIndex` & `ref`.
  </ResponseField>

  <ResponseField name="contributor" type="object">
    The note's writer, with the counts X sends beside a note. [Get notes
    contributor](/api-reference/x/community-notes-contributor) returns every count.
  </ResponseField>

  <ResponseField name="ratingStatus" type="string">
    X's current rating, such as `NeedsMoreRatings`, `CurrentlyRatedHelpful` or
    `CurrentlyRatedNotHelpful`.
  </ResponseField>

  <ResponseField name="helpfulTags" type="string[]">
    Why raters called the note helpful.
  </ResponseField>

  <ResponseField name="notHelpfulTags" type="string[]">
    Why raters called the note not helpful.
  </ResponseField>

  <ResponseField name="decidedBy" type="string">
    The X scoring model that set the rating.
  </ResponseField>

  <ResponseField name="fullyVisibleModel" type="boolean">
    Whether X marks that scoring model as fully visible.
  </ResponseField>

  <ResponseField name="abovePcrhThreshold" type="boolean">
    Whether the note scores above X's bar for a possible helpful rating.
  </ResponseField>

  <ResponseField name="appealStatus" type="string">
    Whether the rating is under appeal.
  </ResponseField>

  <ResponseField name="deleted" type="boolean">
    Whether the writer deleted the note.
  </ResponseField>

  <ResponseField name="tombstone" type="string">
    X's notice in place of a deleted note.
  </ResponseField>

  <ResponseField name="isApiAuthor" type="boolean">
    Whether the note came through X's API.
  </ResponseField>

  <ResponseField name="isMediaNote" type="boolean">
    Whether the note is about the post's media.
  </ResponseField>

  <ResponseField name="mediaNoteMatchCount" type="number">
    Other posts X matched a media note to.
  </ResponseField>

  <ResponseField name="isUrlNote" type="boolean">
    Whether the note is on a link.
  </ResponseField>

  <ResponseField name="displayUrl" type="string">
    The link a link note is on, as X shows it.
  </ResponseField>

  <ResponseField name="isTranslatable" type="boolean">
    Whether X offers a translation of the note.
  </ResponseField>

  <ResponseField name="timeToHelpfulFromNoteMs" type="number">
    Milliseconds from the note's creation to its helpful rating.
  </ResponseField>

  <ResponseField name="timeToHelpfulFromPostMs" type="number">
    Milliseconds from the post's creation to the note's helpful rating.
  </ResponseField>

  <ResponseField name="impressionCount" type="number">
    Views of the note, when X shares them.
  </ResponseField>

  <ResponseField name="postId" type="string">
    ID of the post the note is on.
  </ResponseField>

  <ResponseField name="post" type="object | null">
    The post the note is on, or `null` when X no longer shows it.
  </ResponseField>

  <ResponseField name="postUnavailable" type="object">
    Why X shows no post, when X says. It holds `reason`.
  </ResponseField>
</ResponseField>

<ResponseField name="has_next_page" type="boolean">
  Whether more notes follow.
</ResponseField>

<ResponseField name="next_cursor" type="string">
  Cursor for the next page. Empty at the end of the list.
</ResponseField>

### 400 Invalid alias or cursor

```json theme={null}
{
  "error": "invalid_contributor_alias",
  "message": "Send a Community Notes alias or its x.com/i/communitynotes/u URL."
}
```

A cursor X never issued returns `invalid_cursor`. Start again without `cursor`. Both answers are free.

### 404 Contributor not found

```json theme={null}
{
  "error": "contributor_not_found",
  "message": "Contributor not found. Check the alias on its x.com/i/communitynotes/u page."
}
```

No contributor holds the alias. This answer is free.

### 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" }
```

### 402 Payment required

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

### 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.** [Get notes contributor](/api-reference/x/community-notes-contributor) · [Deleted notes](/api-reference/x/community-notes-contributor-deleted-notes) · [Get tweet](/api-reference/x/get-tweet)
</Note>

<div className="related-api-links">
  <Accordion title="Related tweet, reply & media APIs" icon="link">
    * Tweets: [Get tweet](/api-reference/x/get-tweet) · [Tweet insights](/api-reference/x/tweet-engagement-insights) · [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) · [Reposter IDs](/api-reference/x/retweeter-ids) · [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) · [Trends history](/api-reference/x/trends-history) · [Top tweets](/api-reference/x/top-tweets) · [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) · [User live status](/api-reference/x/user-live-status) · [Notes contributor](/api-reference/x/community-notes-contributor) · [Contributor notes](/api-reference/x/community-notes-contributor-notes) · [Deleted notes](/api-reference/x/community-notes-contributor-deleted-notes) · [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.