Build a "Where to Watch" feature in 50 lines with the StreamWatchHub API The article introduces StreamWatchHub, a new API that consolidates streaming service and live football broadcaster data across 10 countries into a single REST endpoint with a consistent schema, available on RapidAPI with a free tier of 1,000 calls per month. It demonstrates how to build a production-ready "where to watch" feature using roughly 50 lines of Node.js code and a small React component, requiring only one API call per title to retrieve offers with monetization types. The API covers movies, series, and sports matches, and the team is evaluating additional features like a recommendation endpoint while seeking feedback on how to expose a confidence score. Most teams shipping a "where can I watch X?" feature run into the same set of problems: - JustWatch does not offer a public API. - TMDB watch-providers covers the major markets only, without rent prices or deep links. - Live sports availability requires a separate broadcaster feed. - Platform names, regional catalogs, and deep-link formats all need to be reconciled. StreamWatchHub consolidates this into a single REST endpoint and one consistent schema, covering every streaming service plus live football broadcasters across 10 countries. The API is now live on RapidAPI https://rapidapi.com/kavela-kavela-default/api/streamwatchhub-movies-series/pricing with a free tier 1,000 calls/month , so it can be evaluated without a payment method. This post walks through wiring a production-ready "where to watch" feature in roughly 50 lines of Node.js plus a small React component. What the API returns A single call per title, with the monetization type flagged on every offer: curl "https://streamwatchhub.p.rapidapi.com/v1/search?q=the+bear&country=US" \ -H "X-RapidAPI-Key: $KEY" \ -H "X-RapidAPI-Host: streamwatchhub.p.rapidapi.com" Response trimmed : { "results": { "tmdb id": 136315, "title": "The Bear", "type": "series", "year": 2022, "offers": { "platform": "hulu", "type": "flatrate", "url": "https://hulu.com/series/..." }, { "platform": "disney", "type": "flatrate", "url": "https://disneyplus.com/..." }, { "platform": "apple", "type": "rent", "price": "$2.99", "url": "https://tv.apple.com/..." } } } No per-platform SDKs, no scraping fallbacks. The same response shape applies to movies, series, and football matches — sports responses substitute kickoff at and broadcasters for offers . 1. Sign up and obtain an API key - Visit the RapidAPI listing https://rapidapi.com/kavela-kavela-default/api/streamwatchhub-movies-series/pricing and select the free plan. - Copy the issued RapidAPI key and export it: export RAPIDAPI KEY=... 2. A minimal Node client js // swh.js const HOST = "streamwatchhub.p.rapidapi.com"; const BASE = https://${HOST}/v1 ; export async function whereToWatch query, country = "US" { const url = new URL ${BASE}/search ; url.searchParams.set "q", query ; url.searchParams.set "country", country ; const res = await fetch url, { headers: { "X-RapidAPI-Key": process.env.RAPIDAPI KEY, "X-RapidAPI-Host": HOST, }, } ; if res.ok throw new Error SWH ${res.status} ; return res.json ; } No client library is required. The full surface is seven GET endpoints /search , /title/{id}/offers , /series/{id}/season/{n}/offers , /match/{id}/broadcasters , /fixtures , /platforms , /changes . 3. A drop-in React component js import { useEffect, useState } from "react"; import { whereToWatch } from "./swh"; export function WhereToWatch { title, country = "US" } { const data, setData = useState null ; const err, setErr = useState null ; useEffect = { whereToWatch title, country .then setData .catch setErr ; }, title, country ; if err return