Wyzie Subs

Intro to Wyzie Subs#

Wyzie Subs is a subtitle scraping API with a free tier. There are two ways to make requests to the API: using our NPM package or directly fetching the Wyzie API itself. I recommend using our package, but some may find the types cumbersome. In order to use the API, you must first make that decision.

An API key is required for all requests. Get a free key at sub.wyzie.io/redeem (email verification, 1,000 requests/day). For higher usage, Pro and top-up plans are available. See the API Keys page for details.
We strongly recommend the NPM package if you are familiar with TypeScript or JavaScript
Uptime and incidents: sub.wyzie.io/status and the Status API. News about the API and its plans: sub.wyzie.io/news.
Not sure which plan, services or add-ons you need? Answer five quick questions and get a setup that fits.
Need help or can't find something? Ask Wyzie, or contact support.

What Else Wyzie Subs Does#

Beyond search and download, a few other things are worth knowing about:

  • Wyzie Synced: line a subtitle up to your video from a speech timestamp list or the audio itself, up to a whole 4K file (Pro, 5 requests).
  • Download options: a second language under each line with dual=<lang>, or per-request offset, fps, plain, sdh and clean. See Direct Fetching.
  • AI Translation: get any subtitle in 80+ languages on demand. 1 request on any key, free keys included, the same as a download.
  • Status API: uptime and per-provider health as JSON, for your own status page or monitoring.
  • Wyzie Transcribe: subtitles for any audio or video, such as podcasts, YouTube videos and lectures, by speech recognition (Pro, 6,000 requests per 30 minutes). Label who is speaking, translate the result, or do up to 50 files at once.
  • Fix Subtitles: correct wrong words, re-time and add missing lines of a subtitle by listening to the video (Pro, 6,000 requests per 30 minutes).
  • Search by Quote: remember a line but not the title? Find the movie or episode it is said in (free on a free key, 1 request on Pro).
  • Best match: send the video's file name and hash with a search and get the subtitle that fits that exact file first, with a match score.
  • Webhooks for Transcribe, Fix Subtitles and bulk jobs, and browser-safe keys you can use in a web page.
  • Extract Subtitles: pull the subtitle tracks out of an MKV or MP4 you already have (1 request per track, any key).
  • Batch search for up to 50 titles in one call, and Usage and Balance for your balance, a breakdown and a low-balance webhook.
  • Clients and Tools: Python, Go and an MCP server, an OpenAPI description, and a live API Playground.

Search and download each cost 1 request. A batch search costs 1 per title, extracting a subtitle track 1, AI translation 1 on any key, and a Wyzie Synced sync 5. A quote search is free on a free key and costs 1 on Pro, Wyzie Transcribe and Fix Subtitles cost 6,000 per 30 minutes of audio, and GET /usage is free. See API Keys for free vs. Pro limits.

Protecting Your API Key#

Real incident: we have seen developers paste their key directly into a streaming site's frontend JavaScript. Within hours, an unrelated party scraped it out of the JS bundle and used it until the daily limit or paid balance was exhausted. Quota lost this way is not refundable and is treated as the key owner's responsibility under our Terms.

Your API key should be kept private and never appear in:

  • Browser JavaScript (anything served to a script tag)
  • Mobile app binaries (Android/iOS, including obfuscated ones)
  • Browser extensions
  • Electron / desktop apps distributed to end users
  • Public Git repositories, gists, paste sites, or screenshots

If the key reaches an end user's machine, treat it as public. There are two safe patterns:

Option 1: Use Wyzie Worker#

Wyzie Worker is a lightweight Cloudflare Worker proxy that injects your API key server-side. Deploy it to Cloudflare Workers and set two secrets: NITRO_API_TOKEN (your Wyzie API key) and NITRO_WORKER_KEY (a secret you choose). Every request to the worker must send Authorization: Bearer <NITRO_WORKER_KEY>; without it the worker answers 401, and if NITRO_WORKER_KEY is not set it refuses every request with 503. The worker key must stay server-side too, so call the worker from your own backend, never from browser or app code. The worker forwards each request to sub.wyzie.io with your API key attached.

Your backend → your-worker.workers.dev/search?id=286217
               Authorization: Bearer <NITRO_WORKER_KEY>
Worker       → sub.wyzie.io/search?id=286217&key=<NITRO_API_TOKEN>

Option 2: Build Your Own Proxy#

If you'd rather not use Wyzie Worker, you can build a simple server-side proxy in any framework. The idea is the same: your backend receives requests from your client, appends the API key, and forwards them to sub.wyzie.io.

// Example: a simple proxy endpoint
const API_KEY = process.env.WYZIE_API_KEY;
 
app.get('/subtitles', async (req, res) => {
  const params = new URLSearchParams(req.query);
  params.set('key', API_KEY);
  const response = await fetch(`https://sub.wyzie.io/search?${params}`);
  res.json(await response.json());
});