> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agentkit`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Twitter / X

**Authentication:** Bearer Token
**Categories:** Communication
## What you can do

Connect this agent connector to let your agent:

- **Get media upload status, post likers, user followed lists** — Gets the status of a media upload for X/Twitter
- **Lookup users, posts, user** — Retrieves detailed information for specified X (formerly Twitter) user IDs
- **Unmute user** — Unmutes a target user for the authenticated user, allowing them to see Tweets and notifications from the target user again
- **List list** — Permanently deletes a specified Twitter List using its ID
- **Search full archive, recent** — Searches the full archive of public Tweets from March 2006 onwards
- **Upload media** — Uploads media (images only) to X/Twitter using the v2 API

## Authentication

This connector uses **Bearer Token** authentication. Scalekit securely stores the token and injects it into API requests on behalf of your users. Your agent code never handles tokens directly — you only pass a `connectionName` and a user `identifier`.

Before calling this connector from your code, create the Twitter / X connection in **AgentKit** > **Connections** and copy the exact **Connection name** from that connection into your code. The value in code must match the dashboard exactly.

## Set up the connector

Register your Twitter app credentials with Scalekit so it can manage the OAuth 2.0 authentication flow and token lifecycle on your behalf. You'll need a **Client ID** and **Client Secret** from the [Twitter Developer Portal](https://developer.twitter.com/en/portal/dashboard).

1. ### Create a Twitter connection in Scalekit

   - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**. Search for **Twitter** and click **Create**.

     > Image: Search for Twitter and create a new connection in Scalekit Agent Auth

   - In the **Configure Twitter Connection** panel, copy the **Redirect URI**. It looks like `https:///sso/v1/oauth//callback`. You'll paste this into Twitter in the next step.

     > Image: Copy the Redirect URI from the Configure Twitter Connection panel

