100 free credits on signup · no card required

X/Twitter Transcript API

One URL in. Clean JSON out.

Pass the URL of a video tweet and get the spoken words back as text. Read the next paragraph before you build against this: transcription here is subtitle-based, and X video almost never carries subtitles, so in practice this endpoint returns 404 for the overwhelming majority of X content. It is documented because the path exists and the price is set, not because it works today.

Credits 7 / video
Input ?url=
Cache
GET · BEARER
Request composing…
Cached forever
same bytes every call

Availability: Caption-dependent: transcripts are available only when the video has captions on X, which most videos don't. When no captions exist the API returns a 404 no-transcript error, and failed calls are never charged.

Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<article data-testid="tweet" class="css-175oi2r r-1adg3ll r-1ny4l3l"><div class="css-175oi2r r-18u37iz"><div dir="ltr" class="css-901oao r-1nao33i">Shipping notes: response times are down 40% after this week&#39;s cache work.</div></div><div role="group" aria-label="90211 views, 1211 likes, 204 reposts" class="css-175oi2r r-1kbdv8c"><div data-testid="like"><span class="css-1jxf684">1,211</span></div><div data-testid="retweet"><span>204</span></div></div><time datetime="2026-07-06T08:15:00.000Z">8h</time><script>window.__INITIAL_STATE__={"entities":{"tweets":{"entities":{"186112...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 4 typed fields
{
"data": {
"platform": "twitter",
"entity_id": "1861122334455667788",
"language": "en",
"source": "audio",
"text": "Today I want to show you the three settings everyone ignores when they set this up for the first time...",
"segments": [
{
"start": 0,
"end": 3.2,
"text": "Today I want to show you the three settings"
},
{
"start": 3.2,
"end": 5.9,
"text": "everyone ignores when they set this up"
}
]
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 Text, segments, language, source

When a transcript exists, you get one object: the full text as a single string, an optional array of timestamped segments, the detected language code, and a source marker saying where the words came from. Nothing else. There are no view counts, no author block, no tweet text — that lives on the X Post Stats API.

02 No captions means 404

When no transcript exists, you get a 404 with an error body and no charge. That is the normal outcome on X. Our transcription runs off captions the platform already carries; it does not listen to audio. TikTok ships subtitles inside its own data and transcribes reliably. X does not, so there is usually nothing to read.

03 Transcripts are stored permanently

Transcripts, once stored, never expire. The endpoint is in the immutable cache class: the second call for the same video is served from our own corpus in milliseconds and returns text, segments and language. Spoken words do not change, so there is no staleness question here and no reason to ever pass fresh=true.

Field explorer Pick a key to see its type and the caveats.
string Always set Per item
source

Where the words came from: "upstream" for platform-supplied captions, "whisper" for an audio pass. Present on every successful response, including repeat calls served from the stored corpus — it records how the transcript was originally produced, not how this particular call was answered.

{
"text": "Today I want to show you the three settings everyone ignores when they set this up for the first time...",
"segments": [ … ],
"language": "en",
"source": "audio"
}
Good fit

Reach for this when

  • You already know the specific video tweet has captions burned into its metadata — for example an accessibility-conscious publisher account that ships subtitle tracks — and you want the text without opening the tweet.
  • You are writing a cross-platform pipeline and want one code path for transcripts across TikTok, Instagram, Facebook and X, accepting that the X leg will mostly 404 and your handler will fall through.
  • You want to re-read a transcript you have already pulled. Stored transcripts are permanent, so the repeat call is a corpus lookup rather than a fresh attempt.
  • You are evaluating whether transcript coverage on X is good enough for your use case and want to measure the hit rate against your own URL list rather than take our word for it.
Different job?

There's an endpoint for that

  • You want transcripts that actually land most of the time. Use the TikTok Transcript API — TikTok carries subtitles in its own payload, so coverage there is the good case, not the exception.
  • You want the tweet's text, likes, reposts or author. That is the X Post Stats API, which returns the post itself and does not touch video at all.
  • You want a condensed version rather than the raw words. The X Video Summary API runs the same pipeline and then summarises, which means it inherits the same caption dependency and the same 404s.
  • You need speech-to-text on arbitrary video. We do not run an audio model on X content, so a video with clear speech and no caption track returns nothing. A dedicated transcription service is the right tool.

Pricing

Start free, pay for what comes back

A successful transcript is 7 credits — about 3.5¢ on the monthly plan, or roughly 143 videos for $5 — but most X videos carry no captions, and calls that return nothing are never charged.

Estimate your bill
$21/ month
30 videos/day × 7 credits × 365 days = 76,650 credits/yr, or $249/yr on the annual plan plus 65 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 76,650
Plan Annual $54/yr
Per video

Estimate only, on a full-year basis. 7 credits per returned video. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

Transcription is captions-only. The pipeline looks for a subtitle track the platform already publishes and converts it to text. If there is no track, the call ends in a 404 rather than falling back to listening to the audio.

X is the worst platform for this. Subtitle tracks are rare there, and unlike TikTok the scrape does not surface them in a form we can read. Assume 404 as the default response and treat a successful transcript as a lucky exception. If your project depends on X video text, this endpoint is not a foundation you should build on.

A 404 is not billed. You can point this at a list of URLs to measure your own hit rate and only pay for the ones that return text. Same for 422 and upstream failures — errors never draw down credits.

Successful calls cost 7 credits per video, whether the transcript is fetched for the first time or served from the stored corpus.

The timestamped segments array is only populated when a transcript is produced by an audio pass. Caption-derived transcripts arrive as flat text with no timing, so segments comes back null. Write your consumer to read text first and treat segments as an optional extra, not a guarantee.

The same applies to language: subtitle sources sometimes carry no language tag, in which case the field is null rather than guessed.

The unit is a video. A text-only tweet, an image post or a quote tweet with no attached video has nothing to transcribe and will not produce a transcript. Filter your URL list with the X Post Stats API first if you are not sure which posts carry video.

Everything here is read from publicly visible pages with no session. Protected accounts, deleted posts and anything behind a login are unreachable by design. There is no setting that changes this.

Questions

Frequently asked

Usually no. This endpoint reads subtitle tracks that the platform already publishes, and X video very rarely carries one. The call is real and priced, but in practice it returns 404 for the large majority of video tweets. If transcripts are central to your project, TikTok is the platform where this capability actually holds up, and our TikTok Transcript API covers it.

Because the video has no caption track. Our transcription is subtitles-only: we convert captions the platform ships into text, and we do not run speech-to-text over the audio. When there is no track, there is no transcript to return, so the endpoint answers 404 rather than inventing text or returning a partial object. The call is not charged.

Not currently. The pipeline supports an audio transcription leg, but it is switched off for launch, so X video is served by captions alone. That decision is why the honest answer on this page is that the endpoint mostly does not return anything. If that changes, the response shape stays the same and segments starts arriving populated.

7 credits per video on a successful call. Credits are $0.005 each on the monthly plan and $0.0045 on annual, so roughly 3.5 cents. Repeat calls for the same video cost the same 7 credits even though they are served instantly from stored text. Calls that return 404 because no transcript exists are free.

Not on this platform. The segments array carries { start, end, text } objects in seconds, but it is only filled in when a transcript comes from an audio pass. Caption-derived transcripts arrive as one continuous string with segments set to null. Since X transcripts are caption-derived when they appear at all, expect flat text.

It is cached permanently and it never goes stale. Transcripts sit in an immutable corpus with no expiry, because the words in a published video do not change. The first successful call stores the text; every later call for that video is a lookup returning in milliseconds. There is no reason to pass fresh=true on this endpoint.

Depends what you actually need. For engagement numbers and post text, the X Post Stats API returns the tweet itself. For a feed of an account's recent posts, the X User Tweets API returns a batch of them in one call. If you specifically need spoken words from social video, run your pipeline against TikTok, where caption coverage is good, and treat X as text-only.

Next

Pairs well with

Full X/Twitter API reference →
/v1/tiktok/transcript
TikTok Transcript API Full transcript of a TikTok video with timestamped segments. 8 cr / video
/v1/twitter/stats
X/Twitter Stats API Views, likes, reposts and replies for a single post on X. 1 cr / tweet
/v1/twitter/summary
X/Twitter Summary API Short AI summary of a video posted on X, built on its transcript. 9 cr / video
/v1/facebook/transcript
Facebook Transcript API Full transcript of a Facebook video with timestamped segments. 15 cr / video

More X/Twitter endpoints

/v1/twitter/summary Short AI summary of a video posted on X, built on its transcript. 9 credits / video /v1/twitter/stats Views, likes, reposts and replies for a single post on X. 1 credit / tweet /v1/twitter/profile Follower counts, bio and profile metadata for an account on X. 5 credits / lookup /v1/twitter/tweets Latest posts from an account on X with per-post metrics. 1 credit / tweet /v1/twitter/search Keyword and advanced-search over public posts on X. 2 credits / result

Try the X/Twitter Transcript endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/twitter/transcript
Get your free API key