Convert VTT to SRT programmatically with one HTTP request. The VTT to SRT API takes WebVTT captions and returns SRT — the de-facto universal standard for subtitle interchange. Almost every editor, player, and caption tool reads SRT.
Use this conversion when you're moving captions between platforms, prepping files for desktop editors, or normalizing a subtitle library into one interchange format. One credit per conversion, 100 free credits to start.
Why convert VTT to SRT with an API
- Interchange: SRT is the format tools can always read.
- Normalize: standardize a library of WebVTT files into SRT at scale.
- Automate: no manual export from a caption editor.
Convert with cURL
curl -X POST https://api.example.com/api/v1/convert \
-H "Authorization: Bearer your_api_key" \
-F "[email protected]" \
-F "from=vtt" \
-F "to=srt" \
-o movie.srt
Compact example — Node.js
const fs = require("node:fs");
(async () => {
const form = new FormData();
form.append("file", new Blob([fs.readFileSync("movie.vtt")]), "movie.vtt");
form.append("from", "vtt");
form.append("to", "srt");
const res = await fetch("https://api.example.com/api/v1/convert", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.SUBTOVTT_API_KEY}` },
body: form,
});
if (!res.ok) throw new Error(await res.text());
console.log("Cues:", res.headers.get("x-cue-count"));
fs.writeFileSync("movie.srt", Buffer.from(await res.arrayBuffer()));
})();
Full examples by language
- Convert SRT to VTT with Python
- Convert SRT to VTT with Node.js
- Convert SRT to VTT with cURL
- Convert SRT to VTT with PHP
- Convert SRT to VTT in the browser
Format notes
| Topic | Detail |
|---|---|
| Output | SubRip (.srt) |
| Header | Drops the WEBVTT declaration line |
| Timestamps | 00:00:01.000 → 00:00:01,000 |
| Styling | Cue settings are dropped (SRT has no styling) |
| Usage | Universal interchange, most editors |
Note: SRT is a safe target for WebVTT content that doesn't rely on cue styling.
FAQ
What happens to WebVTT cue styling? SRT has no styling, so cue settings like align: and position: are dropped; dialogue and timing are preserved.
Can I resync while converting? Yes — shift_ms shifts all timestamps, and the two-point resync params handle non-linear drift.
Next
- Convert SRT to VTT →
- Convert ASS to SRT →
- Try the free VTT→SRT converter — no signup required
- Get credits →