Public API
Free REST API for FunPay and G2G — games, listing categories, search filters, and seller stats. No API key required.
Conventions
Base URL: https://rmthub.com
All v1 endpoints live under /api/v1/. The current major version is in the URL.
Most endpoints accept anonymous requests. To get a higher rate limit, send an API key as `Authorization: Bearer rmthub_live_…`. Create one at /profile/api-keys after signing in.
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
Authentication & rate limits
v1 endpoints work without authentication and are subject to per-IP rate limits (30 requests/minute and 500 requests/day). If you send a valid `Authorization: Bearer rmthub_live_…` header, the per-key limits apply instead — set per key, default 60/minute and 1 000/day, and admin-adjustable. Every response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` headers; 429 responses additionally include `Retry-After` (seconds). Invalid or revoked keys return 401.
Anonymous (no API key)
Per minute: 30 / IP
Per day: 500 / IP
Authenticated with a key
Per minute: per-key (default 60)
Per day: per-key (default 1 000)
Endpoints
10 documented
FunPay
/api/v1/funpay/users/{username}
Return a FunPay seller's public profile and review statistics — revenue, breakdowns by time period and game, and lifetime aggregates.
Path parameters
usernameFunPay 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 reference — data.user
idFunPay numeric id, returned as a JSON number.
usernameDisplay name.
urlCanonical FunPay profile URL.
avatarUrlAbsolute URL of the user's FunPay avatar image, or null if not available.
reviewsCountTotal review count, returned as a JSON number.
bannedFunPay ban flag.
statusFree-form status text from FunPay.
registrationDateRegistration date as shown on the FunPay profile (e.g. "15 Mar 2020"), or null if not available.
Response field reference — data.stats
totalAmountLifetime revenue, in USD-equivalent (whole units).
totalReviewsLifetime review count.
averagePerReviewtotalAmount / totalReviews, rounded to 2 decimals.
gamesPlayedNumber of distinct games the user has reviews for.
byTimePeriodMap of period key (thisMonth, lastMonth, 2MonthsAgo, …) to { amount, count }.
byGameMap of game name to { amount, count }.
byTimePeriodWithPercentageSame as byTimePeriod plus a percentage field (integer 0–100, rounded).
byGameWithPercentageSame as byGame plus a percentage field (integer 0–100, rounded).
Response field reference — data.timeGroupedStats[]
keyStable machine identifier (thisMonth, lastMonth, …).
labelHuman-readable period label (English).
amountTotal revenue in this bucket.
countNumber of reviews in this bucket.
percentageInteger 0–100 share of the lifetime total.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
Errors
{"error":"Username parameter is required"}WhenEmpty username parameter.
{"error":"Username cannot be empty"}WhenWhitespace-only username.
{"error":"Username too long"}Whenusername longer than 100 characters.
{"error":"User \"<name>\" not found"}WhenNo user with this username in the database.
{"error":"Internal server error","details":"…"}WhenCatch-all — details is included when the underlying error is an Error.
/api/v1/funpay/users/{username}/top-positions
Return a FunPay seller's leaderboard placements — global and per-game top-seller ranks across time periods.
Path parameters
usernameFunPay username, URL-encoded. Must be 1–100 characters.
Query parameters
localeSet to ru for Russian period labels; defaults to English.
Example request
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'Example response
{
"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
}
}Response field reference — data.user
idFunPay numeric id.
usernameDisplay name.
urlCanonical FunPay profile URL.
Response field reference — data.summary
bestGlobalRankBest (lowest) global leaderboard rank, or null if none.
gameCountNumber of distinct games with a top-seller placement.
positionCountTotal placement entries (global + per-game).
Response field reference — data.global[]
periodStable machine key (all_time, this_month, last_month, …).
periodLabelHuman-readable period label.
rankLeaderboard position (1 = first place).
totalAmountRevenue in this leaderboard bucket (USD-equivalent).
reviewsCountReview count in this bucket.
rankChangeRank movement: diff (positive = improved) and previousRank; null when unavailable.
revenueChangeRevenue movement: diff and percent; null when unavailable.
Response field reference — data.byGame[]
periodStable machine key (all_time, this_month, last_month, …).
periodLabelHuman-readable period label.
rankLeaderboard position (1 = first place).
totalAmountRevenue in this leaderboard bucket (USD-equivalent).
reviewsCountReview count in this bucket.
rankChangeRank movement: diff (positive = improved) and previousRank; null when unavailable.
revenueChangeRevenue movement: diff and percent; null when unavailable.
gameGame display name (byGame only).
gameSlugURL-safe game slug (byGame only). Omitted when unknown.
Response field reference — data
lastUpdatedISO-8601 UTC timestamp of the last index rebuild.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
totalEquals data.summary.positionCount.
Errors
{"error":"Username parameter is required"}WhenEmpty username parameter.
{"error":"Username cannot be empty"}WhenWhitespace-only username.
{"error":"Username too long"}Whenusername longer than 100 characters.
{"error":"No top positions found for user \"<name>\""}WhenSeller has no indexed leaderboard placements.
{"error":"Internal server error"}WhenUnexpected server error.
/api/v1/funpay/leaderboards/sellers
Paginated FunPay top sellers — the same rankings shown on /funpay?category=top_sellers. Supports all-time and rolling time periods, per-game filters, banned sellers, and search. Cache-Control: public, max-age=3600.
Query parameters
localeResponse labels and RMTHub URLs. Omit for English.
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
Which leaderboard slice to return. See allowed values — same keys as the /funpay filter parameter.
gameSlugFilter to one game (slug from GET /api/v1/funpay/games). Omit for all games. Ignored when period=banned.
gameSame as gameSlug but pass the display name instead. Do not use together with gameSlug.
pagePage number, starting at 1.
limitRows per page. Default 20, maximum 100.
searchFilter by FunPay username or numeric user id.
Example request
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'Example response
{
"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
}
}Response field reference — data
periodStable machine key for the selected leaderboard period.
periodLabelHuman-readable period label for the requested locale.
gameSelected game filter as { name, slug }, or null when all games.
sellersRanked seller rows for this page.
sourceUrlCanonical RMTHub /funpay page for this leaderboard view.
Response field reference — data.game
nameGame display name.
slugURL-safe game slug.
Response field reference — data.sellers[]
rankGlobal rank on this leaderboard (1 = first place).
idFunPay numeric id.
usernameDisplay name.
urlCanonical FunPay profile URL.
profileUrlRMTHub seller profile page for the requested locale.
totalAmountRevenue in this leaderboard bucket (USD-equivalent).
reviewsCountReview count in this bucket.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
totalTotal matching sellers across all pages.
pageCurrent page number.
limitPage size used for this response.
Errors
{"error":"Invalid period \"<period>\""}WhenUnknown period value.
{"error":"limit must be between 1 and 100"}Whenpage or limit out of range.
{"error":"search must be at most 100 characters"}Whensearch exceeds 100 characters.
{"error":"Game \"<slug>\" not found"}WhengameSlug does not match any catalog game.
{"error":"No leaderboard data for period \"<period>\""}WhenNo precomputed leaderboard for this period/filter combination.
{"error":"Rate limit exceeded…"}WhenPer-minute or per-day rate limit exceeded.
{"error":"Internal server error"}WhenUnexpected server error.
/api/v1/funpay/leaderboards/games
Paginated FunPay top games — the same rankings shown on /funpay?category=top_games. Use category=top_new_games for fresh breakout titles. Cache-Control: public, max-age=3600.
Query parameters
localeResponse labels and RMTHub URLs. Omit for English.
categoryWhich games list to return. new_games is an alias for 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
Time window for top_games. Ignored when category=top_new_games (always all_time).
pagePage number, starting at 1.
limitRows per page. Default 20, maximum 100.
searchFilter by game name substring.
Example request
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'Example response
{
"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
}
}Response field reference — data
categoryStable category key: top_games or top_new_games.
categoryLabelHuman-readable category label.
periodStable machine key for the selected period.
periodLabelHuman-readable period label.
gamesRanked game rows for this page.
sourceUrlCanonical RMTHub /funpay page for this leaderboard view.
Response field reference — data.games[]
rankRank on this leaderboard (1 = first place).
gameGame display name.
gameSlugURL-safe slug derived from the game name, or null.
totalAmountTotal review revenue for this game in the bucket (USD-equivalent).
reviewsCountReview count in this bucket.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
totalTotal matching games across all pages.
pageCurrent page number.
limitPage size used for this response.
Errors
{"error":"Invalid period \"<period>\""}WhenUnknown period value for top_games.
{"error":"category top_new_games only supports period all_time"}Whentop_new_games requested with a period other than all_time.
{"error":"limit must be between 1 and 100"}Whenpage or limit out of range.
{"error":"No leaderboard data for period \"<period>\""}WhenNo precomputed leaderboard for this period.
{"error":"Rate limit exceeded…"}WhenPer-minute or per-day rate limit exceeded.
{"error":"Internal server error"}WhenUnexpected server error.
/api/v1/funpay/games
List every FunPay game in the RMTHub catalog with lot categories (subfolders). The full catalog is returned in one response — suitable for game pickers, filters, or offline caches. Responses include Cache-Control: public, max-age=3600.
Example request
GET /api/v1/funpay/games HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/funpay/games'Example response
{
"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
}
}Response field reference — data.games[]
idStable identifier — the FunPay lots URL (same as url). Use when referencing a game in other RMTHub APIs.
slugURL-safe slug derived from the game name. Use in GET /api/v1/funpay/games/{gameSlug}/fees and /filters.
nameDisplay name on FunPay (English catalog).
nameRuOptional Russian display name from the scraped FunPay RU catalog. Omitted when unavailable or identical to name.
urlCanonical FunPay lots URL for the game.
lastUpdatedUTC calendar date (YYYY-MM-DD) of the last scraper update, or null.
subfoldersLot categories within the game.
subfolders[].nameCategory label (e.g. Accounts, Top Up).
subfolders[].nameRuOptional Russian category label. Omitted when unavailable or identical to subfolders[].name.
subfolders[].urlFunPay URL for that category's lots page.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
totalNumber of games in data.games.
Errors
{"error":"Rate limit exceeded…"}WhenPer-minute or per-day rate limit exceeded.
{"error":"Internal server error"}WhenUnexpected server error.
/api/v1/funpay/games/{gameSlug}/fees
FunPay seller fee data for each lot category within a game. Scoped by game slug only (~3–15 rows). Not a bulk dump of the full fees collection. Cache-Control: public, max-age=3600.
Path parameters
gameSlugURL-safe slug (e.g. abyss-of-dungeons). Must be 1–200 characters.
Example request
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'Example response
{
"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
}
}Response field reference — data.game
idStable identifier — the FunPay lots URL (same as url).
slugURL-safe slug derived from the game name.
nameDisplay name on FunPay (English catalog).
nameRuOptional Russian display name from the scraped FunPay RU catalog. Omitted when unavailable or identical to name.
urlCanonical FunPay lots URL for the game.
lastUpdatedUTC calendar date (YYYY-MM-DD) of the last scraper update, or null.
subfoldersLot categories within the game.
subfolders[].nameCategory label (e.g. Accounts, Top Up).
subfolders[].nameRuOptional Russian category label. Omitted when unavailable or identical to subfolders[].name.
subfolders[].urlFunPay URL for that category's lots page.
Response field reference — data.fees[]
subfolderCategory name (e.g. Accounts, Top Up).
subfolderRuOptional Russian category name. Omitted when unavailable or identical to subfolder.
subfolderUrlFunPay lots page URL for this category, or null.
feePercentFunPay fee as a percentage (e.g. 14.89 = 14.89%), or null if not scraped.
lastUpdatedUTC calendar date (YYYY-MM-DD) of last scrape, or null.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
totalNumber of fee rows in data.fees.
Errors
{"error":"Game \"<slug>\" not found"}WhenNo game with this slug in the catalog.
{"error":"Internal server error"}WhenUnexpected server error.
/api/v1/funpay/games/{gameSlug}/filters
Scraped lot-filter options for a FunPay game — servers, regions, item types, etc. Without category, returns data.categories grouped by lot category; with category, returns data.selects for that category only. Cache-Control: public, max-age=86400.
Path parameters
gameSlugURL-safe slug (e.g. lineage-2-free). Must be 1–200 characters.
Query parameters
categoryOptional lot category name (e.g. Adena). Must match a category from the game catalog.
Example request
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'Example response
{
"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
}
}Response field reference — data.game
idStable identifier — the FunPay lots URL (same as url).
slugURL-safe slug derived from the game name.
nameDisplay name on FunPay (English catalog).
nameRuOptional Russian display name from the scraped FunPay RU catalog. Omitted when unavailable or identical to name.
urlCanonical FunPay lots URL for the game.
lastUpdatedUTC calendar date (YYYY-MM-DD) of the last scraper update, or null.
subfoldersLot categories within the game.
subfolders[].nameCategory label (e.g. Accounts, Top Up).
subfolders[].nameRuOptional Russian category label. Omitted when unavailable or identical to subfolders[].name.
subfolders[].urlFunPay URL for that category's lots page.
Response field reference — data
categoriesPresent when category is omitted. Map of lot category name to filter selects (English keys).
categoryNamesRuPresent when category is omitted and RU category labels are available. Map of English lot category name to Russian display name.
categoriesRuPresent when category is omitted and scraped RU filter data exists. Same shape as categories, keyed by English lot category name, with Russian filter dimension names.
categoryPresent when category query param is set. Echo of the requested lot category (English name).
categoryRuPresent when category query param is set and a Russian category label is available.
selectsPresent when category query param is set. English filter name to option strings for that category.
selectsRuPresent when category query param is set and scraped RU filter data exists. Russian filter name to option strings.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
totalWithout category: number of lot categories in data.categories. With category: option count in data.selects.
Errors
{"error":"Category \"<name>\" not found for this game"}Whencategory does not match any lot category for this game.
{"error":"Game \"<slug>\" not found"}WhenNo game with this slug in the catalog.
{"error":"Internal server error"}WhenUnexpected server error.
G2G
/api/v1/g2g/games
Browse every game on the G2G marketplace — from World of Warcraft and CS2 to mobile titles. Each entry includes a slug for the categories and filters endpoints. Sorted by popularity (offer count) and refreshed from RMTHub’s G2G market index. Free to use, no API key required.
Example request
GET /api/v1/g2g/games HTTP/1.1
Host: rmthub.com
Accept: application/json
curl 'https://rmthub.com/api/v1/g2g/games'Example response
{
"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
}
}Response field reference — data.games[]
nameDisplay name as shown on G2G and RMTHub market pages.
slugURL-safe slug. Use in GET /api/v1/g2g/games/{gameSlug}/categories and /filters.
lastUpdatedUTC calendar date (YYYY-MM-DD) of the last market index update, or null.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
totalNumber of games in data.games.
Errors
{"error":"Rate limit exceeded…"}WhenPer-minute or per-day rate limit exceeded.
{"error":"Internal server error"}WhenUnexpected server error.
/api/v1/g2g/games/{gameSlug}/categories
See what you can buy for a game on G2G — gold, accounts, in-game items, boosting, and other services. Each category links to the live G2G listing page and includes an id you can pass to the filters endpoint.
Path parameters
gameSlugURL-safe game slug (same as the games endpoint).
Example request
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'Example response
{
"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
}
}Response field reference — data.game
nameDisplay name as shown on G2G and RMTHub market pages.
slugURL-safe slug. Use in GET /api/v1/g2g/games/{gameSlug}/categories and /filters.
lastUpdatedUTC calendar date (YYYY-MM-DD) of the last market index update, or null.
Response field reference — data.categories[]
seoTermCategory id for the filters endpoint (e.g. wow-gold, wow-item).
labelShort service label (e.g. Game coins, Accounts).
marketingTitleEnglish marketing title from G2G, or null.
urlCanonical G2G category URL.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
totalNumber of categories in data.categories.
Errors
{"error":"Game \"<slug>\" not found"}WhenNo game with this slug in the catalog.
{"error":"Internal server error"}WhenUnexpected server error.
/api/v1/g2g/games/{gameSlug}/filters
The same dropdown filters shoppers see on G2G — servers, item types, boosting options, and nested choices (e.g. weapon type, then character class). One request returns every category for the game; regional categories include all market regions (EU, US, etc.).
Path parameters
gameSlugURL-safe game slug (same as the games endpoint).
Example request
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'Example response
{
"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
}
}Response field reference — data.game
nameDisplay name as shown on G2G and RMTHub market pages.
slugURL-safe slug. Use in GET /api/v1/g2g/games/{gameSlug}/categories and /filters.
lastUpdatedUTC calendar date (YYYY-MM-DD) of the last market index update, or null.
Response field reference — data
categoriesMap of category id (seoTerm) → filters. Keys match the categories endpoint.
Response field reference — data.categories.*
regionsPresent on regional categories (gold, items, accounts). One entry per market region.
relationsPresent on non-regional categories (e.g. boosting).
Response field reference — data.categories.*.regions[]
codeShort region code (e.g. EU, US).
nameDisplay name (e.g. Europe, United States).
relationsFilter dimensions for this region.
Response field reference — data.categories.*.relations[]
labelHuman-readable dimension name (e.g. Item Type, Server).
optionsSelectable values for this dimension.
Response field reference — data.categories.*.relations[].options[]
valueDisplay label.
optionsNested sub-options for grouped filters (e.g. boosting service types); omitted for leaf values.
Response field reference — meta
versionAPI version that produced this response (e.g. "1.0").
fetchedAtISO-8601 UTC timestamp of when the server built the response.
totalTotal count of top-level filter options across all categories and regions.
Errors
{"error":"Game \"<slug>\" not found"}WhenNo game with this slug in the catalog.
{"error":"Internal server error"}WhenUnexpected server error.