snake_case. REST createdAt becomes MCP created.
It does not become created_at.
Choose the Object Before Mapping Fields
Do not flatten every object into one unversioned row. Nested tweets and authors
have their own IDs. Store those IDs before building joins.
Field Presence Rules
Required Fields
Tweet objects require
id, text, and documented engagement counts.
Profile objects require id, username, and name.Optional Fields
Optional fields are omitted when X does not supply them. Absence is not an
empty string, false value, or zero count.
String IDs
Keep tweet, user, media, conversation, and reply IDs as strings. Large IDs
can lose precision in spreadsheet or JavaScript number types.
Count Snapshots
Likes, replies, reposts, quotes, views, bookmarks, followers, and following
counts can change after collection. Store
collected_at downstream.Tweet Fields
Every tweet includes its ID, text, metrics, and available author profile. These optional fields preserve additional X metadata. Core tweet fields group into these roles:- Identity:
id,type,url,createdAt, andlang - Publishing client:
source - Text:
text,displayTextRange,entities, andcontentDisclosure - Reply state:
isReply,isLimitedReply, andconversationId - Reply policy:
conversationControl,limitedActions, andunmentionedUserIds - Reply targets:
inReplyToId,inReplyToUserId, andinReplyToUsername - Quote state:
isQuoteStatusandquoted_tweet - Quote ID:
quotedTweetId - Repost context:
retweeted_tweet - Long-form context:
isNoteTweet - Related objects:
authorandmedia - Counts:
retweetCount,replyCount,likeCount, andquoteCount - Reach:
viewCountandbookmarkCount
Tweets also include available entities, disclosures, nested tweets, and media.
Tweet Metadata Example
Map Replies, Quotes, and Reposts
UseisReply to identify a reply. Use inReplyToId for its direct parent.
Use conversationId for the root conversation. These IDs can differ.
Use isQuoteStatus to identify quote context. Read quoted_tweet for the
nested quoted tweet when available. Keep the quoting tweet as its own row.
Read retweeted_tweet for original repost context. Keep the returned outer
tweet ID and nested tweet ID separate. This prevents incorrect engagement
joins.
Keep original tweets separate from outer repost records.
Direct Reply
Join
inReplyToId to the parent tweet. Keep conversationId for the full
thread.Quote
Join
quoted_tweet.id to the quoted tweet. Attribute quote text to the
outer tweet.Repost
Join
retweeted_tweet.id to the original tweet. Do not merge their metric
snapshots.Note Tweet
Check
isNoteTweet and noteTweet. Preserve long-form text and rich-text
metadata when present.Interpret Tweet Engagement Fields
likeCount, replyCount, retweetCount, quoteCount, viewCount, and
bookmarkCount are count snapshots. They can change after collection.
Store tweet_id, every count, and collected_at in one snapshot row. Compare
snapshots with the same tweet ID. Do not overwrite history when measuring
growth.
previousCounts can preserve pre-edit engagement counts. edit can describe
edit history. Keep both objects when analyzing edited tweets.
Map Entities and Content Labels
Readentities for URLs, mentions, hashtags, and other parsed text markers.
Read displayTextRange before slicing rendered text. Preserve the original
tweet text beside any normalized tokens.
Read contentDisclosure for documented content labels. Read
possiblySensitive for the returned sensitivity state. Never infer either
field when it is absent.
Profile Fields
Every profile includesid, username, and name.
Counts, verification, images, bios, and other metadata appear when X supplies them.
Core profile fields group into these roles:
- Identity:
id,username,name, andcreatedAt - Bio:
description,profile_bio,grokTranslatedBio,location, andurl - Audience:
followersandfollowing - Activity:
statusesCount,mediaCount, andfavouritesCount - Verification:
verified,isVerified,isBlueVerified, andverifiedType - Images:
profilePicture,coverPicture, andprofileBannerUrl - Access:
protected,unavailable, andunavailableReason - Safety:
possiblySensitive,withheldInCountries, andwithheldScope - Automation:
isAutomatedandautomatedBy - Features:
hasCustomTimelines,isTranslator, andcommunityRole - Pinned content:
pinnedTweetIds
author as the user object for each returned tweet.
Store the user profile using its stable id.
A profile page can change its username, name, bio, and images.
Keep pinned tweet IDs as strings.
Xquik removes account-specific actions, permissions, and relationships from
public reads. Use dedicated write routes or X for account state.
Twitter Profile API Example
id as the profile join key. Usernames can change. Display names are not
unique. Keep the observed username and collection time beside each snapshot.
Interpret Profile Counts
Usefollowers for the returned follower count. Use following for accounts
the profile follows. Use statusesCount for the returned post count. Use
mediaCount for posts containing media.
Do not calculate follower growth from one response. Store dated profile
snapshots. Compare the same X user ID across collection times.
Keep Verification Fields Separate
Preserveverified, isVerified, isBlueVerified, and verifiedType as
distinct fields. X can return different verification signals. Do not collapse
them into one custom boolean.
identityVerification and affiliatesHighlightedLabel provide separate
profile metadata. Preserve those objects when present.
Handle Protected or Unavailable Profiles
Useprotected for the returned privacy state. Use unavailable and
unavailableReason for unavailable profiles. Do not replace omitted profile
fields with invented values.
Keep withheldInCountries and possiblySensitive when returned. These fields
describe public response state. They do not grant access to hidden content.
Media Fields
Media rows keep their URL and type. These optional fields add detail. The Twitter media API field section covers returned photos, videos, and GIFs. Store media files only when returned URLs and availability allow it. Every media object includesmediaUrl, type, and url.
Map Photos, Videos, and GIFs
Readtype before selecting a media workflow. Supported values are photo,
video, and animated_gif. Keep the original type with every media row.
Use mediaUrl as the returned preview URL. Use url as the X media link.
Use expandedUrl and displayUrl only when present.
Preserve altText for accessibility. Preserve width, height, and
aspectRatio for layout. Preserve durationMillis for video duration.
videoVariants can contain multiple encodings and bitrates. Keep the complete
array when another service selects playback quality. Do not invent a missing
variant.
Use allowDownload and availabilityStatus when returned. Check both before a
media handoff. A media object does not guarantee permanent file availability.
Store a Media Join Row
tweet_id. Keep all
variants in a child table or structured column.
Reply Coverage
Reply coverage depends on X. X can hide, rank, or omit counted replies. Omitmode for automatic maximum direct-reply coverage with pagination. Pass
each next_cursor back unchanged as cursor. This keeps the standard response
shape and billing.
Use GET /api/v1/x/tweets/<tweet_id>/replies?mode=complete&limit=25000.
Complete mode adds nested replies and detailed diagnostics.
Direct replies match inReplyToId to the requested tweet. Keep
nested_replies separate. Trust diagnostic.complete instead of row count.
Complete mode requires 80% of X’s current reported direct replies. HTTP 424
replies_incomplete returns the collected rows and coverage diagnostic.
Inspect coveragePercentage, strategy results, cursor failures, and fallback.
Disclose that reply coverage depends on X.
Store Reply Relationships
Keep these fields for each collected reply:idfor the reply tweetinReplyToIdfor the direct parentconversationIdfor the thread rootauthor.idfor the reply authorcreatedAtfor orderingnested_repliesfor separately returned descendants
inReplyToId. Keep
nested_replies separate from direct replies when measuring first-level
coverage.
Twitter API Pagination Fields
Tweet, profile, follower, reply, list, and timeline routes can return page envelopes. Keep each endpoint’s documented field names. REST read pages commonly returnhas_next_page and next_cursor. Pass the
returned cursor back as cursor. Stop when has_next_page is false.
Extraction result pages return hasMore and nextCursor. Pass nextCursor
back as cursor. Do not mix REST cursors with extraction cursors.
Commit rows and their next cursor together. A retry must upsert by tweet ID,
user ID, or media ID before advancing.
Field Mapping Handoff
Surface Mapping
Xquik omits unavailable optional fields. It never invents missing X values.
Keep Surface Names Explicit
Do not assume one casing rule covers every field. REST uses mostly camel case. The documented nested exceptions keep their public names. Generated SDKs expose language-native models from OpenAPI. Use the generated property names for that SDK version. Do not hand-convert them from REST. MCP tools normalize most response names for agents. RESTcreatedAt becomes
MCP created. Actor datasets follow each Actor’s documented output mode.
Avoid Tweet Metadata Mapping Errors
Large IDs become rounded numbers
Large IDs become rounded numbers
Precision lost. Store tweet, user, conversation, reply, and media IDs as
strings before spreadsheet or JavaScript processing.
Missing optional fields become false or zero
Missing optional fields become false or zero
Meaning changed. Preserve field absence. Add a separate downstream default
only when the consumer requires one.
Quote and repost metrics are combined
Quote and repost metrics are combined
Counts misattributed. Keep outer and nested tweet IDs in separate rows.
Profile growth uses usernames as keys
Profile growth uses usernames as keys
History split. Use the stable X user ID. Store the observed username as an
attribute.
Tweet Metadata and Profile API Questions
How Do I Get Tweet Metadata?
Call the route matching your tweet, timeline, profile, or reply task. Read the returned API response through its documented schema. Keep IDs, counts, relationships, and cursors without inventing missing fields.Which Twitter API Fields Should I Store?
Start with IDs, text, timestamps, authors, engagement counts, media, and relationships. Add optional fields only when X supplies them. Store collection time beside mutable counts.Which Twitter API User Fields Identify a Profile?
Useid as the stable profile key.
Keep username, name, bio, images, verification, followers, and following.
Record collection time beside changing profile counts.
How Do I Read Twitter API Response Fields?
Follow each Xquik route’s response schema in the API reference. Use the field names documented for each surface. Apply only documented mappings between REST, SDK, MCP, and Actor names.How Do I Read Twitter API Pagination Fields?
Twitter API pagination uses the response envelope documented for each route. Readhas_next_page with next_cursor for REST pages.
Read hasMore with nextCursor for extraction result pages.
Never mix cursors between those response envelopes.
What Metadata Does a Tweet Include?
A tweet includes its ID, text, counts, URL, language, and relationship fields. It can also include author, media, entities, labels, and edit objects. Article, place, quote, repost, and Note Tweet objects can also appear.How Do I Find a Tweet ID?
Read the responseid field. Keep it as a string. Use it for lookups, joins,
dedupe, exports, and engagement snapshots.
What Is a Twitter Conversation ID?
conversationId identifies the root tweet for the returned conversation.
inReplyToId identifies one reply’s direct parent. Preserve both fields.
How Do I Know Whether a Tweet Is a Reply?
CheckisReply. Then read inReplyToId, inReplyToUserId, and
inReplyToUsername when present.
How Do Quotes Differ From Reposts?
Quotes can add new outer tweet text andquoted_tweet context. Reposts expose
original context through retweeted_tweet. Keep both tweet IDs separate.
Which Fields Contain Twitter Engagement Metrics?
UselikeCount, replyCount, retweetCount, quoteCount, viewCount, and
bookmarkCount. Store collection time because these counts can change.
Does the Twitter Profile API Include Follower Counts?
Yes. Readfollowers and following when supplied. Store dated snapshots for
growth tracking. Join snapshots through the profile id.
Why Is a Tweet or Profile Field Missing?
The field is optional and X did not supply it for that response. Preserve the absence. Never replace it with an invented value.How Do I Get Tweet Media Metadata?
Read the tweet’smedia array. Use type, URLs, dimensions, alt text,
duration, availability, and video variants when present.