Hi Creators,
Today, we’re excited to launch new controls for branded assets, supported by a new Brand Project API. For those of you who partner on integrations with the growing number of brands coming to Roblox, we hope this small but exciting feature will unlock more partnership opportunities, while also preserving brand suitability by limiting the exposure to out of segment users.
New Controls for Branded Assets
Our new controls for branded assets will enable you to show branded assets — such as a branded coffee cup or a wrapped race car — to select users within your experience, based on age or location. These capabilities allow brands who have age or location limitations to integrate with more experiences on Roblox. This results in more potential brand partners for your experiences!
Using the Brand Project API
To implement these controls within your experiences, you can work with Roblox to use the new Brand Project API, which makes calls into your experience to know if a user is eligible to view a branded asset. We’ll provide you with a Brand ID for the branded asset. You will then be able to use the API to control asset exposure by age (ranging from 13+ to 21+) and location (US, CA, and 24 other countries), as set by the brand to ensure you can comply with their requirements.
Code Sample
Click here to see a code sample
Server-side
-- In ServerScriptService
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PolicyService = game:GetService("PolicyService")
-- Pre-created RemoteEvent in ReplicatedStorage
local RemoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent")
local brandedAsset = ReplicatedStorage:WaitForChild("BrandedAsset")
local defaultAsset = Instance.new("Part")
Players.PlayerAdded:Connect(function(player)
-- PolicyService:CanViewBrandProjectAsync can only be called from the Server
local success, canView = pcall(function()
return PolicyService:CanViewBrandProjectAsync(player, "BRP-0123456789")
end)
if success and canView then
RemoteEvent:FireClient(player, brandedAsset)
else
RemoteEvent:FireClient(player, defaultAsset)
end
end)
Client-side
-- In StarterPlayerScripts
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Pre-created RemoteEvent in ReplicatedStorage
local RemoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent")
RemoteEvent.OnClientEvent:Connect(function(partToLoad)
local clonedPart = partToLoad:Clone()
clonedPart.Parent = workspace
end)
While this shouldn’t impact the majority of branded assets, be aware that if the design of the branded assets or the integration would change the Content Maturity rating of your experience (including categories such as blood, crude humor, or fear), you must re-submit updated answers to the Experience Guidelines questionnaire in Creator Hub so your experience’s content maturity label remains accurate.
We are excited to see it creating more great partnerships between creators and brands on Roblox while raising the bar on brand suitability.
Thank you!
FAQs
What will the experience look like for non-eligible users?
-
Non-eligible users will either see nothing, or a fallback asset created by the developer.
If the asset is core to the game experience (e.g., a car in a racing game), we would recommend having a fallback unbranded car for users who cannot see the branded asset. That fallback asset is not provided by the engine API.
Devs will have the ability to show different assets on different player clients. So, in the same race car example above, it is possible for an 18+ player to see a branded car, and for an under 18 player to see a generic car.
I’m running independent ads, can I use this API?
- At this time, the Brand Project API is only accessible to developers who will work directly with Roblox on implementation. Developers with experiences showing Independent Ads should be using the PolicyService API.
If I use this API, does this mean the branded asset becomes classified as an ad by default?
-
No, this API is a tool to gate assets to be shown to certain age groups and locations chosen by the brand. The brand’s selections are not exposed to the developer. This does not change how Roblox classifies this asset by default.
A brand may determine their assets should be treated as an ad, and if so, they must work with their respective developers to abide by our policies and terms for advertising.
How do I leverage this functionality when creating an experience?
-
When working with brands, they will provide their required age and geography exposure to add their branded asset to your experience.
-
Either the brand or developer will then work with Roblox to create their brand project ID (to request a brand project ID, contact us); (updated on February 4, 2025)
You can then use the brand project ID through the API to implement the branded asset to the right users within your experience.
Can I use this API for my own experiences, without brands?
- At this time, this functionality is just for branded assets. We are open to exploring the possibility of wider use, and would love to hear your feedback on how you may use this.
Will there be a charge for this feature?
- No, there is no added cost for leveraging this feature.
Is this for in-experience items, UGC items or both?
- This is just for in-experience branded assets.