Logo of wyzie-docsWyzie Docs

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 store.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 the store: sub.wyzie.io/news.

What Else Wyzie Subs Does#

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

  • [Wyzie Synced](/subs/usage/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](/subs/usage/translate): translate any subtitle into 80+ languages on demand (Pro, 25 requests).
  • [Status API](/subs/usage/status): uptime and per-provider health as JSON, for your own status page or monitoring.

Search and download each cost 1 request, a Wyzie Synced sync costs 5, and AI translation costs 25. 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());
});