Captions in every language. One call.
Your agent sends a link to a video or audio file and gets timed SRT and WebVTT subtitles back: the spoken language plus any translations it asks for, including regional ones like Québécois French. Pay per minute in USDC. No account, no upload step.
Aujourd'hui, on visite Québec en hiver.
Pricing
Caption a video
GET https://caption402.com/api/captions?url=https://example.com/video.mp4&translate=fr-CA,es
→ 402 Payment Required (exact price from the video's length) → pay with any x402 client → 200
{ "language": "en", "duration_s": 21.2, "cues": 5,
"captions": {
"en": { "srt": "1\n00:00:00,400 --> 00:00:02,910\nWelcome to our travel channel.\n...", "vtt": "WEBVTT...", "srt_url": "...", "vtt_url": "..." },
"fr-CA": { "srt": "1\n00:00:00,400 --> 00:00:02,910\nBienvenue sur notre chaîne de voyage.\n...", ... },
"es": { ... } },
"text": "Welcome to our travel channel. Today we visit Quebec City in winter. ..." }
Subtitles follow broadcast habits: at most two lines of about 42 characters, cues of up to 6 seconds, split at sentence ends. Translations keep the exact same timing. Add vocabulary= with names or product terms to spell them right, or include_words=1 for word-level timestamps.
Free before paying: see a sample result · languages · price check: /api/captions/quote?url=...&translate=...
Quick start (Node)
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const pay = wrapFetchWithPayment(fetch, new x402Client().register("eip155:*", new ExactEvmScheme(privateKeyToAccount(process.env.AGENT_KEY))));
const r = await pay("https://caption402.com/api/captions?url=" + encodeURIComponent("https://example.com/video.mp4") + "&translate=fr-CA");
const { captions } = await r.json(); // captions.en.srt, captions["fr-CA"].vtt ...
Rules
Direct links to media files only (mp4, mov, webm, mkv, mp3, m4a, wav, ogg...). Links to YouTube, TikTok, Netflix and other streaming or social platforms are refused. Only submit media you own or have the right to caption. Invalid links, unreadable files and failed jobs are never charged. Terms of use · Abuse and copyright reports: abuse@caption402.com