Export formats
Six output formats are available across the sync transcript endpoint and bulk-job exports. Pick by use case.
| Format | Content-Type | Timestamps | Best for |
|---|---|---|---|
json | application/json | Yes | SDKs, programmatic processing |
txt | text/plain | No | curl pipes, shell scripts, simple ingestion |
srt | application/x-subrip | Yes | Video player subtitles, ffmpeg |
csv | text/csv | Yes if available | Spreadsheets, BI tools |
docx | (MS Word MIME) | No | Document delivery |
markdown | text/markdown | Yes | LLM tools, MCP servers, Claude/ChatGPT integrations |
Plan restrictions
Free plan API access is limited to txt and json. Requesting any other format on a free plan returns 403 forbidden. Paid plans get all six.
Format examples
txt
Segment text joined with newlines. No metadata header.
welcome or welcome back to my YouTube
channel so for today's video I'll be
teaching you touch by cat saysrt
Standard SRT subtitle format.
1
00:00:00,080 --> 00:00:03,360
welcome or welcome back to my YouTube
2
00:00:01,640 --> 00:00:05,920
channel so for today's video I'll bemarkdown
Title as H1 plus timestamped lines.
# KATSEYE 'TOUCH' Dance Tutorial
**[0:00]** welcome or welcome back to my YouTube
**[0:01]** channel so for today's video I'll be
**[0:03]** teaching you touch by cat saycsv
Four columns when timestamps are available. If timestamps are unavailable, only a text column is included.
start,end,duration,text
0.08,3.36,3.28,"welcome or welcome back to my YouTube"
1.64,5.92,4.28,"channel so for today's video I'll be"docx
Microsoft Word document. Title as Heading 1, segments as paragraphs. Binary download.
json
Structured envelope. See GET /transcript/:id for the full shape returned by the sync endpoint.
JSON shape: sync vs export
Sync: GET /transcript/:id?format=json
{
"video_id": "abc12345678",
"language": "en",
"transcript": [
{ "text": "welcome to my channel", "start": 0.08, "duration": 3.28 }
],
"metadata": {
"title": "Video title",
"author_name": "Channel name",
"author_url": "https://www.youtube.com/channel/UC...",
"thumbnail_url": "https://i.ytimg.com/vi/abc12345678/hqdefault.jpg",
"channel_id": "UC...",
"duration_seconds": 620
},
"is_auto_generated": false,
"available_tracks": [
{ "language_code": "en", "language_name": "English", "is_auto_generated": false, "vss_id": "..." }
]
}Field name transcript, per-segment fields { text, start, duration }.
Export: GET /jobs/:id/export?format=json (per file in ZIP)
{
"video_id": "abc12345678",
"title": "Video title",
"language": "en",
"segments": [
{ "text": "welcome to my channel", "start": 0.08, "end": 3.36 }
]
}Field name segments, per-segment fields { text, start, end } where end = start + duration. Top-level title only; no nested metadata, no is_auto_generated, no available_tracks.
Client code that consumes both endpoints should normalize these two shapes.