Choose between the basic or enriched endpoint depending on how much you need:
curl https://vyla-api.pages.dev/api/movie?id=550
The enriched /api/stream/movie endpoint fans out across all 8 providers and returns vlc_url, ffmpeg_command, and download_url pre-built on every source.
2
Play an HLS source with HLS.js
<video id="player" controls></video><script src="https://cdn.jsdelivr.net/npm/hls.js@1.5.13/dist/hls.min.js"></script><script>async function loadMovie(tmdbId) { const res = await fetch(`https://vyla-api.pages.dev/api/stream/movie?id=${tmdbId}`); const data = await res.json(); if (!data.success || !data.sources.length) return; const source = data.sources[0]; const video = document.getElementById("player"); const proxyBase = "https://vyla-api.pages.dev/api/proxy?url="; if (source.type === "hls" && Hls.isSupported()) { const hls = new Hls(); hls.loadSource(proxyBase + encodeURIComponent(source.url)); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, () => video.play()); } else { video.src = source.url; video.play(); }}loadMovie(550);</script>
/api/stream/movie returns vlc_url on every source — a pre-built proxy URL with headers already encoded. You can pass it directly to HLS.js without any additional encoding.
The proxy automatically rewrites all m3u8 segment URLs so the entire HLS stream is tunneled — not just the manifest. You get one URL and the rest is handled transparently.