Create an API key
Sign up with no card required, then create a key under API keys. Keep it in a server-side environment variable so it stays out of browser code and source control.
Go to API keysTerminalexport TRANSCRIPTFETCH_API_KEY=tf_live_YOUR_KEY
Choose an endpoint
Each endpoint does one job, with the same bearer key and the same response envelope. Pick one and the request and response below follow it.
Browse all endpointsMake a request
POST a YouTube, TikTok or Instagram URL, a direct media file URL, or a YouTube video ID as
video. It is the only required field.AI Fallback Transcription is on by default. With
mode: "auto", a video with no captions is transcribed at 1 credit per started 5 minutes of audio, minimum 1, charged on delivery. Sendmode: "captions"to never pay for audio.POST/api/v2/transcripts/videoRead the response
A 200 carries the transcript in
data. The fields you will use most:data.segments- Timestamped cues, each with start, duration and text
data.source- captions, or audio when AI Fallback Transcription ran
usage- Credits spent on this call and your remaining balance
request_id- Include it when you contact support
Send
"timestamps": falseto get one joineddata.textstring instead.200 OK{ "ok": true, "request_id": "req_…", "data": { "kind": "transcript", "video_id": "dQw4w9WgXcQ", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "platform": "youtube", "title": "Example video", "channel": "Example Channel", "duration": 212, "language": "en", "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/mqdefault.jpg", "source": "captions", "segments": [ { "start": 0, "duration": 3.5, "text": "We're no strangers to love" } ] }, "usage": { "credits_spent": 1, "balance": 49, "bytes": 14233 } }
Handle long videos
Videos without captions go to AI Fallback Transcription. Under 20 minutes, the request waits up to 45 seconds and returns a 200. Longer videos, or a transcription still running after the wait, return
202with a job. Collect it one of two ways:Poll the job
Call the
poll_urlfrom the 202 until the status is completed or failed.GET /api/v2/transcripts/jobs/{jobId}Receive a callback
Send a public https
callback_urland the finished transcript is POSTed to it. The job stays pollable either way."callback_url": "https://…"