PolicyService
PolicyService helps you query information regarding policy compliance for players around the world based on age range, location, and platform type.
Summary
Methods
Determines if a user can see brand project assets inside your experience.
Returns policy information about a player based on geolocation, age group, and platform.
Properties
Methods
CanViewBrandProjectAsync
Determines if a user can see brand project assets inside your experience. This method lets you work with brands to only show commercial assets to brand-compliant audiences.
To use CanViewBrandProjectAsync, you must use a brand project ID provided by Roblox. To request a brand project ID, contact us.
You must call this method on a server-side Script and wrap it in a pcall().
Parameters
The Player object you're trying to show the brand project to.
The brand project ID provided by Roblox. Represents all assets associated with a brand project.
Returns
Whether or not the brand project can be shown to the specific user.
Code Samples
-- 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)
-- 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)
GetPolicyInfoForPlayerAsync
Returns policy information about a player based on geolocation, age group, and platform. The structure of the returned dictionary is as follows:
Name | Type | Required for | Description |
---|---|---|---|
AreAdsAllowed | Boolean | Any experience that includes immersive ads. | When true, the player might see immersive ads within an experience. |
ArePaidRandomItemsRestricted | Boolean | Any experience that has paid random items. | When true, the player can not interact with paid random item generators, either via in‑experience currency bought with Robux or Robux directly. |
AllowedExternalLinkReferences | Array | Any experience that references external links. | A list of external link references such as social media links, handles, or iconography that a player is permitted to see. Possible values include "Discord", "Facebook", "Twitch", "YouTube", "X", "GitHub", and "Guilded". |
IsContentSharingAllowed | Boolean | Any experience that allows users to share content off platform. | When true, the player is allowed to share content using APIs which open external sharing flows such as PromptShareCapture(). |
IsEligibleToPurchaseSubscription | Boolean | Any experience that wants to sell subscriptions. | When true, the player is eligible to purchase subscriptions within an experience. |
IsPaidItemTradingAllowed | Boolean | Any experience that allows users to purchase virtual items that they can trade with other players. | When true, the player can trade virtual items that they purchased with in-experience currency or Robux. |
IsSubjectToChinaPolicies | Boolean | Any experience that is available in China. | When true, an experience should enforce compliance changes. See this forum post for more information. |
Exceptions
Like any async call, this method needs to be wrapped in pcall() and error-handled properly. A full list of possible error messages and their reasons is:
Message | Reason |
---|---|
Instance was not a player | The player parameter is not a Player instance. |
Players not found | Internal error that the Players object is missing. |
This method cannot be called on the client for a non-local player | This method cannot be called on the client for a non-local Player. |
GetPolicyInfoForPlayerAsync is called too many times | Internal error that GetPolicyInfoForPlayerAsync() is called more than 100 (current setting) times before an HTTP response comes back. |
See also LocalizationService:GetCountryRegionForPlayerAsync() which returns a country/region code string according to the player's client IP geolocation.
Parameters
Returns
A dictionary containing information about the policy information of the requested player; see above for the dictionary structure.
Code Samples
local PolicyService = game:GetService("PolicyService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local success, result = pcall(function()
return PolicyService:GetPolicyInfoForPlayerAsync(player)
end)
if not success then
warn("PolicyService error: " .. result)
elseif result.ArePaidRandomItemsRestricted then
warn("Player cannot interact with paid random item generators")
end