← Back to matches

API for Webmasters

Embed PPVTV.TOP's live sports on your own website. One public, read-only JSON endpoint gives you every match plus ready-to-use embed links.

Endpoint

GET https://www.streamtp.top/api/matches.json

Returns all current matches with metadata and embed URLs. CORS is open (Access-Control-Allow-Origin: *), so you can fetch it from the browser. Cached for ~30 seconds.

This is the only public endpoint. Raw stream files (.m3u8) are not exposed — streams can only be played through the embed_url iframe below.

Example response

{
  "source": "OVOStreams",
  "updated": "2026-06-13T12:00:00.000Z",
  "playlist_updated": "2026-06-13T11:58:00.000Z",
  "count": 12,
  "live": 5,
  "upcoming": 7,
  "matches": [
    {
      "id": 0,
      "title": "USA VS Paraguay | World Cup",
      "category": "Football",
      "league": "World Cup",
      "status": "Live",
      "start_time": "",
      "poster": "https://.../poster.jpg",
      "teams": {
        "home": { "name": "USA",      "logo": "https://.../usa.png" },
        "away": { "name": "Paraguay", "logo": "https://.../par.png" }
      },
      "page_url":  "https://ovostreams.top/watch.html?match=0",
      "embed_url": "https://ovostreams.top/embed.html?match=0",
      "servers": [
        { "name": "Server 1", "embed_url": "https://ovostreams.top/embed.html?match=0&server=0" },
        { "name": "Server 2", "embed_url": "https://ovostreams.top/embed.html?match=0&server=1" }
      ]
    }
  ]
}

Fields

Top level

FieldTypeDescription
countnumberTotal matches in the feed.
livenumberMatches currently live.
upcomingnumberMatches not started yet.
updatedstringISO timestamp the feed was built.
matchesarrayThe list of matches (below).

Match object

FieldTypeDescription
idnumberStable index — use it in embed URLs.
titlestringMatch title.
category / leaguestringSport and competition.
statusstringLive or Upcoming.
start_timestringKickoff time (for upcoming matches).
posterstringPoster image URL.
teamsobjecthome / away, each with name + logo.
page_urlstringFull watch page on OVOStreams.
embed_urlstringDefault iframe embed (Server 1).
serversarrayEach server: name + its own embed_url.

Embedding a match

Drop the embed_url into an <iframe>. Use a specific server's embed_url to pin a server, or the match-level embed_url for the default.

<iframe
  src="https://ovostreams.top/embed.html?match=0&server=0"
  width="100%" height="480"
  frameborder="0"
  allow="autoplay; encrypted-media; fullscreen; picture-in-picture"
  allowfullscreen>
</iframe>

Build a grid from the API

const res = await fetch('https://ovostreams.top/api/matches.json');
const { matches } = await res.json();

for (const m of matches.filter(x => x.status === 'Live')) {
  const iframe = document.createElement('iframe');
  iframe.src = m.embed_url;
  iframe.width = '100%';
  iframe.height = 480;
  iframe.allow = 'autoplay; encrypted-media; fullscreen; picture-in-picture';
  iframe.allowFullscreen = true;
  document.body.appendChild(iframe);
}
Match ids are positional within the current feed and can shift as matches start and end. For live grids, refresh matches.json periodically (every 30–60s) rather than hard-coding ids.