download

download api

One link to download any movie, show or anime

Link to a ready download page for any TMDB or IMDb ID: every quality as MP4 or MKV, subtitles as SRT or built into the file. Or use the JSON API.

Try it

Look up a title to see its downloads. Nothing downloads until you press a link.

Request

Results show up here.

What you get

Every link is a plain file download, ready for a browser, a phone or a download manager

  • Every qualityEach resolution the source has, best first, with its size.
  • MP4 or MKVThe original video and audio, copied into one file without re-encoding.
  • Starts at onceThe file is put together while it downloads, so the first bytes arrive in about a second.
  • SubtitlesDownload them as SRT or VTT, or have them built into the file.
  • Whole seasonsOne request lists every episode of a season with its links.
  • Safe linksWith an API key set, the links you hand out are signed and expire on their own.

Download page

Link your visitors here. They get a page with a button for every quality and every subtitle, and each button downloads straight away. Shows have season and episode pickers and previous / next buttons.

/movie/{id}
/tv/{id}/{season}/{episode}

The API links show the same page when opened in a browser, while fetch(), apps and curl get JSON from them. Add ?json=1 to always get JSON.

<a href="/api/download/movie/786892">Download</a>

Options carry over: ?audio=dub prefers the dubbed anime, ?lang=en keeps one audio language and ?sub=en builds English subtitles into the video by default.

API documentation

Use TMDB IDs (1396) or IMDb IDs (tt0903747).

Movie downloads

Returns the qualities, sizes, audio tracks, subtitles and file links as JSON.

/api/download/movie/{id}

Episode downloads

The ID, season and episode number are required. Anime works like any show.

/api/download/tv/{id}/{season}/{episode}

A whole season

Every episode of the season with its links. Links are resolved when they are opened, so this answers instantly.

/api/download/tv/{id}/{season}

Direct file links

Open these to download the file straight away. Without a quality, the best one is used.

/download/movie/{id}?quality=1080p
/download/tv/{id}/{season}/{episode}?format=mkv&sub=en
<a href="/download/movie/786892?quality=720p" download>Download</a>

Parameters

Work on both the /api/download and /download routes. Start with ? and separate more with &.

ParameterExampleWhat it does
quality720pbest (default), worst or a height. If that height is missing, the next one down is used
formatmkvmp4 (default) or mkv
suben,esBuild subtitles in these languages into the file
langenKeep only audio tracks in these languages (all by default)
audiodubPrefer the English-dubbed version of an anime
key…Your API key, when the server needs one (or the x-api-key header)

Response

size is an estimate from the stream's bitrate. Files are streamed while they are built, so the exact size isn't known in advance and pausing then resuming a download starts it again.

{
  "media": { "tmdbId": 786892, "imdbId": "tt12037194", "type": "movie", "title": "Furiosa: A Mad Max Saga", "year": "2024", "poster": "…", "backdrop": "…" },
  "page": "/movie/786892",
  "filename": "Furiosa A Mad Max Saga (2024)",
  "duration": 8891.7,
  "audio": [{ "lang": "en", "label": "English", "codecs": "mp4a.40.2", "channels": 2 }],
  "downloads": [
    {
      "quality": "1080p", "width": 1920, "height": 1080, "videoCodec": "avc1.640028",
      "bitrate": 4200000, "size": 4668142500, "sizeLabel": "4.35 GB",
      "mp4": "/download/movie/786892?quality=1080p",
      "mkv": "/download/movie/786892?quality=1080p&format=mkv"
    }
  ],
  "subtitles": [
    { "label": "English", "lang": "en", "source": "moviebox", "srt": "/dash-proxy/sub/….srt?dl=…", "vtt": "…" }
  ],
  "expires": null
}

Errors come back as { "error": "…" } with 400 (bad link), 401/403 (key or link not valid), 404 (no source), 429 (too many downloads from one address) or 503 (server busy).

Access

When the server has an API_KEY, the JSON routes need it. The file links they return are signed for that one title and expire after a few hours, so you can give them to your visitors without sharing your key.

const res = await fetch('/api/download/movie/786892', {
  headers: { 'x-api-key': process.env.DOWNLOAD_API_KEY }
});
const { downloads } = await res.json();
// downloads[0].mp4 → https://…/download/movie/786892?quality=1080p&exp=…&sig=…