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.
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-requestoffset,fps,plain,sdhandclean. 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#
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());
});