VidWords API

Extract YouTube transcripts instantly with a single API call — no proxies, IP rotation, or infrastructure to manage. Get accurate transcripts for any public video or whole channels, ready for analysis, AI models, or automation. Grab your API token from your profile — included in every plan, even Free.

Authentication

Send your API token in the Authorization header of every request:

Authorization: Basic <your-api-token>
Content-Type: application/json

Rate limits & credits

POST/api/transcripts

Fetch transcripts for up to 50 videos per request. ids accepts video IDs or full YouTube URLs. Optional lang sets the preferred caption language (falls back to whatever the video has).

curl -X POST __BASE__/api/transcripts \
  -H "Authorization: Basic YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ids": ["dQw4w9WgXcQ", "https://youtu.be/jNQXAC9IVRw"], "lang": "en"}'
const res = await fetch("__BASE__/api/transcripts", {
  method: "POST",
  headers: {
    "Authorization": "Basic YOUR_API_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ ids: ["dQw4w9WgXcQ", "jNQXAC9IVRw"], lang: "en" }),
});
const data = await res.json();
console.log(data.results);
import requests

res = requests.post(
    "__BASE__/api/transcripts",
    headers={
        "Authorization": "Basic YOUR_API_TOKEN",
        "Content-Type": "application/json",
    },
    json={"ids": ["dQw4w9WgXcQ", "jNQXAC9IVRw"], "lang": "en"},
)
print(res.json()["results"])

Response:

{
  "results": [
    {
      "id": "dQw4w9WgXcQ",
      "title": "…",
      "author": "…",
      "language": "English",
      "languageCode": "en",
      "isGenerated": false,
      "text": "full transcript as one string…",
      "segments": [{ "text": "…", "start": 1.36, "duration": 1.68 }, …]
    },
    { "id": "…", "error": "no_transcript", "message": "No transcript is available for this video" }
  ],
  "creditsRemaining": 23
}

POST/api/channels Plus & Pro

Resolve channels into their full upload list (newest first, capped at 500 videos). Available on Plus (up to 5 channels/request) and Pro (up to 50). ids accepts @handles, channel URLs, or UC… channel IDs. Listing videos is free; extracting their transcripts via /api/transcripts costs credits as usual.

curl -X POST __BASE__/api/channels \
  -H "Authorization: Basic YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ids": ["@mkbhd"]}'
const res = await fetch("__BASE__/api/channels", {
  method: "POST",
  headers: {
    "Authorization": "Basic YOUR_API_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ ids: ["@mkbhd"] }),
});
console.log((await res.json()).results);
import requests

res = requests.post(
    "__BASE__/api/channels",
    headers={"Authorization": "Basic YOUR_API_TOKEN", "Content-Type": "application/json"},
    json={"ids": ["@mkbhd"]},
)
print(res.json()["results"])

Response:

{
  "results": [
    {
      "id": "@mkbhd",
      "channelId": "UCBJycsmduvYEL83R_U4JriQ",
      "title": "…",
      "videoCount": 500,
      "truncated": true,
      "videos": [{ "id": "…", "title": "…", "author": "…" }, …]
    }
  ]
}

Automation tools

Plug VidWords into no-code automation platforms — import a template, set your API token, and you're running.

🔗

n8n workflow

Ready-to-use n8n workflow for automated transcript extraction. Import and configure with your API token.

Download
🧩

Make blueprint

Ready-to-use Make.com blueprint for automated transcript extraction. Import and configure with your API token.

Download

Errors

HTTPCodeMeaning
400bad_requestMalformed body, too many ids, or invalid input
401unauthorizedMissing or invalid API token
402insufficient_creditsNot enough credits left this month
403plan_requiredEndpoint needs a higher plan (channels API)
429rate_limitedToo many requests — honor Retry-After

Per-video errors inside results: invalid_id, no_transcript, transcripts_disabled, video_unavailable, age_restricted, fetch_failed.