Request builder
Pick an endpoint, fill in the fields, and run it live against your account, then copy the generated cURL, Node, or Python snippet straight into your own code.
Request builder
LivePick an endpoint, fill the fields, and copy a ready-to-run request.
/api/v1/transcripts/videoFetch a transcript (YouTube, TikTok, Instagram, podcast, or file URL)
A video URL or 11-character YouTube video ID. Accepts YouTube (watch, youtu.be, /shorts/), TikTok, and Instagram URLs, plus direct media file URLs (mp4/mp3/wav/…). Also accepts podcast links: a Spotify or Apple Podcasts episode URL, or a podcast RSS feed URL, which is resolved to that episode's audio automatically. Videos without captions fall back to AI transcription.
Where the text may come from. "captions" reads an existing caption track and fails if there is none, which is the only way to guarantee a synchronous answer. "audio" skips captions and transcribes the audio. "auto" (the default) tries captions first and transcribes the audio when there are none. Anything that transcribes audio returns 202 with a job to poll, and is charged only on delivery.
Which form the transcript comes back in. true (the default) returns the `segments` array, each with start, duration and text (podcast episodes transcribed from audio may also carry a `speaker` id per segment - see the podcast notes). false returns a single joined `text` string instead. Exactly one of the two is present, never both, since segments already contain every word the joined text does. The older strings "segment" and "none" mean the same two things and are still accepted.
Where to POST the finished transcript when a request escalates to audio transcription, instead of polling the job. The body is the same envelope the poll URL returns, signed with HMAC-SHA256 over the exact bytes in an X-TranscriptFetch-Signature: sha256=<hex> header so you can verify it came from us. Must be a public https URL on the standard port. The job stays pollable either way, so a missed delivery is never a lost transcript.
Legacy alias for "mode", still supported. true is identical to "mode": "audio"; omitted or false is "mode": "auto". Send one or the other, not both. Note that false never disabled the fallback - audio was still transcribed when no captions existed - which is why the field was replaced.
curl https://transcriptfetch.com/api/v1/transcripts/video \
-H "Authorization: Bearer tf_live_…" \
-H "Content-Type: application/json" \
-d '{"video":"dQw4w9WgXcQ"}'