Card snapshot
readx.sh
·
2026-07-28 01:46:25 UTC
·
b53f180f95ba46c922509b3b7ccceb15160dbbce224a5a73152fed32b4f9cf66
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"protocolVersion": "0.3.0",
"name": "ReadX",
"description": "Read-only JSON API for X (Twitter) data \u2014 user profiles, timelines, tweets and conversations, edit history, search, Lists, followers/following/mentions, trending topics, Spaces metadata, long-form articles, and broadcasts. No signup or API key: every call is paid per request in USDC via the x402 protocol, so any x402-capable agent can pay and fetch directly.",
"url": "https://readx.sh/api/a2a/v1",
"preferredTransport": "HTTP+JSON",
"additionalInterfaces": [
{
"url": "https://readx.sh/api/a2a/v1",
"transport": "HTTP+JSON"
}
],
"provider": {
"organization": "ReadX",
"url": "https://readx.sh"
},
"version": "1.0.0",
"documentationUrl": "https://readx.sh/skill.md",
"capabilities": {
"streaming": false,
"pushNotifications": false,
"stateTransitionHistory": false
},
"defaultInputModes": [
"application/json"
],
"defaultOutputModes": [
"application/json"
],
"supportsAuthenticatedExtendedCard": false,
"skills": [
{
"id": "profile-lookup",
"name": "User Profile Lookup",
"description": "Look up an X user's profile: bio, follower/following counts, verification status, pinned tweet, and join date.",
"tags": [
"profile",
"user",
"bio"
],
"examples": [
"Get @jack's profile and follower count",
"What's the bio and verification status for @openai?"
],
"x-inputSchema": {
"username": "string, required \u2014 X handle without @"
}
},
{
"id": "user-info",
"name": "User Profile Info",
"description": "Look up an X user's profile info: id, name, bio, location, follower/following counts, and verification status.",
"tags": [
"profile",
"user",
"bio"
],
"examples": [
"What's @jack's follower count and bio?",
"Get profile info for @openai"
],
"x-inputSchema": {
"username": "string, required \u2014 X handle without @"
}
},
{
"id": "user-relations",
"name": "Followers, Following & Mentions",
"description": "Export a user's followers, following, web-view followers/following, verified-followers, mentions, media, or affiliates.",
"tags": [
"followers",
"following",
"social-graph",
"mentions",
"media"
],
"examples": [
"List the first page of accounts @jack follows",
"Get @openai's verified followers",
"Get tweets that mention @jack",
"Get @jack's media tweets"
],
"x-inputSchema": {
"username": "string, required",
"kind": "string, optional \u2014 one of followers | followers_web | following | following_web | verified_followers | mentions | media | affiliates (default: followers)",
"cursor": "string, optional \u2014 page cursor from a prior response's next_cursor"
}
},
{
"id": "timeline",
"name": "User Timeline",
"description": "Fetch a user's tweets, replies, or media-only timeline, paginated.",
"tags": [
"timeline",
"tweets"
],
"examples": [
"Get the latest tweets from @jack",
"Show @jack's replies-only timeline"
],
"x-inputSchema": {
"username": "string, required",
"variant": "string, optional \u2014 one of tweets | with_replies | with_media (default: tweets)",
"cursor": "string, optional \u2014 page cursor from a prior response's pagination.bottom"
}
},
{
"id": "tweet-lookup",
"name": "Tweet & Conversation Lookup",
"description": "Read a single tweet, its full conversation (replies), its edit history, or who retweeted it.",
"tags": [
"tweet",
"conversation",
"replies"
],
"examples": [
"Read tweet 20 on its own",
"Read tweet 20 from @jack with its conversation",
"Get the edit history for @jack's tweet 20"
],
"x-inputSchema": {
"id": "string, required \u2014 numeric tweet id",
"view": "string, optional \u2014 one of single | conversation | history | replies | retweeters (default: single)",
"username": "string, required when view is conversation or history",
"cursor": "string, optional \u2014 page cursor, for view=replies or view=retweeters"
}
},
{
"id": "search",
"name": "Tweet & User Search",
"description": "Search tweets or users by keyword.",
"tags": [
"search"
],
"examples": [
"Search tweets for 'typescript'",
"Search for users matching 'openai'"
],
"x-inputSchema": {
"q": "string, required \u2014 search query",
"kind": "string, optional \u2014 tweets | users (default: auto-detect from query)",
"product": "string, optional \u2014 tweet search product filter",
"cursor": "string, optional"
}
},
{
"id": "hashtag",
"name": "Hashtag Resolution",
"description": "Resolve a hashtag to its tweet search results.",
"tags": [
"hashtag",
"search"
],
"examples": [
"Look up tweets under #typescript"
],
"x-inputSchema": {
"tag": "string, required \u2014 hashtag, with or without the leading #"
}
},
{
"id": "lists",
"name": "X List Members",
"description": "Read the members of an X List by its numeric id.",
"tags": [
"lists"
],
"examples": [
"Get members of list 123"
],
"x-inputSchema": {
"id": "string, required \u2014 numeric list id",
"cursor": "string, optional \u2014 page cursor from a prior response's next_cursor"
}
},
{
"id": "trends",
"name": "Trending Topics",
"description": "Get trending topics for a location \u2014 worldwide by default, or filter by country name/ISO code or WOEID.",
"tags": [
"trends",
"trending"
],
"examples": [
"What's trending worldwide right now?",
"What's trending in the US?"
],
"x-inputSchema": {
"country": "string, optional \u2014 location name or ISO code, e.g. US, india, tokyo (default: worldwide)",
"woeid": "string, optional \u2014 numeric Yahoo WOEID; overrides country when both are given",
"count": "string, optional \u2014 cap the number of trends returned (up to 50)"
}
},
{
"id": "articles",
"name": "X Articles",
"description": "Read a long-form X article by its wrapper tweet id (public), or by entity id with an auth token (owner-only).",
"tags": [
"articles",
"long-form"
],
"examples": [
"Read the X article at tweet id 42"
],
"x-inputSchema": {
"id": "string, required \u2014 wrapper tweet id, or entity rest_id when authToken is set",
"authToken": "string, optional \u2014 owner auth token for entity-id lookups"
}
},
{
"id": "id-resolution",
"name": "Handle / User ID Resolution",
"description": "Resolve an @handle to its numeric user id, or a numeric user id back to a username.",
"tags": [
"utility",
"resolver"
],
"examples": [
"What's the numeric user id for @jack?"
],
"x-inputSchema": {
"username": "string, optional \u2014 resolves to a user id",
"userId": "string, optional \u2014 resolves to a username (provide exactly one of username/userId)"
}
},
{
"id": "spaces",
"name": "Space Info",
"description": "Fetch metadata for an X Space by id \u2014 title, host, state, listener counts, and whether audio is downloadable.",
"tags": [
"spaces",
"broadcast"
],
"examples": [
"Get Space 1vOxwrneqBqJB"
],
"x-inputSchema": {
"id": "string, required \u2014 Space id (the segment after /i/spaces/ in a Space URL)"
}
},
{
"id": "broadcasts",
"name": "Broadcasts",
"description": "Read metadata for an X broadcast (live audio/video) by id.",
"tags": [
"broadcast"
],
"examples": [
"Get broadcast abc123"
],
"x-inputSchema": {
"id": "string, required \u2014 broadcast id"
}
}
],
"x-invocation": "POST a Message to {url}/message:send with { \"message\": { \"role\": \"user\", \"parts\": [ { \"kind\": \"data\", \"data\": { \"skill\": \"<skill id>\", \"input\": { ... } } } ] } }. Returns a Task with status.state \"completed\" (result in artifacts[0].parts[0].data) or \"failed\" (reason in status.message). Fetch a past Task with GET {url}/tasks/{id} (retained 10 minutes). Every message:send call is paid per request \u2014 see x-payment-info.",
"x-payment-info": {
"price": {
"mode": "fixed",
"currency": "USD",
"amount": "0.010000"
},
"protocols": [
{
"x402": {
"networks": [
"base",
"solana"
]
}
}
],
"specUrl": "https://readx.sh/openapi.json"
}
}