Developers
ClipVault Transcript API
Read this first: this API only extracts the captions and automatic captions that the platform already publishes. It does not run speech recognition, so it cannot transcribe a video that has no caption track — and most platforms never publish one.
Status
Free while in beta · no account · no API key
Quota
20 requests per IP per day, reset at 00:00 UTC
Endpoint
POST https://useclipvault.com/api/transcript
content-type: application/json
{ "url": "https://www.youtube.com/watch?v=...", "lang": "en" }url is required and must be a link on a supported platform. lang is optional, defaults to en and follows a BCP-47 style tag (en, ja, pt-BR). When the requested language is absent, the API falls back to any track the platform does publish and reports the real language in the response.
Copy this curl command
curl -s https://useclipvault.com/api/transcript \
-H 'content-type: application/json' \
-d '{"url":"https://www.youtube.com/watch?v=jNQXAC9IVRw","lang":"en"}'Response (abridged):
{
"ok": true,
"platform": "youtube",
"title": "Me at the zoo",
"durationSec": 19,
"language": "en",
"source": "manual",
"segments": [
{ "start": 1.2, "end": 3.36, "text": "All right, so here we are, in front of the elephants" },
{ "start": 5.32, "end": 7.97, "text": "the cool thing about these guys is that they have really..." },
{ "start": 7.97, "end": 12.62, "text": "really really long trunks" }
],
"text": "All right, so here we are, in front of the elephants the cool thing ...",
"segmentCount": 6,
"charCount": 214
}A video without any caption track answers 422 instead of a body full of empty segments:
{
"ok": false,
"code": "NO_CAPTIONS",
"message": "No subtitle track was found for this video ..."
}Response fields
| Field | Type | Meaning |
|---|---|---|
| platform | string | One of the nine platforms the API recognises. |
| title | string | Title reported by the platform, "Untitled" when missing. |
| durationSec | number | null | Media duration as reported by the platform. |
| language | string | Language of the track actually used — may differ from the one you asked for when only another language exists. |
| source | "manual" | "auto" | Whether the track was uploaded by the author or generated by the platform. Manual wins when both exist. |
| segments | array | Ordered cues: { start, end, text } in seconds, 2 decimals. Repeats removed. |
| text | string | Every segment joined into one plain-text transcript. |
| segmentCount | number | Length of segments. |
| charCount | number | Length of text, in characters. |
Consecutive duplicate cues are removed before the response is built: platform automatic captions are generated as a rolling window of words, and a raw dump would repeat every sentence two or three times.
What each platform actually returns
The endpoint accepts all nine platforms, but only some of them publish caption tracks. This list is deliberately pessimistic, because a developer who is told "we support TikTok transcripts" and then gets NO_CAPTIONS has been misled.
| Platform | Caption tracks | Expectation |
|---|---|---|
| YouTube | Most videos: author-uploaded captions or automatic ones, often in many languages. | usually yes |
| Niconico | Some videos carry author-uploaded captions for Japanese and English. | usually yes |
| TikTok | No caption track — the burned-in on-screen text is part of the video. | no |
| No caption track. | no | |
| X (Twitter) | Occasionally a caption track, but only for a small share of videos. | rarely |
| Occasionally a caption track on uploaded video. | rarely | |
| SoundCloud | Audio only, no caption track. | no |
| Dailymotion | Occasionally a caption track. | rarely |
| Streamable | No caption track. | no |
Error codes
| code | HTTP | When |
|---|---|---|
| BAD_REQUEST | 400 | Body is not JSON, url is missing, or lang is not a language tag such as "en" or "pt-BR". |
| UNSUPPORTED_URL | 400 | The URL is valid but the domain is not one of the nine supported platforms. |
| NO_CAPTIONS | 422 | No caption track exists for this video in any language. Nothing is broken: the platform simply publishes no transcript for it. |
| RATE_LIMITED | 429 | This IP has used its 20 requests for the current UTC day. Body carries resetAt. |
| FAILED | 502 | The upstream platform refused the extraction (private, removed, geo-blocked, rate-limited upstream). A timeout answers 504 with the same code. |
An unsupported domain is never a 500: every branch above returns a code you can switch on.
Quota and headers
No key is issued, so the quota is per client IP: 20 requests per UTC day, counted from the first successful validation of the day. Every response carries the state:
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 17
X-RateLimit-Reset: 2026-05-04T00:00:00.000ZThe 21st request of the day answers 429 with RATE_LIMITED and the same resetAt instant in the body. Counters live in memory, so a server restart is also a reset.
Roadmap
Two things sit outside this endpoint today, and both are the parts that cost real money to run. They are where a paid tier would go if enough people ask for them:
- Speech recognition for any platform. Transcripts for videos that never published captions — TikTok, Instagram, Facebook, and the rest. This needs an ASR model (or a paid API), and the current server has no GPU, which is exactly why this API stays on existing caption tracks for now.
- Summaries and search over transcripts. Compressing a transcript into key points, or searching it by phrase, on top of the segments this endpoint already returns.
No dates and no prices are promised here: this page exists to find out whether anyone actually needs them. If you do, say so through the contact page and describe what you would build with it.
Fair use and copyright
The API returns captions, not media files, and it is not a bulk scraper: 20 requests a day is a prototyping allowance, not a data pipeline. Captions are the work of the platform, the uploader or both — check what you are allowed to do with them before you republish a transcript. See Terms of Use and DMCA / Copyright.
Need the media file too?
The downloader is the same platform list, without a quota for normal use: open the downloader.