TwitterAPIs Docs
API ReferenceUser Reads

Twitter User Timeline API | Get a User's Tweets

Page through a user's public timeline, cursor-paginated at roughly 20 tweets per call. The page mirrors the account's timeline as X returns it, so it contains original tweets, retweets, and the account's own replies. Each tweet carries is_retweet and is_reply, so filter client-side if you want original posts only. Cost: $0.0008 per call.

User Tweets pages through a profile's public timeline, cursor-paginated at roughly 20 tweets per call. The page is the account's timeline as X returns it, so it contains original tweets, retweets, and the account's own replies. Filter client-side on the is_retweet and is_reply flags if you only want original posts. Each page is one $0.0008 read with bearer auth.

GET
/user/tweets

Authorization

bearerAuth
AuthorizationBearer <token>

Pass your API key as a bearer token on every request: Authorization: Bearer <API_KEY>.

In: header

Query Parameters

username*string

Handle without the leading @.

user_id?string

Numeric user ID; provide either username or user_id.

cursor?string

Pagination cursor from a previous response.

count?integer

Accepted but not honoured on this endpoint: the upstream timeline page is fixed at roughly 20 tweets and raising count does not return more. Use cursor to read further back.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/user/tweets?username=naval&user_id=44196397&count=20"
{  "tweets": [    {      "id": "1759123456789012345",      "text": "Reading > scrolling.",      "created_at": "Tue Feb 20 14:02:11 +0000 2026",      "author": {        "id": "745273",        "username": "naval"      },      "favorite_count": 4821    }  ],  "next_cursor": "DAABCgABF..."}
{  "error": "bad_request",  "message": "Missing or malformed parameter. Fix the request before retrying."}
{  "error": "unauthorized",  "message": "The API key is missing, malformed, or revoked. Check the Authorization header."}
{  "error": "insufficient_credits",  "message": "Your balance is exhausted. Top up your credits to continue."}
{  "error": "not_found",  "message": "The resource does not exist, for example a deleted tweet or a private account."}
{  "error": "rate_limited",  "message": "Too many requests. Back off and retry with exponential backoff."}
{  "error": "server_error",  "message": "Something failed on our side. Retry with backoff; if it persists, contact support."}

Pricing

UnitPrice
Per call$0.0008
Per 1,000 calls$0.80
Per 1,000 records (~20 per call)~$0.04

Each timeline page is one $0.0008 read, so a deep backfill costs one call per page. Stop paging once you reach the date or count you need.

When to use

Use it to read an account's posting history, for example pulling a founder's last 200 tweets for analysis. Filter on is_retweet / is_reply if you want original posts only.

Pagination

This endpoint is cursor-paginated and returns roughly 20 records per call. Pass the next_cursor from each response back as the cursor parameter to read the next page. Stop when the records array comes back empty: follower-graph endpoints return a non-null cursor even on the final page, so the empty array is the only reliable stop signal. See Pagination for the full loop.

  • User Tweets and Replies: Fetch a user's timeline including their replies (same upstream timeline as User Tweets).
  • User Media: Page through a profile's media tweets (images and video).
  • User Mentions: Fetch tweets that mention a username.

FAQ

Does User Tweets include replies and retweets?

Yes, both. The page is the account's timeline as X returns it, so retweets and the account's own replies come back alongside original posts. Every tweet carries is_retweet and is_reply, so filter on those flags client-side if you want original posts only.

How is it different from User Tweets and Replies?

In practice it is not: both endpoints resolve to the same upstream timeline and return the same tweets for the same account. User Tweets and Replies is kept as an alias for compatibility. Pick either and filter on is_reply yourself.

How far back can I read a timeline?

Page with next_cursor until the tweets array comes back empty. Each page is roughly 20 tweets and one billed call.

What identifier does it take?

Pass either username (the handle without the leading @) or the numeric user_id. The response is cursor-paginated timeline tweets.