2. ### Create an app in the Twitter Developer Portal

   - Go to the [Twitter Developer Portal](https://developer.twitter.com/en/portal/dashboard) and sign in.

   - Click **+ Add App** (or **+ Create Project** to group apps by environment).

     > Image: Twitter Developer Portal showing Projects and Apps with the Add App button

   - Select **Production** environment and give your app a name.

3. ### Configure user authentication settings

   - In your app's overview, find **User authentication settings** and click **Set up**.

     > Image: Twitter app User authentication settings panel

   - Set the following values:

     | Setting | Value |
     |---|---|
     | **App permissions** | **Read and Write** — needed to post and manage content on behalf of users |
     | **Type of App** | **Web App, Automated App or Bot** |
     | **Callback URI / Redirect URL** | Paste the Redirect URI from Scalekit |
     | **Website URL** | Your application's public homepage |

   - Click **Save**.

4. ### Copy OAuth 2.0 credentials

   - In your app, navigate to **Keys and tokens**.

   - Under **OAuth 2.0 Client ID and Client Secret**, click **Generate** (or **Regenerate** if credentials already exist).

   - Copy the **Client ID** and **Client Secret**.

     > Image: Twitter app Keys and tokens page showing Client ID and Client Secret

   > caution: Client secret is shown once
>
> The Client Secret is masked after the initial creation. If you lose it, regenerate it in the Twitter Developer Portal — this invalidates all existing user tokens.

5. ### Add credentials in Scalekit

   - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** and open the Twitter connection you created.

   - Enter your credentials:
     - **Client ID** — from the Twitter OAuth 2.0 section
     - **Client Secret** — copied in the previous step
     - **Scopes** — select the permissions your app needs:
       - `tweet.read` — read tweets and timelines
       - `tweet.write` — create, delete, and manage tweets
       - `users.read` — read user profile data
       - `follows.read` — read follower/following lists
       - `follows.write` — follow and unfollow users
       - `like.read` — read liked tweets
       - `like.write` — like and unlike tweets
       - `bookmark.read` — read bookmarked tweets
       - `bookmark.write` — add and remove bookmarks
       - `list.read` — read list membership and tweets
       - `list.write` — create, update, and delete lists
       - `dm.read` — read direct messages
       - `dm.write` — send direct messages
       - `mute.read` — read muted users
       - `mute.write` — mute and unmute users
       - `block.read` — read blocked users
       - `block.write` — block and unblock users
       - `offline.access` — obtain refresh tokens for long-lived access

     > Image: Scalekit Twitter connection with Client ID, Client Secret, and scopes configured

   - Click **Save**.

## Code examples

Connect a user's Twitter account and make API calls on their behalf — Scalekit handles OAuth 2.0 PKCE and token management automatically.

## Proxy API calls

  ### Node.js

```typescript

const connectionName = 'twitter'; // connection name from AgentKit > Connections
const identifier = 'user_123';    // your unique user identifier

// Get credentials from app.scalekit.com → Developers → Settings → API Credentials
const scalekit = new ScalekitClient(
  process.env.SCALEKIT_ENV_URL,
  process.env.SCALEKIT_CLIENT_ID,
  process.env.SCALEKIT_CLIENT_SECRET
);
const actions = scalekit.actions;

// Step 1: Generate an authorization link and redirect your user to it
const { link } = await actions.getAuthorizationLink({
  connectionName,
  identifier,
});
console.log('Authorize Twitter:', link);
process.stdout.write('Press Enter after authorizing...');
await new Promise(r => process.stdin.once('data', r));

// Step 2: Make Twitter API v2 requests via the Scalekit proxy
// No token management needed — Scalekit handles refresh automatically
const me = await actions.request({
  connectionName,
  identifier,
  path: '/2/users/me',
  method: 'GET',
  params: { 'user.fields': 'name,username,profile_image_url,description' },
});
console.log('Authenticated user:', me);

// Example: post a tweet
const tweet = await actions.request({
  connectionName,
  identifier,
  path: '/2/tweets',
  method: 'POST',
  body: { text: 'Hello from Scalekit Agent Auth!' },
});
console.log('Posted tweet:', tweet);

// Example: search recent tweets
const search = await actions.request({
  connectionName,
  identifier,
  path: '/2/tweets/search/recent',
  method: 'GET',
  params: { query: 'from:twitterdev', max_results: '10' },
});
console.log('Search results:', search);
```

  ### Python

```python

from dotenv import load_dotenv
load_dotenv()

connection_name = "twitter"  # connection name from AgentKit > Connections
identifier = "user_123"      # your unique user identifier

# Get credentials from app.scalekit.com → Developers → Settings → API Credentials
scalekit_client = scalekit.client.ScalekitClient(
    client_id=os.getenv("SCALEKIT_CLIENT_ID"),
    client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
    env_url=os.getenv("SCALEKIT_ENV_URL"),
)
actions = scalekit_client.actions

# Step 1: Generate an authorization link and redirect your user to it
link_response = actions.get_authorization_link(
    connection_name=connection_name,
    identifier=identifier
)
print("Authorize Twitter:", link_response.link)
input("Press Enter after authorizing...")

# Step 2: Make Twitter API v2 requests via the Scalekit proxy
me = actions.request(
    connection_name=connection_name,
    identifier=identifier,
    path="/2/users/me",
    method="GET",
    params={"user.fields": "name,username,profile_image_url,description"}
)
print("Authenticated user:", me)

# Example: post a tweet
tweet = actions.request(
    connection_name=connection_name,
    identifier=identifier,
    path="/2/tweets",
    method="POST",
    body={"text": "Hello from Scalekit Agent Auth!"}
)
print("Posted tweet:", tweet)

# Example: search recent tweets
search = actions.request(
    connection_name=connection_name,
    identifier=identifier,
    path="/2/tweets/search/recent",
    method="GET",
    params={"query": "from:twitterdev", "max_results": "10"}
)
print("Search results:", search)
```

## Tool list

Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first.

## Tool list

### `twitter_activity_subscription_create`

Creates a subscription for an X activity event. Use when you need to monitor specific user activities like profile updates, follows, or spaces events.

Parameters:

- `event_types` (`array`, required): List of event types to subscribe to, e.g. profile.updated, follows, spaces
- `user_id` (`string`, required): Twitter user ID to subscribe to activities for

### `twitter_blocked_users_get`

Retrieves the authenticated user's block list. The id parameter must be the authenticated user's ID. Use Get Authenticated User action first to obtain your user ID.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID — must match the authenticated user
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-1000)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_bookmark_add`

Adds a specified, existing, and accessible Tweet to a user's bookmarks. Success is indicated by the 'bookmarked' field in the response.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `tweet_id` (`string`, required): ID of the Tweet to bookmark

### `twitter_bookmark_remove`

Removes a Tweet from the authenticated user's bookmarks. The Tweet must have been previously bookmarked by the user for the action to have an effect.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `tweet_id` (`string`, required): ID of the bookmarked tweet to remove

### `twitter_bookmarks_get`

Retrieves Tweets bookmarked by the authenticated user. The provided User ID must match the authenticated user's ID.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `tweet_fields` (`string`, optional): Comma-separated tweet fields

### `twitter_compliance_job_create`

Creates a new compliance job to check the status of Tweet or user IDs. Upload IDs as a plain text file (one ID per line) to the upload_url received in the response.

Parameters:

- `type` (`string`, required): Type of compliance job
- `resumable` (`boolean`, optional): Whether the job should be resumable

### `twitter_compliance_job_get`

Retrieves status, download/upload URLs, and other details for an existing Twitter compliance job specified by its unique ID.

Parameters:

- `id` (`string`, required): Compliance job ID

### `twitter_compliance_jobs_list`

Returns a list of recent compliance jobs, filtered by type (tweets or users) and optionally by status.

Parameters:

- `type` (`string`, required): Type of compliance jobs to list
- `status` (`string`, optional): Filter by job status

### `twitter_dm_conversation_events_get`

Fetches Direct Message (DM) events for a one-on-one conversation with a specified participant ID, ordered chronologically newest to oldest. Does not support group DMs.

Parameters:

- `participant_id` (`string`, required): User ID of the DM conversation participant
- `dm_event_fields` (`string`, optional): Comma-separated DM event fields
- `event_types` (`string`, optional): Filter by event types
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page

### `twitter_dm_conversation_retrieve`

Retrieves Direct Message (DM) events for a specific conversation ID on Twitter. Useful for analyzing messages and participant activities.

Parameters:

- `dm_conversation_id` (`string`, required): DM conversation ID
- `dm_event_fields` (`string`, optional): Comma-separated DM event fields
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page

### `twitter_dm_conversation_send`

Sends a message with optional text and/or media attachments (using pre-uploaded media_ids) to a specified Twitter Direct Message conversation.

Parameters:

- `dm_conversation_id` (`string`, required): DM conversation ID to send the message to
- `media_id` (`string`, optional): Pre-uploaded media ID to attach
- `text` (`string`, optional): Message text

### `twitter_dm_delete`

Permanently deletes a specific Twitter Direct Message (DM) event using its event_id, if the authenticated user sent it. This action is irreversible and does not delete entire conversations.

Parameters:

- `event_id` (`string`, required): ID of the DM event to delete
- `participant_id` (`string`, required): User ID of the DM conversation participant

### `twitter_dm_event_get`

Fetches a specific Direct Message (DM) event by its unique ID. Allows optional expansion of related data like users or tweets.

Parameters:

- `event_id` (`string`, required): DM event ID
- `dm_event_fields` (`string`, optional): Comma-separated DM event fields
- `expansions` (`string`, optional): Comma-separated expansions

### `twitter_dm_events_get`

Returns recent Direct Message events for the authenticated user, such as new messages or changes in conversation participants.

Parameters:

- `dm_event_fields` (`string`, optional): Comma-separated DM event fields
- `event_types` (`string`, optional): Filter by event types
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page

### `twitter_dm_group_conversation_create`

Creates a new group Direct Message (DM) conversation on Twitter. The conversation_type must be 'Group'. Include participant_ids and an initial message with text and optional media attachments using media_id (not media_url). Media must be uploaded first.

Parameters:

- `message_text` (`string`, required): Initial message text
- `participant_ids` (`array`, required): List of Twitter user IDs to include
- `message_media_ids` (`array`, optional): Media IDs to attach to initial message

### `twitter_dm_send`

Sends a new Direct Message with text and/or media (media_id for attachments must be pre-uploaded) to a specified Twitter user. Creates a new DM and does not modify existing messages.

Parameters:

- `participant_id` (`string`, required): Twitter user ID of the DM recipient
- `media_id` (`string`, optional): Pre-uploaded media ID to attach
- `text` (`string`, optional): Message text

### `twitter_followers_get`

Retrieves a list of users who follow a specified public Twitter user ID.

Parameters:

- `id` (`string`, required): Twitter user ID to get followers for
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-1000)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_following_get`

