Public API

Public REST API for FunPay statistics and analytics
v1

Conventions

  • Base URL: https://rmthub.com

  • All v1 endpoints live under /api/v1/. The current major version is in the URL.

  • No login required for the endpoints listed on this page.

  • All responses are JSON with Content-Type: application/json.

  • Every successful response is wrapped in { data, meta }. data holds the resource; meta includes the version that produced the response and a fetchedAt timestamp.

  • Errors return { error: "<message>" }. 4xx for client errors, 5xx for server errors. 5xx may also include a details field for debugging.

  • Numeric fields are returned as JSON numbers (no stringified numbers).

Versioning

Endpoints

1 documented

GET

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

Find a FunPay user by username and return their full public profile — revenue, review history broken down by time period and game, and lifetime aggregates.


Path parameters
NameTypeRequiredDefaultDescription
usernamestringyesFunPay username, URL-encoded. Must be 1–100 characters.
Example request
GET /api/v1/funpay/users/Roymi HTTP/1.1
Host: rmthub.com
Accept: application/json

curl 'https://rmthub.com/api/v1/funpay/users/Roymi'
Example response
{
  "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"
  }
}
Response field referencedata.user
FieldTypeNotes
idnumberFunPay numeric id, returned as a JSON number.
usernamestringDisplay name.
urlstringCanonical FunPay profile URL.
avatarUrlstring | nullAbsolute URL of the user's FunPay avatar image, or null if not available.
reviewsCountnumberTotal review count, returned as a JSON number.
bannedbooleanFunPay ban flag.
statusstringFree-form status text from FunPay.
registrationDatestring | nullRegistration date as shown on the FunPay profile (e.g. "15 Mar 2020"), or null if not available.
Response field referencedata.stats
FieldTypeNotes
totalAmountnumberLifetime revenue, in USD-equivalent (whole units).
totalReviewsnumberLifetime review count.
averagePerReviewnumbertotalAmount / totalReviews, rounded to 2 decimals.
gamesPlayednumberNumber of distinct games the user has reviews for.
byTimePeriodobjectMap of period key (thisMonth, lastMonth, 2MonthsAgo, …) to { amount, count }.
byGameobjectMap of game name to { amount, count }.
byTimePeriodWithPercentagearraySame as byTimePeriod plus a percentage field (integer 0–100, rounded).
byGameWithPercentagearraySame as byGame plus a percentage field (integer 0–100, rounded).
Response field referencedata.timeGroupedStats[]
FieldTypeNotes
keystringStable machine identifier (thisMonth, lastMonth, …).
labelstringHuman-readable period label (English).
amountnumberTotal revenue in this bucket.
countnumberNumber of reviews in this bucket.
percentagenumberInteger 0–100 share of the lifetime total.
Response field referencemeta
FieldTypeNotes
versionstringAPI version that produced this response (e.g. "1.0").
fetchedAtstringISO-8601 UTC timestamp of when the server built the response.
Errors
StatusBodyWhen
400
{"error":"Username parameter is required"}Empty username parameter.
400
{"error":"Username cannot be empty"}Whitespace-only username.
400
{"error":"Username too long"}username longer than 100 characters.
404
{"error":"User \"<name>\" not found"}No user with this username in the database.
500
{"error":"Internal server error","details":"…"}Catch-all — details is included when the underlying error is an Error.
Endpoints