Full transcript of a YouTube video from its URL — captions/subtitles as clean plain text i
Full transcript of a YouTube video from its URL — captions/subtitles as clean plain text in your language. YouTube transcript, video to text, captions extraction, subtitle download, speech to text, multilingual. 105 languages supported, including English, Spanish, Portuguese, French, German, Hindi, Arabic, Chinese, Japanese, Korean, Russian, Indonesian and Vietnamese. Pay per call, no account or API key.
5000 (raw units)
price
1
calls / 30d
1
unique payers
2026-09-17
updated
Provider
api.sumvid.app · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x9036fF40101eeff4Cb8A377d59e9432819b5d420",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "5000",
"maxTimeoutSeconds": 300
}
]Output schema
{
"bazaar": {
"info": {
"input": {
"body": {
"language": "en",
"url": "https://youtu.be/dQw4w9WgXcQ"
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"channel": "Channel name",
"duration_seconds": 212,
"language_code": "en",
"thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"title": "Video title",
"transcript": "We're no strangers to love ...",
"youtube_video_id": "dQw4w9WgXcQ"
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"properties": {
"language": {
"description": "BCP-47 language code for the output (default 'en'; 105 supported, e.g. es, pt-BR, fr, de, hi, ar, zh-Hans, ja, ko, ru, id, vi)",
"type": "string"
},
"url": {
"description": "A YouTube video URL or ID",
"type": "string"
}
},
"required": [
"url"
]
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"properties": {
"channel": {
"type": [
"string",
"null"
]
},
"duration_seconds": {
"type": [
"integer",
"null"
]
},
"language_code": {
"type": "string"
},
"thumbnail_url": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"transcript": {
"description": "Full plain-text transcript of the video",
"type": "string"
},
"youtube_video_id": {
"type": "string"
}
},
"required": [
"youtube_video_id",
"transcript",
"language_code"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://api.sumvid.app/v1/transcript" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://api.sumvid.app/v1/transcript");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://api.sumvid.app/v1/transcript")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/5473.json, and this resource appears in /discovery/resources and /discovery/search.