Retrieves users followed by a specific Twitter user, allowing pagination and customization of returned user and tweet data fields via expansions.

Parameters:

- `id` (`string`, required): Twitter user ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-1000)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_full_archive_search`

Searches the full archive of public Tweets from March 2006 onwards. Use start_time and end_time together for a defined time window. Requires Academic Research access.

Parameters:

- `query` (`string`, required): Search query using X search syntax
- `end_time` (`string`, optional): ISO 8601 end time
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (10-500)
- `next_token` (`string`, optional): Next page token
- `since_id` (`string`, optional): Minimum tweet ID
- `start_time` (`string`, optional): ISO 8601 start time e.g. 2021-01-01T00:00:00Z
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `until_id` (`string`, optional): Maximum tweet ID
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_full_archive_search_counts`

Returns a count of Tweets from the full archive that match a specified query, aggregated by day, hour, or minute. start_time must be before end_time if both are provided. since_id/until_id cannot be used with start_time/end_time.

Parameters:

- `query` (`string`, required): Search query
- `end_time` (`string`, optional): ISO 8601 end time
- `granularity` (`string`, optional): Aggregation granularity
- `next_token` (`string`, optional): Next page token
- `since_id` (`string`, optional): Minimum tweet ID
- `start_time` (`string`, optional): ISO 8601 start time
- `until_id` (`string`, optional): Maximum tweet ID

