YepAPI
Twitter / X API

X / Twitter Retweeters API

List the accounts that retweeted (reposted) any X (Twitter) post, with full profiles. Paginated JSON, $0.01 per call.

POST/v1/twitter/tweet-retweeters
$0.01/call

Returns 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

ParameterTypeRequiredDescriptionDefault
tweetstringYesTweet ID (2116173868326846654) or a post URL (https://x.com/NASA/status/2116173868326846654)—
countnumberNoPage size hint, 1–10020
cursorstringNocursor 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

FieldTypeDescription
okbooleanWhether the request succeeded
data.usersobject[]Accounts that reposted
data.users[].idstringNumeric user ID — use it as user_id on timeline endpoints
data.users[].usernamestringHandle without @
data.users[].namestringDisplay name
data.users[].descriptionstring | nullBio
data.users[].locationstring | nullLocation from the profile
data.users[].websitestring | nullWebsite link from the profile
data.users[].created_atstringAccount creation, ISO 8601
data.users[].avatarstring | nullProfile image URL (400×400)
data.users[].bannerstring | nullBanner image URL
data.users[].urlstringx.com profile URL
data.users[].followers_countnumberFollowers
data.users[].following_countnumberAccounts followed
data.users[].tweet_countnumberPosts, including replies and reposts
data.users[].likes_countnumberPosts liked
data.users[].media_countnumberPhotos and videos posted
data.users[].listed_countnumberLists the account is on
data.users[].is_blue_verifiedbooleanHas a blue check
data.users[].verifiedbooleanLegacy verification flag
data.users[].verified_typestring | nullBusiness, Government, or null
data.users[].protectedbooleanPosts are protected (private)
data.users[].pinned_tweet_idsstring[]IDs of pinned posts
data.cursorstring | nullCursor 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

StatusCodeWhen
400VALIDATION_ERRORtweet is not a tweet ID or status URL
429RATE_LIMITED_UPSTREAMToo many requests in a short burst — retry after a few seconds
502 / 503UPSTREAM_ERROR / SERVICE_UNAVAILABLETemporary problem fetching data from X — retry later

Failed calls are not charged.

A tweet with no reposts returns 200 with an empty users list.

On this page