A non-English video can be translated to English two ways: YouTube's own auto-translated caption track (free beyond the video's normal processing credit), or a Google translation Scriptube runs on the stored text (billed separately). Set translate_to_english: true and Scriptube picks whichever applies.
You don't need to know in advance which path a given video will take β that's the point of the flag. Whether YouTube already offers an English track for a Russian interview or a French lecture doesn't need to be something you check first; submit with the flag set and let Scriptube resolve it per video.
Two sources, two prices
This is distinct from reading a video in a non-English language you already understand β that's just language= with no translation involved. translate_to_english is specifically for turning content into English when English isn't what the creator published.
| Source | When it's used | Cost |
|---|---|---|
| YouTube's own translation | YouTube already offers an auto-translated English track for that video | Free beyond the video's 1-credit processing charge |
| Google translation | No YouTube English track exists, so Scriptube translates the stored original | 12 credits per 1,000 characters (Starter+) |
You don't pick which one happens β Scriptube checks whether YouTube can supply it first, since that costs nothing extra, and only falls back to a paid Google translation when YouTube can't. Translation is a Starter-and-above feature; it's not available on Free.
Requesting it
curl -s -X POST https://scriptube.me/api/v1/transcripts \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"urls": ["https://www.youtube.com/watch?v=VIDEO_ID"],
"language": "ru",
"translate_to_english": true
}'
language stays the ORIGINAL caption language you're reading (here, Russian) β it does not change to en just because you asked for a translation. The English text lands in a separate field, translated_text, alongside translation_source telling you whether it came from youtube (free) or google (paid):
{
"video_id": "...",
"transcripts": [
{
"language": "ru",
"text": "ΠΡΠΈΠ²Π΅Ρ, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°?",
"translated_text": "Hello, how are you?",
"translation_source": "google"
}
]
}
Reading GET /api/v1/transcripts/{batch_id}?include_languages=true on a finished batch surfaces this same translated_text/translation_source pair per stored track.
What text exports actually contain
One rule covers every export format: if the batch's language was requested as English (or translate_to_english is set) and a translation exists, text exports (txt, csv, json, jsonl) return the translation. Otherwise they return the original. SRT and VTT are the one exception β they always carry the original-language text, because only the original caption track has the timecodes subtitle files need.
Submitting a video that needs a fresh YouTube translation
If a video has never been fetched before and you ask for a language YouTube can only reach via auto-translation (not a native track), Scriptube fetches that translated track as its own processing job β charged like a brand-new YouTube fetch, not free. Once it's stored, re-submitting it later settles at the normal stored-video price. Reads of anything already stored are always free, translation included.
Working out the cost before you submit
Google translation is priced by source character count β 12 credits per 1,000 characters β so it scales with how much the video's transcript actually contains, not with its duration directly. A 2,000-character transcript works out to 24 credits for the translation alone, on top of the video's own processing credit; a longer talk or lecture costs proportionally more. Because that depends on the specific video, don't guess: the dashboard shows a cost estimate before you submit, and the API has a dedicated precheck endpoint β see credits and the estimate endpoint for using it from code.
How it's different from native language tracks
This is specifically about turning one language into English. If the video already has a real caption track in another language you want (not a translation), use language= to pick it directly instead β see native tracks and auto-translation targets for the full picture, including the /languages endpoint that lists what's available per video, and downloading multiple languages for the dashboard side of this.
How to do it in the dashboard
On the batch submission form, check Translate to English before submitting. The cost estimate updates to reflect a Google translation charge if YouTube doesn't already offer the language for free.
Frequently asked
What if the video is already in English? Nothing happens beyond the normal fetch β there's no translation to run, and no translation charge, regardless of whether translate_to_english is set.
Can I get both the original text and the English translation? Yes β text is the original, translated_text is the English version, and both are available on the same transcript record when you read with include_languages=true. See bilingual transcripts side by side for keeping both in view at once.
Does retrying a failed item keep the same translation setting? Yes β retry-failed keeps translate_to_english from the original item unless you explicitly override it in the retry request, so a retried item doesn't silently drop the translation you originally asked for.
Does a batch with a mix of videos β some needing YouTube's free translation, some needing Google's paid one β work in one request? Yes. Scriptube resolves the source per video automatically; you don't need to split the batch or know in advance which videos need which path.
Is translation available on the Free plan? No β translation requires Starter or above, since it's billed separately from the base video fetch that every plan gets.
Next steps
- Translating to any language β the broader pillar on native tracks and auto-translation.
- Bilingual side-by-side transcripts β keeping both the original and the translation.
Translation requires Starter or above β see plans.