โœฆ ROBLOX API PROXY

Your own roproxy.

Roblox game servers can't talk to Roblox's own website APIs. Call roproxy.davibevilla.com instead - it's ours, so another proxy going down never breaks your game.

How it works

Swap https://SERVICE.roblox.com/PATH for https://roproxy.davibevilla.com/SERVICE/PATH.

Example: https://friends.roblox.com/v1/users/1/followers/count โ†’ https://roproxy.davibevilla.com/friends/v1/users/1/followers/count

Send your key in the X-Api-Key header (or ?key=). Get one with /keys in Discord or at bot.davibevilla.com/keys.

Limits per key: 60 a minute, 2,000 a day. Answers are cached for a few seconds to a few minutes, so asking the same thing again is fast. Every answer has an X-RateLimit-Remaining header.

Luau example

local HttpService = game:GetService("HttpService")
local KEY = "rpx_your_key_here" -- keep it in a SERVER script, never a LocalScript
local BASE = "https://roproxy.davibevilla.com"

-- does this player follow someone? (goes through every page of who they follow)
local function isFollowing(playerId, targetId)
	local cursor = nil
	for page = 1, 20 do
		local url = BASE .. "/friends/v1/users/" .. playerId .. "/followings?limit=100&sortOrder=Desc"
		if cursor then url ..= "&cursor=" .. cursor end
		local ok, body = pcall(function()
			return HttpService:GetAsync(url, true, { ["X-Api-Key"] = KEY })
		end)
		if not ok then return nil end -- could not check right now: try again later
		local data = HttpService:JSONDecode(body)
		for _, user in data.data or {} do
			if user.id == targetId then return true end
		end
		cursor = data.nextPageCursor
		if not cursor then return false end
	end
	return false
end

Turn on Allow HTTP Requests in Game Settings โ†’ Security.

Errors

401 no key / wrong key ยท 403 not an allowed endpoint ยท 404 unknown service ยท 429 too many requests (wait, or tomorrow) ยท 502 Roblox did not answer. Anything else is Roblox's own answer, passed straight through.

Allowed APIs & status

Checked automatically every few minutes.

usersโ— up 413ms
GET /users/v1/users/{userId}
A user: name, display name, created date
GET /users/v1/users/{userId}/username-history
Their old usernames
POST /users/v1/usernames/users
Usernames to user ids - body {"usernames":[...]}
POST /users/v1/users
User ids to users - body {"userIds":[...]}
friendsโ— up 577ms
GET /friends/v1/users/{userId}/followings
Who they follow (limit, cursor, sortOrder)
GET /friends/v1/users/{userId}/followers
Their followers
GET /friends/v1/users/{userId}/followers/count
Follower / following / friend count
GET /friends/v1/users/{userId}/friends
Their friends
groupsโ— up 937ms
GET /groups/v1/groups/{groupId}
A group's info
GET /groups/v1/groups/{groupId}/roles
A group's ranks
GET /groups/v2/users/{userId}/groups/roles
Every group they're in, with their rank
thumbnailsโ— up 395ms
GET /thumbnails/v1/users/avatar-headshot
Avatar pictures (userIds, size, format)
GET /thumbnails/v1/games/icons
Game / group / badge / pass / asset pictures
gamesโ— up 555ms
GET /games/v1/games
Game info (universeIds)
GET /games/v1/games/votes
Likes / dislikes (universeIds)
GET /games/v1/games/{placeId}/servers/Public
A place's public servers
GET /games/v2/users/{userId}/games
Games they made
GET /games/v1/games/{universeId}/game-passes
A game's passes
badgesโ— down (429)
GET /badges/v1/badges/{badgeId}
A badge's info
GET /badges/v1/users/{userId}/badges/awarded-dates
When they got badges (badgeIds)
inventoryโ— up 489ms
GET /inventory/v1/users/{userId}/items/{type}/{id}/is-owned
Do they own it (Asset, GamePass, Badge, Bundle)
GET /inventory/v1/users/{userId}/can-view-inventory
Is their inventory public
economyโ— up 530ms
GET /economy/v2/assets/{assetId}/details
An item's name, price, creator
avatarโ— down (429)
GET /avatar/v1/users/{userId}/avatar
What they're wearing