[Beta] Use Open Cloud via HttpService Without Proxies

There are some caveats with group-owned API keys that we’re aware of that we still need to resolve – this update doesn’t affect anything about that.

The permissions of the key are based on the last user who (re)generated that API key at the moment, and certain endpoints have specific constraints for group-owned API keys. We understand that is not very friendly for usability and we’re planning out improvements.

1 Like

I am indeed referring to that endpoint since there didn’t appear to be any in-engine API alternative for it.

1 Like

I definitely agree with this one! right now you have to use datastores to save every time someone was banned, then use GetBanHistoryAsync. It would also be great if there was a method to get ban history for the universe instead of a player

1 Like

Incredible stuff! Hope to see more endpoints added soon. Gonna see another wave of “PLS DONATE” games again.

1 Like

Very excited to see this. This is a big step towards many games that have rank management system. Love it!

1 Like

Cross experience datastores, AND changing group rank mid game… somebody pinch me!!!

This is quite literally a dream come true!!

2 Likes

Let’s goooooo! I’ve been waiting for this for so long!

I’m still waiting for the eventual modules and whatnot to simplify some of this, but I’m so glad to finally see the official launch of this. Thank you all who have worked and discussed with developers about this!

2 Likes

This will be so peak… especially cross-experience datastores…

3 Likes

2025 looking like it could be the biggest year for updates.

PromptJoinGroup? :pleading_face:

4 Likes

This is exactly what we need. Adding a join prompt in-game would make the group joining process so much smoother.

Great update! Unfortunately, none of the endpoints I’m currently using are supported yet.

I use https://catalog.roblox.com/v1/assets/{assetId}/bundles to get a list of bundles that an asset is included in.

I use https://catalog.roblox.com/v1/bundles/{bundleId}/details to get a list of Universe IDs that a bundle can be sold in. (not related to the previous endpoint)

I use https://games.roblox.com/v1/games?universeIds={universeIds} to get a list of Start Place IDs from said the previous list of Universe IDs so that the user can teleport to the place where the bundle is being sold.

Honestly, all of these feel like they should be available under engine APIs. None of the existing methods under MarketplaceService, AvatarEditorService, or AssetService provide this info.

4 Likes

Are there any plans to simplify some of these in-engine calls into services?

Having to set up an API key, secret, local Studio secret overrides, then various fetching logic in lieu of a GroupService:GetRank(userId) and GroupService:SetRank(userId, rankId/String) has a fair bit of friction + testing difficulties.

4 Likes

Thanks for the question, I recently left some replies here which may be insightful to read:

https://devforum.roblox.com/t/use-open-cloud-via-httpservice-without-proxies-alpha-launch/3587807/14?u=hooksmith

https://devforum.roblox.com/t/use-open-cloud-via-httpservice-without-proxies-alpha-launch/3587807/26?u=hooksmith

It’s a possibility that based on the usage patterns we’ll see and based on impact we might decide to turn some of these calls into engine APIs, but for now this is the only planned offering in this regard.

6 Likes

Snapshot Data Stores and Flush Memory Store and Restart Universe Servers could be useful. Although snapshot would be moreso useful in studio plugins, it could still be used on a cyclic basis within servers. Flush would be useful from the context of memoryStore memory management, resolving issues where the data limit for memoryStore is hit. Restart server would be primarily useful in studio plugins, but could be slightly useful in servers if Publish Universe Message is supported. I saw some replies mentioning Publish Universe Message already, but to add another use case, it could be used in plugins to notify developers of suspicious activity within the game.

Support for memoryStore and orderedDataStore APIs would be nice, and support for List Data Store Entry Revisions.

2 Likes

so is it available to use right now? I have tried various group apis and they all say “HttpService is not allowed to access that Roblox resource”. I didn’t see anything addressing it in the beta settings in studio.

1 Like

Hey there, can you share a Lua snippet (please mask any sensitive values) with the code you’re trying to run? Note that only the specific group endpoints linked in the announcement are supported at this time.

1 Like

This is one of the best updates ever! I can finally auto-rank people.

3 Likes

GetGroup (api key has been removed but is used in the script)

local HttpService = game:GetService("HttpService")

local firsturl = "https://apis.roblox.com/cloud/v2/groups"

local HEADERS = {
	["x-api-key"] = "",
	["Content-Type"] = "application/json",
}

local groupId = 33088619
local function rank()
	local url = firsturl ..groupId
	local body = HttpService:JSONEncode(requestBody)
	local success, response = pcall(function()
		return HttpService:RequestAsync({
			Url = url,
			Method = "GET",
			Headers = HEADERS,
		})
	end)
	print(response)
end
1 Like

I believe you’re missing a slash in your code there, your firsturl .. groupId ends up being:

https://apis.roblox.com/cloud/v2/groups33088619

instead of:

https://apis.roblox.com/cloud/v2/groups/33088619

Also you’ll need to use Secret Store for the API key variable

3 Likes

thank you for that, I feel very stupid :man_facepalming:
it says that header “x-api-key” has unallowed character though. here’s my secret format and my header code:
{"api-key": ["api key here", "apis.roblox.com"]}

local HEADERS = {
	["x-api-key"] = HttpService:GetSecret("api-key"),
	["Content-Type"] = "application/json",
}

the api key has letters (full alphabet capital and lowercase), numbers (1-9), and the slash symbol (/).

1 Like