Skip to main content
GET
Twitter API get replies to a tweet & author fields
Repost records include retweetedAt, the repost event’s UTC ISO 8601 timestamp. It is null when that timestamp is unavailable. The API omits it for original posts. The nested original post keeps its own creation date. This field does not report every account that reposted a post. Request per-account timestamps with Get retweeters.
Result counts cap paid authenticated calls. Low credits reduce the page or ID list. Zero affordable results return 402 insufficient_credits.
1 credit per tweet returned · All plans from $0.00012/credit · Supports guest paid reads
Omit mode for automatic maximum coverage. Xquik combines available views within a short request window. It keeps the existing response shape. Pass next_cursor back unchanged as cursor. Keep the same endpoint, target, query, and filters.
Existing unprefixed cursors keep their legacy behavior. after, limit, and pageSize aliases also keep working. Billing still counts only returned rows. Use mode=standard only to force legacy single-view pagination. A page can be empty or underfilled. Continue while has_next_page is true. Stop only after the response reports has_next_page=false. First-page requests do not support Idempotency-Key retries. Repeating a cursorless request starts a separate extraction. Results returned by that extraction incur their normal charges. Save each response before requesting its next page. You cannot replay earlier or terminal responses after their cursors become unavailable. If automatic coverage is busy, an initial request returns a standard data page. Live coverage cursors remain atomic. Concurrent use returns 409 coverage_cursor_unavailable with exact Retry-After seconds. Wait, then retry the same cursor once. Repeated busy responses never authorize restarting with another cursor. Finished, expired, superseded, or identity-mismatched cursors return 410 coverage_cursor_gone. The response omits Retry-After. Restart without a cursor. Keep received results. Deduplicate restarted results by id. Malformed cursors return 400 invalid_coverage_cursor. Restart without them. Get replies by tweet ID for analysis, support, moderation, giveaways, and agents.
Reply visibility depends on X. Complete mode returns 424 replies_incomplete below 80% direct-reply coverage. A sinceTime or untilTime window read to its end returns 200. Retry only while diagnostic.sourcesEnded is false. Never treat missing rows as proof that a user did not reply.
See reply coverage and optional fields.

Twitter API reply questions

How does the Twitter API get replies to a tweet?

Pass the original tweet’s numeric ID in the path. Automatic pageSize accepts 1 through 300. Standard pages accept 1 through 100. Responses include replies, author profiles & engagement counts. Save each page & next_cursor. Continue while has_next_page is true. A post X does not have returns 404 tweet_not_found & costs no credits.

How complete is a tweet reply collection?

Protected accounts’ replies count toward coverage but aren’t returned. X may omit deleted, hidden, or unavailable replies. mode=complete combines timelines, rankings, cursors, hidden branches, parent windows & search. Direct replies match inReplyToId to the source tweet. Trust diagnostic.complete for direct coverage only. On a sinceTime or untilTime request it means the whole window was read. It does not prove that Xquik returned every nested reply. Complete mode follows queued live cursors even after meeting direct coverage. Child timelines find missing replies. Verified reply counts & drained cursors let collection skip broader searches. Requested limits, deadlines, and bounded collection budgets still apply. Check strategiesAttempted for early stops.

How can a team analyze or moderate replies?

Store reply IDs, text, authors, timestamps, engagement counts & media. Create one moderation row per reply. Xquik does not infer sentiment.

How can support teams receive new reply alerts?

Create an account monitor for the relevant profile. Select tweet.reply events on the monitor and webhook. Verify every webhook signature. Store each event ID before updating a support ticket. Replay missed events through the events API. Poll this endpoint for conversation backfills.

Which reply fields should applications keep?

Keep author IDs separate from usernames, which can change. Save conversationId and inReplyToId for thread joins. Store media URLs, engagement counts, time filters, page size & cursors for audits & retries.

How can applications control reply API costs?

Each returned reply costs 1 credit. Direct replies use the default paid page size unless you set pageSize. Bound support periods with sinceTime and untilTime, in Unix seconds. Use reply_extractor for fixed resultsLimit exports.

Direct replies handoff

Use GET /x/tweets/{id}/replies for support, community, moderation, giveaway, or agent workflows. The examples above write JSON Lines rows with parent_tweet_id, reply_id, text, author IDs and usernames, thread joins, media URLs, & cursors. The moderation table below adds follower, verification, timing, and engagement projections. Use reply_extractor instead when a team needs an estimate, a reusable extraction ID, stored result pages, or CSV, JSON, and XLSX downloads after completion.

Build a reply moderation table

Store one row per reply. Keep the parent Tweet ID and conversation ID beside the reply. Support, moderation, campaign, and giveaway reviews can then reconstruct each conversation branch.

