Skip to main content
GET
X community notes API for a contributor's notes
List the Community Notes 1 contributor wrote, newest first. Each note comes with the post it is on.
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.
1 credit per note returned · All plans from $0.00012/credit · Supports guest paid reads
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.
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

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.

Query parameters

string
Pagination cursor from a previous response. Omit for the first page.
integer
Notes per page, from 1 to 10. Defaults to 10. Also read as limit, count, max_results, maxItems, max_items & per_page.

Choose fields

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

Headers

string
Full account key. Sessions and OAuth also work.
string
Bearer xq_your_guest_key_here for paid_reads.

Response

200 OK

X leaves out a field that a note lacks. Only id is always present.
object[]
The contributor’s notes, newest first. Note object fields.
string
Note ID.
string
When the contributor wrote the note, as ISO 8601.
string
Language code of the note.
string
What the writer says of the post, such as MisinformedOrPotentiallyMisleading or NotMisleading.
string
What the note says.
object[]
Links, tags & accounts inside the text, each with fromIndex, toIndex & ref.
object
The note’s writer, with the counts X sends beside a note. Get notes contributor returns every count.
string
X’s current rating, such as NeedsMoreRatings, CurrentlyRatedHelpful or CurrentlyRatedNotHelpful.
string[]
Why raters called the note helpful.
string[]
Why raters called the note not helpful.
string
The X scoring model that set the rating.
boolean
Whether X marks that scoring model as fully visible.
boolean
Whether the note scores above X’s bar for a possible helpful rating.
string
Whether the rating is under appeal.
boolean
Whether the writer deleted the note.
string
X’s notice in place of a deleted note.
boolean
Whether the note came through X’s API.
boolean
Whether the note is about the post’s media.
number
Other posts X matched a media note to.
boolean
Whether the note is on a link.
string
The link a link note is on, as X shows it.
boolean
Whether X offers a translation of the note.
number
Milliseconds from the note’s creation to its helpful rating.
number
Milliseconds from the post’s creation to the note’s helpful rating.
number
Views of the note, when X shares them.
string
ID of the post the note is on.
object | null
The post the note is on, or null when X no longer shows it.
object
Why X shows no post, when X says. It holds reason.
boolean
Whether more notes follow.
string
Cursor for the next page. Empty at the end of the list.

400 Invalid alias or cursor

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

404 Contributor not found

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.

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

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

429 Rate limit exceeded

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

424 Dependency failed

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