DataStore API

You can send and receive the following request and response payloads to DataStore API of Open Cloud. For information on the usage of the API, see Access Data Stores from External Tools.

Authorization

Like all Open Cloud APIs, DataStore API requires all requests to include the x-api-key header, which contains an API key that is in scope for the request. This requires you to apply the key to the experience and the data store, and the endpoint operation is permitted. If the key is invalid, 403 Unauthorized is returned. For more information on API keys, see Managing API Keys.

Throttling

DataStore API has two types of universe level throttling: request-per-minute throttling and throughput throttling. With every universeId, request-per-minute throttling allows you to send a certain number of requests per minute, and throughput throttling allows you to send a certain amount of data per minute, regardless of the number of API keys.

Unlike the Lua API, these limits currently do not scale according to user count. Exceeding these limits causes the endpoint to return 429 Too Many Requests.

Request Type Endpoints Throttle Limits
Write
  • 10 MB/min/universe write throughput
  • 300 reqs/min/universe
Read
  • 20 MB/min/universe write throughput
  • 300 reqs/min/universe

Input Validation

Before sending your request, make sure to validate endpoint parameters on formatting requirements and constraints in the following table. If a parameter doesn't satisfy the following restrictions, the endpoint returns a 400 Bad Request. Individual endpoints can have additional requirements beyond these.

Input Type Notes
universeId Integer
  • The value of DataModel.GameId, which is visible in the URL on the universe's Configure page.
  • Be careful not to mistake this with a place ID (DataModel.PlaceId), which is visible in the URL when you go to an experience.
datastoreName string
  • Length must be 50 bytes or less.
  • Cannot be null or empty.
scope string

Data store scope

  • Length must be 50 bytes or less.
  • Defaults to global when not provided.
entryKey string
  • Length must be 50 bytes or less.
  • Cannot be null or empty.
versionId / matchVersion string Data store entry version
content JSON string

User data

  • Length must be less than 4 MB.
content-md5 string The base-64 encoded MD5 checksum of content. See Content-MD5.
roblox-entry-attributes JSON object
  • Length must be less than 300 bytes.
roblox-entry-userids JSON array of 0-4 numbers
  • No more than 4 user IDs.
cursor string See Cursors.

Content-MD5

Content-MD5 is the base-64 encoded MD5 checksum of content. It's an optional request header for the Set Entry endpoint that checks the data integrity and detects potential issues.

You can use the langugae of your choice to calculate the value of the content-md5 header. The following example uses Python. The hashlib.md5() and base64.b64encode() functions are available in Python standard libraries (2.7, 3+).


1# With prompts
2$ python -c "import base64, hashlib; print('content-md5: ' + str(base64.b64encode(hashlib.md5(bytes(input('content: '), encoding='utf8')).digest()), encoding='utf8'))"
3content: 750
4content-md5: sTf90fedVsft8zZf6nUg8g==
5# Using just stdin and stdout
6$ echo "750" | python -c "import base64, hashlib; print(str(base64.b64encode(hashlib.md5(bytes(input(), encoding='utf8')).digest()), encoding='utf8'))"
7sTf90fedVsft8zZf6nUg8g==
8

If you run into issues generating a valid content-md5 value, you might need to encode your request body in UTF-8 binary before computing the checksum.

Cursors

Endpoints which return lists of data might also return a nextPageCursor string. This indicates that there is more data available in the requested result set. To receive it, provide this string in the cursor query parameter on a subsequent request. If the cursor parameter is provided but invalid, the endpoint returns 400 Bad Request.

The format of cursor strings is not defined. You should not interpret or parse them as they may change at any time.

Endpoints

  • All endpoint URLs begin with: https://apis.roblox.com/datastores/v1/universes/{universeId} Where universeId is the ID of the universe whose data stores are being accessed.
  • Successful responses that contain data have the header content-type: application/json
  • Each endpoint is analogous to a function of Lua class.DataStoreService which performs the same operation. Links to these functions have been provided for comparison and search convenience.

List DataStores in Universe

Endpoint GET /standard-datastores
Description Returns a list of data stores belonging to a universe.
API Key Permission List DataStores
Query Params
  • prefix (string): Return only data stores with this prefix

  • limit (integer): Maximum number of items to return

  • cursor (string): Provide to request the next set of data (see Cursors)

Response

1200 OK:
2{
3 "datastores": [ DataStore, ... ],
4 "nextPageCursor": string | null
5}
6

Where DataStore are:


