ClipVaultuseclipvault.com

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

FieldTypeMeaning
platformstringOne of the nine platforms the API recognises.
titlestringTitle reported by the platform, "Untitled" when missing.
durationSecnumber | nullMedia duration as reported by the platform.
languagestringLanguage 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.
segmentsarrayOrdered cues: { start, end, text } in seconds, 2 decimals. Repeats removed.
textstringEvery segment joined into one plain-text transcript.
segmentCountnumberLength of segments.
charCountnumberLength 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.

PlatformCaption tracksExpectation
YouTubeMost videos: author-uploaded captions or automatic ones, often in many languages.usually yes
NiconicoSome videos carry author-uploaded captions for Japanese and English.usually yes
TikTokNo caption track — the burned-in on-screen text is part of the video.no
InstagramNo caption track.no
X (Twitter)Occasionally a caption track, but only for a small share of videos.rarely
FacebookOccasionally a caption track on uploaded video.rarely
SoundCloudAudio only, no caption track.no
DailymotionOccasionally a caption track.rarely
StreamableNo caption track.no

Error codes

codeHTTPWhen
BAD_REQUEST400Body is not JSON, url is missing, or lang is not a language tag such as "en" or "pt-BR".
UNSUPPORTED_URL400The URL is valid but the domain is not one of the nine supported platforms.
NO_CAPTIONS422No caption track exists for this video in any language. Nothing is broken: the platform simply publishes no transcript for it.
RATE_LIMITED429This IP has used its 20 requests for the current UTC day. Body carries resetAt.
FAILED502The 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.000Z

The 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.