Sotwe APIsotwe.com ↗
Access public Twitter/X user tweets, profile info, and full tweet details including engagement metrics via the Sotwe API. Cursor-based pagination included.
What is the Sotwe API?
The Sotwe API provides 2 endpoints for retrieving public Twitter/X content: get_user_tweets returns up to 20 tweets per page along with profile data for any given screen name, while get_tweet fetches full details for a single tweet by numeric ID. Response fields cover engagement counts, media entities, language, view counts, and author metadata, making it straightforward to pull structured Twitter/X data without direct API access.
curl -X GET 'https://api.parse.bot/scraper/5621419b-6b10-42e4-8d8f-19cecd0530db/get_user_tweets?username=meronpai2012' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace sotwe-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Sotwe SDK — browse a user's tweets, then fetch full detail."""
from parse_apis.sotwe_com_api import Sotwe, TweetNotFound
client = Sotwe()
# List recent tweets for a user, capped at 5 items total.
for tweet in client.tweet_summaries.list(username="meronpai2012", limit=5):
print(tweet.id, tweet.text[:60], f"♥{tweet.favorite_count}")
# Drill into the first tweet's full detail (includes author profile).
summary = client.tweet_summaries.list(username="meronpai2012", limit=1).first()
if summary is not None:
detail = summary.details()
print(detail.user.name, f"@{detail.user.screen_name}", f"{detail.user.follower_count} followers")
print(detail.text, f"views={detail.view_count}")
# Fetch the same tweet by ID through the root accessor.
try:
same = client.tweets.get(id=summary.id)
print(same.id, same.favorite_count, same.retweet_count)
except TweetNotFound:
print("tweet was deleted")
print("exercised: tweet_summaries.list / details / tweets.get")
Retrieve a user's tweets by screen name, with optional cursor-based pagination. Returns up to 20 tweets per page, user profile info on the first page, and a next_cursor for fetching subsequent pages. Pass the returned next_cursor as the after parameter to load more tweets.
| Param | Type | Description |
|---|---|---|
| after | string | Pagination cursor from a previous response's next_cursor field. Omit for the first page. |
| usernamerequired | string | Twitter/X screen name (handle) of the user, without the @ prefix. |
{
"type": "object",
"fields": {
"tweets": "Array of tweet objects with id, text, engagement counts, media entities, and metadata",
"username": "The screen name queried",
"user_info": "User profile object (present on first page only) with name, followerCount, postCount, etc.",
"next_cursor": "Cursor string for fetching the next page, or null if no more results"
},
"sample": {
"data": {
"tweets": [
{
"id": "2084883550852284610",
"lang": "in",
"text": "https://t.co/xO29A8zHwg\nKalau kalian gimana",
"pinned": false,
"createdAt": 1785909948000,
"truncated": false,
"viewCount": 24826,
"quoteCount": 0,
"replyCount": 0,
"ibookmarked": false,
"retweetCount": 28,
"bookmarkCount": 110,
"favoriteCount": 195,
"mediaEntities": [],
"possiblySensitive": true
}
],
"username": "meronpai2012",
"user_info": {
"id": "611550934",
"name": "meron",
"verified": false,
"postCount": 456,
"screenName": "meronpai2012",
"followerCount": 5140,
"followingCount": 13
},
"next_cursor": "DAAHCgABHQRWEMg__-wLAAIAAAATMjA4Mzg4MjYyNzI1NDQ0MDQ0MQgAAwAAAAIAAA"
},
"status": "success"
}
}About the Sotwe API
Endpoints Overview
The Sotwe API exposes two GET endpoints focused on public Twitter/X data. get_user_tweets accepts a required username parameter (the handle without @) and returns an array of tweet objects alongside a next_cursor string for pagination. The first page response also includes a user_info object with fields like name, followerCount, and postCount. Subsequent pages are fetched by passing the returned next_cursor value as the after parameter.
Tweet Detail Fields
get_tweet takes a numeric tweet_id — obtainable from get_user_tweets results — and returns a single tweet's full data. The response includes text, lang, createdAt (Unix timestamp in milliseconds), and a complete set of engagement metrics: viewCount, quoteCount, replyCount, retweetCount, and bookmarkCount. It also returns a user object on the tweet itself, covering the author's name, screenName, and followerCount.
Pagination Behavior
Pagination in get_user_tweets is cursor-based. Each response carries a next_cursor field. Pass that value as after on the next request to retrieve the following batch of up to 20 tweets. When next_cursor is null, there are no further results for that user. User profile data (user_info) only appears on the first page — not on paginated continuations.
Data Scope
Both endpoints cover publicly accessible Twitter/X content. The data reflects the public-facing state of tweets and profiles: deleted tweets, protected accounts, and private interactions are not accessible. Media entities are included in the tweet objects returned by get_user_tweets, giving access to attached image or video metadata alongside the tweet text.
The Sotwe API is a managed, monitored endpoint for sotwe.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sotwe.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official sotwe.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Archive a public Twitter/X account's tweet history by walking pages with the next_cursor parameter
- Track engagement trends over time using retweetCount, replyCount, viewCount, and quoteCount per tweet
- Build a user profile card using followerCount, postCount, and name from the user_info object
- Detect the language distribution of a user's tweets using the lang field from get_tweet
- Monitor bookmark and quote count growth for specific tweet IDs using get_tweet
- Populate a content feed with tweet text and media entities from get_user_tweets results
- Cross-reference tweet IDs from a list against full engagement metrics via get_tweet
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Twitter/X have an official developer API?+
Does get_user_tweets return profile data on every page?+
user_info object — which includes fields like name, followerCount, and postCount — is only present in the first page response. Paginated requests using the after parameter return tweet arrays and a new next_cursor, but not the profile block again. Store user_info from the first call if you need it across pages.Does the API return replies, retweets, or quoted tweets separately from original tweets?+
get_user_tweets endpoint returns the tweets visible on a user's public timeline and includes metadata such as quoteCount and retweetCount per tweet. Filtering by tweet type — isolating only original posts, only replies, or only retweets — is not currently a supported parameter. The API covers timeline retrieval and single tweet detail. You can fork it on Parse and revise to add a type-filter parameter for that endpoint.Are tweets from protected or suspended accounts accessible?+
get_user_tweets response.Can I retrieve a user's followers or following list through this API?+
user_info object does include followerCount as a scalar, but individual follower identities are not returned. You can fork it on Parse and revise to add a followers or following list endpoint.