{"openapi":"3.0.0","info":{"description":"Pay-as-you-go Twitter/X data API: tweet details, threads, user profiles, timelines, follower graph, search, mentions, bookmarks, lists, communities, Spaces, articles, DMs and write actions at $0.0008 per call","version":[{"name":"v1","value":"v1"}]},"servers":[{"description":"Pay-as-you-go Twitter/X data API: tweet details, threads, user profiles, timelines, follower graph, search, mentions, bookmarks, lists, communities, Spaces, articles, DMs and write actions at $0.0008 per call","url":"https://api.apirails.com/twitterapis"}],"paths":{"/account/me":{"get":{"tags":["Account"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#account-me","api_endpoint":"https://api.twitterapis.com/account/me"},"summary":"Account Info","description":"Account Info | Returns the account behind your API key: remaining credits, credits consumed, total requests served, and when the account was created. Use it to show a balance in your own dashboard or to alert before you run out of credits. This call is free and is not metered. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/account/payments":{"get":{"tags":["Account"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#account-payments","api_endpoint":"https://api.twitterapis.com/account/payments"},"summary":"Payment History","description":"Payment History | Returns the payment history for the account behind your API key, ordered newest first. Each entry records what was paid, how many credits it added, and whether the payment completed. Use it to reconcile top-ups against your own billing records. This call is free. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/feedback":{"post":{"tags":["Account"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#feedback-post","api_endpoint":"https://api.twitterapis.com/feedback"},"summary":"Send Feedback","description":"Send Feedback | Files a product feedback report against your account. It exists for AI agents (Claude Code, Cursor, any MCP client) working against this API: when a call fails, a capability is missing, or the user asks for it, the agent drafts a report locally, the user reviews it, and the client sends it here. The report reaches the team as a stored row plus a Slack post, and the returned id lets the agent read its status later. Free, never metered, rate limited to 10 per minute per key. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"type":{"type":"string","description":"One of bug, idea or missing_capability. Anything else is rejected with 400 naming type.","required":true},"area":{"type":"string","description":"The endpoint or feature the report concerns, for example tweet/thread or monitor webhooks. Up to 80 characters."},"client":{"type":"string","description":"The calling agent or tool and its version, so a fix can be matched to what sent the report. Up to 120 characters."},"details":{"type":"string","description":"1 to 8000 characters. Recommended shape, four labelled bullets: what happened (observed vs expected, the exact error text if short), what the user said (quoted verbatim, or \"user did not comment\"), repro (minimal steps), evidence (endpoint, status, request id, tool name, client, version).","required":true},"evidence":{"type":"object","description":"Identifiers only, never payloads: tool, endpoint, status, request_id, client, mcp_version. Must serialize to 4096 bytes or fewer, and must be a JSON object (an array is rejected); either failure is a 400 naming evidence.","properties":{}},"title":{"type":"string","description":"One line, 1 to 120 characters after trimming. Say what broke or what is missing, not how the user feels about it.","required":true}}},"example":{"type":["bug"],"area":["tweet/thread"],"client":["claude-code/2.1.259 via @twitterapis/mcp@0.9.6"],"details":["what happened: tweet/thread?id=1899999999999999999 answered 500 server_error, expected the 4-post thread. what the user said: \"it worked yesterday\". repro: GET tweet/thread with that id. evidence: status 500, request id req_01J9K2, twitter_tweet_thread via claude-code/2.1.259."],"evidence":[{"client":"claude-code/2.1.259","endpoint":"tweet/thread","mcp_version":"0.9.6","request_id":"req_01J9K2","status":500,"tool":"twitter_tweet_thread"}],"title":["tweet/thread returns 500 on a quoted reply"]}}}}},"get":{"tags":["Account"],"parameters":[{"name":"type","in":"query","description":"Filter to one of bug, idea or missing_capability. Anything else is rejected with 400 naming type.","required":false,"schema":{"type":"string","example":""}},{"name":"cursor","in":"query","description":"Opaque continuation token from a previous response's next_cursor. Omit it to start from the newest report. A cursor that cannot be decoded is 400 naming cursor, never a silently empty page.","required":false,"schema":{"type":"string","example":""}},{"name":"limit","in":"query","description":"Max reports to return, 1 to 100. Defaults to 25. Anything else is rejected with 400 naming limit.","required":false,"schema":{"type":"number","example":""}},{"name":"status","in":"query","description":"Filter to one of new, triaged, shipped or declined. Anything else is rejected with 400 naming status.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#feedback-get","api_endpoint":"https://api.twitterapis.com/feedback"},"summary":"List Feedback","description":"List Feedback | Returns the calling account's own feedback reports, newest first, keyset-paginated on (created_at desc, id desc). Each item carries the same summary fields as GET feedback/{id} (id, type, title, area, status, response, created_at, updated_at) and never details or evidence, so paging this endpoint can never turn into a bulk export of a report's full body: read one by id to get that. Free, never metered, and shares the 10-per-minute limiter with POST feedback and GET feedback/{id}. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/feedback/{id}":{"get":{"tags":["Account"],"parameters":[{"name":"id","in":"path","description":"The id segment of the path, as returned by the endpoint that created the resource.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#feedback-id","api_endpoint":"https://api.twitterapis.com/feedback/{id}"},"summary":"Feedback Status","description":"Feedback Status | Returns one feedback report filed from your account, by id: what was sent (type, title, area), its status (new, triaged, shipped or declined), the team's response text or null, and timestamps. updated_at moves only when status or response changes, so an agent can tell a report that has been looked at from one that has not. Free, never metered. Any id that is not on your account answers 404, including ids that are not UUIDs. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/customer/session":{"post":{"tags":["Account Session"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#customer-session","api_endpoint":"https://api.twitterapis.com/twitter/customer/session"},"summary":"Register Session","description":"Register Session | Register your X session cookies so write actions (like, retweet, bookmark, follow, create or delete a tweet) and private-data reads (home timeline, bookmarks, likes, DMs, followers-you-know) run as your account. Supply auth_token and ct0 once; the session is stored against your API key and applied automatically. This call is free. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"auth_token":{"type":"string","description":"The auth_token cookie value from a logged-in x.com browser session.","required":true},"ct0":{"type":"string","description":"The ct0 CSRF cookie value from the same x.com browser session.","required":true},"proxy_url":{"type":"string","description":"HTTP or SOCKS proxy URL the session egresses through, for example http://user:pass@host:port. This is a property of the session, so every call made with this API key on this session uses it, reads as well as writes. Defaults to direct, which means we choose the egress."},"user_agent":{"type":"string","description":"Browser user-agent to send with session requests. Defaults to a current Chrome UA if omitted."}}},"example":{"auth_token":["string"],"ct0":["string"],"proxy_url":["string"],"user_agent":["string"]}}}}}},"/twitter/customer/session/delete":{"post":{"tags":["Account Session"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#customer-session-delete","api_endpoint":"https://api.twitterapis.com/twitter/customer/session/delete"},"summary":"Revoke Session","description":"Revoke Session | Delete the X session cookies stored against your API key. The key is taken from the authenticated request, and the handler reads no identity from the body, the query string, or any second header, so a call can only ever remove the caller's own stored session. It is idempotent and answers 200 whether or not a row was there to remove. This call is free. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/customer/session/status":{"get":{"tags":["Account Session"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#customer-session-status","api_endpoint":"https://api.twitterapis.com/twitter/customer/session/status"},"summary":"Session Status","description":"Session Status | Read the X session stored against your API key without changing it. Returns the account the session actually resolved to, whether it is still live or has been marked dead, when it was registered and last used, and which egress tier a write would leave on. It never returns auth_token, ct0, or any proxy URL. The key is taken from the authenticated request and the handler reads no identity from the body, the query string, or any second header, so a call can only ever read the caller's own session. This call is free. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/user_login":{"post":{"tags":["Account Session"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-user-login","api_endpoint":"https://api.twitterapis.com/twitter/user/user_login"},"summary":"User Login","description":"User Login | Log in to an X account with a username and password (plus a TOTP secret when two-factor authentication is enabled). The API runs the login itself and stores the resulting session server-side against your API key; authenticated-account reads and the write tools then act as that account. It does NOT return session cookies: the response is {ok, username, message}, never auth_token/ct0/twid. Bringing your own auth_token and ct0 via POST /customer/session stays the primary, recommended path, since it never sends a password over the wire. This call costs $0.01, billed only on a successful login; a rejected attempt (bad credentials, captcha, etc.) is never charged. Cost: $0.0100 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"password":{"type":"string","description":"The X account password.","required":true},"proxy_url":{"type":"string","description":"HTTP or SOCKS proxy the login itself runs through, for example http://user:pass@host:port. Optional; defaults to direct egress when omitted."},"totp_secret":{"type":"string","description":"The base32 two-factor (TOTP) secret, required only when the account has 2FA enabled. The API derives the current one-time code from it; omit for accounts without 2FA."},"user_agent":{"type":"string","description":"Browser User-Agent sent for the login request. Optional; defaults to a current Chrome UA when omitted."},"username":{"type":"string","description":"The X account username or handle (without the leading @). Aliased as user_name for callers migrating from a twitterapi.io-shaped body.","required":true}}},"example":{"password":["string"],"proxy_url":["string"],"totp_secret":["string"],"user_agent":["string"],"username":["string"]}}}}}},"/twitter/tweet/advanced_search":{"get":{"tags":["Search"],"parameters":[{"name":"count","in":"query","description":"Accepted but not honoured on this endpoint: the upstream page is fixed at roughly 20 results and raising count does not return more. Use cursor to read further.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}},{"name":"product","in":"query","description":"Ranking and result type: Latest, Top, People, Photos, or Videos. Defaults to Latest.","required":false,"schema":{"type":"string","example":""}},{"name":"query","in":"query","description":"Search query using Twitter operator syntax.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-advanced-search","api_endpoint":"https://api.twitterapis.com/twitter/tweet/advanced_search"},"summary":"Advanced Tweet Search","description":"Advanced Tweet Search | Run a full-text tweet search using the same operator syntax as Twitter/X advanced search. Combine free text with operators such as from:, to:, since:, until:, min_faves:, and lang: to filter precisely. Results are cursor-paginated at roughly 20 tweets per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/search":{"get":{"tags":["Search"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; clamped to 1-100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"query","in":"query","description":"Keyword or partial handle to search for.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-search","api_endpoint":"https://api.twitterapis.com/twitter/user/search"},"summary":"User Search","description":"User Search | Search the user directory by keyword. Matches against display name, handle, and bio. Useful for discovery, lead lists, and resolving partial handles into full profiles. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/tweet/detail":{"get":{"tags":["Tweet Details"],"parameters":[{"name":"id","in":"query","description":"Numeric ID of the tweet to fetch. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of the tweet, for example https://x.com/naval/status/1759123456789012345. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-detail","api_endpoint":"https://api.twitterapis.com/twitter/tweet/detail"},"summary":"Tweet Detail","description":"Tweet Detail | Resolve a tweet ID into its complete object, including author, engagement counts, attached media, and any quoted tweet. The starting point for any single-tweet workflow. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/tweet/replies":{"get":{"tags":["Tweet Details"],"parameters":[{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Numeric ID of the parent tweet. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of the parent tweet. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-replies","api_endpoint":"https://api.twitterapis.com/twitter/tweet/replies"},"summary":"Tweet Replies","description":"Tweet Replies | Fetch the direct replies to a given tweet, cursor-paginated. Combine with Tweet Detail to reconstruct a discussion or measure reply sentiment. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/tweet/retweeters":{"get":{"tags":["Tweet Details"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; clamped to 1-100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Numeric ID of the tweet. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of the tweet. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-retweeters","api_endpoint":"https://api.twitterapis.com/twitter/tweet/retweeters"},"summary":"Tweet Retweeters","description":"Tweet Retweeters | Fetch the users who retweeted a given tweet, cursor-paginated. Useful for amplification analysis and identifying the accounts that spread a post. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/tweet/quotes":{"get":{"tags":["Tweet Details"],"parameters":[{"name":"count","in":"query","description":"Max items to request for this page. Defaults to 20 and is clamped to 1-100 by the underlying search, so a larger number returns at most 100 rather than erroring.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Numeric ID of the tweet whose quotes you want. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"product","in":"query","description":"Search ordering: Latest (default, reverse-chronological) or Top (X's ranked ordering, materially slower upstream). Any other value falls back to Latest rather than changing what the endpoint means.","required":false,"schema":{"type":"string","example":""}},{"name":"strict","in":"query","description":"Set to true to drop every returned row that does not demonstrably quote the requested tweet, instead of only counting them in quote_matched. Default false, because X does not embed the quoted original on every search result, so strict mode can hide real quotes.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"url","in":"query","description":"Full status URL of the tweet whose quotes you want. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-quotes","api_endpoint":"https://api.twitterapis.com/twitter/tweet/quotes"},"summary":"Tweet Quotes","description":"Tweet Quotes | Fetch the quote tweets of a given tweet, cursor-paginated as full tweet objects, so you can read the commentary people attached rather than just count it. This endpoint is search-backed rather than served by a dedicated X operation, and every response says so in-band via source, search_query and quote_matched. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/tweet/thread":{"get":{"tags":["Tweet Details"],"parameters":[{"name":"id","in":"query","description":"Numeric ID of any tweet in the thread. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of any tweet in the thread. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-thread","api_endpoint":"https://api.twitterapis.com/twitter/tweet/thread"},"summary":"Tweet Thread","description":"Tweet Thread | Given the first tweet of a thread, return the ordered list of tweets that make up the author's connected thread. The endpoint reads forward from the tweet you pass and does not walk backwards, so pass the thread's first tweet, which is the conversation_id carried on every tweet in that thread. Passing a later tweet returns only the tail of the thread. Cost: $0.0040 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/info":{"get":{"tags":["User Reads"],"parameters":[{"name":"username","in":"query","description":"Handle without the leading @.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-info","api_endpoint":"https://api.twitterapis.com/twitter/user/info"},"summary":"User Info by Username","description":"User Info by Username | Resolve a username into the full user object: bio, follower and following counts, verification status, location, and avatar. The canonical entry point for profile lookups. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/info_by_id":{"get":{"tags":["User Reads"],"parameters":[{"name":"user_id","in":"query","description":"Numeric ID of the user.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-info-by-id","api_endpoint":"https://api.twitterapis.com/twitter/user/info_by_id"},"summary":"User Info by ID","description":"User Info by ID | Resolve a numeric user ID into the full user object. Use this when you already have the stable ID (handles can change, IDs do not). Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/status":{"get":{"tags":["User Reads"],"parameters":[{"name":"userName","in":"query","description":"Handle without the leading @. The alias `username` is also accepted.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-status","api_endpoint":"https://api.twitterapis.com/twitter/user/status"},"summary":"User Status","description":"User Status | Return the liveness state of a handle: alive, suspended, not_found, or unavailable. Every outcome is an HTTP 200 and the caller branches on the status field. This exists because a standard profile lookup collapses suspended, deleted, and never-existed into one indistinguishable 404. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/user_about":{"get":{"tags":["User Reads"],"parameters":[{"name":"user_id","in":"query","description":"Numeric user ID. Not currently a substitute for username on this endpoint: a user_id-only request fails upstream. Resolve the ID to a handle with GET /user/info_by_id and pass username.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @. Required: unlike the other user reads, this endpoint cannot be called with user_id alone.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-user-about","api_endpoint":"https://api.twitterapis.com/twitter/user/user_about"},"summary":"User About","description":"User About | Read a profile's full About object: identity, bio, location, linked website, avatar, verification and identity-verification flags, professional account type and categories, follower and following counts, the account creation date, and X's \"About this account\" transparency panel (account country, how the account was created, and username-change history). Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/media":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; clamped to 1-100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric user ID; provide either username or user_id.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-media","api_endpoint":"https://api.twitterapis.com/twitter/user/media"},"summary":"User Media","description":"User Media | Fetch the media tweets posted by a user, cursor-paginated. Returns the tweet objects from the account's Media tab, with media URLs included under extended_entities.media. The tab occasionally surfaces a link-or-card tweet with no attachment, so guard on extended_entities before reading it. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/tweets":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Accepted but not honoured on this endpoint: the upstream timeline page is fixed at roughly 20 tweets and raising count does not return more. Use cursor to read further back.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric user ID; provide either username or user_id.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-tweets","api_endpoint":"https://api.twitterapis.com/twitter/user/tweets"},"summary":"User Tweets","description":"User Tweets | Page through a user's public timeline, cursor-paginated at roughly 20 tweets per call. The page mirrors the account's timeline as X returns it, so it contains original tweets, retweets, and the account's own replies. Each tweet carries is_retweet and is_reply, so filter client-side if you want original posts only. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/tweets_and_replies":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Accepted but not honoured on this endpoint: the upstream timeline page is fixed at roughly 20 tweets and raising count does not return more. Use cursor to read further back.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric user ID; provide either username or user_id.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-tweets-and-replies","api_endpoint":"https://api.twitterapis.com/twitter/user/tweets_and_replies"},"summary":"User Tweets and Replies","description":"User Tweets and Replies | Page through a user's public timeline including the replies the account posted. This endpoint resolves to the same upstream timeline as GET /user/tweets and returns the same tweets in the same order, so treat it as an alias kept for compatibility rather than a wider result set. Each tweet carries is_retweet and is_reply for client-side filtering. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/mentions":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Accepted but not honoured on this endpoint: the upstream page is fixed at roughly 20 results and raising count does not return more. Use cursor to read further.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @ to find mentions of.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-mentions","api_endpoint":"https://api.twitterapis.com/twitter/user/mentions"},"summary":"User Mentions","description":"User Mentions | Return the tweets that mention a given account, cursor-paginated. This is the canonical way to read a handle's mentions; it is a thin wrapper over a to:username search and returns the same tweet objects. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/affiliates":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; clamped to 1-100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"team","in":"query","description":"Affiliate team filter, when the organization exposes teams.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric user ID; provide either username or user_id.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle of the organization account.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-affiliates","api_endpoint":"https://api.twitterapis.com/twitter/user/affiliates"},"summary":"User Affiliates","description":"User Affiliates | Return the affiliated accounts linked under an organization's Verified Organizations profile. Useful for mapping a company to its employees and brand accounts. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/check_follow_relationship":{"get":{"tags":["User Reads"],"parameters":[{"name":"source_user_id","in":"query","description":"Numeric ID of the account whose following is checked.","required":true,"schema":{"type":"string","example":""}},{"name":"target_user_id","in":"query","description":"Numeric ID of the account being checked against.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-check-follow-relationship","api_endpoint":"https://api.twitterapis.com/twitter/user/check_follow_relationship"},"summary":"Check Follow Relationship","description":"Check Follow Relationship | Return the directional relationship between a source and target user: whether source follows target (following) and target follows source (followed_by), plus block, mute, and DM-eligibility flags. The relationship object is null when either user is not found. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/bookmarks":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Items per page. Defaults to 20; capped at 100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-bookmarks","api_endpoint":"https://api.twitterapis.com/twitter/user/bookmarks"},"summary":"Bookmarks","description":"Bookmarks | Fetch the bookmarked tweets for the account behind your registered session, newest first. Each item is a full tweet object with author and engagement counts. Cursor-paginated. Requires a registered session. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/bookmark_search":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Items per page. Defaults to 20; capped at 100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}},{"name":"query","in":"query","description":"Keyword(s) to match against your bookmarked tweets' text.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-bookmark-search","api_endpoint":"https://api.twitterapis.com/twitter/user/bookmark_search"},"summary":"Bookmark Search","description":"Bookmark Search | Search the bookmarks of the account behind your registered session by keyword. Matches against bookmarked tweet text and returns full tweet objects. Cursor-paginated. Requires a registered session. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/bookmark_folders":{"get":{"tags":["User Reads"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-bookmark-folders","api_endpoint":"https://api.twitterapis.com/twitter/user/bookmark_folders"},"summary":"Bookmark Folders","description":"Bookmark Folders | Fetch the caller's own bookmark folders. Each item carries the folder's id, name, and a cover image X auto-picks from its contents. Requires a registered session. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/bookmark_folder_timeline":{"get":{"tags":["User Reads"],"parameters":[{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}},{"name":"folder_id","in":"query","description":"The bookmark folder's id, from user/bookmark_folders.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-bookmark-folder-timeline","api_endpoint":"https://api.twitterapis.com/twitter/user/bookmark_folder_timeline"},"summary":"Bookmark Folder Timeline","description":"Bookmark Folder Timeline | Fetch the tweets inside one of the caller's own bookmark folders, identified by folder_id (from Bookmark Folders). Cursor-paginated. Requires a registered session. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/likes":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Items per page. Defaults to 20; capped at 100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric ID of the account whose likes to read. Resolve a handle with GET /user/info first.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-likes","api_endpoint":"https://api.twitterapis.com/twitter/user/likes"},"summary":"User Likes","description":"User Likes | Read the Likes tab of the account named by user_id, read through your registered session, most recent first. Returns full tweet objects, cursor-paginated. Returns an empty list when the account hides its likes. Requires a registered session and a numeric user_id. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/home_timeline":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Items per page. Defaults to 20; capped at 100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-home-timeline","api_endpoint":"https://api.twitterapis.com/twitter/user/home_timeline"},"summary":"Home Timeline","description":"Home Timeline | Read the home timeline for the account behind your registered session: the ranked feed shown when that account opens X, most recent first. Returns full tweet objects with author and engagement counts. Cursor-paginated. Requires a registered session. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/blocking":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Items per page. Defaults to 20; capped at 100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-blocking","api_endpoint":"https://api.twitterapis.com/twitter/user/blocking"},"summary":"Blocked Accounts","description":"Blocked Accounts | Return the accounts blocked by the account behind your registered session, as full user objects, cursor-paginated. This reads your OWN block list. There is no user_id parameter because X exposes no way to read another account's blocks, so the endpoint does not pretend to offer one. Requires a registered session or per-call inline credentials. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/muting":{"get":{"tags":["User Reads"],"parameters":[{"name":"count","in":"query","description":"Items per page. Defaults to 20; capped at 100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-muting","api_endpoint":"https://api.twitterapis.com/twitter/user/muting"},"summary":"Muted Accounts","description":"Muted Accounts | Return the accounts muted by the account behind your registered session, as full user objects, cursor-paginated. Muting hides someone's posts from your timeline without blocking them, so this list is distinct from GET /user/blocking. This reads your OWN mute list; X exposes no way to read another account's, so there is no user_id parameter. Requires a registered session or per-call inline credentials. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/tweets/complete":{"get":{"tags":["User Reads"],"parameters":[{"name":"cursor","in":"query","description":"Resume point from a previous response's next_cursor. Omit on the first call. Pass it back to continue collecting where the last call stopped.","required":false,"schema":{"type":"string","example":""}},{"name":"max","in":"query","description":"Target number of tweets to collect in this call. Defaults to 200. This is a MINIMUM target, not a hard cap: pages arrive in whole chunks, so a response may contain up to one page (<=100) more than requested. Twitter's ~3200-per-user history ceiling still applies overall.","required":false,"schema":{"type":"number","example":""}},{"name":"user_id","in":"query","description":"Numeric ID of the target account. Resolve a handle with GET /user/info first.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-tweets-complete","api_endpoint":"https://api.twitterapis.com/twitter/user/tweets/complete"},"summary":"Full Tweet History","description":"Full Tweet History | Collect a user's tweet history in bulk, auto-paginating server-side across upstream pages. Unlike GET /user/tweets (one upstream page per call), this drives pagination for you and returns a large batch in one request. Each call is bounded by both `max` and a server-side time budget, so it always returns inside a normal client timeout. When more history remains the response carries a `next_cursor` — pass it back as `cursor` to continue, and repeat until `next_cursor` is null. Uses the public account pool: no registered session required. Cost: $0.0024 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/dm/send":{"post":{"tags":["Direct Messages"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#dm-send","api_endpoint":"https://api.twitterapis.com/twitter/dm/send"},"summary":"Send DM","description":"Send DM | Send a direct message to a user as the authenticated account. Requires a logged-in session for the acting account. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"text":{"type":"string","description":"The message body. Also accepted in a JSON request body.","required":true},"recipient_id":{"type":"string","description":"Numeric Twitter user ID of the recipient.","required":true}}},"example":{"text":["Hello from the TwitterAPIs DM API"],"recipient_id":["44196397"]}}}}}},"/twitter/dm/list":{"get":{"tags":["Direct Messages"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#dm-list","api_endpoint":"https://api.twitterapis.com/twitter/dm/list"},"summary":"DM Inbox","description":"DM Inbox | List the DM conversations (inbox) for the account behind your session. Returns each conversation's ID, type, and participant user IDs. Pass a conversation_id to GET /dm/conversation to read its messages. Authenticate with a registered session (POST /customer/session) or per-call x-auth-token and x-ct0 headers, so one API key can poll the inboxes of many accounts. Read-only: this does not send DMs. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/dm/conversation":{"get":{"tags":["Direct Messages"],"parameters":[{"name":"conversation_id","in":"query","description":"Conversation ID from a GET /dm/list entry.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#dm-conversation","api_endpoint":"https://api.twitterapis.com/twitter/dm/conversation"},"summary":"DM Conversation","description":"DM Conversation | Fetch the messages inside a single DM conversation. Pass a conversation_id from GET /dm/list. Each message carries its ID, sender ID, timestamp, and text. Authenticate with a registered session (POST /customer/session) or per-call x-auth-token and x-ct0 headers. Read-only: this does not send DMs. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/followers_you_know":{"get":{"tags":["Follower Graph"],"parameters":[{"name":"count","in":"query","description":"Items per page. Defaults to 20; documented cap 100. NOTE: X returns this list in fixed chunks, so a small count may still return up to a full page (~100). Treat count as an upper-bound hint, not an exact limit; paginate with the cursor for more.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric ID of the target account to compute shared followers against.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-followers-you-know","api_endpoint":"https://api.twitterapis.com/twitter/user/followers_you_know"},"summary":"Followers You Know","description":"Followers You Know | Return the followers of the account named by user_id that the account behind your registered session also follows: the mutual-connection overlap from your perspective. Returns full user objects, cursor-paginated. Requires a registered session and a numeric user_id. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/followers":{"get":{"tags":["Follower Graph"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; documented range 1-100. NOTE: on follower/following lists X returns pages in fixed chunks, so a small count may still return up to a full page (~100). Treat count as an upper-bound hint here, not an exact limit; paginate with the cursor for more.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric user ID; provide either username or user_id.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-followers","api_endpoint":"https://api.twitterapis.com/twitter/user/followers"},"summary":"User Followers","description":"User Followers | Fetch a user's followers, cursor-paginated. Returns full user objects. For large accounts, page with next_cursor until the users array comes back empty (the follower graph keeps returning a non-null cursor even on the final page). Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/following":{"get":{"tags":["Follower Graph"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; documented range 1-100. NOTE: on follower/following lists X returns pages in fixed chunks, so a small count may still return up to a full page (~100). Treat count as an upper-bound hint here, not an exact limit; paginate with the cursor for more.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric user ID; provide either username or user_id.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-following","api_endpoint":"https://api.twitterapis.com/twitter/user/following"},"summary":"User Following","description":"User Following | Fetch the accounts a user follows, cursor-paginated. Returns full user objects. Page with next_cursor until the users array comes back empty (the follower graph keeps returning a non-null cursor even on the final page). Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/followers_v2":{"get":{"tags":["Follower Graph"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; documented range 1-100. NOTE: on follower/following lists X returns pages in fixed chunks, so a small count may still return up to a full page (~100). Treat count as an upper-bound hint here, not an exact limit; paginate with the cursor for more.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric user ID; provide either username or user_id.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-followers-v2","api_endpoint":"https://api.twitterapis.com/twitter/user/followers_v2"},"summary":"User Followers (v2)","description":"User Followers (v2) | The v2 variant of the followers endpoint. Same data, with a more consistent cursor model and additional user fields. Prefer v2 for new integrations. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/following_v2":{"get":{"tags":["Follower Graph"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; documented range 1-100. NOTE: on follower/following lists X returns pages in fixed chunks, so a small count may still return up to a full page (~100). Treat count as an upper-bound hint here, not an exact limit; paginate with the cursor for more.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric user ID; provide either username or user_id.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-following-v2","api_endpoint":"https://api.twitterapis.com/twitter/user/following_v2"},"summary":"User Following (v2)","description":"User Following (v2) | The v2 variant of the following endpoint. Same data as the v1 following call, with a more consistent cursor model and additional user fields. Prefer v2 for new integrations. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/user/verified_followers":{"get":{"tags":["Follower Graph"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; clamped to 1-100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric user ID; provide either username or user_id.","required":false,"schema":{"type":"string","example":""}},{"name":"username","in":"query","description":"Handle without the leading @.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-verified-followers","api_endpoint":"https://api.twitterapis.com/twitter/user/verified_followers"},"summary":"Verified Followers","description":"Verified Followers | Fetch only the Verified (Blue) accounts that follow a user, cursor-paginated. A fast way to filter a large follower base down to higher-signal accounts. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/list/members":{"get":{"tags":["List Data"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; clamped to 1-100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"list_id","in":"query","description":"Numeric ID of the public List.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#list-members","api_endpoint":"https://api.twitterapis.com/twitter/list/members"},"summary":"List Members","description":"List Members | Fetch the members of a public List by its numeric ID, cursor-paginated. Returns full user objects for every account in the List. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/list/followers":{"get":{"tags":["List Data"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; clamped to 1-100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"list_id","in":"query","description":"Numeric ID of the public List.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#list-followers","api_endpoint":"https://api.twitterapis.com/twitter/list/followers"},"summary":"List Followers","description":"List Followers | Fetch a public List's followers by its numeric ID, cursor-paginated. Followers and members are different sets of people: members are the accounts the List owner added to it, followers are the accounts that subscribed to read it. A List with hundreds of members commonly has only a handful of followers, so a small count here is normal and is not a truncated page. next_cursor is null once X marks the roster complete. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/list/tweets":{"get":{"tags":["List Data"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; clamped to 1-100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"include_replies","in":"query","description":"Whether to include replies written by List members. Default true.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"list_id","in":"query","description":"Numeric ID of the public List.","required":true,"schema":{"type":"string","example":""}},{"name":"product","in":"query","description":"Which search ranking to read: Latest or Top. Default Latest, and any unrecognised value falls back to Latest.","required":false,"schema":{"type":"string","example":""}},{"name":"since","in":"query","description":"Only posts on or after this date, as YYYY-MM-DD.","required":false,"schema":{"type":"string","example":""}},{"name":"until","in":"query","description":"Only posts before this date, as YYYY-MM-DD. Exclusive, matching X's until: operator.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#list-tweets","api_endpoint":"https://api.twitterapis.com/twitter/list/tweets"},"summary":"List Tweets","description":"List Tweets | Fetch posts written by the members of a public List through X's search index. Supports since and until date bounds and an include_replies toggle. Does not include retweets. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/list/timeline":{"get":{"tags":["List Data"],"parameters":[{"name":"count","in":"query","description":"Max items to return for this page. Default 20; clamped to 1-100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response.","required":false,"schema":{"type":"string","example":""}},{"name":"list_id","in":"query","description":"Numeric ID of the public List.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#list-timeline","api_endpoint":"https://api.twitterapis.com/twitter/list/timeline"},"summary":"List Timeline","description":"List Timeline | Fetch a public List's feed as X itself serves it, using the native List timeline. Includes members' retweets and X's own ordering. Paged only, with no date or reply filters. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/trends":{"get":{"tags":["Trends"],"parameters":[{"name":"count","in":"query","description":"Truncate the returned list to this many trends. X has no count of its own; it always returns its full set (about 50).","required":false,"schema":{"type":"number","example":""}},{"name":"country","in":"query","description":"Country name or ISO code, e.g. \"US\" or \"Japan\". Resolved against the trends locations list, country-level entries only.","required":false,"schema":{"type":"string","example":""}},{"name":"woeid","in":"query","description":"Numeric WOEID from /twitter/trends/locations. Takes precedence over country when both are sent.","required":false,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#trends","api_endpoint":"https://api.twitterapis.com/twitter/trends"},"summary":"Trends","description":"Trends | Fetch the current top trends for one location. Ask for it by country name, ISO code, or numeric WOEID; with no location parameter you get Worldwide. X returns roughly 50 trends per location, ranked. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/trends/locations":{"get":{"tags":["Trends"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#trends-locations","api_endpoint":"https://api.twitterapis.com/twitter/trends/locations"},"summary":"Trend Locations","description":"Trend Locations | Fetch the full set of locations X serves trends for, each with the WOEID to pass back to the Trends endpoint. Takes no parameters and returns the complete list. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/spaces/info":{"get":{"tags":["Spaces"],"parameters":[{"name":"id","in":"query","description":"The Space id, the trailing token in a x.com/i/spaces/ URL. 5-32 alphanumeric characters.","required":true,"schema":{"type":"string","example":""}},{"name":"with_listeners","in":"query","description":"Include the listener roster. Defaults to true. X does not retain this roster after a Space ends, so it comes back empty for an ended Space regardless of this flag.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"with_replays","in":"query","description":"Include replay availability and related metadata. Defaults to true.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#spaces-info","api_endpoint":"https://api.twitterapis.com/twitter/spaces/info"},"summary":"Space Info","description":"Space Info | Look up a single X Space by its id and get back its title, lifecycle state, host, topics, timing, audience counts and its admin, speaker and listener roster. Works for a Space that is scheduled, running or already ended. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/community/info":{"get":{"tags":["Communities"],"parameters":[{"name":"community_id","in":"query","description":"The numeric community id, the digits in a x.com/i/communities/ URL. Digits only, no leading zero.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#community-info","api_endpoint":"https://api.twitterapis.com/twitter/community/info"},"summary":"Community Info","description":"Community Info | Look up a single X Community by its numeric id and get back its name, description, member count, join policy, primary topic, posted rules and both banners. This endpoint returns the REDUCED form of the Community object: eight of its 24 fields come back empty here and are populated by Community Memberships instead, which the response table marks field by field. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/community/members":{"get":{"tags":["Communities"],"parameters":[{"name":"community_id","in":"query","description":"The numeric community id, the digits in a x.com/i/communities/ URL.","required":true,"schema":{"type":"string","example":""}},{"name":"count","in":"query","description":"Page size. Defaults to 20 and is clamped to 1-100, so count=500 returns 100 rather than erroring. A non-numeric value is a 400.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor. Omit on the first call.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#community-members","api_endpoint":"https://api.twitterapis.com/twitter/community/members"},"summary":"Community Members","description":"Community Members | Fetch the member roster of an X Community, cursor-paginated, with each row carrying that member's own role in the community: Admin, Moderator or Member. Admins and moderators appear in this list alongside ordinary members and are not grouped, so do not derive a moderator list by filtering the first page. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/community/moderators":{"get":{"tags":["Communities"],"parameters":[{"name":"community_id","in":"query","description":"The numeric community id, the digits in a x.com/i/communities/ URL.","required":true,"schema":{"type":"string","example":""}},{"name":"count","in":"query","description":"Page size. Defaults to 20 and is clamped to 1-100. A non-numeric value is a 400.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor. Omit on the first call.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#community-moderators","api_endpoint":"https://api.twitterapis.com/twitter/community/moderators"},"summary":"Community Moderators","description":"Community Moderators | Fetch the moderators and admins of an X Community, cursor-paginated, in the same row shape Community Members returns. This is a separate upstream operation rather than a filter over the member roster, because moderators are interleaved through that roster at arbitrary positions. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/community/tweets":{"get":{"tags":["Communities"],"parameters":[{"name":"community_id","in":"query","description":"The numeric community id, the digits in a x.com/i/communities/ URL.","required":true,"schema":{"type":"string","example":""}},{"name":"count","in":"query","description":"Page size. Defaults to 20 and is clamped to 1-100. A non-numeric value is a 400.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor. Omit on the first call.","required":false,"schema":{"type":"string","example":""}},{"name":"ranking_mode","in":"query","description":"Ordering, sent to X as a real upstream parameter rather than applied as a local sort. Recency is the default and the only value confirmed against a live capture. Relevance is accepted because X's own community tab offers exactly two orderings, but it has not been confirmed live, so do not depend on it. Any other value is a 400.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#community-tweets","api_endpoint":"https://api.twitterapis.com/twitter/community/tweets"},"summary":"Community Tweets","description":"Community Tweets | Fetch the post timeline of an X Community, cursor-paginated as full tweet objects, with optional ordering control. The community's pinned post is returned as its own field rather than mixed into the feed, because X delivers it under a different timeline instruction and does not repeat it in the feed. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/community/memberships":{"get":{"tags":["Communities"],"parameters":[{"name":"count","in":"query","description":"Page size. Defaults to 20 and is clamped to 1-100. A non-numeric value is a 400.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor. Omit on the first call.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"The numeric X user id, NOT a handle and NOT a community id. Resolve a @handle to an id with User Info first; doing that resolution silently here would turn one billed read into two.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#community-memberships","api_endpoint":"https://api.twitterapis.com/twitter/community/memberships"},"summary":"Community Memberships","description":"Community Memberships | The inverse relation: given a numeric X user id, list the communities that account belongs to, cursor-paginated. Each row is the FULL community object, and it is the most populated form of it this API returns: admin, invites_policy, question, search_tags, members_facepile_ids and a real moderator_count all arrive here and do not on Community Info. Profiling an account's community footprint takes one call per page rather than a follow-up lookup per community. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/community/about":{"get":{"tags":["Communities"],"parameters":[{"name":"community_id","in":"query","description":"The numeric X community id, the digits in x.com/i/communities/.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#community-about","api_endpoint":"https://api.twitterapis.com/twitter/community/about"},"summary":"Community About","description":"Community About | The About tab for one community: its moderators, and a preview of its members, both returned as FULL user profiles with bio, follower and following counts, tweet counts, location, website, banner and join date. Community Members and Community Moderators return a reduced row instead, so this is the endpoint that answers who runs a community in one call rather than one call plus a profile lookup per person. It is not paginated, because the upstream operation is not. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/community/search":{"get":{"tags":["Communities"],"parameters":[{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor. Omit on the first call.","required":false,"schema":{"type":"string","example":""}},{"name":"query","in":"query","description":"The keyword to search for. 1 to 500 characters.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#community-search","api_endpoint":"https://api.twitterapis.com/twitter/community/search"},"summary":"Community Search","description":"Community Search | Find communities by keyword, cursor-paginated. This is the discovery step the rest of this family assumes: every other community endpoint starts from a community id, and this is the one that produces one. Each hit is a compact record, id, name, member count, nsfw flag, topic name, banners and the facepile avatars, which is exactly what X's search operation sends and nothing more. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/media/upload":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#media-upload","api_endpoint":"https://api.twitterapis.com/twitter/media/upload"},"summary":"Upload Media","description":"Upload Media | Upload a base64-encoded image as the authenticated account and receive a media_id you can attach when creating a tweet. Runs as your own logged-in account. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":false,"content":{"multipart/form-data":{"schema":{"type":"object","required":[],"properties":{"media_data":{"type":"string","description":"Base64-encoded image bytes, sent in the JSON request body.","required":true}}},"example":{"media_data":["iVBORw0KGgoAAAANSUhEUgAA..."]}}}}}},"/twitter/media/status":{"get":{"tags":["Write Actions"],"parameters":[{"name":"media_id","in":"query","description":"Numeric media ID (as a string) returned by media/upload.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#media-status","api_endpoint":"https://api.twitterapis.com/twitter/media/status"},"summary":"Media Status","description":"Media Status | Return the async processing state of a media_id from Upload Media, so a caller can verify readiness before attaching a video, GIF, or large-media id to a tweet. Runs as your own logged-in account. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/list/add_member":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#list-add-member","api_endpoint":"https://api.twitterapis.com/twitter/list/add_member"},"summary":"Add List Member","description":"Add List Member | Add an account to a List owned by your registered X session. Returns the List's member_count as proof the membership change landed. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"list_id":{"type":"string","description":"Numeric ID of the List you own.","required":true},"user_id":{"type":"string","description":"Numeric ID of the account to add.","required":true}}},"example":{"list_id":["1234567890123456789"],"user_id":["745273"]}}}}}},"/twitter/list/remove_member":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#list-remove-member","api_endpoint":"https://api.twitterapis.com/twitter/list/remove_member"},"summary":"Remove List Member","description":"Remove List Member | Remove an account from a List owned by your registered X session. Returns the List's member_count as proof the membership change landed. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"list_id":{"type":"string","description":"Numeric ID of the List you own.","required":true},"user_id":{"type":"string","description":"Numeric ID of the account to remove.","required":true}}},"example":{"list_id":["1234567890123456789"],"user_id":["745273"]}}}}}},"/twitter/list/create":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#list-create","api_endpoint":"https://api.twitterapis.com/twitter/list/create"},"summary":"Create List","description":"Create List | Create a List owned by your registered X session, with a name and an optional description and privacy flag. Populate it afterwards with Add List Member. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"description":{"type":"string","description":"Optional description shown on the List."},"is_private":{"type":"boolean","description":"Whether the List is private. Private Lists are not readable by the public List read endpoints.","enum":[true,false]},"name":{"type":"string","description":"Display name for the new List.","required":true}}},"example":{"description":["People building in public."],"is_private":["false"],"name":["Founders"]}}}}}},"/twitter/tweet/favorite":{"post":{"tags":["Write Actions"],"parameters":[{"name":"id","in":"query","description":"Numeric ID of the tweet to like. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"proxy","in":"query","description":"Optional. Pass your own proxy (http(s)/socks URL) to egress the write through your clean IP for best success; if omitted, we use the session's proxy / our default.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of the tweet to like. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-favorite","api_endpoint":"https://api.twitterapis.com/twitter/tweet/favorite"},"summary":"Like Tweet","description":"Like Tweet | Like a tweet as the authenticated account. Requires a logged-in session for the acting account. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/tweet/unfavorite":{"post":{"tags":["Write Actions"],"parameters":[{"name":"id","in":"query","description":"Numeric ID of the tweet to unlike. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"proxy","in":"query","description":"Optional. Pass your own proxy (http(s)/socks URL) to egress the write through your clean IP for best success; if omitted, we use the session's proxy / our default.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of the tweet to unlike. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-unfavorite","api_endpoint":"https://api.twitterapis.com/twitter/tweet/unfavorite"},"summary":"Unlike Tweet","description":"Unlike Tweet | Remove a previously recorded like from a tweet as the authenticated account. Requires a logged-in session. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/tweet/retweet":{"post":{"tags":["Write Actions"],"parameters":[{"name":"id","in":"query","description":"Numeric ID of the tweet to retweet. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"proxy","in":"query","description":"Optional. Pass your own proxy (http(s)/socks URL) to egress the write through your clean IP for best success; if omitted, we use the session's proxy / our default.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of the tweet to retweet. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-retweet","api_endpoint":"https://api.twitterapis.com/twitter/tweet/retweet"},"summary":"Retweet","description":"Retweet | Retweet a tweet as the authenticated account. Requires a logged-in session for the acting account. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/tweet/unretweet":{"post":{"tags":["Write Actions"],"parameters":[{"name":"id","in":"query","description":"Numeric ID of the tweet to un-retweet. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"proxy","in":"query","description":"Optional. Pass your own proxy (http(s)/socks URL) to egress the write through your clean IP for best success; if omitted, we use the session's proxy / our default.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of the tweet to un-retweet. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-unretweet","api_endpoint":"https://api.twitterapis.com/twitter/tweet/unretweet"},"summary":"Undo Retweet","description":"Undo Retweet | Undo a previously recorded retweet as the authenticated account. Requires a logged-in session. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/tweet/bookmark":{"post":{"tags":["Write Actions"],"parameters":[{"name":"id","in":"query","description":"Numeric ID of the tweet to bookmark. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"proxy","in":"query","description":"Optional. Pass your own proxy (http(s)/socks URL) to egress the write through your clean IP for best success; if omitted, we use the session's proxy / our default.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of the tweet to bookmark. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-bookmark","api_endpoint":"https://api.twitterapis.com/twitter/tweet/bookmark"},"summary":"Bookmark Tweet","description":"Bookmark Tweet | Bookmark a tweet as the authenticated account. Requires a logged-in session for the acting account. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/tweet/unbookmark":{"post":{"tags":["Write Actions"],"parameters":[{"name":"id","in":"query","description":"Numeric ID of the tweet to un-bookmark. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"proxy","in":"query","description":"Optional. Pass your own proxy (http(s)/socks URL) to egress the write through your clean IP for best success; if omitted, we use the session's proxy / our default.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Full status URL of the tweet to un-bookmark. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-unbookmark","api_endpoint":"https://api.twitterapis.com/twitter/tweet/unbookmark"},"summary":"Remove Bookmark","description":"Remove Bookmark | Remove a previously saved bookmark as the authenticated account. Requires a logged-in session. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/user/follow":{"post":{"tags":["Write Actions"],"parameters":[{"name":"proxy","in":"query","description":"Optional. Pass your own proxy (http(s)/socks URL) to egress the write through your clean IP for best success; if omitted, we use the session's proxy / our default.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric ID of the user to follow.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-follow","api_endpoint":"https://api.twitterapis.com/twitter/user/follow"},"summary":"Follow User","description":"Follow User | Follow a user as the authenticated account. Requires a logged-in session for the acting account. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/user/unfollow":{"post":{"tags":["Write Actions"],"parameters":[{"name":"proxy","in":"query","description":"Optional. Pass your own proxy (http(s)/socks URL) to egress the write through your clean IP for best success; if omitted, we use the session's proxy / our default.","required":false,"schema":{"type":"string","example":""}},{"name":"user_id","in":"query","description":"Numeric ID of the user to unfollow.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-unfollow","api_endpoint":"https://api.twitterapis.com/twitter/user/unfollow"},"summary":"Unfollow User","description":"Unfollow User | Unfollow a user as the authenticated account. Requires a logged-in session for the acting account. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/tweet/create":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-create","api_endpoint":"https://api.twitterapis.com/twitter/tweet/create"},"summary":"Create Tweet","description":"Create Tweet | Post a new tweet as the account behind your registered session. Supports plain text, up to 4 image media_ids (from a prior media/upload), a reply (reply_to), and a quote (quote). Requires a registered session. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"text":{"type":"string","description":"The tweet body.","required":true},"media_ids":{"type":"string","description":"Up to 4 media IDs from media/upload, as a comma-separated string or JSON array. Omit for a text-only tweet."},"quote":{"type":"string","description":"ID of the tweet to quote (send it as a string; X IDs are 19 digits)."},"reply_to":{"type":"string","description":"ID of the tweet to reply to (send it as a string; X IDs are 19 digits). Omit for a top-level tweet."}}},"example":{"text":["Shipping cursor-paginated bookmarks today."],"media_ids":["1899999999999999999"],"quote":["1900000000000000000"],"reply_to":["2080297101888733302"]}}}}}},"/twitter/tweet/delete":{"post":{"tags":["Write Actions"],"parameters":[{"name":"id","in":"query","description":"Numeric ID of the tweet to delete. Provide either id or url.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"Status URL of the tweet to delete, for example https://x.com/you/status/1759123456789012345. Provide either id or url.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#tweet-delete","api_endpoint":"https://api.twitterapis.com/twitter/tweet/delete"},"summary":"Delete Tweet","description":"Delete Tweet | Delete a tweet owned by the account behind your registered session. Identify it by id or url (read from the query string). Requires a registered session. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/user/update_profile":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-update-profile","api_endpoint":"https://api.twitterapis.com/twitter/user/update_profile"},"summary":"Update Profile","description":"Update Profile | Update the profile of the account behind your registered session. Send only the fields you want to change: this is a genuine PARTIAL update, and anything you omit is left exactly as it was rather than being blanked. At least one of name, description, location or url is required. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"description":{"type":"string","description":"New bio. Send an EMPTY STRING to clear it; omitting the field entirely leaves it alone. Those are two different things."},"location":{"type":"string","description":"New location text. Same rule: an empty string clears it, omitting the field leaves it alone."},"name":{"type":"string","description":"New display name, up to 50 characters. Omit to leave it unchanged."},"url":{"type":"string","description":"New profile link."}}},"example":{"description":["Building things people can check."],"location":["string"],"name":["Acme Research"],"url":["https://www.twitterapis.com"]}}}}}},"/twitter/user/update_avatar":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-update-avatar","api_endpoint":"https://api.twitterapis.com/twitter/user/update_avatar"},"summary":"Update Avatar","description":"Update Avatar | Replace the profile picture on the account behind your registered session. Send the image base64-encoded in the request body; there is no URL-fetch form and no multipart form. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"image":{"type":"string","description":"Base64-encoded image bytes, sent in the JSON request body. Not a URL and not multipart. `banner` and `data` are accepted as aliases for the same field.","required":true}}},"example":{"image":["iVBORw0KGgoAAAANSUhEUgAA..."]}}}}}},"/twitter/user/update_banner":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#user-update-banner","api_endpoint":"https://api.twitterapis.com/twitter/user/update_banner"},"summary":"Update Banner","description":"Update Banner | Replace the wide header image on the account behind your registered session. Send the image base64-encoded in the request body; there is no URL-fetch form and no multipart form. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"banner":{"type":"string","description":"Base64-encoded image bytes, sent in the JSON request body. Not a URL and not multipart. `image` and `data` are accepted as aliases for the same field.","required":true}}},"example":{"banner":["iVBORw0KGgoAAAANSUhEUgAA..."]}}}}}},"/twitter/draft/create":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#draft-create","api_endpoint":"https://api.twitterapis.com/twitter/draft/create"},"summary":"Create Draft Tweet","description":"Create Draft Tweet | Save a draft tweet on the account behind your registered session. A draft is private to that account and is never published: it appears in X's own composer under Drafts until you post or delete it. Accepts text, up to 4 media_ids, a reply_to and a quote, exactly like tweet/create. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"text":{"type":"string","description":"The draft body. A draft with no text is refused with 400.","required":true},"media_ids":{"type":"string","description":"Up to 4 media IDs from media/upload, as a comma-separated string or a JSON array. Omit for a text-only draft."},"quote":{"type":"string","description":"ID of the tweet this draft quotes (send it as a string; X IDs are 19 digits)."},"reply_to":{"type":"string","description":"ID of the tweet this draft replies to (send it as a string; X IDs are 19 digits)."}}},"example":{"text":["Draft: our Q1 changelog is nearly done."],"media_ids":["1899999999999999999"],"quote":["1900000000000000000"],"reply_to":["2080297101888733302"]}}}}}},"/twitter/draft/edit":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#draft-edit","api_endpoint":"https://api.twitterapis.com/twitter/draft/edit"},"summary":"Edit Draft Tweet","description":"Edit Draft Tweet | Replace an existing draft's contents on the account behind your registered session. The fields you send become the draft in full: text is required, and media_ids, reply_to and quote are re-applied rather than merged, so send everything the draft should keep. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"text":{"type":"string","description":"The replacement draft body. Required: an edit with no text is refused with 400.","required":true},"id":{"type":"string","description":"ID of the draft to edit, from draft/list. Also accepted as draft_tweet_id.","required":true},"media_ids":{"type":"string","description":"Up to 4 media IDs from media/upload, as a comma-separated string or a JSON array. Omitting it drops the media the draft had; it is not merged."},"quote":{"type":"string","description":"ID of the tweet this draft quotes (send it as a string)."},"reply_to":{"type":"string","description":"ID of the tweet this draft replies to (send it as a string)."}}},"example":{"text":["Draft v2: the Q1 changelog ships Thursday."],"id":["2086650228950683648"],"media_ids":["1899999999999999999"],"quote":["1900000000000000000"],"reply_to":["2080297101888733302"]}}}}}},"/twitter/draft/delete":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#draft-delete","api_endpoint":"https://api.twitterapis.com/twitter/draft/delete"},"summary":"Delete Draft Tweet","description":"Delete Draft Tweet | Delete a draft owned by the account behind your registered session, identified by its id. The draft is removed from X's composer. Nothing was ever public, so this publishes nothing and retracts nothing. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"id":{"type":"string","description":"ID of the draft to delete, from draft/list. Also accepted as draft_tweet_id.","required":true}}},"example":{"id":["2086650228950683648"]}}}}}},"/twitter/draft/list":{"get":{"tags":["Write Actions"],"parameters":[{"name":"ascending","in":"query","description":"Pass true to ask X for the oldest draft first. Anything else, including omitting it, sends ascending=false, which is what X's own composer sends. The resulting order is X's and is not re-sorted here.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#draft-list","api_endpoint":"https://api.twitterapis.com/twitter/draft/list"},"summary":"List Draft Tweets","description":"List Draft Tweets | List every draft on the account behind your registered session. Each row carries the draft id, its text, and thread_truncated, which is true when the draft is a thread and the text you get is only its first tweet. Ordering is X's: pass ascending=true to ask for the oldest first, omit it for X's default. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/scheduled/create":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#scheduled-create","api_endpoint":"https://api.twitterapis.com/twitter/scheduled/create"},"summary":"Schedule Tweet","description":"Schedule Tweet | Schedule a tweet from the account behind your registered session for a future instant. Unlike a draft, this WILL post publicly at execute_at unless you delete it first. execute_at is epoch SECONDS and must be in the future; a millisecond value is refused by name rather than scheduled tens of thousands of years out. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"text":{"type":"string","description":"The tweet body. Required: a scheduled post with no text is refused with 400.","required":true},"execute_at":{"type":"number","description":"When to post, as epoch SECONDS in the future. A value at or above 1000000000000 is rejected as milliseconds, with a message saying so, rather than accepted. Also accepted as schedule_at.","required":true},"media_ids":{"type":"string","description":"Up to 4 media IDs from media/upload, as a comma-separated string or a JSON array."},"quote":{"type":"string","description":"ID of the tweet this post quotes (send it as a string)."},"reply_to":{"type":"string","description":"ID of the tweet this post replies to (send it as a string)."}}},"example":{"text":["The Q1 changelog is live."],"execute_at":["1829752200"],"media_ids":["1899999999999999999"],"quote":["1900000000000000000"],"reply_to":["2080297101888733302"]}}}}}},"/twitter/scheduled/delete":{"post":{"tags":["Write Actions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#scheduled-delete","api_endpoint":"https://api.twitterapis.com/twitter/scheduled/delete"},"summary":"Cancel Scheduled Tweet","description":"Cancel Scheduled Tweet | Cancel a scheduled tweet on the account behind your registered session, identified by its id, so it never posts. Do this before execute_at: once the post has gone out it is an ordinary tweet and tweet/delete is what removes it. Billed at $0.0008 per call, the same as a standard read. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"id":{"type":"string","description":"ID of the scheduled tweet to cancel, from scheduled/list. Also accepted as scheduled_tweet_id.","required":true}}},"example":{"id":["2086650228950683649"]}}}}}},"/twitter/scheduled/list":{"get":{"tags":["Write Actions"],"parameters":[{"name":"ascending","in":"query","description":"Pass true to ask X for the oldest row first. Anything else, including omitting it, sends ascending=false, which is what X's own composer sends. The resulting order is X's and is not re-sorted here.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#scheduled-list","api_endpoint":"https://api.twitterapis.com/twitter/scheduled/list"},"summary":"List Scheduled Tweets","description":"List Scheduled Tweets | List every pending scheduled post on the account behind your registered session. Each row carries the id, its text, its execute_at in epoch SECONDS, X's own state label, and thread_truncated for a thread whose text is only its first tweet. Ordering is X's: pass ascending=true to ask for the oldest first. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/article/create":{"post":{"tags":["Articles"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#article-create","api_endpoint":"https://api.twitterapis.com/twitter/article/create"},"summary":"Create Article","description":"Create Article | Start a new draft Article as the account behind your registered session, and return its entity id, ready for Update Title / Update Content. The draft is empty until you call those. Requires a registered session. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/article/update_title":{"post":{"tags":["Articles"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#article-update-title","api_endpoint":"https://api.twitterapis.com/twitter/article/update_title"},"summary":"Update Article Title","description":"Update Article Title | Set the title of an article you own, identified by its entity id. Requires a registered session. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"id":{"type":"string","description":"The article's base64 entity id, returned by article/create or article/list (the id field, not rest_id).","required":true},"title":{"type":"string","description":"The new title text.","required":true}}},"example":{"id":["QXJ0aWNsZUVudGl0eToyMDg2NjUwMjI4OTUwNjgzNjQ4"],"title":["Why we rebuilt our onboarding from scratch"]}}}}}},"/twitter/article/update_cover_media":{"post":{"tags":["Articles"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#article-update-cover-media","api_endpoint":"https://api.twitterapis.com/twitter/article/update_cover_media"},"summary":"Update Article Cover Image","description":"Update Article Cover Image | Set the cover image on an article you own, identified by its entity id. This attaches media you have already uploaded; it does not upload anything itself, so call media/upload first and pass the media_id it returns. Requires a registered session. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":false,"content":{"multipart/form-data":{"schema":{"type":"object","required":[],"properties":{"id":{"type":"string","description":"The article's base64 entity id, returned by article/create or article/list (the id field, not rest_id).","required":true},"media_category":{"type":"string","description":"X's media category for the upload. Defaults to DraftTweetImage, which is what the X article editor itself sends. Only override this if you know X expects a different category for your media."},"media_id":{"type":"string","description":"The media id returned by media/upload for the image you want to use as the cover.","required":true}}},"example":{"id":["QXJ0aWNsZUVudGl0eToyMDg2NjUwMjI4OTUwNjgzNjQ4"],"media_category":["DraftTweetImage"],"media_id":["2088949698573090816"]}}}}}},"/twitter/article/update_content":{"post":{"tags":["Articles"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#article-update-content","api_endpoint":"https://api.twitterapis.com/twitter/article/update_content"},"summary":"Update Article Content","description":"Update Article Content | Replace the body of an article you own with a new content_state, identified by its entity id. content_state is Draft.js editor-state JSON ({ blocks: [...], entityMap: [...] }) that you build client-side; it is passed through to X verbatim and not validated on our side. Requires a registered session. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"content_state":{"type":"string","description":"The article body as a Draft.js content-state JSON object: { blocks: [...], entityMap: [...] }. You build and edit this client-side (see the Draft.js editor-state model); it is sent as-is in the JSON request body, not as a string field.","required":true},"id":{"type":"string","description":"The article's base64 entity id, returned by article/create or article/list (the id field, not rest_id).","required":true}}},"example":{"content_state":["{\"blocks\":[{\"key\":\"a1b2c\",\"text\":\"Opening paragraph.\",\"type\":\"unstyled\",\"depth\":0,\"inlineStyleRanges\":[],\"entityRanges\":[]}],\"entityMap\":{}}"],"id":["QXJ0aWNsZUVudGl0eToyMDg2NjUwMjI4OTUwNjgzNjQ4"]}}}}}},"/twitter/article/publish":{"post":{"tags":["Articles"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#article-publish","api_endpoint":"https://api.twitterapis.com/twitter/article/publish"},"summary":"Publish Article","description":"Publish Article | Publish a draft article as the account behind your registered session, transitioning it from Draft to Published. WARNING: publishing posts a real, public announcement tweet on the account's timeline. This is not a preview or a private action, and it cannot be undone by re-editing the article: once published, the only way back is Delete Article, which unpublishes the article AND removes the announcement tweet. Requires a registered session. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"audience":{"type":"string","description":"Who can read the published article. Defaults to \"Everyone\" (X's own dialog default) when omitted."},"caption":{"type":"string","description":"Optional caption text for the announcement tweet, up to 256 characters."},"id":{"type":"string","description":"The article's base64 entity id, returned by article/create or article/list (the id field, not rest_id).","required":true},"reply_control":{"type":"string","description":"Who can reply to the announcement tweet. Defaults to \"Everyone\" (X's own dialog default) when omitted."}}},"example":{"audience":["Everyone"],"caption":["New post: why we rebuilt our onboarding from scratch."],"id":["QXJ0aWNsZUVudGl0eToyMDg2NjUwMjI4OTUwNjgzNjQ4"],"reply_control":["Everyone"]}}}}}},"/twitter/article/unpublish":{"post":{"tags":["Articles"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#article-unpublish","api_endpoint":"https://api.twitterapis.com/twitter/article/unpublish"},"summary":"Unpublish Article","description":"Unpublish Article | Revert a Published article back to Draft, identified by its entity id. The announcement tweet the original publish posted is left in place; use Delete Article to remove it too. X server-validates this transition and returns a 422 (invalid_lifecycle) if the article is not currently Published. Requires a registered session. Billed at $0.0016 per call. Cost: $0.0016 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"id":{"type":"string","description":"The article's base64 entity id, returned by article/create or article/list (the id field, not rest_id).","required":true}}},"example":{"id":["QXJ0aWNsZUVudGl0eToyMDg2NjUwMjI4OTUwNjgzNjQ4"]}}}}}},"/twitter/article/get":{"get":{"tags":["Articles"],"parameters":[{"name":"article_id","in":"query","description":"OWNER-ONLY form. The article's own entity id, from Article Create or Article List. Requires a registered session. Provide exactly one of id, url, or article_id.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"PUBLIC form. The article's announcement tweet id, or its status URL. Provide exactly one of id, url, or article_id.","required":false,"schema":{"type":"string","example":""}},{"name":"url","in":"query","description":"PUBLIC form. Status URL of the article's announcement tweet, for example https://x.com/i/status/2086650300012345678. Provide exactly one of id, url, or article_id.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#article-get","api_endpoint":"https://api.twitterapis.com/twitter/article/get"},"summary":"Get Article","description":"Get Article | Read an article's full content. Two mutually exclusive forms: id or url (the announcement tweet id or status URL) for a public, pooled read that needs no session, works for Published articles only. Or article_id (the article's own entity id, from Article Create or Article List) for an owner-only read that requires a registered session and also works for your own Drafts. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/article/list":{"get":{"tags":["Articles"],"parameters":[{"name":"count","in":"query","description":"Items per page. Defaults to 20; capped at 100.","required":false,"schema":{"type":"number","example":""}},{"name":"cursor","in":"query","description":"Pagination cursor from a previous response's next_cursor.","required":false,"schema":{"type":"string","example":""}},{"name":"lifecycle","in":"query","description":"Which set of articles to list: \"draft\" or \"published\". Defaults to \"draft\".","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#article-list","api_endpoint":"https://api.twitterapis.com/twitter/article/list"},"summary":"List Articles","description":"List Articles | List the caller's own articles at one lifecycle at a time: Draft or Published (default Draft). X exposes no combined view across both, so call it twice, once per lifecycle, to see everything. Cursor-paginated. Requires a registered session. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/article/delete":{"post":{"tags":["Articles"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#article-delete","api_endpoint":"https://api.twitterapis.com/twitter/article/delete"},"summary":"Delete Article","description":"Delete Article | Delete an article you own, identified by its entity id. A Draft is hard-deleted directly. A Published article is unpublished first (reverting it to Draft) and then its announcement tweet is deleted, which is what makes it stop being publicly reachable, a two-step reversal for Publish Article. Pass lifecycle and tweet_id as optional fast-path hints when you already know them (from a prior list/create response); omitted, the server resolves them itself by scanning your Draft then Published lists, costing a couple of extra round trips. Requires a registered session. Billed at $0.0008 per call. Cost: $0.0008 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"id":{"type":"string","description":"The article's base64 entity id, returned by article/create or article/list (the id field, not rest_id).","required":true},"lifecycle":{"type":"string","description":"Fast-path hint: \"draft\" or \"published\". When you already know the article's lifecycle (e.g. from a prior article/list or article/create response), pass it to skip a lookup. Omit it and the server resolves it by scanning your own Draft then Published lists."},"tweet_id":{"type":"string","description":"Fast-path hint: the announcement tweet id, for a PUBLISHED article only. Omit it and the server resolves it from the article's own metadata when lifecycle resolves to published."}}},"example":{"id":["QXJ0aWNsZUVudGl0eToyMDg2NjUwMjI4OTUwNjgzNjQ4"],"lifecycle":["draft"],"tweet_id":["2086650300012345678"]}}}}}},"/twitter/grok/chat":{"post":{"tags":["Grok"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#grok-chat","api_endpoint":"https://api.twitterapis.com/twitter/grok/chat"},"summary":"Grok Chat","description":"Grok Chat | Send a prompt to X's in-app Grok as the account behind your session and get back one complete JSON document: the answer text, the web pages Grok cited while writing it, and the searches it ran to find them. Grok reads X in real time, so it answers about posts and accounts a general-purpose model has never seen. Send a bare post URL as the message and you get a structured summary of that post instead, including what Grok reads out of its attached images. Billed at $0.0040 per answer. Cost: $0.0040 per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"conversation_id":{"type":"string","description":"Continue an existing conversation, using the conversation_id from an earlier reply. Omit it and we open a fresh conversation for you and return its id."},"image_count":{"type":"number","description":"How many images Grok may generate if the prompt calls for it. Clamped to 0 through 4; the default is 4, which is X's own. Set it to 0 for a text-only answer."},"message":{"type":"string","description":"The prompt. A question, an instruction, or a bare post URL (https://x.com//status/), which returns a summary of that post. Required unless you send messages[] whose last entry is a user turn. Maximum 20,000 characters; longer prompts are rejected with 400 before any Grok call is made, so an over-length prompt never costs you anything."},"messages":{"type":"string","description":"JSON array of prior turns, oldest first, sent in the request body. Each entry takes either { role: \"user\" | \"assistant\", content } or X's own { sender: 1 | 2, message }, where 1 is you and 2 is Grok, plus the optional response_id and parent_response_id we returned on earlier replies. Anything not explicitly marked as Grok is treated as a user turn. If you omit message, the last entry must be a user turn and becomes the prompt. Maximum 100 prior turns."},"mode":{"type":"string","description":"auto, fast, or expert. auto lets X pick the model, fast is grok-3-latest, expert is grok-4 and thinks for longer. The raw model ids grok-3-latest and grok-4 are accepted as aliases. Anything unrecognised falls back to auto, which is also the default."}}},"example":{"conversation_id":["2088999211077345534"],"image_count":["4"],"message":["What are people on X saying about the WWDC keynote today?"],"messages":["[{\"role\":\"user\",\"content\":\"Who won the game?\"},{\"role\":\"assistant\",\"content\":\"The Celtics, 112-108.\"}]"],"mode":["auto"]}}}}}},"/twitter/grok/config":{"get":{"tags":["Grok"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#grok-config","api_endpoint":"https://api.twitterapis.com/twitter/grok/config"},"summary":"Grok Config","description":"Grok Config | Read the Grok settings for the account behind your session: whether X has enabled Grok for it, the reasons if not, and the model options it is allowed to choose between. Grok eligibility belongs to the X account rather than to us, so this runs as your session and not off our pool. Call it once before your first chat request. This call is free and is not metered. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/monitor":{"post":{"tags":["Monitoring"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#monitor-post","api_endpoint":"https://api.twitterapis.com/twitter/monitor"},"summary":"Create Monitor","description":"Create Monitor | Start watching an X account. Every new post from that account is delivered, HMAC-signed, to your registered webhook(s) on a shared poll interval. Replies are delivered too unless you pass include_replies: false. Free: monitor creation is account administration, not a metered read. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"domain_filter":{"type":"string","description":"Optional. A bare hostname (`example.com`) or a full URL (`https://example.com/blog`) to restrict delivery to posts that link to that host or a subdomain of it. Normalized server-side: lowercased, scheme/path/query/fragment/leading www./trailing :port stripped. Omit for no filter (deliver every new post, the default). Rejected with 400 if what remains after normalization is not a valid hostname shape."},"handle":{"type":"string","description":"The X username to watch, without the @.","required":true},"include_replies":{"type":"boolean","description":"Whether this monitor delivers the account's replies as well as its own posts. Defaults to true, which is what every monitor has always done. Set false to hold replies back and receive only the account's own posts; they are still polled and still advance the monitor's cursor, they are just not delivered. Must be a boolean if sent: a string or number is rejected with 400 rather than coerced.","enum":[true,false]},"webhook_ids":{"type":"array","description":"Array of webhook ids (from POST /twitter/webhook) to restrict delivery to. Omit to deliver to every active webhook on the account, the default.","items":{"type":"string"}}}},"example":{"domain_filter":["example.com"],"handle":["elonmusk"],"include_replies":[false],"webhook_ids":[[]]}}}}},"get":{"tags":["Monitoring"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#monitor-get","api_endpoint":"https://api.twitterapis.com/twitter/monitor"},"summary":"List Monitors","description":"List Monitors | Returns every non-deleted monitor on your account, most recently created first. Each entry includes its id, subject, status, and delivery configuration, so you can enumerate what already exists before creating, updating, or deleting a specific monitor. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/monitor/{id}":{"post":{"tags":["Monitoring"],"parameters":[{"name":"id","in":"path","description":"The id segment of the path, as returned by the endpoint that created the resource.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#monitor-id-post","api_endpoint":"https://api.twitterapis.com/twitter/monitor/{id}"},"summary":"Update Monitor","description":"Update Monitor | Partial update of an existing monitor. Send status to pause or resume it, webhook_ids to change which webhooks receive its events, include_replies to turn reply delivery on or off, or any combination in the same call (applied atomically). Resuming a paused monitor re-runs the same capacity and per-account cap checks as creating a new one, since it adds load back to the shared pool. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"domain_filter":{"type":"string","description":"A bare hostname or full URL to restrict delivery to. Send null or an empty string to clear an existing filter (deliver every new post again). Omit the field entirely to leave it unchanged. Same normalization and hostname-shape validation as Create Monitor."},"include_replies":{"type":"boolean","description":"True to deliver the account's replies as well as its own posts, false to deliver only its own posts. Omit to leave it unchanged. There is no \"clear\" value: true already is the unrestricted setting, so send true to undo a previous false. Must be a boolean, null included, or the call is rejected with 400 rather than coerced. An include_replies-only update never re-runs the capacity or per-account cap checks, since it narrows delivery without changing poll cadence.","enum":[true,false]},"status":{"type":"string","description":"\"active\" to resume, \"paused\" to pause. Omit to leave status unchanged."},"webhook_ids":{"type":"array","description":"Array of webhook ids to restrict delivery to. Send an empty array to clear the restriction back to \"deliver to every active webhook\". Omit the field entirely to leave it unchanged.","items":{"type":"string"}}}},"example":{"domain_filter":["example.com"],"include_replies":[false],"status":["paused"],"webhook_ids":[[]]}}}}},"delete":{"tags":["Monitoring"],"parameters":[{"name":"id","in":"path","description":"The id segment of the path, as returned by the endpoint that created the resource.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#monitor-id-delete","api_endpoint":"https://api.twitterapis.com/twitter/monitor/{id}"},"summary":"Delete Monitor","description":"Delete Monitor | Soft-deletes the monitor: it stops polling immediately and disappears from List Monitors, but its delivery history is retained rather than cascade-deleted. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/monitor/{id}/health":{"get":{"tags":["Monitoring"],"parameters":[{"name":"id","in":"path","description":"The id segment of the path, as returned by the endpoint that created the resource.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#monitor-id-health","api_endpoint":"https://api.twitterapis.com/twitter/monitor/{id}/health"},"summary":"Monitor Health","description":"Monitor Health | Returns a single monitor's current status, degradation flag, and cursor position, for building your own health dashboard. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/monitor/health":{"get":{"tags":["Monitoring"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#monitor-health","api_endpoint":"https://api.twitterapis.com/twitter/monitor/health"},"summary":"Account Monitor Health","description":"Account Monitor Health | Returns a single-call summary of your entire monitoring setup: overall status, how many of your monitors are active vs paused, and how many delivery attempts in the last 24 hours were pending, delivered, or failed. Distinct from Monitor Health above, which reports one monitor's cursor state, not your whole account's. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/monitor/deliveries":{"get":{"tags":["Monitoring"],"parameters":[{"name":"limit","in":"query","description":"Max events to return, 1-200. Defaults to 50.","required":false,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#monitor-deliveries","api_endpoint":"https://api.twitterapis.com/twitter/monitor/deliveries"},"summary":"Monitor Deliveries","description":"Monitor Deliveries | Returns your most recent monitor delivery events, most recent first, each carrying the actual measured lag: detected_lag_ms is X's own post timestamp subtracted from the moment our scheduler enqueued the delivery (i.e. real detection latency, bound by the current poll interval), and delivery_lag_ms is the separate queue-to-webhook-POST time. Either can be null for an older event whose payload predates this field. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/oapi/x_user_stream/add_user_to_monitor_tweet":{"post":{"tags":["Monitoring"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#oapi-x-user-stream-add-user-to-monitor-tweet","api_endpoint":"https://api.twitterapis.com/oapi/x_user_stream/add_user_to_monitor_tweet"},"summary":"Compat: Add User to Tweet Monitoring","description":"Compat: Add User to Tweet Monitoring | An x_user_stream-shaped request/response envelope, translated onto the exact same underlying monitor system as POST /twitter/monitor -- not a second capability, one system with two request shapes in front of it. Migrating an integration already built against that shape? Point it at this path instead of rewriting it against /twitter/monitor. Free: account administration, not a metered read, billed identically to /twitter/monitor. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"x_user_name":{"type":"string","description":"The X username to watch, without the @.","required":true}}},"example":{"x_user_name":["elonmusk"]}}}}}},"/oapi/x_user_stream/remove_user_to_monitor_tweet":{"post":{"tags":["Monitoring"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#oapi-x-user-stream-remove-user-to-monitor-tweet","api_endpoint":"https://api.twitterapis.com/oapi/x_user_stream/remove_user_to_monitor_tweet"},"summary":"Compat: Remove User from Tweet Monitoring","description":"Compat: Remove User from Tweet Monitoring | An x_user_stream-shaped request/response envelope for removing a monitored user, translated onto DELETE /twitter/monitor/{id}. id_for_user is exactly our monitor id -- get it from get_user_to_monitor_tweet, i.e. it is an opaque handle from that list response, which is what our id already is. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"id_for_user":{"type":"string","description":"The monitor id, from GET /oapi/x_user_stream/get_user_to_monitor_tweet.","required":true}}},"example":{"id_for_user":["b6f2c1a4-9e3d-4c11-8a2f-7d5e6c9b0a11"]}}}}}},"/oapi/x_user_stream/get_user_to_monitor_tweet":{"get":{"tags":["Monitoring"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#oapi-x-user-stream-get-user-to-monitor-tweet","api_endpoint":"https://api.twitterapis.com/oapi/x_user_stream/get_user_to_monitor_tweet"},"summary":"Compat: List Tweet-Monitored Users","description":"Compat: List Tweet-Monitored Users | An x_user_stream-shaped response envelope for listing monitored users, backed by the same monitor rows GET /twitter/monitor returns. Honest field mapping, not fabricated: our monitors table stores no numeric Twitter user id and no separate display name, so x_user_id is always null and x_user_name/x_user_screen_name both carry the handle we actually store. is_monitor_profile (profile-change monitoring) is not a capability this API has -- always 0, never reported as on. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/webhook":{"post":{"tags":["Monitoring"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#webhook-post","api_endpoint":"https://api.twitterapis.com/twitter/webhook"},"summary":"Create Webhook","description":"Create Webhook | Register your HTTPS endpoint to receive signed monitor events. The signing secret is returned exactly once in this response; store it immediately, it cannot be retrieved again. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"url":{"type":"string","description":"Your https delivery endpoint. Private, loopback, link-local, and metadata IPs are refused, re-checked at every delivery, not just at creation.","required":true}}},"example":{"url":["https://example.com/webhooks/twitterapis"]}}}}},"get":{"tags":["Monitoring"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#webhook-get","api_endpoint":"https://api.twitterapis.com/twitter/webhook"},"summary":"List Webhooks","description":"List Webhooks | Returns every non-deleted webhook on your account. Never returns the signing secret; that is shown once, at creation. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}]}},"/twitter/webhook/{id}/test":{"post":{"tags":["Monitoring"],"parameters":[{"name":"id","in":"path","description":"The id segment of the path, as returned by the endpoint that created the resource.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#webhook-id-test","api_endpoint":"https://api.twitterapis.com/twitter/webhook/{id}/test"},"summary":"Test Webhook","description":"Test Webhook | Sends a single HMAC-signed test event to this webhook's URL right now and returns the outcome synchronously. Unlike a real monitor event, a test send is never queued, retried, or dead-lettered: it is a one-shot diagnostic so you can confirm your endpoint and signature verification both work before relying on the webhook. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/twitter/webhook/{id}/redrive":{"post":{"tags":["Monitoring"],"parameters":[{"name":"id","in":"path","description":"The id segment of the path, as returned by the endpoint that created the resource.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#webhook-id-redrive","api_endpoint":"https://api.twitterapis.com/twitter/webhook/{id}/redrive"},"summary":"Replay Dead Deliveries","description":"Replay Dead Deliveries | Re-queues this webhook's dead-lettered deliveries so the normal delivery loop sends them again, signed exactly like a live event and with a full retry budget. A delivery is dead-lettered after it fails all 8 attempts over 21 minutes, which is what happens when your endpoint is down longer than that window; until you call this, it is never sent again. Deliveries that died for a permanent reason (a 410 Gone, or a webhook you deleted) are deliberately not replayed, because they would fail identically, and are reported as skipped_permanent instead. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"limit":{"type":"number","description":"Cap how many deliveries this call replays, oldest first. Default 100, minimum 1, maximum 1000."},"max_age_hours":{"type":"number","description":"Only replay deliveries that died within this many hours. Default 24, minimum 1, maximum 168."}}},"example":{"limit":["100"],"max_age_hours":["24"]}}}}}},"/twitter/webhook/{id}":{"delete":{"tags":["Monitoring"],"parameters":[{"name":"id","in":"path","description":"The id segment of the path, as returned by the endpoint that created the resource.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.twitterapis.com#webhook-id","api_endpoint":"https://api.twitterapis.com/twitter/webhook/{id}"},"summary":"Delete Webhook","description":"Delete Webhook | Soft-deletes the webhook: it stops receiving deliveries immediately and disappears from List Webhooks, but delivery history referencing it is retained rather than cascade-deleted. Cost: Free per call. | Source: official OpenAPI spec at https://www.twitterapis.com/openapi.json","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"security":[{"bearerAuth":[]}]}