Earlier this week we switched some of our gamepass benefits to Subscriptions. The developer docs mention no user-level restrictions to buying subscriptions, just that you need to be ID verified to CREATE subscriptions.
Not long after the switch, we suffered a huge loss in revenue because now not only could users no-longer buy the gamepasses, but they couldn’t sign up for the subscriptions at all. We’ve received several reports from users who are unable to buy subscriptions due to region restrictions, ID verification restrictions, and age restrictions.
To help recover from this loss, we’ve started offering the old gamepasses again, and I’d like to offer gamepasses by default in my in-game shop to users who are unable to buy into the subscription. However, there is nothing in MarketplaceService, or PolicyService that allows developers to check if users can buy subscriptions. This needs to be fixed ASAP.
This sounds more like a feature request than a bug report. May want to consider posting a feature request instead.
Also the documentation does mention this limitation within the first few paragraphs of the subscriptions guide:
Subscriptions will be rolled out to more regions in the future.
Unavailable regions include: Argentina, Canada, Chile, Colombia, India, Indonesia, Israel, Japan, Malaysia, Mexico, Peru, Philippines, Russia, Saudi Arabia, Switzerland, Taiwan, Thailand, Turkey, UAE, Ukraine, and Vietnam.
I agree, there should be a function to allow developers to check if the player’s region is allowed for Subscriptions.
One of the current alternative would be to use the LocalizationService.GetCountryRegionForPlayerAsync API for this. But it wouldn’t be the most supported option as it has to be constantly updated when the feature gets rolled out to more regions.
local LocalizationService = game:GetService("LocalizationService")
local countryCodes = {
"AR", -- Argentina
"CA", -- Canada
"CL", -- Chile
"CO", -- Colombia
"IN", -- India
"ID", -- Indonesia
"IL", -- Israel
"JP", -- Japan
"MY", -- Malaysia
"MX", -- Mexico
"PE", -- Peru
"PH", -- Philippines
"RU", -- Russia
"SA", -- Saudi Arabia
"CH", -- Switzerland
"TW", -- Taiwan
"TH", -- Thailand
"TR", -- Turkey
"AE", -- UAE (United Arab Emirates)
"UA", -- Ukraine
"VN", -- Vietnam
}
local function getCountryRegionForPlayer(player: Player): (boolean, string)
assert(player, "Please pass in a valid player!")
return pcall(LocalizationService.GetCountryRegionForPlayerAsync, LocalizationService, player)
end
local function canBuySubscriptions(player: Player): boolean
local result, playerCountryCode = getCountryRegionForPlayer(player)
if not result then
warn("Country code could not be gotten for player.")
return false
end
-- Check if the player's country code is in the list of not allowed countries
for _, notAllowedCode in ipairs(countryCodes) do
if playerCountryCode == notAllowedCode then
return false -- Player cannot buy subscriptions
end
end
return true -- Player can buy subscriptions
end