Публичное API
Бесплатное REST API RMTHub для FunPay и G2G: игры, категории, фильтры поиска и статистика продавцов. Без ключа API.
Соглашения
Базовый URL: https://rmthub.com
Все эндпоинты v1 живут под префиксом /api/v1/. Текущая мажорная версия — в URL.
Большинство эндпоинтов работают без авторизации. Чтобы получить более высокий лимит, передавайте API-ключ в `Authorization: Bearer rmthub_live_…`. Создать ключ можно в /profile/api-keys после входа.
Все ответы — JSON с Content-Type: application/json.
Каждый успешный ответ обёрнут в { data, meta }. В data лежит ресурс, в meta — версия API, которой собран ответ, и временная метка fetchedAt.
В ответах с ошибкой возвращается { error: "<сообщение>" }. 4xx — ошибки клиента, 5xx — сервера. В 5xx дополнительно может прийти поле details для отладки.
Числовые поля возвращаются как JSON-числа (без строкового обрамления).
Версионирование
Авторизация и лимиты
Эндпоинты v1 работают без авторизации и ограничены лимитами на IP (30 запросов в минуту и 500 в сутки). Если передать корректный заголовок `Authorization: Bearer rmthub_live_…`, применяются лимиты ключа — задаются для каждого ключа, по умолчанию 60/мин и 1 000/сут, изменяются администратором. В каждом ответе приходят заголовки `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`, а в 429-ответах ещё и `Retry-After` (в секундах). Невалидный или отозванный ключ возвращает 401.
Анонимный (без API-ключа)
В минуту: 30 / IP
В сутки: 500 / IP
С авторизацией по ключу
В минуту: per-key (default 60)
В сутки: per-key (default 1 000)
Эндпоинты
задокументировано: 10
FunPay
/api/v1/funpay/users/{username}
Публичный профиль продавца FunPay и статистика по отзывам — выручка, разбивка по периодам и играм, агрегаты за всё время.
Параметры пути
usernameИмя пользователя FunPay, URL-encoded. Должно быть от 1 до 100 символов.
Пример запроса
GET /api/v1/funpay/users/Roymi HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/funpay/users/Roymi'Пример ответа
{
"data": {
"user": {
"id": 7771234,
"username": "Roymi",
"url": "https://funpay.com/users/7771234/",
"avatarUrl": "https://funpay.com/img/users/7771234/avatar.jpg",
"reviewsCount": 482,
"banned": false,
"status": "active",
"registrationDate": "15 Mar 2020"
},
"stats": {
"totalAmount": 12450,
"totalReviews": 482,
"averagePerReview": 25.83,
"gamesPlayed": 6,
"byTimePeriod": {
"thisMonth": { "amount": 320, "count": 14 },
"lastMonth": { "amount": 410, "count": 18 }
},
"byGame": {
"Valorant": { "amount": 4200, "count": 160 },
"CS2": { "amount": 3800, "count": 140 }
},
"byTimePeriodWithPercentage": [
{ "period": "thisMonth", "amount": 320, "count": 14, "percentage": 3 },
{ "period": "lastMonth", "amount": 410, "count": 18, "percentage": 3 }
],
"byGameWithPercentage": [
{ "game": "Valorant", "amount": 4200, "count": 160, "percentage": 34 },
{ "game": "CS2", "amount": 3800, "count": 140, "percentage": 30 }
]
},
"timeGroupedStats": [
{
"key": "thisMonth",
"label": "This month",
"amount": 320,
"count": 14,
"percentage": 3
}
]
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-06-07T19:09:00.000Z"
}
}Описание полей ответа — data.user
idЧисловой идентификатор FunPay, возвращается как JSON-число.
usernameОтображаемое имя.
urlКаноничный URL профиля на FunPay.
avatarUrlАбсолютный URL аватара пользователя на FunPay или null, если недоступен.
reviewsCountОбщее число отзывов, возвращается как JSON-число.
bannedПризнак блокировки на FunPay.
statusПроизвольный текстовый статус от FunPay.
registrationDateДата регистрации, указанная на профиле FunPay (например, "15 Mar 2020"), или null, если недоступна.
Описание полей ответа — data.stats
totalAmountВыручка за всё время, в USD-эквиваленте (целые единицы).
totalReviewsОбщее число отзывов.
averagePerReviewtotalAmount / totalReviews, округлено до 2 знаков.
gamesPlayedКоличество разных игр, на которые у пользователя есть отзывы.
byTimePeriodСловарь периодов (thisMonth, lastMonth, 2MonthsAgo, …) → { amount, count }.
byGameСловарь игр → { amount, count }.
byTimePeriodWithPercentageТо же, что byTimePeriod, плюс percentage (целое 0–100, округлено).
byGameWithPercentageТо же, что byGame, плюс percentage (целое 0–100, округлено).
Описание полей ответа — data.timeGroupedStats[]
keyСтабильный машинный идентификатор (thisMonth, lastMonth, …).
labelЧеловекочитаемая подпись периода (на английском).
amountСуммарная выручка в этом бакете.
countЧисло отзывов в этом бакете.
percentageДоля 0–100 от выручки за всё время.
Описание полей ответа — meta
versionВерсия API, которой собран ответ (например, "1.0").
fetchedAtISO-8601 UTC — момент, когда сервер собрал ответ.
Ошибки
{"error":"Username parameter is required"}КогдаПараметр username пустой.
{"error":"Username cannot be empty"}КогдаПараметр username состоит только из пробелов.
{"error":"Username too long"}КогдаДлина username превышает 100 символов.
{"error":"User \"<name>\" not found"}КогдаПользователь с таким username не найден в базе.
{"error":"Internal server error","details":"…"}КогдаЛюбая другая ошибка — поле details добавляется, если базовое исключение — Error.
/api/v1/funpay/users/{username}/top-positions
Позиции продавца FunPay в топах — глобальные и по играм, с разбивкой по периодам.
Параметры пути
usernameИмя пользователя FunPay, URL-encoded. Должно быть от 1 до 100 символов.
Параметры запроса
localeЗначение ru — русские подписи периодов; по умолчанию английский.
Пример запроса
GET /api/v1/funpay/users/Russper/top-positions HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/funpay/users/Russper/top-positions'Пример ответа
{
"data": {
"user": {
"id": 9221663,
"username": "Russper",
"url": "https://funpay.com/users/9221663/"
},
"summary": {
"bestGlobalRank": 5,
"gameCount": 3,
"positionCount": 12
},
"global": [
{
"period": "all_time",
"periodLabel": "All time",
"rank": 5,
"totalAmount": 12450,
"reviewsCount": 482,
"rankChange": { "diff": 2, "previousRank": 7 },
"revenueChange": { "diff": 320, "percent": 3 }
}
],
"byGame": [
{
"game": "Valorant",
"period": "this_month",
"periodLabel": "This month",
"rank": 1,
"totalAmount": 4200,
"reviewsCount": 160,
"rankChange": null,
"revenueChange": null
}
],
"lastUpdated": "2026-07-14T10:00:00.000Z"
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-07-14T12:00:00.000Z",
"total": 12
}
}Описание полей ответа — data.user
idЧисловой идентификатор FunPay.
usernameОтображаемое имя.
urlКаноничный URL профиля на FunPay.
Описание полей ответа — data.summary
bestGlobalRankЛучшая (наименьшая) глобальная позиция в топе или null.
gameCountЧисло разных игр с позицией в топе продавцов.
positionCountОбщее число записей (глобальные + по играм).
Описание полей ответа — data.global[]
periodСтабильный ключ (all_time, this_month, last_month, …).
periodLabelЧеловекочитаемая подпись периода.
rankПозиция в топе (1 — первое место).
totalAmountВыручка в этом бакете топа (USD-эквивалент).
reviewsCountЧисло отзывов в этом бакете.
rankChangeИзменение ранга: diff (положительное — улучшение) и previousRank; null, если нет данных.
revenueChangeИзменение выручки: diff и percent; null, если нет данных.
Описание полей ответа — data.byGame[]
periodСтабильный ключ (all_time, this_month, last_month, …).
periodLabelЧеловекочитаемая подпись периода.
rankПозиция в топе (1 — первое место).
totalAmountВыручка в этом бакете топа (USD-эквивалент).
reviewsCountЧисло отзывов в этом бакете.
rankChangeИзменение ранга: diff (положительное — улучшение) и previousRank; null, если нет данных.
revenueChangeИзменение выручки: diff и percent; null, если нет данных.
gameНазвание игры (только в byGame).
gameSlugURL-slug игры (только в byGame). Опускается, если неизвестен.
Описание полей ответа — data
lastUpdatedISO-8601 UTC — момент последней пересборки индекса.
Описание полей ответа — meta
versionВерсия API, которой собран ответ (например, "1.0").
fetchedAtISO-8601 UTC — момент, когда сервер собрал ответ.
totalРавно data.summary.positionCount.
Ошибки
{"error":"Username parameter is required"}КогдаПараметр username пустой.
{"error":"Username cannot be empty"}КогдаПараметр username состоит только из пробелов.
{"error":"Username too long"}КогдаДлина username превышает 100 символов.
{"error":"No top positions found for user \"<name>\""}КогдаУ продавца нет проиндексированных позиций в топах.
{"error":"Internal server error"}КогдаНеожиданная ошибка сервера.
/api/v1/funpay/leaderboards/sellers
Пагинированный топ продавцов FunPay — те же рейтинги, что на /funpay?category=top_sellers. Поддерживает all-time и скользящие периоды, фильтр по игре, забаненных и поиск. Cache-Control: public, max-age=3600.
Параметры запроса
localeПодписи и URL RMTHub. Без параметра — английский.
periodall_time, banned, this_month, month_ago, 2_months_ago, 3_months_ago, 4_months_ago, 5_months_ago, 6_months_ago, 7_months_ago, 8_months_ago, 9_months_ago, 10_months_ago, 11_months_ago, year_ago, 2_years_ago, 3_years_ago, 4_years_ago, 5_years_ago, 6_years_ago, 7_years_ago, 8_years_ago, 9_years_ago
Срез рейтинга. См. допустимые значения — те же ключи, что filter на /funpay.
gameSlugФильтр по игре (slug из GET /api/v1/funpay/games). Без параметра — все игры. Игнорируется при period=banned.
gameКак gameSlug, но по отображаемому имени. Не используйте вместе с gameSlug.
pageНомер страницы, с 1.
limitСтрок на странице. По умолчанию 20, максимум 100.
searchПоиск по username или числовому id FunPay.
Пример запроса
GET /api/v1/funpay/leaderboards/sellers HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/funpay/leaderboards/sellers?period=all_time&page=1&limit=20'Пример ответа
{
"data": {
"period": "all_time",
"periodLabel": "All time",
"game": null,
"sellers": [
{
"rank": 1,
"id": 7771234,
"username": "Roymi",
"url": "https://funpay.com/users/7771234/",
"profileUrl": "https://rmthub.com/en/funpay/7771234",
"totalAmount": 12450,
"reviewsCount": 482
}
],
"sourceUrl": "https://rmthub.com/en/funpay?category=top_sellers&filter=all_time&page=1"
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-07-14T12:00:00.000Z",
"total": 842,
"page": 1,
"limit": 20
}
}Описание полей ответа — data
periodСтабильный ключ выбранного периода.
periodLabelЧеловекочитаемая подпись периода для locale.
gameФильтр игры { name, slug } или null для всех игр.
sellersСтроки продавцов на этой странице.
sourceUrlКаноническая страница RMTHub /funpay для этого рейтинга.
Описание полей ответа — data.game
nameНазвание игры.
slugURL-safe slug игры.
Описание полей ответа — data.sellers[]
rankМесто в рейтинге (1 — первое).
idЧисловой id FunPay.
usernameОтображаемое имя.
urlКанонический URL профиля FunPay.
profileUrlСтраница продавца на RMTHub для выбранного locale.
totalAmountДоход в этом срезе (USD-экв.).
reviewsCountЧисло отзывов в этом срезе.
Описание полей ответа — meta
versionВерсия API (например "1.0").
fetchedAtISO-8601 UTC время формирования ответа.
totalВсего продавцов по всем страницам.
pageТекущая страница.
limitРазмер страницы в этом ответе.
Ошибки
{"error":"Invalid period \"<period>\""}КогдаНеизвестный period.
{"error":"limit must be between 1 and 100"}Когдаpage или limit вне диапазона.
{"error":"search must be at most 100 characters"}Когдаsearch длиннее 100 символов.
{"error":"Game \"<slug>\" not found"}КогдаgameSlug не найден в каталоге.
{"error":"No leaderboard data for period \"<period>\""}КогдаНет предрасчитанного рейтинга для этой комбинации.
{"error":"Rate limit exceeded…"}КогдаПревышен лимит запросов в минуту или в сутки.
{"error":"Internal server error"}КогдаВнутренняя ошибка сервера.
/api/v1/funpay/leaderboards/games
Пагинированный топ игр FunPay — те же рейтинги, что на /funpay?category=top_games. category=top_new_games — свежие хиты. Cache-Control: public, max-age=3600.
Параметры запроса
localeПодписи и URL RMTHub. Без параметра — английский.
categoryКакой список игр вернуть. new_games — alias для top_new_games.
periodall_time, this_month, month_ago, 2_months_ago, 3_months_ago, 4_months_ago, 5_months_ago, 6_months_ago, 7_months_ago, 8_months_ago, 9_months_ago, 10_months_ago, 11_months_ago, year_ago, 2_years_ago, 3_years_ago, 4_years_ago, 5_years_ago, 6_years_ago, 7_years_ago, 8_years_ago, 9_years_ago
Период для top_games. При category=top_new_games всегда all_time.
pageНомер страницы, с 1.
limitСтрок на странице. По умолчанию 20, максимум 100.
searchПоиск по названию игры.
Пример запроса
GET /api/v1/funpay/leaderboards/games HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/funpay/leaderboards/games?period=all_time&page=1&limit=20'Пример ответа
{
"data": {
"category": "top_games",
"categoryLabel": "Top games",
"period": "all_time",
"periodLabel": "All time",
"games": [
{
"rank": 1,
"game": "Valorant",
"gameSlug": "valorant",
"totalAmount": 42000,
"reviewsCount": 1600
}
],
"sourceUrl": "https://rmthub.com/en/funpay?category=top_games&filter=all_time&page=1"
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-07-14T12:00:00.000Z",
"total": 120,
"page": 1,
"limit": 20
}
}Описание полей ответа — data
categoryКлюч категории: top_games или top_new_games.
categoryLabelЧеловекочитаемая подпись категории.
periodСтабильный ключ периода.
periodLabelЧеловекочитаемая подпись периода.
gamesСтроки игр на этой странице.
sourceUrlКаноническая страница RMTHub /funpay для этого рейтинга.
Описание полей ответа — data.games[]
rankМесто в рейтинге (1 — первое).
gameНазвание игры.
gameSlugURL-safe slug или null.
totalAmountСумма отзывов по игре в срезе (USD-экв.).
reviewsCountЧисло отзывов в срезе.
Описание полей ответа — meta
versionВерсия API (например "1.0").
fetchedAtISO-8601 UTC время формирования ответа.
totalВсего игр по всем страницам.
pageТекущая страница.
limitРазмер страницы в этом ответе.
Ошибки
{"error":"Invalid period \"<period>\""}КогдаНеизвестный period для top_games.
{"error":"category top_new_games only supports period all_time"}Когдаtop_new_games с period отличным от all_time.
{"error":"limit must be between 1 and 100"}Когдаpage или limit вне диапазона.
{"error":"No leaderboard data for period \"<period>\""}КогдаНет предрасчитанного рейтинга для периода.
{"error":"Rate limit exceeded…"}КогдаПревышен лимит запросов в минуту или в сутки.
{"error":"Internal server error"}КогдаВнутренняя ошибка сервера.
/api/v1/funpay/games
Список всех игр FunPay в каталоге RMTHub с категориями лотов (subfolders). Полный каталог отдаётся одним ответом — удобно для выбора игры, фильтров или офлайн-кэша. Ответы содержат Cache-Control: public, max-age=3600.
Пример запроса
GET /api/v1/funpay/games HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/funpay/games'Пример ответа
{
"data": {
"games": [
{
"id": "https://funpay.com/en/lots/3486/",
"slug": "abyss-of-dungeons",
"name": "Abyss of Dungeons",
"nameRu": "Бездна подземелий",
"url": "https://funpay.com/en/lots/3486/",
"lastUpdated": "2026-06-18",
"subfolders": [
{ "name": "Accounts", "nameRu": "Аккаунты", "url": "https://funpay.com/en/lots/3486/" },
{ "name": "Top Up", "nameRu": "Пополнение", "url": "https://funpay.com/en/lots/3487/" },
{ "name": "Other", "url": "https://funpay.com/en/lots/3490/" }
]
}
]
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-06-18T14:00:00.000Z",
"total": 855
}
}Описание полей ответа — data.games[]
idСтабильный идентификатор — URL лотов FunPay (совпадает с url). Используйте при ссылке на игру в других API RMTHub.
slugURL-безопасный slug из названия игры. Используйте в GET /api/v1/funpay/games/{gameSlug}/fees и /filters.
nameОтображаемое название на FunPay (английский каталог).
nameRuНеобязательное русское название из скрапленного RU-каталога FunPay. Пропускается, если недоступно или совпадает с name.
urlКаноничный URL лотов игры на FunPay.
lastUpdatedUTC-календарная дата (YYYY-MM-DD) последнего обновления скraper'ом, или null.
subfoldersКатегории лотов внутри игры.
subfolders[].nameНазвание категории (например, Accounts, Top Up).
subfolders[].nameRuНеобязательное русское название категории. Пропускается, если недоступно или совпадает с subfolders[].name.
subfolders[].urlURL страницы лотов этой категории на FunPay.
Описание полей ответа — meta
versionВерсия API, которой собран ответ (например, "1.0").
fetchedAtISO-8601 UTC — момент, когда сервер собрал ответ.
totalЧисло игр в data.games.
Ошибки
{"error":"Rate limit exceeded…"}КогдаПревышен лимит запросов в минуту или в сутки.
{"error":"Internal server error"}КогдаНеожиданная ошибка сервера.
/api/v1/funpay/games/{gameSlug}/fees
Комиссии FunPay по категориям лотов внутри одной игры. Только по slug игры (~3–15 строк). Не массовая выгрузка всей коллекции fees. Cache-Control: public, max-age=3600.
Параметры пути
gameSlugURL-безопасный slug (например, abyss-of-dungeons). От 1 до 200 символов.
Пример запроса
GET /api/v1/funpay/games/abyss-of-dungeons/fees HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/funpay/games/abyss-of-dungeons/fees'Пример ответа
{
"data": {
"game": {
"id": "https://funpay.com/en/lots/3486/",
"slug": "abyss-of-dungeons",
"name": "Abyss of Dungeons",
"nameRu": "Бездна подземелий",
"url": "https://funpay.com/en/lots/3486/",
"lastUpdated": "2026-06-18",
"subfolders": [
{ "name": "Accounts", "nameRu": "Аккаунты", "url": "https://funpay.com/en/lots/3486/" },
{ "name": "Top Up", "nameRu": "Пополнение", "url": "https://funpay.com/en/lots/3487/" }
]
},
"fees": [
{
"subfolder": "Accounts",
"subfolderRu": "Аккаунты",
"subfolderUrl": "https://funpay.com/en/lots/3486/",
"feePercent": 14.89,
"lastUpdated": "2026-06-17"
}
]
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-06-18T14:00:00.000Z",
"total": 3
}
}Описание полей ответа — data.game
idСтабильный идентификатор — URL лотов FunPay (совпадает с url).
slugURL-безопасный slug из названия игры.
nameОтображаемое название на FunPay (английский каталог).
nameRuНеобязательное русское название из скрапленного RU-каталога FunPay. Пропускается, если недоступно или совпадает с name.
urlКаноничный URL лотов игры на FunPay.
lastUpdatedUTC-календарная дата (YYYY-MM-DD) последнего обновления, или null.
subfoldersКатегории лотов внутри игры.
subfolders[].nameНазвание категории (например, Accounts, Top Up).
subfolders[].nameRuНеобязательное русское название категории. Пропускается, если недоступно или совпадает с subfolders[].name.
subfolders[].urlURL страницы лотов этой категории на FunPay.
Описание полей ответа — data.fees[]
subfolderНазвание категории (например, Accounts, Top Up).
subfolderRuНеобязательное русское название категории. Пропускается, если недоступно или совпадает с subfolder.
subfolderUrlURL страницы лотов этой категории на FunPay или null.
feePercentКомиссия FunPay в процентах (например, 14.89 = 14.89%), или null если ещё не собрано.
lastUpdatedUTC-календарная дата (YYYY-MM-DD) последнего сбора, или null.
Описание полей ответа — meta
versionВерсия API, которой собран ответ (например, "1.0").
fetchedAtISO-8601 UTC — момент, когда сервер собрал ответ.
totalЧисло строк в data.fees.
Ошибки
{"error":"Game \"<slug>\" not found"}КогдаИгра с таким slug не найдена в каталоге.
{"error":"Internal server error"}КогдаНеожиданная ошибка сервера.
/api/v1/funpay/games/{gameSlug}/filters
Собранные опции фильтров лотов FunPay — серверы, регионы, типы предметов и т.д. Без category возвращает data.categories по категориям лотов; с category — data.selects только для указанной категории. Cache-Control: public, max-age=86400.
Параметры пути
gameSlugURL-безопасный slug (например, lineage-2-free). От 1 до 200 символов.
Параметры запроса
categoryНеобязательное название категории лотов (например, Adena). Должно совпадать с категорией из каталога игры.
Пример запроса
GET /api/v1/funpay/games/lineage-2-free/filters HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/funpay/games/lineage-2-free/filters'Пример ответа
{
"data": {
"game": {
"id": "https://funpay.com/en/chips/10/",
"slug": "lineage-2-free",
"name": "Lineage 2 Free",
"nameRu": "Lineage 2 Бесплатный",
"url": "https://funpay.com/en/chips/10/",
"lastUpdated": "2026-07-03",
"subfolders": [
{ "name": "Adena", "nameRu": "Адена", "url": "https://funpay.com/en/chips/10/" },
{ "name": "Accounts", "nameRu": "Аккаунты", "url": "https://funpay.com/en/lots/11/" },
{ "name": "Items", "nameRu": "Предметы", "url": "https://funpay.com/en/lots/3/" }
]
},
"categories": {
"Adena": {
"Server": ["Aden.land x20", "Asterios.tm Prime x1"]
},
"Accounts": {
"Server": ["Aden.land x20"],
"Race": ["Human", "Elf"]
},
"Items": {
"Item type": ["Armor Sets", "Weapon", "Armor"]
}
},
"categoryNamesRu": {
"Adena": "Адена",
"Accounts": "Аккаунты",
"Items": "Предметы"
},
"categoriesRu": {
"Adena": {
"Сервер": ["Aden.land x20", "Asterios.tm Prime x1"]
},
"Accounts": {
"Сервер": ["Aden.land x20"],
"Раса": ["Human", "Elf"]
},
"Items": {
"Тип предмета": ["Armor Sets", "Weapon", "Armor"]
}
}
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-07-03T14:00:00.000Z",
"total": 3
}
}Описание полей ответа — data.game
idСтабильный идентификатор — URL лотов FunPay (совпадает с url).
slugURL-безопасный slug из названия игры.
nameОтображаемое название на FunPay (английский каталог).
nameRuНеобязательное русское название из скрапленного RU-каталога FunPay. Пропускается, если недоступно или совпадает с name.
urlКаноничный URL лотов игры на FunPay.
lastUpdatedUTC-календарная дата (YYYY-MM-DD) последнего обновления, или null.
subfoldersКатегории лотов внутри игры.
subfolders[].nameНазвание категории (например, Accounts, Top Up).
subfolders[].nameRuНеобязательное русское название категории. Пропускается, если недоступно или совпадает с subfolders[].name.
subfolders[].urlURL страницы лотов этой категории на FunPay.
Описание полей ответа — data
categoriesЕсли category не передан. Словарь «категория лота → фильтры» (английские ключи).
categoryNamesRuЕсли category не передан и доступны русские названия категорий. Карта «английское название категории → русское».
categoriesRuЕсли category не передан и есть скрапленные RU-фильтры. Та же структура, что categories, с русскими названиями измерений фильтров.
categoryЕсли передан query-параметр category. Эхо запрошенной категории лота (английское название).
categoryRuЕсли передан category и доступно русское название категории.
selectsЕсли передан query-параметр category. Английское имя фильтра → опции для этой категории.
selectsRuЕсли передан category и есть скрапленные RU-фильтры. Русское имя фильтра → опции.
Описание полей ответа — meta
versionВерсия API, которой собран ответ (например, "1.0").
fetchedAtISO-8601 UTC — момент, когда сервер собрал ответ.
totalБез category: число категорий в data.categories. С category: число опций в data.selects.
Ошибки
{"error":"Category \"<name>\" not found for this game"}Когдаcategory не совпадает ни с одной категорией лотов этой игры.
{"error":"Game \"<slug>\" not found"}КогдаИгра с таким slug не найдена в каталоге.
{"error":"Internal server error"}КогдаНеожиданная ошибка сервера.
G2G
/api/v1/g2g/games
Список всех игр на маркетплейсе G2G — от World of Warcraft и CS2 до мобильных проектов. У каждой игры есть slug для запросов категорий и фильтров. Порядок по популярности (число офферов), данные обновляются из индекса RMTHub. Бесплатно, без ключа API.
Пример запроса
GET /api/v1/g2g/games HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/g2g/games'Пример ответа
{
"data": {
"games": [
{
"name": "World of Warcraft",
"slug": "world-of-warcraft",
"lastUpdated": "2026-06-18"
}
]
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-06-18T14:00:00.000Z",
"total": 1200
}
}Описание полей ответа — data.games[]
nameНазвание игры, как на G2G и в маркет-индексе RMTHub.
slugURL-безопасный slug. Используйте в GET /api/v1/g2g/games/{gameSlug}/categories и /filters.
lastUpdatedДата последнего обновления индекса (YYYY-MM-DD, UTC) или null.
Описание полей ответа — meta
versionВерсия API, которой собран ответ.
fetchedAtISO-8601 UTC — момент сборки ответа.
totalЧисло игр в data.games.
Ошибки
{"error":"Rate limit exceeded…"}КогдаПревышен лимит запросов в минуту или сутки.
{"error":"Internal server error"}КогдаНеожиданная ошибка сервера.
/api/v1/g2g/games/{gameSlug}/categories
Что можно купить по игре на G2G: золото, аккаунты, предметы, буст и другие услуги. Для каждой категории — ссылка на страницу G2G и id для запроса фильтров.
Параметры пути
gameSlugURL-безопасный slug игры (как в эндпоинте списка игр).
Пример запроса
GET /api/v1/g2g/games/world-of-warcraft/categories HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/g2g/games/world-of-warcraft/categories'Пример ответа
{
"data": {
"game": {
"slug": "world-of-warcraft",
"name": "World of Warcraft",
"lastUpdated": "2026-06-18"
},
"categories": [
{
"seoTerm": "wow-gold",
"label": "Game coins",
"marketingTitle": "WoW Gold",
"url": "https://www.g2g.com/categories/wow-gold"
}
]
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-06-18T14:00:00.000Z",
"total": 4
}
}Описание полей ответа — data.game
nameНазвание игры, как на G2G и в маркет-индексе RMTHub.
slugURL-безопасный slug. Используйте в GET /api/v1/g2g/games/{gameSlug}/categories и /filters.
lastUpdatedДата последнего обновления индекса (YYYY-MM-DD, UTC) или null.
Описание полей ответа — data.categories[]
seoTermId категории для эндпоинта фильтров (например, wow-gold, wow-item).
labelКраткая метка (Game coins, Accounts и т. п.).
marketingTitleМаркетинговое название на английском или null.
urlКанонический URL категории G2G.
Описание полей ответа — meta
versionВерсия API.
fetchedAtISO-8601 UTC — момент сборки ответа.
totalЧисло категорий в data.categories.
Ошибки
{"error":"Game \"<slug>\" not found"}КогдаИгра с таким slug не найдена.
{"error":"Internal server error"}КогдаНеожиданная ошибка сервера.
/api/v1/g2g/games/{gameSlug}/filters
Те же выпадающие фильтры, что видит покупатель на G2G: серверы, типы предметов, виды буста и вложенные варианты (например, тип оружия → класс персонажа). Один запрос возвращает все категории игры; региональные категории включают все рынки (EU, US и т. п.).
Параметры пути
gameSlugURL-безопасный slug игры (как в эндпоинте списка игр).
Пример запроса
GET /api/v1/g2g/games/world-of-warcraft/filters HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/g2g/games/world-of-warcraft/filters'Пример ответа
{
"data": {
"game": {
"slug": "world-of-warcraft",
"name": "World of Warcraft",
"lastUpdated": "2026-06-18"
},
"categories": {
"wow-gold": {
"regions": [
{
"code": "EU",
"name": "Europe",
"relations": [
{
"label": "Server",
"options": [{ "value": "Aegwynn [EU] - Alliance" }]
}
]
}
]
},
"wow-boosting-service": {
"relations": [
{
"label": "Service Type",
"options": [{ "value": "Powerleveling" }]
}
]
}
}
},
"meta": {
"version": "1.0",
"fetchedAt": "2026-06-18T14:00:00.000Z",
"total": 42
}
}Описание полей ответа — data.game
nameНазвание игры, как на G2G и в маркет-индексе RMTHub.
slugURL-безопасный slug. Используйте в GET /api/v1/g2g/games/{gameSlug}/categories и /filters.
lastUpdatedДата последнего обновления индекса (YYYY-MM-DD, UTC) или null.
Описание полей ответа — data
categoriesОбъект id категории (seoTerm) → фильтры. Ключи совпадают с эндпоинтом категорий.
Описание полей ответа — data.categories.*
regionsДля региональных категорий (голда, предметы, аккаунты). По записи на каждый рынок.
relationsДля категорий без регионального разделения (например буст).
Описание полей ответа — data.categories.*.regions[]
codeКод региона (EU, US и т. п.).
nameОтображаемое название (Europe, United States и т. п.).
relationsИзмерения фильтров для этого региона.
Описание полей ответа — data.categories.*.relations[]
labelНазвание измерения (Item Type, Server и т. п.).
optionsДоступные значения для этого измерения.
Описание полей ответа — data.categories.*.relations[].options[]
valueОтображаемая метка.
optionsВложенные подопции для групповых фильтров (например типы буста); для конечных значений опускается.
Описание полей ответа — meta
versionВерсия API.
fetchedAtISO-8601 UTC — момент сборки ответа.
totalОбщее число верхнеуровневых опций фильтров по всем категориям и регионам.
Ошибки
{"error":"Game \"<slug>\" not found"}КогдаИгра с таким slug не найдена.
{"error":"Internal server error"}КогдаНеожиданная ошибка сервера.