Перейти к основному содержимому
🎉 GP CONF 2026: Конференция о рынке WEB-игр 👾 23 сентября | Подробнее

Игры

Для списков на витрине используйте запрос без метрик. Метрики запрашивайте отдельно только там, где нужна аналитика. Для страницы игры используйте запрос одной игры.

Получение опубликованных игр

Контекст выполнения: сервер площадки. Передавайте Content-Type, X-Game-Platform-Api-Key и X-Game-Platform-ID. API-ключ должен оставаться на сервере. Максимальное значение limit для этого запроса — 25.

query PublishedGames($input: FetchGamesOnGamePlatformInput!, $lang: Lang) {
result: FetchGamesOnGamePlatform(input: $input) {
__typename
... on Problem {
message
}
... on GameViewsList {
count
items {
id
name(lang: $lang)
icon(lang: $lang)
platformUrl(lang: $lang)
rating
}
}
}
}

Переменные:

{
"lang": "RU",
"input": {
"gamePlatformId": 42,
"isPublished": true,
"withMetrics": false,
"limit": 25,
"offset": 0
}
}

Успешный ответ:

{
"data": {
"result": {
"__typename": "GameViewsList",
"count": 1,
"items": [
{
"id": 101,
"name": "Пример игры",
"icon": "https://cdn.example.com/game.webp",
"platformUrl": "https://games.example.com/game/example-game",
"rating": 8.4
}
]
}
}
}

Для следующей страницы увеличивайте offset на limit. В GameViewsList поле count содержит количество элементов в текущем ответе, а не общее число найденных игр. Остановите загрузку, когда items.length станет меньше limit.

Чтобы искать по каталогу, добавьте filter.searchFilter:

{
"lang": "RU",
"input": {
"gamePlatformId": 42,
"isPublished": true,
"withMetrics": false,
"limit": 25,
"offset": 0,
"filter": {
"searchFilter": {
"search": "гонки",
"withDescriptions": true,
"withTags": true,
"withCategories": true,
"withKeyWords": true,
"lang": "RU"
}
}
}
}

Также можно передавать orientation, targetOS, sort и фильтры по данным проекта.

Получение игр с метриками

Контекст выполнения: сервер площадки. Передавайте Content-Type, X-Game-Platform-Api-Key и X-Game-Platform-ID. API-ключ должен оставаться на сервере. Максимальное значение limit для этого запроса — 25.

Ресурсоёмкая операция

withMetrics: true добавляет выборку и объединение заранее рассчитанной статистики для каждой игры. Операция трудоёмкая и предназначена прежде всего для аналитики, а не для использования в реальном времени на витрине. Для показа игр используйте запрос без метрик. Если метрики нужны в интерфейсе, запрашивайте их с сервера и кешируйте результат; не выполняйте этот запрос при каждой загрузке страницы.

Фильтры по статистике и функциям игр также могут потребовать дополнительной обработки метрик. Используйте их только при необходимости и кешируйте результат.

query GamesWithMetrics($input: FetchGamesOnGamePlatformInput!, $lang: Lang) {
result: FetchGamesOnGamePlatform(input: $input) {
__typename
... on Problem {
message
}
... on GameViewsWithMetricsList {
count
items {
game {
id
name(lang: $lang)
icon(lang: $lang)
platformUrl(lang: $lang)
rating
}
platformMetrics {
mau
dau
wau
averageOnline
playtime
retention1d
retention7d
retention30d
arppu
payingPlayersPercent
}
totalMetrics {
mau
dau
wau
}
}
}
}
}

Переменные:

{
"lang": "RU",
"input": {
"gamePlatformId": 42,
"isPublished": true,
"withMetrics": true,
"limit": 25,
"offset": 0
}
}

Успешный ответ:

{
"data": {
"result": {
"__typename": "GameViewsWithMetricsList",
"count": 1,
"items": [
{
"game": {
"id": 101,
"name": "Пример игры",
"icon": "https://cdn.example.com/game.webp",
"platformUrl": "https://games.example.com/game/example-game",
"rating": 8.4
},
"platformMetrics": {
"mau": 12000,
"dau": 1800,
"wau": 5400,
"averageOnline": 130.5,
"playtime": 18.2,
"retention1d": 0.314,
"retention7d": 0.128,
"retention30d": 0.041,
"arppu": 6.2,
"payingPlayersPercent": 1.7
},
"totalMetrics": {
"mau": 48000,
"dau": 7100,
"wau": 22000
}
}
]
}
}
}

platformMetrics содержит метрики игры на текущей white-label площадке. totalMetrics содержит общие метрики исходного проекта по всем его площадкам.

ПолеЗначение
dau, wau, mauАктивные игроки за дневной, недельный и месячный периоды.
averageOnlineСреднее количество одновременно находящихся в игре игроков.
playtimeСреднее время в игре на одного игрока, в секундах.
retention1d, retention7d, retention30dВозвращаемость игроков через 1, 7 и 30 дней в виде доли от 0 до 1.
arppuСредний доход на платящего игрока, в рублях.
payingPlayersPercentПроцент игроков площадки, совершивших покупку, от 0 до 100.

API возвращает заранее рассчитанную статистику, а не показатели в реальном времени. Не пересчитывайте её из данных каталога. Преобразуйте доли или секунды только на уровне отображения, если интерфейсу нужны проценты или длительность в удобном формате.

Получение страницы игры

Контекст выполнения: браузер витрины или сервер площадки. В браузере передавайте Content-Type, X-Game-Platform-ID, совпадающий Origin и credentials: 'include'; API-ключ не требуется и не должен попадать в публичный код.

query GamePage($input: FetchGameOnGamePlatformInput!, $lang: Lang) {
result: FetchGameOnGamePlatform(input: $input) {
__typename
... on Problem {
message
}
... on GameView {
id
projectId
provider
name(lang: $lang)
description(lang: $lang)
fullDescription(lang: $lang)
aboutDescription(lang: $lang)
howToPlayDescription(lang: $lang)
developerName(lang: $lang)
icon(lang: $lang)
cover(lang: $lang)
albumScreenshots(lang: $lang)
platformUrl(lang: $lang)
url
categories
tags
ageRestrictions
targetOS
rating
playersCount
seoSettings {
ogTitle(lang: $lang)
ogDescription(lang: $lang)
ogImage(lang: $lang)
}
}
}
}

Переменные:

{
"lang": "RU",
"input": {
"gamePlatformId": 42,
"gameId": 101
}
}

Структура успешного ответа:

{
"data": {
"result": {
"__typename": "GameView",
"id": 101,
"projectId": 501,
"provider": "GAMEPUSH",
"name": "Пример игры",
"categories": ["arcade"],
"tags": ["popular"],
"targetOS": ["Desktop", "Android"],
"rating": 8.4,
"playersCount": 3200
}
}
}

Используйте url как источник iframe игры, а platformUrl — как публичный маршрут витрины. Показывайте только контент, полученный для выбранного языка, а Problem обрабатывайте как отсутствие или недоступность игры.