### `twitter_list_create`

Creates a new, empty List on X (formerly Twitter). The provided name must be unique for the authenticated user. Accounts are added separately.

Parameters:

- `name` (`string`, required): Unique name for the new list
- `description` (`string`, optional): Description of the list
- `private` (`boolean`, optional): Whether the list should be private

### `twitter_list_delete`

Permanently deletes a specified Twitter List using its ID. The list must be owned by the authenticated user. This action is irreversible.

Parameters:

- `list_id` (`string`, required): ID of the Twitter List to delete

### `twitter_list_follow`

Allows the authenticated user to follow a specific Twitter List they are permitted to access, subscribing them to the list's timeline. This does not automatically follow individual list members.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `list_id` (`string`, required): ID of the list to follow

### `twitter_list_followers_get`

Fetches a list of users who follow a specific Twitter List, identified by its ID. Ensure the authenticated user has access if the list is private.

Parameters:

- `id` (`string`, required): Twitter List ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_list_lookup`

Returns metadata for a specific Twitter List, identified by its ID. Does not return list members. Can expand the owner's User object via the expansions parameter.

Parameters:

- `id` (`string`, required): Twitter List ID
- `expansions` (`string`, optional): Comma-separated expansions
- `list_fields` (`string`, optional): Comma-separated list fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_list_member_add`

Adds a user to a specified Twitter List. The list must be owned by the authenticated user.

Parameters:

- `list_id` (`string`, required): ID of the Twitter List
- `user_id` (`string`, required): ID of the user to add

### `twitter_list_member_remove`

Removes a user from a Twitter List. The response is_member field will be false if removal was successful or the user was not a member. The updated list of members is not returned.

Parameters:

- `id` (`string`, required): Twitter List ID
- `user_id` (`string`, required): ID of the user to remove from the list

### `twitter_list_members_get`

Fetches members of a specific Twitter List, identified by its unique ID.

Parameters:

- `id` (`string`, required): Twitter List ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_list_pin`

Pins a specified List to the authenticated user's profile. The List must exist, the user must have access rights, and the pin limit (typically 5 Lists) must not be exceeded.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `list_id` (`string`, required): ID of the list to pin

### `twitter_list_timeline_get`

Fetches the most recent Tweets posted by members of a specified Twitter List.

Parameters:

- `id` (`string`, required): Twitter List ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_list_unfollow`

Enables a user to unfollow a specific Twitter List, which removes its tweets from their timeline and stops related notifications. Reports following: false on success, even if the user was not initially following the list.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `list_id` (`string`, required): ID of the list to unfollow

