Get any YouTube transcript over an API
A YouTube URL in, timestamped text out. Existing captions when the video has them — billed as one video — and real audio transcription when it does not.
# 1. Create the job from a YouTube URL
curl -X POST https://api.techtuel.com/v1/transcriptions \
-H "Authorization: Bearer $TECHTUEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "source_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }'
# => 202 { "id": "job_abc123", "status": "processing", "source_kind": "url" }
# 2. Fetch the transcript (or ?format=srt for subtitles)
curl "https://api.techtuel.com/v1/transcriptions/job_abc123?format=json" \
-H "Authorization: Bearer $TECHTUEL_API_KEY"{
"id": "job_abc123",
"status": "completed",
"title": "Rick Astley — Never Gonna Give You Up",
"language": "en",
"detected_language": "en",
"translated": false,
"minutes": 3.6,
"source_kind": "url",
"source_url": "https://youtu.be/dQw4w9WgXcQ",
"transcript": "We're no strangers to love…",
"segments": [
{ "start_seconds": 0, "text": "We're no strangers to love" },
{ "start_seconds": 3.8, "text": "You know the rules and so do I" }
]
}"YouTube transcript API" hides two very different jobs. The first is fetching the captions YouTube already hosts, the ones you read in the "Show transcript" panel. The second is getting text out of a video that has no captions at all, which means downloading the audio and running it through a speech recognition engine. Most tools do only one of the two, and you find out which one the day your pipeline returns an empty list.
Techtuel does both behind the same endpoint. Given a YouTube URL, the API looks for captions first: if they exist it fetches them, normalises them into segments, and bills the video as a single "video" unit — one credit, whatever its length. If captions are missing it falls back to the audio and transcribes it, billed on actual minutes. Your code has no branch to write: it posts a URL and reads a job.
The job follows the usual cycle. POST /v1/transcriptions returns 202 with an id and status processing, then a GET on that job returns status, title (the video title, resolved for you), language, minutes, transcript and segments. Add ?format=srt or ?format=vtt to get a subtitle file straight away, or ?format=txt for plain text. Results are cached: re-fetching a public video that has already been processed costs no credit.
Why this API
Captions first, audio second
Existing captions are fetched first at one credit per video. With no captions, the API transcribes the audio automatically — you never write that fallback.
One response shape
Captions or transcription, the job always returns transcript, segments[start_seconds, text], language and title. No YouTube caption format to parse.
Translation built in
preferred_language asks for the transcript in another language. The response exposes detected_language and translated so you know what you actually got.
Pricing you can read
Frequently asked questions
Does the API fetch captions or transcribe the audio?+
Both, in that order. If the video has captions they are fetched and billed as a single video (one credit). Otherwise the audio is downloaded and transcribed, billed by the minute.
What happens for a video with no captions at all?+
Nothing special on your side: the job goes down the audio transcription path and returns the exact same structure. You never have to detect missing captions or retry with a different tool.
Which parameters does the request accept?+
The POST body takes source_url (the YouTube URL) and preferred_language (an ISO 639-1 code) to request a translation. On read, ?format=txt|json|srt|vtt selects the output.
Are timestamps included?+
Yes. Every segment carries a start_seconds value in seconds plus its text. That is what lets you emit SRT/VTT or point a quote back at the right moment of the video.
How are errors reported?+
An unavailable or private video moves the job to status failed with an explicit error field. A quota or payment refusal returns 402 with reason quota_exceeded or payment_failed.
Other ways to use the API
Free trial, no credit card
Generate an API key and transcribe your first source in under a minute. A free monthly quota lets you test under real conditions.
Start with the API