Bookmark Mirrors @ STREAMFREE.LINK | Join Our Discord

StreamFree API

No account or API key needed.

Embedding a stream

Every stream can be dropped straight into an iframe pointed at /embed/{category}/{stream_key}, like this:

<iframe
    src="https://streamfree.top/embed/soccer/ghana-vs-england"
    width="100%"
    height="480"
    allow="fullscreen; picture-in-picture"
    allowfullscreen
    frameborder="0">
</iframe>

Don't try to sandbox it.

Finding what's live

If you don't want to hardcode stream keys, GET /api/v1/streams returns everything that's currently up, each one already carrying an embed_url. Add ?category=soccer to filter it down to one category:

fetch("https://streamfree.top/api/v1/streams?category=soccer")
    .then(r => r.json())
    .then(data => {
        data.streams.forEach(stream => {
            console.log(stream.name, stream.embed_url);
        });
    });
{
  "count": 1,
  "streams": [
    {
      "name": "Ghana vs England",
      "category": "soccer",
      "league": "FIFA World Cup",
      "stream_key": "ghana-vs-england",
      "match_timestamp": 1782244800,
      "embed_url": "https://streamfree.top/embed/soccer/ghana-vs-england",
      "thumbnail_url": "https://streamfree.top/thumbnails/soccer_ghana-vs-england"
    }
  ]
}

Already know the key you're looking for? GET /api/v1/streams/{stream_key} does the same thing for a single stream, and returns a 404 if it's not live:

fetch("https://streamfree.top/api/v1/streams/ghana-vs-england")
    .then(r => r.json())
    .then(stream => console.log(stream.embed_url));
{
  "name": "Ghana vs England",
  "category": "soccer",
  "league": "FIFA World Cup",
  "stream_key": "ghana-vs-england",
  "match_timestamp": 1782244800,
  "embed_url": "https://streamfree.top/embed/soccer/ghana-vs-england",
  "thumbnail_url": "https://streamfree.top/thumbnails/soccer_ghana-vs-england"
}

And if you just need the list of category names to filter by, that's GET /api/v1/categories:

fetch("https://streamfree.top/api/v1/categories")
    .then(r => r.json())
    .then(data => console.log(data.categories));
{
  "categories": ["soccer", "basketball", "hockey", "combat", "baseball", "football", "racing", "tennis", "cricket"]
}

A couple of notes

match_timestamp is a unix timestamp. A stream goes up shortly before it and comes back down once the event ends, so a stream that embedded fine yesterday might 404 today. Also please don't poll this on every page load, cache it for a bit on your end, my server will thank you.