### `twitter_list_unpin`

Unpins a List from the authenticated user's profile. The user ID is automatically retrieved if not provided.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `list_id` (`string`, required): ID of the list to unpin

### `twitter_list_update`

Updates an existing Twitter List's name, description, or privacy status. Requires the List ID and at least one mutable property.

Parameters:

- `id` (`string`, required): Twitter List ID to update
- `description` (`string`, optional): New description
- `name` (`string`, optional): New name for the list
- `private` (`boolean`, optional): Set to true to make private, false for public

### `twitter_media_upload`

Uploads media (images only) to X/Twitter using the v2 API. Only supports images (tweet_image, dm_image) and subtitle files. For GIFs, videos, or any file larger than ~5 MB, use twitter_media_upload_large instead.

Parameters:

- `media` (`string`, required): Base64-encoded image data
- `media_type` (`string`, required): MIME type, e.g. image/jpeg or image/png
- `media_category` (`string`, optional): Media category for use context

### `twitter_media_upload_append`

Appends a data chunk to an ongoing media upload session on X/Twitter. Use during chunked media uploads to append each segment of media data in sequence.

Parameters:

- `media_data` (`string`, required): Base64-encoded chunk data
- `media_id` (`string`, required): Media ID from the INIT step
- `segment_index` (`integer`, required): Zero-based index of the chunk segment

### `twitter_media_upload_base64`

Uploads media to X/Twitter using base64-encoded data. Use when you have media content as a base64 string. Only supports images and subtitle files. For videos or GIFs, use twitter_media_upload_large.

Parameters:

- `media_data` (`string`, required): Base64-encoded media data
- `media_type` (`string`, required): MIME type, e.g. image/jpeg
- `media_category` (`string`, optional): Media category for use context

### `twitter_media_upload_init`

Initializes a media upload session for X/Twitter. Returns a media_id for subsequent APPEND and FINALIZE commands. Required for uploading large files or when using the chunked upload workflow.

Parameters:

- `media_type` (`string`, required): MIME type, e.g. video/mp4 or image/gif
- `total_bytes` (`integer`, required): Total size of the media file in bytes
- `additional_owners` (`string`, optional): Comma-separated user IDs to also own the media
- `media_category` (`string`, optional): Media category for use context

### `twitter_media_upload_large`

Uploads media files to X/Twitter. Automatically uses chunked upload for GIFs, videos, and images larger than 5 MB. Use for videos, GIFs, or any file larger than 5 MB.

Parameters:

- `media_data` (`string`, required): Base64-encoded media file data
- `media_type` (`string`, required): MIME type, e.g. video/mp4 or image/gif
- `total_bytes` (`integer`, required): Total size of the file in bytes
- `additional_owners` (`string`, optional): Comma-separated user IDs to also own the media
- `media_category` (`string`, optional): Media category for use context

### `twitter_media_upload_status_get`

Gets the status of a media upload for X/Twitter. Use to check the processing status of uploaded media, especially for videos and GIFs. Only needed if the FINALIZE command returned processing_info.

Parameters:

- `media_id` (`string`, required): Media ID from the upload INIT step

### `twitter_muted_users_get`

Returns user objects muted by the X user identified by the id path parameter.

Parameters:

