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
| Field | Type | Description |
|---|---|---|
count | number | Total matches in the feed. |
live | number | Matches currently live. |
upcoming | number | Matches not started yet. |
updated | string | ISO timestamp the feed was built. |
matches | array | The list of matches (below). |
Match object
| Field | Type | Description |
|---|---|---|
id | number | Stable index — use it in embed URLs. |
title | string | Match title. |
category / league | string | Sport and competition. |
status | string | Live or Upcoming. |
start_time | string | Kickoff time (for upcoming matches). |
poster | string | Poster image URL. |
teams | object | home / away, each with name + logo. |
page_url | string | Full watch page on OVOStreams. |
embed_url | string | Default iframe embed (Server 1). |
servers | array | Each 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.