1 {
2 "name": string,
3 "createdTime": string
4 }
5
Lua Equivalent DataStoreService:ListDataStoresAsync()

Example

Request

1curl \
2 --include \
3 --location \
4 --request GET \
5 "https://apis.roblox.com/datastores/v1/universes/3310576216/standard-datastores" \
6 --header "x-api-key: ${API_KEY}" \
7 --get \
8 -d "prefix=Player" \
9 -d "limit=5"
10
Response

1HTTP/2 200
2date: Thu, 10 Mar 2022 05:32:09 GMT
3content-type: application/json; charset=utf-8
4content-length: 388
5
Body

1{
2 "datastores": [
3 {
4 "name": "PlayerInventory",
5 "createdTime": "2022-02-18T22:38:59.9244932Z"
6 },
7 {
8 "name": "PlayerExperience",
9 "createdTime": "2022-02-18T23:00:10.4773508Z"
10 },
11 {
12 "name": "PlayerWeapons",
13 "createdTime": "2022-02-18T23:00:22.3725681Z"
14 },
15 {
16 "name": "PlayerArmor",
17 "createdTime": "2022-02-18T22:59:33.8472882Z"
18 },
19 {
20 "name": "PlayerHP",
21 "createdTime": "2022-02-18T22:58:47.6904028Z"
22 }
23 ],
24 "nextPageCursor": "..."
25}
26
Raw(unformatted)

1{
2 "datastores": [
3 {
4 "name": "PlayerInventory",
5 "createdTime": "2022-02-18T22:38:59.9244932Z"
6 },
7 {
8 "name": "PlayerExperience",
9 "createdTime": "2022-02-18T23:00:10.4773508Z"
10 },
11 { "name": "PlayerWeapons", "createdTime": "2022-02-18T23:00:22.3725681Z" },
12 { "name": "PlayerArmor", "createdTime": "2022-02-18T22:59:33.8472882Z" },
13 { "name": "PlayerHP", "createdTime": "2022-02-18T22:58:47.6904028Z" }
14 ],
15 "nextPageCursor": "..."
16}
17

List Entries

Endpoint GET /standard-datastores/datastore/entries
Description Returns a list of entry keys within a data store.
API Key Permission List Keys
Query Params
  • datastoreName (string, required): Name of the data store
  • scope (string): Defaults to global, similar to Lua API
  • AllScopes (string): If true, return keys from all scopes
  • prefix (string): Return only keys with this prefix
  • limit (integer): Maximum number of items to return
  • cursor (string): Provide to request the next set of data (see Cursors)
Response

1200 OK:
2{
3 "keys": [ EntryKey, ... ],
4 "nextPageCursor": string | null
5}
6

Where EntryKey are:


1{
2 "scope": string,
3 "key": string
4}
5
Lua Equivalent DataStore:ListKeysAsync()

Example

Request

1curl \
2 --include \
3 --location \
4 --request GET \
5 "https://apis.roblox.com/datastores/v1/universes/3310576216/standard-datastores/datastore/entries" \
6 --header "x-api-key: ${API_KEY}" \
7 --get \
8 -d "datastoreName=Coins" \
9 -d "prefix=" \
10 -d "limit=5"
11
Response

1HTTP/2 200
2date: Thu, 03 Feb 2022 05:32:09 GMT
3content-type: application/json; charset=utf-8
4content-length: 83
5
Body

1{
2 "keys": [
3 {
4 "key": "269323"
5 }
6 ],
7 "nextPageCursor": "eyJ2ZXJzaW9uIjoxLCJjdXJzb3IiOiIzIyJ9"
8}
9
Raw(unformatted)

1{
2 "keys": [{ "key": "269323" }],
3 "nextPageCursor": "eyJ2ZXJzaW9uIjoxLCJjdXJzb3IiOiIzIyJ9"
4}
5

Get Entry

Endpoint GET /standard-datastores/datastore/entries/entry
Description Returns the value and metadata associated with an entry.
API Key Permission Read entries
Query Params
  • datastoreName (string, required): Name of the data store
  • scope (string): Defaults to global, similar to Lua API
  • entryKey (string): The key which identifies the entry
Response

200 OK: The user content is returned in the body of the response. The following headers describe the metadata:

  • roblox-entry-created-time (ISO datetime, UTC): the time at which the entry was created

  • last-modified (ISO datetime, UTC): the time at which this particular version was created

  • roblox-entry-version (string): the version of the entry being read

  • roblox-entry-attributes (JSON object)

  • roblox-entry-userids (JSON array of numbers)

  • content-md5: the base-64 encoded MD5 checksum of the content

