Error Codes and Limits

Requests you make to data stores can fail due to poor connectivity or other issues. To handle errors and return messages with an error code, wrap data store functions in pcall().

Error Code Reference

Error CodeError NameError MessageNotes
101KeyNameEmptyKey name can't be empty.Check if the key input into the data store function is an empty string.
102KeyNameLimitKey name exceeds the 50 character limit.Check if the key input into the data store function exceeds a length of 50.
103ValueNotAllowedCan't allow X in DataStore.A bad update function returned a value of type X.
104CantStoreValueCan't store X in DataStore.The update function returned a value of type X that didn't serialize.
105ValueTooLargeSerialized value exceeds X limit.If you're setting a value with SetAsync() or UpdateAsync(), the serialized length of the value can't exceed the size X. To check the serialized length of the data, use JSONEncode().
106MaxValueInvalidMaxValue must be an integer.If you're passing a maximum value to GetSortedAsync() for an OrderedDataStore, it must be an integer.
106MinValueInvalidMinValue must be an integer.If you're passing a minimum value to GetSortedAsync() for an OrderedDataStore, it must be an integer.
106PageSizeGreaterPageSize must be within a predefined range.The minimum page size for an OrderedDataStore is 1.
106PageSizeLesserPageSize must be within a predefined range.The maximum page size for an OrderedDataStore is 100.
107MinMaxOrderInvalidMaxValue must be greater than or equal to MinValue.The maximum value must be greater than or equal to the minimum value for GetSortedAsync().
301GetAsyncThrottleGetAsync request dropped. Request was throttled but queue was full.GetAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
302SetAsyncThrottleSetAsync request dropped. Request was throttled but queue was full.SetAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
303IncreAsyncThrottleIncrementAsync request dropped. Request was throttled but queue was full.IncrementAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
304UpdateAsyncThrottleUpdateAsync request dropped. Request was throttled but queue was full.UpdateAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
304TransformThrottleUpdateAsync request dropped. Request was throttled but queue was full.UpdateAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
305GetSortedThrottleGetSorted request dropped. Request was throttled but queue was full.GetSortedAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
306RemoveAsyncThrottleRemoveAsync request dropped. Request was throttled but queue was full.RemoveAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
401DataModelNoAccessRequest failed. DataModel is inaccessible while the experience is shutting down.DataModel is uninitialized because the experience is shutting down.
402LuaWebSrvsNoAccessRequest failed. LuaWebService is inaccessible while the experience is shutting down.LuaWebService is uninitialized because the experience is shutting down.
403StudioAccessToApisNotAllowedCan't write to DataStore from Studio because API access is not enabled.API access must be active in order to use Data Stores in Studio.
404InternalErrorOrderedDataStore doesn't exist.The OrderedDataStore associated with this request wasn't found. This might be a sign of data corruption. Try again later.
501InternalErrorCan't parse response because data might be corrupted.The server was unable to parse the response to your request. This might be a sign of data corruption. Try again later.
502RequestRejectedAPI Services rejected the request with error X.Error X occurred when processing on Roblox servers. Try again later.
503InternalErrorData store request was successful but key wasn't found.The key requested wasn't found in the Data Store. This might be a sign of data corruption. Try again later.
504InternalErrorData Store request was successful but the response wasn't formatted correctly.The server was unable to parse the response to your request. This might be a sign of data corruption. Try again later.
505InternalErrorOrderedDataStore request was successful but the response wasn't formatted correctly.The server was unable to parse the response to your OrderedDataStore request. This might be a sign of data corruption. Try again later.
509OperationNotAllowedData Store operations are blocked while running on a Personal RCC to prevent possible data corruption.Data Store writes are blocked on private RCC channels.
511AttributeSizeTooLargeMetadata attribute size exceeds X limit.The serialized metadata size exceeds the limit of X. The value X is dynamic. If the size changes, the value also changes.
512UserIdLimitExceededUserID size exceeds X limit.The length of the user IDs array provided by the user exceeds the limit of X.
513AttributeFormatErrorAttribute userId format is invalid.The user ID provided isn't a number.
513AttributeFormatErrorAttribute metadata format is invalid.The metadata isn't a table.
GetVersionAsyncThrottleGetVersionAsync request dropped. Request was throttled.GetVersionAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
ListDataStoresAsyncThrottleListDataStoresAsync request dropped. Request was throttled.ListDataStoresAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
ListKeysAsyncThrottleListKeysAsync request dropped. Request was throttled.ListKeysAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
ListVersionsAsyncThrottleListVersionsAsync request dropped. Request was throttled.ListVersionsAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.
RemoveVersionAsyncThrottleRemoveVersionAsync request dropped. Request was throttled.RemoveVersionAsync() request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput.

