API for Webmasters
Embed PPVTV.ICU'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://august.ppvtv.icu/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. Upstream stream sources
are not exposed — matches can only be played through the
embed_url iframe below.
Example response
{
"source": "PPVTV",
"updated": "2026-09-07T16:00:00.000Z",
"playlist_updated": "2026-09-07T15:58:00.000Z",
"count": 83,
"live": 7,
"upcoming": 76,
"matches": [
{
"id": "f1hktmyl",
"title": "Al-Ittihad Kalba vs Al-Wasl FC",
"category": "Football",
"league": "UAE Pro League",
"status": "Live",
"start_time": "2026-09-07T16:00:00.000Z",
"poster": "",
"teams": {
"home": { "name": "Al-Ittihad Kalba", "logo": "" },
"away": { "name": "Al-Wasl FC", "logo": "" }
},
"page_url": "https://august.ppvtv.icu/watch.html?match=f1hktmyl",
"embed_url": "https://august.ppvtv.icu/embed.html?match=f1hktmyl",
"servers": [
{ "name": "Server 1", "embed_url": "https://august.ppvtv.icu/embed.html?match=f1hktmyl&server=0" },
{ "name": "Server 2", "embed_url": "https://august.ppvtv.icu/embed.html?match=f1hktmyl&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 | string | Stable content-based id — 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, ISO 8601 UTC (for upcoming matches). |
poster | string | Poster image URL. |
teams | object | home / away, each with name + logo. |
page_url | string | Full watch page on PPVTV.ICU. |
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://august.ppvtv.icu/embed.html?match=f1hktmyl&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://august.ppvtv.icu/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 content-based and stay constant while the match
is listed (including its transition from upcoming to live), so embed URLs
keep resolving as the feed updates. Refresh matches.json
periodically (every 30–60s) to pick up newly live matches; once a match
has ended its id stops resolving.