Wyzie Subs

Transcribe from URL#

Transcribe from URL is a Pro feature: free keys get 403 Paid feature. It costs the same as Wyzie Transcribe: 6,000 requests per started 30 minutes of audio, so 24 hours is 288,000. You see the cost before you pay, with the probe or dryRun.

Give Wyzie a link and the server fetches the audio itself. No upload, no ffmpeg on your side. It works with a direct audio or video file, an HLS or DASH stream, and pages on a few sites such as YouTube, Vimeo and Twitch. Media up to 24 hours long is accepted. It runs as a job, and you poll for the result or get a webhook.

Check the Cost First#

GET /transcribe/url/probe checks a link. It is free, it needs any valid API key, and it is limited to 30 calls a minute per key. It answers with the length, the title and what the job would cost. Add speakers=1, sounds=1 or translate=Spanish to include those extras in the estimate.

curl "https://sub.wyzie.io/transcribe/url/probe?url=https://example.com/episode-12.mp3&key=YOUR_KEY"
{
  "supported": true,
  "duration": 3612,
  "title": "Episode 12",
  "estimateRequests": 12000
}

A link that does not work is not an error. You get 200 with supported set to false and a short reason. Direct files answer in about 2.5 seconds. Pages on sites that need yt-dlp can take up to 20 seconds.

{
  "supported": false,
  "duration": null,
  "title": null,
  "estimateRequests": null,
  "reason": "This site blocks server-side fetching"
}

You can also send dryRun: true to POST /transcribe/url. It answers { duration, title, estimateRequests } and charges nothing.

The API: POST /transcribe/url#

POST /transcribe/url takes a JSON body. Everything is checked before you are charged.

curl -X POST "https://sub.wyzie.io/transcribe/url" \
  -H "Content-Type: application/json" \
  -d '{"key":"YOUR_KEY","url":"https://example.com/episode-12.mp3","format":"srt","language":"en"}'
FieldExampleDescription
keyYOUR_KEYA Pro API key. Required.
urlhttps://example.com/episode-12.mp3A public http or https link. Links to private or local addresses are refused. Required.
formatsrtsrt (default), vtt, ass, sub, sbv, ttml, txt or json. See Output Formats below.
languageenThe spoken language as a two-letter ISO 639-1 code. Leave it out to detect it from the audio. Required with speakers.
speakerstrue1 to label who is speaking, such as [Speaker 1]. Needs language set to de, en, es, fr, hi, it, ja, nl, pt or ru. Costs 60,000 per 30 minutes.
soundstrue1 to add sound tags such as [Music] and [Applause] between speech (beta). Costs 100 more per started 30 minutes. It misses some sounds, such as doorbells and door slams. If it fails you still get the transcript and the 100 is refunded. Answers 503 before any charge if the classifier is unavailable. Not available for bulk.
translateSpanishA language to translate the subtitle into, such as Spanish or pt-BR. Adds a flat 25 requests.
cache00 keeps this audio out of the recognition cache: it is neither read from nor written to. See Recognition reuse below.
webhookhttps://example.com/wyzieAn https URL to call when the job ends. See Webhooks.
dryRuntruetrue to get the length, title and estimate without starting a job or charging anything.

The job is charged up front and answers 202 with the job id:

{
  "jobId": "5a29c3f6-4bfb-4f03-b429-4b4d935acdbd",
  "pollUrl": "https://sub.wyzie.io/transcribe/5a29c3f6-4bfb-4f03-b429-4b4d935acdbd",
  "estimateRequests": 12000,
  "duration": 3612
}

Poll GET /transcribe/{jobId}?key=YOUR_KEY every 10 seconds or so. It answers 202 until the subtitle is ready. The job and webhook payloads are the same as for Wyzie Transcribe. If a job fails, the charge is refunded.

Direct links to audio and video files work best. HLS (.m3u8) and DASH (.mpd) streams work too. For YouTube, Vimeo, Twitch and a few similar sites, Wyzie reads only the audio. Redirects are followed, but every address the server connects to must be public.

YouTube-like sites may block server-side fetching. They can ask for a sign-in or a bot check, or answer 403. When that happens the probe says This site blocks server-side fetching, and a job that hits it fails and is refunded. Wyzie does not try to get around these blocks. If a page is blocked, download the audio yourself and use Wyzie Transcribe.

Cost#

The price is 6,000 requests for each started 30 minutes of media, plus the same extras as Wyzie Transcribe for speaker labels, sounds and translation. If your balance is too short you get 402 before anything starts.

Each key can run 2 link jobs at once, and the server runs 4 at once. A job can download up to 3 GB and runs for at most 2 hours. A job that is running when the server restarts is refunded, so try again.

Errors
StatusMeaning
400A bad link, format, language or webhook. Private and local links are refused here.
401No key.
402Not enough requests left for this file's length and options.
403A free key, or an invalid one.
413The media is longer than 24 hours.
422The link cannot be used. The body has a reason, such as a blocked site.
429You already have 2 link jobs running, or you probed more than 30 times a minute.
503The server is busy with link jobs. Nothing was charged. Try again soon.

The server keeps the audio only while the job runs and deletes it when the job ends.