Stream API

Supply a TMDB ID — get back playable HLS stream sources and subtitle tracks.

Endpoints

GET /api/healthz

Health check.

{ "status": "ok" }
GET /api/movie/:tmdbId

Returns working HLS stream sources and subtitle tracks for a movie. All sources are probed server-side before being included.

tmdbIdNumeric TMDB movie ID (path)
imdbIdIMDB ID — enables extra subtitle sources
noCache=1Force a fresh scrape
{
  "tmdbId": "557",
  "type": "movie",
  "sources": [
    {
      "provider": "Vault",
      "quality": "auto",
      "source": "https://your-api.com/api/m/Xk9pQr2mNbT4vLwZ",
      "type": "hls"
    }
  ],
  "subtitles": [
    { "language": "English", "languageCode": "eng", "url": "https://...", "format": "vtt" }
  ],
  "providers": ["Vault", "Relay"],
  "cachedAt": "2025-01-01T12:00:00.000Z",
  "fromCache": false
}
GET /api/tv/:tmdbId/:season/:episode

Returns working HLS stream sources and subtitle tracks for a TV episode.

tmdbIdNumeric TMDB series ID (path)
seasonSeason number (path)
episodeEpisode number (path)
imdbIdIMDB ID — enables extra subtitle sources
noCache=1Force a fresh scrape
GET /api/tv/1399/1/3
GET /api/m/:id

Manifest proxy. Fetches and returns a CORS-unlocked HLS manifest. Used internally by the source URLs returned from movie/TV endpoints. Short IDs expire after 3 hours — re-fetch the movie/TV endpoint to get fresh ones.

Configuration

PORT optional Port to listen on. Default: 5000
PUBLIC_URL optional Your public API base URL (e.g. https://api.example.com). Used to build source URLs correctly behind proxies.
CACHE_TTL_SECONDS optional How long to cache scraped results. Default: 1800 (30 min)
FEMBOX_TOKEN optional Adds a second provider (Vault) when set. Significantly increases available sources.