API To check if a user is a Roblox developer [15,000 Free Checks/ Month] | RTrack

You may have seen my post on the number of developers on Roblox, which I posted on the RTrack Blog. The article finishes with a figure of 157,000 developers who have at least 1,000 visits across all of their games and games under their groups.

This article was very popular, and I thought since I calculated this dataset already it could be reused by developers for something else. That’s why you can now access this data via a web API in your game with HTTP Service, or your website. The endpoint returns the total number of visits the user has across all their games (including groups) as well as an ‘IsDeveloper’ parameter which shows for users with over 1,000 visits.

Why not just use Roblox APIs for this?

RTrack’s API checks all of the games under a user account, and all of the games under a players groups. This could easily be in the hundreds of games, and therefore could potentially take 100s of requests to do manually with Roblox APIs. As RTrack already has a large dataset this can be done in less than a second and in a single request.

Ideas for using this API

This API could be used to give developers perks in your games, give them a tag in chat or above their head, or maybe you could make a game entirely focused around the number of visits a player has. Like this!

What happens if I go over 3,000 requests?

The rate over 3,000 requests is $0.0001/request. In other words, about 10 cents per 1,000. That means if you got 10,000 visits you would need to pay 20 cents with batched requests, or $1 with individual requests.

Implementation Instructions

I went ahead and wrote a quick module to allow easy implementation into your game

local module = {}
local HttpService = game:GetService("HttpService")

-- Constants
local RapidAPIKey = "YOUR_KEY_HERE"

-- headers
local headers = {
	['x-rapidapi-host'] = "roblox-current-and-historical-data.p.rapidapi.com",
	['x-rapidapi-key'] = RapidAPIKey
}
local url = "https://roblox-current-and-historical-data.p.rapidapi.com/IsUserDeveloper?UserId="

function module.GetResponseForUserId(userid)
	local completeurl = url .. userid
	local response = HttpService:GetAsync(completeurl, false, headers)
	response = HttpService:JSONDecode(response)

	return response -- {"IsDeveloper":true,"TotalVisits":1234, "UserId":1234}
end

function module.GetResponseForUserIds(userids)
	local completeurl = url .. table.concat(userids, ",") 
	local response = HttpService:GetAsync(completeurl, false, headers)
	response = HttpService:JSONDecode(response)

	return response -- [{"IsDeveloper":true,"TotalVisits":1234, "UserId":1234}, {"IsDeveloper":true,"TotalVisits":1234, "UserId":1234}]
end

return module

After you have signed up for the RapidAPI API, just take your API key and put it in the section that says “YOUR_KEY_HERE”. Then place the code in a ModuleScript (server side, or your key will be public), and use Module.GetResponseForUserId(userid) to get the data for that player.

What data does the API return?

The API returns JSON data in this format, giving the number of visits under games owned by the player, or games owned by groups that the player owns. If the number is more than 1,000 the IsDeveloper parameter will be true, but you can decide this threshold yourself by checking the visit count. Lastly, I’ve just recently added the Global rank of this player across all developers.

{"IsDeveloper":true,"TotalVisits":1234, "UserId":1234, "GlobalRank": 1234}
44 Likes

I mean, give developers perks?
Why would you want to do this IF that user hasn’t contributed to the game?
And there are some/a lot developers with <1K visits within their games (or overall) so it might be inaccurate in SOME cases.

The whole thing (the API, the post, etc.) looks very interesting though, even the 3,000 requests per month (Could I get a conversion to minutes and seconds? Would be useful).

Nicely done.

5 Likes

I think it should be called “API to check if user is a game owner”. Not all developers own a game with visits. Some of them only do commissions, some of them failed to get their game started, some of them simply havent finished a project yet.

7 Likes

Each time an account is created they get a premade place, you would have to check the experiences name.


“playername’s Place”
%s's Place"

1 Like

Why not? You can use it for games like op: Flex your visit count - Roblox Or, obviously, if you want to give developers bonuses in your game.
Just because you have no use for them doesn’t mean other people don’t, too.

