1 credit per delivered page
Search YouTube
Find videos, channels and playlists without knowing a URL. Video results show what is already cached.
GET /v1/search
- Keyed MCP
search_youtube
For developers · 100 free credits a month
Find the right videos. Fetch one transcript or a whole channel. Search what was said, cite the moment and keep your library current. Cache hits and failures are free.
Email only. No password.
curl --get https://api.scripthaul.com/v1/transcript \
-H "Authorization: Bearer $SCRIPTHAUL_API_KEY" \
--data-urlencode "video_id=jNQXAC9IVRw" \
--data-urlencode "format=srt" \
--data-urlencode "raw=1"
HTTP/2 200
X-Cache: HIT
X-Credits-Charged: 0
1
00:00:00,000 --> 00:00:02,400
We the People of the United States…
# One durable bulk job replaces a client-side channel loop.
curl https://api.scripthaul.com/v1/jobs \
-X POST \
-H "Authorization: Bearer $SCRIPTHAUL_API_KEY" \
-H "Idempotency-Key: weekly-channel-2026-09-04" \
-H "Content-Type: application/json" \
-d '{
"input":"https://youtube.com/@channel",
"format":"srt"
}'
HTTP/2 202
{"ok":true,"idempotent":false,"job":{"id":"…","status":"enumerating"}}
Example output uses public-domain text.
The complete toolkit
Find the right videos, fetch their transcripts, search a channel library and follow new uploads. Every capability is here, with its cost and a way to use it.
Start with a question, a channel, a playlist or a list of links.
1 credit per delivered page
Find videos, channels and playlists without knowing a URL. Video results show what is already cached.
GET /v1/searchsearch_youtube1 credit per delivered page
Add a channel handle or ID to the same search. Continue through results one page at a time.
GET /v1/searchsearch_youtubeUse q=your topic and channel=@TED.
Read the docs0 credits
Read the newest 15 entries from a channel or playlist, with a ten-minute cache. Use a channel ID or an already-resolved handle.
GET /v1/channels/latestget_latest_videos0 credits
Turn a handle or channel URL into a stable channel ID, title and uploads playlist.
GET /v1/channels/resolveresolve_channel0 credits · cold enumeration allowance applies
Inspect up to 500 videos per enumeration, including dates and cache flags, before deciding what to fetch.
GET /v1/videoslist_videos0 credits · cold enumeration allowance applies
Validate YouTube links or IDs and get a reusable list key for enumeration and bulk jobs.
POST /v1/videos/resolveGet the words, the timestamps and an honest account of the language delivered.
1 credit per cold delivery · cache hits 0
Request a video by URL or ID. A slow cold fetch returns a poll URL; a cached transcript is ready to read.
GET /v1/transcriptget_transcriptKeyless MCP costs 0 credits within its small daily allowance.
Read the docs0 extra credits for the format
Clean text, timestamped text, both together, SRT, VTT, Markdown or JSON. Use raw=1 for a file response.
GET /v1/transcriptget_transcript1 credit per cold delivery · refusals 0
See requested and delivered language, caption kind and translation verdict. With fallback=false, a strict refusal costs nothing.
GET /v1/transcriptget_transcriptAvailable caption tracks are also listed by GET /v1/video.
Read the docs300 credits per started 10,000 characters of transcript (at most 1,500), on top of the delivery credit
When YouTube declines to translate the captions, add translate=true to a transcript request or a bulk job to receive the requested language anyway, labelled like any served translation. Later requests for it are cache hits.
GET /v1/transcriptPOST /v1/jobsget_transcriptcreate_bulk_jobOpt-in, in most languages. Nothing extra is charged when it cannot be delivered.
Read the docs0 credits
Get the title, channel, publish date, duration, available caption tracks and durable fetch outcome when known.
GET /v1/videoLet durable jobs handle a whole channel, then collect the result in the form you need.
Creation 0 · each cold delivery 1 credit
Submit a channel, playlist or up to 500 video IDs. Jobs reserve cold work, settle successful deliveries and pause when credits run out.
POST /v1/jobscreate_bulk_job0 credits
List account jobs, inspect progress and credit totals, or page through individual videos and failures.
GET /v1/jobsGET /v1/jobs/{jobId}GET /v1/jobs/{jobId}/videosget_job0 credits
Get a machine-readable list of delivered files, language facts and integrity metadata.
GET /v1/jobs/{jobId}/manifest0 credits
Retrieve a job video in the requested format, with account authorization on every file request.
GET /v1/jobs/{jobId}/files/{videoId}0 credits
Build a server-side archive in one or more formats. Large exports are split into bounded parts.
GET /v1/jobs/{jobId}/archive0 credits
Follow progress as server-sent events and reconnect from the last event you received.
GET /v1/jobs/{jobId}/eventsActions 0 · a successful cold retry 1 credit
Retry eligible failures or cancel unfinished work. Credits settle only for successful cold deliveries.
POST /v1/jobs/{jobId}/retryPOST /v1/jobs/{jobId}/cancel0 credits
Configure, read, rotate or remove an endpoint for job completion, credit events and new monitored uploads.
GET /v1/webhooksPUT /v1/webhooksDELETE /v1/webhooks0 credits
Ask an assistant for a prefilled channel or playlist download link on scripthaul.com.
get_bulk_download_linkCheck what a channel library contains, search what was said and keep it current.
0 credits
See known, indexed and missing videos plus the cold count. Use the suggested job to fill the gaps.
GET /v1/libraryget_library0 credits · daily search allowance applies
Search a named channel or video with phrases and prefixes. Ranked passages include a link to the exact video timestamp.
GET /v1/library/searchsearch_transcriptsMonitoring 0 · auto-fetch cold delivery 1 credit
Monitor a channel or playlist through RSS. Optional auto-fetch creates ordinary jobs so new uploads enter the library.
POST /v1/monitorswatch_channel1 monitor free; 25 on paid accounts. Checks are at least 15 minutes apart.
Read the docs0 credits
List watches, inspect the last check and new-video count, or cancel. Automatic fetching pauses for credits and resumes after a purchase.
GET /v1/monitorsGET /v1/monitors/{monitorId}DELETE /v1/monitors/{monitorId}list_monitorsUse REST, an SDK or your assistant, with the account controls that make it practical.
0 credits to connect · endpoint costs apply
Use the interactive OpenAPI reference, JavaScript and Python SDKs, or runnable curl, Node, Python, Go and n8n examples.
Read the docs0 credits to connect · tool costs apply
Connect Claude, ChatGPT and other MCP clients with email-code consent, or use an API key. Revoke connected apps from the dashboard.
https://api.scripthaul.com/mcp
Try the keyless server: https://scripthaul.com/mcp
0 credits to install · tool costs apply
Give an assistant instructions for discovery, bulk work, timestamped library research and monitors.
/.well-known/agent-skills · MCP server card
0 credits
Request and verify a sign-in code, then sign out when finished. Keep keys in a secret manager and send them only as Bearer headers.
POST /v1/auth/codePOST /v1/auth/verifyPOST /v1/auth/logout0 credits
List or create keys, change names and daily credit caps, revoke keys or rotate with a 24-hour migration grace period.
GET /v1/keysPOST /v1/keysPOST /v1/keys/{keyId}DELETE /v1/keys/{keyId}POST /v1/keys/{keyId}/rotate0 credits
Read balance and limits, manage dashboard webhook settings and connected apps, or close the account.
GET /v1/accountPUT /v1/accountDELETE /v1/accountDashboard modes: resource=webhook, resource=connected_apps and resource=account.
Read the docs0 credits
Read usage rollups and the itemized ledger; export the ledger as CSV from the dashboard.
GET /v1/usageUse resource=ledger for individual credit entries.
Read the docs0 API credits · purchases are charged in USD
Open checkout, request an eligible refund, and visit the billing portal for receipts and invoices. Stripe sends signed payment events to the callback.
POST /v1/checkoutGET /v1/billing/portalPOST /v1/billing/stripeUse action=refund on checkout for refund requests.
Read the docs0 credits
Read API status before starting work, or use a lightweight HEAD request from your uptime monitor.
GET /v1/statusHEAD /v1/statusFrom a question to a result
Connect your assistant, then ask in your own words. These examples show which tools do the work. Transcript fetches and YouTube search pages use the costs shown above.
Find a video about solar energy and get its transcript.
Keyed MCP · search_youtube → get_transcript
Resolve @TED and show its latest uploads.
Keyed MCP · resolve_channel → get_latest_videos
Give me the free bulk download link for https://www.youtube.com/@TED.
Keyless MCP · get_bulk_download_link
Fetch the missing TED transcripts, then find what they say about solar energy and cite the timestamps.
Keyed MCP · get_library → create_bulk_job → get_job → search_transcripts
Watch new TED uploads, fetch their captions automatically, and show my monitors.
Keyed MCP · resolve_channel → watch_channel → list_monitors
What you pay for
Re-run a channel every week and pay only for new uploads.
A transcript already in the shared permanent cache.
A transcript successfully delivered after a new fetch, including a labelled fallback.
One delivered page of YouTube or in-channel search results. Failed pages cost 0.
Search indexed transcript passages within one named channel or video.
No captions, unavailable, strict refusal, rate limit, outage, or budget pause.
Listing, facts, jobs, files, manifests, status, account, usage, and webhooks.
Pay as you go
Free allowance first. Purchased credits stay in a separate bucket forever.
credits every month · 2 keys · 2 concurrent cold calls
$1.67 per 1,000
$1.43 per 1,000
$1.25 per 1,000
$1.00 per 1,000
$0.80 per 1,000
The ScriptHaul figure is what that many credits cost at the block rate for that volume; checkout sells whole blocks, and unused credits stay banked. Every transcript is counted as a cold fetch, and cache hits cost nothing, so real bills are usually lower. The transcriptapi.com figure is its published $5/month plan with 1,000 credits plus $2.50 per 1,000 in monthly top-ups, checked 2026-09-06 on its pricing page. Method and caveats.
Never expires
There is no subscription to maintain and no clock on paid credits.
The free allowance resets to 100 on the first of each month (UTC) and does not accumulate.
There is no plan to cancel, so nothing can lapse and lock you out of credits you paid for.
Honest languages, honest failures
Every transcript labels the requested language, delivered language, caption kind, fallback, and translation verdict.
"language": {
"requested": "es",
"delivered": "en",
"kind": "manual",
"fallback": true,
"translation": "refused"
}A refused translation with fallback enabled is still useful and clearly labelled. It costs 1 only when delivered cold.
fallback=falseIf the requested language cannot be delivered, ScriptHaul returns a retryable typed error instead of silently substituting. No transcript delivered means 0 credits charged.
Seven formats
Examples use public-domain text, not a customer transcript.
[{"start":0,"duration":2.4,"text":"We the People of the United States"}]
We the People of the United States, in Order to form a more perfect Union…
[00:00] We the People of the United States
[00:02] in Order to form a more perfect Union…
We the People of the United States, in Order to form a more perfect Union…
--- Timestamped ---
[00:00] We the People of the United States
1
00:00:00,000 --> 00:00:02,400
We the People of the United States
WEBVTT
00:00.000 --> 00:02.400
We the People of the United States
# Public-domain transcript fixture
**[00:00]** We the People of the United States
Agents and MCP
The keyless server on scripthaul.com is for trying the tools in an assistant, with a small daily allowance. The keyed server on this host uses your account's credits, limits, and durable jobs.
https://scripthaul.com/mcpA small allowance for trying transcript tools in an assistant.
https://api.scripthaul.com/mcpOAuth or an API key, with the same account credits and limits as REST.
Integrity-pinned instructions, a keyed server card, and complete machine-readable docs.
Compare the contract
Discovery and assistant connections are a starting point. Compare how each API handles transcript libraries, ongoing work and the cost of reading again.
| Capability | ScriptHaul API | transcriptapi.com | Supadata |
|---|---|---|---|
| YouTube search | 1 credit per delivered page [docs] | 1 credit/page [source] | 1 credit/page [source] |
| In-channel search | 1 credit per delivered page [docs] | 1 credit/page [source] | No channel-scoped filter documented [source] [2] |
| Latest uploads | 0 credits; newest 15 RSS entries [docs] | Free RSS; latest 15; active credit required [source] | Latest-first channel IDs: 1 credit/request [source] |
| Transcript search | 0 credits; passages scoped to one channel or video, with timestamp links [docs] | Not offered in the documented API [source] [2] | Not offered in the documented API [source] [2] |
| Managed monitors | 1 free or 25 paid; RSS checks with optional automatic transcript jobs [docs] | Not offered; poll latest uploads yourself [source] [2] | Not offered in the documented API [source] [2] |
| OAuth connectors | Yes; revocable MCP connections [docs] | Yes [source] | Yes [source] |
| Agent skill | One-command install; public MIT skill [docs] | One-command install [source] | One-command install [source] |
| Formats | Seven: clean, timestamped, both, SRT, VTT, Markdown, JSON [docs] | JSON or text; Markdown through MCP [source] [2] | JSON with text or timestamped chunks [source] |
| Durable bulk jobs | Up to 500 videos per durable job; progress, retries and credit pause/resume [docs] | Not offered; agent skill loops over videos [source] [2] | Paid batch jobs, up to 5,000; 1 credit to start + 1/transcript [source] [2] |
| Delivery webhooks | Signed job, credit and monitor events [docs] | Not offered in the documented API [source] [2] | Not offered in the documented API [source] [2] |
| Server ZIP archives | Server-built ZIPs, split into bounded parts [docs] | Not offered in the documented API [source] [2] | Not offered in the documented API [source] [2] |
| Cached transcript | 0 credits [docs] | 1 credit [source] | Cache discount unspecified; native transcript: 1 credit [source] [2] |
| Credit expiry | Purchased credits never expire; free credits reset monthly [docs] | Top-ups: later of 30 days or subscription end; active subscription required [source] [2] | Monthly credits do not roll over; recharge expiry unspecified [source] |
Competitor contracts and prices verified against the linked first-party pages on 2026-09-06. “Not offered” means absent from the cited published API and MCP inventory; it does not rule out a private or unannounced feature. Undocumented cache discounts and recharge expiry are identified as unspecified.
Get a key
The key is shown once. Keep it in a secret manager and send it only in the Bearer header.
FAQ
Yes: a verified email holds your keys, balance, receipts, and recovery path. There is no password.
Purchased credits never expire. The free allowance resets to 100 each UTC month and does not accumulate.
A successfully delivered transcript that was not cached, or a delivered page of YouTube search results. A labelled cold fallback is a transcript delivery. Transcript cache hits, failed requests and library searches cost zero.
You receive a typed NoCaptions error and pay zero credits.
The response always identifies requested and delivered language, manual or ASR kind, fallback, and translation served/refused state. Strict mode refuses substitution.
Cache hits return immediately. A cold fetch takes a few seconds; if it needs longer than 25 seconds you get a poll URL instead of waiting on the connection.
A free account may run one active job of up to 100 videos. A paid account may run five active jobs of up to 500 videos each.
No. Never. ScriptHaul handles public caption tracks and does not offer media download.
No SLA at launch. Failed deliveries are not charged, and credits wait rather than expiring.
Unused purchased blocks are eligible within 14 days, subject to the plain rules on the refunds page. Outage and cessation credits are defined there too.
You are responsible for determining whether your commercial use, storage, or redistribution of each transcript is permitted. ScriptHaul grants no rights in source captions.
No. ScriptHaul is not affiliated with or endorsed by YouTube or Google.
Retention varies: request events 90 days, usage rollups 24 months, financial records 7 years, archives 7 days, and shared transcript cache objects may remain indefinitely independent of customer identity.