X / Twitter Quote Tweets API
Get the quote tweets of any X (Twitter) post with full text, authors, and engagement counts. Paginated JSON, $0.01 per call.
/v1/twitter/tweet-quotesReturns the tweets that quote a given tweet. Each item has is_quote: true and the original in quoted_tweet. Use it to track how a post is being discussed beyond its replies.
Usage
const res = await fetch('https://api.yepapi.com/v1/twitter/tweet-quotes', {
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({"tweet": "2116173868326846654", "count": 20}),
});
const { data } = await res.json();
console.log(data);curl -X POST https://api.yepapi.com/v1/twitter/tweet-quotes \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tweet": "2116173868326846654", "count": 20}'import requests
res = requests.post(
"https://api.yepapi.com/v1/twitter/tweet-quotes",
headers={"x-api-key": "YOUR_API_KEY"},
json={"tweet": "2116173868326846654", "count": 20},
)
print(res.json()["data"])Request Body
| Parameter | Type | Required | Description | Default |
|---|---|---|---|---|
tweet | string | Yes | Tweet ID (2116173868326846654) or a post URL (https://x.com/NASA/status/2116173868326846654) | — |
count | number | No | Page size hint, 1–100 | 20 |
cursor | string | No | cursor from the previous response, to fetch the next page | — |
Response
{
"ok": true,
"data": {
"cursor": "DAACCgACHV69WAgAJxAKAAMdXr1YB__Y8AgABAAAAAILAAUAAAD8RW1QQzZ3QUFBZlEvZ0dKTjB2R3AvQUFBQUJVZFhra0FYRmRncEIxZWYvdGVtekFGSFY0K2ZpWFdJTkVkWGlyYUxWb3hGQjFlZ0ZNamxsRWxIVjVDQ1ZGYWNQQWRYalVCbDFkZ3VoMWVOZ00zVnND…",
"tweets": [
{
"author": {
"avatar": "https://pbs.twimg.com/profile_images/1924973942655352835/0e0cCOnR_400x400.jpg",
"banner": "https://pbs.twimg.com/profile_banners/15811630/1668574266",
"created_at": "2008-08-11T18:39:29+00:00",
"description": "@GirlsBTRS Artist Manager. I love music and fandom and am way too altruistic about it.",
"followers_count": 1888,
"following_count": 1802,
"id": "15811630",
"is_blue_verified": false,
"likes_count": 208371,
"listed_count": 26,
"location": "Opinions are my own.",
"media_count": 3219,
"name": "Shelby Chargin",
"pinned_tweet_ids": [],
"protected": false,
"tweet_count": 169424,
"url": "https://x.com/ohhayshelby",
"username": "ohhayshelby",
"verified": false,
"verified_type": null,
"website": "http://girlsbtrs.com"
},
"bookmarks": 2474,
"conversation_id": "2116182543229993316",
"created_at": "2026-10-30T14:56:49+00:00",
"hashtags": [],
"id": "2116182543229993316",
"in_reply_to_tweet_id": null,
"in_reply_to_username": null,
"is_quote": true,
"is_retweet": false,
"lang": "en",
"likes": 78114,
"media": [],
"mentions": [],
"possibly_sensitive": false,
"quoted_tweet": {
"author": {
"avatar": "https://pbs.twimg.com/profile_images/1321163587679784960/0ZxKlEKB_400x400.jpg",
"banner": "https://pbs.twimg.com/profile_banners/11348282/1788992290",
"created_at": "2007-12-19T20:20:32+00:00",
"description": "Making the seemingly impossible, possible. ✨",
"followers_count": 92298687,
"following_count": 115,
"id": "11348282",
"is_blue_verified": true,
"likes_count": 17049,
"listed_count": 96842,
"location": "Pale Blue Dot",
"media_count": 28221,
"name": "NASA",
"pinned_tweet_ids": [
"2116263878807998722"
],
"protected": false,
"tweet_count": 74477,
"url": "https://x.com/NASA",
"username": "NASA",
"verified": false,
"verified_type": "Government",
"website": "http://www.nasa.gov/"
},
"bookmarks": 3460,
"conversation_id": "2116173868326846654",
"created_at": "2026-10-30T14:22:21+00:00",
"hashtags": [],
"id": "2116173868326846654",
"in_reply_to_tweet_id": null,
"in_reply_to_username": null,
"is_quote": false,
"is_retweet": false,
"lang": "en",
"likes": 100148,
"media": [
{
"alt_text": "Image description: A packed, sparkling starfield captured by our Hubble telescope — with strange new worlds potentially awaiting. Credit: ESA/Hubble and NASA, R. Cohen",
"duration_ms": null,
"height": 1200,
"type": "photo",
"url": "https://pbs.twimg.com/media/HV4o6wYXkAA3T9Q.jpg",
"video_url": null,
"width": 1600
}
],
"mentions": [],
"possibly_sensitive": false,
"quoted_tweet": null,
"quotes": 531,
"replies": 438,
"retweeted_tweet": null,
"retweets": 14918,
"text": "We mourn the passing of Patrick Stewart, who inspired countless individuals at NASA (and beyond) to boldly go where no one has gone before. https://t.co/qnLWiLX9RW",
"url": "https://x.com/NASA/status/2116173868326846654",
"urls": [],
"views": 1904085
},
"quotes": 7,
"replies": 13,
"retweeted_tweet": null,
"retweets": 4731,
"text": "Oh this has me FUCKED UP.",
"url": "https://x.com/ohhayshelby/status/2116182543229993316",
"urls": [],
"views": 518928
}
]
}
}Response Fields
| Field | Type | Description |
|---|---|---|
ok | boolean | Whether the request succeeded |
data.tweets | object[] | Quote tweets |
data.tweets[].id | string | Tweet ID |
data.tweets[].url | string | x.com URL of the tweet |
data.tweets[].text | string | Full text |
data.tweets[].created_at | string | ISO 8601 timestamp |
data.tweets[].lang | string | null | Language code detected by X |
data.tweets[].author | object | Author profile — same fields as /v1/twitter/user |
data.tweets[].likes | number | Like count |
data.tweets[].retweets | number | Repost count |
data.tweets[].replies | number | Reply count |
data.tweets[].quotes | number | Quote count |
data.tweets[].bookmarks | number | Bookmark count |
data.tweets[].views | number | null | View count |
data.tweets[].conversation_id | string | ID of the thread's first tweet |
data.tweets[].in_reply_to_tweet_id | string | null | Tweet this one replies to |
data.tweets[].in_reply_to_username | string | null | Handle this one replies to |
data.tweets[].is_retweet | boolean | This is a repost — the original is in retweeted_tweet |
data.tweets[].is_quote | boolean | This quotes another tweet — see quoted_tweet |
data.tweets[].possibly_sensitive | boolean | Flagged as sensitive media |
data.tweets[].hashtags | string[] | Hashtags without # |
data.tweets[].mentions | string[] | Mentioned handles |
data.tweets[].urls | string[] | Expanded links |
data.tweets[].media | object[] | Photos, videos, GIFs: type (photo, video, animated_gif), url, video_url (MP4), duration_ms, width, height, alt_text |
data.tweets[].quoted_tweet | object | null | The quoted tweet, same shape |
data.tweets[].retweeted_tweet | object | null | The reposted tweet, same shape |
data.cursor | string | null | Cursor for the next page |
Pagination
Each response includes a cursor. Send the same request again with that value in cursor to get the next page; cursor is null when there is nothing more (or the page came back empty). count is a page-size hint — X may return a few more or fewer items than you ask for. Every page is a separate $0.01 call.
Caching
Responses are cached for 10 minutes.
Errors
| Status | Code | When |
|---|---|---|
400 | VALIDATION_ERROR | tweet is not a tweet ID or status URL |
429 | RATE_LIMITED_UPSTREAM | Too many requests in a short burst — retry after a few seconds |
502 / 503 | UPSTREAM_ERROR / SERVICE_UNAVAILABLE | Temporary problem fetching data from X — retry later |
Failed calls are not charged.
A tweet with no quotes returns 200 with an empty tweets list.
Related Endpoints
- Tweet API — the original tweet
- Retweeters — who reposted it
- Tweet Replies API — replies
Tweet Replies API (X Replies)
Get the replies to any tweet on X (Twitter), sorted by relevance, recency, or likes, with full text, authors, and engagement counts. JSON, $0.01 per call.
X / Twitter Retweeters API
List the accounts that retweeted (reposted) any X (Twitter) post, with full profiles. Paginated JSON, $0.01 per call.