Skip to main content
GET
X community notes API for a writer's deleted notes
List the Community Notes 1 contributor deleted, newest first.
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.

What does X keep of a deleted note?

X keeps each deleted note’s ID, time, rating status, rater tags & scoring model. It shows a notice in place of the note’s text, so text, classification & post are left out. tombstone holds that notice. A contributor who deleted no note returns an empty list, which is free. Get notes contributor returns the count in deletedNotesCount.

Page through deleted 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.

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 deleted notes, newest first. Note object fields.
string
Note ID.
string
When the contributor wrote the note, as ISO 8601.
string
X’s rating of the note, such as NeedsMoreRatings 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
true for a deleted note.
string
X’s notice in place of the note, such as This note has been deleted.
boolean
Whether the note came through X’s API.
boolean
Whether the note was about a post’s media.
number
Other posts X matched a media note to.
boolean
Whether the note was on a link.
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.