Return inside the request
Choose a language and any of seven formats. Cached work is immediate and free. Cold work waits up to 25 seconds, then gives you a poll URL.
For developers · 100 free credits a month · No card
GET one transcript or POST one durable bulk job. Cache hits are free. Failures are free. Purchased credits never expire.
Email only. No password, no card.
Measured over the last 24 hours: —
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.
One call or one job
A transcript should be one request. A channel should be one durable job, not a client-side loop held together by retries.
Choose a language and any of seven formats. Cached work is immediate and free. Cold work waits up to 25 seconds, then gives you a poll URL.
Reserve only the cold count, settle per delivered video, follow progress, download a manifest or file, and receive a signed webhook.
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.
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
Assumes every transcript is a cold fetch; cache hits cost nothing, so real bills are usually lower. Checkout sells whole blocks and unused credits stay banked. The incumbent estimate uses its published $5/month plan with 1,000 credits plus $2.50 per 1,000 in top-ups, checked 2026-09-04 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.
Built to keep working
Serving strategies, translation shedding, canaries, and capacity state come from the public endpoint.
No health claim is shown until the endpoint answers.
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/mcpBearer authentication, the same credits and limits as REST.
Integrity-pinned instructions, a keyed server card, and complete machine-readable docs.
Compare the contract
Claims are dated and each competitor cell links to the first-party contract behind it.
| Capability | ScriptHaul API | transcriptapi.com | Supadata |
|---|---|---|---|
| Cache hits | 0 credits | 1 credit on a successful cached response [source] | 1 credit per native transcript; no free-cache distinction is published [source] |
| Credits | One-time blocks; purchased credits never expire | Monthly or annual subscription; base credits do not roll, and top-ups require an active plan [source] | Monthly plans; credits do not roll over [source] |
| Durable channel job | Up to 500 videos with manifest, files, archive, events, and signed webhook | Not offered in the published endpoint list [source] | Paid batch job for a list, playlist, or channel with polled JSON results; no manifest, archive, or signed webhook is documented [source] |
| SRT / VTT | Both, plus five more formats | Not offered; published formats are JSON or text [source] | Not offered in the transcript response contract; published shapes are plain text or segmented JSON [source] |
| Translation verdict | Requested, delivered, fallback, served/refused | Returns the resolved track code, but no translation verdict field [source] | Returns the delivered language; translation is a separate 30-credits/minute endpoint, with no fallback verdict field [source] |
Competitor contracts and prices verified against the linked first-party pages on 2026-09-04. “Not offered” means absent from the cited published API contract; it does not claim a private or unannounced feature cannot exist.
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 or required card.
Purchased credits never expire. The free allowance resets to 100 each UTC month and does not accumulate.
Only a successfully delivered transcript that was not cached. A labelled fallback is a delivery. Cache hits and failures 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 are normally fast; cold work depends on YouTube and relay conditions. Measured p50/p95 values will be published after production has enough samples.
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. Health is public, 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.