204 No Content: The key is marked as deleted.

Lua Equivalent GlobalDataStore:GetAsync()

Example

Request

1curl \
2 --include \
3 --location \
4 --request GET \
5 "https://apis.roblox.com/datastores/v1/universes/3310576216/standard-datastores/datastore/entries/entry" \
6 --header "x-api-key: ${API_KEY}" \
7 --get \
8 -d "datastoreName=Coins" \
9 -d "entryKey=269323"
10
Response

1HTTP/2 200
2date: Thu, 03 Feb 2022 05:32:35 GMT
3content-type: application/json
4content-length: 3
5content-md5: zuYxEhwuySMvOi8CitXImw==
6roblox-entry-version: 08D9E6A3F2188CFF.0000000001.08D9E6A3F2188CFF.01
7roblox-entry-created-time: 2022-02-02T23:30:06.5388799Z
8roblox-entry-version-created-time: 2022-02-02T23:30:06.5388799Z
9roblox-entry-userids: []
10
Body

1500
2

Set Entry

Endpoint POST /standard-datastores/datastore/entries/entry
Description Sets the value, metadata and user IDs associated with an entry.
API Key Permission

Create entry (when creating new entries) Update entry (when updating existing entries)

Query Params
  • datastoreName (string, required): Name of the data store
  • scope (string): Defaults to global, similar to Lua API
  • entryKey (string): The key which identifies the entry
  • matchVersion (string): Only update if current version matches this. Default: null
  • exclusiveCreate (boolean): Only create the entry if it does not exist. Default: false

Note: You cannot use both matchVersion and exclusiveCreate.

Headers
  • content-md5 (string): the base-64 encoded MD5 checksum of the content. See Content-MD5.

  • roblox-entry-userids (string): Comma-separated list of Roblox user IDs the entry is tagged with. If not provided, existing user IDs are cleared.

  • roblox-entry-attributes (JSON object): If not provided, existing attributes are cleared.

Body JSON, up to 4 MB
Response

200 OK: Returns an EntryVersion


1{
2 "version": string,
3 "deleted": boolean,
4 "contentLength": number,
5 "createdTime": string,
6 "objectCreatedTime": string
7}
8
Lua Equivalent GlobalDataStore:SetAsync()

Example

Request

1curl \
2 --include \
3 --location \
4 --request POST \
5 "https://apis.roblox.com/datastores/v1/universes/3310576216/standard-datastores/datastore/entries/entry?datastoreName=Coins&entryKey=269323" \
6 --header "x-api-key: ${API_KEY}" \
7 --header "content-md5: sTf90fedVsft8zZf6nUg8g==" \
8 --header "content-type: application/json" \
9 --header "roblox-entry-userids: [269323]" \
10 --header "roblox-entry-attributes: {}" \
11 --data-ascii 750
12
Response

1HTTP/2 200
2date: Thu, 03 Feb 2022 06:36:22 GMT
3content-type: application/json; charset=utf-8
4content-length: 191
5
Body

1{
2 "version": "08D9E6A3F2188CFF.000000000A.08D9E6DF7EAC7BB5.01",
3 "deleted": false,
4 "contentLength": 3,
5 "createdTime": "2022-02-03T06:36:22.6964405Z",
6 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
7}
8
Raw (unformatted)

1{
2 "version": "08D9E6A3F2188CFF.000000000A.08D9E6DF7EAC7BB5.01",
3 "deleted": false,
4 "contentLength": 3,
5 "createdTime": "2022-02-03T06:36:22.6964405Z",
6 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
7}
8

Increment Entry

Endpoint POST /standard-datastores/datastore/entries/entry/increment
Description Increments the value for an entry by a given amount, or create a new entry with that amount.
API Key Permission

Create entry (when creating new entries) Update entry (when updating existing entries)

Query Params
  • datastoreName (string, required): Name of the data store
  • scope (string): Defaults to global, similar to Lua API
  • entryKey (string): The key which identifies the entry
  • incrementBy (number): The amount by whihc the entry should be incremented, or the starting value if it does not exist
Headers
  • roblox-entry-userids (string): Comma-separated list of Roblox user IDs the entry is tagged with. If not provided, existing user IDs are cleared.
  • roblox-entry-attributes (JSON object): If not provided, existing attributes are cleared.