- `id` (`string`, required): Twitter user ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-1000)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_openapi_spec_get`

Fetches the OpenAPI specification (JSON) for Twitter's API v2. Used to programmatically understand the API's structure for developing client libraries or tools.

### `twitter_post_analytics_get`

Retrieves analytics data for specified Posts within a defined time range. Returns engagement metrics, impressions, and other analytics. Requires OAuth 2.0 with tweet.read and users.read scopes.

Parameters:

- `end_time` (`string`, required): ISO 8601 end time
- `start_time` (`string`, required): ISO 8601 start time
- `tweet_ids` (`string`, required): Comma-separated list of Tweet IDs

### `twitter_post_create`

Creates a Tweet on Twitter. The `text` field is required unless card_uri, media_media_ids, poll_options, or quote_tweet_id is provided. Supports media, polls, geo, and reply targeting.

Parameters:

- `geo_place_id` (`string`, optional): Place ID for geo tag
- `media_media_ids` (`array`, optional): Media IDs to attach
- `poll_duration_minutes` (`integer`, optional): Duration of poll in minutes
- `poll_options` (`array`, optional): Up to 4 poll options
- `quote_tweet_id` (`string`, optional): ID of the tweet to quote
- `reply_in_reply_to_tweet_id` (`string`, optional): ID of the tweet to reply to
- `text` (`string`, optional): Text content of the tweet

### `twitter_post_delete`

Irreversibly deletes a specific Tweet by its ID. The Tweet may persist in third-party caches after deletion.

Parameters:

- `id` (`string`, required): ID of the Tweet to delete

### `twitter_post_like`

Allows the authenticated user to like a specific, accessible Tweet. The authenticated user's ID is automatically determined from the OAuth token — you only need to provide the tweet_id.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `tweet_id` (`string`, required): ID of the Tweet to like

### `twitter_post_likers_get`

Retrieves users who have liked the Post (Tweet) identified by the provided ID.

Parameters:

- `id` (`string`, required): Tweet ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_post_lookup`

Fetches comprehensive details for a single Tweet by its unique ID, provided the Tweet exists and is accessible.

Parameters:

- `id` (`string`, required): Tweet ID
- `expansions` (`string`, optional): Comma-separated expansions
- `media_fields` (`string`, optional): Comma-separated media fields
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_post_quotes_get`

Retrieves Tweets that quote a specified Tweet. Requires a valid Tweet ID.

Parameters:

- `id` (`string`, required): Tweet ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `tweet_fields` (`string`, optional): Comma-separated tweet fields

### `twitter_post_retweet`

Retweets a Tweet for the authenticated user. The user ID is automatically fetched from the authenticated session — you only need to provide the tweet_id.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `tweet_id` (`string`, required): ID of the Tweet to retweet

### `twitter_post_retweeters_get`

Retrieves users who publicly retweeted a specified public Post ID, excluding Quote Tweets and retweets from private accounts.

Parameters:

- `id` (`string`, required): Tweet ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_post_retweets_get`

Retrieves Tweets that Retweeted a specified public or authenticated-user-accessible Tweet ID. Optionally customize the response with fields and expansions.

Parameters:

- `id` (`string`, required): Tweet ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `tweet_fields` (`string`, optional): Comma-separated tweet fields

### `twitter_post_unlike`

Allows an authenticated user to remove their like from a specific post. The action is idempotent and completes successfully even if the post was not liked.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `tweet_id` (`string`, required): ID of the Tweet to unlike

### `twitter_post_unretweet`

Removes a user's retweet of a specified Post, if the user had previously retweeted it.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `source_tweet_id` (`string`, required): ID of the Tweet to unretweet

### `twitter_posts_lookup`

Retrieves detailed information for one or more Posts (Tweets) identified by their unique IDs. Allows selection of specific fields and expansions.

Parameters:

- `ids` (`string`, required): Comma-separated list of Tweet IDs (up to 100)
- `expansions` (`string`, optional): Comma-separated expansions
- `media_fields` (`string`, optional): Comma-separated media fields
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_recent_search`

Searches Tweets from the last 7 days matching a query using X's search syntax. Ideal for real-time analysis, trend monitoring, or retrieving posts from specific users (e.g., from:username). Note: impression_count returns 0 for other users' tweets — use retweet_count, like_count, or quote_count for engagement filtering instead.

Parameters:

- `query` (`string`, required): Search query using X search syntax, e.g. from:username -is:retweet
- `end_time` (`string`, optional): ISO 8601 end time
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (10-100)
- `media_fields` (`string`, optional): Comma-separated media fields
- `next_token` (`string`, optional): Next page token
- `since_id` (`string`, optional): Minimum tweet ID
- `start_time` (`string`, optional): ISO 8601 start time
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `until_id` (`string`, optional): Maximum tweet ID
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_recent_tweet_counts`

Retrieves the count of Tweets matching a specified search query within the last 7 days, aggregated by 'minute', 'hour', or 'day'.

Parameters:

- `query` (`string`, required): Search query
- `end_time` (`string`, optional): ISO 8601 end time
- `granularity` (`string`, optional): Aggregation granularity
- `since_id` (`string`, optional): Minimum tweet ID
- `start_time` (`string`, optional): ISO 8601 start time
- `until_id` (`string`, optional): Maximum tweet ID

