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

Быстрый старт API

В этом руководстве выполняются два серверных запроса:

  1. Загрузка основной информации и темы площадки.
  2. Загрузка первой страницы опубликованных игр.

Подготовка функции для запросов

Сохраните данные доступа в переменных окружения сервера. Для выполнения примера требуется Node.js 18 или новее.

const apiUrl = process.env.GAME_PLATFORM_API_URL ??
'https://api.gamepush.com/gs/api/graphql';
const apiKey = process.env.GAME_PLATFORM_API_KEY;
const platformId = process.env.GAME_PLATFORM_ID;

if (!apiKey || !platformId) {
throw new Error('Missing GamePush platform credentials');
}

async function requestGamePush(query, variables = {}) {
const response = await fetch(apiUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Game-Platform-Api-Key': apiKey,
'X-Game-Platform-ID': platformId,
},
body: JSON.stringify({ query, variables }),
});

if (!response.ok) {
throw new Error(`GamePush API returned HTTP ${response.status}`);
}

const payload = await response.json();
if (payload.errors?.length) {
throw new Error(payload.errors[0].message);
}

if (payload.data.result.__typename === 'Problem') {
throw new Error(payload.data.result.message);
}

return payload.data.result;
}

Получение конфигурации площадки

PlatformFetchGamePlatform использует площадку, определённую по заголовкам запроса.

query PlatformConfig($lang: Lang) {
result: PlatformFetchGamePlatform {
__typename
... on Problem {
message
}
... on GamePlatform {
id
name(lang: $lang)
title(lang: $lang)
icon
mainPageId
supportedLanguages
styles {
colors {
primary
accent
contentBackground
}
}
}
}
}

Переменные:

{
"lang": "RU"
}

Передайте эту операцию и её переменные в requestGamePush. Функция вернёт успешную ветку GamePlatform или выбросит ошибку для Problem.

Успешный результат имеет следующую структуру:

{
"__typename": "GamePlatform",
"id": 42,
"name": "Пример игровой площадки",
"title": "Играйте в онлайн-игры",
"icon": "https://cdn.example.com/platform-icon.webp",
"mainPageId": "home",
"supportedLanguages": ["EN", "RU"],
"styles": {
"colors": {
"primary": "#7c3aed",
"accent": "#f59e0b",
"contentBackground": "#ffffff"
}
}
}

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

Вызовите FetchGamesOnGamePlatform с параметром isPublished: true. Максимальный размер страницы — 25 игр.

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

Переменные:

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

Используйте ID выбранной площадки и в X-Game-Platform-ID, и в gamePlatformId. Серверный контекст доступа к площадке определяется API-ключом. Для загрузки следующей страницы увеличивайте offset на limit. При withMetrics: false поле GameViewsList.count содержит количество элементов в текущем ответе, а не общее число найденных игр. Остановите загрузку, когда items.length станет меньше limit.

Успешный ответ имеет следующую структуру:

{
"data": {
"result": {
"__typename": "GameViewsList",
"count": 1,
"items": [
{
"id": 101,
"name": "Пример игры",
"description": "Краткое описание игры",
"icon": "https://cdn.example.com/game.webp",
"cover": "https://cdn.example.com/game-cover.webp",
"platformUrl": "https://games.example.com/game/example-game",
"rating": 8.4
}
]
}
}
}

Следующий шаг

Отобразите каждый элемент как карточку игры и используйте platformUrl в качестве ссылки на игру. Затем перейдите к разделам «Площадка» и «Игры», где приведены полные запросы конфигурации, контента и метрик.