image

image

Welp atleast it’s semi-accurate. Cool resource anyways, you’re saving a lot of time for developers. :slight_smile:

2 Likes

Updated; Global Developer Rank

Just added global developer rank to the API, under “GlobalRank”, you can see it in Flex my visits too

yeah it’s good that this is very accurate thank god
image
image

5 Likes

Does this account for group visits? (Just played and it called me a player with 0 place visits while in reality I have 20K place visits private old garbage games that I made last year.).

Info in reply to @SamirDevs @TESLAC0IL and @BullfrogBait:

This is intended to track all games owned by your account directly, or any games owned by a group that you own.

Known issues:

  • Privated games, or games that have been inactive for a long time often do not get included
  • Visits are not 100% accurate, data may be a few days old.
3 Likes

The title says “API To check if a user is a Roblox developer” but quite a lot of developers, like myself, work for game studios and don’t actually own these groups directly but otherwise still are considered developers.

Surely it would be more accurate to determine if a user is a Roblox developer by checking their groups and check the places of those groups with the can manage permission?

https://api.roblox.com/users/(userId)/canmanage/(assetId)

This would mark those, like me who works on The Wild West, as developers too!

6 Likes

Looking into what the best way of doing something like this is, however due to the global rank parameter, this data would essentially need to be calculated for every account in any group that owns a game - which is obviously way too many API requests. What might end up happening is opportunistic tracking of this on accounts RTrack thinks are most likely to have edit access to a group, in which case the data will get added to the API endpoint under some parameter such as ManagedVisits

all of my games are public, i directly own them (you can check my profile) and they arent inactive, somethings wrong with ur module since my friends also encountered the same problem

1 Like

Would use this to create easter eggs in my new game, but going to hit 3000 req/month too quickly, and designing anything in-game for 3000 players/month doesn’t have good enough leverage vs. other features right now.

Have you thought about adding an api call to get stats for a batch of players? In most of the things I can think to do with this, I basically want to check every player in my level.

6 Likes

Thanks for the reply, I’ve added batch requests up to 5 UserIds per request, which means in theory 15,000 checks before going into any level of paid requests.

To use batch requests, replace the UserId parameter with a comma delimited list, e.g.

UserId=15496602,28620140,39793489

I’ve added this to the module, here’s that revised code

local module = {}
local HttpService = game:GetService("HttpService")

-- Constants
local RapidAPIKey = "YOUR_KEY_HERE"

-- headers
local headers = {
	['x-rapidapi-host'] = "roblox-current-and-historical-data.p.rapidapi.com",
	['x-rapidapi-key'] = RapidAPIKey
}
local url = "https://roblox-current-and-historical-data.p.rapidapi.com/IsUserDeveloper?UserId="

function module.GetResponseForUserId(userid)
	local completeurl = url .. userid
	local response = HttpService:GetAsync(completeurl, false, headers)
	response = HttpService:JSONDecode(response)

	return response -- {"IsDeveloper":true,"TotalVisits":1234, "UserId":1234}
end

function module.GetResponseForUserIds(userids)
	local completeurl = url .. table.concat(userids, ",") 
	local response = HttpService:GetAsync(completeurl, false, headers)
	response = HttpService:JSONDecode(response)

	return response -- [{"IsDeveloper":true,"TotalVisits":1234, "UserId":1234}, {"IsDeveloper":true,"TotalVisits":1234, "UserId":1234}]
end

return module

and what a response looks like:

2 Likes

I’ve just seen it recently. Got to admit, it’s definitely got that Rdite aesthetic to it and the new map looks cool.

1 Like

@SteadyOn, I’m getting an Error403 from HttpService whenever it tries to get the dev info in my game.

Hey @bitsNbytez sorry about that! AWS Had an outage over those past few days, which caused this API to be intermittent. As far as my tests, this is fully functional and 100% uptime now. Let me know

Cool, thanks for letting me know. I think the problem occurred because I didn’t get the Free Payment plan, but thank you for notifying me of this possible cause.