TwitterAPIs Docs
API ReferenceList Data

Twitter List Tweets API | Date-Filtered X List Posts

Fetch posts written by the members of a public List through X's search index. Supports since and until date bounds and an include_replies toggle. Does not include retweets. Cost: $0.0008 per call.

List Tweets returns the posts written by the members of a public Twitter/X List, newest first, filtered through X's search index. It is the time-rangeable half of the List feed: it accepts since and until dates and an include_replies toggle. It does not carry retweets, and search-index lag applies, so a post can take a moment to appear. Each page is one $0.0008 read.

GET
/list/tweets

Authorization

bearerAuth
AuthorizationBearer <token>

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

In: header

Query Parameters

list_id*string

Numeric ID of the public List.

since?string

Only posts on or after this date, as YYYY-MM-DD.

until?string

Only posts before this date, as YYYY-MM-DD. Exclusive, matching X's until: operator.

include_replies?boolean

Whether to include replies written by List members. Default true.

product?string

Which search ranking to read: Latest or Top. Default Latest, and any unrecognised value falls back to Latest.

count?integer

Max items to return for this page. Default 20; clamped to 1-100.

cursor?string

Pagination cursor from a previous response.

fields?string

Comma-separated list of dotted field paths to keep in the response (one parameter, never repeated), applied to every object in the returned lists and to nested objects (for example fields=id,text,author.username; the list's own name may prefix a path, fields=tweets.id). A path prefix that lands on an array applies to each element (media.media_url_https). Pagination and envelope keys (next_cursor, cursor, has_more, count, partial, error, message, reason) are always kept. Unknown paths are ignored; up to 50 paths of up to 6 segments. Projection never changes status codes or billing, and applies to data reads only: account, feedback, session status, monitor (other than deliveries), webhook and stream-compat reads return their bodies unchanged.

compact?string

Set to 1 (or true) to apply the built-in compact preset: ids, url, text, created_at, lang, the engagement counts, the is_retweet/is_reply/is_quote flags, conversation ids, the author's id/username/name/followers_count/verification, and the quoted or retweeted tweet's id/url/author username. The preset trims what it recognises and leaves alone what it would empty, so it never turns a body into {}. Combine with fields to add paths on top of the preset. Typically cuts a tweet page by 70 to 90 percent for LLM tool callers.

paid_promotion?string

Filter this page's tweets by X's Paid partnership label: only keeps tweets whose is_paid_promotion is true, exclude keeps the rest. Omit it for every tweet. It filters the page X returned and does not fetch more, so a filtered page can hold fewer tweets than asked for, or none, while next_cursor still pages on. The response carries paid_promotion_filter { mode, kept, removed }, and count reflects what is returned. Any other value is a 400. Billing is the same as without it.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/list/tweets?list_id=1234567890123456789&since=2026-08-01&until=2026-08-15&include_replies=false&product=Top&count=20&fields=id%2Ctext%2Ccreated_at%2Cauthor.username&compact=1&paid_promotion=only"
{  "tweets": [    {      "id": "1899887766554433221",      "text": "Shipping the thing we said we would ship.",      "created_at": "2026-08-14T09:12:44.000Z",      "author": {        "id": "745273",        "username": "naval"      }    }  ],  "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": "forbidden",  "message": "X refused this resource for the acting account: on a read, the account is not a participant in the DM thread, the target is protected or has blocked it, or the session was attestation-blocked for calling from a datacenter or rotating IP; on a write, the account is not authorized for the action or has no logged-in session. The credentials are still valid, so do not re-register."}
{  "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 page is one $0.0008 read. Narrowing with since and until costs the same per page but returns fewer pages.

When to use

Use it when you need a List's posts for a specific date range, or with replies filtered out, for example pulling a week of output from a curated founders List.

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.

  • List Timeline: Read a public List's native X timeline, retweets included.
  • List Members: Page through the members of a public Twitter/X List.
  • Advanced Tweet Search: Search tweets with Twitter's full query-operator syntax, paginated with cursors.

FAQ

How is this different from List Timeline?

They are two capabilities, not two spellings. List Tweets is search-backed, so it accepts since, until and include_replies. List Timeline is X's native List feed, which carries retweets and X's own ordering but takes no filters at all.

Why are retweets missing?

This endpoint reads X's search index, which does not return retweets for a List query. If you need them, use List Timeline instead.

Is until inclusive?

No. until is exclusive, matching X's own until: search operator. A post made on the until date is not returned.