X / Twitter Retweeters API
List the accounts that retweeted (reposted) any X (Twitter) post, with full profiles. Paginated JSON, $0.01 per call.
/v1/twitter/tweet-retweetersReturns the accounts that reposted a tweet, each with a full profile (same fields as the Twitter User API). Useful for measuring reach and finding the audience that amplifies a post.
Usage
const res = await fetch('https://api.yepapi.com/v1/twitter/tweet-retweeters', {
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-retweeters \
-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-retweeters",
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": "HBaAgICEx4L8mDQAAA==",
"users": [
{
"avatar": "https://pbs.twimg.com/profile_images/2111488065747484673/8wT-yzxj_400x400.jpg",
"banner": "https://pbs.twimg.com/profile_banners/2872600309/1790334431",
"created_at": "2014-10-23T03:58:47+00:00",
"description": "ASD持ちの器用貧乏/模型・海外ドラマ・語学・博物館/フォロバは恒常ポストの内容次第/Icon by @depravedstar/ポスト・画像の無断転載、AI学習禁止・DON'T reprint without my permission.",
"followers_count": 814,
"following_count": 1220,
"id": "2872600309",
"is_blue_verified": false,
"likes_count": 49992,
"listed_count": 23,
"location": "©️Inaba & baDWolf Works",
"media_count": 17063,
"name": "空(Sora)",
"pinned_tweet_ids": [
"951706147014127616"
],
"protected": false,
"tweet_count": 646542,
"url": "https://x.com/MESUKEMONIA",
"username": "MESUKEMONIA",
"verified": false,
"verified_type": null,
"website": "https://gumpla.jp/author/MESUKEMONIA"
},
{
"avatar": "https://pbs.twimg.com/profile_images/1924826136854319104/7XCKh9IV_400x400.jpg",
"banner": "https://pbs.twimg.com/profile_banners/63228090/1759712683",
"created_at": "2009-08-05T19:25:11+00:00",
"description": "ENG/JPN -英語/日本語- #ActuallyAustistic woman🌻& Environmentalist. She/Her. Passionate for Acting,Fitness & art~🌛🌕🌜",
"followers_count": 1223,
"following_count": 4381,
"id": "63228090",
"is_blue_verified": false,
"likes_count": 188290,
"listed_count": 38,
"location": "United Kingdom",
"media_count": 3410,
"name": "LAURA CRAWFORD🌸ローラ・クロフォード",
"pinned_tweet_ids": [
"1635995111417950209"
],
"protected": false,
"tweet_count": 93865,
"url": "https://x.com/LaurantoniautiC",
"username": "LaurantoniautiC",
"verified": false,
"verified_type": null,
"website": "https://www.instagram.com/claurantoniautie?igsh=MXZmcGtlbHFjMzgzbg%3D%3D&utm_source=qr"
}
]
}
}Response Fields
| Field | Type | Description |
|---|---|---|
ok | boolean | Whether the request succeeded |
data.users | object[] | Accounts that reposted |
data.users[].id | string | Numeric user ID — use it as user_id on timeline endpoints |
data.users[].username | string | Handle without @ |
data.users[].name | string | Display name |
data.users[].description | string | null | Bio |
data.users[].location | string | null | Location from the profile |
data.users[].website | string | null | Website link from the profile |
data.users[].created_at | string | Account creation, ISO 8601 |
data.users[].avatar | string | null | Profile image URL (400×400) |
data.users[].banner | string | null | Banner image URL |
data.users[].url | string | x.com profile URL |
data.users[].followers_count | number | Followers |
data.users[].following_count | number | Accounts followed |
data.users[].tweet_count | number | Posts, including replies and reposts |
data.users[].likes_count | number | Posts liked |
data.users[].media_count | number | Photos and videos posted |
data.users[].listed_count | number | Lists the account is on |
data.users[].is_blue_verified | boolean | Has a blue check |
data.users[].verified | boolean | Legacy verification flag |
data.users[].verified_type | string | null | Business, Government, or null |
data.users[].protected | boolean | Posts are protected (private) |
data.users[].pinned_tweet_ids | string[] | IDs of pinned posts |
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 reposts returns 200 with an empty users list.
Related Endpoints
- Tweet API — the original tweet and its repost count
- Tweet Quotes — quote tweets
- Twitter Followers API — an account's followers
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.
Twitter Trends API (X Trends)
Twitter Trends API — get what's trending on X (Twitter) worldwide or in any of ~470 countries and cities by WOEID. JSON, $0.01 per call.