Extract transcript
Extract a transcript for one video from YouTube, TikTok, Instagram, LinkedIn, or Twitter/X. Pass url (full URL, short link, or bare platform id) and the platform is auto-detected, or pass platform + externalId. The response is served from cache (Redis → Postgres) when available.
language is a priority list (de,en,asr); asr / asr-<code> request asynchronous audio transcription. When the video has no caption track (or an asr entry is reached) the call returns 202 with a jobId — poll GET /v1/transcript/job/{id}. Caption tracks that exist only in other languages also continue to ASR rather than failing; only a genuinely missing asset returns 404.
waitMs (default 2000, max 10000) is how long the caller waits before a durable 202 is returned; 0 returns a job immediately on a cache miss.
A multipart/form-data body with a file field uploads local media (account-only) instead of a remote link.
Billing: transcript extraction and cache lookup are free (0 credits).
Session token (cookie-based auth in browser) or developer API key (tr_ prefix). API keys require the transcripts scope for /v1/transcript and the batches scope for /v1/batch.
In: header
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/transcript" \ -H "Content-Type: application/json" \ -d '{ "language": "en", "format": "json", "includeTimestamp": true, "sendMetadata": false, "waitMs": 2000 }'{ "status": "success", "format": "json", "transcript": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "platform": "youtube", "externalId": "string", "sourceUrl": "http://example.com", "lang": "string", "title": "string", "channel": "string", "creatorName": "string", "creatorHandle": "string", "creatorUrl": "string", "thumbnailUrl": "string", "durationSec": 0, "publishedAt": "2019-08-24T14:15:22Z", "metadata": {}, "source": "youtube_transcript_api", "status": "pending", "segments": [ { "text": "string", "start": 0, "duration": 0 } ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "text": "string", "cached": true, "language": "string", "metadataStatus": "complete", "lengthSeconds": 0, "lengthText": "string", "metadata": {}}