starchild-ai-agent/official-skills

twitter

Twitter/X data: fetch tweets, search, user profiles, followers, replies, trends. Use for any x.com or twitter.com URL or lookup (e.g. summarize this tweet, recent posts by @vitalikbuterin, search $SOL min_faves:50).

All-time #1987 First seen Mar 14, 2026
8-week activity · all time api

Installation

$ npx skills add starchild-ai-agent/official-skills --skill twitter

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from starchild-ai-agent/official-skills · top by installs.

npx skills add starchild-ai-agent/official-skills

Browse all from starchild-ai-agent/official-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 26
Default branch main
Open issues 0
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

Version2.0.2
More metadata
starchild
{"emoji":"🐦","skillKey":"twitter","requires":{"env":["TWITTER_API_KEY"]}}

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 7,094 B
  • docs SUMMARY.md 230 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 7,825 installs

SKILL.md

Twitter / X (script-mode)

Read-only access to twitterapi.io endpoints. 13 functions covering tweets, users, followers, replies, threads, quotes, articles, and trends.

All requests go through sc-proxy via core.httpclient.proxiedget. The TWITTERAPIKEY env var is auto-injected server-side, no local key needed on the agent machine.

Script Usage

Standard invocation pattern:

python3 - <<'EOF'
import sys, json
sys.path.insert(0, "/data/workspace/skills/twitter")
from exports import twitter_user_info, twitter_user_tweets

profile = twitter_user_info(username="vitalikbuterin")
print(json.dumps(profile, indent=2))

recent = twitter_user_tweets(username="vitalikbuterin")
print(f"got {len(recent.get('tweets', []))} tweets")
EOF

Tweet ID extraction from URL: the last path segment of any x.com/{user}/status/{id} or twitter.com/{user}/status/{id} URL is the tweet ID. Pass it as a string (Python int will lose precision on long IDs).

Function Reference (signatures)

All 13 functions live in exports.py. Returns are dicts straight from twitterapi.io — keys vary per endpoint, inspect once before scripting.

Tweet endpoints

Function Description
twittersearchtweets(query, cursor=None) Advanced search. Operators: from:user, to:user, #tag, $cashtag, lang:en, has:media, has:links, is:reply, min_faves:N, since:YYYY-MM-DD, until:YYYY-MM-DD.
twittergettweets(tweet_ids) Fetch one or more tweets by ID. tweet_ids = list of strings (also accepts comma-string).
twittertweetreplies(tweet_id, cursor=None) Replies to a tweet.
twittertweetretweeters(tweet_id, cursor=None) Users who retweeted.
twittertweetthreadcontext(tweetid) Full thread context (parents + direct replies).
twittertweetquote(tweet_id, cursor=None) Quote tweets.
twittergetarticle(tweet_id) Long-form X article body.
twittergettrends(woeid=None, country=None, category=None, limit=None) Trending topics; all filters optional.

User endpoints

Function Description
twitteruserinfo(username) Profile: bio, follower/following counts, tweet count, verified.
twitterusertweets(username, cursor=None) User's recent tweets.
twitteruserfollowers(username, cursor=None) Follower list.
twitteruserfollowings(username, cursor=None) Accounts followed.
twittersearchusers(query, cursor=None) Search users by name/keyword.

username is the handle WITHOUT @ (e.g. "elonmusk", not "@elonmusk"). Pagination: when a response includes next_cursor, pass it back as cursor on the next call.

When to use this skill

  • ANY x.com/... or twitter.com/... URL → start here, NOT web_fetch

(Twitter blocks scrapers).

  • Single tweet detail → twittergettweets([tweet_id]).
  • "What's @user been posting?" → twitterusertweets.
  • KOL discovery / cashtag mentions → twittersearchtweets("$SOL min_faves:50").
  • Trending topics → twittergettrends.

Billing & cost control (READ before bulk/scheduled use)

twitterapi.io bills per item actually returned, not per request and NOT by any "max_results" you ask for. sc-proxy charges = returned-item-count × unit (tweets 45 / profiles 54 / followers 45 credits; 100k credits = $1; 3× upstream). Min 1 item per request.

The lasttweets / usertweets trap: the upstream /twitter/user/lasttweets endpoint has no page-size parameter — it always returns up to 20 tweets per page. There is no maxresults / pageSize lever, and twitterusertweets() does not accept one. So "I only need 5" still fetches and bills for ~20. Slicing the result client-side does NOT save money — the charge is already counted at the proxy from the upstream response.

⭐ Polling for "new tweets from account X" → use search, NOT last_tweets

This is the biggest, most common waste. twitterusertweets() (upstream lasttweets) has no page-size param and always bills a full ~20-tweet page every call, even when nothing new was posted. The official twitterapi.io guide recommends the advancedsearch endpoint instead, which our skill already exposes as twittersearchtweets():

# Cheap polling pattern — bills only the tweets actually in the window.
# When NO new tweet exists, the call is billed as 1 item (not 20).
import time
since = int(last_check_unix)
until = int(time.time())
q = f"from:{handle} include:nativeretweets since_time:{since} until_time:{until}"
res = twitter_search_tweets(q)   # queryType defaults to Latest

Official pricing (upstream; our proxy bills 3×):

  • tweets found → $0.00015 per returned tweet
  • no tweets found → $0.00015 for the whole call (vs last_tweets' ~20× that)

Per-call cost in our billing makes the difference obvious:

  • last_tweets → ~$0.009/call (20 tweets every time)
  • advanced_search empty window → ~$0.00045/call (1 item) — ~20× cheaper

Frequency vs monthly cost (single account, upstream): hourly $0.11 · 30min $0.22 · 15min $0.43 · 5min $1.30 · 1min $6.48.

Other cost levers

  • Use get_tweets([ids]) when IDs are known — pay only for those exact

tweets, not a 20-item page.

  • Followers/followings bill per returned profile (default page 200 → 200

billed). Only paginate as far as needed. For ID-only graph work use the bulk followers-IDs endpoint (lightweight).

  • Tighten search queries (minfaves, sincetime/until_time, lang) so fewer

pages are needed.

Note: twitterapi.io also sells a managed stream/webhook product. **We do NOT
subscribe to it** — do not use the /oapi/xuserstream/* or
/oapi/tweet_filter/* endpoints. For any account-monitoring need, the
advanced_search polling pattern above is the correct and only approach here.

Error handling

  • 402 Credits is not enough → upstream proxy credits exhausted; tell user

to top up. Don't retry.

  • 429 → rate limited; surface to user, don't auto-retry.
  • 404 user not found → suggest verifying the handle spelling.

Version Policy (hard rule)

This skill is script-mode (delivery: script). It does NOT register runtime tools — agent must read_file SKILL.md and call functions via bash + python3. The legacy tools.py / init.py files are kept for backward compatibility but are no longer the preferred entry point.

Bump rules:

  • Any signature change, env-var change, or sc-proxy contract change → MAJOR
  • New function added, response schema clarified → MINOR
  • Bug fix or doc-only change → PATCH