Which replies endpoint?

  • Use GET /api/v1/x/tweets/{id}/replies for one tweet’s replies as JSON rows.
  • Use reply_extractor when you need saved CSV, JSON, or XLSX exports.
  • Use GET /api/v1/x/tweets/search when you need keyword, operator, structured-filter, or queryType search.
  • Use GET /api/v1/x/tweets/{id}/thread when you need ordered thread context around a tweet.

Path parameters

string
required
Post ID or URL-encoded post URL, such as x.com/nasa/status/20. See path IDs. A retweet ID returns the original post’s replies.

Query parameters

string
Omit it for automatic maximum direct-reply coverage. Use standard for legacy pagination. Use complete for nested replies and detailed diagnostics.
number
Complete mode defaults to 25000 combined direct and nested replies. Set a smaller or larger total with limit, starting at 1.
number
default:"20"
Automatic pages accept 1 through 300. Standard pages accept 1 through 100. Omit this field in complete mode. limit, count, max_results, maxItems, max_items & per_page also work outside complete mode.
string
Pass next_cursor back unchanged. New Xquik cursors resume automatic coverage. Existing unprefixed cursors keep legacy behavior.
string
Legacy cursor alias on automatic pages.
string
Unix timestamp in seconds. Only return replies after this time.
string
Unix timestamp in seconds. Only return replies before this time. Pair with sinceTime for closed campaign, support, or audit windows.
string
In complete mode, select all, direct, or nested replies.
integer
In complete mode, set the maximum reply depth from the source post.
string
Sort by relevance, latest, oldest, or likes. Complete mode defaults to relevance. Automatic pages list the newest first unless you set sort. latest & oldest sort every row by date. If some rows come from X views without date order, the answer sets orderPartial: true.
boolean
In complete mode, exclude replies from the source-post author.
boolean
In complete mode, include the source post and count it toward limit.
boolean
In complete mode, only return replies containing media.

Tweet result filters

These filters apply to automatic and standard pagination. Remove every filter before requesting complete mode.
string
Filter to posts from this username. The @ prefix is optional.
string
Filter to replies directed to this username.
string
Filter to posts that mention this username.
string
Only include posts with this language code.
string
Include posts created on or after this date or timestamp.
string
Include posts up to this date or timestamp. A date is a UTC day, inclusive, so its own posts count.
string
Use images, videos, gifs, media, links, or none.
integer
Require this minimum like count.
integer
Require this minimum repost count.
integer
Require this minimum reply count.
integer
Require this minimum quote count.
integer
Require this minimum view count.
integer
Require this minimum bookmark count.
integer
Allow this maximum like count. Missing counts pass.
integer
Allow this maximum repost count. Missing counts pass.
integer
Allow this maximum reply count. Missing counts pass.
integer
Allow this maximum quote count. Missing counts pass.
boolean
When true, only return posts from Blue-verified authors.
boolean
When true, only return posts from verified authors.
string
Use include, exclude, or only for replies. This setting overrides includeReplies when the endpoint supports both.
string
Use include, exclude, or only for reposts.
string
Match this literal phrase, including any hyphens.
string
Exclude comma-separated or whitespace-separated terms.
string
Require at least 1 comma-separated or whitespace-separated term.
string
Match these hashtags. Separate values with commas or spaces.
string
Match these cashtags. Separate values with commas or spaces.
string
Use include, exclude, or only for quote posts.
string
URL substring or domain that must appear in tweet URL entities.
string
Filter to tweets in this conversation thread.
string
Only include replies to this tweet ID.
string
Filter to quote tweets of this tweet ID.
string
Filter to retweets of this tweet ID.
string
Return Tweets whose IDs exceed this ID.
string
Return Tweets at or below this ID.
boolean
When true, only return native reposts.
string
Match Tweets from this recent window, such as 90m or 7d. Use a whole number & s, m, h or d.

Headers

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

Response

200 OK

object[]
Array of reply tweets.
boolean
Whether more results are available.
string
Cursor for the next page.
object[]
Complete mode’s nested replies. Exclude them from direct coverage.
boolean
Present with latest or oldest sort when some rows came from X views without date order. Rows stay sorted by date, but replies may be missing between them. Retry later for a gap-free order.
object
Complete-mode coverage evidence. Omitted from standard responses.

400 Invalid tweet ID

The response uses invalid_tweet_id. Send a post ID or post URL instead.

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 Replies incomplete

Collected rows & diagnostics stay in the answer. Rows are billed as usual. recommendedFallback says what to do next. A cut at your limit returns 200 with limit_reached: true.

503 Complete reply extraction busy

Wait for the Retry-After duration before repeating complete mode.
Related. Tweet Replies Export Workflow for saved CSV, JSON, or XLSX files, Tweet Quotes, Tweet Thread, Retweeters, and Favoriters.