{ "host": "demo.accelbyte.io", "info": { "contact": { "email": "engineering@accelbyte.io", "name": "Engineering Team at AccelByte", "url": "https://accelbyte.io" }, "description": "Justice Cloudsave Service", "title": "justice-cloudsave-service", "version": "3.29.0" }, "schemes": [ "https" ], "externalDocs": { "description": "API Docs", "url": "https://stage.accelbyte.io/cloudsave/apidocs" }, "securityDefinitions": { "authorization": { "in": "header", "name": "Authorization", "type": "apiKey" } }, "swagger": "2.0", "paths": { "/cloudsave/v1/admin/namespaces/{namespace}/adminrecords": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of records key by namespace", "operationId": "adminListAdminGameRecordV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "description": "query, search game records by key", "in": "query", "name": "query", "type": "string" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Retrieve list of records key by namespace", "schema": { "$ref": "#/definitions/models.ListAdminGameRecordKeysResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18149\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18139\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "List key of admin game record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18139": "unable to get record", "18149": "invalid request body", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/adminrecords/bulk": { "post": { "consumes": [ "application/json" ], "description": "Bulk get admin game records. Maximum key per request 20.", "operationId": "adminBulkGetAdminGameRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkGetAdminGameRecordRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.BulkGetAdminGameRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18168\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18169\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18171\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18170\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18172\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get admin game records", "tags": [ "AdminRecord" ], "x-errorCodes": { "18168": "invalid request body", "18169": "request record keys list exceed max size [%d]", "18170": "unable to get record", "18171": "record not found", "18172": "unable to decode record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/adminrecords/{key}": { "delete": { "consumes": [ "application/json" ], "description": "This endpoints delete game record in namespace-level", "operationId": "adminDeleteAdminGameRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18167\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18142\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete admin game record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18142": "unable to delete record", "18167": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get a record by its key in namespace-level.", "operationId": "adminGetAdminGameRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in namespace-level retrieved", "schema": { "$ref": "#/definitions/models.AdminGameRecordResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18140\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18139\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18138\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get admin game record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18138": "unable to decode record", "18139": "unable to get record", "18140": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new admin game record or append the existing admin game record.\n\n**Append example:**\n\nExample 1\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\nExample 2\n-\tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34; }`\n\n-\tNew JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\ttags (default: *empty array*, type: array of string)\n\tIndicate the tagging for the admin record.\n2.\tttl_config (default: *empty*, type: object)\n\tIndicate the TTL configuration for the admin record.\n\taction:\n\t- DELETE: record will be deleted after TTL is reached\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;],\n\t\t\u0026#34;ttl_config\u0026#34;: {\n\t\t\t\u0026#34;expires_at\u0026#34;: \u0026#34;2026-01-02T15:04:05Z\u0026#34;, // should be in RFC3339 format\n\t\t\t\u0026#34;action\u0026#34;: \u0026#34;DELETE\u0026#34;\n\t\t},\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminPostAdminGameRecordV1", "parameters": [ { "description": "game record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.AdminGameRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record in namespace-level saved", "schema": { "$ref": "#/definitions/models.AdminGameRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18134\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18136\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18135\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18013\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18165\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or append admin game record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18013": "unable to save record", "18134": "invalid request body", "18135": "unable to marshal request body", "18136": "invalid request body: size of the request body must be less than [%d]MB", "18165": "unable to decode record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new admin game record or replace the existing admin game record.\n\n**Append example:**\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\ttags (default: *empty array*, type: array of string)\n\tIndicate the tagging for the admin record.\n2.\tttl_config (default: *empty*, type: object)\n\tIndicate the TTL configuration for the admin record.\n\taction:\n\t- DELETE: record will be deleted after TTL is reached\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;],\n\t\t\u0026#34;ttl_config\u0026#34;: {\n\t\t\t\u0026#34;expires_at\u0026#34;: \u0026#34;2026-01-02T15:04:05Z\u0026#34;, // should be in RFC3339 format\n\t\t\t\u0026#34;action\u0026#34;: \u0026#34;DELETE\u0026#34;\n\t\t},\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminPutAdminGameRecordV1", "parameters": [ { "description": "game record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.AdminGameRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.AdminGameRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18144\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18146\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18145\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18164\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18147\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace admin game record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18144": "invalid request body", "18145": "unable to marshal request body", "18146": "invalid request body: size of the request body must be less than [%d]MB", "18147": "unable to update record", "18164": "unable to decode record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/adminrecords/{key}/ttl": { "delete": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will delete the ttl config of the admin game record", "operationId": "deleteAdminGameRecordTTLConfig", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "TTL config deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18361\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18362\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete admin game record TTL config", "tags": [ "TTLConfig" ], "x-errorCodes": { "18361": "record not found", "18362": "unable to update record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/binaries": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of binary records by namespace.", "operationId": "adminListGameBinaryRecordsV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "description": "query, search game records by key", "in": "query", "name": "query", "type": "string" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Retrieve list of records by namespace", "schema": { "$ref": "#/definitions/models.ListGameBinaryRecordsAdminResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18304\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18301\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Query game binary records", "tags": [ "AdminGameBinaryRecord" ], "x-errorCodes": { "18301": "unable to get record", "18304": "invalid request body", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "Create a game binary record.\n\nOther detail info:\n\n`key` should follow these rules:\n1. support uppercase and lowercase letters, numbers, and separators **\u0026#34;-\u0026#34;**, **\u0026#34;_\u0026#34;**, **\u0026#34;.\u0026#34;** are allowed\n2. begin and end with letters or numbers\n3. spaces are not allowed\n4. separators must not appears twice in a row\n\t\n\nSupported file types: jpeg, jpg, png, bmp, gif, mp3, webp, and bin.\n", "operationId": "adminPostGameBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.GameBinaryRecordCreate" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record in namespace-level created", "schema": { "$ref": "#/definitions/models.UploadBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18305\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "409": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18309\u003c/td\u003e\u003ctd\u003ekey already exists\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18301\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18307\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18310\u003c/td\u003e\u003ctd\u003eunable to get presigned URL\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create game binary record", "tags": [ "AdminGameBinaryRecord" ], "x-errorCodes": { "18301": "unable to get record", "18305": "invalid request body", "18307": "unable to save record", "18309": "key already exists", "18310": "unable to get presigned URL", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/binaries/{key}": { "delete": { "consumes": [ "application/json" ], "description": "Delete a game binary record.", "operationId": "adminDeleteGameBinaryRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18322\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18320\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete game binary record", "tags": [ "AdminGameBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18320": "unable to delete record", "18322": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get a game binary record by its key.", "operationId": "adminGetGameBinaryRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in namespace-level retrieved", "schema": { "$ref": "#/definitions/models.GameBinaryRecordAdminResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18303\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18301\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get game binary record", "tags": [ "AdminGameBinaryRecord" ], "x-errorCodes": { "18301": "unable to get record", "18303": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "Update a game binary record file by its key", "operationId": "adminPutGameBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BinaryRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.GameBinaryRecordAdminResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18316\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18317\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18318\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Update game binary record file", "tags": [ "AdminGameBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18316": "invalid request body", "18317": "record not found", "18318": "unable to update record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/binaries/{key}/metadata": { "put": { "consumes": [ "application/json" ], "description": "Update a game binary record metadata by its key", "operationId": "adminPutGameBinaryRecorMetadataV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.GameBinaryRecordMetadataRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.GameBinaryRecordAdminResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18316\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18317\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18318\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Update game binary record metadata", "tags": [ "AdminGameBinaryRecord" ], "x-errorCodes": { "18316": "invalid request body", "18317": "record not found", "18318": "unable to update record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/binaries/{key}/presigned": { "post": { "consumes": [ "application/json" ], "description": "Request presigned URL to upload the binary record to s3.\n\nOther detail info:\n\nSupported file types: jpeg, jpg, png, bmp, gif, mp3, webp, and bin.\n", "operationId": "adminPostGameBinaryPresignedURLV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.UploadBinaryRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Successful Operation", "schema": { "$ref": "#/definitions/models.UploadBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18311\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18313\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18312\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18314\u003c/td\u003e\u003ctd\u003eunable to get presigned URL\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Request presigned URL for upload game binary records", "tags": [ "AdminGameBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18311": "invalid request body", "18312": "unable to get record", "18313": "record not found", "18314": "unable to get presigned URL", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/binaries/{key}/ttl": { "delete": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will delete the ttl config of the game binary record", "operationId": "deleteGameBinaryRecordTTLConfig", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "TTL config deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18317\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18318\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete game binary record TTL config", "tags": [ "TTLConfig" ], "x-errorCodes": { "18317": "record not found", "18318": "unable to update record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/concurrent/adminrecords/{key}": { "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new game record or replace the existing game record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n\n\n## Parameters Notes\n1. updatedAt (required: true)\n Time format style: RFC3339\n2. value\n Json\n3. tags (default: *empty array*, type: array of string)\n Indicate the tagging for the admin record.\n**Request Body Example:**\n```\n{\n\t\u0026#34;value\u0026#34;: {},\n\t\u0026#34;updatedAt\u0026#34;: \u0026#34;2022-03-17T10:42:15.444Z\u0026#34;,\n\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;]\n}\n```\n## Optimistic Concurrency Control\n\nThis endpoint implement optimistic concurrency control to avoid race condition.\nIf the record has been updated since the client fetch it, the server will return HTTP status code 412 (precondition failed)\nand client need to redo the operation (fetch data and do update).\nOtherwise, the server will process the request.\n", "operationId": "adminPutAdminGameRecordConcurrentHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.AdminGameConcurrentRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record saved" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18144\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18146\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "412": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18180\u003c/td\u003e\u003ctd\u003eprecondition failed: record has changed\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18145\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18147\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace admin game record", "tags": [ "AdminConcurrentRecord" ], "x-errorCodes": { "18144": "invalid request body", "18145": "unable to marshal request body", "18146": "invalid request body: size of the request body must be less than [%d]MB", "18147": "unable to update record", "18180": "precondition failed: record has changed", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/concurrent/records/{key}": { "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new game record or replace the existing game record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n\n\n## Parameters Notes\n1. set_by (default: CLIENT, type: string)\n\tIndicate which party that could modify the game record.\n\tSERVER: record can be modified by server only.\n\tCLIENT: record can be modified by client and server.\n2. updatedAt (required: true)\n Time format style: RFC3339\n3. value\n Json\n4. tags (default: *empty array*, type: array of string)\n Indicate the tagging for the game record.\n**Request Body Example:**\n```\n{\n\t\u0026#34;set_by\u0026#34;: \u0026#34;SERVER\u0026#34;,\n\t\u0026#34;value\u0026#34;: {},\n\t\u0026#34;updatedAt\u0026#34;: \u0026#34;2022-03-17T10:42:15.444Z\u0026#34;,\n\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;]\n}\n```\n## Optimistic Concurrency Control\n\nThis endpoint implement optimistic concurrency control to avoid race condition.\nIf the record has been updated since the client fetch it, the server will return HTTP status code 412 (precondition failed)\nand client need to redo the operation (fetch data and do update).\nOtherwise, the server will process the request.\n", "operationId": "adminPutGameRecordConcurrentHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.AdminConcurrentRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record saved" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18060\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18052\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "412": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18056\u003c/td\u003e\u003ctd\u003eprecondition failed: record has changed\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18051\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18053\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace game record", "tags": [ "AdminConcurrentRecord" ], "x-errorCodes": { "18051": "unable to marshal request body", "18052": "invalid request body: size of the request body must be less than [%d]MB", "18053": "unable to update record", "18056": "precondition failed: record has changed", "18060": "invalid request body", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/plugins": { "delete": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will delete grpc plugins configuration", "operationId": "deletePluginConfig", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "OK" }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18406\u003c/td\u003e\u003ctd\u003eplugins config not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete plugin configuration", "tags": [ "PluginConfig" ], "x-errorCodes": { "18406": "plugins config not found", "20000": "internal server error", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:PLUGINS [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will get grpc plugins configuration", "operationId": "getPluginConfig", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PluginResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18404\u003c/td\u003e\u003ctd\u003eplugins not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get plugin configuration", "tags": [ "PluginConfig" ], "x-errorCodes": { "18404": "plugins not found", "20000": "internal server error", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:PLUGINS [READ]" ] } ] }, "patch": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will update grpc plugins configuration", "operationId": "updatePluginConfig", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PluginRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PluginResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18408\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18409\u003c/td\u003e\u003ctd\u003eplugins config not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Update plugin configuration", "tags": [ "PluginConfig" ], "x-errorCodes": { "18408": "invalid request body", "18409": "plugins config not found", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:PLUGINS [UPDATE]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new grpc plugins configuration per namespace", "operationId": "createPluginConfig", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PluginRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.PluginResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18401\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "409": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18402\u003c/td\u003e\u003ctd\u003eplugins already configured\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create plugin configuration", "tags": [ "PluginConfig" ], "x-errorCodes": { "18401": "invalid request body", "18402": "plugins already configured", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:PLUGINS [CREATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/records": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of records key by namespace", "operationId": "listGameRecordsHandlerV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "required": true, "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "required": true, "type": "integer" }, { "description": "query, search game records by key", "in": "query", "name": "query", "type": "string" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Retrieve list of records key by namespace", "schema": { "$ref": "#/definitions/models.ListGameRecordKeysResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18004\u003c/td\u003e\u003ctd\u003eunable to retrieve list of key records\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18001\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Query game records", "tags": [ "AdminGameRecord" ], "x-errorCodes": { "18001": "unable to get record", "18004": "unable to retrieve list of key records", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/records/{key}": { "delete": { "consumes": [ "application/json" ], "description": "This endpoints delete game record in namespace-level", "operationId": "adminDeleteGameRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18040\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete game record", "tags": [ "AdminGameRecord" ], "x-errorCodes": { "18040": "unable to delete record", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get a record by its key in namespace-level.", "operationId": "adminGetGameRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in namespace-level retrieved", "schema": { "$ref": "#/definitions/models.GameRecordAdminResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18003\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18001\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get game record", "tags": [ "AdminGameRecord" ], "x-errorCodes": { "18001": "unable to get record", "18003": "record not found", "18005": "unable to decode record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new game record or append the existing game record.\n\n**Append example:**\n\nExample 1\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\nExample 2\n-\tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34; }`\n\n-\tNew JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\tset_by (default: CLIENT, type: string)\n\tIndicate which party that could modify the game record.\n\tSERVER: record can be modified by server only.\n\tCLIENT: record can be modified by client and server.\n2.\tttl_config (default: *empty*, type: object)\n\tIndicate the TTL configuration for the game record.\n\taction:\n\t- DELETE: record will be deleted after TTL is reached\n3.\ttags (default: *empty array*, type: array of string)\n\tIndicate the tagging for the game record.\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;set_by\u0026#34;: \u0026#34;SERVER\u0026#34;,\n\t\t\u0026#34;ttl_config\u0026#34;: {\n\t\t\t\u0026#34;expires_at\u0026#34;: \u0026#34;2026-01-02T15:04:05Z\u0026#34;, // should be in RFC3339 format\n\t\t\t\u0026#34;action\u0026#34;: \u0026#34;DELETE\u0026#34;\n\t\t},\n\t\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;]\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminPostGameRecordHandlerV1", "parameters": [ { "description": "game record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.GameRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record in namespace-level saved", "schema": { "$ref": "#/definitions/models.GameRecordAdminResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18011\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18015\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18012\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18013\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or append game record", "tags": [ "AdminGameRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18011": "invalid request body", "18012": "unable to marshal request body", "18013": "unable to save record", "18015": "invalid request body: size of the request body must be less than [%d]MB", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new game record or replace the existing game record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\tset_by (default: CLIENT, type: string)\n\tIndicate which party that could modify the game record.\n\tSERVER: record can be modified by server only.\n\tCLIENT: record can be modified by client and server.\n2.\tttl_config (default: *empty*, type: object)\n\tIndicate the TTL configuration for the game record.\n\taction:\n\t- DELETE: record will be deleted after TTL is reached\n3.\ttags (default: *empty array*, type: array of string)\n\tIndicate the tagging for the game record.\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;set_by\u0026#34;: \u0026#34;SERVER\u0026#34;,\n\t\t\u0026#34;ttl_config\u0026#34;: {\n\t\t\t\u0026#34;expires_at\u0026#34;: \u0026#34;2026-01-02T15:04:05Z\u0026#34;, // should be in RFC3339 format\n\t\t\t\u0026#34;action\u0026#34;: \u0026#34;DELETE\u0026#34;\n\t\t},\n\t\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;]\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminPutGameRecordHandlerV1", "parameters": [ { "description": "game record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.GameRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.GameRecordAdminResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18050\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18052\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18051\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18053\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace game record", "tags": [ "AdminGameRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18050": "invalid request body", "18051": "unable to marshal request body", "18052": "invalid request body: size of the request body must be less than [%d]MB", "18053": "unable to update record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/records/{key}/ttl": { "delete": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will delete the ttl config of the game record", "operationId": "deleteGameRecordTTLConfig", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "TTL config deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18003\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18053\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete game record TTL config", "tags": [ "TTLConfig" ], "x-errorCodes": { "18003": "record not found", "18053": "unable to update record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/tags": { "get": { "consumes": [ "application/json" ], "description": "## Description\n\nRetrieve list of available tags by namespace", "operationId": "adminListTagsHandlerV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Available tags retrieved", "schema": { "$ref": "#/definitions/models.ListTagsResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18503\u003c/td\u003e\u003ctd\u003eunable to list tags\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18502\u003c/td\u003e\u003ctd\u003eunable to list tags\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "List tags", "tags": [ "AdminTags" ], "x-errorCodes": { "18502": "unable to list tags", "18503": "unable to list tags", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoint will create new tags", "operationId": "adminPostTagHandlerV1", "parameters": [ { "description": "tag data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.TagRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Tag created" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18505\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "409": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18506\u003c/td\u003e\u003ctd\u003etag already exists\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18507\u003c/td\u003e\u003ctd\u003eunable to create tag\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create a tag", "tags": [ "AdminTags" ], "x-errorCodes": { "18505": "invalid request body", "18506": "tag already exists", "18507": "unable to create tag", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/tags/{tag}": { "delete": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoint will delete tag by name", "operationId": "adminDeleteTagHandlerV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "tag name", "in": "path", "name": "tag", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Tag deleted" }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18510\u003c/td\u003e\u003ctd\u003etag not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18509\u003c/td\u003e\u003ctd\u003eunable to delete tag\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete a tag", "tags": [ "AdminTags" ], "x-errorCodes": { "18509": "unable to delete tag", "18510": "tag not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [DELETE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/adminrecords/{key}/bulk": { "post": { "consumes": [ "application/json" ], "description": "Bulk get admin player record by userIds, max allowed 20 at a time.", "operationId": "bulkGetAdminPlayerRecordByUserIdsV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkUserIDsRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.BulkGetAdminPlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18184\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18186\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18185\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18187\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get admin player record by multiple user ID", "tags": [ "AdminRecord" ], "x-errorCodes": { "18184": "invalid request body", "18185": "unable to get record", "18186": "record not found", "18187": "unable to decode record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/bulk/records/size": { "post": { "consumes": [ "application/json" ], "description": "Bulk get player\u0026#39;s record size, max allowed 20 at a time, that can be\n\tretrieved using this endpoint.\n", "operationId": "bulkGetPlayerRecordSizeHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkUserKeyRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record retrieved", "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordSizeResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18125\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18124\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get player records size", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18124": "unable to get record", "18125": "invalid request body", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/records": { "get": { "consumes": [ "application/json" ], "deprecated": true, "description": "Retrieve list of player records key and userID under given namespace.", "operationId": "listPlayerRecordHandlerV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "description": "query, search player records by key or userID", "in": "query", "name": "query", "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.ListPlayerRecordKeysResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18113\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18114\u003c/td\u003e\u003ctd\u003eunable to retrieve list of key records\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Retrieve list of public player records", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18113": "invalid request body", "18114": "unable to retrieve list of key records", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/records/{key}/bulk": { "post": { "consumes": [ "application/json" ], "description": "Retrieve player record key and payload in bulk under given namespace.\nMaximum number of user ids per request is 20.\n", "operationId": "adminBulkGetPlayerRecordsByUserIDsHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkUserIDsRequest" } }, { "description": "key of the record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18125\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18126\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18124\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18006\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get player records by multiple user ids", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18006": "unable to decode record", "18124": "unable to get record", "18125": "invalid request body", "18126": "request record keys list exceed max size [%d]", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "This endpoints will create new player record or replace the existing player record in bulk.\nMaximum number of user ids per request is 10.\nMaximum total size of the request payload is 5 MB.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body for this endpoint does not exceed 10 update request or 250 KB of whole request body.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminBulkPutPlayerRecordsByKeyHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkUpdatePlayerRecordsByKeyRequest" } }, { "description": "key of the record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "items": { "$ref": "#/definitions/models.BulkUpdatePlayerRecordByKeyResponse" }, "type": "array" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18353\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18356\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18354\u003c/td\u003e\u003ctd\u003erecords amount exceeded max limit\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18355\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk update player records by key", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18353": "invalid request body", "18354": "records amount exceeded max limit", "18355": "unable to marshal request body", "18356": "invalid request body: size of the request body must be less than [%d]MB", "20000": "internal server error", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/adminrecords": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of admin player records key and userID under given namespace.", "operationId": "adminListAdminUserRecordsV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "description": "query, search admin player records by key", "in": "query", "name": "query", "type": "string" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.ListAdminPlayerRecordKeysResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18159\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18160\u003c/td\u003e\u003ctd\u003eunable to retrieve list of key records\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "List key of admin player record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18159": "invalid request body", "18160": "unable to retrieve list of key records", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/adminrecords/bulk": { "post": { "consumes": [ "application/json" ], "description": "Bulk get admin player records. Maximum key per request 20.", "operationId": "adminBulkGetAdminPlayerRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkGetAdminPlayerRecordRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.BulkGetAdminPlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18174\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18175\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18177\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18176\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18178\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get admin player records", "tags": [ "AdminRecord" ], "x-errorCodes": { "18174": "invalid request body", "18175": "request record keys list exceed max size [%d]", "18176": "unable to get record", "18177": "record not found", "18178": "unable to decode record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/adminrecords/{key}": { "delete": { "consumes": [ "application/json" ], "description": "Delete a record (arbitrary JSON data) in user-level with given key.", "operationId": "adminDeleteAdminPlayerRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record in user-level saved" }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18167\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18154\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete admin player record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18154": "unable to delete record", "18167": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get a admin record in user-level (arbitrary JSON data) by its key.", "operationId": "adminGetAdminPlayerRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in user-level retrieved", "schema": { "$ref": "#/definitions/models.AdminPlayerRecordResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18152\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18151\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18157\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get admin player record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18151": "unable to get record", "18152": "record not found", "18157": "unable to decode record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new admin player record or append the existing admin game record.\n\n**Append example:**\n\nExample 1\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\nExample 2\n-\tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34; }`\n\n-\tNew JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\ttags (default: *empty array*, type: array of string)\n\tIndicate the tagging for the admin record.\n2.\tttl_config (default: *empty*, type: object)\n\tIndicate the TTL configuration for the admin record.\n\taction:\n\t- DELETE: record will be deleted after TTL is reached\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;],\n\t\t\u0026#34;ttl_config\u0026#34;: {\n\t\t\t\u0026#34;expires_at\u0026#34;: \u0026#34;2026-01-02T15:04:05Z\u0026#34;, // should be in RFC3339 format\n\t\t\t\u0026#34;action\u0026#34;: \u0026#34;DELETE\u0026#34;\n\t\t},\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminPostPlayerAdminRecordV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.AdminPlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record in user-level saved", "schema": { "$ref": "#/definitions/models.AdminPlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18150\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18033\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18163\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or append admin player record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18033": "unable to save record", "18150": "invalid request body", "18163": "unable to decode record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [CREATE]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new admin player record or replace the existing admin player record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\ttags (default: *empty array*, type: array of string)\n\tIndicate the tagging for the admin record.\n2.\tttl_config (default: *empty*, type: object)\n\tIndicate the TTL configuration for the admin record.\n\taction:\n\t- DELETE: record will be deleted after TTL is reached\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;],\n\t\t\u0026#34;ttl_config\u0026#34;: {\n\t\t\t\u0026#34;expires_at\u0026#34;: \u0026#34;2026-01-02T15:04:05Z\u0026#34;, // should be in RFC3339 format\n\t\t\t\u0026#34;action\u0026#34;: \u0026#34;DELETE\u0026#34;\n\t\t},\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminPutAdminPlayerRecordV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.AdminPlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in user-level saved", "schema": { "$ref": "#/definitions/models.AdminPlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18156\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18061\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18162\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace admin player record", "tags": [ "AdminRecord" ], "x-errorCodes": { "18061": "unable to update record", "18156": "invalid request body", "18162": "unable to decode record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/binaries": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of player binary records by namespace.", "operationId": "adminListPlayerBinaryRecordsV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "description": "query, search player records by key", "in": "query", "name": "query", "type": "string" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Retrieve list of player records by namespace", "schema": { "$ref": "#/definitions/models.ListPlayerBinaryRecordsResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18326\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18323\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Query player binary records", "tags": [ "AdminPlayerBinaryRecord" ], "x-errorCodes": { "18323": "unable to get record", "18326": "invalid request body", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "Create a player binary record.\n\nOther detail info:\n\n`key` should follow these rules:\n1. support uppercase and lowercase letters, numbers, and separators **\u0026#34;-\u0026#34;**, **\u0026#34;_\u0026#34;**, **\u0026#34;.\u0026#34;** are allowed\n2. begin and end with letters or numbers\n3. spaces are not allowed\n4. separators must not appears twice in a row\n\t\n\nSupported file types: jpeg, jpg, png, bmp, gif, mp3, webp, and bin.\n", "operationId": "adminPostPlayerBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordCreate" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record in user-level created", "schema": { "$ref": "#/definitions/models.UploadBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18327\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "409": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18330\u003c/td\u003e\u003ctd\u003ekey already exists\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18323\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18328\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18331\u003c/td\u003e\u003ctd\u003eunable to get presigned URL\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create player binary record", "tags": [ "AdminPlayerBinaryRecord" ], "x-errorCodes": { "18323": "unable to get record", "18327": "invalid request body", "18328": "unable to save record", "18330": "key already exists", "18331": "unable to get presigned URL", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [CREATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/binaries/{key}": { "delete": { "consumes": [ "application/json" ], "description": "Delete a player binary record.", "operationId": "adminDeletePlayerBinaryRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18338\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18336\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18338\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete player binary record", "tags": [ "AdminPlayerBinaryRecord" ], "x-errorCodes": { "18336": "unable to delete record", "18338": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get a player binary record by its key.", "operationId": "adminGetPlayerBinaryRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in user-level retrieved", "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18325\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18323\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player binary record", "tags": [ "AdminPlayerBinaryRecord" ], "x-errorCodes": { "18323": "unable to get record", "18325": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [READ]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "Update a player binary record file by its key", "operationId": "adminPutPlayerBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BinaryRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18332\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18333\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18334\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Update player binary record file", "tags": [ "AdminPlayerBinaryRecord" ], "x-errorCodes": { "18332": "invalid request body", "18333": "record not found", "18334": "unable to update record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/binaries/{key}/metadata": { "put": { "consumes": [ "application/json" ], "description": "Update a player binary record metadata by its key", "operationId": "adminPutPlayerBinaryRecorMetadataV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordMetadataRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18332\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18333\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18334\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Update player binary record metadata", "tags": [ "AdminPlayerBinaryRecord" ], "x-errorCodes": { "18332": "invalid request body", "18333": "record not found", "18334": "unable to update record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/binaries/{key}/presigned": { "post": { "consumes": [ "application/json" ], "description": "Request presigned URL to upload the binary record to s3.\n\nOther detail info:\n\nSupported file types: jpeg, jpg, png, bmp, gif, mp3, webp, and bin.\n", "operationId": "adminPostPlayerBinaryPresignedURLV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.UploadBinaryRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Successful Operation", "schema": { "$ref": "#/definitions/models.UploadBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18311\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18313\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18312\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18314\u003c/td\u003e\u003ctd\u003eunable to get presigned URL\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Request presigned URL for upload player binary records", "tags": [ "AdminPlayerBinaryRecord" ], "x-errorCodes": { "18311": "invalid request body", "18312": "unable to get record", "18313": "record not found", "18314": "unable to get presigned URL", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [CREATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/concurrent/adminrecords/{key}": { "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new admin player record or replace the existing admin player record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n\n\n## Parameters Notes\n1. updatedAt (required: true)\n Time format style: RFC3339\n2. value\n Json\n3. tags (default: *empty array*, type: array of string)\n Indicate the tagging for the admin record.\n**Request Body Example:**\n```\n{\n\t\u0026#34;value\u0026#34;: {},\n\t\u0026#34;updatedAt\u0026#34;: \u0026#34;2022-03-17T10:42:15.444Z\u0026#34;,\n\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;]\n}\n```\n\n## Optimistic Concurrency Control\n\nThis endpoint implement optimistic concurrency control to avoid race condition.\nIf the record has been updated since the client fetch it, the server will return HTTP status code 412 (precondition failed)\nand client need to redo the operation (fetch data and do update).\nOtherwise, the server will process the request.\n", "operationId": "adminPutAdminPlayerRecordConcurrentHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.AdminPlayerConcurrentRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "description": "flag to tell the service to return non empty response", "in": "query", "name": "responseBody", "type": "boolean", "x-omitempty": false } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerRecordConcurrentUpdateResponse" } }, "204": { "description": "Record saved" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18156\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18181\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "412": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18183\u003c/td\u003e\u003ctd\u003eprecondition failed: record has changed\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18182\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace admin player record", "tags": [ "AdminConcurrentRecord" ], "x-errorCodes": { "18156": "invalid request body", "18181": "validation error", "18182": "unable to update record", "18183": "precondition failed: record has changed", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/concurrent/records/{key}": { "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player record or replace the existing player record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n\n\n## Parameters Notes\n1. set_by (default: CLIENT, type: string)\n\tIndicate which party that could modify the game record.\n\tSERVER: record can be modified by server only.\n\tCLIENT: record can be modified by client and server.\n2. updatedAt (required: true)\n Time format style: RFC3339\n3. value\n Json\n4. tags (default: *empty array*, type: array of string)\n Indicate the tagging for the game record.\n**Request Body Example:**\n```\n{\n\t\u0026#34;set_by\u0026#34;: \u0026#34;SERVER\u0026#34;,\n\t\u0026#34;value\u0026#34;: {},\n\t\u0026#34;updatedAt\u0026#34;: \u0026#34;2022-03-17T10:42:15.444Z\u0026#34;,\n\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;]\n}\n```\n\n## Optimistic Concurrency Control\n\nThis endpoint implement optimistic concurrency control to avoid race condition.\nIf the record has been updated since the client fetch it, the server will return HTTP status code 412 (precondition failed)\nand client need to redo the operation (fetch data and do update).\nOtherwise, the server will process the request.\n", "operationId": "adminPutPlayerRecordConcurrentHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.AdminConcurrentRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "description": "flag to tell the service to return non empty response", "in": "query", "name": "responseBody", "type": "boolean", "x-omitempty": false } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerRecordConcurrentUpdateResponse" } }, "204": { "description": "Record saved" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18060\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18064\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18065\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "412": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18066\u003c/td\u003e\u003ctd\u003eprecondition failed: record has changed\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18061\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace player private record", "tags": [ "AdminConcurrentRecord" ], "x-errorCodes": { "18060": "invalid request body", "18061": "unable to update record", "18064": "validation error", "18065": "unable to update record", "18066": "precondition failed: record has changed", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/concurrent/records/{key}/public": { "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player public record or replace the existing player public record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n\n\n## Parameters Notes\n1. set_by (default: CLIENT, type: string)\n\tIndicate which party that could modify the game record.\n\tSERVER: record can be modified by server only.\n\tCLIENT: record can be modified by client and server.\n2. updatedAt (required: true)\n Time format style: RFC3339\n3. value\n Json\n4. tags (default: *empty array*, type: array of string)\n Indicate the tagging for the game record.\n**Request Body Example:**\n```\n{\n\t\u0026#34;set_by\u0026#34;: \u0026#34;SERVER\u0026#34;,\n\t\u0026#34;value\u0026#34;: {},\n\t\u0026#34;updatedAt\u0026#34;: \u0026#34;2022-03-17T10:42:15.444Z\u0026#34;,\n\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;]\n}\n```\n\n## Optimistic Concurrency Control\n\nThis endpoint implement optimistic concurrency control to avoid race condition.\nIf the record has been updated since the client fetch it, the server will return HTTP status code 412 (precondition failed)\nand client need to redo the operation (fetch data and do update).\nOtherwise, the server will process the request.\n", "operationId": "adminPutPlayerPublicRecordConcurrentHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.AdminConcurrentRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "description": "flag to tell the service to return non empty response", "in": "query", "name": "responseBody", "type": "boolean", "x-omitempty": false } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerRecordConcurrentUpdateResponse" } }, "204": { "description": "Record saved" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18100\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18102\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "412": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18103\u003c/td\u003e\u003ctd\u003eprecondition failed: record has changed\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18101\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace player public record", "tags": [ "AdminConcurrentRecord" ], "x-errorCodes": { "18100": "invalid request body", "18101": "unable to update record", "18102": "validation error", "18103": "precondition failed: record has changed", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of player records key and userID under given namespace.", "operationId": "AdminRetrievePlayerRecords", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "description": "query, search player records by key", "in": "query", "name": "query", "type": "string" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.ListPlayerRecordKeysResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18113\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18114\u003c/td\u003e\u003ctd\u003eunable to retrieve list of key records\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Query player records", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18113": "invalid request body", "18114": "unable to retrieve list of key records", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:RECORD [READ]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/bulk": { "post": { "consumes": [ "application/json" ], "description": "Retrieve player record key and payload in bulk under given namespace.\nMaximum bulk key limit per request 20.\n", "operationId": "adminGetPlayerRecordsHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordsRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.BulkGetAdminPlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18125\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18126\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18186\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18124\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18006\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get player records by multiple record keys", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18006": "unable to decode record", "18124": "unable to get record", "18125": "invalid request body", "18126": "request record keys list exceed max size [%d]", "18186": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:*:CLOUDSAVE:RECORD [READ]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "This endpoints will create new player record or replace the existing player record in bulk.\nMaximum bulk key limit per request 10.\nMaximum total size of the request payload is 5 MB.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body for this endpoint does not exceed 10 update request or 250 KB of whole request body.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminPutPlayerRecordsHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkUpdatePlayerRecordsRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "items": { "$ref": "#/definitions/models.BulkUpdatePlayerRecordResponse" }, "type": "array" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18353\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18356\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18354\u003c/td\u003e\u003ctd\u003erecords amount exceeded max limit\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18355\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk update player records", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18353": "invalid request body", "18354": "records amount exceeded max limit", "18355": "unable to marshal request body", "18356": "invalid request body: size of the request body must be less than [%d]MB", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:*:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}": { "delete": { "consumes": [ "application/json" ], "description": "Delete a record (arbitrary JSON data) in user-level with given key.", "operationId": "adminDeletePlayerRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record in user-level saved" }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18070\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete player record", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18070": "unable to delete record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get a record in user-level (arbitrary JSON data) by its key.", "operationId": "adminGetPlayerRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in user-level retrieved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18022\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18020\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player record", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18020": "unable to get record", "18022": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player record or append the existing player record.\n\n**Append example:**\n\nExample 1\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\nExample 2\n-\tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34; }`\n\n-\tNew JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\tset_by (default: CLIENT, type: string)\n\tIndicate which party that could modify the game record.\n\tSERVER: record can be modified by server only.\n\tCLIENT: record can be modified by client and server.\n2.\tis_public (default: false, type: bool)\n\tIndicate whether the player record is a public record or not.\n3.\ttags (default: *empty array*, type: array of string)\n\tIndicate the tagging for the game record.\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;set_by\u0026#34;: \u0026#34;SERVER\u0026#34;,\n\t\t\u0026#34;is_public\u0026#34;: true,\n\t\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;]\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminPostPlayerRecordHandlerV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record in user-level saved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18030\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18033\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or append player record", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18030": "invalid request body", "18033": "unable to save record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [CREATE]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player record or replace the existing player record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\tset_by (default: CLIENT, type: string)\n\tIndicate which party that could modify the game record.\n\tSERVER: record can be modified by server only.\n\tCLIENT: record can be modified by client and server.\n2.\tis_public (default: false, type: bool)\n\tIndicate whether the player record is a public record or not.\n3.\ttags (default: *empty array*, type: array of string)\n\tIndicate the tagging for the game record.\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;set_by\u0026#34;: \u0026#34;SERVER\u0026#34;,\n\t\t\u0026#34;is_public\u0026#34;: true,\n\t\t\u0026#34;tags\u0026#34;: [\u0026#34;tag1\u0026#34;, \u0026#34;tag2\u0026#34;]\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "adminPutPlayerRecordHandlerV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in user-level saved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18060\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18061\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace player record", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18060": "invalid request body", "18061": "unable to update record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}/public": { "delete": { "consumes": [ "application/json" ], "description": "Delete player public record.\n\n\n## Warning: This endpoint is going to deprecate\n\nThis endpoint is going to deprecate in the future please don\u0026#39;t use it.\n\nFor alternative, please use these endpoints:\n- **POST /cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **PUT /cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **DELETE /cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}**\n", "operationId": "adminDeletePlayerPublicRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18122\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18120\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete player public record", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18120": "unable to delete record", "18122": "record not found", "18201": "invalid record operator, expect [%s] but actual [%s]", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get a record in user-level (arbitrary JSON data) by its key.", "operationId": "adminGetPlayerPublicRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18081\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18080\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player public record", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18080": "unable to get record", "18081": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player public record or append the existing player public record.\n\n**Append example:**\n\nExample 1\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\nExample 2\n-\tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34; }`\n\n-\tNew JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n## Warning: This endpoint is going to deprecate\n\nThis endpoint is going to deprecate in the future please don\u0026#39;t use it.\n\nFor alternative, please use these endpoints:\n- **POST /cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **PUT /cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **DELETE /cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}**\n", "operationId": "adminPostPlayerPublicRecordHandlerV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record saved ", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18030\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18033\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or append player public record", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18030": "invalid request body", "18033": "unable to save record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [CREATE]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player public record or replace the existing player public record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Warning: This endpoint is going to deprecate\n\nThis endpoint is going to deprecate in the future please don\u0026#39;t use it.\n\nFor alternative, please use these endpoints:\n- **POST /cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **PUT /cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **DELETE /cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}**\n", "operationId": "adminPutPlayerPublicRecordHandlerV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in user-level saved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18060\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18061\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace player public record", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18060": "invalid request body", "18061": "unable to update record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/admin/namespaces/{namespace}/users/{userId}/records/{key}/size": { "get": { "consumes": [ "application/json" ], "description": "Get a size of the player record", "operationId": "adminGetPlayerRecordSizeHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in user-level retrieved", "schema": { "$ref": "#/definitions/models.PlayerRecordSizeResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18022\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18020\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player record size", "tags": [ "AdminPlayerRecord" ], "x-errorCodes": { "18020": "unable to get record", "18022": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "ADMIN:NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/binaries": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of binary records by namespace.", "operationId": "listGameBinaryRecordsV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "description": "query, search game records by key", "in": "query", "name": "query", "type": "string" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Retrieve list of records by namespace", "schema": { "$ref": "#/definitions/models.ListGameBinaryRecordsResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18304\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18301\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Query game binary records", "tags": [ "PublicGameBinaryRecord" ], "x-errorCodes": { "18301": "unable to get record", "18304": "invalid request body", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "Create a game binary record.\n\nOther detail info:\n\n`key` should follow these rules:\n1. support uppercase and lowercase letters, numbers, and separators **\u0026#34;-\u0026#34;**, **\u0026#34;_\u0026#34;**, **\u0026#34;.\u0026#34;** are allowed\n2. begin and end with letters or numbers\n3. spaces are not allowed\n4. separators must not appears twice in a row\n\t\n\nSupported file types: jpeg, jpg, png, bmp, gif, mp3, webp, and bin.\n", "operationId": "postGameBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PublicGameBinaryRecordCreate" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record in namespace-level created", "schema": { "$ref": "#/definitions/models.UploadBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18305\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "409": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18309\u003c/td\u003e\u003ctd\u003ekey already exists\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18301\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18307\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18310\u003c/td\u003e\u003ctd\u003eunable to get presigned URL\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create game binary record", "tags": [ "PublicGameBinaryRecord" ], "x-errorCodes": { "18301": "unable to get record", "18305": "invalid request body", "18307": "unable to save record", "18309": "key already exists", "18310": "unable to get presigned URL", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/binaries/bulk": { "post": { "consumes": [ "application/json" ], "description": "Bulk get game binary records. Maximum key per request 20.", "operationId": "bulkGetGameBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkGetGameRecordRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.BulkGetGameBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18350\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18351\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18349\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get game binary records", "tags": [ "PublicGameBinaryRecord" ], "x-errorCodes": { "18349": "unable to get record", "18350": "invalid request body", "18351": "request record keys list exceed max size [%d]", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/binaries/{key}": { "delete": { "consumes": [ "application/json" ], "description": "Delete a game binary record.", "operationId": "deleteGameBinaryRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18322\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18320\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18322\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete game binary record", "tags": [ "PublicGameBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18320": "unable to delete record", "18322": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get a game binary record by its key.", "operationId": "getGameBinaryRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in namespace-level retrieved", "schema": { "$ref": "#/definitions/models.GameBinaryRecordResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18303\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18301\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get game binary record", "tags": [ "PublicGameBinaryRecord" ], "x-errorCodes": { "18301": "unable to get record", "18303": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "Update a game binary record file by its key", "operationId": "putGameBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BinaryRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.GameBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18316\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18317\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18318\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Update game binary record file", "tags": [ "PublicGameBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18316": "invalid request body", "18317": "record not found", "18318": "unable to update record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/binaries/{key}/presigned": { "post": { "consumes": [ "application/json" ], "description": "Request presigned URL to upload the binary record to s3.\n\nOther detail info:\n\nSupported file types: jpeg, jpg, png, bmp, gif, mp3, webp, and bin.\n", "operationId": "postGameBinaryPresignedURLV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.UploadBinaryRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Successful Operation", "schema": { "$ref": "#/definitions/models.UploadBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18311\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18313\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18312\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18314\u003c/td\u003e\u003ctd\u003eunable to get presigned URL\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Request presigned URL for upload game binary records", "tags": [ "PublicGameBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18311": "invalid request body", "18312": "unable to get record", "18313": "record not found", "18314": "unable to get presigned URL", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/concurrent/records/{key}": { "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new game record or replace the existing game record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n\n\n## Optimistic Concurrency Control\n\nThis endpoint implement optimistic concurrency control to avoid race condition.\nIf the record has been updated since the client fetch it, the server will return HTTP status code 412 (precondition failed)\nand client need to redo the operation (fetch data and do update).\nOtherwise, the server will process the request.\n", "operationId": "putGameRecordConcurrentHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.ConcurrentRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record saved" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18060\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18052\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "412": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18056\u003c/td\u003e\u003ctd\u003eprecondition failed: record has changed\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18051\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18053\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace game record", "tags": [ "ConcurrentRecord" ], "x-errorCodes": { "18051": "unable to marshal request body", "18052": "invalid request body: size of the request body must be less than [%d]MB", "18053": "unable to update record", "18056": "precondition failed: record has changed", "18060": "invalid request body", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/records/bulk": { "post": { "consumes": [ "application/json" ], "description": "Bulk get game records. Maximum key per request 20.", "operationId": "getGameRecordsBulk", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkGetGameRecordRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.BulkGetGameRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18128\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18129\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18133\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18130\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18131\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get game records", "tags": [ "PublicGameRecord" ], "x-errorCodes": { "18128": "invalid request body", "18129": "request record keys list exceed max size [%d]", "18130": "unable to get record", "18131": "unable to decode record", "18133": "record not found", "20000": "internal server error", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/records/{key}": { "delete": { "consumes": [ "application/json" ], "description": "Delete records by its key", "operationId": "deleteGameRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18040\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete game record", "tags": [ "PublicGameRecord" ], "x-errorCodes": { "18040": "unable to delete record", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get game record by its key.", "operationId": "getGameRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record retrieved", "schema": { "$ref": "#/definitions/models.GameRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18003\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18001\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get game record", "tags": [ "PublicGameRecord" ], "x-errorCodes": { "18001": "unable to get record", "18003": "record not found", "18005": "unable to decode record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new game record or append the existing game record.\n**Append example:**\n\nExample 1\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\nExample 2\n-\tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34; }`\n\n-\tNew JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "postGameRecordHandlerV1", "parameters": [ { "description": "game record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.GameRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.GameRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18011\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18015\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18012\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18013\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or append game record", "tags": [ "PublicGameRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18011": "invalid request body", "18012": "unable to marshal request body", "18013": "unable to save record", "18015": "invalid request body: size of the request body must be less than [%d]MB", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new game record or replace the existing game record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "putGameRecordHandlerV1", "parameters": [ { "description": "game record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.GameRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.GameRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18050\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18052\u003c/td\u003e\u003ctd\u003einvalid request body: size of the request body must be less than [%d]MB\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18051\u003c/td\u003e\u003ctd\u003eunable to marshal request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18053\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace game record", "tags": [ "PublicGameRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18050": "invalid request body", "18051": "unable to marshal request body", "18052": "invalid request body: size of the request body must be less than [%d]MB", "18053": "unable to update record", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/tags": { "get": { "consumes": [ "application/json" ], "description": "## Description\n\nRetrieve list of available tags by namespace", "operationId": "publicListTagsHandlerV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Available tags retrieved", "schema": { "$ref": "#/definitions/models.ListTagsResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18503\u003c/td\u003e\u003ctd\u003eunable to list tags\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18502\u003c/td\u003e\u003ctd\u003eunable to list tags\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "List tags", "tags": [ "PublicTags" ], "x-errorCodes": { "18502": "unable to list tags", "18503": "unable to list tags", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/bulk/binaries/{key}/public": { "post": { "consumes": [ "application/json" ], "description": "Bulk get other player\u0026#39;s public binary record by userIds, max allowed 20 at a time. Only record with `isPublic=true` can be\nretrieved using this endpoint.", "operationId": "bulkGetPlayerPublicBinaryRecordsV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkUserIDsRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record retrieved", "schema": { "$ref": "#/definitions/models.BulkGetPlayerBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18342\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18343\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get player public records", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18342": "invalid request body", "18343": "unable to get record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/bulk/records/{key}/public": { "post": { "consumes": [ "application/json" ], "description": "Bulk get other player\u0026#39;s record that is public by userIds, max allowed 20 at a time. Only record with `isPublic=true` that can be\nretrieved using this endpoint.\n", "operationId": "bulkGetPlayerPublicRecordHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkUserIDsRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record retrieved", "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18083\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18084\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18006\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get player public records", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18006": "unable to decode record", "18083": "invalid request body", "18084": "unable to get record", "20000": "internal server error", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:PUBLIC:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/me/binaries": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of my binary records by namespace.", "operationId": "listMyBinaryRecordsV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "description": "query, search player records by key", "in": "query", "name": "query", "type": "string" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Retrieve list of player records by namespace", "schema": { "$ref": "#/definitions/models.ListPlayerBinaryRecordsResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18125\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18126\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18343\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Query my binary records", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18125": "invalid request body", "18126": "request record keys list exceed max size [%d]", "18343": "unable to get record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/me/binaries/bulk": { "post": { "consumes": [ "application/json" ], "description": "Retrieve player record key and payload in bulk under given namespace.\nMaximum bulk key limit per request 20", "operationId": "bulkGetMyBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordsRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.BulkGetPlayerBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18125\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18126\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18343\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player records bulk", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18125": "invalid request body", "18126": "request record keys list exceed max size [%d]", "18343": "unable to get record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/me/records": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of player records key under given namespace.", "operationId": "RetrievePlayerRecords", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.ListPlayerRecordKeysResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18113\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18114\u003c/td\u003e\u003ctd\u003eunable to retrieve list of key records\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Query player records key", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18113": "invalid request body", "18114": "unable to retrieve list of key records", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/me/records/bulk": { "post": { "consumes": [ "application/json" ], "description": "Retrieve player record key and payload in bulk under given namespace.\n\nMaximum bulk key limit per request 20", "operationId": "getPlayerRecordsBulkHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordsRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18125\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18126\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18124\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18006\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player records bulk", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18006": "unable to decode record", "18124": "unable to get record", "18125": "invalid request body", "18126": "request record keys list exceed max size [%d]", "20000": "internal server error", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/me/records/{key}/public": { "delete": { "consumes": [ "application/json" ], "description": "Delete player public record.\n\n\n## Warning: This endpoint is going to deprecate\n\nThis endpoint is going to deprecate in the future please don\u0026#39;t use it.\n\nFor alternative, please use these endpoints:\n- **POST /cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **PUT /cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **DELETE /cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}**\n", "operationId": "publicDeletePlayerPublicRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18122\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18120\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete player public record", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18120": "unable to delete record", "18122": "record not found", "18201": "invalid record operator, expect [%s] but actual [%s]", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/binaries": { "post": { "consumes": [ "application/json" ], "description": "Create a player binary record.\n\nOther detail info:\n\n`key` should follow these rules:\n1. support uppercase and lowercase letters, numbers, and separators **\u0026#34;-\u0026#34;**, **\u0026#34;_\u0026#34;**, **\u0026#34;.\u0026#34;** are allowed\n2. begin and end with letters or numbers\n3. spaces are not allowed\n4. separators must not appears twice in a row\n\t\n\nSupported file types: jpeg, jpg, png, bmp, gif, mp3, webp, and bin.\n", "operationId": "postPlayerBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PublicPlayerBinaryRecordCreate" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record in user-level created", "schema": { "$ref": "#/definitions/models.UploadBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18327\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "409": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18330\u003c/td\u003e\u003ctd\u003ekey already exists\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18323\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18328\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18331\u003c/td\u003e\u003ctd\u003eunable to get presigned URL\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create player binary record", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18323": "unable to get record", "18327": "invalid request body", "18328": "unable to save record", "18330": "key already exists", "18331": "unable to get presigned URL", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [CREATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/binaries/public": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of other player public binary records under given namespace.", "operationId": "listOtherPlayerPublicBinaryRecordsV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.ListPlayerBinaryRecordsResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18347\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18345\u003c/td\u003e\u003ctd\u003eunable to retrieve list of key records\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Query other player public binary record", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18345": "unable to retrieve list of key records", "18347": "invalid request body", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/binaries/public/bulk": { "post": { "consumes": [ "application/json" ], "description": "Retrieve other player public binary record in bulk under given namespace.\nMaximum bulk key limit per request 20", "operationId": "bulkGetOtherPlayerPublicBinaryRecordsV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordsRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.BulkGetPlayerBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18342\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18343\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Bulk get other player public binary record", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18342": "invalid request body", "18343": "unable to get record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/binaries/{key}": { "delete": { "consumes": [ "application/json" ], "description": "Delete a player binary record. Only player who own the record can delete it", "operationId": "deletePlayerBinaryRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18338\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18336\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18338\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete player binary record", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18336": "unable to delete record", "18338": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get a player binary record by its key.\n**Private Record**: Only user who own the record could retrieve it.", "operationId": "getPlayerBinaryRecordV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record in user-level retrieved", "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18325\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18323\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player binary record", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18323": "unable to get record", "18325": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [READ]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "Update a player binary record file by its key", "operationId": "putPlayerBinaryRecordV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BinaryRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18332\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18333\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18334\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Update player binary record file", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18332": "invalid request body", "18333": "record not found", "18334": "unable to update record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/binaries/{key}/metadata": { "put": { "consumes": [ "application/json" ], "description": "Update a player binary record metadata by its key", "operationId": "putPlayerBinaryRecorMetadataV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordMetadataPublicRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18332\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18333\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18334\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Update player binary record metadata", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18332": "invalid request body", "18333": "record not found", "18334": "unable to update record", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/binaries/{key}/presigned": { "post": { "consumes": [ "application/json" ], "description": "Request presigned URL to upload the binary record to s3.\n\nOther detail info:\n\nSupported file types: jpeg, jpg, png, bmp, gif, mp3, webp, and bin.\n", "operationId": "postPlayerBinaryPresignedURLV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.UploadBinaryRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Successful Operation", "schema": { "$ref": "#/definitions/models.UploadBinaryRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18311\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18313\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18312\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18314\u003c/td\u003e\u003ctd\u003eunable to get presigned URL\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Request presigned URL for upload player binary records", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18201": "invalid record operator, expect [%s] but actual [%s]", "18311": "invalid request body", "18312": "unable to get record", "18313": "record not found", "18314": "unable to get presigned URL", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [CREATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/binaries/{key}/public": { "get": { "consumes": [ "application/json" ], "description": "Get other player\u0026#39;s public binary record. Only record with `isPublic=true` can be\nretrieved using this endpoint.", "operationId": "getPlayerPublicBinaryRecordsV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record retrieved", "schema": { "$ref": "#/definitions/models.PlayerBinaryRecordResponse" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18340\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18339\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player public binary record", "tags": [ "PublicPlayerBinaryRecord" ], "x-errorCodes": { "18339": "unable to get record", "18340": "record not found", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/concurrent/records/{key}": { "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player record or replace the existing player record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n\n\n## Optimistic Concurrency Control\n\nThis endpoint implement optimistic concurrency control to avoid race condition.\nIf the record has been updated since the client fetch it, the server will return HTTP status code 412 (precondition failed)\nand client need to redo the operation (fetch data and do update).\nOtherwise, the server will process the request.\n", "operationId": "putPlayerRecordConcurrentHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.ConcurrentRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "description": "flag to tell the service to return non empty response", "in": "query", "name": "responseBody", "type": "boolean", "x-omitempty": false } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerRecordConcurrentUpdateResponse" } }, "204": { "description": "Record saved" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18060\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18064\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18065\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "412": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18066\u003c/td\u003e\u003ctd\u003eprecondition failed: record has changed\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18061\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace player private record", "tags": [ "ConcurrentRecord" ], "x-errorCodes": { "18060": "invalid request body", "18061": "unable to update record", "18064": "validation error", "18065": "unable to update record", "18066": "precondition failed: record has changed", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/concurrent/records/{key}/public": { "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player public record or replace the existing player public record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n\n\n## Optimistic Concurrency Control\n\nThis endpoint implement optimistic concurrency control to avoid race condition.\nIf the record has been updated since the client fetch it, the server will return HTTP status code 412 (precondition failed)\nand client need to redo the operation (fetch data and do update).\nOtherwise, the server will process the request.\n", "operationId": "putPlayerPublicRecordConcurrentHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.ConcurrentRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "description": "flag to tell the service to return non empty response", "in": "query", "name": "responseBody", "type": "boolean", "x-omitempty": false } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerRecordConcurrentUpdateResponse" } }, "204": { "description": "Record saved" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18100\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18102\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "412": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18103\u003c/td\u003e\u003ctd\u003eprecondition failed: record has changed\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18101\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace player public record", "tags": [ "ConcurrentRecord" ], "x-errorCodes": { "18100": "invalid request body", "18101": "unable to update record", "18102": "validation error", "18103": "precondition failed: record has changed", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/records/public": { "get": { "consumes": [ "application/json" ], "description": "Retrieve list of other public player records key under given namespace.", "operationId": "getOtherPlayerPublicRecordKeyHandlerV1", "parameters": [ { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" }, { "default": 25, "description": "the number of data retrieved in a page, default 25", "in": "query", "name": "limit", "type": "integer" }, { "default": 0, "description": "the number of offset, default 0", "in": "query", "name": "offset", "type": "integer" }, { "collectionFormat": "csv", "description": "filter list by tags, max 5 tags per request", "in": "query", "items": { "type": "string" }, "name": "tags", "type": "array" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.ListPlayerRecordKeysResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18113\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18114\u003c/td\u003e\u003ctd\u003eunable to retrieve list of key records\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Query other player public record key", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18113": "invalid request body", "18114": "unable to retrieve list of key records", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:*:PUBLIC:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/records/public/bulk": { "post": { "consumes": [ "application/json" ], "description": "Retrieve other player public record key and payload in bulk under given namespace.\n\nMaximum bulk key limit per request 20", "operationId": "getOtherPlayerPublicRecordHandlerV1", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordsRequest" } }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Successful operation", "schema": { "$ref": "#/definitions/models.BulkGetPlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18125\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18126\u003c/td\u003e\u003ctd\u003erequest record keys list exceed max size [%d]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18124\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18006\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get other player public record bulk", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18006": "unable to decode record", "18124": "unable to get record", "18125": "invalid request body", "18126": "request record keys list exceed max size [%d]", "20000": "internal server error", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:*:PUBLIC:CLOUDSAVE:RECORD [READ]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}": { "delete": { "consumes": [ "application/json" ], "description": "Delete player record by its key.\nOnly user that own the player record could delete it.\n", "operationId": "deletePlayerRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "204": { "description": "Record deleted" }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18072\u003c/td\u003e\u003ctd\u003edelete action is forbidden on other user's record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18070\u003c/td\u003e\u003ctd\u003eunable to delete record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Delete player record", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18070": "unable to delete record", "18072": "delete action is forbidden on other user's record", "18201": "invalid record operator, expect [%s] but actual [%s]", "20001": "unauthorized access", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [DELETE]" ] } ] }, "get": { "consumes": [ "application/json" ], "description": "Get player record by its key.\n**Private Record**: Only user that own the player record could retrieve it.", "operationId": "getPlayerRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record retrieved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18023\u003c/td\u003e\u003ctd\u003eget action is forbidden on other user's record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18022\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18020\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18006\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player record", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18006": "unable to decode record", "18020": "unable to get record", "18022": "record not found", "18023": "get action is forbidden on other user's record", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player record or append the existing player record.\nOnly user that own the existing player record could modify.\n\n**Append example:**\n\nExample 1\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\nExample 2\n-\tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34; }`\n\n-\tNew JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\tis_public (default: false, type: bool)\n\tIndicate whether the player record is a public record or not.\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;is_public\u0026#34;: true\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "postPlayerRecordHandlerV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18030\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18060\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18035\u003c/td\u003e\u003ctd\u003epost action is forbidden on other user's record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18033\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or append player record", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18030": "invalid request body", "18033": "unable to save record", "18035": "post action is forbidden on other user's record", "18060": "invalid request body", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [CREATE]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player record or replace the existing player record.\nOnly user that own the existing player record could modify it.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Record Metadata\n\nMetadata allows user to define the behaviour of the record.\nMetadata can be defined in request body with field name **__META**.\nWhen creating record, if **__META** field is not defined, the metadata value will use the default value.\nWhen updating record, if **__META** field is not defined, the existing metadata value will stay as is.\n\n**Metadata List:**\n1.\tis_public (default: false, type: bool)\n\tIndicate whether the player record is a public record or not.\n\n**Request Body Example:**\n```\n{\n\t\u0026#34;__META\u0026#34;: {\n\t\t\u0026#34;is_public\u0026#34;: true\n\t}\n\t...\n}\n```\n\n## Recommended Request Body Size\n\nTo ensure optimal performance and efficient resource utilization, it is recommended that the request body size for this endpoint does not exceed 250 KB.\n\n## Exceeding the recommended limit\n\nWhile it\u0026#39;s possible to handle larger request, exceeding this limit may lead to increased processing time, potential performance degradation, and potential timeout issues.\n", "operationId": "putPlayerRecordHandlerV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18060\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18063\u003c/td\u003e\u003ctd\u003eput action is forbidden on other user's record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18061\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace player record", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18060": "invalid request body", "18061": "unable to update record", "18063": "put action is forbidden on other user's record", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:CLOUDSAVE:RECORD [UPDATE]" ] } ] } }, "/cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}/public": { "get": { "consumes": [ "application/json" ], "description": "Get other player\u0026#39;s record that is public. Only record with `isPublic=true` that can be\nretrieved using this endpoint.\n", "operationId": "getPlayerPublicRecordHandlerV1", "parameters": [ { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record retrieved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "404": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18081\u003c/td\u003e\u003ctd\u003erecord not found\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18080\u003c/td\u003e\u003ctd\u003eunable to get record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18006\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Get player public record", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18006": "unable to decode record", "18080": "unable to get record", "18081": "record not found", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [READ]" ] } ] }, "post": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player public record or append the existing player public record.\n\n**Append example:**\n\nExample 1\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\nExample 2\n-\tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34; }`\n\n-\tNew JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data1\u0026#34;: { \u0026#34;data2\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;data3\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Warning: This endpoint is going to deprecate\n\nThis endpoint is going to deprecate in the future please don\u0026#39;t use it.\n\nFor alternative, please use these endpoints:\n- **POST /cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **PUT /cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **DELETE /cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}**\n", "operationId": "postPlayerPublicRecordHandlerV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "201": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18090\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18091\u003c/td\u003e\u003ctd\u003eunable to save record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or append player public record", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18090": "invalid request body", "18091": "unable to save record", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [CREATE]" ] } ] }, "put": { "consumes": [ "application/json" ], "description": "## Description\n\nThis endpoints will create new player public record or replace the existing player public record.\n\n**Replace behaviour:**\nThe existing value will be replaced completely with the new value.\n\nExample\n- \tExisting JSON:\n\n\t`{ \u0026#34;data1\u0026#34;: \u0026#34;value\u0026#34; }`\n\n- \tNew JSON:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n-\tResult:\n\n\t`{ \u0026#34;data2\u0026#34;: \u0026#34;new value\u0026#34; }`\n\n\n\n## Reserved Word\n\nReserved Word List: **__META**\n\nThe reserved word cannot be used as a field in record value,\nIf still defining the field when creating or updating the record, it will be ignored.\n\n\n## Warning: This endpoint is going to deprecate\n\nThis endpoint is going to deprecate in the future please don\u0026#39;t use it.\n\nFor alternative, please use these endpoints:\n- **POST /cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **PUT /cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}** and utilizing **__META** functionality\n- **DELETE /cloudsave/v1/namespaces/{namespace}/users/{userId}/records/{key}**\n", "operationId": "putPlayerPublicRecordHandlerV1", "parameters": [ { "description": "player record data. should be in valid json format", "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/models.PlayerRecordRequest" } }, { "description": "key of record", "in": "path", "name": "key", "required": true, "type": "string" }, { "description": "namespace of the game, only accept alphabet and numeric", "in": "path", "name": "namespace", "required": true, "type": "string" }, { "description": "user ID who own the record, should follow UUID version 4 without hyphen format", "in": "path", "name": "userId", "required": true, "type": "string" } ], "produces": [ "application/json" ], "responses": { "200": { "description": "Record saved", "schema": { "$ref": "#/definitions/models.PlayerRecordResponse" } }, "400": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18201\u003c/td\u003e\u003ctd\u003einvalid record operator, expect [%s] but actual [%s]\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18100\u003c/td\u003e\u003ctd\u003einvalid request body\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20002\u003c/td\u003e\u003ctd\u003evalidation error\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "401": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20001\u003c/td\u003e\u003ctd\u003eunauthorized access\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "403": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20013\u003c/td\u003e\u003ctd\u003einsufficient permission\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } }, "500": { "description": "\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eerrorCode\u003c/td\u003e\u003ctd\u003eerrorMessage\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e20000\u003c/td\u003e\u003ctd\u003einternal server error\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18101\u003c/td\u003e\u003ctd\u003eunable to update record\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e18005\u003c/td\u003e\u003ctd\u003eunable to decode record\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e", "schema": { "$ref": "#/definitions/models.ResponseError" } } }, "security": [ { "authorization": [] } ], "summary": "Create or replace player public record", "tags": [ "PublicPlayerRecord" ], "x-errorCodes": { "18005": "unable to decode record", "18100": "invalid request body", "18101": "unable to update record", "18201": "invalid record operator, expect [%s] but actual [%s]", "20000": "internal server error", "20001": "unauthorized access", "20002": "validation error", "20013": "insufficient permission" }, "x-security": [ { "iamClientScopes": [ "social" ] }, { "userPermissions": [ "NAMESPACE:{namespace}:USER:{userId}:PUBLIC:CLOUDSAVE:RECORD [UPDATE]" ] } ] } } }, "definitions": { "models.AdminConcurrentRecordRequest": { "properties": { "set_by": { "default": "CLIENT", "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "tags": { "description": "Tagging for the record", "items": { "type": "string" }, "type": "array" }, "ttl_config": { "$ref": "#/definitions/models.TTLConfigDTO", "description": "TTL configuration for the game record" }, "updatedAt": { "description": "Precondition for concurrent request, updatedAt should be the same as record's updatedAt", "format": "date-time", "type": "string", "x-nullable": false }, "value": { "description": "Record data, should be in valid json format", "type": "object" } }, "required": [ "set_by", "updatedAt", "value" ] }, "models.AdminGameConcurrentRecordRequest": { "properties": { "tags": { "description": "Tagging for admin game record", "items": { "type": "string" }, "type": "array" }, "ttl_config": { "$ref": "#/definitions/models.TTLConfigDTO", "description": "TTL configuration for the admin game record" }, "updatedAt": { "description": "Precondition for concurrent request, updatedAt should be the same as record's updatedAt", "format": "date-time", "type": "string", "x-nullable": false }, "value": { "description": "Admin game record data, should be in valid json format", "type": "object" } }, "required": [ "updatedAt", "value" ] }, "models.AdminGameRecordRequest": { "type": "object" }, "models.AdminGameRecordResponse": { "properties": { "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "key": { "description": "Admin game record identifier", "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" }, "tags": { "description": "Tagging for admin game record", "items": { "type": "string" }, "type": "array" }, "ttl_config": { "$ref": "#/definitions/models.TTLConfigDTO", "description": "TTL configuration for the admin record" }, "updated_at": { "format": "date-time", "type": "string", "x-nullable": false }, "value": { "description": "Admin game record data, should be in valid json format", "type": "object" } }, "required": [ "created_at", "key", "namespace", "updated_at", "value" ] }, "models.AdminPlayerConcurrentRecordRequest": { "properties": { "tags": { "description": "Tagging for admin player record", "items": { "type": "string" }, "type": "array" }, "updatedAt": { "description": "Precondition for concurrent request, updatedAt should be the same as record's updatedAt", "format": "date-time", "type": "string", "x-nullable": false }, "value": { "description": "Admin player record data, should be in valid json format", "type": "object" } }, "required": [ "updatedAt", "value" ] }, "models.AdminPlayerRecordKeyInfo": { "properties": { "key": { "description": "Key of the record", "type": "string" }, "user_id": { "description": "User ID who owns the record", "type": "string" } }, "required": [ "key", "user_id" ] }, "models.AdminPlayerRecordRequest": { "type": "object" }, "models.AdminPlayerRecordResponse": { "properties": { "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "key": { "description": "Admin player record identifier", "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" }, "tags": { "description": "Tagging for admin player record", "items": { "type": "string" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string", "x-nullable": false }, "user_id": { "description": "User ID who owns the record", "type": "string" }, "value": { "description": "Admin player record data, should be in valid json format", "type": "object" } }, "required": [ "created_at", "key", "namespace", "updated_at", "user_id", "value" ] }, "models.AppConfig": { "properties": { "appName": { "description": "Extend app name", "type": "string" } }, "required": [ "appName" ] }, "models.BinaryInfoResponse": { "properties": { "content_type": { "description": "Content type of the binary record", "type": "string" }, "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "file_location": { "description": "File location of the binary record", "type": "string" }, "updated_at": { "format": "date-time", "type": "string", "x-nullable": false }, "url": { "description": "URL for accessing the binary record", "type": "string" }, "version": { "description": "Version of the binary file", "format": "int32", "type": "integer" } }, "required": [ "content_type", "created_at", "file_location", "updated_at", "version" ] }, "models.BinaryRecordRequest": { "properties": { "content_type": { "description": "Content type of the binary record", "type": "string" }, "file_location": { "description": "File location of the binary record", "type": "string" } }, "required": [ "content_type", "file_location" ] }, "models.BulkGetAdminGameRecordRequest": { "properties": { "keys": { "description": "Keys of the record", "items": { "type": "string" }, "type": "array" } }, "required": [ "keys" ] }, "models.BulkGetAdminGameRecordResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.AdminGameRecordResponse" }, "type": "array" } }, "required": [ "data" ] }, "models.BulkGetAdminPlayerRecordRequest": { "properties": { "keys": { "description": "Keys of the record", "items": { "type": "string" }, "type": "array" } }, "required": [ "keys" ] }, "models.BulkGetAdminPlayerRecordResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.AdminPlayerRecordResponse" }, "type": "array" } }, "required": [ "data" ] }, "models.BulkGetGameBinaryRecordResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.GameBinaryRecordResponse" }, "type": "array" } }, "required": [ "data" ] }, "models.BulkGetGameRecordRequest": { "properties": { "keys": { "description": "Keys of the record", "items": { "type": "string" }, "type": "array" } }, "required": [ "keys" ] }, "models.BulkGetGameRecordResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.GameRecordResponse" }, "type": "array" } }, "required": [ "data" ] }, "models.BulkGetPlayerBinaryRecordResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.PlayerBinaryRecordResponse" }, "type": "array" } }, "required": [ "data" ] }, "models.BulkGetPlayerRecordResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.PlayerRecordResponse" }, "type": "array" } }, "required": [ "data" ] }, "models.BulkGetPlayerRecordSizeResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.PlayerRecordSizeResponse" }, "type": "array" } }, "required": [ "data" ] }, "models.BulkGetPlayerRecordsRequest": { "properties": { "keys": { "description": "Keys of the record", "items": { "type": "string" }, "type": "array" } }, "required": [ "keys" ] }, "models.BulkUpdatePlayerRecordByKeyRequestDetail": { "properties": { "user_id": { "description": "User ID who owns the record, should follow UUID version 4 without hyphen format", "type": "string" }, "value": { "description": "Player record data, should be in valid json format", "type": "object" } }, "required": [ "user_id", "value" ] }, "models.BulkUpdatePlayerRecordByKeyResponse": { "properties": { "detail": { "description": "Detail if the update operation failed", "type": "object" }, "success": { "description": "Success state of the update operation", "type": "boolean", "x-omitempty": false }, "user_id": { "description": "User ID who owns the record", "type": "string" } }, "required": [ "detail", "success", "user_id" ] }, "models.BulkUpdatePlayerRecordRequestDetail": { "properties": { "key": { "description": "Player record identifier", "type": "string" }, "value": { "description": "Player record data, should be in valid json format", "type": "object" } }, "required": [ "key", "value" ] }, "models.BulkUpdatePlayerRecordResponse": { "properties": { "detail": { "description": "Detail if the update operation failed", "type": "object" }, "key": { "description": "Player record identifier", "type": "string" }, "success": { "description": "Success state of the update operation", "type": "boolean", "x-omitempty": false } }, "required": [ "detail", "key", "success" ] }, "models.BulkUpdatePlayerRecordsByKeyRequest": { "properties": { "data": { "items": { "$ref": "#/definitions/models.BulkUpdatePlayerRecordByKeyRequestDetail" }, "type": "array" } }, "required": [ "data" ] }, "models.BulkUpdatePlayerRecordsRequest": { "properties": { "data": { "items": { "$ref": "#/definitions/models.BulkUpdatePlayerRecordRequestDetail" }, "type": "array" } }, "required": [ "data" ] }, "models.BulkUserIDsRequest": { "properties": { "userIds": { "description": "User IDs who own the record", "items": { "type": "string" }, "type": "array" } }, "required": [ "userIds" ] }, "models.BulkUserKeyRequest": { "properties": { "data": { "items": { "$ref": "#/definitions/models.UserKeyRequest" }, "type": "array" } }, "required": [ "data" ] }, "models.ConcurrentRecordRequest": { "properties": { "updatedAt": { "description": "Precondition for concurrent request, updatedAt should be the same as record's updatedAt", "format": "date-time", "type": "string", "x-nullable": false }, "value": { "description": "Record data, should be in valid json format", "type": "object" } }, "required": [ "updatedAt", "value" ] }, "models.CustomConfig": { "properties": { "GRPCAddress": { "type": "string" } }, "required": [ "GRPCAddress" ] }, "models.CustomFunction": { "properties": { "afterBulkReadGameBinaryRecord": { "description": "enable/disable after bulk read game binary record custom validation", "type": "boolean", "x-omitempty": false }, "afterBulkReadGameRecord": { "description": "enable/disable after bulk read game record custom validation", "type": "boolean", "x-omitempty": false }, "afterBulkReadPlayerBinaryRecord": { "description": "enable/disable after bulk read player binary record custom validation", "type": "boolean", "x-omitempty": false }, "afterBulkReadPlayerRecord": { "description": "enable/disable after bulk read player record custom validation", "type": "boolean", "x-omitempty": false }, "afterReadGameBinaryRecord": { "description": "enable/disable after read game binary record custom validation", "type": "boolean", "x-omitempty": false }, "afterReadGameRecord": { "description": "enable/disable after read game record custom validation", "type": "boolean", "x-omitempty": false }, "afterReadPlayerBinaryRecord": { "description": "enable/disable after read player binary record custom validation", "type": "boolean", "x-omitempty": false }, "afterReadPlayerRecord": { "description": "enable/disable after read player record custom validation", "type": "boolean", "x-omitempty": false }, "beforeWriteAdminGameRecord": { "description": "enable/disable before write admin game record custom validation", "type": "boolean", "x-omitempty": false }, "beforeWriteAdminPlayerRecord": { "description": "enable/disable before write admin player record custom validation", "type": "boolean", "x-omitempty": false }, "beforeWriteGameBinaryRecord": { "description": "enable/disable before write game binary record custom validation", "type": "boolean", "x-omitempty": false }, "beforeWriteGameRecord": { "description": "enable/disable before write game record custom validation", "type": "boolean", "x-omitempty": false }, "beforeWritePlayerBinaryRecord": { "description": "enable/disable before write player binary record custom validation", "type": "boolean", "x-omitempty": false }, "beforeWritePlayerRecord": { "description": "enable/disable before write player record custom validation", "type": "boolean", "x-omitempty": false } }, "required": [ "afterBulkReadGameBinaryRecord", "afterBulkReadGameRecord", "afterBulkReadPlayerBinaryRecord", "afterBulkReadPlayerRecord", "afterReadGameBinaryRecord", "afterReadGameRecord", "afterReadPlayerBinaryRecord", "afterReadPlayerRecord", "beforeWriteAdminGameRecord", "beforeWriteAdminPlayerRecord", "beforeWriteGameBinaryRecord", "beforeWriteGameRecord", "beforeWritePlayerBinaryRecord", "beforeWritePlayerRecord" ] }, "models.GameBinaryRecordAdminResponse": { "properties": { "binary_info": { "$ref": "#/definitions/models.BinaryInfoResponse" }, "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "key": { "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" }, "set_by": { "default": "CLIENT", "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "tags": { "description": "Tagging for game binary record", "items": { "type": "string" }, "type": "array" }, "ttl_config": { "$ref": "#/definitions/models.TTLConfigDTO", "description": "TTL configuration for the game record" }, "updated_at": { "format": "date-time", "type": "string", "x-nullable": false } }, "required": [ "created_at", "key", "namespace", "updated_at" ] }, "models.GameBinaryRecordCreate": { "properties": { "file_type": { "description": "File type of the game binary record", "type": "string" }, "key": { "description": "Game binary record identifier", "type": "string" }, "set_by": { "default": "CLIENT", "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "ttl_config": { "$ref": "#/definitions/models.TTLConfigDTO", "description": "TTL configuration for the game record" } }, "required": [ "file_type", "key", "set_by" ] }, "models.GameBinaryRecordMetadataRequest": { "properties": { "set_by": { "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "tags": { "description": "Tagging for game binary record", "items": { "type": "string" }, "type": "array" }, "ttl_config": { "$ref": "#/definitions/models.TTLConfigDTO", "description": "TTL configuration for the game record" } }, "required": [ "set_by" ] }, "models.GameBinaryRecordResponse": { "properties": { "binary_info": { "$ref": "#/definitions/models.BinaryInfoResponse" }, "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "key": { "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" }, "set_by": { "default": "CLIENT", "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "tags": { "description": "Tagging for game binary record", "items": { "type": "string" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string", "x-nullable": false } }, "required": [ "created_at", "key", "namespace", "updated_at" ] }, "models.GameRecordAdminResponse": { "properties": { "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "key": { "description": "Game record identifier", "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" }, "set_by": { "default": "CLIENT", "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "tags": { "description": "Tagging for game record", "items": { "type": "string" }, "type": "array" }, "ttl_config": { "$ref": "#/definitions/models.TTLConfigDTO", "description": "TTL configuration for the game record" }, "updated_at": { "format": "date-time", "type": "string", "x-nullable": false }, "value": { "description": "Game record data, should be in valid json format", "type": "object" } }, "required": [ "created_at", "key", "namespace", "updated_at", "value" ] }, "models.GameRecordRequest": { "type": "object" }, "models.GameRecordResponse": { "properties": { "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "key": { "description": "Game record identifier", "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" }, "set_by": { "default": "CLIENT", "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "tags": { "description": "Tagging for game record", "items": { "type": "string" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string", "x-nullable": false }, "value": { "description": "Game record data, should be in valid json format", "type": "object" } }, "required": [ "created_at", "key", "namespace", "updated_at", "value" ] }, "models.ListAdminGameRecordKeysResponse": { "properties": { "data": { "items": { "type": "string" }, "type": "array" }, "paging": { "$ref": "#/definitions/models.Pagination" } }, "required": [ "data", "paging" ] }, "models.ListAdminPlayerRecordKeysResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.AdminPlayerRecordKeyInfo" }, "type": "array" }, "paging": { "$ref": "#/definitions/models.Pagination" } }, "required": [ "data", "paging" ] }, "models.ListGameBinaryRecordsAdminResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.GameBinaryRecordAdminResponse" }, "type": "array" }, "paging": { "$ref": "#/definitions/models.Pagination" } }, "required": [ "data", "paging" ] }, "models.ListGameBinaryRecordsResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.GameBinaryRecordResponse" }, "type": "array" }, "paging": { "$ref": "#/definitions/models.Pagination" } }, "required": [ "data", "paging" ] }, "models.ListGameRecordKeysResponse": { "properties": { "data": { "items": { "type": "string" }, "type": "array" }, "paging": { "$ref": "#/definitions/models.Pagination" } }, "required": [ "data", "paging" ] }, "models.ListPlayerBinaryRecordsResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.PlayerBinaryRecordResponse" }, "type": "array" }, "paging": { "$ref": "#/definitions/models.Pagination" } }, "required": [ "data", "paging" ] }, "models.ListPlayerRecordKeysResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.PlayerRecordKeyInfo" }, "type": "array" }, "paging": { "$ref": "#/definitions/models.Pagination" } }, "required": [ "data", "paging" ] }, "models.ListTagsResponse": { "properties": { "data": { "items": { "$ref": "#/definitions/models.TagInfo" }, "type": "array" }, "paging": { "$ref": "#/definitions/models.Pagination" } }, "required": [ "data", "paging" ] }, "models.Pagination": { "properties": { "first": { "type": "string" }, "last": { "type": "string" }, "next": { "type": "string" }, "previous": { "type": "string" } }, "required": [ "first", "last", "next", "previous" ] }, "models.PlayerBinaryRecordCreate": { "properties": { "file_type": { "description": "File type of the binary record", "type": "string" }, "is_public": { "default": false, "description": "Indicate whether the player record is a public record or not", "type": "boolean", "x-omitempty": false }, "key": { "description": "Player binary record identifier", "type": "string" }, "set_by": { "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" } }, "required": [ "file_type", "key", "set_by" ] }, "models.PlayerBinaryRecordMetadataPublicRequest": { "properties": { "is_public": { "default": false, "description": "Indicate whether the player record is public or not", "type": "boolean", "x-omitempty": false } } }, "models.PlayerBinaryRecordMetadataRequest": { "properties": { "is_public": { "default": false, "description": "Indicate whether the player record is public or not", "type": "boolean", "x-omitempty": false }, "set_by": { "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "tags": { "description": "Tagging for player binary record", "items": { "type": "string" }, "type": "array" } } }, "models.PlayerBinaryRecordResponse": { "properties": { "binary_info": { "$ref": "#/definitions/models.BinaryInfoResponse" }, "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "is_public": { "default": false, "description": "Indicate whether the player record is public or not", "type": "boolean", "x-omitempty": false }, "key": { "description": "Player binary record identifier", "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" }, "set_by": { "default": "CLIENT", "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "tags": { "description": "Tagging for player binary record", "items": { "type": "string" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string", "x-nullable": false }, "user_id": { "description": "User ID who owns the binary record", "type": "string" } }, "required": [ "created_at", "is_public", "key", "namespace", "updated_at", "user_id" ] }, "models.PlayerRecordConcurrentUpdateResponse": { "properties": { "updated_at": { "description": "Precondition for concurrent request, required for making the concurrent request", "format": "date-time", "type": "string", "x-nullable": false } }, "required": [ "updated_at" ] }, "models.PlayerRecordKeyInfo": { "properties": { "key": { "description": "Player record identifier", "type": "string" }, "user_id": { "description": "User ID who owns the record", "type": "string" } }, "required": [ "key", "user_id" ] }, "models.PlayerRecordRequest": { "type": "object" }, "models.PlayerRecordResponse": { "properties": { "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "is_public": { "default": false, "description": "Indicate whether the player record is a public record or not", "type": "boolean", "x-omitempty": false }, "key": { "description": "Player record identifier", "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" }, "set_by": { "default": "CLIENT", "description": "Indicate which party that could modify the record", "enum": [ "CLIENT", "SERVER" ], "type": "string" }, "tags": { "description": "Tagging for the player record", "items": { "type": "string" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string", "x-nullable": false }, "user_id": { "description": "User ID who owns the record", "type": "string" }, "value": { "description": "Player record data, should be in valid json format", "type": "object" } }, "required": [ "created_at", "is_public", "key", "namespace", "updated_at", "user_id", "value" ] }, "models.PlayerRecordSizeResponse": { "properties": { "current_size": { "description": "Player record current size", "format": "int64", "type": "integer" }, "key": { "description": "Player record identifier", "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" }, "remaining_size": { "description": "Player record remaining size", "format": "int64", "type": "integer" }, "user_id": { "description": "User ID who owns the record", "type": "string" } }, "required": [ "current_size", "key", "namespace", "remaining_size", "user_id" ] }, "models.PluginRequest": { "properties": { "appConfig": { "$ref": "#/definitions/models.AppConfig", "description": "Config for APP extend type" }, "customConfig": { "$ref": "#/definitions/models.CustomConfig", "description": "Config for CUSTOM extend type" }, "customFunction": { "$ref": "#/definitions/models.CustomFunction", "description": "List of functions that can be extended" }, "extendType": { "description": "Plugin extend type", "enum": [ "APP", "CUSTOM" ], "type": "string" } }, "required": [ "customFunction", "extendType" ] }, "models.PluginResponse": { "properties": { "appConfig": { "$ref": "#/definitions/models.AppConfig", "description": "Config for APP extend type" }, "customConfig": { "$ref": "#/definitions/models.CustomConfig", "description": "Config for CUSTOM extend type" }, "customFunction": { "$ref": "#/definitions/models.CustomFunction", "description": "List of functions that can be extended" }, "extendType": { "description": "Plugin extend type", "enum": [ "APP", "CUSTOM" ], "type": "string" }, "namespace": { "description": "Namespace of the game", "type": "string" } }, "required": [ "customFunction", "extendType", "namespace" ] }, "models.PublicGameBinaryRecordCreate": { "properties": { "file_type": { "description": "File type of game binary record", "type": "string" }, "key": { "description": "Game binary record identifier", "type": "string" } }, "required": [ "file_type", "key" ] }, "models.PublicPlayerBinaryRecordCreate": { "properties": { "file_type": { "description": "File type of the binary record", "type": "string" }, "is_public": { "default": false, "description": "Indicate whether the player record is a public record or not", "type": "boolean", "x-omitempty": false }, "key": { "description": "Player binary record identifier", "type": "string" } }, "required": [ "file_type", "key" ] }, "models.ResponseError": { "properties": { "errorCode": { "format": "int32", "type": "integer" }, "errorMessage": { "type": "string" } }, "required": [ "errorCode", "errorMessage" ] }, "models.TTLConfigDTO": { "properties": { "action": { "description": "Indicate what action will be done after the record expires", "enum": [ "DELETE" ], "type": "string" }, "expires_at": { "description": "Indicate when the record will be expired, should be in RFC3339 format", "format": "date-time", "type": "string", "x-nullable": false } }, "required": [ "action", "expires_at" ] }, "models.TagInfo": { "properties": { "created_at": { "format": "date-time", "type": "string", "x-nullable": false }, "tag": { "type": "string" } }, "required": [ "created_at", "tag" ] }, "models.TagRequest": { "properties": { "tag": { "type": "string" } }, "required": [ "tag" ] }, "models.UploadBinaryRecordRequest": { "properties": { "file_type": { "description": "File type of the binary record", "type": "string" } }, "required": [ "file_type" ] }, "models.UploadBinaryRecordResponse": { "properties": { "content_type": { "description": "File type of game binary record", "type": "string" }, "file_location": { "description": "File location of the binary record", "type": "string" }, "url": { "description": "URL for accessing the binary record", "type": "string" }, "version": { "description": "Version of the binary file", "format": "int32", "type": "integer" } }, "required": [ "content_type", "file_location", "url", "version" ] }, "models.UserKeyRequest": { "properties": { "keys": { "description": "Keys of the record", "items": { "type": "string" }, "type": "array" }, "user_id": { "description": "User ID who owns the record", "type": "string" } }, "required": [ "keys", "user_id" ] } }, "x-docs": { "alias": "cloudsave", "host": "https://stage.accelbyte.io", "path": "/cloudsave/apidocs/api.json" }, "x-version": { "buildDate": "2025-10-16T09:48:09+00:00", "gitHash": "ecb2d1d0fe77a1cb90d72a13b6bfa1a9456e05cd", "name": "justice-cloudsave-service", "revisionID": "3.29.0", "version": "3.29.0", "version-roles-seeding": "0.0.46" } }