Response Responds with the latest version of the entry after it has been incremented. The format is similar to the response for Get Entry.
Lua Equivalent GlobalDataStore:IncrementAsync()

Example

Request

1curl \
2 --include \
3 --location \
4 --request POST \
5 "https://apis.roblox.com/datastores/v1/universes/3310576216/standard-datastores/datastore/entries/entry/increment" \
6 --header "x-api-key: ${API_KEY}" \
7 --header 'content-length: 0' \
8 --get \
9 -d datastoreName=Coins \
10 -d entryKey=269323 \
11 -d incrementBy=3
12
Response

1HTTP/2 200
2date: Thu, 03 Feb 2022 06:36:05 GMT
3content-type: application/json
4content-length: 3
5content-md5: K4phWUsfTE2wkCqKOVztkw==
6roblox-entry-version: 08D9E6A3F2188CFF.0000000009.08D9E6DF74AC5F42.01
7roblox-entry-created-time: 2022-02-02T23:30:06.5388799Z
8roblox-entry-version-created-time: 2022-02-03T06:36:05.9184962Z
9roblox-entry-userids: []
10
Body

1515
2

Delete Entry

Endpoint DELETE /standard-datastores/datastore/entries/entry
Description Marks the entry as deleted by creating a tombstone version. Entries are deleted permanently after 30 days.
API Key Permission Delete entry
Query Params
  • datastoreName (string, required): Name of the data store
  • scope (string): Defaults to global, similar to Lua API
  • entryKey (string): The key which identifies the entry
Response 204 No Content: The entry was deleted.
Lua Equivalent GlobalDataStore:RemoveAsync()

Example

Request

1curl \
2 --include \
3 --location \
4 --request DELETE \
5 "https://apis.roblox.com/datastores/v1/universes/3310576216/standard-datastores/datastore/entries/entry" \
6 --header "x-api-key: ${API_KEY}" \
7 --get \
8 -d datastoreName=Coins \
9 -d entryKey=269323
10
Response

1HTTP/2 204
2date: Thu, 03 Feb 2022 06:38:31 GMT
3

List Entry Versions

Endpoint

GET /standard-datastores/datastore/entries/entry/versions

Description Returns a list of data stores belonging to a universe.
API Key Permission List versions
Query Params
  • datastoreName (string, required): Name of the data store
  • scope (string): Defaults to global, similar to Lua API
  • entryKey (string): The key which identifies the entry
  • startTime (ISO datetime, UTC): Don't consider versions older than this
  • endTime (ISO datetime, UTC): Don't consider versions younger than this
  • sortOrder (string): Either Ascending (older first) or Descending (younger first)
  • limit (integer): Maximum number of items to return
  • cursor (string): Provide to request the next set of data (see Cursors)
Response

1200 OK:
2{
3 "versions": [ EntryVersion, ... ],
4 "nextPageCursor": string | null
5}
6

Where EntryVersion are:


1{
2 "version": string,
3 "deleted": boolean,
4 "contentLength": number,
5 "createdTime": string,
6 "objectCreatedTime": string
7}
8
Error Codes
Throttling 100 requests per minute
Lua Equivalent DataStore:ListVersionsAsync()

Example

Request

1curl \
2 --include \
3 --location \
4 --request GET \
5 "https://apis.roblox.com/datastores/v1/universes/3310576216/standard-datastores/datastore/entries/entry/versions" \
6 --header "x-api-key: ${API_KEY}" \
7 --get \
8 -d "datastoreName=Coins" \
9 -d "entryKey=269323" \
10 -d "limit=5"
11
Response

1HTTP/2 200
2date: Thu, 03 Feb 2022 06:41:41 GMT
3content-type: application/json; charset=utf-8
4content-length: 1213
5
Body

