Using various apis found at games.roblox.com/docs, different player results are shown. If you read through this, I can explain how using a game’s universe id returns the data for the root place instead of the whole game. If I was requesting with place id, that would make sense. However, the universe id is tied to the whole place, so this is a bug.
Steps to replicate the bug
Click to expand steps to replicate the bug
- Pick any multi-place game or game that does not keep players in the start place the entire time
- Take that games link. For the repro I will use Dungeon Quest. The numbers in this link is the place id. (2414851778)
- Take the place id and use it with the GET /v1/games/multiget-place-details API. (Url = https://games.roblox.com/v1/games/multiget-place-details?placeIds=2414851778)
This will return the following json:
[
{
"placeId": 2414851778,
"name": "[Wave Defence!] Dungeon Quest ",
"description": "Battle through dungeons with friends to slay the boss that awaits!\r\nAcquire tons of loot and upgrade the gear you get to become powerful and face stronger enemies!\r\n\r\n5/26/19 - UPDATE NEWS\r\n- NEW Wave Defence mode. Battle against endless waves that progressively get more challenging! (Gives loot & titles)\r\n- NEW LOBBY for level 60+!\r\n- TITLES, earn titles to show above your name!\r\n- Friends list with the ability to join their lobbies\r\n- 40% off sale on ALL GAMEPASSES\r\n- NEW Cosmetic shop items!\r\n\r\n---LAST UPDATE---\r\n- New map called \"The Underworld\"\r\n- 3 new bosses\r\n- 20 new weapons\r\n- 9 new sets of armor\r\n- 6 new abilities\r\n- Option to 10x upgrade in the blacksmith\r\n- New cosmetic appearance shop, where you can buy appearance overrides to look different no matter what gear you have equipped.\r\n\r\nSHUTDOWN = UPDATE\r\n\r\nFollow the disc down below to see any updates!",
"url": "https://www.roblox.com/games/2414851778/Wave-Defence-Dungeon-Quest",
"builder": "vCaffy",
"builderId": 306209,
"isPlayable": true,
"reasonProhibited": "None",
"universeId": 848145103,
"universeRootPlaceId": 2414851778,
"price": 0,
"imageToken": "T_2414851778_ae22"
}
]
- We now know the universe Id of game, 848145103. Using this with roblox’s GET /v1/games game API, we use the following link: https://games.roblox.com/v1/games?universeIds=848145103 which returns:
{
"data": [
{
"id": 848145103,
"rootPlaceId": 2414851778,
"name": "[Wave Defence!] Dungeon Quest ",
"description": "Battle through dungeons with friends to slay the boss that awaits!\r\nAcquire tons of loot and upgrade the gear you get to become powerful and face stronger enemies!\r\n\r\n5/26/19 - UPDATE NEWS\r\n- NEW Wave Defence mode. Battle against endless waves that progressively get more challenging! (Gives loot & titles)\r\n- NEW LOBBY for level 60+!\r\n- TITLES, earn titles to show above your name!\r\n- Friends list with the ability to join their lobbies\r\n- 40% off sale on ALL GAMEPASSES\r\n- NEW Cosmetic shop items!\r\n\r\n---LAST UPDATE---\r\n- New map called \"The Underworld\"\r\n- 3 new bosses\r\n- 20 new weapons\r\n- 9 new sets of armor\r\n- 6 new abilities\r\n- Option to 10x upgrade in the blacksmith\r\n- New cosmetic appearance shop, where you can buy appearance overrides to look different no matter what gear you have equipped.\r\n\r\nSHUTDOWN = UPDATE\r\n\r\nFollow the disc down below to see any updates!",
"creator": {
"id": 306209,
"name": "vCaffy",
"type": "User"
},
"price": null,
"isExperimental": true,
"allowedGearGenres": [
"All"
],
"allowedGearCategories": [],
"playing": 5183,
"visits": 368928683,
"maxPlayers": 40,
"created": "2018-09-25T16:18:57.963Z",
"updated": "2019-06-01T22:04:23.1342921Z",
"studioAccessToApisAllowed": true,
"universeAvatarType": "MorphToR15",
"genre": "All"
}
]
}
- Observe the “playing” value, 5183.
- Now, go back to the game’s page (Dungeon Quest), and observe it’s Players count:
- See the sheer difference between the values, and realize this is a API bug, not intended behavior.
The data
Take Treasure Quest, a multi-place game, for example.
https://games.roblox.com/v1/games/list returns the whole-place results for Treasure Quest:
{
"games": [
{
"creatorId": 3461453,
"creatorName": "Nosniy Games™",
"creatorType": "Group",
"totalUpVotes": 6794,
"totalDownVotes": 1653,
"universeId": 1069201198,
"name": "[NEW] Treasure Quest",
"placeId": 2960777560,
"playerCount": 39385,
"imageToken": "T_2960777560_d92f",
"users": [],
"isSponsored": false,
"nativeAdData": null,
"price": null,
"analyticsIdentifier": null
},
The playerCount here is 39k. Which is accurate, according to the games page and the place’s page.
However, when getting the game’s data with the universeId returned above: https://games.roblox.com/v1/games?universeIds=1069201198, The root place player count is returned:
{
"data": [
{
"id": 1069201198,
"rootPlaceId": 2960777560,
"name": "[NEW] Treasure Quest",
"description": "⚔️ Welcome to Treasure Quest! Steal treasure, battle monsters, and complete unique quests as you and your friends become the ultimate treasure hunters! Fight as a Wizard or a Warrior, the choice is yours!\r\n\r\n🎉 Use CODE \"officialrelease\" for 500 GOLD!\r\n\r\nJoin the group for a FREE Royalty sword in the game! 🎁\r\nhttps://www.roblox.com/groups/3461453/CLICK-HERE",
"creator": {
"id": 3461453,
"name": "Nosniy Games™",
"type": "Group"
},
"price": null,
"isExperimental": false,
"allowedGearGenres": [
"All"
],
"allowedGearCategories": [],
"playing": 15469,
"visits": 3134466,
"maxPlayers": 50,
"created": "2019-03-15T04:27:24.327Z",
"updated": "2019-06-01T14:56:31.2130287Z",
"studioAccessToApisAllowed": true,
"universeAvatarType": "MorphToR15",
"genre": "All"
}
]
}
Here, it says there are 15k players.
This seems to happen only with multiplace games.
For my game, single-place game, Roblox Uno, the correct results are returned: https://games.roblox.com/v1/games?universeIds=640204840:
{"data":
[
{"id":640204840,
"rootPlaceId":1689414409,
"name":"Roblox Uno",
"description":"Sit down around a table and play a game of Roblox Uno, the #1 Uno game on Roblox! Either play with NPCs, Friends, or Foes. Featuring card animations, professionally made cards, and over 4,000 lines of code, this game is made to be easy to learn & fun to play. Play & climb the leaderboards to the become best Roblox Uno player of all time. Welcome to Roblox Uno, the best Uno game on Roblox. PC and Mobile Compatible & Optimized.\r\n\r\nIt is HIGHLY recommended you read the help section, even if you know how to play Uno.\r\n\r\nJoin The Official T-Studios: https://www.roblox.com/groups/4194146\r\n\r\nLike Roblox Uno? A Thumbs Up 👍 and Favorite ⭐are very much appreciated.\r\n\r\nJoin our \"community\" server! Code: X4KhSPq or the Link Below!\r\nFollow us on twitter! @REALTimothy0812 or the Link Below!\r\n\r\n-Created by T-Studios (REALTimothy0812)\r\n -Thumbnail Background Made By Nakisakebu\r\nNote: Roblox Uno has custom art made by REALTimothy0812, not matel.",
"creator":{"id":103475205,"name":"REALTimothy0812","type":"User"},
"price":null,
"isExperimental":false,
"allowedGearGenres":["All"],
"allowedGearCategories":[],
"playing":883,
"visits":20427820,
"maxPlayers":30,
"created":"2018-04-27T14:01:31.797Z",
"updated":"2019-05-26T18:06:57.617Z",
"studioAccessToApisAllowed":true,
"universeAvatarType":"PlayerChoice",
"genre":"All"
}
]
}
Playing here is 883, and the games page shows:
Platform does not impact this, and furthermore, it does not impact single-place games.
Further investigation shows that it appears to be a bug based on the startPlace of the game. Take Verestia for example. It’s a multi-place adventure style game, so players are rarely in the startPlace.
To get the universe id, we use the place id https://games.roblox.com/v1/games/multiget-place-details?placeIds=2376885433:
[
{
"placeId": 2376885433,
"name": "Vesteria Beta",
"description": "Fight menacing monsters, discover breathtaking environments, find hidden secrets, obtain rare items, form parties with friends, complete quest-lines, clear dungeons, catch fish and so, so much more in the vast open world of Vesteria, the ultimate fantasy experience on Roblox. There's nothing like it.\r\n\r\n🏆 2019 6th Annual Bloxy Award for Technical Achievements.\r\n\r\n©2019 Vesteria Inc, the Vesteria game logo and game name are among our trademarks.",
"url": "https://www.roblox.com/games/2376885433/Vesteria-Beta",
"builder": "The Vesteria Team",
"builderId": 4238824,
"isPlayable": true,
"reasonProhibited": "None",
"universeId": 833209132,
"universeRootPlaceId": 2376885433,
"price": 80,
"imageToken": "T_2376885433_1415"
}
]
The universe id is 833209132, which we test with https://games.roblox.com/v1/games?universeIds=833209132:
{
"data": [
{
"id": 833209132,
"rootPlaceId": 2376885433,
"name": "Vesteria Beta",
"description": "Fight menacing monsters, discover breathtaking environments, find hidden secrets, obtain rare items, form parties with friends, complete quest-lines, clear dungeons, catch fish and so, so much more in the vast open world of Vesteria, the ultimate fantasy experience on Roblox. There's nothing like it.\r\n\r\n🏆 2019 6th Annual Bloxy Award for Technical Achievements.\r\n\r\n©2019 Vesteria Inc, the Vesteria game logo and game name are among our trademarks.",
"creator": {
"id": 4238824,
"name": "The Vesteria Team",
"type": "Group"
},
"price": 80,
"isExperimental": false,
"allowedGearGenres": [
"Adventure"
],
"allowedGearCategories": [],
"playing": 62,
"visits": 1068640,
"maxPlayers": 20,
"created": "2018-09-18T21:37:44.973Z",
"updated": "2019-06-02T02:15:38.4618207Z",
"studioAccessToApisAllowed": true,
"universeAvatarType": "MorphToR15",
"genre": "Adventure"
}
]
}
Compared to the whole game count, it’s clear this is the problem:
Extra Data to prove point even more
Multiplace games
Royale High. Universe id is 321778215, gotten through https://games.roblox.com/v1/games/multiget-place-details?placeIds=735030788.
Using https://games.roblox.com/v1/games?universeIds=321778215, the following is returned:
{
"data": [
{
"id": 321778215,
"rootPlaceId": 735030788,
"name": "Royale🏰High",
"description": "💙THE WHEEL IS BACK!💙 SPIN-TO-WINNNNNNN💙\r\n💙New Skirt: Sparkly Sarong!🏖️\r\n💙3 New Mermaid Accessories + Lots of New Swimsuits!\r\n💙New Animations Keybinding Feature!~ Assign animations to your keyboard keys!\r\n💙Hold your tab key to quickly view your keybinds, see the Server Player List & Levels!\r\n💙75 New Fabric Designs!\r\n💙New Beautiful Outfits and Makeup!💙\r\n💙Action Booties Reworked!\r\n💙Thumbnail by @chellllyd :3\r\n\r\nThank you for voting the Royale High Campus as \"Favorite Map!\"\r\n🌊Bloxy Photo by OceanOrbs! \r\nFour Leaf Clover Boy Photo by Ninetyles!🌈\r\n🐣Easter Photo by Ushiesu!🐣 ",
"creator": {
"id": 29622,
"name": "callmehbob",
"type": "User"
},
"price": null,
"isExperimental": false,
"allowedGearGenres": [
"Adventure"
],
"allowedGearCategories": [],
"playing": 14200,
"visits": 1605275749,
"maxPlayers": 17,
"created": "2017-04-10T13:16:49.493Z",
"updated": "2019-06-03T21:32:04.3072421Z",
"studioAccessToApisAllowed": true,
"universeAvatarType": "MorphToR15",
"genre": "Adventure"
}
]
}
Here, the API returns the player count is 14k. However, a single look at both the top games page and the game’s page itself disprove that.
Single Place games
Phantom Forces only includes one place. To get the universe id, we go to https://games.roblox.com/v1/games/multiget-place-details?placeIds=292439477, which returns the universe id of 113491250.
Using this universe id the following link is generated: https://games.roblox.com/v1/games?universeIds=113491250
{
"data": [
{
"id": 113491250,
"rootPlaceId": 292439477,
"name": "[New AA-12!] Phantom Forces",
"description": "Sorry for the long delay in this update! \r\nWe have been testing a major revampled minimap radar system for a while and now we have finally released it!\r\n\r\n[Update 4.4.0]\r\n- New AA-12 Automatic shotgun (Rank 112)!\r\n- New Five Seven handgun (Rank 57)!\r\n- New HK416 assault rifle (Rank 64)!\r\n- Major minimap radar system revamp!\r\n- Fixed day/night cycle\r\n- Many other minor fixes and adjustments listed in PF change log wiki\r\n\r\nFor those who still wish to play Call of Robloxia 5, here is a link to the testing place: https://www.roblox.com/games/2983450431/Call-of-Robloxia-5-Somewhat-Functional-Mess\r\n\r\nThank you for helping us reach 1M likes on PF! \r\nFor support, update archive, spawn issues, reporting and more, please read the topic below: https://devforum.roblox.com/t/phantom-forces-information/83072",
"creator": {
"id": 1103278,
"name": "StyLiS Studios",
"type": "Group"
},
"price": null,
"isExperimental": false,
"allowedGearGenres": [
"FPS"
],
"allowedGearCategories": [],
"playing": 7047,
"visits": 706317845,
"maxPlayers": 32,
"created": "2015-08-31T06:00:14.907Z",
"updated": "2019-06-03T15:50:40.6050499Z",
"studioAccessToApisAllowed": true,
"universeAvatarType": "MorphToR6",
"genre": "FPS"
}
]
}
And, to verify this is not a issue on single-place games, observe that the playing counts are identical.
Conclusion
And here it is, the problem: Requesting the data of a game through it’s universe id returns the data for the ROOT PLACE, and not the whole game.
This is a API bug. Take any multiplace game, and the results appear. Single place games are not affected. When requesting with a game-specific id (universe id), I expect to get the data for the whole game, not just the root place.