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
| Method | Request | What it does | Transcript credits |
|---|---|---|---|
GET | /api/me | Read account details, plan, and credit balances. | Free |
POST | /api/youtube/videos | List channel or playlist videos, or inspect one video with mode full. | 1 credit per successful listing |
GET | /api/youtube/videos?jobId=UUID | Check a listing job and retrieve its completed video metadata. | Free |
POST | /api/transcribe | Submit videos, playlists, or channels for transcription. | 1 credit per video checked |
GET | /api/transcribe?jobId=123 | Check transcription progress and get ready transcript IDs. | Free |
GET | /api/transcribe?jobId=123&download=TRANSCRIPT_ID | Download one ready transcript. | Free |
GET | /api/transcribe?jobId=123&download=all | Download all transcripts together once combinedReady is true. | Free |
GET | /api/transcribe?jobId=123&download=zip | Download 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"}' | Field | Description |
|---|---|
url | Required. One YouTube channel or playlist URL. A video URL is accepted only in full mode. |
maxVideos | Integer from 1 to 1000, default 100 for REST. Use a small limit for a creator’s latest uploads. |
mode | flat (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}' | Field | Description |
|---|---|
links | Required. An array of YouTube URLs or a string of URLs separated by spaces. Videos, playlists, and channels are supported. |
maxVideos | Optional integer from 1 to 100, default 3. Limits videos processed from each playlist or channel. |
language | Defaults 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. |
fallbackToOriginal | Boolean, 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×tamps=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.
| Parameter | Values |
|---|---|
format | ai-ready, markdown, plaintext, vtt, or json. Defaults to AI-ready for combined/ZIP downloads and VTT for individual downloads. |
timestamps | Set to true to include timestamps. Otherwise omitted, except VTT which always includes timing. |
copy | For 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
| Status | Meaning |
|---|---|
| 400 | Invalid request body, links, job ID, format, or video limit. |
| 401 | Missing, invalid, expired, or revoked credentials. |
| 402 | No transcript credits remaining. |
| 403 | A request without valid Bearer authentication failed the browser origin check. |
| 404 | The job is not accessible to your account, or the requested transcript is not ready. |
| 409 | The combined file or ZIP is not ready yet. |
| 502 | Video listing failed or timed out. No listing credit was charged. |
| 503 | The 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.
| Tool | What it does | Transcript credits |
|---|---|---|
get_account | Read account details and credit balances. | Free |
list_videos | List video metadata using url, mode (flat or full), and maxVideos (1–1000, default 10). | 1 credit per successful listing |
get_video_list | Poll a listing job using its UUID jobId. | Free |
submit_transcription | Submit a links array; maxVideos is 1–100 per collection, default 3. | 1 credit per video checked |
get_transcription | Check progress using the transcription jobId. | Free |
get_transcript | Fetch 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.