Wyzie Subs

AI Subtitle Translation#

AI translation is in beta. While in beta the endpoint is free for every valid API key and does not consume your daily limit or paid balance. This will change once the feature is stable.

Wyzie can translate any subtitle into 80+ languages on the fly. Translations stream back as the model produces them, so playback can start within a second or two instead of waiting for the whole file. Results are cached for 30 days, so the second person who asks for the same translation gets it instantly.

Two Ways to Use It#

1. Pick a Language From a Search Response#

Every /search response now includes one extra entry per supported language with "ai": true and a url that points at /translate. Just treat the AI rows like any other subtitle row in your UI: when the user clicks one, fetch the URL.

{
  "id": "ai-es",
  "url": "https://sub.wyzie.io/translate?id=tt3659388&tk=...&target=Spanish",
  "format": "srt",
  "encoding": "UTF-8",
  "display": "Spanish",
  "language": "es",
  "source": "ai",
  "ai": true
}

The tk param is a short-lived signed token derived from the API key you passed to /search. It lets the translate endpoint authorise the request without exposing the raw key in the URL. You do not need to compute it yourself; just use the URL as-is.

If you want to hide the AI rows from your UI, filter them out:

const real = results.filter((r) => !r.ai);

2. Call /translate Directly#

GET https://sub.wyzie.io/translate?id=tt3659388&target=Spanish&key=YOUR_KEY
ParameterExampleDescription
id?id=tt3659388 or ?id=286217TMDB or IMDB ID (required).
target?target=SpanishTarget language as its full English name (e.g. Spanish, Japanese, Brazilian Portuguese) (required).
season & episode?season=1&episode=4For TV. Both must be present together.
key?key=YOUR_KEYYour API key. Use tk instead if you got the URL from /search.
tk?tk=<signed_token>Signed token returned by /search. Equivalent to key, but does not expose the raw key.

The response body is an SRT file streamed as text/plain; charset=utf-8. Useful response headers:

  • X-Cache: HIT-REDIS if served from cache, MISS if generated fresh.
  • X-Source-Language: language of the subtitle the translator used as input.
  • X-Target-Language: echo of your target param.
  • X-Source-Provider: which scraper supplied the source subtitle.

How It Works#

  1. Wyzie searches normal sources for an SRT subtitle, preferring English when available.
  2. The SRT is split into chunks of 50 cues and translated sequentially. Each chunk is cached individually as it completes.
  3. Output is streamed back to you cue-by-cue. Players that accept a streaming SRT body can start showing the first lines before the rest are done.
  4. The complete translation is cached in Redis for 30 days, keyed by id, season, episode, and target.

Supported Target Languages#

80+ languages including all major European, Asian, African, and Middle Eastern languages. Pass the English name (Spanish, not es). The list is also returned as ai: true rows in any /search response, which is the canonical source of truth.

Limitations#

  • AI translation needs an SRT source. Titles where every available subtitle is .ass, .vtt, or another format will return 404 No SRT found.
  • Translation quality depends on the source subtitle. A poorly-timed or mistyped source produces a poorly-timed or mistyped translation.
  • Some users may want to opt out of AI rows entirely. Filter on ai === false in your client.
  • The endpoint is free during beta. Once it leaves beta, requests will consume your normal API budget. We will announce the cutover in Discord before flipping it on.

Example#

curl "https://sub.wyzie.io/translate?id=tt3659388&target=Japanese&key=YOUR_KEY"

Same as a normal SRT download. Drop the body into any player that accepts SRT files.