Server Error Codes

Error NameError MessageNotes
DatastoreThrottledThe request rate exceeds the allowed maximum for the datastore.Too many requests were sent to a single Data Store.
InternalServerErrorAn internal server error occurred.Occasional error on Roblox servers. Try again, ideally with exponential backoff.
InvalidPlaceThe provided place is invalid.No matching Universe ID for the place. Try again later.
InvalidTargetThe provided target is invalid.Ordered Data Store key name exceeds the 50 character limit.
InvalidUniverseThe provided universe is invalid.No matching Place ID for the universe. Try again later.
InvalidUserIdsThe provided user IDs have an invalid format.Failed to parse user IDs.
KeyThrottledThe request rate exceeds the allowed maximum for the key.The request rate exceeds the maximum allowed request rate for a single key.
KeyNotFoundThe requested key doesn't exist.The key doesn't exist.
N/ANo pages to advance to.This error occurs when you call Pages:AdvanceToNextPageAsync() on the last page.

Limits

Data models have limits. If an experience exceeds these limits, the service automatically throttles the experience's data store usage and causes future requests to be placed in one of the following queues:

  • Set
  • Ordered set
  • Get
  • Ordered get

Requests in a queue are handled in the order they are received. The called function continues to yield as long as its request is still queued. If the data store key itself is throttled, the request is placed in a queue but is temporarily skipped.

Each queue has a limit of 30 requests. When the limit of a queue is reached, requests fail with an error code in the 301-306 range, indicating that the requests have been dropped entirely.

Server Limits

Each server is allowed a certain number of data store requests based on the request type and number of users. Use GetRequestBudgetForRequestType() to confirm the number of data store requests that the current place can make.

Request TypeFunctionsRequests per Minute
GetGetAsync()60 + numPlayers × 10
Set (limit is shared among all listed functions)SetAsync()
IncrementAsync()
UpdateAsync()
RemoveAsync()
60 + numPlayers × 10
Get SortedGetSortedAsync()5 + numPlayers × 2
Get VersionGetVersionAsync()5 + numPlayers × 2
ListListDataStoresAsync()
ListKeysAsync()
ListVersionAsync()
5 + numPlayers × 2
RemoveRemoveVersionAsync()5 + numPlayers × 2

Data Limits

Data stores limit how much data can be used per entry.

The data store name, key name, and scope must all be under a certain character length. Use string.len() to check their length.

The data (key value) is also stored as a string, regardless of its initial type. You can check the size of the data with the JSONEncode() function, which converts Lua data into a serialized JSON table.

ComponentMaximum Number of Characters
Data Store Name50
Key Name50
Scope50
Data (Key Value)4,194,304 per key

Metadata Limits

Limits to the number of characters in user-defined metadata.

ComponentMaximum Number of Characters
Key Name50
Value250
Key-value Pairs300

Throughput Limits

Per-key throughput limits ensure that performance is optimal on Roblox servers. Each limit applies to every single key across all servers in an experience and refreshes over time.

Roblox examines the usage of quota associated with the key over the last 60 seconds. If the usage, including the current request, is within the throughput limit, the request is approved. If the usage exceeds the limit, the request is denied.

Request TypeLimit
Read25 MB per minute
Write4 MB per minute