Home/Video captions API
Video captions and transcription API

A video captions API that transcribes speech into subtitles

Add one field when you process a video and get WebVTT and SRT subtitles, a plain-text transcript and a caption track in the stream. The video is never held up waiting for them.

What the captions API does

When you ask for captions, the audio of a finished video is transcribed into subtitles. You get WebVTT (the format browsers' <track> elements and most players use), SRT, and a plain-text transcript. For streaming videos the HLS stream also gets a subtitle track, so standard players show a CC button without any extra work. Captions are produced only when you request them.

Example

Add "captions": true to complete, an import, an edit or a reprocess:

POST /videos/3f1c…/complete
{ "captions": true }

GET /videos/3f1c… (once ready)
"captions": { "status": "ready", "language": "en",
              "vttUrl": "https://…/en.vtt?…", "srtUrl": "https://…/en.srt?…", "txtUrl": "https://…/en.txt?…" }

The language is detected automatically. To set it, send {"language": "es"} with an ISO 639-1 code such as en, es, fr, de, ja or zh.

Built so it can't hurt your video

Using the files

In your own player, add the WebVTT link as a subtitle track; the crossorigin attribute on the video lets the browser load it:

<track kind="subtitles" src="…vttUrl…" srclang="en" default>

HLS players pick up the stream's own subtitle track without this. The <video-piper> web component takes a captions attribute for the MP4 and a cc attribute to show captions from the start; its links come from your own endpoint, as in the documentation's server example. Caption links last 15 minutes, like downloads, so fetch the status again when you need fresh ones.

Captions work with the browser components too: an upload token can set "captions": true, so recordings made on your site are captioned without the page being able to change it.

Cost and limits

2 extra minutes

Each captioned minute adds 2 processing minutes (minimum 1), counted only when a transcript is made.

4 hours

Captions work on videos up to 4 hours long.

1,200 a day

Up to 1,200 captioned minutes per account per day; beyond that captions are skipped, not failed.

Which plans include captions

Captions (speech to text) are a Pro and Scale feature. Each captioned minute adds 2 processing minutes to your usage, only when a transcript is actually made.

PlanPriceProcessing minutesMax qualityCaptions
Free$0/mo30720pNot included
Starter$49/mo4001080pNot included
Pro$199/mo1,5004KIncluded
Scale$699/mo6,0004KIncluded

Usage beyond a paid plan is billed at $0.09 per processing minute, $0.15 per GB-month of storage and $0.55 per GB of delivery. Full details are on the pricing page.

In the documentation

Frequently asked questions

How do I turn captions on?

Send "captions": true when you complete an upload, import a URL, make an edit or reprocess a video. To set the language yourself, send {"language": "es"} with an ISO 639-1 code; otherwise the language is detected automatically.

What files do I get?

WebVTT (for track elements and most players), SRT and a plain-text transcript, each with a download link that lasts 15 minutes like other downloads. The HLS stream also gets a subtitle track, so standard players show a CC button.

Can captions delay or break my video?

No. The video is published and playable first and captions follow, typically a few minutes later. If captions can't be made, captions.status is failed and the video is unaffected; over the limits it is skipped with a reason.

How much do captions cost?

Each captioned minute counts as 2 extra processing minutes, with a minimum of 1, and only when a transcript is made. A reprocess with the same trim reuses the earlier transcript at no charge.

What are the limits?

Videos up to 4 hours, and 1,200 captioned minutes per account per day. Captions are available on Pro and Scale.

Start building with Video Piper

Create a free account with just your email, grab an API key and make your first request in minutes.