X / Twitter User tweets API
Paginated timeline of a user’s tweets with text, media and engagement counts. Paginate with the cursor field.
$0.45/1k req, pay per request, no subscription.
{"id": "1800000000000000000","url": "https://x.com/NASA/status/1800000000000000000","text": "Liftoff! 🚀","likes": 142000,"retweets": 21400,"replies": 3900,"createdAt": "2024-06-09T13:45:00Z","authorHandle": string,... 13 more fields}
Pricing and providers
X / Twitter User tweets API pricing: one API, 3 interchangeable providers
The cheapest provider serves first. If it fails, the next one takes over in the same call.
capped at $0.0101 per request1 result$0.000250 results$0.0051100 results$0.0101 capYou are charged for what comes back. Lower the limit to pay less - and no single request can cost more than the cap, however much comes back.
Try it
Get X / Twitter user tweets in one request
This sample shows 10 of 30 fields. See every field
{
"found": true,
"data": {
"nextCursor": "DAABCgABF__cursor",
"tweets": [
{
"id": "1800000000000000000",
"url": "https://x.com/NASA/status/1800000000000000000",
"text": "Liftoff! 🚀",
"likes": 142000,
"retweets": 21400,
"replies": 3900,
"createdAt": "2024-06-09T13:45:00Z"
}
]
}
}Full parameter and response reference - every field, type, and example for this endpoint.
Reference
One request, one response shape.
Every field you send and every field you get back, each with a real example.
Last verified 2026-11-05 · uptime and latency measured over 30d
Request body
JSON, posted to this endpoint.
- handlestring
nasa
Twitter/X handle without the leading @.
- cursorstring
0
Opaque pagination cursor from a previous response's nextCursor. Omit for the first page.
- limitinteger
Page size to ask for (1-100, default 20). Some sources honor it; others always return their whole native page of about 20 authored tweets and replies. A page is never trimmed after the call, so follow nextCursor and pass it back as cursor to continue exactly where this response ended.
- requireFieldsarray
Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `isPinned`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a post that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. On a paginated walk it applies to the first page only; later pages stay with the source that page chose, at the price it was quoted.
- requireSinglePageboolean
Require a lane that can return the requested limit in one response.
Response
JSON, one example value per field.
- nextCursorstring
DAABCgABF__cursor
Opaque cursor for the next page when the selected lane supports pagination, otherwise null.
Populated whenever the provider has data for the entity.
- authorHandlestring
Handle of the account that posted.
- authorIdstring
Numeric X user id of the account that posted, as a string.
- authorImagestring
Avatar image URL of the account that posted.
- authorNamestring
Display name of the account that posted.
- bookmarksinteger
- conversationIdstring
Id of the conversation the post belongs to, as a string.
- createdUtcnumber
UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Populated whenever the provider has data for the entity.
- idstring
1800000000000000000
Populated whenever the provider has data for the entity.
- isPinnedbooleancan require
Whether X marks the post as pinned on the profile, or null when the serving source does not publish it.
- isReplyboolean
- langstring
- likesinteger
142000
- quotesinteger
- repliesinteger
3900
- retweetsinteger
21400
- sourcestring
Client the post was sent from, e.g. "Twitter Web App".
- textstring
Liftoff! 🚀
Populated whenever the provider has data for the entity.
- urlstring
https://x.com/NASA/status/1800000000000000000
Populated whenever the provider has data for the entity.
- viewsinteger
Photo, video, and GIF attachments on the post. Empty when the post has none.
- heightinteger
- typestring
One of photo, video, or gif.
- urlstring
Image URL. For a video or GIF this is the poster/thumbnail frame. X media URLs on pbs.twimg.com are publicly fetchable without authentication; append ?name=orig for the full-resolution original.
- videoUrlstring
Playable video file URL. Present only for video and gif items.
- widthinteger
- foundboolean
true
- reason"not_found"
Present only when `found` is false, and says why there is no result. `not_found`: the source states the target does not exist, or returned nothing for it. A `found: false` answer is a successful call, not an error, and `costUsd` is what it actually cost.
Selling this API? See the full schema your endpoint must return.
FAQ
About the X / Twitter User tweets API
The AnyAPI X / Twitter User tweets API returns X / Twitter user tweets data as normalized JSON from one POST call to /v1/run/twitter.user_tweets. Paginated timeline of a user’s tweets with text, media and engagement counts. Paginate with the cursor field. AnyAPI routes each request across 3 sources and falls back automatically when one fails. It costs from $0.45 per 1,000 requests, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 100.0% of X / Twitter user tweets calls through AnyAPI succeeded, with a median response time of 1.5 seconds across 310,762 measured calls.