1{
2 "versions": [
3 {
4 "version": "08D9E6A3F2188CFF.0000000001.08D9E6A3F2188CFF.01",
5 "deleted": false,
6 "contentLength": 3,
7 "createdTime": "2022-02-02T23:30:06.5388799Z",
8 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
9 },
10 {
11 "version": "08D9E6A3F2188CFF.0000000002.08D9E6DCC8E6F8B3.01",
12 "deleted": false,
13 "contentLength": 3,
14 "createdTime": "2022-02-03T06:16:58.7409587Z",
15 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
16 },
17 {
18 "version": "08D9E6A3F2188CFF.0000000003.08D9E6DE485A7680.01",
19 "deleted": false,
20 "contentLength": 3,
21 "createdTime": "2022-02-03T06:27:42.065216Z",
22 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
23 },
24 {
25 "version": "08D9E6A3F2188CFF.0000000004.08D9E6DE85DA6B9F.01",
26 "deleted": false,
27 "contentLength": 3,
28 "createdTime": "2022-02-03T06:29:25.2448159Z",
29 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
30 },
31 {
32 "version": "08D9E6A3F2188CFF.0000000005.08D9E6DF5C82B1B3.01",
33 "deleted": false,
34 "contentLength": 3,
35 "createdTime": "2022-02-03T06:35:25.3800371Z",
36 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
37 }
38 ],
39 "nextPageCursor": "eyJ2ZXJzaW9uIjoxLCJjdXJzb3IiOiJleUpwYm14cGJtVldaWEp6YVc5dUlqcG1ZV3h6WlN3aWJHRnpkRlpsY25OcGIyNGlPaUl3T0VRNVJUWkJNMFl5TVRnNFEwWkdMakF3TURBd01EQXdNRFV1TURoRU9VVTJSRVkxUXpneVFqRkNNeTR3TVNJc0lrTjFjbk52Y2xabGNuTnBiMjRpT2pGOSJ9"
40}
41
Raw(unformatted)

1{
2 "versions": [
3 {
4 "version": "08D9E6A3F2188CFF.0000000001.08D9E6A3F2188CFF.01",
5 "deleted": false,
6 "contentLength": 3,
7 "createdTime": "2022-02-02T23:30:06.5388799Z",
8 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
9 },
10 {
11 "version": "08D9E6A3F2188CFF.0000000002.08D9E6DCC8E6F8B3.01",
12 "deleted": false,
13 "contentLength": 3,
14 "createdTime": "2022-02-03T06:16:58.7409587Z",
15 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
16 },
17 {
18 "version": "08D9E6A3F2188CFF.0000000003.08D9E6DE485A7680.01",
19 "deleted": false,
20 "contentLength": 3,
21 "createdTime": "2022-02-03T06:27:42.065216Z",
22 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
23 },
24 {
25 "version": "08D9E6A3F2188CFF.0000000004.08D9E6DE85DA6B9F.01",
26 "deleted": false,
27 "contentLength": 3,
28 "createdTime": "2022-02-03T06:29:25.2448159Z",
29 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
30 },
31 {
32 "version": "08D9E6A3F2188CFF.0000000005.08D9E6DF5C82B1B3.01",
33 "deleted": false,
34 "contentLength": 3,
35 "createdTime": "2022-02-03T06:35:25.3800371Z",
36 "objectCreatedTime": "2022-02-02T23:30:06.5388799Z"
37 }
38 ],
39 "nextPageCursor": "eyJ2ZXJzaW9uIjoxLCJjdXJzb3IiOiJleUpwYm14cGJtVldaWEp6YVc5dUlqcG1ZV3h6WlN3aWJHRnpkRlpsY25OcGIyNGlPaUl3T0VRNVJUWkJNMFl5TVRnNFEwWkdMakF3TURBd01EQXdNRFV1TURoRU9VVTJSRVkxUXpneVFqRkNNeTR3TVNJc0lrTjFjbk52Y2xabGNuTnBiMjRpT2pGOSJ9"
40}
41

Get Entry Version

Endpoint GET /standard-datastores/datastore/entries/entry/versions/version
Description Returns the value and metadata of a specific version of an entry.
API Key Permission Read version
Query Params
  • datastoreName (string, required): Name of the data store
  • scope (string): Defaults to global, similar to Lua API
  • entryKey (string): The key which identifies the entry
  • versionId (string, required): The version to inspect
Response

Same as the response for Get Entry, OR 204 No Content for tombstone versions of deleted entries, which contain the following headers:

  • roblox-entry-created-time (ISO datetime, UTC): the time at which the entry was created
  • last-modified (ISO datetime, UTC): the time at which this particular version was created
  • roblox-entry-version (string): the version of the entry being read
Throttling 100 requests per minute
Lua Equivalent DataStore:GetVersionAsync()

Example

Request

1curl \
2 --include \
3 --location \
4 --request GET \
5 "https://apis.roblox.com/datastores/v1/universes/3310576216/standard-datastores/datastore/entries/entry/versions/version" \
6 --header "x-api-key: ${API_KEY}" \
7 --get \
8 -d "datastoreName=Coins" \
9 -d "entryKey=269323" \
10 -d "versionId=08D9E6A3F2188CFF.0000000003.08D9E6DE485A7680.01"
11
Response

