TwitterAPIs Docs
API ReferenceUser Reads

Home Timeline API

Read the home timeline for the account behind your registered session: the ranked feed shown when that account opens X, most recent first. Returns full tweet objects with author and engagement counts. Cursor-paginated. Requires a registered session. Cost: $0.0008 per call.

GET user/home_timeline returns the home timeline of the account tied to your registered session: the same ranked, most-recent-first feed that account sees on X's For You / Following tab. Each page returns full tweet objects with author and engagement counts, plus a cursor for pagination. It requires a registered session and costs $0.0008 per call.

GET
/user/home_timeline

Authorization

bearerAuth
AuthorizationBearer <token>

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

In: header

Query Parameters

count?integer

Items per page. Defaults to 20; capped at 100.

cursor?string

Pagination cursor from a previous response's next_cursor.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/user/home_timeline?count=20"
{  "count": 1,  "next_cursor": "DAABCgABHL4VFSR__9oKAAIA...",  "tweets": [    {      "id": "2070410316496678962",      "text": "Bitcoin closed the daily candle above the key support.",      "created_at": "Fri Jun 26 07:34:20 +0000 2026",      "lang": "en",      "author": {        "id": "3185716686",        "username": "AshCrypto",        "name": "Ash Crypto",        "verified": true,        "followers_count": 2168823      },      "reply_count": 264,      "retweet_count": 309,      "favorite_count": 1277,      "quote_count": 11,      "bookmark_count": 24,      "view_count": 130944    }  ]}
{  "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

When to use

Use this endpoint to pull the ranked For You / Following feed shown to the account behind your registered session. Reach for a different User Reads endpoint when you need another account's public tweets (not the session account's personalized feed) or a single tweet's detail.

Notes

  • Needs a session for the account you are reading: either register one once (POST /customer/session), or pass per-call inline credentials as x-auth-token and x-ct0 request headers, which let a single API key act as many accounts. Returns 409 session_required if neither is supplied, 401 session_dead when the session has expired.
  • Tweets with media carry an extended_entities.media array (see the Tweet model).

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.

FAQ

Does this endpoint work for any Twitter/X account, or only my own?

Only the account behind your registered session. The endpoint has no user-id or username parameter, unlike endpoints that fetch another user's public tweets; it always returns the feed of the session that's currently registered with twitterapis.

How do I page through the full home timeline?

Each response includes next_cursor and has_more. Pass next_cursor as the cursor parameter on your next request to get the following page, and stop once has_more is false. count controls page size (default 20, max 100 per call).