Checking if a place is public/private/copylocked/uncopylocked?

Is there any way to check if an experience is public/private or copylocked/uncopylocked with a service similar to MarketplaceService that could be used in a simple (only a few lines long) studio script, similarly to how an asset’s name and last updated properties can be checked with Marketplace? If not, is there any other way to do it with a simple (only a few lines long) studio script? I’ve been wondering about this for a while…

4 Likes

just curious to know why do you need that

No easy way to do this without a proxy as roblox API is banned on HTTP service for some reason.

There’s no way to do it from my understanding

You can achieve this with http requests although in order to use Roblox API you need a proxy(you can check ProxyService).

local HttpService = game:GetService("HttpService")

--make a proxy or use a public one to make it work
function Proxy(url) 
	return url 
end

function GET(url)
	url = Proxy(url)
	local result
	local Success, Error = pcall(function()
		result = HttpService:GetAsync(url)
		result = HttpService:JSONDecode(result)
	end)
	if Success then 
		return result 
	else 
		warn(Error)
	end
end

function getPlaceData(placeId)
	local endpoint = "https://games.roblox.com/v1/games/multiget-place-details?placeIds="..placeId 
	return GET(endpoint)
end

function getUniverseData(universeId)
	local endpoint = "https://games.roblox.com/v1/games?universeIds="..universeId
	return GET(endpoint)
end

local PlaceId = 0 --your place id

local PlaceData = getPlaceData(PlaceId)
local universeId, isPrivate = PlaceData.universeId, PlaceData.isPlayable

print("game private:", isPrivate) 

local UniverseData = getUniverseData(universeId) 
local uncopylocked = UniverseData.copyingAllowed 

print("uncopylocked:", uncopylocked)
2 Likes

hey, for me personally that API doesn’t work on my proxy, i use a google App Script (which is free) as proxy, the only limitation is that you can only read data. Here is the tutorial, you gotta also extract the module from this guy’s place: https://youtu.be/PqBvgdpzesg

my code with the other api is:
(make sure you have the proxy http module inside the script)

local Places = {
	155615604,
	69, -- random numbers to see if it would filter it out
	420,-- random numbers to see if it would filter it out
}


-- Removing all places from the list that aren't playable
local List = "" -- making a custom list that can go through the API, a table wont work
for i, v in pairs(Places) do
	List = List.. ",".. v
end

local Response = require(script.HttpProxy):GetAsync("https://games.roblox.com/v1/games/multiget-playability-status?universeIds=".. List) --API call
if Response then -- Checking if the API responded (proxy or api might be down)
	for i, v in pairs(Response) do --Checking each item that the API returned
		if v.isPlayable == false then -- Checking if it is not playable?
			for i2, v2 in pairs(Places) do  -- Going through every item in the places table
				if v2 == v.universeId then -- checking if the non-playable place is inside the list of places
					table.remove(Places, i2) -- removing the place that isn't playable
				end
			end
		end
	end
end