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.
- [Wyzie Transcribe](/subs/usage/transcribe): subtitles for any audio or video, such as podcasts, YouTube videos and lectures, by speech recognition (Pro, 10 requests per 30 minutes).
Search and download each cost 1 request, a Wyzie Synced sync costs 5, AI translation costs 25, and Wyzie Transcribe costs 10 per 30 minutes of audio. 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());
});