One endpoint for videos, playlists and channels
POST up to 50 YouTube URLs (videos, Shorts, playlists or channels) and ChannelText lists the videos, fetches every transcript and charges your prepaid balance only for the ones delivered, up to 500 videos per job. Poll the job, then read the text as JSON or download the files.
curl
# Start a job (the most it can cost is reserved from your balance)
curl -X POST https://channeltext.com/api/v1/jobs \
-H "Authorization: Bearer ct_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: my-first-job" \
-d '{"urls": ["https://www.youtube.com/@channelname"], "maxVideos": 20, "formats": ["text", "srt"]}'
# Poll it until "state" is finished
curl -H "Authorization: Bearer ct_live_…" https://channeltext.com/api/v1/jobs/JOB_ID
# Read the transcripts as JSON, or download everything as one ZIP
curl -H "Authorization: Bearer ct_live_…" "https://channeltext.com/api/v1/jobs/JOB_ID/results?limit=50"
curl -H "Authorization: Bearer ct_live_…" -o transcripts.zip https://channeltext.com/api/v1/jobs/JOB_ID/files/zip
Python
import time, requests
API = "https://channeltext.com/api/v1"
H = {"Authorization": "Bearer ct_live_…"}
job = requests.post(f"{API}/jobs", headers=H, json={"urls": ["https://www.youtube.com/@channelname"], "maxVideos": 20}).json()
while job["state"] in ("queued", "running", "cancelling"):
time.sleep(5)
job = requests.get(job["links"]["self"], headers=H).json()
results = requests.get(job["links"]["results"], headers=H, params={"limit": 50}).json()
for video in results["videos"]:
print(video["title"], video["status"], (video["text"] or "")[:80])
Endpoints
| Endpoint | What it does |
|---|---|
POST /api/v1/jobs | Start a job |
GET /api/v1/jobs | Your jobs, newest first |
GET /api/v1/jobs/{id} | Job status and progress |
GET /api/v1/jobs/{id}/results | Transcripts and download links |
GET /api/v1/jobs/{id}/files/{file} | Download a file |
GET /api/v1/balance | Prepaid balance |
GET /api/v1/openapi.json | This document |
Full reference with every field and error code: API docs and the OpenAPI 3.1 document. Create an API key on your account page after signing in; send it as Authorization: Bearer ct_live_….
Or run the open-source library yourself
The free youtube-transcript-api Python library fetches a video's transcript from your own machine. Its README says YouTube blocks most IP addresses of cloud providers and recommends rotating residential proxies when you deploy it. ChannelText does the fetching for you, lists whole channels and playlists, and charges only for transcripts delivered.
Pay per transcript, not per month
Prices listed on these sites on 2026-09-26:
| Service | Price | Model |
|---|---|---|
| ChannelText | $8 per 1,000 delivered | prepaid $10, no subscription |
| transcriptapi.com | $5 per month for 1,000, then $2.50 per 1,000 | monthly plan with top-ups |
| youtube-transcript.io | $9.99 per month for 1,000 | monthly plan |
Limits
- Up to 50 URLs and 500 videos per job; every job is also capped by your balance, which never goes negative.
- Rate limit per API key: 60 requests in a burst, refilled at 60 per minute.
- Send an
Idempotency-Keywith POST /jobs so a retry never starts or charges a second job.
Pricing
$0.008 per delivered transcript ($8 per 1,000). No subscription.
- Prepaid balance: add $10 (1,250 transcripts) when your balance is short. You only pay at that point, after you have seen how many videos your link has and the most it can cost.
- Videos without captions, private or removed videos and videos YouTube blocked are free. You pay only for transcripts you get. “Update this channel” skips the videos of that channel you already received.
- No free sample. Transcripts come from the captions YouTube publishes (the creator's or YouTube's automatic ones); there is no speech-to-text, so a video with no captions has no transcript.
Questions
How much does a YouTube transcript API cost?
The ChannelText API is paid: $0.008 per delivered transcript from a prepaid balance, and videos without a transcript cost nothing. The open-source youtube-transcript-api library is free but runs on your own machine and IP address.
Does YouTube's own API give you transcripts?
The official YouTube Data API is free within a daily quota, but its captions download only works for videos you own or manage. ChannelText gets the published captions of any public video that has them.
Is there an API for YouTube transcripts?
Yes. ChannelText has a REST API (docs) for videos, playlists and whole channels, and an MCP server for AI assistants, both paid from the same balance.