1HTTP/2 200
2date: Thu, 03 Feb 2022 06:43:13 GMT
3content-type: application/json
4content-length: 3
5content-md5: sTf90fedVsft8zZf6nUg8g==
6roblox-entry-version: 08D9E6A3F2188CFF.0000000003.08D9E6DE485A7680.01
7roblox-entry-created-time: 2022-02-02T23:30:06.5388799Z
8roblox-entry-version-created-time: 2022-02-03T06:27:42.0652160Z
9roblox-entry-attributes: {}
10roblox-entry-userids: [269323]
11
Body

1750
2

cURL Examples Help

Each endpoint includes an example invocation of cURL using the Bash shell (bash). Some response headers have been omitted for brevity, and certain JSON response bodies have been formatted for readability (the raw, unformatted response is included). This makes the content-length and content-md5 headers inaccurate.

Where appropriate, examples use the following sample data directly:

  • Universe ID: 3310576216
  • Data Store Name: Coins
  • Data Store Scope: global (default)
  • Key: 269323 (a user ID) whose value is a number.

However, the x-api-key header (see Authorization) uses the API_KEY environment variable in place of an actual API key. Before trying to run these examples yourself, you should set this variable using the read command:


1read -s -p "API Key (will be hidden): " API_KEY
2

This allows you to paste the API key into your shell without it appearing in command history. When you are done trying out examples, you should regenerate the key before using it in production code.

Error Codes

DataStore API error responses include the high-level cause of the error applicable to all Open Cloud API endpoints, the error details specific to the data store, and an error message to help you understand the error. To handle errors, use the HTTP status code, the value of the error field, and the datastoreErrorCode field of the errorDetails object, which is specific to the API.

For example, the following error response displays the payload of the high-level Open Cloud error as INVALID_ARGUMENT, the error message as Invalid Cursor, and the datastoreErrorCode as InvalidCursor:


1{
2 "error": "INVALID_ARGUMENT",
3 "message": "Invalid cursor.",
4 "errorDetails": [
5 {
6 "errorDetailType" : "DatastoreErrorInfo",
7 "datastoreErrorCode" : "InvalidCursor"
8 }
9 ]
10}
11

Reference the following table for a summary of all Open Cloud and data store errors:

HttpStatus Open Cloud Error Data Store Error Message
400 INVALID_ARGUMENT ContentLengthRequired Content-Length header required.
400 INVALID_ARGUMENT InvalidUniverseId Invalid universe id.
400 INVALID_ARGUMENT InvalidCursor Invalid cursor.
400 INVALID_ARGUMENT InvalidVersionId Invalid version id.
400 INVALID_ARGUMENT ExistingValueNotNumeric The existing value is not numeric.
400 INVALID_ARGUMENT IncrementValueTooLarge The numeric value is too large to increment.
400 INVALID_ARGUMENT IncrementValueTooSmall The numeric value is too small to increment.
400 INVALID_ARGUMENT InvalidDataStoreScope IInvalid datastore scope.
400 INVALID_ARGUMENT InvalidEntryKey Invalid entry key.
400 INVALID_ARGUMENT InvalidDataStoreName Invalid datastore name.
400 INVALID_ARGUMENT InvalidStartTime Invalid start time.
400 INVALID_ARGUMENT InvalidEndTime Invalid end time.
400 INVALID_ARGUMENT InvalidAttributes Invalid attributes.
400 INVALID_ARGUMENT InvalidUserIds Invalid userids.
400 INVALID_ARGUMENT ExclusiveCreateAndMatch VersionCannotBeSet Only one of exclusive create or matchVersion parameter can be provided.
400 INVALID_ARGUMENT ContentTooBig Content too big.
400 INVALID_ARGUMENT ChecksumMismatch Md5 checksum mismatch.
400 INVALID_ARGUMENT ContentNotJson Content is not valid json string.
400 INVALID_ARGUMENT InvalidSortOrder Invalid sort order.
403 INSUFFICIENT_SCOPE Forbidden The api key does not have sufficient scope to perform this operation.
403 INSUFFICIENT_SCOPE InsufficientScope Insufficient scope to perform the operation.
404 NOT_FOUND DatastoreNotFound Datastore not found.
404 NOT_FOUND EntryNotFound Entry not found in the datastore.
404 NOT_FOUND VersionNotFound Version is not found.
429 RESOURCE_EXHAUSTED TooManyRequests Too many requests.
500 INTERNAL Unknown Error unknown.