Twitter / X (Bearer Token)

Live

BEARER TOKEN

SOCIAL

Communication

Twitter / X (Bearer Token) connects agents to public timelines and search with app-only auth, for read workloads that should not depend on any one person's grant.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Twitter / X (Bearer Token)
agent · Acme Q3
Run
Track mentions of our category this week.
S
twitterbearer_search_recent_tweets
94ms
Listening agent
412 posts across the category. Volume up 18%, three accounts driving a third of it.
Sources: 412 posts, last 7 days
twitterbearer
412 posts
18:29
Message Claude...

Tools your agent reaches for on Twitter / X, scoped per tenant.

CALL ANY TOOL
Search recent posts, read timelines and profiles, and pull engagement data with an app-only bearer token, no per-user grant required.
twitterbearer_activity_subscription_create
Create activity subscription
Creates a subscription for a single X activity event type, scoped to exactly one of a user (filter_user_id) or a keyword (filter_keyword) - Twitter rejects requests providing neither or both - delivered to a registered webhook. OAuth2 user-context tokens must hold the scope matching the requested event_type: dm.read for chat.* and dm.* events, like.read for like.* events, mute.read for mute.* events, block.read for block.* events, and tweet.read for all other event types. Mute and block subscriptions are actor-only.
Parameters
Name
Type
Required
Description
event_type
string
Required
Activity event type in dot notation
filter_direction
string
Optional
Optional direction filter for directional events. Not supported for mute.* or block.* events.
filter_keyword
string
Optional
Optional keyword filter
filter_user_id
string
Optional
User the subscription is scoped to. For mute.* and block.* events, this must be the authenticated source user.
tag
string
Optional
Optional caller-defined tag
webhook_id
string
Optional
Webhook to deliver the subscription events to
twitterbearer_activity_subscription_delete
Delete activity subscription
twitterbearer_activity_subscriptions_list
List activity subscriptions
twitterbearer_community_get
Get community
twitterbearer_compliance_job_get
Get compliance job
twitterbearer_compliance_jobs_list
List compliance jobs
twitterbearer_following_get
Get following
twitterbearer_full_archive_search
Search full archive
twitterbearer_full_archive_search_counts
Full archive search counts
twitterbearer_likes_compliance_stream
Likes compliance stream
twitterbearer_list_followers_get
Get list followers
twitterbearer_list_members_get
Get list members
twitterbearer_list_timeline_get
Get list timeline
twitterbearer_media_batch_lookup
Media batch lookup
twitterbearer_openapi_spec_get
Get openapi spec
twitterbearer_post_lookup
Post lookup
twitterbearer_post_retweeters_get
Get post retweeters
twitterbearer_post_retweets_get
Get post retweets
twitterbearer_posts_lookup
Posts lookup
twitterbearer_recent_search
Search recent
twitterbearer_recent_tweet_counts
Recent tweet counts
twitterbearer_space_posts_get
Get space posts
twitterbearer_spaces_by_creator_get
Get spaces by creator
twitterbearer_tweet_usage_get
Get tweet usage
twitterbearer_tweets_compliance_stream
Tweets compliance stream
twitterbearer_user_followed_lists_get
Get user followed lists
twitterbearer_user_lookup
User lookup
twitterbearer_user_owned_lists_get
Get user owned lists
twitterbearer_users_compliance_stream
Users compliance stream
twitterbearer_users_lookup
Users lookup

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Twitter / X (Bearer Token) tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["twitterbearer"], toolNames: [
    "twitterbearer_activity_subscription_create",
    "twitterbearer_activity_subscription_delete",
    "twitterbearer_activity_subscriptions_list"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Is the Salesforce sync healthy?" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["twitterbearer"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Which data sources are connected?" }],
  tools,
});

// Execute the tool call with the user's vaulted Twitter / X (Bearer Token) credential
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["twitterbearer"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Pull open Zendesk tickets created this week." }],
  tools,
});

// Tool call runs with the user's vaulted Twitter / X (Bearer Token) credential
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["twitterbearer"] }, pageSize: 100,
});

const agent = new Agent({
  name: "twitterbearer_agent",
  model: "gemini-2.5-pro",
  instruction: "Work with Twitter / X (Bearer Token) for the signed-in user.",
  tools,
});

await agent.run("What auth does the Shopify connector need?");
Try these prompts
Paste any prompt into your agent to get started.
Monitoring
Copy the prompt
Copied
Track mentions of our category this week.
Copy the prompt
Copied
Which accounts post most about this topic?
Copy the prompt
Copied
Show me the volume trend for this hashtag.
Research
Copy the prompt
Copied
Pull the recent posts from this account.
Copy the prompt
Copied
Get the profile and follower count for these handles.
Copy the prompt
Copied
Find the most engaged posts about our competitor.
Lists
Copy the prompt
Copied
List the members of this public list.
Copy the prompt
Copied
Get the details for this community.
Copy the prompt
Copied
Show me who this account follows.
SEE HOW AUTH WORKS
Your team connects one bearer token. It stays vaulted per tenant, every call is scope checked, and every read is logged.
1
Authorize
Your user connects
Twitter / X (Bearer Token)
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Twitter / X (Bearer Token)
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Twitter / X (Bearer Token)
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Twitter / X (Bearer Token)
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other connectors.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
GTM and RevOps Teams
Outbound prospecting agent
Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
GTM and RevOps Teams
CRM AI agent
Reads the Granola transcript after every call, extracts next steps and updates the HubSpot record, drafts the follow-up in Gmail, and confirms in Slack, all on the rep's own delegated OAuth.
Test other agents
See the same per-user auth pattern across other connectors.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Twitter / X (Bearer Token) token looks fine in a demo. In production every action looks like one service account, and you cannot tell who wired a source or ran a query. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Twitter / X (Bearer Token) today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
How is this different from the OAuth connector?
Bearer token is app-only: no user grant, 44 read-oriented tools, and nothing posts as a person. OAuth is user-delegated and reaches 92 tools including publishing. Use this one for listening workloads.
Can this connector post?
No. App-only auth does not carry a user context, so the write endpoints are not available. Use the OAuth connector when the agent needs to publish.
Why use this instead of OAuth for read workloads?
A listening agent that runs on a schedule should not break when one person revokes their grant or leaves. A tenant-level token keeps that workload stable.
How many tools are available?
44 across search, timelines, users, lists, and communities. The page shows a representative 30.
How is the token stored?
Encrypted per tenant with AES-256, resolved at request time and never placed in LLM context.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""twitterbearer"": {
""url"": ""https://mcp.scalekit.com/twitterbearer"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.twitterbearer]
url = ""https://mcp.scalekit.com/twitterbearer""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""twitterbearer"": {
""url"": ""https://mcp.scalekit.com/twitterbearer"",
""type"": ""http""
}
}
}