{"id":"31cf1b2a-1b73-4aa3-b3c3-40b05a9bf107","slug":"x-com-api","name":"x.com API","description":"Retrieve posts and profile information from X (Twitter) user timelines by specifying a username. Access live post data, engagement metrics, and user profile details for any public account.","front_facing_description":"Retrieve posts and profile information from X (Twitter) user timelines by specifying a username. Access live post data, engagement metrics, and user profile details for any public account.","source_url":"https://x.com","is_authenticated":false,"canonical_scraper_id":"a5441c3e-48bc-4f1b-8b42-8fccc7e99d45","apis":[{"method":"GET","endpoint_name":"get_user_posts","description":"Returns one page of public posts from an X/Twitter user's timeline as an array of post objects (id, text, created_at, engagement counts, view_count, is_retweet, author user block, media with video URLs where present, expanded urls, quoted_tweet, reply/conversation ids, is_pinned). The pinned post, if any, appears first with is_pinned=true; the remaining posts are ordered newest-first by id. The user's own posts inside conversation threads on the timeline are included; other people's replies are not. include_retweets=false drops reposts locally after the page is fetched, so a filtered page can hold fewer than limit posts. limit (1-100, default 10) caps the posts returned per call; when the site's page holds more posts than limit the surplus is not returned and next_cursor continues from the end of the site's page. next_cursor is the opaque continuation for the next call, or null when the site marks the timeline as ended; some high-profile accounts are served as a fixed 'top posts' list with no continuation, so null on the first page is normal for them. Each call costs three upstream requests. An unknown or unavailable handle returns a stale_input (input_not_found) error; a valid account with no visible posts returns an empty posts array with count 0.","input_params":{"limit":{"type":"integer","required":false,"description":"Maximum number of posts to return per page, 1 to 100","default":10,"domain":{"kind":"open","generator":{"type":"static","value":"5"}}},"cursor":{"type":"string","required":false,"description":"Pagination cursor from a previous response next_cursor field; empty or omitted fetches the first page","default":"","domain":{"kind":"open","generator":{"type":"static","value":""}}},"username":{"type":"string","required":true,"description":"X/Twitter username without the at sign","domain":{"kind":"large_enum","sample":["elonmusk","OpenAI","Google"],"pattern":"^[A-Za-z0-9_]{1,15}$","discovery":"any public X/Twitter handle","generator":{"type":"sample_pick"},"cardinality":500000000}},"include_retweets":{"type":"string","required":false,"description":"Whether to include reposts (retweets) in the returned posts","default":"true","enum":"IncludeRetweets","closed":true,"domain":{"kind":"enum","values":["true","false"],"generator":{"type":"enum_pick","strategy":"first"}}}},"return_schema":{"type":"object","fields":{"count":"integer - number of posts returned in this page","posts":"array of post objects: id, text, created_at, language, favorite_count, retweet_count, reply_count, quote_count, bookmark_count, view_count, is_retweet, url, user {id, name, screen_name, profile_image_url, verified, is_blue_verified, followers_count}, media (array of {type, url, expanded_url, video_url for videos} or null), urls (array of {url, display_url} or null), quoted_tweet (nested post or null), in_reply_to_status_id, conversation_id, is_pinned","username":"string - the requested username","next_cursor":"string or null - opaque cursor for the next page; null when the timeline has no further continuation"},"sample":{"data":{"count":2,"posts":[{"id":"2095595741528125780","url":"https://x.com/OpenAI/status/2095595741528125780","text":"This is GPT-6 Astra.\n\nAnything you can do on a computer, Astra can do for you. Fast. https://t.co/gDd0IsewJw","urls":null,"user":{"id":"4398626122","name":"OpenAI","verified":false,"screen_name":"OpenAI","followers_count":5386654,"is_blue_verified":true,"profile_image_url":"https://pbs.twimg.com/profile_images/1885410181409820672/ztsaR0JW_normal.jpg"},"media":[{"url":"https://pbs.twimg.com/amplify_video_thumb/2095595661559574528/img/Vmb2pgEFJ6fpCUTD.jpg","type":"video","video_url":"https://video.twimg.com/amplify_video/2095595661559574528/vid/avc1/1920x1080/grXdGA07X-yPH_8z.mp4?tag=29","expanded_url":"https://x.com/OpenAI/status/2095595741528125780/video/1"}],"language":"en","is_pinned":true,"created_at":"Thu Sep 03 19:32:13 +0000 2026","is_retweet":false,"view_count":138069351,"quote_count":26573,"reply_count":9214,"quoted_tweet":null,"retweet_count":35400,"bookmark_count":102110,"favorite_count":340143,"conversation_id":"2095595741528125780","in_reply_to_status_id":null},{"id":"2098508066048069848","url":"https://x.com/OpenAI/status/2098508066048069848","text":"RT @evayzh: check out how AI helps scientists with quantum computing research\n\n@bea_yankelevich at MIT's EQuS group used GPT-5.6 Sol with C…","urls":null,"user":{"id":"4398626122","name":"OpenAI","verified":false,"screen_name":"OpenAI","followers_count":5386654,"is_blue_verified":true,"profile_image_url":"https://pbs.twimg.com/profile_images/1885410181409820672/ztsaR0JW_normal.jpg"},"media":null,"language":"en","is_pinned":false,"created_at":"Fri Sep 11 20:24:45 +0000 2026","is_retweet":true,"view_count":52472,"quote_count":0,"reply_count":0,"quoted_tweet":null,"retweet_count":29,"bookmark_count":0,"favorite_count":0,"conversation_id":"2098508066048069848","in_reply_to_status_id":null}],"username":"OpenAI","next_cursor":"DAAHCgABHTWlWS4___MLAAIAAAATMjA5ODUwODA2NjA0ODA2OTg0OAgAAwAAAAIAAA"},"status":"success"}},"initiates_session":false,"price":3,"verification":{"assertions":[{"path":"$.data.posts","op":"array_min_len","value":1},{"path":"$.data.username","op":"not_null"},{"path":"$.data.count","op":"not_null"}],"empty_is_valid":false,"recipe_version":1}},{"method":"GET","endpoint_name":"get_user_profile","description":"Get profile information for an X/Twitter user including follower counts, bio, verification status, and profile URLs. Returns a single profile object with all publicly visible account metadata.","input_params":{"username":{"type":"string","required":true,"description":"X/Twitter username without the at sign","domain":{"kind":"large_enum","sample":["elonmusk","OpenAI","Google"],"pattern":"^[A-Za-z0-9_]{1,15}$","discovery":"any public X/Twitter handle","generator":{"type":"sample_pick"},"cardinality":500000000}}},"return_schema":{"type":"object","fields":{"id":"string - user numeric ID","url":"string - website link","name":"string - display name","location":"string - user-set location","verified":"boolean - legacy verification","created_at":"string - account creation date","description":"string - user bio","media_count":"integer","profile_url":"string - full profile URL on x.com","screen_name":"string - username handle","tweet_count":"integer","listed_count":"integer","followers_count":"integer","following_count":"integer","favourites_count":"integer","is_blue_verified":"boolean - X Blue subscription","profile_image_url":"string - avatar URL","profile_banner_url":"string - banner image URL"},"sample":{"data":{"id":"44196397","url":"","name":"Elon Musk","location":"","verified":false,"created_at":"Tue Jun 02 20:12:29 +0000 2009","description":"","media_count":4532,"profile_url":"https://x.com/elonmusk","screen_name":"elonmusk","tweet_count":104019,"listed_count":169515,"followers_count":240169232,"following_count":1352,"favourites_count":233325,"is_blue_verified":true,"profile_image_url":"https://pbs.twimg.com/img.jpg","profile_banner_url":"https://pbs.twimg.com/profile_banners/44196397/123"},"status":"success"}},"initiates_session":false,"price":2,"verification":{"assertions":[{"path":"$.data.screen_name","op":"not_null"},{"path":"$.data.id","op":"not_null"},{"path":"$.data.followers_count","op":"not_null"}],"empty_is_valid":false,"recipe_version":1}},{"method":"GET","endpoint_name":"get_post_by_url","description":"Returns the details of one public X/Twitter post identified by its URL or numeric post ID: id, text, created_at, language, engagement counts (favorite_count, retweet_count, reply_count, quote_count, bookmark_count, view_count), is_retweet, url, the author user block, media with video URLs where present, expanded urls, the quoted_tweet (nested post or null), reply/conversation ids and is_pinned (always false here, since pinning is a timeline property). The same post object shape as get_user_posts.posts[*]. Accepts either a full status URL on x.com or twitter.com (one shape: https://x.com/<user>/status/<id>, extra path or query suffixes are ignored) or the bare numeric post ID. Each call costs two upstream requests. A malformed value returns a stale_input (input_format_invalid) error; a post that does not exist, was deleted, or is not publicly visible returns a stale_input (input_not_found) error.","input_params":{"post":{"type":"string","required":true,"description":"Post URL (https://x.com/<user>/status/<id>) or the bare numeric post id as emitted by get_user_posts.posts[*].id","domain":{"kind":"derived","generator":{"path":"$.data.posts[*].id","type":"derived","from_endpoint":"get_user_posts"}}}},"return_schema":{"type":"object","fields":{"id":"string - post numeric ID","url":"string - canonical post URL on x.com","text":"string - post text","urls":"array of {url, display_url} expanded links or null","user":"object - author: id, name, screen_name, profile_image_url, verified, is_blue_verified, followers_count","media":"array of {type, url, expanded_url, video_url for videos} or null","language":"string - language code","is_pinned":"boolean - always false for a single-post lookup","created_at":"string - post creation timestamp as served by the site","is_retweet":"boolean - whether the post is a repost","view_count":"integer - views","quote_count":"integer - quote posts","reply_count":"integer - replies","quoted_tweet":"nested post object with the same shape, or null","retweet_count":"integer - reposts","bookmark_count":"integer - number of times the post was bookmarked (collected)","favorite_count":"integer - likes","conversation_id":"string - id of the root post of the conversation","in_reply_to_status_id":"string or null - id of the post this replies to"},"sample":{"data":{"id":"2106665276758491194","url":"https://x.com/elonmusk/status/2106665276758491194","text":"https://t.co/1iJ6XnWSUo","urls":[{"url":"https://Dot.com","display_url":"Dot.com"}],"user":{"id":"44196397","name":"Elon Musk","verified":false,"screen_name":"elonmusk","followers_count":241528883,"is_blue_verified":true,"profile_image_url":"https://pbs.twimg.com/profile_images/2103567689515954176/aR-Kjpp4_normal.jpg"},"media":null,"language":"zxx","is_pinned":false,"created_at":"Sun Oct 04 08:38:36 +0000 2026","is_retweet":false,"view_count":63228134,"quote_count":789,"reply_count":4341,"quoted_tweet":{"id":"2106663759221543263","url":"https://x.com/paulg/status/2106663759221543263","text":"Don't own the .com? The good news is, there's no such thing. \"The .com\" is  just the only .com you've been able to think of so far.","urls":null,"user":{"id":"183749519","name":"Paul Graham","verified":false,"screen_name":"paulg","followers_count":5415596,"is_blue_verified":true,"profile_image_url":"https://pbs.twimg.com/profile_images/1824002576/pg-railsconf_normal.jpg"},"media":null,"language":"en","is_pinned":false,"created_at":"Sun Oct 04 08:32:34 +0000 2026","is_retweet":false,"view_count":63536978,"quote_count":157,"reply_count":595,"quoted_tweet":null,"retweet_count":141,"bookmark_count":870,"favorite_count":3712,"conversation_id":"2106663759221543263","in_reply_to_status_id":null},"retweet_count":4145,"bookmark_count":7433,"favorite_count":91965,"conversation_id":"2106665276758491194","in_reply_to_status_id":null},"status":"success"}},"initiates_session":false,"price":2,"verification":{"assertions":[{"path":"$.data.id","op":"not_null"},{"path":"$.data.bookmark_count","op":"not_null"},{"path":"$.data.user.screen_name","op":"not_null"}],"empty_is_valid":false,"recipe_version":1}},{"method":"GET","endpoint_name":"get_post_replies","description":"Returns the replies (comments) under one public X/Twitter post that the site shows to a visitor who is not signed in, as an array of reply objects (id, text, created_at, language, engagement counts including bookmark_count and view_count, url, author user block, media with video URLs where present, expanded urls, in_reply_to_status_id, conversation_id, conversation_section as labelled by the site, is_author_reply). X publishes only a small preview of the conversation to signed-out visitors: typically the author's own follow-up thread plus a handful of top-ranked replies (up to roughly ten, in the site's ranking order), and gates the remaining replies behind sign-in, so count is usually far below reply_count, which is the site's total reply count for the post. There is no continuation: the preview has no further pages. One shape of the post input is https://x.com/<user>/status/<id>; the bare numeric post ID is accepted too. One upstream page load per call. A post with no replies returns an empty replies array with count 0. A malformed value returns a stale_input (input_format_invalid) error; a post that does not exist or is not publicly visible returns a stale_input (input_not_found) error.","input_params":{"post":{"type":"string","required":true,"description":"Post URL (https://x.com/<user>/status/<id>) or the bare numeric post id as emitted by get_user_posts.posts[*].id","domain":{"kind":"derived","generator":{"path":"$.data.posts[*].id","type":"derived","from_endpoint":"get_user_posts"}}}},"return_schema":{"type":"object","fields":{"count":"integer - number of reply objects returned (the signed-out preview)","post_id":"string - numeric ID of the post whose replies were fetched","replies":"array of reply objects: id, text, created_at, language, favorite_count, retweet_count, reply_count, quote_count, bookmark_count, view_count, url, user {id, name, screen_name, profile_image_url, is_blue_verified, followers_count}, media (array of {type, url, expanded_url, video_url for videos} or null), urls (array of {url, display_url} or null), in_reply_to_status_id, conversation_id, conversation_section (site's section label such as HighQuality, or null), is_author_reply (true when the reply is by the post's author)","post_url":"string - canonical URL of that post on x.com","reply_count":"integer - the site's total number of replies to the post (all replies, including those not visible to signed-out visitors)"},"sample":{"data":{"count":2,"post_id":"2106665276758491194","replies":[{"id":"2106688077305663515","url":"https://x.com/nitsin25/status/2106688077305663515","text":"@elonmusk Are You really required to boost YOURs post😱😱?","urls":null,"user":{"id":"1000255424073940994","name":"Nitesh","screen_name":"nitsin25","followers_count":4459,"is_blue_verified":true,"profile_image_url":"https://pbs.twimg.com/profile_images/2103856980876271616/9Nhl2QHr_normal.jpg"},"media":null,"language":"en","created_at":"Sun Oct 04 10:09:12 +0000 2026","view_count":123862,"quote_count":0,"reply_count":13,"retweet_count":4,"bookmark_count":11,"favorite_count":2184,"conversation_id":"2106665276758491194","is_author_reply":false,"conversation_section":"HighQuality","in_reply_to_status_id":"2106665276758491194"},{"id":"2106711384851665154","url":"https://x.com/Hunter_Weiss/status/2106711384851665154","text":"@elonmusk actually insane levels of trolling https://t.co/Dts1FZSdgp","urls":null,"user":{"id":"289213600","name":"Hunter Weiss","screen_name":"Hunter_Weiss","followers_count":34017,"is_blue_verified":true,"profile_image_url":"https://pbs.twimg.com/profile_images/1970689382890745856/353rwT7N_normal.jpg"},"media":[{"url":"https://pbs.twimg.com/media/HTyKxoBXwAIE2en.jpg","type":"photo","expanded_url":"https://x.com/Hunter_Weiss/status/2106711384851665154/photo/1"}],"language":"en","created_at":"Sun Oct 04 11:41:49 +0000 2026","view_count":143085,"quote_count":2,"reply_count":12,"retweet_count":24,"bookmark_count":80,"favorite_count":1118,"conversation_id":"2106665276758491194","is_author_reply":false,"conversation_section":"HighQuality","in_reply_to_status_id":"2106665276758491194"}],"post_url":"https://x.com/elonmusk/status/2106665276758491194","reply_count":4341},"status":"success"}},"initiates_session":false,"price":1,"verification":{"assertions":[{"path":"$.data.post_id","op":"not_null"},{"path":"$.data.reply_count","op":"not_null"},{"path":"$.data.replies","op":"type_is","value":"array"},{"path":"$.data.count","op":"not_null"}],"empty_is_valid":true,"recipe_version":1}},{"method":"GET","endpoint_name":"get_article","description":"Returns one public X long-form article (the 'Articles' feature) as served to a visitor who is not signed in: title, author block, preview_text, cover image, publish and modify timestamps, the complete body as plain text (text, paragraphs separated by newlines), and the body as an ordered array of blocks preserving structure. Each block has a type as labelled by the site (observed: unstyled for paragraphs, header-one/header-two for headings, blockquote, ordered-list-item, unordered-list-item, atomic for embedded media) and its text; atomic blocks carry media_urls (image URLs, or null) and empty text. One shape of the article input is https://x.com/<user>/article/<id>; a status URL of the article's post or the bare numeric post ID is accepted too. One upstream page load per call, no pagination. A malformed value returns a stale_input (input_format_invalid) error; an ID that is not an article post, does not exist, or is not publicly visible returns a stale_input (input_not_found) error.","input_params":{"article":{"type":"string","required":true,"description":"Article URL (https://x.com/<user>/article/<id>), the status URL of the article's post, or the bare numeric post ID","domain":{"kind":"open","generator":{"type":"static","value":"https://x.com/VibeMarketer_/article/2087894971257110685"}}}},"return_schema":{"type":"object","fields":{"url":"string - canonical article URL on x.com","text":"string - complete article body as plain text, including headings and list items, newline-separated","title":"string - article title","author":"object - id, name, screen_name, profile_image_url of the article's author","blocks":"array of {type, text, media_urls (atomic blocks only: array of image URLs or null)} in reading order","post_id":"string - numeric ID of the post that carries the article (the ID in the article URL)","block_count":"integer - number of blocks","modified_at":"string or null - last modification time, ISO 8601 UTC","preview_text":"string - the site's short teaser of the opening text","published_at":"string or null - first publish time, ISO 8601 UTC","cover_image_url":"string or null - cover image URL"},"sample":{"url":"https://x.com/VibeMarketer_/article/2087894971257110685","text":"I built a Hermes GTM agent that can handle almost your entire outbound sales workflow.\nGive it your market, offer, and ideal customer. ...","title":"How to Build a Full Outbound GTM Agent With Hermes","author":{"id":"362697164","name":"J.B.","screen_name":"VibeMarketer_","profile_image_url":"https://pbs.twimg.com/profile_images/1950293861793677312/ldQniJt5_normal.jpg"},"blocks":[{"text":"I built a Hermes GTM agent that can handle almost your entire outbound sales workflow.","type":"unstyled"},{"text":"","type":"blockquote"},{"text":"If you want more practical AI systems like this, follow me at @VibeMarketer_. Thanks for reading :)","type":"unstyled"}],"post_id":"2087894971257110685","block_count":239,"modified_at":"2026-08-13T13:32:05Z","preview_text":"I built a Hermes GTM agent that can handle almost your entire outbound sales workflow.\nGive it your market, offer, and ideal customer. It builds a live pipeline of researched accounts, timely buying","published_at":"2026-08-13T13:32:06Z","cover_image_url":"https://pbs.twimg.com/media/HPmxZQJaoAAeSvN.jpg"}},"initiates_session":false,"price":1,"verification":{"assertions":[{"path":"$.data.title","op":"not_null"},{"path":"$.data.text","op":"not_null"},{"path":"$.data.author.screen_name","op":"not_null"},{"path":"$.data.blocks","op":"array_min_len","value":1}],"empty_is_valid":false,"recipe_version":1}}],"sample_inputs":{"get_article":{"article":"https://x.com/VibeMarketer_/article/2087894971257110685"},"get_user_posts":{"limit":"5","username":"elonmusk","include_retweets":"true"},"get_post_by_url":{"post":"2114765150431682772"},"get_post_replies":{"post":"2114765150431682772"},"get_user_profile":{"username":"elonmusk"}},"prefill_inputs":{"get_user_posts":{"limit":"5","cursor":"","username":"elonmusk","include_retweets":"true"},"get_user_profile":{"username":"elonmusk"},"get_article":{"article":"https://x.com/VibeMarketer_/article/2087894971257110685"}},"last_verified_at":"2026-10-29T08:55:35.761743+00:00","endpoint_health":[{"endpoint_name":"get_user_posts","status":"healthy","last_checked_at":"2026-10-29T08:55:35.761743+00:00","last_verified_at":"2026-10-29T08:55:35.761743+00:00","recent_runs":[{"at":"2026-10-28T23:02:52.936382+00:00","status":"healthy"},{"at":"2026-10-28T22:02:53.739995+00:00","status":"healthy"},{"at":"2026-10-28T15:02:25.246171+00:00","status":"healthy"},{"at":"2026-10-27T15:02:25.366807+00:00","status":"healthy"},{"at":"2026-10-27T12:04:25.197421+00:00","status":"healthy"}]},{"endpoint_name":"get_post_replies","status":"healthy","last_checked_at":"2026-10-28T23:02:52.936382+00:00","last_verified_at":"2026-10-28T23:02:52.936382+00:00","recent_runs":[{"at":"2026-10-28T23:02:52.936382+00:00","status":"healthy"},{"at":"2026-10-28T22:02:53.739995+00:00","status":"healthy"},{"at":"2026-10-28T15:02:25.246171+00:00","status":"healthy"},{"at":"2026-10-27T15:02:25.366807+00:00","status":"healthy"},{"at":"2026-10-27T12:04:25.197421+00:00","status":"blocked"}]},{"endpoint_name":"get_user_profile","status":"healthy","last_checked_at":"2026-10-29T08:54:56.334653+00:00","last_verified_at":"2026-10-29T08:54:56.334653+00:00","recent_runs":[{"at":"2026-10-28T23:02:52.936382+00:00","status":"healthy"},{"at":"2026-10-28T22:02:53.739995+00:00","status":"healthy"},{"at":"2026-10-28T15:02:25.246171+00:00","status":"healthy"},{"at":"2026-10-27T15:02:25.366807+00:00","status":"healthy"},{"at":"2026-10-27T12:04:25.197421+00:00","status":"healthy"}]},{"endpoint_name":"get_post_by_url","status":"healthy","last_checked_at":"2026-10-28T23:02:52.936382+00:00","last_verified_at":"2026-10-28T23:02:52.936382+00:00","recent_runs":[{"at":"2026-10-28T23:02:52.936382+00:00","status":"healthy"},{"at":"2026-10-28T22:02:53.739995+00:00","status":"healthy"},{"at":"2026-10-28T15:02:25.246171+00:00","status":"healthy"},{"at":"2026-10-27T15:02:25.366807+00:00","status":"healthy"},{"at":"2026-10-27T12:04:25.197421+00:00","status":"healthy"}]},{"endpoint_name":"get_article","status":"healthy","last_checked_at":"2026-10-28T23:02:52.936382+00:00","last_verified_at":"2026-10-28T23:02:52.936382+00:00","recent_runs":[{"at":"2026-10-28T23:02:52.936382+00:00","status":"healthy"},{"at":"2026-10-28T22:02:53.739995+00:00","status":"ambiguous"},{"at":"2026-10-28T15:02:25.246171+00:00","status":"ambiguous"},{"at":"2026-10-27T15:02:25.366807+00:00","status":"healthy"}]}],"sdk_usage_example":null,"sdk_delivery_state":"absent","summary":"Fetch posts, single post details (including bookmark counts), publicly visible replies under a post, full long-form article text, and profile data from X.com Twitter.","updated_at":"2026-10-28T22:24:09.807409+00:00","user_variants":[],"latest_version":14,"user_status":null,"user_scraper_id":null,"contributes_to_marketplace":true,"pinned_version":null,"seo_content":{"faqs":[{"a":"Yes. X offers the X Developer Platform at https://developer.x.com, which provides tiered API access to tweet data, user information, and more. Access is paid beyond a narrow free tier, with significant restrictions on data volume and endpoints at lower plan levels.","q":"Does X.com have an official developer API?"},{"a":"It returns the publicly visible replies that appear to a signed-out visitor, plus the site's total `reply_count` for the post. The `count` field reflects how many reply objects were returned, which is often lower than `reply_count` — threads with many replies will only surface a subset. The `post_url` and `post_id` fields identify the parent post.","q":"What does `get_post_replies` actually return, and does it include all replies?"},{"a":"No — all five endpoints return data for public accounts and publicly accessible posts only. Protected account timelines, posts visible only to followers, and direct messages are not covered. You can fork the API on Parse and revise it if your use case changes in ways that intersect with public data the current endpoints don't reach.","q":"Does the API return data for private or protected accounts?"},{"a":"Not currently. The API covers timelines, single post details, replies, user profiles, and long-form articles. Follower/following graphs, Twitter/X Lists, and Communities data are not included. You can fork the API on Parse and revise it to add endpoints for those resources.","q":"Does the API cover follower lists, following lists, or lists/communities?"},{"a":"Pass the `next_cursor` string from one response as the `cursor` parameter in your next request. When the timeline has no further pages, `next_cursor` is `null`. Omitting the `cursor` parameter, or passing an empty string, fetches the first page. The `limit` parameter controls how many posts come back per page, up to a maximum of 100.","q":"How does pagination work for `get_user_posts`?"}],"keywords":["X Twitter API posts endpoint","Twitter timeline API scraper","fetch Twitter user posts API","get tweet engagement counts API","Twitter bookmark count API","X.com profile data API","Twitter reply scraper API","X long-form article API","tweet view count API","Twitter public data API no official key","X Twitter media video URL API","get Twitter user followers bio API","tweet details by URL API","X Twitter pagination cursor API","social media data extraction API"],"use_cases":["Track engagement trends for a public account by paging through `get_user_posts` and recording `favorite_count`, `retweet_count`, and `view_count` over time.","Build a media archiver that collects video URLs and image attachments from a user's timeline using the `media` array in post objects.","Monitor brand mentions and reply sentiment by fetching `get_post_replies` for key posts and comparing `reply_count` against the returned `count`.","Enrich a journalist or analyst database with profile metadata from `get_user_profile`, including `followers_count`, `description`, and account `created_at`.","Index X Articles for a research corpus using `get_article` to retrieve full `text` and structured `blocks` with inline media references.","Detect pinned or reposted content by inspecting `is_pinned` and `is_retweet` flags in the timeline response.","Feed a social listening dashboard with bookmark and view counts — fields not exposed by most conventional social data sources."],"meta_title":"X (Twitter) API – Posts, Profiles & Articles","generated_at":"2026-10-27T14:13:09.781723+00:00","lead_paragraph":"This API exposes 5 endpoints covering public data on X.com (formerly Twitter): user timelines, single post details, post replies, author profiles, and full long-form articles. The `get_user_posts` endpoint returns up to 100 posts per page with engagement counts including `bookmark_count` and `view_count`, while `get_post_by_url` lets you look up any post by URL or numeric ID and get back the complete author block, media URLs, and all six engagement metrics.","schema_version":2,"meta_description":"Fetch X/Twitter posts, profiles, replies, and long-form articles via a structured API. Get engagement counts, media URLs, and bookmark counts for any public account.","primary_category":"social_media","long_description_md":"## Timelines and Post Details\n\n`get_user_posts` accepts a `username` (without the @ sign), an optional `limit` between 1 and 100, an optional `cursor` for pagination, and an `include_retweets` flag. Each post object in the `posts` array includes `id`, `text`, `created_at`, `language`, `favorite_count`, `retweet_count`, `reply_count`, `quote_count`, `bookmark_count`, `view_count`, `is_retweet`, `is_pinned`, expanded URLs, media with video URLs where present, and a nested `user` author block. The `next_cursor` field is `null` when the timeline has no further pages. `get_post_by_url` accepts either the full post URL (`https://x.com/<user>/status/<id>`) or the bare numeric post ID, and returns the same field set for that single post.\n\n## Replies and Engagement\n\n`get_post_replies` returns the publicly visible replies under a post. The response includes a `replies` array of reply objects — each with the same engagement fields as a standard post — plus a `reply_count` integer reflecting the site's total reply count for that post, which will exceed `count` when the full thread is not visible to signed-out visitors. This makes it straightforward to compare visible coverage against the full volume.\n\n## Profiles and Long-Form Articles\n\n`get_user_profile` returns account-level metadata for any public user: `id`, `name`, `screen_name`, `description`, `location`, `url`, `verified`, `media_count`, `created_at`, and `profile_url`. `get_article` targets the X Articles feature, returning the article `title`, `published_at`, `modified_at`, `preview_text`, the full `text` body as newline-separated plain text, and a `blocks` array where each block carries a `type`, `text`, and optional `media_urls` list — useful when you need to process article content section by section.","generated_with_model":"global.anthropic.claude-sonnet-4-6","secondary_categories":["news_media","b2b_directory"]},"primary_category":"social_media","secondary_categories":["news_media","b2b_directory"],"access_requirements":[]}