RoProxy HTTP 403 Error on my donation stands

A few days ago my player donation boards stopped showing players’ gamepasses and I get “HTTP 403” error in the output. I use roproxy to get the gamepasses and have never had this issue until now. I heard that roblox changed the API or something, do I need to get an alternative to roproxy, and if so what do I use instead? I’m not very sure how 3rd party things like this work.

Please post your code. It’s difficult to diagnose your API endpoints otherwise

local nameLabel = script.Parent:WaitForChild("NamePart"):WaitForChild("NameGui"):WaitForChild("NameLabel")
nameLabel.Text = "..."
local itemsScroller = script.Parent:WaitForChild("ItemsPart"):WaitForChild("ItemsGui"):WaitForChild("ItemsScroller")



local http = game:GetService("HttpService")

local url = "https://catalog.roproxy.com/v1/search/items/details?Category=3&CreatorName="



local ownerId = script.Parent:WaitForChild("OwnerId")
local plr = game.Players:GetPlayerByUserId(ownerId.Value)

	
local owner = script.Parent.Owner.Value
if owner ~= nil and owner.Parent ~= nil then return end

local data = http:JSONDecode(http:GetAsync(url .. plr.Name)).data

if data then
	script.Parent.Owner.Value = plr
	
	local proximityPrompt = Instance.new("ProximityPrompt")
	proximityPrompt.HoldDuration = 1
	proximityPrompt.ActionText = "Claim Donation Stand"
	proximityPrompt.UIOffset = Vector2.new(0, 2)
	proximityPrompt.RequiresLineOfSight = false
	proximityPrompt.Name = "StandProximityPrompt"
	proximityPrompt.Enabled = false
	proximityPrompt.Parent = script.Parent.NamePart
	game.CollectionService:AddTag(proximityPrompt, "StandProximityPrompt")	
	
	local nameStr = plr.DisplayName
	if plr.MembershipType == Enum.MembershipType.Premium then
		nameStr = utf8.char(0xE001) .. nameStr
	end
	if plr.HasVerifiedBadge then
		nameStr ..= utf8.char(0xE000)
	end
	nameStr ..= "'s Stand"
	
	nameLabel.Text = nameStr
	
	if plr:FindFirstChild("DonationRaised") then
		local connection
		local function update()
			nameLabel.Text = nameStr .. "\n" .. utf8.char(0xE002) .. plr.DonationRaised.Value .. " Raised"
		end
		update()
		connection = plr.DonationRaised.Changed:connect(function()
			if script.Parent == nil or script.Parent.Owner.Value ~= plr or plr == nil or plr.Parent == nil then
				connection:disconnect()
				connection = nil
				return
			end
			update()
		end)
	end
	
	


	local function update()
		for _, child in itemsScroller:GetChildren() do
			if child:IsA("GuiObject") then
				child:Destroy()
			end
		end
		table.sort(data,
			function(a,b)
				return (a.price or 0) < (b.price or 0)
			end
		)	
		for i, item in pairs(data) do
			if not item.price then continue end
			local newButton = script.DonateButton:Clone()
			newButton.Text = utf8.char(0xE002) .. item.price

			local id = Instance.new("IntValue", newButton)
			id.Value = item.id
			
			if item.gamepass then
				newButton:SetAttribute("Gamepass", true)
			end
			
			newButton.Parent = itemsScroller
			game.CollectionService:AddTag(newButton, "StandDonateButton")

			itemsScroller.CanvasSize = UDim2.new(0, itemsScroller.UIListLayout.AbsoluteContentSize.X, 0, 0)
		end		
	end

	update()


	local placesUrl = "https://games.roproxy.com/v2/users/" .. plr.UserId .. "/games?accessFilter=Public&limit=50"
	local placesData = http:JSONDecode(http:GetAsync(placesUrl)).data

	local passes = {}

	for _, place in placesData do
		if place and place.id then
			local passesUrl = "https://games.roproxy.com/v1/games/" .. place.id .. "/game-passes?sortOrder=Asc&limit=50"
			local passesData = http:JSONDecode(http:GetAsync(passesUrl)).data
			if passesData then
				for _, pass in passesData do
					--pass.id = pass.productId
					pass.gamepass = true
					table.insert(data, pass)
				end
				if #passesData > 0 then
					update()
				end				
			end
		end
	end
	
	
end

1 Like

Took a little bit of research and hunting…

1 Like