Export formats

Six output formats are available across the sync transcript endpoint and bulk-job exports. Pick by use case.

FormatContent-TypeTimestampsBest for
jsonapplication/jsonYesSDKs, programmatic processing
txttext/plainNocurl pipes, shell scripts, simple ingestion
srtapplication/x-subripYesVideo player subtitles, ffmpeg
csvtext/csvYes if availableSpreadsheets, BI tools
docx(MS Word MIME)NoDocument delivery
markdowntext/markdownYesLLM 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.

txt
welcome or welcome back to my YouTube
channel so for today's video I'll be
teaching you touch by cat say

srt

Standard SRT subtitle format.

srt
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 be

markdown

Title as H1 plus timestamped lines.

markdown
# 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 say

csv

Four columns when timestamps are available. If timestamps are unavailable, only a text column is included.

csv
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

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)

json
{
  "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.

We use Google Analytics cookies and note which site referred you, so we know how people find us. Nothing personal, nothing sold. See our Privacy Policy.