You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -5,28 +5,45 @@ description: Regional pricing adjusts the price of your items based on a user's
5
5
6
6
With Regional Pricing, you can offer region-specific prices for your items and build a more inclusive and accessible global economy. After you determine a default global price for an item, Roblox uses a variety of signals like the region's purchasing power, currency exchange rates, and local spending behavior to set the most appropriate price for that item region by region.
7
7
8
-
You can choose which of your items you want to price regionally. When you enable Regional Pricing for an item in your experience, Roblox automatically adjusts the price of that item for users based on their economic location. Economic location is not always the same as account location. To determine a user's economic location, Roblox looks at signals, including VPN usage, billing history, and account history. If their economic location can't be determined, users see the default global price for the item instead.
8
+
You can choose which of your items you want to price regionally. When you enable Regional Pricing for an item in your experience, Roblox automatically adjusts the price of that item for users based on their economic location.
9
9
10
-
## Enable Regional Pricing
10
+
Economic location is not always the same as account location. To determine a user's economic location, Roblox looks at signals, including VPN usage, billing history, and account history. If their economic location can't be determined, users see the default global price for the item instead.
11
+
12
+
To prevent price arbitrage when users gift or trade items with different regional prices, you can [manage in-experience transfers with the `GetUsersPriceLevelsAsync` API](#protect-your-trades-and-gifts).
11
13
12
14
<Alertseverity="warning">
13
-
Regional prices will never be below 30% of the default price of your pass or developer product.
15
+
Regional prices will never be discounted by more than 70% of your default price, and they will never exceed the default price you set for your item.
16
+
17
+
For example, if your item has a default price of 100 Robux, the lowest the item can be priced at is 30 Robux and the highest is 100 Robux, regardless of a user's region.
18
+
</Alert>
19
+
20
+
## Enable Regional Pricing
14
21
15
-
For example, if your item has a default price of 100 Robux, the lowest the item can be priced at is 30 Robux, regardless of a user's region.
22
+
<Alertseverity="info">
23
+
Regional prices update periodically to reflect changes in global economy trends.
16
24
</Alert>
17
25
18
26
### For passes
19
27
20
-
To enable Regional Pricing for a pass:
28
+
To enable Regional Pricing for passes:
21
29
22
30
1. Go to [Creations](https://create.roblox.com/dashboard/creations) and select an experience.
23
31
2. Go to **Monetization** > **Passes**.
24
-
3. Select an existing pass or create a new pass.
25
-
4. Click **Sales**.
26
-
5. Turn on **Enable Regional Pricing**. The **Top Countries/Regions** list updates to show the adjusted regional price per country or region based on the default price of the pass. To view regional prices for all countries and regions, click **View all**.
27
-
6. Click **Save Changes**.
32
+
3. Select an existing pass or multiple passes, or create a new pass.
33
+
4. Click **Enable Regional Pricing**.
34
+
5. (Optional) To view regional prices by country or region, select a pass and go to its **Sales** page. The **Top Countries/Regions** list updates to show the adjusted regional prices based on the default price of the pass. To view regional prices for all countries and regions, click **View all countries**.
35
+
36
+
### For developer products
28
37
29
-
Regional prices update periodically to reflect changes in global economy trends.
38
+
To enable Regional Pricing for developer products:
39
+
40
+
1. Check that your developer products have [dynamically-scripted prices](#check-for-dynamic-pricing).
41
+
2.[Implement the `GetUsersPriceLevelsAsync` method](#protect-your-trades-and-gifts) to regulate item transfers based on users' price levels.
42
+
3. Go to [Creations](https://create.roblox.com/dashboard/creations) and select an experience.
43
+
4. Go to **Monetization** > **Developer Products**.
44
+
5. Select an existing product or multiple products, or create a new product.
45
+
6. Click **Enable Regional Pricing**.
46
+
7. (Optional) To view regional prices by country or region, select a product and go to its **Basic Settings** page. The **Top Countries/Regions** list updates to show the adjusted regional prices based on the default price of the product. To view regional prices for all countries and regions, click **View all countries**.
30
47
31
48
### For Avatar items
32
49
@@ -35,23 +52,180 @@ To enable Regional Pricing for an Avatar item, see [Pricing](../../marketplace/p
35
52
## Check for dynamic pricing
36
53
37
54
<Alertseverity="info">
38
-
You don't need to check for hard-coded prices if you only have passes for sale on your experience details page.
55
+
If you're only applying Regional Pricing to passes for sale on your experience details page, you don't need to check for hard-coded prices.
39
56
</Alert>
40
57
41
-
When you enable Regional Pricing for a pass, the price of the pass adjusts for users in different regions whether it's for sale inside or outside of your experience. However, if you have hard-coded the price into your experience's UI, that number does not update as it's not dynamic or accessible by Roblox. As a result, users are charged the correct region-specific price but the UI still shows them the hard-coded value.
58
+
When you enable Regional Pricing, the price of the item adjusts for users in different regions whether it's for sale inside or outside of your experience. However, if you have hard-coded the price into your experience's UI, that number does not update as it's not dynamic or accessible by Roblox. As a result, users are charged the correct region-specific price but the UI still shows them the hard-coded value.
42
59
43
-
The **dynamic price check**tool updates all products for sale inside your experience with a fake Robux price or a fake economic location to help you identify which prices are hard-coded in your experience's UI and which are dynamically-scripted with `Class.MarketplaceService|MarketplaceService` and called from a client script. After you have identified the hard-coded passes, you can update them to use `MarketplaceService` functions.
60
+
The **dynamic price check tool** updates all items for sale inside your experience with a fake Robux price or a fake economic location to help you identify which prices are hard-coded in your experience's UI and which are dynamically-scripted with `Class.MarketplaceService|MarketplaceService` and called from a client script. After you have identified the hard-coded passes, you can update them to use `MarketplaceService` functions.
44
61
45
62
To use the dynamic price check tool:
46
63
47
-
1. Go to **Monetization** > **Passes**.
64
+
1. Go to **Monetization**.
65
+
- For passes, go to **Passes**.
66
+
- For develper products, go to **Developer Products**.
48
67
2. Click **…** and select **Dynamic Price Check**.
49
68
3. Under **Add test accounts**, enter up to five Roblox users to check for hard-coded prices.
50
69
4. Select a testing type.
51
70
-**Price pinned** updates all dynamically-scripted prices with a set fake Robux amount.
52
71
-**Location pinned** updates all dynamically-scripted prices with a region-specific price for a fake economic location.
53
-
5. Click **Enable**. After a few minutes, you can enter your experience to identify the hard-coded prices.
72
+
5. Click **Enable**. After a few minutes, enter your experience to identify the hard-coded prices.
54
73
55
74
To disable the dynamic price check tool, go to the **Dynamic Price Check** page and click **Disable**.
56
75
57
-
For more information about hard-coded versus dynamically-scripted product prices, see [Check for dynamic pricing](./price-optimization.md#check-for-dynamic-pricing) in the Price optimization page. For more information about selling passes with `MarketplaceService` functions, see [Sell a pass inside your experience](./game-passes.md#inside-your-experience).
76
+
For more information about hard-coded versus dynamically-scripted product prices, see [Check for dynamic pricing](./price-optimization.md#check-for-dynamic-pricing) in the Price optimization page. For more information about selling passes and developer products with `MarketplaceService` functions, see [Sell a pass inside your experience](./game-passes.md#inside-your-experience) and [Sell a developer product inside your experience](./developer-products.md#inside-your-experience).
77
+
78
+
## Protect your trades and gifts
79
+
80
+
Regional pricing can affect in-experience transfers like trading and gifting. Because of price differences across regions, price arbitrage (exploiting price discrepancies between the same products to generate a profit) can take place. To manage the potential for price arbitrage, you can use the `Class.MarketplaceService.GetUsersPriceLevelsAsync|GetUsersPriceLevelsAsync` API, which lets you determine the relative price levels of users so that you can implement logic to regulate item transfers based on these levels.
81
+
82
+
`GetUsersPriceLevelsAsync` provides a numerical value between 1 and 1000 that indicates a user's pricing level. This value is designed to represent the percentage of the full price a user is expected to pay. The price level 1000 represents the full global price, while lower price levels indicate that the user typically pays a lower price because of their economic location.
83
+
84
+
A lower price level difference means that there's a smaller price difference between the full global price and the user's regional price. A higher price level difference means that there's a larger price difference between the two. For example:
85
+
86
+
- User A has the price level 1000, which represents the full global price. This user pays 100% of the base price for an item.
87
+
- User B has the price level 500, which represents 50% of the full global price. This user pays 50% of the base price for an item.
88
+
- Once you know each user's price level, you can choose to approve or block gifting or trading between User A and User B based on their price level difference of 500.
89
+
90
+
### Implement GetUsersPriceLevelsAsync
91
+
92
+
<Alertseverity="warning">
93
+
We recommend that you **do not** cache the results of your `GetUsersPriceLevelsAsync` API calls after a user session. User price levels can change. Relying on cached data can lead to inaccurate transfer logic and potential abuse or exploitation of the system.
94
+
95
+
To make sure that you have the most up-to-date price information for each user, always make calls to `GetUsersPriceLevelsAsync` at game join.
96
+
</Alert>
97
+
98
+
To get the price levels of users involved in an item transfer, call the `GetUsersPriceLevelsAsync` function in the `MarketplaceService`. This function takes an array of user IDs as its argument, and returns an array of `PriceLevelInfo` objects with the following fields:
99
+
100
+
```lua
101
+
typePriceLevelInfo= {
102
+
UserId: number,
103
+
PriceLevel: number
104
+
}
105
+
```
106
+
107
+
After implementing the function, use the returned price levels to choose whether you want to allow an item transfer to take place. For example, you can let users with a higher price level gift items to users with a lower price level, but only allow trading between users that have the same price level as each other. See the [available examples](#examples) for more information.
108
+
109
+
For more information about the `GetUsersPriceLevelsAsync` API, see `Class.MarketplaceService.GetUsersPriceLevelsAsync|MarketplaceService`.
110
+
111
+
### Examples
112
+
113
+
Examples of how you can use `GetUsersPriceLevelsAsync` with Regional Pricing.
114
+
115
+
<h5style={{marginTop:'36px'}}>Example 1: Check the price levels for a list of users</h5>
116
+
117
+
This example shows you how to retrieve price levels for a list of users, which can help you choose whether you want to allow an item transfer to take place.
print("Price level for User 1:", priceLevels[user1Id])
151
+
print("Price level for User 2:", priceLevels[user2Id])
152
+
else
153
+
print("Failed to retrieve price levels.")
154
+
end
155
+
```
156
+
157
+
<h5style={{marginTop:'36px'}}>Example 2: Return a dictionary mapping each user ID to their corresponding price level</h5>
158
+
159
+
This example shows you how to use a helper function to transform the array returned by `GetUsersPriceLevelsAsync` into a user ID to price level mapping, which makes the results easier to read.
-- Define a helper function to map users to their price levels
166
+
-- The parameter priceLevelData is the array returned by MarketplaceService:GetUsersPriceLevelsAsync(), where each object contains a user ID and a price level
167
+
-- The function returns a dictionary mapping each user ID to their corresponding price level
<h5style={{marginTop:'36px'}}>Example 3: Compare a sender's price level to a recipient's price level</h5>
178
+
179
+
This example shows you a **sample implementation** of how to check a sender's price level against the recipient's price level. This can help you manage gifting from users in higher-priced regions to users in lower-priced regions.
<h5style={{marginTop:'36px'}}>Example 4: Check if two users have the same price level</h5>
206
+
207
+
This example shows you a **sample implementation** of how to check if two users have the same price level. This can help you manage trading and ensure a fair exchange between users from different regions
Copy file name to clipboardExpand all lines: content/en-us/production/promotion/content-maturity.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ Content maturity consists of two components:
10
10
-**Content maturity label** - Indicates the level of maturity suitable for the experience according to child development research and industry standards.
11
11
-**Content descriptors** - Indicates what type of content is within an experience, such as realistic depictions of blood or paid item trading.
12
12
13
-
If an experience does not have accurate or all content maturity information, Roblox restricts the playability of the experience on the platform for players younger than 13. In addition, experiences without content maturity information cannot contain any [Restricted content](https://en.help.roblox.com/hc/en-us/articles/15869919570708-Roblox-17-Policy-Standards) without risk of moderation. For this reason, Roblox strongly recommends that you fill out the questionnaire for each of your experiences so that they're available to the largest appropriate audience as possible.
13
+
If an experience does not have accurate or all content maturity information, Roblox restricts the playability of the experience on the platform for all players. In addition, experiences without content maturity information cannot contain any [Restricted content](https://en.help.roblox.com/hc/en-us/articles/15869919570708-Roblox-17-Policy-Standards) without risk of moderation. For this reason, Roblox strongly recommends that you fill out the questionnaire for each of your experiences so that they're available to the largest appropriate audience as possible.
14
14
15
15
<Alertseverity="warning">
16
16
Content descriptors that generate content maturity labels are separate from [genres](../publishing/experience-genres.md) that classify experiences according to their core gameplay. In cases where there is overlap between genres and in-experience content or behavior, answer the Maturity & Compliance questionnaire as accurately as you can regardless of your genre selection or assignment from Roblox.
@@ -491,7 +491,7 @@ Roblox relies on the information you provide in the Maturity & Compliance Questi
491
491
- Roblox provides a moderation action.
492
492
- If your experience contains restricted content without a Restricted maturity label, your experience is subject to moderation consequences.
493
493
- If your experience contains content that is prohibited by Roblox's [Community Standards](https://en.help.roblox.com/hc/en-us/articles/203313410), [Terms of Use](https://en.help.roblox.com/hc/articles/115004647846), or [Restricted Content Policy](https://en.help.roblox.com/hc/articles/15869919570708), your experience is subject to moderation consequences.
494
-
- If your experience otherwise has inaccurate content maturity information according to its content, Roblox may remove the maturity label (or only some or all descriptors if the maturity label is Restricted) from your experience. If an experience does not have content maturity information, Roblox restricts the playability of the experience on the platform for players younger than 13.
494
+
- If your experience otherwise has inaccurate content maturity information according to its content, Roblox may remove the maturity label (or only some or all descriptors if the maturity label is Restricted) from your experience. If an experience does not have content maturity information, Roblox restricts the playability of the experience on the platform for all players.
495
495
- If you repeatedly include inaccurate content maturity information, **your experience and/or account is subject to moderation consequences**.
496
496
497
497
If receive a moderation action and believe Roblox made a mistake, you can appeal the decision:
0 commit comments