MovieBox API Code Examples Ready-to-use examples for the MovieBox API — browse, search, video playback, TMDB enrichment (cast, genres, trailers, images, ratings, and more). Your API Key Active Paste your API key to authenticate the "Try" buttons and inject it into code examples.Get your key → sk_live_afb4c24ea8c44d30a06c67ecc67a8f85a46a0987c8d899bc Save Clear Try It Live Browse Content GET /api/moviebox?type=movies&per_page=5 Send GET /api/moviebox?type=series&per_page=5 Send GET /api/moviebox?type=movies&sort_by=vote_average&sort_order=desc&per_page=5 Send GET /api/moviebox?type=movies&sort_by=release_year&sort_order=desc&per_page=5 Send GET /api/moviebox/popular?type=movies Send GET /api/moviebox/popular?type=series Send GET /api/moviebox/trending Send Search GET /api/moviebox/search?q=money+heist&per_page=5 Send GET /api/moviebox/search?q=john+wick&type=movies&per_page=5 Send GET /api/moviebox/search?q=stranger+things&type=series&per_page=5 Send cURL cURL Examples Copy API_KEY="sk_live_afb4c24ea8c44d30a06c67ecc67a8f85a46a0987c8d899bc" BASE="https://api.splay.id" # ── List movies ── curl -H"Authorization: Bearer $API_KEY""$BASE/api/moviebox?type=movies&per_page=20" # ── List series ── curl -H"Authorization: Bearer $API_KEY""$BASE/api/moviebox?type=series&per_page=20" # ── List both (movies + series) ── curl -H"Authorization: Bearer $API_KEY""$BASE/api/moviebox?per_page=20" # ── Sort by rating (highest rated first) ── curl -H"Authorization: Bearer $API_KEY"\ "$BASE/api/moviebox?type=movies&sort_by=vote_average&sort_order=desc&per_page=20" # ── Sort by release year (newest first) ── curl -H"Authorization: Bearer $API_KEY"\ "$BASE/api/moviebox?type=movies&sort_by=release_year&sort_order=desc&per_page=20" # ── Popular movies / series / both ── curl -H"Authorization: Bearer $API_KEY""$BASE/api/moviebox/popular?type=movies" curl -H"Authorization: Bearer $API_KEY""$BASE/api/moviebox/popular?type=series" # ── Trending ── curl -H"Authorization: Bearer $API_KEY""$BASE/api/moviebox/trending" # ── Movie/series detail (all episodes + TMDB enrichment + signed video URLs) ── curl -H"Authorization: Bearer $API_KEY""$BASE/api/moviebox/DRAMA_ID" # ── Paginated episodes ── curl -H"Authorization: Bearer $API_KEY"\ "$BASE/api/moviebox/DRAMA_ID/episodes?page=1&per_page=50" # ── Search ── curl -H"Authorization: Bearer $API_KEY""$BASE/api/moviebox/search?q=money+heist" curl -H"Authorization: Bearer $API_KEY""$BASE/api/moviebox/search?q=stranger+things&type=series" JavaScript / TypeScript Browse & Search Copy const BASE ="https://api.splay.id"; const API_KEY ="sk_live_afb4c24ea8c44d30a06c67ecc67a8f85a46a0987c8d899bc"; const headers = { Authorization: `Bearer ${API_KEY}` }; // ── List movies (paginated) ── const res = await fetch(`${BASE}/api/moviebox?type=movies&per_page=20`, { headers }); const { data, meta } = await res.json(); console.log(`${meta.total} movies (page ${meta.page}/${meta.total_pages})`); data.forEach(m => console.log(`[${m.id}] ${m.title}`)); // ── Sort by TMDB rating (highest first) ── const topRated = await fetch( `${BASE}/api/moviebox?type=movies&sort_by=vote_average&sort_order=desc&per_page=20`, { headers } ); // ── Sort by release year (newest first) ── const newest = await fetch( `${BASE}/api/moviebox?type=movies&sort_by=release_year&sort_order=desc&per_page=20`, { headers } ); // ── Popular ── const { data: popularMovies } = await ( await fetch(`${BASE}/api/moviebox/popular?type=movies`, { headers }) ).json(); // ── Trending ── const { data: trending } = await ( await fetch(`${BASE}/api/moviebox/trending`, { headers }) ).json(); // ── Search ── const { data: results, meta: searchMeta } = await ( await fetch(`${BASE}/api/moviebox/search?q=money+heist&type=series`, { headers }) ).json(); console.log(`Found ${searchMeta.total} results`); Get Detail + Play Video Copy const BASE ="https://api.splay.id"; const API_KEY ="sk_live_afb4c24ea8c44d30a06c67ecc67a8f85a46a0987c8d899bc"; const headers = { Authorization: `Bearer ${API_KEY}` }; // ── Movie/Series detail (drama + episodes with signed URLs + TMDB data) ── const res = await fetch(`${BASE}/api/moviebox/DRAMA_ID`, { headers }); const { data: { drama, episodes } } = await res.json(); console.log(`${drama.title} — ${episodes.length} episodes`); // ── Video URLs — episode_index encoding: // Movie (se=0, ep=1) → 1 // S1E1 → 1001, S2E5 → 2005, S3E12 → 3012 const ep = episodes[0]; // video_url = primary (720p), signed HMAC-SHA256, 5min TTL console.log("Primary (720p):", ep.video_url); // qualities = all resolutions as JSON object console.log("360p:", ep.qualities?.["360p"]); // always available console.log("480p:", ep.qualities?.["480p"]); // always available console.log("720p:", ep.qualities?.["720p"]); // same as video_url console.log("1080p:", ep.qualities?.["1080p"]); // premium content // ── Pick best available quality ── const videoUrl = ep.qualities?.["1080p"] ?? ep.qualities?.["720p"] ?? ep.video_url ?? ep.qualities?.["480p"] ?? ep.qualities?.["360p"]; const video = document.querySelector("video"); if (video && videoUrl) { video.src = videoUrl; // direct MP4 — no HLS library needed video.play(); } // ── Subtitles (signed SRT URLs, 12+ languages) ── // subtitles: [{ lang, label, url }] for (const sub of ep.subtitles ?? []) { console.log(`[${sub.lang}] ${sub.label}: ${sub.url}`); } // ── Paginated episodes for a long series ── const { data: eps, meta } = await ( await fetch(`${BASE}/api/moviebox/DRAMA_ID/episodes?page=1&per_page=50`, { headers }) ).json(); console.log(`${meta.total} total episodes, showing ${eps.length}`); TMDB Enrichment Every drama includes a raw_data.tmdb field with full TMDB metadata — ratings, cast, crew, genres, trailers, images, keywords, production info, and more. JavaScript — using TMDB data Copy const { data: { drama } } = await ( await fetch(`${BASE}/api/dramas/DRAMA_ID`, { headers }) ).json(); const tmdb = drama.raw_data?.tmdb; if (!tmdb) { console.log("No TMDB data"); process.exit(0); } // ── Basic info ── console.log("Title:", drama.title); console.log("Original:", tmdb.original_title, `(${tmdb.original_language})`); console.log("Tagline:", tmdb.tagline); console.log("Year:", drama.raw_data?.release_year ?? tmdb.release_date?.slice(0,4)); console.log("Runtime:", tmdb.runtime,"min"); // e.g. 180 console.log("Rating:", tmdb.vote_average, `(${tmdb.vote_count} votes)`); console.log("Cert:", tmdb.certification); //"PG-13","R","TV-MA", etc. console.log("Status:", tmdb.status); //"Released","Ended","Returning Series" // ── Poster / backdrop images (TMDB CDN) ── const TMDB_IMG ="https://image.tmdb.org/t/p"; if (tmdb.poster_path) console.log("Poster 500px:", `${TMDB_IMG}/w500${tmdb.poster_path}`); if (tmdb.backdrop_path) console.log("Backdrop:", `${TMDB_IMG}/w1280${tmdb.backdrop_path}`); // Top backdrops (w1280, voted by quality) for (const img of tmdb.backdrops ?? []) { console.log(`Backdrop ${img.width}×${img.height}: ${TMDB_IMG}/w1280${img.file_path}`); } // ── Genres ── console.log("Genres:", (tmdb.genres ?? []).map(g => g.name).join(",")); // e.g."Action, Thriller, Crime" // ── Keywords ── console.log("Keywords:", (tmdb.keywords ?? []).map(k => k.name).join(",")); // e.g."heist, bank robbery, gang" // ── Cast (top 20) ── for (const actor of tmdb.cast ?? []) { console.log(`${actor.name} as ${actor.character}`); if (actor.profile_path) console.log("Photo:", `${TMDB_IMG}/w185${actor.profile_path}`); } // ── Crew ── console.log("Directors:", (tmdb.directors ?? []).map(d => d.name).join(",")); console.log("Writers:", (tmdb.writers ?? []).map(w => w.name).join(",")); console.log("Producers:", (tmdb.producers ?? []).map(p => p.name).join(",")); // ── Trailers (YouTube) ── const trailer = (tmdb.trailers ?? []).find(t => t.type ==="Trailer"&& t.site ==="YouTube"); if (trailer) console.log("Trailer:", `https://youtube.com/watch?v=${trailer.key}`); // ── Production ── console.log("Studios:", (tmdb.production_companies ?? []).map(c => c.name).join(",")); console.log("Countries:", (tmdb.production_countries ?? []).map(c => c.name).join(",")); console.log("Languages:", (tmdb.spoken_languages ?? []).map(l => l.english_name).join(",")); // ── Box office (movies only) ── if (tmdb.budget) console.log("Budget:", `$${(tmdb.budget / 1e6).toFixed(0)}M`); if (tmdb.revenue) console.log("Revenue:", `$${(tmdb.revenue / 1e6).toFixed(0)}M`); // ── Series-specific ── console.log("Seasons:", tmdb.number_of_seasons); console.log("Total eps:", tmdb.number_of_episodes); console.log("Networks:", (tmdb.networks ?? []).map(n => n.name).join(",")); // Netflix, HBO... console.log("Creators:", (tmdb.creators ?? []).map(c => c.name).join(",")); // ── Franchise / collection (movies) ── if (tmdb.collection) console.log("Collection:", tmdb.collection.name); // ── External IDs ── if (tmdb.imdb_id) console.log("IMDb:", `https://imdb.com/title/${tmdb.imdb_id}`); if (tmdb.tvdb_id) console.log("TVDB ID:", tmdb.tvdb_id); Build a movie card UI (React) Copy import type { Drama } from"./types"; const TMDB_IMG ="https://image.tmdb.org/t/p"; function MovieCard({ drama }: { drama: Drama }) { const tmdb = drama.raw_data?.tmdb; const year = drama.raw_data?.release_year ?? tmdb?.release_date?.slice(0, 4); const runtime = tmdb?.runtime ? `${Math.floor(tmdb.runtime / 60)}h ${tmdb.runtime % 60}m` : null; const genres = (tmdb?.genres ?? []).slice(0, 3).map(g => g.name); const trailer = (tmdb?.trailers ?? []).find( t => t.type ==="Trailer"&& t.site ==="YouTube" ); return (
{tmdb.tagline}
}{tmdb?.overview ?? drama.introduction}