Публичное 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 и вернуть его публичный профиль — выручку, отзывы с разбивкой по периодам и играм, агрегаты за всё время.
Параметры пути
| Имя | Тип | Обязательно | По умолчанию | Описание |
|---|---|---|---|---|
| username | string | да | — | Имя пользователя 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 | number | Числовой идентификатор FunPay, возвращается как JSON-число. |
| username | string | Отображаемое имя. |
| url | string | Каноничный URL профиля на FunPay. |
| avatarUrl | string | null | Абсолютный URL аватара пользователя на FunPay или null, если недоступен. |
| reviewsCount | number | Общее число отзывов, возвращается как JSON-число. |
| banned | boolean | Признак блокировки на FunPay. |
| status | string | Произвольный текстовый статус от FunPay. |
| registrationDate | string | null | Дата регистрации, указанная на профиле FunPay (например, "15 Mar 2020"), или null, если недоступна. |
Описание полей ответа — data.stats
| Поле | Тип | Примечания |
|---|---|---|
| totalAmount | number | Выручка за всё время, в USD-эквиваленте (целые единицы). |
| totalReviews | number | Общее число отзывов. |
| averagePerReview | number | totalAmount / totalReviews, округлено до 2 знаков. |
| gamesPlayed | number | Количество разных игр, на которые у пользователя есть отзывы. |
| byTimePeriod | object | Словарь периодов (thisMonth, lastMonth, 2MonthsAgo, …) → { amount, count }. |
| byGame | object | Словарь игр → { amount, count }. |
| byTimePeriodWithPercentage | array | То же, что byTimePeriod, плюс percentage (целое 0–100, округлено). |
| byGameWithPercentage | array | То же, что byGame, плюс percentage (целое 0–100, округлено). |
Описание полей ответа — data.timeGroupedStats[]
| Поле | Тип | Примечания |
|---|---|---|
| key | string | Стабильный машинный идентификатор (thisMonth, lastMonth, …). |
| label | string | Человекочитаемая подпись периода (на английском). |
| amount | number | Суммарная выручка в этом бакете. |
| count | number | Число отзывов в этом бакете. |
| percentage | number | Доля 0–100 от выручки за всё время. |
Описание полей ответа — meta
| Поле | Тип | Примечания |
|---|---|---|
| version | string | Версия API, которой собран ответ (например, "1.0"). |
| fetchedAt | string | ISO-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. |
Эндпоинты