Back to transcripts

Transcription API & MCP

Connect YouTube transcripts to your apps and workflows.

REST API

The API uses your account’s transcript credits and the same processing flow as the website.

Base URL: https://proclipper.app. All requests below use a Bearer API key. OAuth tokens issued for MCP cannot be used as REST API keys.

All REST API requests

MethodRequestWhat it doesTranscript credits
GET/api/meRead account details, plan, and credit balances.Free
POST/api/youtube/videosList channel or playlist videos, or inspect one video with mode full.1 credit per successful listing
GET/api/youtube/videos?jobId=UUIDCheck a listing job and retrieve its completed video metadata.Free
POST/api/transcribeSubmit videos, playlists, or channels for transcription.1 credit per video checked
GET/api/transcribe?jobId=123Check transcription progress and get ready transcript IDs.Free
GET/api/transcribe?jobId=123&download=TRANSCRIPT_IDDownload one ready transcript.Free
GET/api/transcribe?jobId=123&download=allDownload all transcripts together once combinedReady is true.Free
GET/api/transcribe?jobId=123&download=zipDownload separate transcript files in a ZIP once combinedReady is true.Free

1. Create an API key

Open Dashboard → API keys, enter a friendly name, and select Create API key. Copy the token before closing; the full key is shown only once.

Send Authorization: Bearer YOUR_API_KEY with every request. Keep keys on your server, out of public browser code and source control. You can revoke individual keys from the dashboard.

2. Check your account

curl https://proclipper.app/api/me \
  -H "Authorization: Bearer YOUR_API_KEY"

Returns id, username, email, plan, credits (clipping credits), transcriptCredits, and createdAt. This request is free.

3. List videos or inspect video metadata

Listing returns metadata without creating transcripts. Submit one channel or playlist URL, or a single video URL with mode: "full".

curl https://proclipper.app/api/youtube/videos \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://www.youtube.com/@CHANNEL","maxVideos":10,"mode":"flat"}'
FieldDescription
urlRequired. One YouTube channel or playlist URL. A video URL is accepted only in full mode.
maxVideosInteger from 1 to 1000, default 100 for REST. Use a small limit for a creator’s latest uploads.
modeflat (default) lists entries quickly; upload dates may be approximate. full extracts individual video metadata for more precise dates when available and takes longer.

Channel listings use the Videos tab, excluding Shorts and live tabs. Results follow YouTube’s listing order, up to your limit; pagination is not supported. For a specific video’s upload date, send its URL with mode: "full" and maxVideos: 1.

A completed request returns HTTP 200. If it is still running after roughly 10 seconds, HTTP 202 returns a UUID jobId and status. Poll that job every few seconds instead of submitting again:

curl 'https://proclipper.app/api/youtube/videos?jobId=YOUR_LISTING_JOB_ID' \
  -H "Authorization: Bearer YOUR_API_KEY"

Polling returns pending, processing, or the completed result. Listing failures return an HTTP error. Only your account can access its jobs.

The completed result includes jobId, status, url, mode, maxVideos, count, videos, creditsCharged, and transcriptCredits. Each video contains youtubeId, url, title, channel, duration (seconds), thumbnail, and uploadDate (YYYY-MM-DD). Unavailable metadata may be null.

Each successful listing costs 1 transcript credit, even if empty. Polling is free; failed listings do not consume credits. Every new POST creates a separate billable request.

4. Submit transcripts

POST /api/transcribe accepts JSON. Replace VIDEO_ID with a YouTube video ID.

curl https://proclipper.app/api/transcribe \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"links":["https://www.youtube.com/watch?v=VIDEO_ID"],"maxVideos":3}'
FieldDescription
linksRequired. An array of YouTube URLs or a string of URLs separated by spaces. Videos, playlists, and channels are supported.
maxVideosOptional integer from 1 to 100, default 3. Limits videos processed from each playlist or channel.
languageDefaults to auto: select available captions per video. Specify a language code such as hi, es, or pt-BR to prefer that language. This does not translate captions.
fallbackToOriginalBoolean, default true. Use identifiable original-language captions when the preferred language is unavailable. Set false to skip those videos instead.

A successful submission returns HTTP 202 with a job ID. Processing runs in the background.

{"jobId":"123"}

Each video checked costs 1 transcript credit, including videos without available captions. Processing errors are refunded. An account without credits receives HTTP 402.

5. Check transcription progress

Use the returned job ID to check status. Poll every few seconds until the job reaches completed, partial, or failed.

curl 'https://proclipper.app/api/transcribe?jobId=123' \
  -H "Authorization: Bearer YOUR_API_KEY"

The response includes status, videos, skippedVideos, transcriptCredits, creditLimitReached, and combinedReady. Jobs start as pending and move to processing. A partial job has some successful results and some processing failures.

Ready videos appear in videos as they finish. Use each entry’s id to download that transcript. Only the account that owns a job can access it.

6. Download transcripts

Once combinedReady is true, download all transcripts in one file:

curl -L 'https://proclipper.app/api/transcribe?jobId=123&download=all&format=json&timestamps=true' \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o transcripts.json

Or download a ZIP containing a separate file for each video:

curl -L 'https://proclipper.app/api/transcribe?jobId=123&download=zip&format=markdown' \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o transcripts.zip

For a single ready transcript, replace download=all with download=TRANSCRIPT_ID, using the id from videos. Individual downloads are available before the entire job finishes.

ParameterValues
formatai-ready, markdown, plaintext, vtt, or json. Defaults to AI-ready for combined/ZIP downloads and VTT for individual downloads.
timestampsSet to true to include timestamps. Otherwise omitted, except VTT which always includes timing.
copyFor an individual VTT download, copy=1 returns the VTT body directly. Otherwise individual VTT downloads redirect to a signed file URL; use curl -L to follow it.

JSON output contains a transcripts array with video metadata and cues. With timestamps enabled, cues include startTime and endTime in seconds.

Error responses

StatusMeaning
400Invalid request body, links, job ID, format, or video limit.
401Missing, invalid, expired, or revoked credentials.
402No transcript credits remaining.
403A request without valid Bearer authentication failed the browser origin check.
404The job is not accessible to your account, or the requested transcript is not ready.
409The combined file or ZIP is not ready yet.
502Video listing failed or timed out. No listing credit was charged.
503The listing queue or worker configuration is unavailable. Retry later.

MCP

Connect to https://proclipper.app/mcp using Streamable HTTP. Sign in through OAuth or use an API key with clients that support custom authorization headers. View the connection guides and demos.

ToolWhat it doesTranscript credits
get_accountRead account details and credit balances.Free
list_videosList video metadata using url, mode (flat or full), and maxVideos (1–1000, default 10).1 credit per successful listing
get_video_listPoll a listing job using its UUID jobId.Free
submit_transcriptionSubmit a links array; maxVideos is 1–100 per collection, default 3.1 credit per video checked
get_transcriptionCheck progress using the transcription jobId.Free
get_transcriptFetch content using jobId, videoId (a transcript ID or all), format (default json), and timestamps (default false).Free

Submit once, then poll with get_video_list or get_transcription. The tools return content directly; ZIP downloads are available through REST or the website. MCP supports the same transcript formats listed above.

submit_transcription accepts the same language and fallbackToOriginal preferences as REST. Ready transcript results include the selected caption language; older transcripts may have an unknown language.