Partner docs
Import the Game Catalog
Add free HTML5 games to your website with a single iframe, or pull the whole catalog into your own game pages through a feed. The games are hosted and updated by PlayKovo, so you never upload or host game files.
Quick start
- Open the game catalog and click a game to see its details.
- Switch to the HTML tab and press Copy.
- Paste the code into the HTML editor of your page, blog post or CMS block, then publish.
- Optional: register your website so launches from your domain show up in the partner dashboard.
No account needed to embed
Games are not yours to claim
The iframe embed
Every game has a ready-made snippet. This is what it looks like for one game:
HTML
<div style="position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;background:#000;">
<iframe
src="https://playkovo.com/embed/rainbow-run"
title="Rainbow Run on PlayKovo"
style="position:absolute;inset:0;width:100%;height:100%;border:0;"
loading="lazy"
allow="fullscreen; autoplay; gamepad; pointer-lock"
allowfullscreen>
</iframe>
</div>| Part | What it does |
|---|---|
src | The hosted player. Keep the /embed/<slug> address exactly as copied so game updates and fixes reach your site automatically. |
aspect-ratio:16/9 | Keeps the game responsive: the box scales with the width of your page and holds a landscape shape. |
allow | Lets the game use fullscreen, sound, gamepads and pointer lock. Removing values can break controls. |
loading="lazy" | The game only loads when the visitor scrolls near it, which keeps your page fast. |
Do not add a referrer restriction
referrerpolicy="no-referrer" on the iframe. PlayKovo identifies your website from the referrer, and without it your launches cannot be counted in analytics.Sizing and portrait games
The default snippet is a 16:9 landscape box. Each game lists its orientation in the catalog (landscape, portrait or any) and its devices (desktop, mobile or all). Pick games that match the kind of visitors your site has.
For a portrait game, use a tall box and limit its width so it does not become huge on desktop:
HTML
<div style="position:relative;width:100%;max-width:420px;margin:0 auto;aspect-ratio:9/16;overflow:hidden;background:#000;">
<iframe src="https://playkovo.com/embed/GAME-SLUG" title="Game on PlayKovo"
style="position:absolute;inset:0;width:100%;height:100%;border:0;"
loading="lazy" allow="fullscreen; autoplay; gamepad; pointer-lock" allowfullscreen></iframe>
</div>Content Security Policy
Content-Security-Policy header, add frame-src https://playkovo.com (or your current PlayKovo domain), otherwise the browser blocks the game.JSON and XML feed
If you want to build your own game listing, or import games into a CMS, read the feed instead of copying games one by one. There is no API key.
Endpoints
GET https://playkovo.com/api/embed-games?format=json
GET https://playkovo.com/api/embed-games?format=xml- JSON is the default when
formatis missing or unknown. - The response is cached for 5 minutes. Fetching it more often than that returns the same data.
- The feed only contains games currently enabled for the catalog. Sync regularly and remove games from your site that disappear from the feed.
JSON response shape
JSON
{
"provider": "PlayKovo",
"count": 35,
"updatedAt": "2026-09-21T10:00:00.000Z",
"games": [
{
"id": "…",
"slug": "rainbow-run",
"title": "Rainbow Run",
"shortDescription": "…",
"thumbnailUrl": "https://assets.playkovo.com/…",
"coverUrl": "https://assets.playkovo.com/…",
"deviceSupport": "all",
"screenOrientation": "landscape",
"categories": ["arcade"],
"embedUrl": "https://playkovo.com/embed/rainbow-run",
"iframe": "<div style=…>…</div>"
}
]
}The XML feed has the same data: a <games> root with one <game> element per game, and <categories> and <tags> holding repeated child elements.
Terminal
curl "https://playkovo.com/api/embed-games?format=json" -o playkovo-games.jsonField reference
| Field | Type | Description |
|---|---|---|
id | string | Stable game ID. |
slug | string | URL name of the game. Use it as your own unique key. |
title | string | Display name. gameName holds the same value. |
shortDescription | string | One or two sentences, good for cards. |
description | string | Full description. |
instructions | string | How to play. |
controls | string | Keyboard, mouse or touch controls. |
thumbnailUrl | string | Card image. thumbnail and iconUrl currently point to the same file. |
coverUrl | string | Larger banner image. Falls back to the thumbnail when a game has no cover. |
deviceSupport | "all" | "desktop" | "mobile" | Devices the game supports. |
screenOrientation | "landscape" | "portrait" | "any" | Screen orientation the game is designed for. |
language | string | Game language code, for example en. |
categories | string[] | Category slugs. |
tags | string[] | Tag slugs. |
embedUrl | string | Address for your own iframe. |
iframe | string | Ready-made responsive snippet, same as in the catalog. |
gameUrl | string | The game page on PlayKovo. |
width / height | number | Suggested size, 960 × 540. |
Build your own game grid
This example loads the feed in the browser and shows every game as a card that opens the embed in a dialog. Adapt it to your framework.
JavaScript
<div id="games" style="display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px"></div>
<script>
fetch("https://playkovo.com/api/embed-games?format=json")
.then((response) => response.json())
.then(({ games }) => {
const root = document.getElementById("games");
for (const game of games) {
const card = document.createElement("a");
card.href = game.embedUrl;
card.target = "_blank";
card.innerHTML =
'<img src="' + game.thumbnailUrl + '" alt="" style="width:100%;border-radius:12px">' +
"<strong>" + game.title + "</strong>";
root.appendChild(card);
}
});
</script>For a real site, cache the feed on your server, sort or filter with categories, deviceSupport and screenOrientation, and render game.iframe on your own game page.
Analytics and tracking
Embeds work without registration. To see your own launches in the partner dashboard, register the website that hosts the games.
- Register your website with the exact domain that shows the iframe.
- Wait for review. Only reviewed domains are attached to your account.
- Keep the embed as copied. PlayKovo reads your domain from the referrer of the page containing the iframe.
- Open the dashboard to see the results. Numbers are read live each time you open it.
What the numbers mean
| Metric | Meaning |
|---|---|
| Game launches | How many times a visitor pressed Play on one of your embedded games. |
| Players reached | How many different browsers launched a game. Someone who plays five times counts once for that day, and the same person on two devices counts twice. |
Launches are counted only with cookie consent
Troubleshooting
| Problem | Check this |
|---|---|
| The game area is blank or shows a browser error | Your site's Content-Security-Policy may block it. Add frame-src https://playkovo.com. Also check that the code was pasted in an HTML block, not as plain text. |
| The game is too small or cut off | Keep the aspect-ratio wrapper. For portrait games use the tall version in the sizing section. |
| Sound or controls do not work | Keep the full allow attribute from the snippet. |
| No numbers in the dashboard | Make sure the domain is approved, the iframe has no referrerpolicy attribute, you have launched a game yourself with cookies accepted, then reload the dashboard. |
| A game stopped loading | It may have been removed from the catalog. Check the feed and replace it with another game. |
Need help?
Questions about embeds, website review or the catalog: partners@playkovo.com. The rules for using the catalog are in the Partner Terms.