Публичное API

Публичное REST API RMTHub для получения рыночных данных и статистики FunPay: цены, предложения и аналитика.
v1

Соглашения

  • Базовый URL: https://rmthub.com

  • Все эндпоинты v1 живут под префиксом /api/v1/. Текущая мажорная версия — в URL.

  • Для эндпоинтов на этой странице авторизация не требуется.

  • Все ответы — JSON с Content-Type: application/json.

  • Каждый успешный ответ обёрнут в { data, meta }. В data лежит ресурс, в meta — версия API, которой собран ответ, и временная метка fetchedAt.

  • В ответах с ошибкой возвращается { error: "<сообщение>" }. 4xx — ошибки клиента, 5xx — сервера. В 5xx дополнительно может прийти поле details для отладки.

  • Числовые поля возвращаются как JSON-числа (без строкового обрамления).

Версионирование

Эндпоинты

задокументировано: 1

GET

/api/v1/funpay/users/{username}

Найти пользователя FunPay по username и вернуть его публичный профиль — выручку, отзывы с разбивкой по периодам и играм, агрегаты за всё время.


Параметры пути
ИмяТипОбязательноПо умолчаниюОписание
usernamestringдаИмя пользователя 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
ПолеТипПримечания
idnumberЧисловой идентификатор FunPay, возвращается как JSON-число.
usernamestringОтображаемое имя.
urlstringКаноничный URL профиля на FunPay.
avatarUrlstring | nullАбсолютный URL аватара пользователя на FunPay или null, если недоступен.
reviewsCountnumberОбщее число отзывов, возвращается как JSON-число.
bannedbooleanПризнак блокировки на FunPay.
statusstringПроизвольный текстовый статус от FunPay.
registrationDatestring | nullДата регистрации, указанная на профиле FunPay (например, "15 Mar 2020"), или null, если недоступна.
Описание полей ответаdata.stats
ПолеТипПримечания
totalAmountnumberВыручка за всё время, в USD-эквиваленте (целые единицы).
totalReviewsnumberОбщее число отзывов.
averagePerReviewnumbertotalAmount / totalReviews, округлено до 2 знаков.
gamesPlayednumberКоличество разных игр, на которые у пользователя есть отзывы.
byTimePeriodobjectСловарь периодов (thisMonth, lastMonth, 2MonthsAgo, …) → { amount, count }.
byGameobjectСловарь игр → { amount, count }.
byTimePeriodWithPercentagearrayТо же, что byTimePeriod, плюс percentage (целое 0–100, округлено).
byGameWithPercentagearrayТо же, что byGame, плюс percentage (целое 0–100, округлено).
Описание полей ответаdata.timeGroupedStats[]
ПолеТипПримечания
keystringСтабильный машинный идентификатор (thisMonth, lastMonth, …).
labelstringЧеловекочитаемая подпись периода (на английском).
amountnumberСуммарная выручка в этом бакете.
countnumberЧисло отзывов в этом бакете.
percentagenumberДоля 0–100 от выручки за всё время.
Описание полей ответаmeta
ПолеТипПримечания
versionstringВерсия API, которой собран ответ (например, "1.0").
fetchedAtstringISO-8601 UTC — момент, когда сервер собрал ответ.
Ошибки
СтатусТелоКогда
400
{"error":"Username parameter is required"}Параметр username пустой.
400
{"error":"Username cannot be empty"}Параметр username состоит только из пробелов.
400
{"error":"Username too long"}Длина username превышает 100 символов.
404
{"error":"User \"<name>\" not found"}Пользователь с таким username не найден в базе.
500
{"error":"Internal server error","details":"…"}Любая другая ошибка — поле details добавляется, если базовое исключение — Error.
Эндпоинты