### `twitter_reply_visibility_set`

Hides or unhides an existing reply Tweet. Allows the authenticated user to hide or unhide a reply to a conversation they own. You can only hide replies to posts you authored. Requires tweet.moderate.write OAuth scope.

Parameters:

- `hidden` (`boolean`, required): true to hide, false to unhide
- `tweet_id` (`string`, required): ID of the reply tweet to hide or unhide

### `twitter_space_get`

Retrieves details for a Twitter Space by its ID, allowing for customization and expansion of related data.

Parameters:

- `id` (`string`, required): Twitter Space ID
- `expansions` (`string`, optional): Comma-separated expansions
- `space_fields` (`string`, optional): Comma-separated space fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_space_posts_get`

Retrieves Tweets that were shared/posted during a Twitter Space broadcast. Returns Tweets that participants explicitly shared during the Space session, NOT audio transcripts. Most Spaces have zero associated Tweets — empty results are normal.

Parameters:

- `id` (`string`, required): Twitter Space ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `tweet_fields` (`string`, optional): Comma-separated tweet fields

### `twitter_space_ticket_buyers_get`

Retrieves a list of users who purchased tickets for a specific, valid, and ticketed Twitter Space.

Parameters:

- `id` (`string`, required): Twitter Space ID
- `expansions` (`string`, optional): Comma-separated expansions
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_spaces_by_creator_get`

Retrieves Twitter Spaces created by a list of specified User IDs, with options to customize returned data fields.

Parameters:

- `user_ids` (`string`, required): Comma-separated list of user IDs to get spaces for
- `expansions` (`string`, optional): Comma-separated expansions
- `space_fields` (`string`, optional): Comma-separated space fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_spaces_get`

Fetches detailed information for one or more Twitter Spaces (live, scheduled, or ended) by their unique IDs. At least one Space ID must be provided.

Parameters:

- `ids` (`string`, required): Comma-separated list of Space IDs
- `expansions` (`string`, optional): Comma-separated expansions
- `space_fields` (`string`, optional): Comma-separated space fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_spaces_search`

Searches for Twitter Spaces by a textual query. Optionally filter by state (live, scheduled, all) to discover audio conversations.

Parameters:

- `query` (`string`, required): Text to search for in Space titles
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `space_fields` (`string`, optional): Comma-separated space fields
- `state` (`string`, optional): Filter by space state

### `twitter_tweet_label_stream`

Stream real-time Tweet label events (apply/remove). Requires Enterprise access and App-Only OAuth 2.0 auth. Returns PublicTweetNotice or PublicTweetUnviewable events. 403 errors indicate missing Enterprise access or wrong auth type.

Parameters:

- `backfill_minutes` (`integer`, optional): Minutes of backfill to stream on reconnect (0-5)
- `expansions` (`string`, optional): Comma-separated expansions
- `tweet_fields` (`string`, optional): Comma-separated tweet fields

### `twitter_tweet_usage_get`

Fetches Tweet usage statistics for a Project (e.g., consumption, caps, daily breakdowns for Project and Client Apps) to monitor API limits. Data can be retrieved for 1 to 90 days.

Parameters:

- `days` (`integer`, optional): Number of days to retrieve usage data for, default 7
- `usage_fields` (`string`, optional): Comma-separated usage fields to include

### `twitter_user_follow`

Allows an authenticated user to follow another user. Results in a pending request if the target user's tweets are protected.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `target_user_id` (`string`, required): ID of the user to follow

### `twitter_user_followed_lists_get`

Returns metadata (not Tweets) for lists a specific Twitter user follows. Optionally includes expanded owner details.

Parameters:

- `id` (`string`, required): Twitter user ID
- `expansions` (`string`, optional): Comma-separated expansions
- `list_fields` (`string`, optional): Comma-separated list fields
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_user_liked_tweets_get`

Retrieves Tweets liked by a specified Twitter user, provided their liked tweets are public or accessible.

Parameters:

- `id` (`string`, required): Twitter user ID
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (5-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_user_list_memberships_get`

