

```json
{
  "openapi": "3.0.0",
  "info": {
    "contact": {
      "name": "Cloud Save Team",
      "url": "https://discussions.unity.com/tag/cloud-save"
    },
    "title": "Cloud Save Data Admin API",
    "version": "1.0",
    "description": "Server (admin) API surface for Unity Cloud Save Data: the endpoints that\ncarry the `environments/{environmentId}` path segment. These endpoints are\nserver-authenticated (Service Account / `unity` JWT) and authorized with\nRBAC permissions, an entitlement check, and a nested-resource check that\nthe environment belongs to the project. The player-facing API (no\nenvironment segment) lives in `data/client-v1-routes.yaml`.\n"
  },
  "servers": [
    {
      "url": "https://services.api.unity.com/cloud-save/v1/data"
    }
  ],
  "tags": [
    {
      "name": "Data",
      "description": "Associated with the Cloud Save Data service."
    }
  ],
  "paths": {
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/all/item-batch": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "post": {
        "summary": "Set Player Item Batch Across Access Classes",
        "description": "Set up to 100 data items with key, value and optional writeLock for the given player, across multiple access classes.\nThe values are limited to a maximum size of 5 MB per access level slots for the player.\nSaved state for each access level for a player is limited to 2000 keys. Attempting to set a new key beyond this limit will result in an error.\nThe batch set operation is considered atomic per access class, but may succeed on one access class and fail on another.\nError responses should identify the affected key operations that failed.\n",
        "operationId": "setCrossAccessClassItemBatch",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Add data items in multiple access classes to store for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCrossAccessClassItemBatchBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetCrossAccessClassItemBatchResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/all/item-request": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "post": {
        "summary": "Get Player Items Across Access Classes",
        "description": "Retrieves saved data values for all keys specified, across access classes.\nLimited to a maximum of 100 keys across all access classes.\n",
        "operationId": "getCrossAccessClassItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "requestBody": {
          "description": "Request data items from multiple access classes for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetCrossAccessClassItemsBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCrossAccessClassItemsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "get": {
        "summary": "Get Player Items",
        "description": "Retrieves saved data values for all keys specified, ordered alphabetically in pages of 20.\nIf no keys are supplied then returns all keys, ordered alphabetically in pages of 20.\n",
        "operationId": "getItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetItemsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/KeyList"
            },
            "in": "query",
            "name": "keys",
            "description": "The keys to retrieve, in exploded form style, e.g. `keys=KEY1&keys=KEY2&keys=KEY3`.",
            "style": "form",
            "explode": true
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "after",
            "description": "The key after which to retrieve the next page of keys."
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "prefix",
            "description": "The prefix to filter keys by, returning only keys that start with this value."
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "substring",
            "description": "The substring to filter keys by, returning only keys that contain this value."
          }
        ]
      },
      "post": {
        "summary": "Set Player Item",
        "description": "Set a data item with a given key and value for the specified player.\nThe value is limited to a maximum size of 5 MB across all default access level slots.\nThe entire default access level saved state for a player is limited to 2000 keys.\nAttempting to set a new key beyond this limit will result in an error.\n",
        "operationId": "setItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Add a data item to store for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      },
      "delete": {
        "summary": "Delete Player Items",
        "description": "Deletes all default access level data associated with a given player.",
        "operationId": "deleteItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/item-batch": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "post": {
        "summary": "Set Player Item Batch",
        "description": "Set up to 20 data items with key, value and optional writeLock for the given player. The values are limited to a maximum size of 5 MB across all default access level slots for the player.\nThe entire default access level saved state for a player is limited to 2000 keys. Attempting to set a new key beyond this limit will result in an error.\nThe batch set operation is considered atomic and if any of the set key operation fails, the entire operation is failed. Error responses should identify the affected key operations that failed.\n",
        "operationId": "setItemBatch",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Set batch data items for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBatchBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemBatchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request. Returned code indicates one of:\n- Request parameter validation failure\n- Other\nSee the errors field for more details.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BasicErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchBasicErrorResponse"
                    }
                  ],
                  "discriminator": {
                    "propertyName": "type",
                    "mapping": {
                      "problems/basic": "#/components/schemas/BasicErrorResponse",
                      "problems/validation": "#/components/schemas/ValidationErrorResponse",
                      "problems/batch-basic": "#/components/schemas/BatchBasicErrorResponse",
                      "problems/batch-validation": "#/components/schemas/BatchValidationErrorResponse"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/BatchConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/keys": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "get": {
        "summary": "Get Player Keys",
        "description": "Gets a paged list of keys for the given player, ordered alphabetically in pages of 100.",
        "operationId": "getKeys",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetKeysResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/Key"
            },
            "in": "query",
            "name": "after",
            "description": "Returns the page of results after the key specified."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/items/{key}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        },
        {
          "$ref": "#/components/parameters/Key"
        }
      ],
      "delete": {
        "summary": "Delete Player Item",
        "description": "Deletes a data item by the specified key for the given player.",
        "operationId": "deleteItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/DeleteConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/WriteLock"
            },
            "in": "query",
            "name": "writeLock",
            "description": "Enforces conflict checking when deleting an existing data item.\nOmitting this field ignores write conflicts. When present, an error response will be returned if the writeLock in the request does not match the stored writeLock."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/public/items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "get": {
        "summary": "Get Public Player Items",
        "description": "Retrieves saved data values for all keys specified, ordered alphabetically in pages of 20.\nIf no keys are supplied then returns all keys, ordered alphabetically in pages of 20.\n",
        "operationId": "getPublicItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetItemsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/KeyList"
            },
            "in": "query",
            "name": "keys",
            "description": "The keys to retrieve, in exploded form style, e.g. `keys=KEY1&keys=KEY2&keys=KEY3`.",
            "style": "form",
            "explode": true
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "after",
            "description": "The key after which to retrieve the next page of keys."
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "prefix",
            "description": "The prefix to filter keys by, returning only keys that start with this value."
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "substring",
            "description": "The substring to filter keys by, returning only keys that contain this value."
          }
        ]
      },
      "post": {
        "summary": "Set Public Player Item",
        "description": "Set a public data item with a given key and value for the specified player.\nThe value is limited to a maximum size of 5 MB across all public access level slots.\nThe entire public saved state for a player is limited to 2000 keys.\nAttempting to set a new key beyond this limit will result in an error.\nThe value set will be publicly readable by any player.\n",
        "operationId": "setPublicItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Add a data item to store for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      },
      "delete": {
        "summary": "Delete Public Player Items",
        "description": "Deletes all public data associated with a given player.",
        "operationId": "deletePublicItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/public/item-batch": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "post": {
        "summary": "Set Public Player Item Batch",
        "description": "Set up to 20 public data items with key, value and optional writeLock for the given player. The values are limited to a maximum size of 5 MB across all slots for the player.\nThe entire public saved state for a player is limited to 2000 keys. Attempting to set a new key beyond this limit will result in an error.\nThe batch set operation is considered atomic and if any of the set key operation fails, the entire operation is failed. Error responses should identify the affected key operations that failed.\n",
        "operationId": "setPublicItemBatch",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Set batch data items for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBatchBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemBatchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request. Returned code indicates one of:\n- Request parameter validation failure\n- Other\nSee the errors field for more details.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BasicErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchBasicErrorResponse"
                    }
                  ],
                  "discriminator": {
                    "propertyName": "type",
                    "mapping": {
                      "problems/basic": "#/components/schemas/BasicErrorResponse",
                      "problems/validation": "#/components/schemas/ValidationErrorResponse",
                      "problems/batch-basic": "#/components/schemas/BatchBasicErrorResponse",
                      "problems/batch-validation": "#/components/schemas/BatchValidationErrorResponse"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/BatchConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/public/keys": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "get": {
        "summary": "Get Public Player Keys",
        "description": "Gets a paged list of public keys for the given player, ordered alphabetically in pages of 100.",
        "operationId": "getPublicKeys",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetKeysResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/Key"
            },
            "in": "query",
            "name": "after",
            "description": "Returns the page of results after the key specified."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/public/items/{key}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        },
        {
          "$ref": "#/components/parameters/Key"
        }
      ],
      "delete": {
        "summary": "Delete Public Player Item",
        "description": "Deletes a public data item by the specified key for the given player.",
        "operationId": "deletePublicItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/DeleteConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/WriteLock"
            },
            "in": "query",
            "name": "writeLock",
            "description": "Enforces conflict checking when deleting an existing data item.\nOmitting this field ignores write conflicts. When present, an error response will be returned if the writeLock in the request does not match the stored writeLock."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/protected/items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "get": {
        "summary": "Get Protected Player Items",
        "description": "Retrieves protected save data values for all keys specified, ordered alphabetically in pages of 20.\nIf no keys are supplied then returns all keys, ordered alphabetically in pages of 20.\n",
        "operationId": "getProtectedItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetItemsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/KeyList"
            },
            "in": "query",
            "name": "keys",
            "description": "The keys to retrieve, in exploded form style, e.g. `keys=KEY1&keys=KEY2&keys=KEY3`.",
            "style": "form",
            "explode": true
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "after",
            "description": "The key after which to retrieve the next page of keys."
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "prefix",
            "description": "The prefix to filter keys by, returning only keys that start with this value."
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "substring",
            "description": "The substring to filter keys by, returning only keys that contain this value."
          }
        ]
      },
      "post": {
        "summary": "Set Protected Player Item",
        "description": "Set a protected data item with a given key and value for the specified player.\nThe value is limited to a maximum size of 5 MB across all protected access level slots.\nThe entire protected saved state for a player is limited to 2000 keys.\nAttempting to set a new key beyond this limit will result in an error.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "setProtectedItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Add a data item to store for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      },
      "delete": {
        "summary": "Delete Protected Player Items",
        "description": "Deletes all protected data associated with a given player. Only accessible via an authenticated server authority.",
        "operationId": "deleteProtectedItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/protected/item-batch": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "post": {
        "summary": "Set Protected Player Item Batch",
        "description": "Set up to 20 protected data items with key, value and optional writeLock for the given player. The values are limited to a maximum size of 5 MB across all slots for the player.\nThe entire protected saved state for a player is limited to 2000 keys. Attempting to set a new key beyond this limit will result in an error.\nThe batch set operation is considered atomic and if any of the set key operation fails, the entire operation is failed. Error responses should identify the affected key operations that failed.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "setProtectedItemBatch",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Set batch data items for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBatchBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemBatchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request. Returned code indicates one of:\n- Request parameter validation failure\n- Other\nSee the errors field for more details.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BasicErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchBasicErrorResponse"
                    }
                  ],
                  "discriminator": {
                    "propertyName": "type",
                    "mapping": {
                      "problems/basic": "#/components/schemas/BasicErrorResponse",
                      "problems/validation": "#/components/schemas/ValidationErrorResponse",
                      "problems/batch-basic": "#/components/schemas/BatchBasicErrorResponse",
                      "problems/batch-validation": "#/components/schemas/BatchValidationErrorResponse"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/BatchConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/protected/keys": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "get": {
        "summary": "Get Protected Player Keys",
        "description": "Gets a paged list of protected keys for the given player, ordered alphabetically in pages of 100.",
        "operationId": "getProtectedKeys",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetKeysResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/Key"
            },
            "in": "query",
            "name": "after",
            "description": "Returns the page of results after the key specified."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/protected/items/{key}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        },
        {
          "$ref": "#/components/parameters/Key"
        }
      ],
      "delete": {
        "summary": "Delete Protected Player Item",
        "description": "Deletes a protected data item by the specified key for the given player. Only accessible via an authenticated server authority.",
        "operationId": "deleteProtectedItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/DeleteConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/WriteLock"
            },
            "in": "query",
            "name": "writeLock",
            "description": "Enforces conflict checking when deleting an existing data item.\nOmitting this field ignores write conflicts. When present, an error response will be returned if the writeLock in the request does not match the stored writeLock."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/private/items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "get": {
        "summary": "Get Private Player Items",
        "description": "Retrieves private save data values for all keys specified, ordered alphabetically in pages of 20.\nIf no keys are supplied then returns all keys, ordered alphabetically in pages of 20.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "getPrivateItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetItemsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/KeyList"
            },
            "in": "query",
            "name": "keys",
            "description": "The keys to retrieve, in exploded form style, e.g. `keys=KEY1&keys=KEY2&keys=KEY3`.",
            "style": "form",
            "explode": true
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "after",
            "description": "The key after which to retrieve the next page of keys."
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "prefix",
            "description": "The prefix to filter keys by, returning only keys that start with this value."
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "substring",
            "description": "The substring to filter keys by, returning only keys that contain this value."
          }
        ]
      },
      "post": {
        "summary": "Set Private Player Item",
        "description": "Set a private data item with a given key and value for the specified player.\nThe value is limited to a maximum size of 5 MB across all private access level slots.\nThe entire private saved state for a player is limited to 2000 keys.\nAttempting to set a new key beyond this limit will result in an error.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "setPrivateItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Add a data item to store for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      },
      "delete": {
        "summary": "Delete Private Player Items",
        "description": "Deletes all private data associated with a given player. Only accessible via an authenticated server authority.",
        "operationId": "deletePrivateItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/private/item-batch": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "post": {
        "summary": "Set Private Player Item Batch",
        "description": "Set up to 20 private data items with key, value and optional writeLock for the given player. The values are limited to a maximum size of 5 MB across all slots for the player.\nThe entire private saved state for a player is limited to 2000 keys. Attempting to set a new key beyond this limit will result in an error.\nThe batch set operation is considered atomic and if any of the set key operation fails, the entire operation is failed. Error responses should identify the affected key operations that failed.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "setPrivateItemBatch",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Set batch data items for a player.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBatchBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemBatchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request. Returned code indicates one of:\n- Request parameter validation failure\n- Other\nSee the errors field for more details.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BasicErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchBasicErrorResponse"
                    }
                  ],
                  "discriminator": {
                    "propertyName": "type",
                    "mapping": {
                      "problems/basic": "#/components/schemas/BasicErrorResponse",
                      "problems/validation": "#/components/schemas/ValidationErrorResponse",
                      "problems/batch-basic": "#/components/schemas/BatchBasicErrorResponse",
                      "problems/batch-validation": "#/components/schemas/BatchValidationErrorResponse"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/BatchConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/private/keys": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        }
      ],
      "get": {
        "summary": "Get Private Player Keys",
        "description": "Gets a paged list of private keys for the given player, ordered alphabetically in pages of 100. Only accessible via an authenticated server authority.",
        "operationId": "getPrivateKeys",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetKeysResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/Key"
            },
            "in": "query",
            "name": "after",
            "description": "Returns the page of results after the key specified."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/{playerId}/private/items/{key}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/PlayerId"
        },
        {
          "$ref": "#/components/parameters/Key"
        }
      ],
      "delete": {
        "summary": "Delete Private Player Item",
        "description": "Deletes a private data item by the specified key for the given player. Only accessible via an authenticated server authority.",
        "operationId": "deletePrivateItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/DeleteConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/WriteLock"
            },
            "in": "query",
            "name": "writeLock",
            "description": "Enforces conflict checking when deleting an existing data item.\nOmitting this field ignores write conflicts. When present, an error response will be returned if the writeLock in the request does not match the stored writeLock."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "get": {
        "summary": "Get Players",
        "description": "Retrieves a paginated list of all players which have data set, ordered alphabetically by player ID, with metadata about their stored data.",
        "operationId": "data.getPlayers",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.entities.list"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPlayersWithDataResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/PlayerId"
            },
            "in": "query",
            "name": "start",
            "description": "The player ID to start the page from. If not specified, the first page will be returned."
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "in": "query",
            "name": "limit",
            "description": "The maximum number of player data IDs to return. If not specified, the default limit of 20 will be used."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/all/item-batch": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        }
      ],
      "post": {
        "summary": "Set Custom Item Batch Across Access Classes",
        "description": "Set up to 100 data items with key, value and optional writeLock for the given custom ID, across multiple access classes.\nThe values are limited to a maximum size of 5 MB per access level slots for the custom ID.\nSaved state for each access level for a custom ID is limited to 2000 keys. Attempting to set a new key beyond this limit will result in an error.\nThe batch set operation is considered atomic per access class, but may succeed on one access class and fail on another.\nError responses should identify the affected key operations that failed.\n",
        "operationId": "setCrossAccessClassCustomItemBatch",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Add data items in multiple access classes to store for a custom ID.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCrossAccessClassCustomItemBatchBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetCrossAccessClassCustomItemBatchResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/all/item-request": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        }
      ],
      "post": {
        "summary": "Get Custom Items Across Access Classes",
        "description": "Retrieves saved data values for all keys specified, across access classes.\nLimited to a maximum of 100 keys across all access classes.\n",
        "operationId": "getCrossAccessClassCustomItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "requestBody": {
          "description": "Request data items from multiple access classes for a custom ID.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetCrossAccessClassCustomItemsBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCrossAccessClassCustomItemsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        }
      ],
      "get": {
        "summary": "Get Custom Items",
        "description": "Retrieves saved data values for all keys specified, ordered alphabetically in pages of 20.\nIf no keys are supplied then returns all keys, ordered alphabetically in pages of 20.\n",
        "operationId": "getCustomItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetItemsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/KeyList"
            },
            "in": "query",
            "name": "keys",
            "description": "The keys to retrieve, in exploded form style, e.g. `keys=KEY1&keys=KEY2&keys=KEY3`.",
            "style": "form",
            "explode": true
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "after",
            "description": "The key after which to retrieve the next page of keys."
          }
        ]
      },
      "post": {
        "summary": "Set Custom Item",
        "description": "Set a data item with a given key and value for the specified custom ID.\nThe value is limited to a maximum size of 5 MB across all default access level slots.\nThe entire default access level saved state for a custom ID is limited to 2000 keys.\nAttempting to set a new key beyond this limit will result in an error.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "setCustomItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Add a data item to store for a custom ID.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      },
      "delete": {
        "summary": "Delete Custom Items",
        "description": "Deletes all default access level data associated with a given custom ID. Only accessible via an authenticated server authority.",
        "operationId": "deleteCustomItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/item-batch": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        }
      ],
      "post": {
        "summary": "Set Custom Item Batch",
        "description": "Set up to 20 data items with key, value and optional writeLock against the custom ID. The values are limited to a maximum size of 5 MB across all default access level slots for the custom ID.\nThe entire default access level saved state for a custom ID is limited to 2000 keys. Attempting to set a new key beyond this limit will result in an error.\nThe batch set operation is considered atomic and if any of the set key operation fails, the entire operation is failed. Error responses should identify the affected key operations that failed.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "setCustomItemBatch",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Set batch data items for a custom ID.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBatchBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemBatchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request. Returned code indicates one of:\n- Request parameter validation failure\n- Other\nSee the errors field for more details.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BasicErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchBasicErrorResponse"
                    }
                  ],
                  "discriminator": {
                    "propertyName": "type",
                    "mapping": {
                      "problems/basic": "#/components/schemas/BasicErrorResponse",
                      "problems/validation": "#/components/schemas/ValidationErrorResponse",
                      "problems/batch-basic": "#/components/schemas/BatchBasicErrorResponse",
                      "problems/batch-validation": "#/components/schemas/BatchValidationErrorResponse"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/BatchConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/keys": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        }
      ],
      "get": {
        "summary": "Get Custom Keys",
        "description": "Gets a paged list of keys for the given custom ID, ordered alphabetically in pages of 100.",
        "operationId": "getCustomKeys",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetKeysResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/Key"
            },
            "in": "query",
            "name": "after",
            "description": "Returns the page of results after the key specified."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/items/{key}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        },
        {
          "$ref": "#/components/parameters/Key"
        }
      ],
      "delete": {
        "summary": "Delete Custom Item",
        "description": "Deletes a data item by the specified key for the specified custom ID. Only accessible via an authenticated server authority.",
        "operationId": "deleteCustomItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/DeleteConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/WriteLock"
            },
            "in": "query",
            "name": "writeLock",
            "description": "Enforces conflict checking when deleting an existing data item.\nOmitting this field ignores write conflicts. When present, an error response will be returned if the writeLock in the request does not match the stored writeLock."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/private/items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        }
      ],
      "get": {
        "summary": "Get Private Custom Items",
        "description": "Retrieves private save data values for all keys specified, ordered alphabetically in pages of 20.\nIf no keys are supplied then returns all keys, ordered alphabetically in pages of 20.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "getPrivateCustomItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetItemsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/KeyList"
            },
            "in": "query",
            "name": "keys",
            "description": "The keys to retrieve, in exploded form style, e.g. `keys=KEY1&keys=KEY2&keys=KEY3`.",
            "style": "form",
            "explode": true
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "after",
            "description": "The key after which to retrieve the next page of keys."
          }
        ]
      },
      "post": {
        "summary": "Set Private Custom Item",
        "description": "Set a private data item with a given key and value for the specified custom ID.\nThe value is limited to a maximum size of 5 MB across all private access level slots.\nThe entire private saved state for a custom ID is limited to 2000 keys.\nAttempting to set a new key beyond this limit will result in an error.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "setPrivateCustomItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Add a data item to store for a custom ID.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      },
      "delete": {
        "summary": "Delete Private Custom Items",
        "description": "Deletes all private data associated with a given custom ID. Only accessible via an authenticated server authority.",
        "operationId": "deletePrivateCustomItems",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/private/item-batch": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        }
      ],
      "post": {
        "summary": "Set Private Custom Item Batch",
        "description": "Set up to 20 private data items with key, value and optional writeLock against the custom ID. The values are limited to a maximum size of 5 MB across all private access level slots for the custom ID.\nThe entire private saved state for a custom ID is limited to 2000 keys. Attempting to set a new key beyond this limit will result in an error.\nThe batch set operation is considered atomic and if any of the set key operation fails, the entire operation is failed. Error responses should identify the affected key operations that failed.\nOnly accessible via an authenticated server authority.\n",
        "operationId": "setPrivateCustomItemBatch",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.upsert"
            ]
          }
        ],
        "requestBody": {
          "description": "Set batch data items for a custom ID.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetItemBatchBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetItemBatchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request. Returned code indicates one of:\n- Request parameter validation failure\n- Other\nSee the errors field for more details.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BasicErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/BatchBasicErrorResponse"
                    }
                  ],
                  "discriminator": {
                    "propertyName": "type",
                    "mapping": {
                      "problems/basic": "#/components/schemas/BasicErrorResponse",
                      "problems/validation": "#/components/schemas/ValidationErrorResponse",
                      "problems/batch-basic": "#/components/schemas/BatchBasicErrorResponse",
                      "problems/batch-validation": "#/components/schemas/BatchValidationErrorResponse"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/BatchConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/private/keys": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        }
      ],
      "get": {
        "summary": "Get Private Custom Keys",
        "description": "Gets a paged list of private keys for the given custom ID, ordered alphabetically in pages of 100. Only accessible via an authenticated server authority.",
        "operationId": "getPrivateCustomKeys",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetKeysResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/Key"
            },
            "in": "query",
            "name": "after",
            "description": "Returns the page of results after the key specified."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/{customId}/private/items/{key}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/CustomId"
        },
        {
          "$ref": "#/components/parameters/Key"
        }
      ],
      "delete": {
        "summary": "Delete Private Custom Item",
        "description": "Deletes a private data item by the specified key for the specified custom ID. Only accessible via an authenticated server authority.",
        "operationId": "deletePrivateCustomItem",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.data.delete"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/DeleteConflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/WriteLock"
            },
            "in": "query",
            "name": "writeLock",
            "description": "Enforces conflict checking when deleting an existing data item.\nOmitting this field ignores write conflicts. When present, an error response will be returned if the writeLock in the request does not match the stored writeLock."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "get": {
        "summary": "Get Custom IDs",
        "description": "Get a paginated list of all Game State custom data IDs for a given project and environment, .",
        "operationId": "getCustomIDs",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.entities.list"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCustomIdsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/CustomId"
            },
            "in": "query",
            "name": "start",
            "description": "The custom data ID to start the page from. If not specified, the first page will be returned."
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "in": "query",
            "name": "limit",
            "description": "The maximum number of custom data IDs to return. If not specified, the default limit of 20 will be used."
          }
        ]
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "get": {
        "summary": "List Indexes",
        "description": "List all existing indexes for a given project and environment. Since the number of total indexes is limited to 20 this endpoint is not paginated.",
        "operationId": "listIndexes",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.list"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetIndexIdsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/players": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Create Default Player Index",
        "description": "Create an index for player data with the default access class.",
        "operationId": "createDefaultPlayerIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.create"
            ]
          }
        ],
        "requestBody": {
          "description": "Configuration object for the index to be created.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/players/{indexId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/IndexId"
        }
      ],
      "delete": {
        "summary": "Delete Default Player Index",
        "description": "Delete an index for player data with the default access class by its index ID.",
        "operationId": "deleteDefaultPlayerIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.delete"
            ]
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/query": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Query Default Player Data",
        "description": "Query player data with the default access class. If no index is available to fulfil the query then the query will fail.",
        "operationId": "queryDefaultPlayerData",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.get"
            ]
          }
        ],
        "requestBody": {
          "description": "Query object with an array of conditions to query the data with.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/players/protected": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Create Protected Player Index",
        "description": "Create an index for player data with the protected access class.",
        "operationId": "createProtectedPlayerIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.create"
            ]
          }
        ],
        "requestBody": {
          "description": "Configuration object for the index to be created.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/players/protected/{indexId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/IndexId"
        }
      ],
      "delete": {
        "summary": "Delete Protected Player Index",
        "description": "Delete an index for player data with the protected access class by its index ID.",
        "operationId": "deleteProtectedPlayerIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.delete"
            ]
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/protected/query": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Query Protected Player Data",
        "description": "Query player data with the protected access class. If no index is available to fulfil the query then the query will fail.",
        "operationId": "queryProtectedPlayerData",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.get"
            ]
          }
        ],
        "requestBody": {
          "description": "Query object with an array of conditions to query the data with.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/players/public": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Create Public Player Index",
        "description": "Create an index for player data with the public access class.",
        "operationId": "createPublicPlayerIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.create"
            ]
          }
        ],
        "requestBody": {
          "description": "Configuration object for the index to be created.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/players/public/{indexId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/IndexId"
        }
      ],
      "delete": {
        "summary": "Delete Public Player Index",
        "description": "Delete an index for player data with the public access class by its index ID.",
        "operationId": "deletePublicPlayerIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.delete"
            ]
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/public/query": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Query Public Player Data",
        "description": "Query player data with the public access class. If no index is available to fulfil the query then the query will fail.",
        "operationId": "queryPublicPlayerData",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.get"
            ]
          }
        ],
        "requestBody": {
          "description": "Query object with an array of conditions to query the data with.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/players/private": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Create Private Player Index",
        "description": "Create an index for player data with the private access class.",
        "operationId": "createPrivatePlayerIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.create"
            ]
          }
        ],
        "requestBody": {
          "description": "Configuration object for the index to be created.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/players/private/{indexId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/IndexId"
        }
      ],
      "delete": {
        "summary": "Delete Private Player Index",
        "description": "Delete an index for player data with the private access class by its index ID.",
        "operationId": "deletePrivatePlayerIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.delete"
            ]
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/players/private/query": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Query Private Player Data",
        "description": "Query player data with the private access class. If no index is available to fulfil the query then the query will fail.",
        "operationId": "queryPrivatePlayerData",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.get"
            ]
          }
        ],
        "requestBody": {
          "description": "Query object with an array of conditions to query the data with.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/custom": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Create Default Custom Index",
        "description": "Create an index for custom data with the default access class.",
        "operationId": "createDefaultCustomIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.create"
            ]
          }
        ],
        "requestBody": {
          "description": "Configuration object for the index to be created.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/custom/{indexId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/IndexId"
        }
      ],
      "delete": {
        "summary": "Delete Default Custom Index",
        "description": "Delete an index for custom data with the default access class by its index ID.",
        "operationId": "deleteDefaultCustomIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.delete"
            ]
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/query": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Query Default Custom Data",
        "description": "Query custom data with the default access class. If no index is available to fulfil the query then the query will fail.",
        "operationId": "queryDefaultCustomData",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.get"
            ]
          }
        ],
        "requestBody": {
          "description": "Query object with an array of conditions to query the data with.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/custom/private": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Create Private Custom Index",
        "description": "Create an index for custom data with the private access class.",
        "operationId": "createPrivateCustomIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.create"
            ]
          }
        ],
        "requestBody": {
          "description": "Configuration object for the index to be created.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/indexes/custom/private/{indexId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        },
        {
          "$ref": "#/components/parameters/IndexId"
        }
      ],
      "delete": {
        "summary": "Delete Private Custom Index",
        "description": "Delete an index for custom data with the private access class by its index ID.",
        "operationId": "deletePrivateCustomIndex",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.delete"
            ]
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/projects/{projectId}/environments/{environmentId}/custom/private/query": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ProjectId"
        },
        {
          "$ref": "#/components/parameters/EnvironmentId"
        }
      ],
      "post": {
        "summary": "Query Private Custom Data",
        "description": "Query custom data with the private access class. If no index is available to fulfil the query then the query will fail.",
        "operationId": "queryPrivateCustomData",
        "tags": [
          "Data"
        ],
        "security": [
          {
            "ServiceAccount": [
              "cloud_save.indexes.get"
            ]
          }
        ],
        "requestBody": {
          "description": "Query object with an array of conditions to query the data with.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryIndexBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryIndexResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ServiceAccount": {
        "type": "http",
        "scheme": "basic",
        "description": "To get started with Authentication, please visit the [Service Account Authentication section](https://services.docs.unity.com/docs/service-account-auth).\n\n\nFor this API, you will need to add the following role(s) to your service account :\n| Role Type | Role Name | Permissions |\n| --- | --- | --- |\n| Project Level Role | Cloud Save Editor | <ul><li>cloud_save.indexes.get</li><li>cloud_save.indexes.list</li><li>cloud_save.indexes.create</li><li>cloud_save.indexes.delete</li><li>cloud_save.entities.list</li><li>cloud_save.data.read</li><li>cloud_save.data.upsert</li><li>cloud_save.data.delete</li><li>cloud_save.files.list</li><li>cloud_save.files.read</li><li>cloud_save.files.delete</li><li>cloud_save.files_env.read</li><li>cloud_save.files_env.provision</li></ul> |\n| Project Level Role | Cloud Save Viewer | <ul><li>cloud_save.indexes.get</li><li>cloud_save.indexes.list</li><li>cloud_save.entities.list</li><li>cloud_save.data.read</li><li>cloud_save.files.list</li><li>cloud_save.files.read</li><li>cloud_save.files_env.read</li></ul> |"
      }
    },
    "parameters": {
      "ProjectId": {
        "name": "projectId",
        "in": "path",
        "description": "ID of the project.",
        "required": true,
        "schema": {
          "type": "string"
        },
        "example": "8bdacc33-6eef-4577-beb0-633c86259f5b"
      },
      "EnvironmentId": {
        "name": "environmentId",
        "in": "path",
        "description": "ID of the environment.",
        "required": true,
        "schema": {
          "type": "string"
        },
        "example": "5v3fb205-d8a2-920f-8013-8c0e814777b3"
      },
      "PlayerId": {
        "name": "playerId",
        "in": "path",
        "description": "The player ID supplied by the Authorization service.",
        "required": true,
        "schema": {
          "type": "string"
        },
        "example": "s1QFdyYFXCC2YBocplKoLstxvQ2r"
      },
      "CustomId": {
        "name": "customId",
        "in": "path",
        "description": "The custom data ID specified by the user. Must be between 1 and 64 characters long and contain only alphanumeric characters, underscores, and hyphens.",
        "required": true,
        "schema": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{1,64}$"
        },
        "example": "my-custom-data-id"
      },
      "Key": {
        "name": "key",
        "in": "path",
        "description": "Item key.",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/Key"
        },
        "example": "EXAMPLE_KEY"
      },
      "IndexId": {
        "name": "indexId",
        "in": "path",
        "description": "The index ID supplied by the Cloud Save service.",
        "required": true,
        "schema": {
          "type": "string"
        },
        "example": "myIndexedKey_1"
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Bad Request. Returned code indicates one of:\n- Request parameter validation failure\n- Other\nSee the errors field for more details.\n",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/BasicErrorResponse",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/BasicErrorResponse"
                },
                {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              ],
              "discriminator": {
                "propertyName": "type",
                "mapping": {
                  "problems/basic": "#/components/schemas/BasicErrorResponse",
                  "problems/validation": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Invalid Authentication Token",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/BasicErrorResponse"
            }
          }
        }
      },
      "Forbidden": {
        "description": "Forbidden",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/BasicErrorResponse"
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Too Many Requests",
        "headers": {
          "Retry-After": {
            "schema": {
              "type": "number"
            },
            "description": "The number of seconds until a request will be accepted"
          }
        },
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/BasicErrorResponse"
            }
          }
        }
      },
      "InternalServerError": {
        "description": "Internal Server Error",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/BasicErrorResponse"
            }
          }
        }
      },
      "ServiceUnavailable": {
        "description": "Service Unavailable",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/BasicErrorResponse"
            }
          }
        }
      },
      "NotFound": {
        "description": "Not Found",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/BasicErrorResponse"
            }
          }
        }
      },
      "Conflict": {
        "description": "Conflict",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/BasicErrorResponse"
            }
          }
        }
      },
      "DeleteConflict": {
        "description": "Conflict. The 'writeLock' supplied in the request does not match the current stored state for this entity, some other client has updated this data item since you acquired this writeLock.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/DeleteConflictErrorResponse"
            }
          }
        }
      },
      "BatchConflict": {
        "description": "Conflict. The 'writeLock' supplied in the request does not match the current stored state for this entity, some other client has updated this data item since you acquired this writeLock.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/BatchConflictErrorResponse"
            }
          }
        }
      }
    },
    "schemas": {
      "BasicErrorResponse": {
        "title": "Basic error response",
        "description": "Referenced from - https://tools.ietf.org/html/rfc7807#page-3",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "A URI reference [RFC3986] that identifies the problem type. This\nspecification encourages that, when dereferenced, it provide\nhuman-readable documentation for the problem type (e.g., using HTML\n[W3C.REC-html5-20141028]). When this member is not present, its\nvalue is assumed to be \"about:blank\".\n\n[RFC3986]: https://www.rfc-editor.org/rfc/rfc3986\n[W3C.REC-html5-20141028]: https://www.rfc-editor.org/rfc/rfc7807#ref-W3C.REC-html5-20141028\n"
          },
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem type. It SHOULD NOT\nchange from occurrence to occurrence of the problem, except for\npurposes of localization (e.g., using proactive content negotiation;\nsee [RFC7231, Section 3.4]).\n\n[RFC7231, Section 3.4]: https://www.rfc-editor.org/rfc/rfc7231#section-3.4\n"
          },
          "status": {
            "type": "integer",
            "description": "The HTTP status code ([RFC7231, Section 6]) generated by the origin\nserver for this occurrence of the problem.\n\n[RFC7231, Section 6]: https://www.rfc-editor.org/rfc/rfc7231#section-6\n"
          },
          "requestId": {
            "$ref": "#/components/schemas/RequestId"
          },
          "code": {
            "description": "Service specific error code",
            "type": "integer"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "nullable": true,
            "description": "A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced."
          },
          "details": {
            "type": "array",
            "description": "Machine readable service specific errors.",
            "items": {
              "type": "object"
            }
          }
        }
      },
      "BaseErrorResponse": {
        "properties": {
          "type": {
            "type": "string",
            "description": "A URI reference [RFC3986] that identifies the problem type. This specification encourages that, when dereferenced, it provide human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be \"about:blank\"."
          },
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem."
          },
          "code": {
            "description": "Service specific error code",
            "type": "integer"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "nullable": true,
            "description": "A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced."
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "ValidationErrorResponse": {
        "title": "ValidationErrorResponse",
        "type": "object",
        "description": "Validation error response when a value provided from the client does not pass validation on server.",
        "example": {
          "type": "problems/validation",
          "title": "validation error",
          "status": 400,
          "detail": "See 'errors' for specific validation errors",
          "code": 1009,
          "errors": [
            {
              "field": "name",
              "messages": [
                "Only alphanumeric characters allowed"
              ]
            }
          ]
        },
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "code": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationErrorBody"
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "errors"
        ]
      },
      "ValidationErrorBody": {
        "title": "ValidationErrorBody",
        "type": "object",
        "properties": {
          "field": {
            "type": "string"
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "field",
          "messages"
        ],
        "description": "Single error in the Validation Error Response."
      },
      "PlayerId": {
        "title": "Player ID",
        "description": "The player ID supplied by the Authorization service.",
        "type": "string",
        "example": "s1QFdyYFXCC2YBocplKoLstxvQ2r"
      },
      "CustomId": {
        "title": "Custom Data ID",
        "pattern": "^[A-Za-z0-9_-]{1,64}$",
        "description": "The custom data ID defined by the user.",
        "type": "string",
        "example": "my-custom-data-id"
      },
      "GetPlayersWithDataResponse": {
        "title": "GetPlayersWithDataResponse",
        "description": "List of players with data set",
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/PlayerId"
                },
                "accessClasses": {
                  "$ref": "#/components/schemas/AccessClassesWithMetadata"
                }
              },
              "required": [
                "id",
                "accessClasses"
              ]
            }
          },
          "links": {
            "type": "object",
            "properties": {
              "next": {
                "type": "string",
                "description": "The URL to the next page of results"
              }
            },
            "required": [
              "next"
            ]
          }
        },
        "required": [
          "results",
          "links"
        ]
      },
      "GetCustomIdsResponse": {
        "title": "GetCustomIdsResponse",
        "description": "List of custom IDs",
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/CustomId"
                },
                "accessClasses": {
                  "$ref": "#/components/schemas/AccessClassesWithMetadata"
                }
              },
              "required": [
                "id",
                "accessClasses"
              ]
            }
          },
          "links": {
            "type": "object",
            "properties": {
              "next": {
                "type": "string",
                "description": "The URL to the next page of results"
              }
            },
            "required": [
              "next"
            ]
          }
        },
        "required": [
          "results",
          "links"
        ]
      },
      "SetCrossAccessClassItemBatchBody": {
        "title": "SetCrossAccessClassItemBatchBody",
        "type": "object",
        "properties": {
          "default": {
            "$ref": "#/components/schemas/SetItemBatchBody"
          },
          "public": {
            "$ref": "#/components/schemas/SetItemBatchBody"
          },
          "protected": {
            "$ref": "#/components/schemas/SetItemBatchBody"
          },
          "private": {
            "$ref": "#/components/schemas/SetItemBatchBody"
          }
        }
      },
      "SetCrossAccessClassCustomItemBatchBody": {
        "title": "SetCrossAccessClassCustomItemBatchBody",
        "type": "object",
        "properties": {
          "default": {
            "$ref": "#/components/schemas/SetItemBatchBody"
          },
          "private": {
            "$ref": "#/components/schemas/SetItemBatchBody"
          }
        }
      },
      "SetCrossAccessClassItemBatchResponse": {
        "title": "SetCrossAccessClassItemBatchResponse",
        "type": "object",
        "properties": {
          "results": {
            "type": "object",
            "properties": {
              "default": {
                "$ref": "#/components/schemas/SetItemBatchResponse"
              },
              "public": {
                "$ref": "#/components/schemas/SetItemBatchResponse"
              },
              "protected": {
                "$ref": "#/components/schemas/SetItemBatchResponse"
              },
              "private": {
                "$ref": "#/components/schemas/SetItemBatchResponse"
              }
            }
          }
        }
      },
      "SetCrossAccessClassCustomItemBatchResponse": {
        "title": "SetCrossAccessClassCustomItemBatchResponse",
        "type": "object",
        "properties": {
          "results": {
            "type": "object",
            "properties": {
              "default": {
                "$ref": "#/components/schemas/SetItemBatchResponse"
              },
              "private": {
                "$ref": "#/components/schemas/SetItemBatchResponse"
              }
            }
          }
        }
      },
      "GetCrossAccessClassItemsBody": {
        "title": "GetCrossAccessClassItemsBody",
        "type": "object",
        "properties": {
          "default": {
            "$ref": "#/components/schemas/AccessClassKeyList"
          },
          "public": {
            "$ref": "#/components/schemas/AccessClassKeyList"
          },
          "protected": {
            "$ref": "#/components/schemas/AccessClassKeyList"
          },
          "private": {
            "$ref": "#/components/schemas/AccessClassKeyList"
          }
        }
      },
      "GetCrossAccessClassCustomItemsBody": {
        "title": "GetCrossAccessClassCustomItemsBody",
        "type": "object",
        "properties": {
          "default": {
            "$ref": "#/components/schemas/AccessClassKeyList"
          },
          "private": {
            "$ref": "#/components/schemas/AccessClassKeyList"
          }
        }
      },
      "AccessClassKeyList": {
        "title": "AccessClassKeyList",
        "type": "object",
        "properties": {
          "keys": {
            "$ref": "#/components/schemas/KeyList"
          }
        }
      },
      "GetCrossAccessClassItemsResponse": {
        "title": "GetCrossAccessClassItemsResponse",
        "type": "object",
        "properties": {
          "results": {
            "type": "object",
            "properties": {
              "default": {
                "$ref": "#/components/schemas/AccessClassData"
              },
              "public": {
                "$ref": "#/components/schemas/AccessClassData"
              },
              "protected": {
                "$ref": "#/components/schemas/AccessClassData"
              },
              "private": {
                "$ref": "#/components/schemas/AccessClassData"
              }
            }
          }
        }
      },
      "GetCrossAccessClassCustomItemsResponse": {
        "title": "GetCrossAccessClassCustomItemsResponse",
        "type": "object",
        "properties": {
          "results": {
            "type": "object",
            "properties": {
              "default": {
                "$ref": "#/components/schemas/AccessClassData"
              },
              "private": {
                "$ref": "#/components/schemas/AccessClassData"
              }
            }
          }
        }
      },
      "AccessClassData": {
        "title": "AccessClassData",
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "minItems": 0,
            "maxItems": 100,
            "description": "Data values for given keys, ordered alphabetically.",
            "items": {
              "$ref": "#/components/schemas/Item"
            }
          }
        }
      },
      "GetItemsResponse": {
        "title": "GetItemsResponse",
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "minItems": 0,
            "maxItems": 20,
            "description": "Data values for all keys, ordered alphabetically in pages of 20.",
            "items": {
              "$ref": "#/components/schemas/Item"
            }
          },
          "links": {
            "type": "object",
            "required": [
              "next"
            ],
            "properties": {
              "next": {
                "type": "string",
                "nullable": true,
                "description": "Contains the URL path for requesting the next page of results. This value is null when there are no pages remaining."
              }
            }
          }
        },
        "required": [
          "results",
          "links"
        ]
      },
      "SetItemBody": {
        "title": "SetItemBody",
        "type": "object",
        "description": "Request type for a Data Item to store in the Cloud Save service.",
        "properties": {
          "key": {
            "description": "The key will be created if it does not exist, provided the item limit of 2000 keys has not been reached for this entity.",
            "allOf": [
              {
                "$ref": "#/components/schemas/Key"
              }
            ]
          },
          "value": {
            "$ref": "#/components/schemas/Value"
          },
          "writeLock": {
            "$ref": "#/components/schemas/WriteLock"
          }
        },
        "example": {
          "key": "ItemKey",
          "value": {
            "Health": 87,
            "Array": [
              23,
              12,
              123
            ],
            "Object": {
              "weapon": "Sword",
              "damage": 3,
              "durability": 46
            }
          },
          "writeLock": "7b8920a57912509f6b5cbb183eb7fcb0"
        },
        "required": [
          "key",
          "value"
        ]
      },
      "SetItemResponse": {
        "title": "SetItemResponse",
        "type": "object",
        "description": "Newly generated writeLock for the item.",
        "properties": {
          "writeLock": {
            "$ref": "#/components/schemas/WriteLock"
          }
        },
        "required": [
          "writeLock"
        ]
      },
      "LiveIndexConfig": {
        "title": "LiveIndexConfig",
        "description": "The read-only configuration for a live index",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "$ref": "#/components/schemas/IndexId"
            },
            "entityType": {
              "type": "string",
              "enum": [
                "player",
                "custom"
              ]
            },
            "accessClass": {
              "$ref": "#/components/schemas/AccessClass"
            },
            "status": {
              "$ref": "#/components/schemas/IndexStatus"
            },
            "fields": {
              "$ref": "#/components/schemas/IndexFieldArr"
            }
          }
        },
        "required": [
          "id",
          "entityType",
          "accessClass",
          "status",
          "fields"
        ]
      },
      "AccessClassesWithMetadata": {
        "title": "AccessClassesWithMetadata",
        "description": "The access classes for the ID. Any given ID can have data stored across multiple access classes.",
        "type": "object",
        "properties": {
          "default": {
            "$ref": "#/components/schemas/AccessClassMetadata"
          },
          "public": {
            "$ref": "#/components/schemas/AccessClassMetadata"
          },
          "protected": {
            "$ref": "#/components/schemas/AccessClassMetadata"
          },
          "private": {
            "$ref": "#/components/schemas/AccessClassMetadata"
          }
        }
      },
      "AccessClassMetadata": {
        "title": "AccessClassMetadata",
        "description": "Metadata regarding data in an access class",
        "type": "object",
        "properties": {
          "totalSize": {
            "type": "integer",
            "description": "The total size of the data stored in bytes for this access class"
          },
          "numKeys": {
            "type": "integer",
            "description": "The number of keys stored for this access class"
          }
        },
        "required": [
          "totalSize",
          "numKeys"
        ]
      },
      "AccessClass": {
        "title": "AccessClass",
        "description": "The entity access class",
        "type": "string",
        "enum": [
          "default",
          "public",
          "protected",
          "private"
        ]
      },
      "IndexFieldArr": {
        "title": "IndexFieldArr",
        "description": "An array of fields in an index. Each field must be unique within the array.",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/IndexField"
        },
        "minItems": 1,
        "maxItems": 20
      },
      "IndexField": {
        "title": "IndexField",
        "description": "A field in an index",
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "example": "myIndexedKey",
            "description": "The indexed Cloud Save key"
          },
          "asc": {
            "type": "boolean",
            "description": "Whether the field is sorted in ascending order"
          }
        },
        "required": [
          "key",
          "asc"
        ]
      },
      "IndexStatus": {
        "title": "IndexStatus",
        "description": "The build status of the index. Index creation may take some time so if an index is still BUILDING, it is not yet ready to be queried.\nIndex deletion may also take some time during which it will be marked as DELETING.\n",
        "type": "string",
        "enum": [
          "READY",
          "BUILDING",
          "DELETING"
        ]
      },
      "IndexId": {
        "title": "IndexId",
        "description": "The index ID. This identifier is only unique for a given entity type and access class, and can be used to delete the index.",
        "type": "string",
        "example": "myIndexedKey_1"
      },
      "CreateIndexResponse": {
        "title": "CreateIndexResponse",
        "description": "The response to a create index request",
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/IndexId"
          },
          "status": {
            "$ref": "#/components/schemas/IndexStatus"
          }
        },
        "required": [
          "id",
          "status"
        ]
      },
      "GetIndexIdsResponse": {
        "title": "GetIndexIdsResponse",
        "description": "List index IDs",
        "type": "object",
        "properties": {
          "indexes": {
            "$ref": "#/components/schemas/LiveIndexConfig"
          }
        }
      },
      "QueryIndexResponse": {
        "title": "QueryIndexResponse",
        "description": "The response to an index query request containing a list of the resulting entity IDs and their associated data.",
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "The entity ID",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/PlayerId"
                    },
                    {
                      "$ref": "#/components/schemas/CustomId"
                    }
                  ]
                },
                "data": {
                  "type": "array",
                  "description": "The list of data key-value pairs for the entity",
                  "items": {
                    "$ref": "#/components/schemas/Item"
                  }
                }
              }
            }
          }
        }
      },
      "DeleteConflictErrorResponse": {
        "title": "ConflictErrorResponse",
        "type": "object",
        "description": "An error sent back upon resource conflict.",
        "example": {
          "type": "problems/data/conflict",
          "title": "conflict error",
          "status": 409,
          "code": 1004,
          "detail": "WriteLock in data item update request does not match stored WriteLock",
          "data": {
            "key": "KEY1",
            "attemptedWriteLock": "2509f6b5cbb187b8920a57913eb7fcb0",
            "existingWriteLock": "7b8920a57912509f6b5cbb183eb7fcb0"
          }
        },
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseErrorResponse"
          },
          {
            "properties": {
              "data": {
                "type": "object",
                "description": "A human-readable explanation specific to this occurrence of the problem.",
                "properties": {
                  "key": {
                    "type": "string"
                  },
                  "attemptedWriteLock": {
                    "type": "string"
                  },
                  "existingWriteLock": {
                    "type": "string"
                  }
                }
              }
            },
            "type": "object"
          }
        ],
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "data"
        ]
      },
      "Key": {
        "title": "Key",
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{1,255}$",
        "description": "Item key",
        "minLength": 1,
        "maxLength": 255,
        "example": "EXAMPLE_KEY"
      },
      "KeyList": {
        "title": "KeyList",
        "type": "array",
        "description": "List of keys",
        "items": {
          "$ref": "#/components/schemas/Key"
        }
      },
      "Value": {
        "title": "Value",
        "type": "object",
        "description": "Any JSON serializable structure with a maximum size of 5 MB."
      },
      "WriteLock": {
        "title": "WriteLock",
        "type": "string",
        "description": "Enforces conflict checking when updating an existing data item. This field should be omitted when creating a new data item.\nWhen updating an existing item, omitting this field ignores write conflicts. When present, an error response will be returned if the writeLock in the request does not match the stored writeLock.\nThe writeLock is an opaque value: send back the value returned by this API without changing or interpreting it.",
        "example": "efac747f6fb244569efef962ca9dc30e"
      },
      "ModifiedMetadata": {
        "title": "ModifiedMetadata",
        "type": "object",
        "description": "Timestamp for when the object was modified.",
        "properties": {
          "date": {
            "$ref": "#/components/schemas/IsoDate"
          }
        },
        "required": [
          "date"
        ]
      },
      "IsoDate": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "description": "Date time in ISO 8601 format. Null if there is no associated value.",
        "example": "2020-04-01T13:07:23Z"
      },
      "Item": {
        "title": "Item",
        "type": "object",
        "description": "Response type for a Data Item stored in the Cloud Save service.",
        "properties": {
          "key": {
            "$ref": "#/components/schemas/Key"
          },
          "value": {
            "$ref": "#/components/schemas/Value"
          },
          "writeLock": {
            "$ref": "#/components/schemas/WriteLock"
          },
          "modified": {
            "$ref": "#/components/schemas/ModifiedMetadata"
          },
          "created": {
            "$ref": "#/components/schemas/ModifiedMetadata"
          }
        },
        "required": [
          "key",
          "value",
          "writeLock",
          "modified",
          "created"
        ]
      },
      "CreateIndexBody": {
        "title": "CreateIndexBody",
        "description": "The request body for creating an index.",
        "type": "object",
        "properties": {
          "indexConfig": {
            "type": "object",
            "properties": {
              "fields": {
                "$ref": "#/components/schemas/IndexFieldArr"
              }
            },
            "required": [
              "fields"
            ]
          }
        },
        "required": [
          "indexConfig"
        ]
      },
      "FieldFilter": {
        "title": "FieldFilter",
        "description": "A field filter for querying an index",
        "type": "object",
        "properties": {
          "key": {
            "$ref": "#/components/schemas/Key"
          },
          "value": {
            "type": "object",
            "description": "The indexed Cloud Save value"
          },
          "op": {
            "type": "string",
            "description": "The comparison operator to use for the filter. The specified value is compared lexicographically to the indexed value using one of the following operators:\n* `EQ` - Equal\n* `NE` - Not Equal\n* `LT` - Less Than\n* `LE` - Less Than or Equal\n* `GT` - Greater Than\n* `GE` - Greater Than or Equal",
            "enum": [
              "EQ",
              "NE",
              "LT",
              "LE",
              "GT",
              "GE"
            ]
          },
          "asc": {
            "type": "boolean",
            "description": "Whether the field is sorted in ascending order"
          }
        },
        "required": [
          "key",
          "value",
          "op",
          "asc"
        ]
      },
      "QueryIndexBody": {
        "title": "QueryIndexBody",
        "description": "The request body for querying an index",
        "type": "object",
        "properties": {
          "fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FieldFilter"
            }
          },
          "returnKeys": {
            "type": "array",
            "description": "The keys to return in the response. This can include keys not on the index. If not specified or empty, the data on the results will be empty for any returned entities.",
            "items": {
              "$ref": "#/components/schemas/Key"
            }
          },
          "offset": {
            "type": "integer",
            "description": "The number of results to skip. Defaults to 0.",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "description": "The maximum number of results to return. Defaults to 10. Specifying 0 will return the default number of results.",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": [
          "fields"
        ]
      },
      "AttemptedItem": {
        "title": "AttemptedItem",
        "type": "object",
        "description": "Response type for an attempted Data Item sent to the Cloud Save service.",
        "properties": {
          "key": {
            "$ref": "#/components/schemas/Key"
          },
          "value": {
            "$ref": "#/components/schemas/Value"
          },
          "writeLock": {
            "$ref": "#/components/schemas/WriteLock"
          }
        },
        "example": {
          "key": "KEY1",
          "value": {
            "value": "data"
          },
          "writeLock": "7b8920a57912509f6b5cbb183eb7fcb0"
        },
        "required": [
          "key",
          "value",
          "writeLock"
        ]
      },
      "ConflictErrorResponseData": {
        "title": "ConflictErrorResponseData",
        "description": "A human-readable explanation specific to this occurrence of the problem.",
        "type": "object",
        "properties": {
          "attempted": {
            "$ref": "#/components/schemas/AttemptedItem"
          },
          "existing": {
            "$ref": "#/components/schemas/Item"
          }
        }
      },
      "BatchConflictErrorResponse": {
        "title": "BatchConflictErrorResponse",
        "type": "object",
        "description": "An error response sent back upon a batch update containing a resource conflict. All Data Items within the request should be considered unprocessed. The error response data[] property contains the Data Items that conflicted.",
        "example": {
          "type": "problems/data/batch-conflict",
          "title": "batch conflict error",
          "status": 409,
          "code": 1015,
          "detail": "WriteLock in one or more data items within update request does not match stored WriteLock",
          "data": [
            {
              "attempted": {
                "key": "KEY1",
                "value": {
                  "value": "new data"
                },
                "writeLock": "7b8920a57912509f6b5cbb183eb7fcb0"
              },
              "existing": {
                "key": "KEY1",
                "value": {
                  "value": "old data"
                },
                "writeLock": "2509f6b5cbb187b8920a57913eb7fcb0",
                "modified": {
                  "date": "2020-02-22T20:20:20Z"
                },
                "created": {
                  "date": "2020-01-20T20:20:20Z"
                }
              }
            }
          ]
        },
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseErrorResponse"
          },
          {
            "properties": {
              "data": {
                "type": "array",
                "description": "A human-readable explanation specific to this occurrence of the problem.",
                "items": {
                  "$ref": "#/components/schemas/ConflictErrorResponseData"
                }
              }
            },
            "type": "object"
          }
        ],
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "data"
        ]
      },
      "KeyMetadata": {
        "title": "KeyMetadata",
        "type": "object",
        "description": "Response type Key with metadata for an individual data item stored in the Cloud Save service.",
        "example": {
          "key": "KEY1",
          "writeLock": "7b8920a57912509f6b5cbb183eb7fcb0",
          "modified": {
            "date": "2020-02-20T20:20:20Z"
          }
        },
        "properties": {
          "key": {
            "$ref": "#/components/schemas/Key"
          },
          "writeLock": {
            "$ref": "#/components/schemas/WriteLock"
          },
          "modified": {
            "$ref": "#/components/schemas/ModifiedMetadata"
          }
        },
        "required": [
          "key",
          "writeLock",
          "modified"
        ]
      },
      "GetKeysResponse": {
        "title": "GetKeysResponse",
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "description": "A paged list of keys for the given player, ordered alphabetically in pages of 100.",
            "items": {
              "$ref": "#/components/schemas/KeyMetadata"
            }
          },
          "links": {
            "type": "object",
            "required": [
              "next"
            ],
            "properties": {
              "next": {
                "type": "string",
                "nullable": true,
                "description": "Contains the URL path for requesting the next page of results. This value is null when there are no pages remaining."
              }
            }
          }
        },
        "required": [
          "results",
          "links"
        ]
      },
      "SetItemBatchBody": {
        "title": "SetItemBatchBody",
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "$ref": "#/components/schemas/SetItemBody"
            }
          }
        }
      },
      "SetItemBatchResponse": {
        "title": "SetItemBatchResponse",
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "$ref": "#/components/schemas/Key"
                },
                "writeLock": {
                  "$ref": "#/components/schemas/WriteLock"
                }
              },
              "required": [
                "key",
                "writeLock"
              ]
            }
          }
        }
      },
      "BatchValidationErrorResponse": {
        "title": "BatchValidationErrorResponse",
        "type": "object",
        "description": "Batch validation error response when one or more values provided from the client does not pass validation on server",
        "example": {
          "type": "problems/batch-validation",
          "title": "batch-validation error",
          "status": 400,
          "code": 1014,
          "detail": "See 'errors' for specific validation errors",
          "errors": [
            {
              "key": "KEY_1",
              "field": "name",
              "messages": [
                "Only alphanumeric characters allowed"
              ]
            }
          ]
        },
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "code": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BatchValidationErrorBody"
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "errors"
        ]
      },
      "BatchValidationErrorBody": {
        "title": "BatchValidationErrorBody",
        "type": "object",
        "description": "Single error in the Batch Validation Error Response.",
        "properties": {
          "field": {
            "type": "string"
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "key": {
            "type": "string"
          }
        },
        "required": [
          "field",
          "messages",
          "key"
        ]
      },
      "BatchBasicErrorResponse": {
        "title": "BatchBasicErrorResponse",
        "type": "object",
        "description": "Batch basic error response when one or more values provided from the client fails some condition",
        "example": {
          "type": "problems/batch-basic",
          "title": "batch-basic error",
          "status": 404,
          "code": 1016,
          "detail": "See 'errors' for error details",
          "errors": [
            {
              "key": "KEY_1",
              "messages": [
                "data item not found"
              ]
            }
          ]
        },
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "code": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BatchBasicErrorBody"
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "errors"
        ]
      },
      "BatchBasicErrorBody": {
        "title": "BatchBasicErrorBody",
        "type": "object",
        "description": "Single error in the Batch Basic Error Response.",
        "properties": {
          "messages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "key": {
            "type": "string"
          }
        },
        "required": [
          "messages",
          "key"
        ]
      },
      "RequestId": {
        "title": "Request ID",
        "description": "An identifier Unity uses internally to investigate what happened to\na particular request that went through the Unity Services or Game API\nGateway.\n"
      }
    }
  }
}
```