← Back to matches

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

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
idstringStable content-based id — use it in embed URLs.
titlestringMatch title.
category / leaguestringSport and competition.
statusstringLive or Upcoming.
start_timestringKickoff time, ISO 8601 UTC (for upcoming matches).
posterstringPoster image URL.
teamsobjecthome / away, each with name + logo.
page_urlstringFull watch page on PPVTV.ICU.
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://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.