Skip to main content
GET
Twitter batch tweet lookup API & post details
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.

When to use batch lookup

Use this route to look up as many as 100 tweet IDs at once. It charges only for returned tweets. Use list-tweets when reading a list feed instead.
Requested result counts are upper bounds for paid authenticated calls. When remaining credits cannot cover the full page or ID list, Xquik returns fewer results. If zero paid results are affordable, it returns 402 insufficient_credits.
1 credit per tweet returned · Accepts account credits and guest paid_reads
The Node.js and Python snippets build tweet rows. They do not print full response pages. Store tweetRows or tweet_rows and missingIds or missing_ids with the original ID list. Retries then request only missing tweets.

Direct batch tweet handoff

Use GET /x/tweets when a CRM, warehouse, newsroom, moderation queue, or agent workflow already has tweet IDs. One response returns tweet text, authors, metrics, media URLs, and missing-ID handling. Use Get Tweet for one tweet by ID. Use Search Tweets to find tweets by query. Store requested_ids, tweet_id, text, author_id, author_username, author_name, author_followers, author_verified, author_profile_picture, created_at, conversation_id, engagement counts, media URLs, has_next_page, and next_cursor. Join returned tweets by tweet_id. Do not rely on response order. Send at most 100 IDs per request. Batch requests always return has_next_page: false and next_cursor: "". Zero affordable results return 402 insufficient_credits.

Store exact batch lookup results

Keep the original request order separately. Join returned tweets by numeric Tweet ID because unavailable or unaffordable IDs can be absent.

Query parameters

string
required
1 to 100 tweets, separated by commas. Each is a tweet ID or a tweet URL, such as x.com/nasa/status/20. A tweet named twice is read once.

Headers

string
Full account API key. Session cookie and OAuth authentication are also supported.
string
Send Bearer xq_your_guest_key_here for an active paid_reads guest key.

Response

200 OK

object[]
Array of tweets matching the requested IDs. Tweet object fields.
string
Tweet ID.
string
Tweet text.
string
Tweet type. Omitted if unavailable.
string
ISO 8601 creation timestamp.
boolean
Whether this is a Note Tweet. Omitted if unavailable.
boolean
Whether the author pinned this post to their profile. Omitted if unavailable.
number
Like count. Omitted if unavailable.
number
Retweet count. Omitted if unavailable.
number
Reply count. Omitted if unavailable.
number
Quote tweet count. Omitted if unavailable.
number
View count. Omitted if unavailable.
number
Bookmark count. Omitted if unavailable.
string
Permalink URL on X. Omitted if unavailable.
string
Tweet language code. Omitted if unavailable.
boolean
Whether the tweet is a reply. Omitted if unavailable.
string
Tweet ID being replied to. Omitted if not a reply.
string
User ID being replied to. Omitted if unavailable.
string
Username being replied to. Omitted if unavailable.
string
Conversation thread ID. Omitted if unavailable.
string
Client used to post the tweet. Omitted if unavailable.
number[]
Start and end offsets for rendered tweet text. Omitted if unavailable.
boolean
Whether replies are limited. Omitted if unavailable.
boolean
Whether this tweet quotes another tweet. Omitted if unavailable.
boolean
Whether this row is a retweet. text carries the original post in full.
object
Parsed entities. Omitted if unavailable.
object
Disclosure metadata for paid partnership and AI-generated media labels. Includes advertising.isPaidPromotion and aiGenerated.hasAiGeneratedMedia when X returns them. Omitted if unavailable.
object
Tweet author profile. Omitted if unavailable. Author object fields.
string
Author user ID.
string
Author handle without @.
string
Author display name. Omitted if unavailable.
number
Follower count. Omitted if unavailable.
boolean
Whether the author is verified. Omitted if unavailable.
string
Author profile image URL. Omitted if unavailable.
object[]
Media attachments. Omitted when the tweet has no media. Media object fields.
string
Direct media URL.
object[]
Available video renditions with bitrate, content type, and URL. Omitted for images.
string
Media type.
string
Shortened URL from the tweet text.
object
Embedded quoted tweet. Omitted if not a quote tweet.
object
Original retweeted tweet. Omitted if not a retweet.
boolean
Always false for batch requests.
string
Always empty for batch requests.

400 Missing IDs

400 Too many IDs

400 Invalid tweet ID

An entry of ids names no tweet. Send each entry as a tweet ID or a tweet URL. The request costs nothing.

401 Unauthenticated

Anonymous requests get WWW-Authenticate: Bearer and a guest wallet checkout action. This is not a Payment challenge.

402 Payment required

Full account keys can receive no_subscription, subscription_inactive, no_credits, or insufficient_credits with account payment options. Guest keys receive only the guest top-up action. The failed request creates no checkout. Ask the user to confirm before calling any checkout or top-up route.

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.