{"openapi":"3.1.0","info":{"title":"RelayX — X data API","description":"X data API gateway. Keys, credits and usage are managed by the portal.","version":"0.1.0"},"paths":{"/auth/register":{"post":{"tags":["portal"],"summary":"Register","operationId":"register_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credentials"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Create a new portal account with an email and password. Returns a session token you can pass to every other portal endpoint as a bearer credential."}},"/auth/login":{"post":{"tags":["portal"],"summary":"Login","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credentials"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Exchange an email and password for a session token. This token authenticates the portal endpoints; API keys are issued separately and authenticate the data endpoints."}},"/auth/me":{"get":{"tags":["portal"],"summary":"Me","operationId":"me_auth_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return the account behind the current session token — use it to check that a token is still valid and to read the account id."}},"/auth/attribution":{"post":{"tags":["portal"],"summary":"Attribution","description":"First-party attribution (docs/analytics-plan.md Phase 2). The dashboard calls this once after auth\nwith the same-origin first-touch blob + anon_id: store first-touch (set-once) and stitch this\nbrowser's prior anonymous events to the user. Best-effort; never fails the caller.","operationId":"attribution_auth_attribution_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Attribution"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/keys":{"get":{"tags":["portal"],"summary":"List Keys","operationId":"list_keys_keys_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"List every API key on the account with its QPS limit and revocation state. Credits are account-level — shared by all keys and reported by GET /account. Key secrets are shown only once, at creation."},"post":{"tags":["portal"],"summary":"Create Key","operationId":"create_key_keys_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Issue a new API key. The full secret is returned once in this response and cannot be retrieved again — store it immediately."}},"/keys/{key_id}/reveal":{"get":{"tags":["portal"],"summary":"Reveal","description":"Return the full key string to its authenticated owner (dashboard reveal/copy + inline tester).\nOwner-scoped; a key belonging to someone else 404s.","operationId":"reveal_keys__key_id__reveal_get","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/keys/{key_id}/revoke":{"post":{"tags":["portal"],"summary":"Revoke","operationId":"revoke_keys__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Permanently revoke an API key. Requests using it start failing straight away; any remaining credits stay on the account."}},"/keys/{key_id}/topup":{"post":{"tags":["portal"],"summary":"Topup","operationId":"topup_keys__key_id__topup_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopUp"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Add credits to the account (the key only identifies the account). Disabled in production, where credits are added only by a settled payment."}},"/account":{"get":{"tags":["portal"],"summary":"Account","operationId":"account_account_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return the account's credit balance and plan state — one shared balance, spent by every key, that also governs each key's QPS limit."}},"/usage":{"get":{"tags":["portal"],"summary":"Usage","operationId":"usage_usage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Days"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Per-call usage history for the account: endpoint, timestamp, credits charged and response status, newest first."}},"/billing/crypto/config":{"get":{"tags":["billing"],"summary":"Config","description":"List the cryptocurrencies accepted for top-ups and the minimum order size for each. Call this before creating a checkout.\n\nWhat the dashboard needs to render the checkout (public). Each currency carries its own `min_usd`\n(NOWPayments' per-coin network minimum) so the UI can validate before submit instead of surfacing a\nprovider \"too small\" only after the user clicks Continue.","operationId":"config_billing_crypto_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/crypto/checkout":{"post":{"tags":["billing"],"summary":"Checkout","operationId":"checkout_billing_crypto_checkout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Checkout"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Create a top-up order and return a payment address to send funds to. Credits are applied only once the network confirms the payment."}},"/billing/crypto/orders":{"get":{"tags":["billing"],"summary":"Orders","operationId":"orders_billing_crypto_orders_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"List the account's top-up orders with their current payment status, newest first."}},"/billing/crypto/orders/{order_id}":{"get":{"tags":["billing"],"summary":"Order","operationId":"order_billing_crypto_orders__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Fetch a single top-up order, including how much has been received and how many credits have been applied so far."}},"/admin/metrics":{"get":{"tags":["admin"],"summary":"Metrics","operationId":"metrics_admin_metrics_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users":{"get":{"tags":["admin"],"summary":"Users","description":"One row per account, newest signup first: lifecycle counters (keys / calls / spend / paid),\naccount balance, first-touch source, and last-activity across usage+events+keys.","operationId":"users_admin_users_get","parameters":[{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":300,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{uid}":{"get":{"tags":["admin"],"summary":"User Detail","description":"Everything about one account: profile + attribution, API keys, usage by endpoint, the full\nevent trail (behaviour), and payments. Keys are prefix-masked.","operationId":"user_detail_admin_users__uid__get","parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"integer","title":"Uid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/shadowban":{"get":{"tags":["tools"],"summary":"Free X shadowban (search-visibility) check","operationId":"shadowban_tools_shadowban_get","parameters":[{"name":"handle","in":"query","required":true,"schema":{"type":"string","title":"Handle"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/tweets-by-date":{"get":{"tags":["tools"],"summary":"Free: an account's tweets in a date range (first page)","operationId":"tweets_by_date_tools_tweets_by_date_get","parameters":[{"name":"handle","in":"query","required":true,"schema":{"type":"string","title":"Handle"}},{"name":"since","in":"query","required":true,"schema":{"type":"string","title":"Since"}},{"name":"until","in":"query","required":true,"schema":{"type":"string","title":"Until"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/tweets-by-date/batch":{"get":{"tags":["tools"],"summary":"Free: post counts for several accounts in one date range","operationId":"tweets_by_date_batch_tools_tweets_by_date_batch_get","parameters":[{"name":"handles","in":"query","required":true,"schema":{"type":"string","title":"Handles"}},{"name":"since","in":"query","required":true,"schema":{"type":"string","title":"Since"}},{"name":"until","in":"query","required":true,"schema":{"type":"string","title":"Until"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/tweets-by-date/export":{"get":{"tags":["tools"],"summary":"Export an account's tweets in a date range (CSV/JSON/XLSX), paged server-side. Free (capped) anonymously; with an API key it spends your credits with no free caps.","operationId":"tweets_by_date_export_tools_tweets_by_date_export_get","parameters":[{"name":"handle","in":"query","required":true,"schema":{"type":"string","title":"Handle"}},{"name":"since","in":"query","required":true,"schema":{"type":"string","title":"Since"}},{"name":"until","in":"query","required":true,"schema":{"type":"string","title":"Until"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"csv","title":"Format"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/tweets-by-date/batch/export":{"get":{"tags":["tools"],"summary":"Free: a batch as CSV/XLSX — one row per account (what=summary) or every post (what=posts)","operationId":"tweets_by_date_batch_export_tools_tweets_by_date_batch_export_get","parameters":[{"name":"handles","in":"query","required":true,"schema":{"type":"string","title":"Handles"}},{"name":"since","in":"query","required":true,"schema":{"type":"string","title":"Since"}},{"name":"until","in":"query","required":true,"schema":{"type":"string","title":"Until"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"xlsx","title":"Format"}},{"name":"what","in":"query","required":false,"schema":{"type":"string","default":"summary","title":"What"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/follow-check":{"get":{"tags":["tools"],"summary":"Free: does A follow B (and B follow A)","operationId":"follow_check_tools_follow_check_get","parameters":[{"name":"a","in":"query","required":true,"schema":{"type":"string","title":"A"}},{"name":"b","in":"query","required":true,"schema":{"type":"string","title":"B"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/user/info":{"get":{"tags":["user"],"summary":"Get user info by screen name","operationId":"user_info_twitter_user_info_get","parameters":[{"name":"userName","in":"query","required":true,"schema":{"type":"string","title":"Username"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Look up a single profile by its @handle — bio, counts, verification state, avatar and banner."}},"/twitter/user_about":{"get":{"tags":["user"],"summary":"Get user profile 'about'","operationId":"user_about_twitter_user_about_get","parameters":[{"name":"userName","in":"query","required":true,"schema":{"type":"string","title":"Username"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return the extended 'about' panel for a profile: category, location, website and joined date, where the account publishes them."}},"/twitter/user/batch_info_by_ids":{"get":{"tags":["user"],"summary":"Batch user info by ids","operationId":"batch_info_twitter_user_batch_info_by_ids_get","parameters":[{"name":"userIds","in":"query","required":true,"schema":{"type":"string","description":"comma-separated user ids","title":"Userids"},"description":"comma-separated user ids"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Resolve many numeric user ids to full profiles in one call — far cheaper per user than looking them up individually."}},"/twitter/user/followers":{"get":{"tags":["user"],"summary":"Get user followers","operationId":"user_followers_twitter_user_followers_get","parameters":[{"name":"userName","in":"query","required":true,"schema":{"type":"string","title":"Username"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"pageSize","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pagesize"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Page through the accounts that follow a user, newest follower first."}},"/twitter/user/followings":{"get":{"tags":["user"],"summary":"Get user followings","operationId":"user_followings_twitter_user_followings_get","parameters":[{"name":"userName","in":"query","required":true,"schema":{"type":"string","title":"Username"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"pageSize","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pagesize"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Page through the accounts a user follows, newest first."}},"/twitter/user/verifiedFollowers":{"get":{"tags":["user"],"summary":"Get verified followers","operationId":"verified_followers_twitter_user_verifiedFollowers_get","parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Page through only the verified accounts that follow a user — useful for gauging reach among notable accounts."}},"/twitter/user/followers_ids":{"get":{"tags":["user"],"summary":"Get follower ids (bulk)","operationId":"followers_ids_twitter_user_followers_ids_get","parameters":[{"name":"userName","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"}},{"name":"userId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","default":5000,"title":"Count"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","default":-1,"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return follower ids only, in large pages. The cheapest way to snapshot a big follower graph before hydrating the profiles you care about."}},"/twitter/user/mentions":{"get":{"tags":["user"],"summary":"Get tweets mentioning a user","operationId":"user_mentions_twitter_user_mentions_get","parameters":[{"name":"userName","in":"query","required":true,"schema":{"type":"string","title":"Username"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return posts that mention a user, newest first — the account's inbound conversation."}},"/twitter/user/search":{"get":{"tags":["user"],"summary":"Search users by keyword","operationId":"user_search_twitter_user_search_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Search profiles by keyword and return matching users ranked by relevance."}},"/twitter/user/check_follow_relationship":{"get":{"tags":["user"],"summary":"Check follow relationship","operationId":"check_follow_twitter_user_check_follow_relationship_get","parameters":[{"name":"source_user_name","in":"query","required":true,"schema":{"type":"string","title":"Source User Name"}},{"name":"target_user_name","in":"query","required":true,"schema":{"type":"string","title":"Target User Name"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Check the follow relationship between two accounts in both directions."}},"/twitter/user/last_tweets":{"get":{"tags":["user"],"summary":"Get a user's latest tweets","operationId":"last_tweets_twitter_user_last_tweets_get","parameters":[{"name":"userName","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"}},{"name":"userId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"includeReplies","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Includereplies"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return a user's most recent posts and reposts, newest first."}},"/twitter/user/tweet_timeline":{"get":{"tags":["user"],"summary":"Get a user's tweet+reply timeline","operationId":"tweet_timeline_twitter_user_tweet_timeline_get","parameters":[{"name":"userId","in":"query","required":true,"schema":{"type":"string","title":"Userid"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"includeReplies","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Includereplies"}},{"name":"includeParentTweet","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Includeparenttweet"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return a user's full timeline including replies — the same mix the profile's posts-and-replies tab shows."}},"/twitter/tweets":{"get":{"tags":["tweet"],"summary":"Get tweets by ids","operationId":"tweets_by_ids_twitter_tweets_get","parameters":[{"name":"tweet_ids","in":"query","required":true,"schema":{"type":"string","description":"comma-separated tweet ids","title":"Tweet Ids"},"description":"comma-separated tweet ids"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Hydrate many post ids into full post objects in one call, including author, metrics and media."}},"/twitter/tweet/replies":{"get":{"tags":["tweet"],"summary":"Get tweet replies","operationId":"tweet_replies_twitter_tweet_replies_get","parameters":[{"name":"tweetId","in":"query","required":true,"schema":{"type":"string","title":"Tweetid"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Page through the direct replies to a post."}},"/twitter/tweet/replies/v2":{"get":{"tags":["tweet"],"summary":"Get tweet replies (v2)","operationId":"tweet_replies_v2_twitter_tweet_replies_v2_get","parameters":[{"name":"tweetId","in":"query","required":true,"schema":{"type":"string","title":"Tweetid"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"queryType","in":"query","required":false,"schema":{"type":"string","default":"Relevance","title":"Querytype"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Replies to a post using the newer timeline shape, which preserves conversation threading more faithfully."}},"/twitter/tweet/quotes":{"get":{"tags":["tweet"],"summary":"Get tweet quotes","operationId":"tweet_quotes_twitter_tweet_quotes_get","parameters":[{"name":"tweetId","in":"query","required":true,"schema":{"type":"string","title":"Tweetid"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Page through quote posts — reposts that added commentary."}},"/twitter/tweet/retweeters":{"get":{"tags":["tweet"],"summary":"Get tweet retweeters","operationId":"tweet_retweeters_twitter_tweet_retweeters_get","parameters":[{"name":"tweetId","in":"query","required":true,"schema":{"type":"string","title":"Tweetid"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"List the accounts that reposted a post."}},"/twitter/tweet/thread_context":{"get":{"tags":["tweet"],"summary":"Get tweet thread context","operationId":"thread_context_twitter_tweet_thread_context_get","parameters":[{"name":"tweetId","in":"query","required":true,"schema":{"type":"string","title":"Tweetid"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return a post together with its ancestors and replies, so you can rebuild the whole conversation thread."}},"/twitter/tweet/advanced_search":{"get":{"tags":["tweet"],"summary":"Advanced tweet search","operationId":"advanced_search_twitter_tweet_advanced_search_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}},{"name":"queryType","in":"query","required":false,"schema":{"type":"string","default":"Latest","title":"Querytype"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Search posts with the full query syntax — operators for author, date range, language, media and engagement."}},"/twitter/article":{"get":{"tags":["tweet"],"summary":"Get article by tweet id","operationId":"article_twitter_article_get","parameters":[{"name":"tweet_id","in":"query","required":true,"schema":{"type":"string","title":"Tweet Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Fetch the long-form article attached to a post, including its body content."}},"/twitter/list/tweets_timeline":{"get":{"tags":["list"],"summary":"Get list tweets","operationId":"list_tweets_twitter_list_tweets_timeline_get","parameters":[{"name":"listId","in":"query","required":true,"schema":{"type":"string","title":"Listid"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return the timeline of posts from a List, newest first."}},"/twitter/list/members":{"get":{"tags":["list"],"summary":"Get list members","operationId":"list_members_twitter_list_members_get","parameters":[{"name":"list_id","in":"query","required":true,"schema":{"type":"string","title":"List Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Page through the accounts that belong to a List."}},"/twitter/list/followers":{"get":{"tags":["list"],"summary":"Get list followers","operationId":"list_followers_twitter_list_followers_get","parameters":[{"name":"list_id","in":"query","required":true,"schema":{"type":"string","title":"List Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Page through the accounts subscribed to a List."}},"/twitter/community/info":{"get":{"tags":["community"],"summary":"Get community info","operationId":"community_info_twitter_community_info_get","parameters":[{"name":"community_id","in":"query","required":true,"schema":{"type":"string","title":"Community Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return a Community's profile: name, purpose, rules, member count and moderators."}},"/twitter/community/tweets":{"get":{"tags":["community"],"summary":"Get community tweets","operationId":"community_tweets_twitter_community_tweets_get","parameters":[{"name":"community_id","in":"query","required":true,"schema":{"type":"string","title":"Community Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return the timeline of posts from a single Community."}},"/twitter/community/members":{"get":{"tags":["community"],"summary":"Get community members","operationId":"community_members_twitter_community_members_get","parameters":[{"name":"community_id","in":"query","required":true,"schema":{"type":"string","title":"Community Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Page through a Community's members."}},"/twitter/community/moderators":{"get":{"tags":["community"],"summary":"Get community moderators","operationId":"community_moderators_twitter_community_moderators_get","parameters":[{"name":"community_id","in":"query","required":true,"schema":{"type":"string","title":"Community Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"List a Community's moderators."}},"/twitter/community/get_tweets_from_all_community":{"get":{"tags":["community"],"summary":"Search tweets from all communities","operationId":"all_community_tweets_twitter_community_get_tweets_from_all_community_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}},{"name":"queryType","in":"query","required":false,"schema":{"type":"string","default":"Latest","title":"Querytype"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Search posts across all public Communities by keyword or hashtag."}},"/twitter/spaces/detail":{"get":{"tags":["spaces"],"summary":"Get space detail","operationId":"space_detail_twitter_spaces_detail_get","parameters":[{"name":"space_id","in":"query","required":true,"schema":{"type":"string","title":"Space Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return a Space's details — title, host, speakers, state and listener counts."}},"/twitter/trends":{"get":{"tags":["trends"],"summary":"Get trends by woeid","operationId":"trends_twitter_trends_get","parameters":[{"name":"woeid","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Woeid"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Count"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return the trending topics for a WOEID (Where On Earth ID), ranked by position."}},"/account/credits":{"get":{"tags":["account"],"summary":"Get remaining account credits","operationId":"account_credits_account_credits_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Return the credits remaining on the account behind the API key making the request. Always free."}},"/twitter/user_login_v2":{"post":{"tags":["write"],"summary":"Connect an X account → login_cookie","description":"Return a sealed `login_cookie` the caller passes to write endpoints. Nothing is stored server-side.\nBYO: pass auth_token+ct0. Credentialed: pass username+password (+totp) — needs a device in the loop.","operationId":"user_login_v2_twitter_user_login_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginV2"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/create_tweet_v2":{"post":{"tags":["write"],"summary":"Post a tweet","operationId":"create_tweet_v2_twitter_create_tweet_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTweet"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/delete_tweet_v2":{"post":{"tags":["write"],"summary":"Delete a tweet","operationId":"delete_tweet_v2_twitter_delete_tweet_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TweetAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/like_tweet_v2":{"post":{"tags":["write"],"summary":"Like a tweet","operationId":"like_tweet_v2_twitter_like_tweet_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TweetAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/unlike_tweet_v2":{"post":{"tags":["write"],"summary":"Unlike a tweet","operationId":"unlike_tweet_v2_twitter_unlike_tweet_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TweetAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/retweet_tweet_v2":{"post":{"tags":["write"],"summary":"Retweet a tweet","operationId":"retweet_tweet_v2_twitter_retweet_tweet_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TweetAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/unretweet_tweet_v2":{"post":{"tags":["write"],"summary":"Undo a retweet","operationId":"unretweet_tweet_v2_twitter_unretweet_tweet_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TweetAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/bookmark_tweet_v2":{"post":{"tags":["write"],"summary":"Bookmark a tweet","operationId":"bookmark_tweet_v2_twitter_bookmark_tweet_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TweetAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/unbookmark_tweet_v2":{"post":{"tags":["write"],"summary":"Remove a bookmark","operationId":"unbookmark_tweet_v2_twitter_unbookmark_tweet_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TweetAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/follow_user_v2":{"post":{"tags":["write"],"summary":"Follow a user","operationId":"follow_user_v2_twitter_follow_user_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/unfollow_user_v2":{"post":{"tags":["write"],"summary":"Unfollow a user","operationId":"unfollow_user_v2_twitter_unfollow_user_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/send_dm_to_user":{"post":{"tags":["write"],"summary":"Send a direct message","operationId":"send_dm_to_user_twitter_send_dm_to_user_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendDM"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/upload_media_v2":{"post":{"tags":["write"],"summary":"Upload media, get a media_id","operationId":"upload_media_v2_twitter_upload_media_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadMedia"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/update_profile_v2":{"patch":{"tags":["write"],"summary":"Update profile fields","operationId":"update_profile_v2_twitter_update_profile_v2_patch","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfile"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/update_avatar_v2":{"patch":{"tags":["write"],"summary":"Set profile avatar","operationId":"update_avatar_v2_twitter_update_avatar_v2_patch","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateImage"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/update_banner_v2":{"patch":{"tags":["write"],"summary":"Set profile banner","operationId":"update_banner_v2_twitter_update_banner_v2_patch","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateImage"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/join_community_v2":{"post":{"tags":["write"],"summary":"Join a community","operationId":"join_community_v2_twitter_join_community_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/leave_community_v2":{"post":{"tags":["write"],"summary":"Leave a community","operationId":"leave_community_v2_twitter_leave_community_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/create_community_v2":{"post":{"tags":["write"],"summary":"Create a community (unsupported)","operationId":"create_community_v2_twitter_create_community_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommunity"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twitter/delete_community_v2":{"post":{"tags":["write"],"summary":"Delete a community (unsupported)","operationId":"delete_community_v2_twitter_delete_community_v2_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Attribution":{"properties":{"attribution":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Attribution"},"anon_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Anon Id"}},"type":"object","title":"Attribution"},"Checkout":{"properties":{"key_id":{"type":"integer","title":"Key Id"},"usd":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"}],"title":"Usd"},"pay_currency":{"type":"string","maxLength":32,"title":"Pay Currency"},"case":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Case"}},"type":"object","required":["key_id","usd","pay_currency"],"title":"Checkout"},"CommunityAction":{"properties":{"login_cookie":{"type":"string","title":"Login Cookie"},"community_id":{"type":"string","title":"Community Id"}},"type":"object","required":["login_cookie","community_id"],"title":"CommunityAction"},"CreateCommunity":{"properties":{"login_cookie":{"type":"string","title":"Login Cookie"},"name":{"type":"string","maxLength":30,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Description"}},"type":"object","required":["login_cookie","name"],"title":"CreateCommunity"},"CreateTweet":{"properties":{"login_cookie":{"type":"string","title":"Login Cookie"},"text":{"type":"string","maxLength":4000,"minLength":1,"title":"Text"},"reply_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply To","description":"tweet id to reply to"},"media_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Media Ids"}},"type":"object","required":["login_cookie","text"],"title":"CreateTweet"},"Credentials":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","maxLength":200,"minLength":8,"title":"Password"}},"type":"object","required":["email","password"],"title":"Credentials"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KeyCreate":{"properties":{"label":{"type":"string","maxLength":80,"title":"Label","default":""},"kind":{"type":"string","pattern":"^(live|test)$","title":"Kind","default":"live"},"credits":{"anyOf":[{"type":"integer","maximum":100000000.0,"minimum":0.0},{"type":"null"}],"title":"Credits"}},"type":"object","title":"KeyCreate"},"LoginV2":{"properties":{"auth_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Token","description":"web session cookie (BYO path)"},"ct0":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ct0","description":"web CSRF cookie (BYO path)"},"twid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twid"},"guest_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Id"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"totp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Totp","description":"TOTP code/secret if the account has 2FA"}},"type":"object","title":"LoginV2","description":"Connect an X account. Either bring-your-own web session (auth_token + ct0), or username/password\nfor a server-side Android login (needs a device in the loop; see docs §1)."},"SendDM":{"properties":{"login_cookie":{"type":"string","title":"Login Cookie"},"user_id":{"type":"string","title":"User Id","description":"recipient's numeric user id (must accept DMs)"},"text":{"type":"string","maxLength":10000,"minLength":1,"title":"Text"},"media_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Id"},"reply_to_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply To Message Id"}},"type":"object","required":["login_cookie","user_id","text"],"title":"SendDM"},"TopUp":{"properties":{"amount":{"type":"integer","maximum":100000000.0,"minimum":1.0,"title":"Amount"}},"type":"object","required":["amount"],"title":"TopUp"},"TweetAction":{"properties":{"login_cookie":{"type":"string","title":"Login Cookie"},"tweet_id":{"type":"string","title":"Tweet Id"}},"type":"object","required":["login_cookie","tweet_id"],"title":"TweetAction"},"UpdateImage":{"properties":{"login_cookie":{"type":"string","title":"Login Cookie"},"image_data":{"type":"string","title":"Image Data","description":"base64-encoded image bytes"},"media_type":{"type":"string","title":"Media Type","default":"image/jpeg"}},"type":"object","required":["login_cookie","image_data"],"title":"UpdateImage"},"UpdateProfile":{"properties":{"login_cookie":{"type":"string","title":"Login Cookie"},"name":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Description"},"location":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Location"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["login_cookie"],"title":"UpdateProfile"},"UploadMedia":{"properties":{"login_cookie":{"type":"string","title":"Login Cookie"},"media_data":{"type":"string","title":"Media Data","description":"base64-encoded media bytes"},"media_type":{"type":"string","title":"Media Type","description":"MIME type, e.g. image/jpeg, video/mp4","default":"image/png"},"media_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Category","description":"e.g. tweet_image, tweet_video"}},"type":"object","required":["login_cookie","media_data"],"title":"UploadMedia"},"UserAction":{"properties":{"login_cookie":{"type":"string","title":"Login Cookie"},"user_id":{"type":"string","title":"User Id","description":"numeric X user id"}},"type":"object","required":["login_cookie","user_id"],"title":"UserAction"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}