Skip to content

Commit e262544

Browse files
update Open Source Docs from Roblox internal teams
1 parent 424ac43 commit e262544

File tree

12 files changed

+259
-83
lines changed

12 files changed

+259
-83
lines changed

content/common/navigation/cloud/reference.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ navigation:
1414
path: /cloud/reference/types
1515
- title: Errors
1616
path: /cloud/reference/errors
17+
- title: Rate limits
18+
path: /cloud/reference/rate-limits
1719
- title: OpenAPI descriptions
1820
path: /cloud/reference/openapi
1921
- heading: Authentication
@@ -55,6 +57,8 @@ navigation:
5557
path: /cloud/features/friends
5658
- title: Game passes
5759
path: /cloud/features/game-passes
60+
- title: Generative AI
61+
path: /cloud/features/generative-ai
5862
- title: Groups
5963
path: /cloud/features/groups
6064
- title: Interactions
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading

content/en-us/cloud-services/http-service.md

Lines changed: 98 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,73 @@ end
6161

6262
### Supported Open Cloud endpoints
6363

64+
The following endpoints are supported. Due to current limitations on `Class.HttpService`, the `..` string is not allowed in URL path parameters to Roblox domains. This means, for example, that data stores and entries containing this string are currently inaccessible from `Class.HttpService`.
65+
66+
#### Assets
67+
68+
- [GetAsset](/cloud/features/assets#/default/Assets_GetAsset)
69+
- [ListAssetVersions](/cloud/features/assets#/default/listAssetVersions)
70+
- [GetAssetVersion](/cloud/features/assets#/default/Assets_GetAssetVersion)
71+
72+
#### Bans and blocks
73+
74+
- [ListUserRestrictions (Place)](/cloud/features/bans-and-blocks#/UserRestriction/Cloud_ListUserRestrictions__Using_Universes)
75+
- [GetUserRestriction (Place)](/cloud/features/bans-and-blocks#/UserRestriction/Cloud_GetUserRestriction__Using_Universes_Places)
76+
- [UpdateUserRestriction (Place)](/cloud/features/bans-and-blocks#/UserRestriction/Cloud_UpdateUserRestriction__Using_Universes_Places)
77+
- [ListUserRestrictions (Universe)](/cloud/features/bans-and-blocks#/UserRestriction/Cloud_ListUserRestrictions)
78+
- [GetUserRestriction (Universe)](/docs/cloud/features/bans-and-blocks#/UserRestriction/Cloud_GetUserRestriction__Using_Universes)
79+
- [UpdateUserRestriction (Universe)](/cloud/features/bans-and-blocks#/UserRestriction/Cloud_UpdateUserRestriction__Using_Universes)
80+
- [ListUserRestrictionLogs (Universe)](https://create.roblox.com/docs/cloud/features/bans-and-blocks#/UserRestriction/Cloud_ListUserRestrictionLogs)
81+
82+
#### Creator Store
83+
84+
- [CreateCreatorStoreProduct](/cloud/features/creator-store#/CreatorStoreProduct/Cloud_CreateCreatorStoreProduct)
85+
- [GetCreatorStoreProduct](/cloud/features/creator-store#/CreatorStoreProduct/Cloud_GetCreatorStoreProduct)
86+
- [UpdateCreatorStoreProduct](/cloud/features/creator-store#/CreatorStoreProduct/Cloud_UpdateCreatorStoreProduct)
87+
- [CreatorStoreAssetsSearch](/cloud/features/creator-store#toolbox-service)
88+
89+
#### Data and memory stores
90+
91+
Data stores:
92+
93+
- [ListDataStores](/cloud/reference/DataStore#Cloud_ListDataStores)
94+
- [SnapshotDataStores](/cloud/features/storage#/DataStore/Cloud_SnapshotDataStores)
95+
- [ListDataStoreEntries](/cloud/reference/DataStoreEntry#Cloud_ListDataStoreEntries__Using_Universes)
96+
- [CreateDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_CreateDataStoreEntry__Using_Universes)
97+
- [GetDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_GetDataStoreEntry__Using_Universes_DataStores)
98+
- [DeleteDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_DeleteDataStoreEntry__Using_Universes_DataStores)
99+
- [UpdateDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_UpdateDataStoreEntry__Using_Universes_DataStores)
100+
- [IncrementDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_IncrementDataStoreEntry__Using_Universes_DataStores)
101+
- [ListDataStoreEntryRevisions](/cloud/features/storage#/DataStoreEntry/Cloud_ListDataStoreEntryRevisions__Using_Universes_DataStores)
102+
- [ListDataStoreEntries (With Scope)](/cloud/features/storage#/DataStoreEntry/Cloud_ListDataStoreEntries__Using_Universes_DataStores)
103+
- [CreateDataStoreEntry (With Scope)](/cloud/features/storage#/DataStoreEntry/Cloud_CreateDataStoreEntry__Using_Universes_DataStores)
104+
- [GetDataStoreEntry (With Scope)](/cloud/features/storage#/DataStoreEntry/Cloud_GetDataStoreEntry__Using_Universes_DataStores_Scopes)
105+
- [DeleteDataStoreEntry (With Scope)](/cloud/features/storage#/DataStoreEntry/Cloud_DeleteDataStoreEntry__Using_Universes_DataStores_Scopes)
106+
- [UpdateDataStoreEntry (With Scope)](/cloud/features/storage#/DataStoreEntry/Cloud_UpdateDataStoreEntry__Using_Universes_DataStores_Scopes)
107+
- [IncrementDataStoreEntry (With Scope)](/cloud/features/storage#/DataStoreEntry/Cloud_IncrementDataStoreEntry__Using_Universes_DataStores_Scopes)
108+
- [ListDataStoreEntryRevisions (With Scope)](/cloud/features/storage#/DataStoreEntry/Cloud_ListDataStoreEntryRevisions__Using_Universes_DataStores_Scopes)
109+
110+
Memory stores:
111+
112+
- [CreateMemoryStoreQueueItem](/cloud/features/storage#/MemoryStoreQueueItem/Cloud_CreateMemoryStoreQueueItem)
113+
- [DiscardMemoryStoreQueueItems](/cloud/features/storage#/MemoryStoreQueueItem/Cloud_DiscardMemoryStoreQueueItems)
114+
- [ReadMemoryStoreQueueItems](/cloud/features/storage#/MemoryStoreQueueItem/Cloud_ReadMemoryStoreQueueItems)
115+
- [ListMemoryStoreSortedMapItems](/cloud/features/storage#/MemoryStoreSortedMapItem/Cloud_ListMemoryStoreSortedMapItems)
116+
- [CreateMemoryStoreSortedMapItem](/cloud/features/storage#/MemoryStoreSortedMapItem/Cloud_CreateMemoryStoreSortedMapItem)
117+
- [GetMemoryStoreSortedMapItem](/cloud/features/storage#/MemoryStoreSortedMapItem/Cloud_GetMemoryStoreSortedMapItem)
118+
- [DeleteMemoryStoreSortedMapItem](/cloud/features/storage#/MemoryStoreSortedMapItem/Cloud_DeleteMemoryStoreSortedMapItem)
119+
- [UpdateMemoryStoreSortedMapItem](/cloud/features/storage#/MemoryStoreSortedMapItem/Cloud_UpdateMemoryStoreSortedMapItem)
120+
- [FlushMemoryStore](/cloud/features/storage#/MemoryStore/Cloud_FlushMemoryStore)
121+
122+
Ordered data stores:
123+
124+
- [ListOrderedDataStoreEntries](/cloud/features/storage#/OrderedDataStoreEntry/Cloud_ListOrderedDataStoreEntries)
125+
- [CreateOrderedDataStoreEntry](/cloud/features/storage#/OrderedDataStoreEntry/Cloud_CreateOrderedDataStoreEntry)
126+
- [GetOrderedDataStoreEntry](/cloud/features/storage#/OrderedDataStoreEntry/Cloud_GetOrderedDataStoreEntry)
127+
- [DeleteOrderedDataStoreEntry](/cloud/features/storage#/OrderedDataStoreEntry/Cloud_DeleteOrderedDataStoreEntry)
128+
- [UpdateOrderedDataStoreEntry](/cloud/features/storage#/OrderedDataStoreEntry/Cloud_UpdateOrderedDataStoreEntry)
129+
- [IncrementOrderedDataStoreEntry](/cloud/features/storage#/OrderedDataStoreEntry/Cloud_IncrementOrderedDataStoreEntry)
130+
64131
#### Groups
65132

66133
- [GetGroup](/cloud/reference/Group#Cloud_GetGroup)
@@ -73,26 +140,40 @@ end
73140
- [GetGroupRole](/cloud/reference/GroupRole#Cloud_GetGroupRole)
74141
- [GetGroupShout](/cloud/reference/GroupShout#Cloud_GetGroupShout)
75142

76-
#### Data stores
143+
#### Inventories
77144

78-
Due to current limitations on `Class.HttpService`, the `..` string is not allowed in URL path parameters to Roblox domains. This means data stores and entries containing this string are currently
79-
inaccessible from `Class.HttpService`.
145+
- [ListInventoryItems](/cloud/reference/InventoryItem#Cloud_ListInventoryItems)
80146

81-
- [ListDataStores](/cloud/reference/DataStore#Cloud_ListDataStores)
82-
- [ListDataStoreEntries](/cloud/reference/DataStoreEntry#Cloud_ListDataStoreEntries__Using_Universes)
83-
- [CreateDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_CreateDataStoreEntry__Using_Universes)
84-
- [GetDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_GetDataStoreEntry__Using_Universes_DataStores)
85-
- [DeleteDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_DeleteDataStoreEntry__Using_Universes_DataStores)
86-
- [UpdateDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_UpdateDataStoreEntry__Using_Universes_DataStores)
87-
- [IncrementDataStoreEntry](/cloud/reference/DataStoreEntry#Cloud_IncrementDataStoreEntry__Using_Universes_DataStores)
147+
#### Luau execution
88148

89-
#### Inventory items
149+
- [CreateLuauExecutionSessionTaskBinaryInput](/cloud/features/luau-execution#/LuauExecutionSessionTaskBinaryInput/Cloud_CreateLuauExecutionSessionTaskBinaryInput)
150+
- [CreateLuauExecutionSessionTask](/cloud/features/luau-execution#/LuauExecutionSessionTask/Cloud_CreateLuauExecutionSessionTask__Using_Universes)
151+
- [CreateLuauExecutionSessionTask (with version)](/cloud/features/luau-execution#/LuauExecutionSessionTask/Cloud_CreateLuauExecutionSessionTask__Using_Universes_Places)
152+
- [GetLuauExecutionSessionTask](/cloud/features/luau-execution#/LuauExecutionSessionTask/Cloud_GetLuauExecutionSessionTask)
153+
- [ListLuauExecutionSessionTaskLogs](/cloud/features/luau-execution#/LuauExecutionSessionTaskLog/Cloud_ListLuauExecutionSessionTaskLogs)
90154

91-
- [ListInventoryItems](/cloud/reference/InventoryItem#Cloud_ListInventoryItems)
155+
#### Notifications
92156

93-
#### Creator Store
157+
- [CreateUserNotification](/cloud/features/notifications#/UserNotification/Cloud_CreateUserNotification)
94158

95-
- [CreatorStoreAssetsSearch](/cloud/features/creator-store#toolbox-service)
159+
#### Places
160+
161+
- [GetPlace](/cloud/features/places#/Place/Cloud_GetPlace)
162+
- [UpdatePlace](/cloud/features/places#/Place/Cloud_UpdatePlace)
163+
- [GetInstance](/cloud/features/places#/Instance/Cloud_GetInstance)
164+
- [UpdateInstance](/cloud/features/places#/Instance/Cloud_UpdateInstance)
165+
166+
#### Universes
167+
168+
- [UpdateUniverse](/cloud/features/universes#/Universe/Cloud_UpdateUniverse)
169+
- [GetUniverse](/cloud/features/universes#/Universe/Cloud_GetUniverse)
170+
- [PublishUniverseMessage](/cloud/features/universes#/Universe/Cloud_PublishUniverseMessage)
171+
- [RestartUniverseServers](/cloud/features/universes#/Universe/Cloud_RestartUniverseServers)
172+
173+
#### Users
174+
175+
- [GetUser](/cloud/features/users#/User/Cloud_GetUser)
176+
- [GenerateUserThumbnail](/cloud/features/users#/User/Cloud_GenerateUserThumbnail)
96177

97178
### Limitations
98179

@@ -107,15 +188,13 @@ inaccessible from `Class.HttpService`.
107188
For each Roblox game server, there is a limit of 500 HTTP requests per minute. Exceeding this can cause request-sending methods to stall for around 30 seconds. Your `Global.LuaGlobals.pcall()` may also fail with a message of `Number of requests exceeded limit`.
108189

109190
- Open Cloud requests consume the same overall limit of 500 HTTP requests per minute enforced on all other requests.
110-
- Each Open Cloud endpoint has its own limit per API key owner (can be a user or a group) that is enforced no matter where the calls come from (`Class.HttpService`, the web, etc.). The following headers are returned with every response and allow you to view the limits and your remaining quota:
191+
- Each endpoint has its own limit per API key owner (can be a user or a group) that is enforced no matter where the calls come from (`Class.HttpService`, the web, etc.).
111192

112-
- `x-ratelimit-limit` - The total number of requests allowed to be made per API key owner (usually per minute).
113-
- `x-ratelimit-remaining` - The number of requests the API key used is still allowed to make. If this number is 0 and you receive a HTTP 429 response status code, then you have reached the rate limit for this endpoint.
114-
- `x-ratelimit-reset` - The number of seconds left before `x-ratelimit-remaining` resets to `x-ratelimit-limit`.
193+
For detailed information about Open Cloud rate limits, authentication-based rate limiting, and best practices, see [Rate Limits](/cloud/reference/rate-limits).
115194

116195
### Additional considerations
117196

118197
- Web requests can fail for many reasons. Use `Global.LuaGlobals.pcall()` and have a plan for when
119-
requests fail.
198+
requests fail.
120199
- Requests should provide a secure form of authentication, such as a pre-shared secret key, so that bad actors cannot pose as one of your Roblox game servers.
121200
- Be aware of the general capacity and rate-limiting policies of the web servers to which requests are being sent.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
title: Rate limits
3+
description: Explains rate limiting on Open Cloud endpoints.
4+
---
5+
6+
Rate limits control the number of requests you can make to endpoints within a specific time window. These limits help ensure service stability and protect Roblox resources from abuse.
7+
8+
## Discovery
9+
10+
There are two ways to determine rate limits: the reference documentation and response headers.
11+
12+
### Documentation pages
13+
14+
Specific rate limits for each endpoint are under the **Limits** section on their documentation pages. View these sections to understand the rate limits that apply before making requests.
15+
16+
<Alert severity="info">
17+
We strive to be as transparent as possible about rate limits, but additional, undocumented limits may apply for DDoS protection and service stability. Always ensure your application handles HTTP 429 rate limit responses. See [Handling rate limits](#handling-rate-limits) for guidance.
18+
19+
If you hit an undocumented rate limit that blocks your use case (or you would like higher limits for an endpoint), please leave feedback explaining your needs in the [Developer Forum](https://devforum.roblox.com/).
20+
</Alert>
21+
22+
### Response headers
23+
24+
Every API response includes headers that provide information about your current rate limit status.
25+
26+
| Header | Description |
27+
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
28+
| `x-ratelimit-limit` | The total number of requests allowed within the rate limit window. This may include multiple limit values for different time windows. |
29+
| `x-ratelimit-remaining` | The number of requests you can still make with your current authentication. When this reaches 0, you receive HTTP 429 responses. |
30+
| `x-ratelimit-reset` | The number of seconds remaining until your rate limit quota resets to the full limit. |
31+
32+
Here's an example of rate limit headers in an API response:
33+
34+
```text
35+
x-ratelimit-limit: 1000, 1000;w=60, 1000;w=60
36+
x-ratelimit-remaining: 998
37+
x-ratelimit-reset: 20
38+
```
39+
40+
In this example:
41+
42+
- You have 998 requests remaining out of your total limit.
43+
- Your quota will reset in 20 seconds.
44+
45+
## Behavior
46+
47+
Rate limit behavior differs by authentication method and whether you make requests from within a Roblox experience.
48+
49+
### API key
50+
51+
Rate limits for API keys are applied across all API keys per owner, which can be either a user or a group. These limits are enforced consistently regardless of where the requests originate—whether from `Class.HttpService`, web applications, or other sources.
52+
53+
#### In-experience with HttpService
54+
55+
When calling endpoints in-experience using `Class.HttpService`, requests also contribute to the fixed limit of 500 HTTP requests per minute per Roblox game server. See [In-experience HTTP requests](/cloud-services/http-service) for more details.
56+
57+
### OAuth 2.0
58+
59+
OAuth 2.0 rate limits are applied per access token. Since each access token represents a unique combination of user and application, every user using your app receives their own independent rate limit quota.
60+
61+
## Handling rate limits
62+
63+
Write your code to expect and handle HTTP 429 (Too Many Requests) responses due to documented limits, abuse prevention, or high-load scenarios. When rate limited, check the `retry-after` response header as a guideline for when to retry. If there is no `retry-after` response header present, implement an exponential backoff retry strategy.

content/en-us/reference/cloud/assets/v1.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@
563563
}
564564
}
565565
},
566-
"/assets/v1/assets/{assetId}/versions": {
566+
"/v1/assets/{assetId}/versions": {
567567
"get": {
568568
"tags": ["Assets"],
569569
"x-roblox-cloud-api-operation": true,
@@ -650,7 +650,7 @@
650650
}
651651
}
652652
},
653-
"/assets/v1/assets/{assetId}/versions:rollback": {
653+
"/v1/assets/{assetId}/versions:rollback": {
654654
"post": {
655655
"tags": ["Assets"],
656656
"x-roblox-cloud-api-operation": true,

content/en-us/reference/cloud/cloud.docs.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5608,7 +5608,7 @@
56085608
"post": {
56095609
"tags": ["Cloud"],
56105610
"summary": "Generate Speech Asset",
5611-
"description": "Generates an English speech audio asset from the specified text.",
5611+
"description": "Generates an English speech audio asset from the specified text.\n\nThis endpoint requires the `asset:read` and `asset:write` scopes in\naddition to the `universe:write` scope.\n\nThe response returns an `Operation` object that must be prefixed with\n`/assets/v1`. For example, the URL to discover the result of the operation\ncould be\n`https://apis.roblox.com/assets/v1/operations/8b42ef30-9c17-4526-b8cf-2ff0136ca94d`.",
56125612
"operationId": "Cloud_GenerateSpeechAsset",
56135613
"parameters": [
56145614
{

content/en-us/reference/cloud/toolbox-service/v1.json

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@
503503
}
504504
],
505505
"description": "The type of audio (Music or SoundEffect).",
506+
"deprecated": true,
506507
"x-enumNames": ["Music", "SoundEffect"],
507508
"x-enum-varnames": ["Music", "SoundEffect"],
508509
"x-enum-descriptions": ["Music", "SoundEffect"]
@@ -516,11 +517,6 @@
516517
"type": "string",
517518
"description": "The audio title.",
518519
"nullable": true
519-
},
520-
"album": {
521-
"type": "string",
522-
"description": "The audio album. Only relevant for Music audio.",
523-
"nullable": true
524520
}
525521
},
526522
"additionalProperties": false,
@@ -639,8 +635,14 @@
639635
{
640636
"$ref": "#/components/schemas/Model"
641637
},
638+
{
639+
"$ref": "#/components/schemas/Music"
640+
},
642641
{
643642
"$ref": "#/components/schemas/Plugin"
643+
},
644+
{
645+
"$ref": "#/components/schemas/SoundEffect"
644646
}
645647
],
646648
"description": "The asset information.",
@@ -1136,6 +1138,29 @@
11361138
"additionalProperties": false,
11371139
"nullable": true
11381140
},
1141+
"Music": {
1142+
"type": "object",
1143+
"allOf": [
1144+
{
1145+
"$ref": "#/components/schemas/Audio"
1146+
}
1147+
],
1148+
"properties": {
1149+
"album": {
1150+
"type": "string",
1151+
"description": "The album the music belongs to.",
1152+
"nullable": true
1153+
},
1154+
"genre": {
1155+
"type": "string",
1156+
"description": "The genre of the music.",
1157+
"nullable": true
1158+
}
1159+
},
1160+
"additionalProperties": false,
1161+
"description": "Representation of a music asset.",
1162+
"nullable": true
1163+
},
11391164
"ObjectMeshSummary": {
11401165
"type": "object",
11411166
"properties": {
@@ -1725,6 +1750,29 @@
17251750
"x-enum-varnames": ["VALUE", "DEVELOPER_SEGMENT"],
17261751
"x-enum-descriptions": ["VALUE", "DEVELOPER_SEGMENT"]
17271752
},
1753+
"SoundEffect": {
1754+
"type": "object",
1755+
"allOf": [
1756+
{
1757+
"$ref": "#/components/schemas/Audio"
1758+
}
1759+
],
1760+
"properties": {
1761+
"category": {
1762+
"type": "string",
1763+
"description": "The sound effect category.",
1764+
"nullable": true
1765+
},
1766+
"subcategory": {
1767+
"type": "string",
1768+
"description": "The sound effect subcategory.",
1769+
"nullable": true
1770+
}
1771+
},
1772+
"additionalProperties": false,
1773+
"description": "Representation of a sound effect asset.",
1774+
"nullable": true
1775+
},
17281776
"SpellCheckerResult": {
17291777
"type": "object",
17301778
"properties": {

0 commit comments

Comments
 (0)