Choose a level
| Level | Use it for | Shape |
|---|---|---|
moderatedefault | Applications and databases. Stable camelCase names, IDs, metrics, media and nested posts. | items, count, pagination |
contentful | Agents, summaries and text analysis. Smaller records with text, author, engagement and context. No numeric IDs; use url. | items, count, pagination |
raw | Fields the other levels do not expose. X's GraphQL response unchanged. | level, operation, data |
Contentful collection records include relationship, for example follower, direct_reply or thread_post.
Compare a payload
One follower page at each level. Values are shortened examples.
GET /v1/users/by-id/2311987360/followers
{
"items": [
{
"id": "1234567890",
"username": "example_user",
"displayName": "Example User",
"description": "…",
"followersCount": 1520,
"followingCount": 310
}
],
"count": 1,
"pagination": { "next_cursor": "DAABCgAB…", "has_more": true }
}GET /v1/users/by-id/2311987360/followers?level=contentful
{
"items": [
{
"relationship": "follower",
"username": "example_user",
"name": "Example User",
"profileUrl": "https://x.com/example_user",
"followers": 1520,
"following": 310
}
],
"count": 1,
"pagination": { "next_cursor": "DAABCgAB…", "has_more": true }
}GET /v1/users/by-id/2311987360/followers?level=raw
{
"level": "raw",
"operation": "Followers",
"data": { "…": "X's GraphQL response, unchanged" }
}Post fields
| Data | Moderate | Contentful |
|---|---|---|
| Post ID | id | —Contentful has url instead |
| Link | url | url |
| Text | content | content |
| Posted at | createdAt | postedAtISO 8601 |
| Author | user (full account) | author { username, name, avatarUrl, verified } |
| Metrics | replyCount, retweetCount, likeCount, quoteCount, bookmarkCount, viewCount | engagement { replies, reposts, likes, quotes, views }viewCount and views appear when X reports them |
| Media | media { photos, videos, animated } | media [{ type, url, previewUrl, altText }] |
| Conversation | conversationId, inReplyToTweetId, inReplyToUser | replyingTo { username, name } |
| Quoted and reposted | quotedTweet, retweetedTweet | quotedPost, repostedPostNested posts |
| Other | lang, hashtags, cashtags, mentionedUsers, links, card, place, sourceLabel… | language, links, relationship |
Account fields
| Data | Moderate | Contentful |
|---|---|---|
| Account ID | id | — |
| Username and name | username, displayName | username, name |
| Bio | description, descriptionLinks | bio |
| Profile link and image | url, profileImageUrl, profileBannerUrl | profileUrl, avatarUrl |
| Counts | followersCount, followingCount, statusesCount, favouritesCount, listedCount, mediaCount | followers, following |
| Verification | verified, blueVerified, verifiedType | verified |
| Other | createdAt, location, protected, pinnedTweetIds | location, relationship |
Fields with no value are omitted rather than returned as null.
Raw responses
Raw wraps X's response with the GraphQL operation name. It has no pagination object; the cursor is inside X's timeline instructions.
?level=raw
{
"level": "raw",
"operation": "Followers",
"data": { "…": "X's GraphQL response, unchanged" }
}