Skip to Content
ResourcesIntegrationsSocial & CommunicationX

X

Service domainSOCIAL MEDIA
X icon
Arcade Optimized

Arcade.dev LLM tools for X (Twitter).

Author:Arcade
Version:2.0.0
Auth:User authorization via the X auth provider
33tools

The X toolkit provides Arcade tools for interacting with the X (Twitter) platform, enabling LLMs to read and write tweets, manage lists, search content, and inspect user and Space metadata on behalf of an authenticated user.

Capabilities

  • Tweeting & threads: Post, delete, like, unlike, retweet, undo-retweet, and quote tweets; compose multi-tweet threads with mid-thread resume support; attach polls and control reply permissions.
  • Timeline & search: Fetch the home timeline, @-mentions, quote tweets, direct replies, and full conversation threads; search the recent (~7-day) tweet index by structured keyword filters with pagination and empty-page auto-follow.
  • User & engagement data: Look up users by handle or numeric ID; retrieve liked tweets, authored tweets (full history), and engager lists (likers/retweeters); fetch the authenticated user's own profile.
  • List management: Create, update, delete, pin, and unpin lists; add and remove members (with eventual-consistency and serialization caveats); read list members, list memberships for a user, and recent tweets from a list.
  • Spaces: Look up a Space by ID, list live/scheduled Spaces by creator, and search Spaces by title.

OAuth

This toolkit uses OAuth 2.0 with X as the identity provider. See the Arcade X auth provider docs for setup details.

Available tools(33)