Retrieves all Twitter Lists a specified user is a member of, including public Lists and private Lists the authenticated user is authorized to view.

Parameters:

- `id` (`string`, required): Twitter user ID
- `expansions` (`string`, optional): Comma-separated expansions
- `list_fields` (`string`, optional): Comma-separated list fields
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_user_lookup`

Retrieves detailed public information for a Twitter user by their ID. Optionally expand related data (e.g., pinned tweets) and specify particular user or tweet fields to return.

Parameters:

- `id` (`string`, required): Twitter user ID
- `expansions` (`string`, optional): Comma-separated expansions
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_user_lookup_by_username`

Fetches public profile information for a valid and existing Twitter user by their username. Optionally expands related data like pinned Tweets. Results may be limited for protected profiles not followed by the authenticated user.

Parameters:

- `username` (`string`, required): Twitter username without the @ symbol, e.g. elonmusk
- `expansions` (`string`, optional): Comma-separated expansions
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_user_me`

Returns profile information for the currently authenticated X user. Use this to get the authenticated user's ID before calling endpoints that require it.

Parameters:

- `expansions` (`string`, optional): Comma-separated expansions
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields to return, e.g. created_at,description,public_metrics

### `twitter_user_mute`

Mutes a target user on behalf of an authenticated user, preventing the target's Tweets and Retweets from appearing in the authenticated user's home timeline without notifying the target.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `target_user_id` (`string`, required): ID of the user to mute

### `twitter_user_owned_lists_get`

Retrieves Lists created (owned) by a specific Twitter user, not Lists they follow or are subscribed to.

Parameters:

- `id` (`string`, required): Twitter user ID
- `expansions` (`string`, optional): Comma-separated expansions
- `list_fields` (`string`, optional): Comma-separated list fields
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_user_pinned_lists_get`

Retrieves the Lists a specific, existing Twitter user has pinned to their profile to highlight them.

Parameters:

- `id` (`string`, required): Twitter user ID
- `expansions` (`string`, optional): Comma-separated expansions
- `list_fields` (`string`, optional): Comma-separated list fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_user_timeline_get`

Retrieves the home timeline (reverse chronological feed) for the authenticated Twitter user. Returns tweets from accounts the user follows and the user's own tweets. CRITICAL: The id parameter MUST be the authenticated user's own numeric Twitter user ID. Use twitter_user_me to get your ID first. Cannot fetch another user's home timeline.

Parameters:

- `id` (`string`, required): Authenticated user's own numeric Twitter ID — must be your own ID
- `exclude` (`string`, optional): Comma-separated types to exclude: retweets,replies
- `expansions` (`string`, optional): Comma-separated expansions
- `max_results` (`integer`, optional): Max results per page (1-100)
- `pagination_token` (`string`, optional): Pagination token for next page
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_user_unfollow`

Allows the authenticated user to unfollow an existing Twitter user, which removes the follow relationship. The source user ID is automatically determined from the authenticated session.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `target_user_id` (`string`, required): ID of the user to unfollow

### `twitter_user_unmute`

Unmutes a target user for the authenticated user, allowing them to see Tweets and notifications from the target user again. The source_user_id is automatically populated from the authenticated user's credentials.

Parameters:

- `id` (`string`, required): Authenticated user's Twitter ID
- `target_user_id` (`string`, required): ID of the user to unmute

### `twitter_users_lookup`

Retrieves detailed information for specified X (formerly Twitter) user IDs. Optionally customize returned fields and expand related entities like pinned tweets.

Parameters:

- `ids` (`string`, required): Comma-separated list of Twitter user IDs (up to 100)
- `expansions` (`string`, optional): Comma-separated expansions
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields

### `twitter_users_lookup_by_username`

Retrieves detailed information for 1 to 100 Twitter users by their usernames (each 1-15 alphanumeric characters/underscores). Allows customizable user/tweet fields and expansion of related data like pinned tweets.

Parameters:

- `usernames` (`string`, required): Comma-separated list of Twitter usernames without @ symbols (up to 100)
- `expansions` (`string`, optional): Comma-separated expansions
- `tweet_fields` (`string`, optional): Comma-separated tweet fields
- `user_fields` (`string`, optional): Comma-separated user fields


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