33 of 33 tools
Operations
Behavior
Tool nameDescriptionSecrets
Add one or more users to an X List owned by the authenticated user. Provide ``user_ids``, ``usernames``, or both. Adding a user who is already a member is treated as success. On a mid-loop rate-limit, the run short-circuits and remaining targets are marked as not attempted. On retry, drop the targets that already succeeded; otherwise polling re-arms X's bucket and extends the lockout. X is eventually consistent on list membership: a success status here does not mean a subsequent ``GetListMembers`` will immediately return the new member. Allow a few seconds before relying on the read endpoint to reflect the mutation. Serialize dependent list mutations: do not fire ``AddListMember`` in parallel with ``DeleteList``, ``RemoveListMember``, or ``UpdateList`` against the same ``list_id``. Concurrent dependent mutations race and surface spurious ``not_found`` errors when the member call lands after the list is gone. Await each mutation before issuing the next one on the same list.
Create a new X List owned by the authenticated user.
Delete an X List owned by the authenticated user. The list and its memberships are removed. The tool distinguishes "I just deleted it" from "it was already gone" rather than collapsing both into the same idempotent-success envelope. Serialize dependent list mutations: do not fire ``DeleteList`` in parallel with ``AddListMember`` / ``RemoveListMember`` / ``UpdateList`` / ``PinList`` against the same ``list_id``. The list-membership endpoints will race against the delete and surface a spurious ``not_found`` when the member call lands after the list is gone. Await each mutation before issuing the next one on the same list.
Delete one of the authenticated user's tweets. The tool distinguishes "I just deleted it" from "it was already gone" rather than collapsing both into the same idempotent-success envelope.
Fetch the conversation thread containing ``tweet_id``. Returns every tweet that shares the same ``conversation_id`` as the given tweet, ordered oldest-first so a caller can render the thread top to bottom. The conversation root sits at position 0 whenever accessible. Replies are pulled from the recent-search index (~7-day window) which can lag real time by several minutes. To verify a specific reply, look it up by id instead.
Fetch the authenticated user's reverse-chronological home timeline. Returns recent tweets from accounts the user follows.
List members of an X List. The members endpoint is eventually consistent: after ``AddListMember`` or ``RemoveListMember`` returns success, the membership read endpoints (``GetListMembers``, ``GetListMembershipsForUser``) can take several seconds to surface the change. The list-tweets endpoint (``GetListTweets``) is typically refreshed faster than the members endpoint, so an empty page immediately after an add is more likely a consistency window than a genuine empty list. Re-query after a brief wait when verifying a just-applied mutation.
List the X Lists the target user is a member of. Pass ``user_id`` or ``username`` (exactly one). With ``username``, the handle is resolved to a numeric id first; passing ``user_id`` skips that hop.
List recent tweets from members of an X List, newest first.
Fetch recent @-mentions of the authenticated user, newest first.
List the X Lists a user owns. Omitting both ``user_id`` and ``username`` defaults to the authenticated user (the common "show me my lists" workflow after creating a list). Each list record carries ``id``, ``name``, ``private``, ``description``, ``member_count``, ``follower_count``, ``owner_id``, and ``created_at``.
Fetch public quote tweets of the given tweet.
Fetch public DIRECT replies to a given tweet (last ~7 days). Returns only tweets whose ``referenced_tweets`` carry a ``replied_to`` edge pointing at ``tweet_id`` -- not the whole conversation thread. Sibling replies and nested replies further down the tree are filtered out so the result reflects what a reader would see when expanding "replies to this tweet" in the X UI. Use the conversation tool to get the full thread surrounding a tweet instead. The recent-search index can lag real time by several minutes, so a just-posted reply may not appear yet. To verify a reply you just posted, look it up by id instead. Pagination note: each page is fetched as ``max_results`` from X's recent-search index, then locally filtered down to direct replies. Pages where every tweet is an indirect reply (sibling or nested) come back with ``data=[]`` plus a ``next_token`` -- continue paginating to surface the direct replies further into the conversation.
List the live or scheduled X Spaces created by a set of users. Useful for monitoring whether a set of accounts has any Space currently airing or queued. Ended Spaces are not returned.
List tweets a user has liked, newest-liked first. Omitting both ``user_id`` and ``username`` defaults to the authenticated user. Each tweet carries ``tweet_url``, ``author_username``, ``author_name``, and any media or poll enrichment. When the target user's likes are private, the response is an empty page indistinguishable from "no liked tweets."
Fetch tweets authored by a specific X user, newest first. Paginates through the author's full tweet history (no 7-day window). Results include original tweets, replies (unless ``exclude_replies=True``), retweets (unless ``exclude_retweets=True``), and quote tweets. Author handle, name, and media or poll details are flattened onto each tweet.
Like a tweet as the authenticated user. Idempotent: liking an already-liked tweet succeeds.
Look up a single X Space by its id. Returns the Space's lifecycle state, title, creator, host and speaker ids, language, and participant and subscriber counts. X gates several Space metadata fields behind ownership: most non-host callers cannot read a Space's full metadata, even when the Space surfaces in a search or by-creator listing.
List the users who liked or retweeted a tweet. Each user record carries the standard handle, name, and profile metadata so callers can render an engager row without a follow-up lookup. When the tweet shows non-zero engagement in ``public_metrics`` but X's engagers endpoint returns zero users on the first page, the call returns an ``errors[0].type = "data_unavailable"`` envelope. This signals that the account's X access tier does not expose engager lists for this tweet; treat ``public_metrics.like_count`` / ``retweet_count`` from ``LookupTweetById`` as the authoritative engagement total in that case.
Look up tweets by id (single or batched) on X. Pass one id or up to 100 ids; the response is always a list. Each entry carries ``referenced_tweets`` (``type`` of ``replied_to``, ``quoted``, or ``retweeted`` plus the parent ``id``), ``conversation_id``, and the convenience fields ``tweet_url`` / ``author_username`` / ``author_name``. Set ``include_author_only_metrics=True`` to retrieve ``non_public_metrics`` (impressions, user_profile_clicks, url_link_clicks) and ``organic_metrics`` for tweets the authenticated caller authored. X drops third-party tweets from ``data`` when those fields are requested, so leave the flag false unless every id in the batch is known to be authored by the caller.
Look up X (Twitter) users by handle and/or numeric user id. Provide ``usernames``, ``user_ids``, or both. Up to 100 of each per call.
Pin an X List to the authenticated user's profile. Idempotent: pinning an already-pinned list succeeds.
Post a multi-tweet thread as the authenticated user. Posts the first tweet, then chains every subsequent entry as a reply to the prior tweet's id. ``tweets`` must contain 2-25 entries when posting a new thread, or 1-25 entries when resuming an existing thread via ``parent_tweet_id`` (the 1-entry case lets a caller append one more reply to the tail of a prior thread). ``poll_options`` / ``poll_duration_minutes`` / ``quote_tweet_id`` / ``reply_settings`` apply to the head tweet only. Pre-flight validation runs on every entry before any post is created. If any entry fails validation, the call posts nothing. On a mid-thread interruption, ``posted`` carries the rows that landed and ``next_position`` is the 1-based index of the first non-posted entry (0 when every entry posted). Resume the chain with:: tweets = (tweets[next_position - 1 :],) parent_tweet_id = posted[-1]["tweet_id"] # from the prior call Without ``parent_tweet_id``, a resume call would re-create a fresh head tweet and silently split the thread into two disconnected chains. X also rejects mid-thread entries with ``status='invalid_input'`` when the text passes local validation but contains codepoints that X counts as multiple weighted characters (emoji, many CJK glyphs) pushing the weighted total above 280, or when the text contains control characters X disallows. Simplify the entry at ``tweets[next_position - 1]`` (plain ASCII is the safest reset) and resume.
Post a new tweet as the authenticated user. The same tool covers top-level posts, replies, and quote tweets. Supply ``reply_to_tweet_id`` to post the new tweet as a reply; supply ``quote_tweet_id`` to quote another tweet; supply both to post a reply that also quotes a tweet. Pass ``reply_settings`` to restrict who can reply. Pass ``poll_options`` plus ``poll_duration_minutes`` to attach a poll (polls cannot be combined with ``quote_tweet_id``). For multi-tweet threads, use the post-thread tool.
Remove one or more users from an X List owned by the authenticated user. Provide ``user_ids``, ``usernames``, or both. Removing a user who is not a member is treated as success. On a mid-loop rate-limit, the run short-circuits and remaining targets are marked as not attempted. On retry, drop the targets that already succeeded; otherwise polling re-arms X's bucket and extends the lockout. X is eventually consistent on list membership: a success status here does not mean a subsequent ``GetListMembers`` will immediately stop returning the removed member. Allow a few seconds before relying on the read endpoint to reflect the mutation. Serialize dependent list mutations: do not fire ``RemoveListMember`` in parallel with ``DeleteList`` on the same ``list_id`` (a known race that produces spurious ``not_found`` when the remove lands after the delete). Await each mutation before issuing the next one on the same list.
Page 1 of 2(25 of 33)
Last updated on