{ "openapi": "3.0.0", "info": { "title": "Cloud API", "description": "The Roblox Open Cloud v2 API. This is a subset of endpoints that Roblox\nprovides. See https://create.roblox.com/docs/cloud/open-cloud for more\ndetails.", "version": "2.0.1" }, "servers": [ { "url": "https://apis.roblox.com" } ], "paths": { "/cloud/v2/creator-store-products": { "post": { "tags": ["Cloud"], "summary": "Create Creator Store Product", "description": "Add a Creator Store product. Only use this method if your product has never\nbeen distributed on the Creator Store; otherwise, use the `PATCH` method to\nupdate the product.", "operationId": "Cloud_CreateCreatorStoreProduct", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatorStoreProduct" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatorStoreProduct" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "creator-store-product:write" } ], "x-roblox-docs": { "category": "Monetization", "methodProperties": { "scopes": ["creator-store-product:write"] }, "resource": { "$ref": "#/components/schemas/CreatorStoreProduct", "name": "CreatorStoreProduct" } } } }, "/cloud/v2/creator-store-products/{creator_store_product_id}": { "get": { "tags": ["Cloud"], "summary": "Get Creator Store Product", "description": "Get a Creator Store product.", "operationId": "Cloud_GetCreatorStoreProduct", "parameters": [ { "name": "creator_store_product_id", "in": "path", "description": "The creator-store-product ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatorStoreProduct" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "creator-store-product:read" } ], "x-roblox-docs": { "category": "Monetization", "methodProperties": { "scopes": ["creator-store-product:read"] }, "resource": { "$ref": "#/components/schemas/CreatorStoreProduct", "name": "CreatorStoreProduct" } } }, "patch": { "tags": ["Cloud"], "summary": "Update Creator Store Product", "description": "Update a Creator Store product.", "operationId": "Cloud_UpdateCreatorStoreProduct", "parameters": [ { "name": "creator_store_product_id", "in": "path", "description": "The creator-store-product ID.", "required": true, "schema": { "type": "string" } }, { "name": "updateMask", "in": "query", "description": "The list of fields to update.", "schema": { "type": "string", "format": "field-mask" } }, { "name": "allowMissing", "in": "query", "description": "If set to true, and the creator store product is not found, a creator store\nproduct is created. In this situation, `update_mask` is ignored.", "schema": { "example": true, "type": "boolean" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatorStoreProduct" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatorStoreProduct" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "creator-store-product:write" } ], "x-roblox-docs": { "category": "Monetization", "methodProperties": { "scopes": ["creator-store-product:write"] }, "resource": { "$ref": "#/components/schemas/CreatorStoreProduct", "name": "CreatorStoreProduct" } } } }, "/cloud/v2/groups/{group_id}": { "get": { "tags": ["Cloud"], "summary": "Get Group", "description": "Gets the specified group.", "operationId": "Cloud_GetGroup", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Group" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": [] }, "resource": { "$ref": "#/components/schemas/Group", "name": "Group" } } } }, "/cloud/v2/groups/{group_id}/forum-categories": { "get": { "tags": ["Cloud"], "summary": "List Group Forum Categories", "description": "Lists forum categories in the group. Supports filtering.", "operationId": "Cloud_ListGroupForumCategories", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of group forum categories to return. The service might\nreturn fewer than this value. If unspecified, at most 10 group forum\ncategories are returned. The maximum value is 10 and higher values are set\nto 10.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 10, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nFiltering conforms to Common Expression Language (CEL). Only the boolean\nfield `archived` and `==` operator are supported. If `archived=false`,\narchived categories are not returned. The default value is `false`.\nExample: `\"filter=archived==true\"`", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListGroupForumCategoriesResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "name": "group-forum:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["group-forum:read"] }, "resource": { "$ref": "#/components/schemas/GroupForumCategory", "name": "GroupForumCategory" } } } }, "/cloud/v2/groups/{group_id}/forum-categories/{forum_category_id}/posts": { "get": { "tags": ["Cloud"], "summary": "List Group Forum Posts", "description": "Lists forum posts in the group's forum category. Supports filtering.", "operationId": "Cloud_ListGroupForumPosts", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "forum_category_id", "in": "path", "description": "The forum-category ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of group forum posts to return. The service might return\nfewer than this value. If unspecified, at most 10 group forum posts are\nreturned. The maximum value is 100 and higher values are set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nFiltering conforms to Common Expression Language (CEL). Only the query\n`filter=pinned==true` is supported, where only pinned posts are returned.\n`filter=pinned==false`is not supported.", "schema": { "type": "string" } }, { "name": "view", "in": "query", "description": "The view in which to retrieve the group forum post.\n\nSupports FULL and FULL_WITH_FIRST_COMMENT.\n\nDefaults to FULL.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | VIEW_UNSPECIFIED | The group forum post view is not specified; the default will be used. |\n | FULL | Includes all fields but does not dereference `first_comment`. Only the `path` field is populated. |\n | FULL_WITH_FIRST_COMMENT | Includes all fields and also fully populates `first_comment`. The default view. |", "schema": { "example": "VIEW_UNSPECIFIED", "enum": ["VIEW_UNSPECIFIED", "FULL", "FULL_WITH_FIRST_COMMENT"], "type": "string", "format": "enum" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListGroupForumPostsResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "name": "group-forum:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["group-forum:read"] }, "resource": { "$ref": "#/components/schemas/GroupForumPost", "name": "GroupForumPost" } } } }, "/cloud/v2/groups/{group_id}/forum-categories/{forum_category_id}/posts/{post_id}/comments": { "get": { "tags": ["Cloud"], "summary": "List Group Forum Comments", "description": "Lists forum comments on a group's forum post. Supports filtering.", "operationId": "Cloud_ListGroupForumComments", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "forum_category_id", "in": "path", "description": "The forum-category ID.", "required": true, "schema": { "type": "string" } }, { "name": "post_id", "in": "path", "description": "The post ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of group forum comments to return. The service might\nreturn fewer than this value. If unspecified, at most 10 group forum\ncomments are returned. The maximum value is 100 and higher values are set\nto 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nFiltering conforms to Common Expression Language (CEL). Only the string\nfield `repliesToCommentId` and the `==` operator are supported.\nIf `repliesToCommentId` is specified, only comments that respond to the\ncomment are returned. The default value is `''`. If\n`repliesToCommentId=''`, only comments responding directly to the post are\nreturned. Example:\n`\"filter=repliesToCommentId==01234567-89ab-cdef-0123-456789abcdef\"`", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListGroupForumCommentsResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "name": "group-forum:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["group-forum:read"] }, "resource": { "$ref": "#/components/schemas/GroupForumComment", "name": "GroupForumComment" } } } }, "/cloud/v2/groups/{group_id}/join-requests": { "get": { "tags": ["Cloud"], "summary": "List Group Join Requests", "description": "List join requests under a group. Supports filtering.", "operationId": "Cloud_ListGroupJoinRequests", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of group join requests to return. The service might\nreturn fewer than this value. If unspecified, at most 10 group join\nrequests are returned. The maximum value is 20 and higher values are set\nto 20.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 20, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nFiltering conforms to Common Expression Language (CEL). Only the `user`\nfield and `==` operator are supported.\n\n\nExample: `\"user == 'users/156'\"`", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListGroupJoinRequestsResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "name": "group:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["group:read"] }, "resource": { "$ref": "#/components/schemas/GroupJoinRequest", "name": "GroupJoinRequest" } } } }, "/cloud/v2/groups/{group_id}/join-requests/{join_request_id}:accept": { "post": { "tags": ["Cloud"], "summary": "Accept Group Join Request", "description": "Accepts a join request.", "operationId": "Cloud_AcceptGroupJoinRequest", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "join_request_id", "in": "path", "description": "The join-request ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AcceptGroupJoinRequestRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": {} } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "name": "group:write" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["group:write"] }, "resource": { "$ref": "#/components/schemas/GroupJoinRequest", "name": "GroupJoinRequest" } } } }, "/cloud/v2/groups/{group_id}/join-requests/{join_request_id}:decline": { "post": { "tags": ["Cloud"], "summary": "Decline Group Join Request", "description": "Declines a join request.", "operationId": "Cloud_DeclineGroupJoinRequest", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "join_request_id", "in": "path", "description": "The join-request ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeclineGroupJoinRequestRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": {} } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "name": "group:write" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["group:write"] }, "resource": { "$ref": "#/components/schemas/GroupJoinRequest", "name": "GroupJoinRequest" } } } }, "/cloud/v2/groups/{group_id}/memberships": { "get": { "tags": ["Cloud"], "summary": "List Group Memberships", "description": "List group members in a group. Supports filtering.", "operationId": "Cloud_ListGroupMemberships", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of group memberships to return. The service might return\nfewer than this value. If unspecified, at most 10 group memberships are\nreturned. The maximum value is 100 and higher values are set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nSee the\n[filtering](/cloud/reference/patterns#list-group-memberships)\ndocumentation for more information.", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListGroupMembershipsResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": [] }, "resource": { "$ref": "#/components/schemas/GroupMembership", "name": "GroupMembership" } } } }, "/cloud/v2/groups/{group_id}/memberships/{membership_id}": { "patch": { "tags": ["Cloud"], "summary": "Update Group Membership", "description": "**Deprecated.** Use AssignGroupRole and UnassignGroupRole instead.\nUpdates the group membership for a particular group member. This action\nrequires the requester to be able to assign or remove roles below their\nhighest role. The requester cannot change their own roles.", "operationId": "Cloud_UpdateGroupMembership", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "membership_id", "in": "path", "description": "The membership ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupMembership" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupMembership" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "name": "group:write" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["group:write"] }, "resource": { "$ref": "#/components/schemas/GroupMembership", "name": "GroupMembership" } } } }, "/cloud/v2/groups/{group_id}/memberships/{membership_id}:assignRole": { "post": { "tags": ["Cloud"], "summary": "Assign Role Group Membership", "description": "Assigns a specific role to a user within a group. If the user already\nholds the specified role, no action is taken.", "operationId": "Cloud_AssignRoleGroupMembership", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "membership_id", "in": "path", "description": "The membership ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AssignRoleGroupMembershipRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupMembership" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "name": "group:write" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["group:write"] }, "resource": { "$ref": "#/components/schemas/GroupMembership", "name": "GroupMembership" } } } }, "/cloud/v2/groups/{group_id}/memberships/{membership_id}:unassignRole": { "post": { "tags": ["Cloud"], "summary": "Unassign Role Group Membership", "description": "Unassigns a specific role from a user within a group. If the user does\nnot hold the specified role, no action is taken.", "operationId": "Cloud_UnassignRoleGroupMembership", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "membership_id", "in": "path", "description": "The membership ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnassignRoleGroupMembershipRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupMembership" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "name": "group:write" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["group:write"] }, "resource": { "$ref": "#/components/schemas/GroupMembership", "name": "GroupMembership" } } } }, "/cloud/v2/groups/{group_id}/roles": { "get": { "tags": ["Cloud"], "summary": "List Group Roles", "description": "List roles in a group.\n\nRoles can be public or private. The response includes private roles and\ntheir fields only when the acting user is permitted to view them. The\nendpoint does not provide a public-roles-only view.\n\nThe permissions field for roles is viewable based on the requester's access\nand scopes.\n\nPermissions for the guest role are always visible - a scope is not needed.\n\nIf the requester is a member of the group and has the `group:read` scope,\npermissions in their role are visible.\n\nIf the requester is the owner of the group and has the `group:read` scope,\npermissions in all roles are visible.", "operationId": "Cloud_ListGroupRoles", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of group roles to return. The service might return fewer\nthan this value. If unspecified, at most 10 group roles are returned. The\nmaximum value is 20 and higher values are set to 20.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 20, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListGroupRolesResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "description": "Required to view permissions in non-guest roles.", "name": "group:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": [] }, "resource": { "$ref": "#/components/schemas/GroupRole", "name": "GroupRole" } } } }, "/cloud/v2/groups/{group_id}/roles/{role_id}": { "get": { "tags": ["Cloud"], "summary": "Get Group Role", "description": "Get the group role", "operationId": "Cloud_GetGroupRole", "parameters": [ { "name": "group_id", "in": "path", "description": "The group ID.", "required": true, "schema": { "type": "string" } }, { "name": "role_id", "in": "path", "description": "The role ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GroupRole" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": true }, "x-roblox-scopes": [ { "description": "Required to view permissions in non-guest roles.", "name": "group:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": [] }, "resource": { "$ref": "#/components/schemas/GroupRole", "name": "GroupRole" } } } }, "/cloud/v2/universes/{universe_id}": { "get": { "tags": ["Cloud"], "summary": "Get Universe", "description": "Gets the specified universe.", "operationId": "Cloud_GetUniverse", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Universe" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": [] }, "resource": { "$ref": "#/components/schemas/Universe", "name": "Universe" } } }, "patch": { "tags": ["Cloud"], "summary": "Update Universe", "description": "Updates the specified universe.\n\nThis method is guaranteed to return all updated fields.\nThis method may additionally return the full resource.", "operationId": "Cloud_UpdateUniverse", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "updateMask", "in": "query", "description": "The list of fields to update.", "schema": { "type": "string", "format": "field-mask" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Universe" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Universe" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe:write" } ], "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": ["universe:write"] }, "resource": { "$ref": "#/components/schemas/Universe", "name": "Universe" } } } }, "/cloud/v2/universes/{universe_id}/data-stores": { "get": { "tags": ["Cloud"], "summary": "List Data Stores", "description": "Returns a list of data stores.\n\nData stores scheduled for permanent deletion are omitted from the results\nby default (or when `showDeleted` is set to `false`). When this is the\ncase, the operation will check up to 512 data stores. If all checked data\nstores are deleted, it will return an empty list with a page token to\ncontinue iteration.", "operationId": "Cloud_ListDataStores", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of data stores to return. The service might return fewer\nthan this value. If unspecified, at most 10 data stores are returned. The\nmaximum value is 100 and higher values are set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nThe `filter` field supports a very small subset of CEL:\n\n* Only the `id` field is supported.\n* Only the `startsWith` function is available; no other operators nor\n built-ins are supported.\n\nExample filter: `id.startsWith(\"foo\")`", "schema": { "type": "string" } }, { "name": "showDeleted", "in": "query", "description": "If true, resources marked for pending deletion will be included in the\nresults.", "schema": { "example": true, "type": "boolean" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListDataStoresResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.control:list" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.control:list"] }, "resource": { "$ref": "#/components/schemas/DataStore", "name": "DataStore" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}": { "delete": { "tags": ["Cloud"], "summary": "Delete Data Store", "description": "Schedules the specified data store for permanent deletion.\n\nThis operation assigns the data store an expiry time 30 days in the future,\nat which point permanent deletion begins. To cancel, use the\n`UndeleteDataStore` operation before the data store's expiry time.\n\nPermanent deletion consists of deleting all of the entries in the data\nstore and then the data store resource itself. The data store is no longer\nreturned by the `ListDataStores` Open Cloud endpoint or\n`ListDataStoresAsync` Luau API, and you can reuse the data store's name.\n\nThe duration of the permanent deletion process depends on the number of\nentries in the data store. However, you can expect a data store with 1\nmillion or fewer entries to be permanently deleted within 3 days.\n\nData stores scheduled for permanent deletion are returned by the\n`ListDataStores` Open Cloud endpoint when the query parameter `showDeleted`\nis set to `true`. In the return value, each data store will have a\n`DELETED` state and an `expireTime` field.\n\nData stores scheduled for permanent deletion are immediately made\ninaccessible, meaning attempts to read or write to their entries will fail.\n\nNote: Due to caching in the backend service, attempts to read from or write\nto entries in these data stores can continue to succeed for a limited time\nafter the deletion:\n* `GetDataStoreEntry`: can succeed for up to 24 hours.\n* All other endpoints: can succeed for several minutes.\n\nIf the data store is already in a `DELETED` state, this operation is a\nno-op, and the data store is returned as-is.", "operationId": "Cloud_DeleteDataStore", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStore" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.control:delete" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.control:delete"] }, "resource": { "$ref": "#/components/schemas/DataStore", "name": "DataStore" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}/entries": { "get": { "tags": ["Cloud"], "summary": "List Data Store Entries", "description": "Returns a list of entries from a data store.\n\nOnly the `path` and `id` fields are populated; use `GetDataStoreEntry`\nto retrieve other fields.\n\nSpecify the wildcard scope (`-`) to list entries from all scopes.", "operationId": "Cloud_ListDataStoreEntries__Using_Universes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of data store entries to return. The service might\nreturn fewer than this value. If unspecified, at most 10 data store entries\nare returned. The maximum value is 256 and higher values are set to 256.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 256, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nThe `filter` field supports a very small subset of CEL:\n\n* Only the `id` field is supported.\n* Only the `startsWith` function is available; no other operators nor\n built-ins are supported.\n\nExample filter: `id.startsWith(\"foo\")`", "schema": { "type": "string" } }, { "name": "showDeleted", "in": "query", "description": "If true, resources marked for pending deletion will be included in the\nresults.", "schema": { "example": true, "type": "boolean" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListDataStoreEntriesResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:list" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:list"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } }, "post": { "tags": ["Cloud"], "summary": "Create Data Store Entry", "description": "Creates an entry with the provided ID and value.\n\nReturns a 400 Bad Request if the entry exists.", "operationId": "Cloud_CreateDataStoreEntry__Using_Universes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "query", "description": "The ID to use for the data store entry, which will become the final\ncomponent of the data store entry's resource path.\n\nThis value should be a 1-50 character string. We strongly recommend using\nonly lowercase letters, numeric digits, and hyphens.", "schema": { "type": "string" }, "examples": { "id": { "description": "a 1-50 character string. We strongly recommend using only lowercase letters, numeric digits, and hyphens.", "value": "my-entry" } } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:create" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:create"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}/entries/{entry_id}": { "get": { "tags": ["Cloud"], "summary": "Get Data Store Entry", "description": "Gets the specified entry.\n\nTo get the entry at a specific revision, add `@` to the end of\nthe path.\n\nFor example, to get `my-entry` at the revision ID\n`08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`, use the path\n`/cloud/v2/universes/1234/data-stores/5678/entries/my-entry@08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`.\n\nIf your entry ID contains one or more `@` characters, and you want to get\nthe latest version rather than at any specific revision, append the special\nrevision ID `@latest` to the end of the path. Otherwise, the segment of the\nentry ID after the last `@` will be interpreted as a revision ID.\n\nFor example, to get the latest revision of `my-entry`, use the path\n`/cloud/v2/universes/1234/data-stores/5678/entries/my@entry@latest`.\n\nTo get the entry that was current at a specific time, add\n`@latest:` to the end of the path, where `` is\nRFC-3339 formatted. The given timestamp must be after\nthe Unix epoch (1/1/1970) and not more than ten minutes in the future.\n\nFor example, to get the revision of `my-entry` that was current on\n12/2/2024 at 06:00 UTC, use the path\n`/cloud/v2/universes/1234/data-stores/5678/entries/my-entry@latest:2024-12-02T06:00:00Z`.", "operationId": "Cloud_GetDataStoreEntry__Using_Universes_DataStores", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:read" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:read"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } }, "delete": { "tags": ["Cloud"], "summary": "Delete Data Store Entry", "description": "Marks the specified entry for deletion.\n\nEntries are not be deleted immediately; instead, the `state` field will\nbe set to `DELETED`. Permanent deletion occurs after 30 days.\n\nOn success, returns 200 OK. If the entry doesn't exist, returns\n404 Not Found.", "operationId": "Cloud_DeleteDataStoreEntry__Using_Universes_DataStores", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": {} } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:delete" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:delete"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } }, "patch": { "tags": ["Cloud"], "summary": "Update Data Store Entry", "description": "Updates the value, attributes, and users of an entry.\n\nUpdating specific revisions of the entry is **unsupported**. If you specify\na revision ID in the path and `allow_missing` is `true`, the update request\nwill instead create a new entry with the `@` suffix as part of\nthe key.\n\nPartial update is **unsupported**. If attributes or users are not\nprovided when updating the value, they will be cleared. Value must always\nbe provided when updating an entry.", "operationId": "Cloud_UpdateDataStoreEntry__Using_Universes_DataStores", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } }, { "name": "allowMissing", "in": "query", "description": "If set to true, and the data store entry is not found, a data store entry\nis created.", "schema": { "example": true, "type": "boolean" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:update" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:update"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}/entries/{entry_id}:increment": { "post": { "tags": ["Cloud"], "summary": "Increment Data Store Entry", "description": "Increments the value of the specified entry. Both the existing value and\nthe increment amount must be integers.\n\nIf the entry doesn't exist, creates an entry with the specified value.\n\nIncrementing specific revisions of the entry is **unsupported**. If you\nspecify a revision ID in the path, the increment request will create a new\nentry with the `@` suffix as part of the key.\n\nKnown issue: the value may be incremented past the valid range of values.\nWhen this happens, the returned value will be clamped to the valid range,\nbut the backend may persist the original value. This behavior is maintained\nfor backwards compatibility reasons, but may change in a future version of\nthis API.", "operationId": "Cloud_IncrementDataStoreEntry__Using_Universes_DataStores", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncrementDataStoreEntryRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:create" }, { "name": "universe-datastores.objects:update" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": [ "universe-datastores.objects:create", "universe-datastores.objects:update" ] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}/entries/{entry_id}:listRevisions": { "get": { "tags": ["Cloud"], "summary": "List Data Store Entry Revisions", "description": "List revisions of the data store entry.\n\nThis method returns partial data store entries.\n\nIn particular, only the `path`, `id`, `createTime`, `revisionCreateTime`,\n`revisionId`, `etag`, and `state` fields are populated. Both the `path` and\n`id` fields will have an `@` suffix.\n\nIn order to get the full entry at a revision, you can use the provided\n`path` field with the `GetDataStoreEntry` method, i.e. `GET\n/cloud/v2/universes/1234/data-stores/5678/entries/my-entry@`.", "operationId": "Cloud_ListDataStoreEntryRevisions__Using_Universes_DataStores", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of revisions to return per page.\n\nThe service might return fewer than the maximum number of revisions.\nIf unspecified, at most 10 revisions are returned.\nThe maximum value is 100 values and higher values are set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call\nmust match the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "Supports the following subset of CEL:\n\n* Only the `&&`, `<=`, and `>=` operators are supported.\n* Only the `revision_create_time` field is supported.\n\nFor example:\n\n `\"revision_create_time >= 2000-01-01T00:00:00Z && revision_create_time <=\n 2001-01-01T00:00:00Z\"`", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListDataStoreEntryRevisionsResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.versions:list" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.versions:list"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}/scopes/{scope_id}/entries": { "get": { "tags": ["Cloud"], "summary": "List Data Store Entries", "description": "Returns a list of entries from a data store.\n\nOnly the `path` and `id` fields are populated; use `GetDataStoreEntry`\nto retrieve other fields.\n\nSpecify the wildcard scope (`-`) to list entries from all scopes.", "operationId": "Cloud_ListDataStoreEntries__Using_Universes_DataStores", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of data store entries to return. The service might\nreturn fewer than this value. If unspecified, at most 10 data store entries\nare returned. The maximum value is 256 and higher values are set to 256.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 256, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nThe `filter` field supports a very small subset of CEL:\n\n* Only the `id` field is supported.\n* Only the `startsWith` function is available; no other operators nor\n built-ins are supported.\n\nExample filter: `id.startsWith(\"foo\")`", "schema": { "type": "string" } }, { "name": "showDeleted", "in": "query", "description": "If true, resources marked for pending deletion will be included in the\nresults.", "schema": { "example": true, "type": "boolean" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListDataStoreEntriesResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:list" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:list"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } }, "post": { "tags": ["Cloud"], "summary": "Create Data Store Entry", "description": "Creates an entry with the provided ID and value.\n\nReturns a 400 Bad Request if the entry exists.", "operationId": "Cloud_CreateDataStoreEntry__Using_Universes_DataStores", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "query", "description": "The ID to use for the data store entry, which will become the final\ncomponent of the data store entry's resource path.\n\nThis value should be a 1-50 character string. We strongly recommend using\nonly lowercase letters, numeric digits, and hyphens.", "schema": { "type": "string" }, "examples": { "id": { "description": "a 1-50 character string. We strongly recommend using only lowercase letters, numeric digits, and hyphens.", "value": "my-entry" } } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:create" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:create"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}/scopes/{scope_id}/entries/{entry_id}": { "get": { "tags": ["Cloud"], "summary": "Get Data Store Entry", "description": "Gets the specified entry.\n\nTo get the entry at a specific revision, add `@` to the end of\nthe path.\n\nFor example, to get `my-entry` at the revision ID\n`08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`, use the path\n`/cloud/v2/universes/1234/data-stores/5678/entries/my-entry@08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`.\n\nIf your entry ID contains one or more `@` characters, and you want to get\nthe latest version rather than at any specific revision, append the special\nrevision ID `@latest` to the end of the path. Otherwise, the segment of the\nentry ID after the last `@` will be interpreted as a revision ID.\n\nFor example, to get the latest revision of `my-entry`, use the path\n`/cloud/v2/universes/1234/data-stores/5678/entries/my@entry@latest`.\n\nTo get the entry that was current at a specific time, add\n`@latest:` to the end of the path, where `` is\nRFC-3339 formatted. The given timestamp must be after\nthe Unix epoch (1/1/1970) and not more than ten minutes in the future.\n\nFor example, to get the revision of `my-entry` that was current on\n12/2/2024 at 06:00 UTC, use the path\n`/cloud/v2/universes/1234/data-stores/5678/entries/my-entry@latest:2024-12-02T06:00:00Z`.", "operationId": "Cloud_GetDataStoreEntry__Using_Universes_DataStores_Scopes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:read" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:read"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } }, "delete": { "tags": ["Cloud"], "summary": "Delete Data Store Entry", "description": "Marks the specified entry for deletion.\n\nEntries are not be deleted immediately; instead, the `state` field will\nbe set to `DELETED`. Permanent deletion occurs after 30 days.\n\nOn success, returns 200 OK. If the entry doesn't exist, returns\n404 Not Found.", "operationId": "Cloud_DeleteDataStoreEntry__Using_Universes_DataStores_Scopes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": {} } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:delete" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:delete"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } }, "patch": { "tags": ["Cloud"], "summary": "Update Data Store Entry", "description": "Updates the value, attributes, and users of an entry.\n\nUpdating specific revisions of the entry is **unsupported**. If you specify\na revision ID in the path and `allow_missing` is `true`, the update request\nwill instead create a new entry with the `@` suffix as part of\nthe key.\n\nPartial update is **unsupported**. If attributes or users are not\nprovided when updating the value, they will be cleared. Value must always\nbe provided when updating an entry.", "operationId": "Cloud_UpdateDataStoreEntry__Using_Universes_DataStores_Scopes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } }, { "name": "allowMissing", "in": "query", "description": "If set to true, and the data store entry is not found, a data store entry\nis created.", "schema": { "example": true, "type": "boolean" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:update" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.objects:update"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}/scopes/{scope_id}/entries/{entry_id}:increment": { "post": { "tags": ["Cloud"], "summary": "Increment Data Store Entry", "description": "Increments the value of the specified entry. Both the existing value and\nthe increment amount must be integers.\n\nIf the entry doesn't exist, creates an entry with the specified value.\n\nIncrementing specific revisions of the entry is **unsupported**. If you\nspecify a revision ID in the path, the increment request will create a new\nentry with the `@` suffix as part of the key.\n\nKnown issue: the value may be incremented past the valid range of values.\nWhen this happens, the returned value will be clamped to the valid range,\nbut the backend may persist the original value. This behavior is maintained\nfor backwards compatibility reasons, but may change in a future version of\nthis API.", "operationId": "Cloud_IncrementDataStoreEntry__Using_Universes_DataStores_Scopes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncrementDataStoreEntryRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.objects:create" }, { "name": "universe-datastores.objects:update" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": [ "universe-datastores.objects:create", "universe-datastores.objects:update" ] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}/scopes/{scope_id}/entries/{entry_id}:listRevisions": { "get": { "tags": ["Cloud"], "summary": "List Data Store Entry Revisions", "description": "List revisions of the data store entry.\n\nThis method returns partial data store entries.\n\nIn particular, only the `path`, `id`, `createTime`, `revisionCreateTime`,\n`revisionId`, `etag`, and `state` fields are populated. Both the `path` and\n`id` fields will have an `@` suffix.\n\nIn order to get the full entry at a revision, you can use the provided\n`path` field with the `GetDataStoreEntry` method, i.e. `GET\n/cloud/v2/universes/1234/data-stores/5678/entries/my-entry@`.", "operationId": "Cloud_ListDataStoreEntryRevisions__Using_Universes_DataStores_Scopes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of revisions to return per page.\n\nThe service might return fewer than the maximum number of revisions.\nIf unspecified, at most 10 revisions are returned.\nThe maximum value is 100 values and higher values are set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call\nmust match the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "Supports the following subset of CEL:\n\n* Only the `&&`, `<=`, and `>=` operators are supported.\n* Only the `revision_create_time` field is supported.\n\nFor example:\n\n `\"revision_create_time >= 2000-01-01T00:00:00Z && revision_create_time <=\n 2001-01-01T00:00:00Z\"`", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListDataStoreEntryRevisionsResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.versions:list" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.versions:list"] }, "resource": { "$ref": "#/components/schemas/DataStoreEntry", "name": "DataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/data-stores/{data_store_id}:undelete": { "post": { "tags": ["Cloud"], "summary": "Undelete Data Store", "description": "Restore the data store", "operationId": "Cloud_UndeleteDataStore", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "data_store_id", "in": "path", "description": "The data-store ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UndeleteDataStoreRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataStore" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.control:delete" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.control:delete"] }, "resource": { "$ref": "#/components/schemas/DataStore", "name": "DataStore" } } } }, "/cloud/v2/universes/{universe_id}/data-stores:snapshot": { "post": { "tags": ["Cloud"], "summary": "Snapshot Data Stores", "description": "Takes a new snapshot of the data stores in an experience.\n\nAfter a snapshot, the next write to every key in the experience will\ncreate a versioned backup of the previous data, regardless of the time of\nthe last write.\n\nIn effect, all data current at the time of the snapshot is guaranteed to be\navailable as a versioned backup for at least 30 days.\n\nSnapshots can be taken once per UTC day, per experience. If the latest\nsnapshot was taken within the same UTC day, this operation is a no-op and\nthe time of the latest snapshot will be returned.\n\nFor more information on using snapshots, see the [Data\nstores](https://create.roblox.com/docs/cloud-services/data-stores#snapshots)\nEngine guide.", "operationId": "Cloud_SnapshotDataStores", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SnapshotDataStoresRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SnapshotDataStoresResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe-datastores.control:snapshot" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe-datastores.control:snapshot"] }, "resource": { "$ref": "#/components/schemas/DataStore", "name": "DataStore" } } } }, "/cloud/v2/universes/{universe_id}/luau-execution-session-task-binary-inputs": { "post": { "tags": ["Cloud"], "summary": "Create Luau Execution Session Task Binary Input", "description": "Create a new `LuauExecutionSessionTaskBinaryInput`.", "operationId": "Cloud_CreateLuauExecutionSessionTaskBinaryInput", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LuauExecutionSessionTaskBinaryInput" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LuauExecutionSessionTaskBinaryInput" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe.place.luau-execution-session:write" } ], "x-roblox-docs": { "category": "Luau execution", "methodProperties": { "scopes": ["universe.place.luau-execution-session:write"] }, "resource": { "$ref": "#/components/schemas/LuauExecutionSessionTaskBinaryInput", "name": "LuauExecutionSessionTaskBinaryInput" } } } }, "/cloud/v2/universes/{universe_id}/memory-store/queues/{queue_id}/items": { "post": { "tags": ["Cloud"], "summary": "Create Memory Store Queue Item", "description": "Creates a new queue item.\n\nIf `ttl` is set, the item will automatically be removed from the queue\nafter the time interval specified.\n\nIf a numerical `priority` is set, the item will be inserted into the queue\nbased on the priority value. The higher the value, the closer to the front\nof the queue the item will be. If priority values are the same then the\nitem will be inserted after existing values with the same priority.", "operationId": "Cloud_CreateMemoryStoreQueueItem", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "queue_id", "in": "path", "description": "The queue ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryStoreQueueItem" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryStoreQueueItem" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "memory-store.queue:add" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["memory-store.queue:add"] }, "resource": { "$ref": "#/components/schemas/MemoryStoreQueueItem", "name": "MemoryStoreQueueItem" } } } }, "/cloud/v2/universes/{universe_id}/memory-store/queues/{queue_id}/items:discard": { "post": { "tags": ["Cloud"], "summary": "Discard Memory Store Queue Items", "description": "Discards read items from the front of the queue.\n\nTakes a `readId` from a previous `Read` operation.", "operationId": "Cloud_DiscardMemoryStoreQueueItems", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "queue_id", "in": "path", "description": "The queue ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DiscardMemoryStoreQueueItemsRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": {} } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "memory-store.queue:discard" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["memory-store.queue:discard"] }, "resource": { "$ref": "#/components/schemas/MemoryStoreQueueItem", "name": "MemoryStoreQueueItem" } } } }, "/cloud/v2/universes/{universe_id}/memory-store/queues/{queue_id}/items:read": { "get": { "tags": ["Cloud"], "summary": "Read Memory Store Queue Items", "description": "Returns the specified number of items at the front of the queue.\n\n", "operationId": "Cloud_ReadMemoryStoreQueueItems", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "queue_id", "in": "path", "description": "The queue ID.", "required": true, "schema": { "type": "string" } }, { "name": "count", "in": "query", "description": "The number of items to read from the queue\nIf unspecified, 1 item will be returned.\nThe maximum value is 200; values above 200 will be coerced to 200.", "schema": { "type": "integer", "format": "int64" } }, { "name": "allOrNothing", "in": "query", "description": "If `all_or_nothing` is true and the requested number of objects is not\navailable, will return a 404 Error.\n\nOtherwise, will return the path and read_id of the read operation and a\nlist of the MemoryStoreQueue items.", "schema": { "example": true, "type": "boolean" } }, { "name": "invisibilityWindow", "in": "query", "description": "Invisibility window for items read, in seconds.\n\nItems read are invisible in subsequent reads during the invisibility\nwindow duration.\n\nIt must be written in seconds greater than 0 and end with `s`.\n\nDefaults to `30s`.", "schema": { "example": "3s", "type": "string", "format": "duration" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReadMemoryStoreQueueItemsResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "memory-store.queue:dequeue" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["memory-store.queue:dequeue"] }, "resource": { "$ref": "#/components/schemas/MemoryStoreQueueItem", "name": "MemoryStoreQueueItem" } } } }, "/cloud/v2/universes/{universe_id}/memory-store/sorted-maps/{sorted_map_id}/items": { "get": { "tags": ["Cloud"], "summary": "List Memory Store Sorted Map Items", "description": "Gets and returns items in the map with a given order and filter.", "operationId": "Cloud_ListMemoryStoreSortedMapItems", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "sorted_map_id", "in": "path", "description": "The sorted-map ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of memory store sorted map items to return. The service\nmight return fewer than this value. If unspecified, at most 1 memory store\nsorted map items are returned. The maximum value is 100 and higher values\nare set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 1 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "orderBy", "in": "query", "description": "If specified, results are ordered according to the specified fields.\n\nValues must be a comma-separated list of fields, with an optional,\nper-field \" desc\" suffix to sort by descending rather than ascending\nvalues. You can access subfields with a `.` operator.\n\nResults may be ordered by the following fields: id.\n\nExample: \"id desc\"\n", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nFiltering conforms to Common Expression Language (CEL). Only the `id`\nand `sortKey` fields are supported. In terms of operators, only `<`, `>`\nand `&&` are allowed'\n\nExample: `id > \"key-001\" && id < \"key-100\"`", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListMemoryStoreSortedMapItemsResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "memory-store.sorted-map:read" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["memory-store.sorted-map:read"] }, "resource": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem", "name": "MemoryStoreSortedMapItem" } } }, "post": { "tags": ["Cloud"], "summary": "Create Memory Store Sorted Map Item", "description": "Creates the specified map item if it doesn't exist.", "operationId": "Cloud_CreateMemoryStoreSortedMapItem", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "sorted_map_id", "in": "path", "description": "The sorted-map ID.", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "query", "description": "The ID to use for the memory store sorted map item, which will become the\nfinal component of the memory store sorted map item's resource path.\n\nThis value should be a 1-127 character string that supports alphanumeric\nand special characters. This id is case sensitive. The id must be url\nencoded if it contains any url breaking special characters.", "schema": { "type": "string" }, "examples": { "id": { "description": "a 1-127 character string that supports alphanumeric and special characters. This id is case sensitive. The id must be url encoded if it contains any url breaking special characters.", "value": "Hello!" } } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "memory-store.sorted-map:write" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["memory-store.sorted-map:write"] }, "resource": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem", "name": "MemoryStoreSortedMapItem" } } } }, "/cloud/v2/universes/{universe_id}/memory-store/sorted-maps/{sorted_map_id}/items/{item_id}": { "get": { "tags": ["Cloud"], "summary": "Get Memory Store Sorted Map Item", "description": "Gets and returns the value of the given key in the map.", "operationId": "Cloud_GetMemoryStoreSortedMapItem", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "sorted_map_id", "in": "path", "description": "The sorted-map ID.", "required": true, "schema": { "type": "string" } }, { "name": "item_id", "in": "path", "description": "The item ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "memory-store.sorted-map:read" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["memory-store.sorted-map:read"] }, "resource": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem", "name": "MemoryStoreSortedMapItem" } } }, "delete": { "tags": ["Cloud"], "summary": "Delete Memory Store Sorted Map Item", "description": "Deletes the specified item from the map.", "operationId": "Cloud_DeleteMemoryStoreSortedMapItem", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "sorted_map_id", "in": "path", "description": "The sorted-map ID.", "required": true, "schema": { "type": "string" } }, { "name": "item_id", "in": "path", "description": "The item ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": {} } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "memory-store.sorted-map:write" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["memory-store.sorted-map:write"] }, "resource": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem", "name": "MemoryStoreSortedMapItem" } } }, "patch": { "tags": ["Cloud"], "summary": "Update Memory Store Sorted Map Item", "description": "Updates the specified map item.", "operationId": "Cloud_UpdateMemoryStoreSortedMapItem", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "sorted_map_id", "in": "path", "description": "The sorted-map ID.", "required": true, "schema": { "type": "string" } }, { "name": "item_id", "in": "path", "description": "The item ID.", "required": true, "schema": { "type": "string" } }, { "name": "allowMissing", "in": "query", "description": "If set to true, and the memory store sorted map item is not found, a memory\nstore sorted map item is created.", "schema": { "example": true, "type": "boolean" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "memory-store.sorted-map:write" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["memory-store.sorted-map:write"] }, "resource": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem", "name": "MemoryStoreSortedMapItem" } } } }, "/cloud/v2/universes/{universe_id}/memory-store:flush": { "post": { "tags": ["Cloud"], "summary": "Flush Memory Store", "description": "Asynchronously flush all data structures in the universe.\n\nUnlike some other endpoints, the flush response `path` already\nincludes the `cloud/v2` prefix. Poll the operation at\n`https://apis.roblox.com/{path}` without adding another prefix.", "operationId": "Cloud_FlushMemoryStore", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope", "in": "query", "description": "The scope of the memory store to flush.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | LIVE | Flush the live memory store scope. This is the default. |\n | TEST | Flush the test memory store scope. |", "schema": { "example": "LIVE", "enum": ["LIVE", "TEST"], "type": "string", "format": "enum" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Operation" } } } } }, "x-long-running-operation-parameters": { "metadata": { "$ref": "#/components/schemas/FlushMemoryStoreMetadata" }, "response": { "$ref": "#/components/schemas/FlushMemoryStoreResponse" } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "memory-store:flush" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["memory-store:flush"] }, "resource": { "$ref": "#/components/schemas/MemoryStore", "name": "MemoryStore" } } } }, "/cloud/v2/universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{scope_id}/entries": { "get": { "tags": ["Cloud"], "summary": "List Ordered Data Store Entries", "description": "Returns a list of entries from an ordered data store.", "operationId": "Cloud_ListOrderedDataStoreEntries", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "ordered_data_store_id", "in": "path", "description": "The ordered-data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of ordered data store entries to return. The service\nmight return fewer than this value. If unspecified, at most 10 ordered data\nstore entries are returned. The maximum value is 100 and higher values are\nset to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "orderBy", "in": "query", "description": "If specified, results are ordered according to the specified fields.\n\nValues must be a comma-separated list of fields, with an optional,\nper-field \" desc\" suffix to sort by descending rather than ascending\nvalues. You can access subfields with a `.` operator.\n\nResults may be ordered by the following fields: value.\n\nExample: \"value desc\"\n", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nWe support two comparison operators for this operation: `<=` and `>=`.These\ncomparison operators act as a minValue and maxValue for the values\nreturned. If filtering is needed for a value between a minValue and\nmaxValue the user can use the logical operator `&&`. All tokens in the\nfilter expression must be separated by a single space.\n\nExample filters: `entry <= 10`; `entry >= 10 && entry <= 30`", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListOrderedDataStoreEntriesResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Ordered data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe.ordered-data-store.scope.entry:read" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe.ordered-data-store.scope.entry:read"] }, "resource": { "$ref": "#/components/schemas/OrderedDataStoreEntry", "name": "OrderedDataStoreEntry" } } }, "post": { "tags": ["Cloud"], "summary": "Create Ordered Data Store Entry", "description": "Creates an entry with the provided ID and value.\n\nReturns a 400 Bad Request if the entry exists.", "operationId": "Cloud_CreateOrderedDataStoreEntry", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "ordered_data_store_id", "in": "path", "description": "The ordered-data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "query", "description": "The ID to use for the ordered data store entry, which will become the final\ncomponent of the ordered data store entry's resource path.\n\nThis value should be A 1-63 character string. We strongly recommend using\nonly lowercase letters, numeric digits, and hyphens.", "schema": { "type": "string" }, "examples": { "id": { "description": "A 1-63 character string. We strongly recommend using only lowercase letters, numeric digits, and hyphens.", "value": "my-entry" } } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrderedDataStoreEntry" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrderedDataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Ordered data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe.ordered-data-store.scope.entry:write" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe.ordered-data-store.scope.entry:write"] }, "resource": { "$ref": "#/components/schemas/OrderedDataStoreEntry", "name": "OrderedDataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{scope_id}/entries/{entry_id}": { "get": { "tags": ["Cloud"], "summary": "Get Ordered Data Store Entry", "description": "Gets the specified entry.", "operationId": "Cloud_GetOrderedDataStoreEntry", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "ordered_data_store_id", "in": "path", "description": "The ordered-data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrderedDataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Ordered data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe.ordered-data-store.scope.entry:read" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe.ordered-data-store.scope.entry:read"] }, "resource": { "$ref": "#/components/schemas/OrderedDataStoreEntry", "name": "OrderedDataStoreEntry" } } }, "delete": { "tags": ["Cloud"], "summary": "Delete Ordered Data Store Entry", "description": "Deletes the specified entry.\n\nOn success, returns 200 OK. If the entry doesn't exist, returns\n404 Not Found.", "operationId": "Cloud_DeleteOrderedDataStoreEntry", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "ordered_data_store_id", "in": "path", "description": "The ordered-data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": {} } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Ordered data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe.ordered-data-store.scope.entry:write" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe.ordered-data-store.scope.entry:write"] }, "resource": { "$ref": "#/components/schemas/OrderedDataStoreEntry", "name": "OrderedDataStoreEntry" } } }, "patch": { "tags": ["Cloud"], "summary": "Update Ordered Data Store Entry", "description": "Updates the value of an entry.", "operationId": "Cloud_UpdateOrderedDataStoreEntry", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "ordered_data_store_id", "in": "path", "description": "The ordered-data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } }, { "name": "allowMissing", "in": "query", "description": "If set to true, and the ordered data store entry is not found, a ordered\ndata store entry is created.", "schema": { "example": true, "type": "boolean" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrderedDataStoreEntry" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrderedDataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Ordered data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe.ordered-data-store.scope.entry:write" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe.ordered-data-store.scope.entry:write"] }, "resource": { "$ref": "#/components/schemas/OrderedDataStoreEntry", "name": "OrderedDataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{scope_id}/entries/{entry_id}:increment": { "post": { "tags": ["Cloud"], "summary": "Increment Ordered Data Store Entry", "description": "Increments the value of the specified entry. Both the existing value and\nthe increment amount must be integers.\n\nIf the entry doesn't exist, creates an entry with the specified value.\n\nKnown issue: the value may be incremented past the valid range of values.\nWhen this happens, the returned value will be clamped to the valid range,\nbut the backend may persist the original value. This behavior is maintained\nfor backwards compatibility reasons, but may change in a future version of\nthis API.", "operationId": "Cloud_IncrementOrderedDataStoreEntry", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "ordered_data_store_id", "in": "path", "description": "The ordered-data-store ID.", "required": true, "schema": { "type": "string" } }, { "name": "scope_id", "in": "path", "description": "The scope ID.", "required": true, "schema": { "type": "string" } }, { "name": "entry_id", "in": "path", "description": "The entry ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncrementOrderedDataStoreEntryRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrderedDataStoreEntry" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Ordered data stores requests are subject to additional throttling limits described in the [Open Cloud guide for data stores](https://create.roblox.com/docs/cloud/guides/data-stores/throttling)." }, "x-roblox-scopes": [ { "name": "universe.ordered-data-store.scope.entry:write" } ], "x-roblox-docs": { "category": "Data and memory stores", "methodProperties": { "scopes": ["universe.ordered-data-store.scope.entry:write"] }, "resource": { "$ref": "#/components/schemas/OrderedDataStoreEntry", "name": "OrderedDataStoreEntry" } } } }, "/cloud/v2/universes/{universe_id}/places/{place_id}": { "get": { "tags": ["Cloud"], "summary": "Get Place", "description": "Gets the specified place.", "operationId": "Cloud_GetPlace", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Place" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": [] }, "resource": { "$ref": "#/components/schemas/Place", "name": "Place" } } }, "patch": { "tags": ["Cloud"], "summary": "Update Place", "description": "Updates the specified place. To avoid overwriting changes, this endpoint\nresponds with an HTTP 409 Conflict error if the place is open in an\nactive Team Create session.", "operationId": "Cloud_UpdatePlace", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "updateMask", "in": "query", "description": "The list of fields to update.", "schema": { "type": "string", "format": "field-mask" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Place" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Place" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe.place:write" } ], "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": ["universe.place:write"] }, "resource": { "$ref": "#/components/schemas/Place", "name": "Place" } } } }, "/cloud/v2/universes/{universe_id}/places/{place_id}/instances/{instance_id}": { "get": { "tags": ["Cloud"], "summary": "Get Instance", "description": "Gets an instance and its property data.\n\nThe maximum supported response data size is 500,000 bytes. If this limit is\nexceeded, the returned `Operation` will be completed with an error result\nthat has an error code of `422`.\n", "operationId": "Cloud_GetInstance", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "instance_id", "in": "path", "description": "The instance ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Operation" } } } } }, "x-long-running-operation-parameters": { "metadata": { "$ref": "#/components/schemas/GetInstanceMetadata" }, "response": { "$ref": "#/components/schemas/Instance" } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe.place.instance:read" } ], "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": ["universe.place.instance:read"] }, "resource": { "$ref": "#/components/schemas/Instance", "name": "Instance" } } }, "patch": { "tags": ["Cloud"], "summary": "Update Instance", "description": "Updates an instance's property data.\n\nWhen updating a `Script` instance's source property, the maximum supported\nproperty size is 200,000 bytes after UTF-8 encoding.", "operationId": "Cloud_UpdateInstance", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "instance_id", "in": "path", "description": "The instance ID.", "required": true, "schema": { "type": "string" } }, { "name": "updateMask", "in": "query", "description": "The list of fields to update.", "schema": { "type": "string", "format": "field-mask" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Instance" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Operation" } } } } }, "x-long-running-operation-parameters": { "metadata": { "$ref": "#/components/schemas/UpdateInstanceMetadata" }, "response": { "$ref": "#/components/schemas/Instance" } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe.place.instance:write" } ], "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": ["universe.place.instance:write"] }, "resource": { "$ref": "#/components/schemas/Instance", "name": "Instance" } } } }, "/cloud/v2/universes/{universe_id}/places/{place_id}/instances/{instance_id}:listChildren": { "get": { "tags": ["Cloud"], "summary": "List Instance Children", "description": "Lists an instance's children.\n\nThe maximum supported response data size is 500,000 bytes. If this limit is\nexceeded, the returned `Operation` will be completed with an error result\nthat has an error code of `422`.\n\n", "operationId": "Cloud_ListInstanceChildren", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "instance_id", "in": "path", "description": "The instance ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of child instance to return. The service may return\nfewer than this value. If unspecified, at most 200 children will be\nreturned. The maximum value is 200; values above 200 will be coerced to\n200.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 200, inclusive", "value": 100 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous `ListInstanceChildrenRequest` call.\nProvide this to retrieve the subsequent page.\n\nWhen paginating, all other parameters provided to\n`ListInstanceChildrenRequest` must match the call that provided the page\ntoken.", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Operation" } } } } }, "x-long-running-operation-parameters": { "metadata": { "$ref": "#/components/schemas/ListInstanceChildrenMetadata" }, "response": { "$ref": "#/components/schemas/ListInstanceChildrenResponse" } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe.place.instance:read" } ], "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": ["universe.place.instance:read"] }, "resource": { "$ref": "#/components/schemas/Instance", "name": "Instance" } } } }, "/cloud/v2/universes/{universe_id}/places/{place_id}/luau-execution-session-tasks": { "post": { "tags": ["Cloud"], "summary": "Create Luau Execution Session Task", "description": "Creates a task but does not wait for the task to complete.\n\nTo check whether a task has\ncompleted, call the `GetLuauExecutionSessionTask` method and inspect the\n`state` field of the returned resource.", "operationId": "Cloud_CreateLuauExecutionSessionTask__Using_Universes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LuauExecutionSessionTask" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LuauExecutionSessionTask" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe.place.luau-execution-session:write" } ], "x-roblox-docs": { "category": "Luau execution", "methodProperties": { "scopes": ["universe.place.luau-execution-session:write"] }, "resource": { "$ref": "#/components/schemas/LuauExecutionSessionTask", "name": "LuauExecutionSessionTask" } } } }, "/cloud/v2/universes/{universe_id}/places/{place_id}/user-restrictions": { "get": { "tags": ["Cloud"], "summary": "List User Restrictions", "description": "List user restrictions for users that have ever been banned in either a\nuniverse or a specific place.", "operationId": "Cloud_ListUserRestrictions__Using_Universes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of user restrictions to return. The service might return\nfewer than this value. If unspecified, at most 10 user restrictions are\nreturned. The maximum value is 100 and higher values are set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListUserRestrictionsResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "User Restrictions are subject to the additional rate limits, applied per universe\n\n* Get User Restriction: 50 req/s\n* List User Restrictions: 50 req/s\n* Update User Restrictions: 10 req/s\n* List User Restriction Logs: 50 req/s\n\nAdditionally, we impose the following rate limit for the same user within a universe:\n\n* Update User Restriction: 2 req/min\n\nFor example, Update User Restriction may not be called for user 123 more than twice every minute." }, "x-roblox-scopes": [ { "name": "universe.user-restriction:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["universe.user-restriction:read"] }, "resource": { "$ref": "#/components/schemas/UserRestriction", "name": "UserRestriction" } } } }, "/cloud/v2/universes/{universe_id}/places/{place_id}/user-restrictions/{user_restriction_id}": { "get": { "tags": ["Cloud"], "summary": "Get User Restriction", "description": "Get the user restriction.", "operationId": "Cloud_GetUserRestriction__Using_Universes_Places", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "user_restriction_id", "in": "path", "description": "The user-restriction ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserRestriction" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "User Restrictions are subject to the additional rate limits, applied per universe\n\n* Get User Restriction: 50 req/s\n* List User Restrictions: 50 req/s\n* Update User Restrictions: 10 req/s\n* List User Restriction Logs: 50 req/s\n\nAdditionally, we impose the following rate limit for the same user within a universe:\n\n* Update User Restriction: 2 req/min\n\nFor example, Update User Restriction may not be called for user 123 more than twice every minute." }, "x-roblox-scopes": [ { "name": "universe.user-restriction:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["universe.user-restriction:read"] }, "resource": { "$ref": "#/components/schemas/UserRestriction", "name": "UserRestriction" } } }, "patch": { "tags": ["Cloud"], "summary": "Update User Restriction", "description": "Update the user restriction.", "operationId": "Cloud_UpdateUserRestriction__Using_Universes_Places", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "user_restriction_id", "in": "path", "description": "The user-restriction ID.", "required": true, "schema": { "type": "string" } }, { "name": "updateMask", "in": "query", "description": "The list of fields to update.\n\nThe `game_join_restriction` field must be updated atomically; field masks\nthat index into `game_join_restriction` (such as\n`\"game_join_restriction.active\"`) are not supported.", "schema": { "type": "string", "format": "field-mask" } }, { "name": "idempotencyKey.key", "in": "query", "description": "The unique key to use for idempotency.", "schema": { "type": "string" } }, { "name": "idempotencyKey.firstSent", "in": "query", "description": "The timestamp at which the first request was sent.\n\nIf this is further in the past than the lifetime of the idempotency key\n(which *may* exceed the annotated minimum lifetime), the server *must*\nreturn an error.", "schema": { "example": "2023-07-05T12:34:56Z", "type": "string", "format": "date-time" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserRestriction" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserRestriction" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "User Restrictions are subject to the additional rate limits, applied per universe\n\n* Get User Restriction: 50 req/s\n* List User Restrictions: 50 req/s\n* Update User Restrictions: 10 req/s\n* List User Restriction Logs: 50 req/s\n\nAdditionally, we impose the following rate limit for the same user within a universe:\n\n* Update User Restriction: 2 req/min\n\nFor example, Update User Restriction may not be called for user 123 more than twice every minute." }, "x-roblox-scopes": [ { "name": "universe.user-restriction:write" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["universe.user-restriction:write"] }, "resource": { "$ref": "#/components/schemas/UserRestriction", "name": "UserRestriction" } } } }, "/cloud/v2/universes/{universe_id}/places/{place_id}/versions/{version_id}/luau-execution-session-tasks": { "post": { "tags": ["Cloud"], "summary": "Create Luau Execution Session Task", "description": "Creates a task but does not wait for the task to complete.\n\nTo check whether a task has\ncompleted, call the `GetLuauExecutionSessionTask` method and inspect the\n`state` field of the returned resource.", "operationId": "Cloud_CreateLuauExecutionSessionTask__Using_Universes_Places", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "version_id", "in": "path", "description": "The version ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LuauExecutionSessionTask" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LuauExecutionSessionTask" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe.place.luau-execution-session:write" } ], "x-roblox-docs": { "category": "Luau execution", "methodProperties": { "scopes": ["universe.place.luau-execution-session:write"] }, "resource": { "$ref": "#/components/schemas/LuauExecutionSessionTask", "name": "LuauExecutionSessionTask" } } } }, "/cloud/v2/universes/{universe_id}/places/{place_id}/versions/{version_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{task_id}": { "get": { "tags": ["Cloud"], "summary": "Get Luau Execution Session Task", "description": "Gets information about a task.", "operationId": "Cloud_GetLuauExecutionSessionTask", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "version_id", "in": "path", "description": "The version ID.", "required": true, "schema": { "type": "string" } }, { "name": "luau_execution_session_id", "in": "path", "description": "The luau-execution-session ID.", "required": true, "schema": { "type": "string" } }, { "name": "task_id", "in": "path", "description": "The task ID.", "required": true, "schema": { "type": "string" } }, { "name": "view", "in": "query", "description": "The view in which to retrieve the luau execution session task.\n\nSupports BASIC and FULL.\n\nDefaults to BASIC.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | VIEW_UNSPECIFIED | The luau execution session task view is not specified; the default will be used. |\n | BASIC | Excludes the `script` field. |\n | FULL | Includes all fields. |", "schema": { "example": "VIEW_UNSPECIFIED", "enum": ["VIEW_UNSPECIFIED", "BASIC", "FULL"], "type": "string", "format": "enum" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LuauExecutionSessionTask" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe.place.luau-execution-session:read" }, { "name": "universe.place.luau-execution-session:write" } ], "x-roblox-docs": { "category": "Luau execution", "methodProperties": { "scopes": [ "universe.place.luau-execution-session:read", "universe.place.luau-execution-session:write" ] }, "resource": { "$ref": "#/components/schemas/LuauExecutionSessionTask", "name": "LuauExecutionSessionTask" } } } }, "/cloud/v2/universes/{universe_id}/places/{place_id}/versions/{version_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{task_id}/logs": { "get": { "tags": ["Cloud"], "summary": "List Luau Execution Session Task Logs", "description": "Lists log chunks generated by a `LuauExecutionSessionTask`.", "operationId": "Cloud_ListLuauExecutionSessionTaskLogs", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "place_id", "in": "path", "description": "The place ID.", "required": true, "schema": { "type": "string" } }, { "name": "version_id", "in": "path", "description": "The version ID.", "required": true, "schema": { "type": "string" } }, { "name": "luau_execution_session_id", "in": "path", "description": "The luau-execution-session ID.", "required": true, "schema": { "type": "string" } }, { "name": "task_id", "in": "path", "description": "The task ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of luau execution session task logs to return. The\nservice might return fewer than this value. If unspecified, at most 10000\nluau execution session task logs are returned. The maximum value is 10000\nand higher values are set to 10000.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 10000, inclusive", "value": 10000 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "view", "in": "query", "description": "The view in which to retrieve the luau execution session task log.\n\nSupports FLAT and STRUCTURED.\n\nDefaults to FLAT.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | VIEW_UNSPECIFIED | The luau execution session task log view is not specified; the default will be used. |\n | FLAT | If this view is selected, the `messages` field will be populated (and the `structuredMessages` field will not). Each entry of the `messages` array contains only the log message, without additional medata. This is the default. |\n | STRUCTURED | If this view is selected, the `structuredMessages` field will be populated (and the `messages` field will not). Each entry of the `structuredMessages` array contains the log message plus additional metadata (see `LogMessage` for details). |", "schema": { "example": "VIEW_UNSPECIFIED", "enum": ["VIEW_UNSPECIFIED", "FLAT", "STRUCTURED"], "type": "string", "format": "enum" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListLuauExecutionSessionTaskLogsResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe.place.luau-execution-session:read" }, { "name": "universe.place.luau-execution-session:write" } ], "x-roblox-docs": { "category": "Luau execution", "methodProperties": { "scopes": [ "universe.place.luau-execution-session:read", "universe.place.luau-execution-session:write" ] }, "resource": { "$ref": "#/components/schemas/LuauExecutionSessionTaskLog", "name": "LuauExecutionSessionTaskLog" } } } }, "/cloud/v2/universes/{universe_id}/subscription-products/{subscription_product_id}/subscriptions/{subscription_id}": { "get": { "tags": ["Cloud"], "summary": "Get Subscription", "description": "Get the subscription.\n\nThe `universe.subscription-product.subscription:read` scope only allows\nreading subscriptions of the user making the request. Because of this, the\nsubscription ID must match the user ID of the user making the request. Note\nthat this scope might be more relevant for OAuth 2.0 apps.\n\nTo read all subscriptions made by users for a particular universe, use the\n`universe:write` scope instead.", "operationId": "Cloud_GetSubscription", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "subscription_product_id", "in": "path", "description": "The subscription-product ID.", "required": true, "schema": { "type": "string" } }, { "name": "subscription_id", "in": "path", "description": "The subscription ID.", "required": true, "schema": { "type": "string" } }, { "name": "view", "in": "query", "description": "The view in which to retrieve the subscription.\n\nSupports BASIC and FULL.\n\nDefaults to BASIC.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | VIEW_UNSPECIFIED | The subscription view is not specified; the default will be used. |\n | BASIC | Includes only the `active` and `renewing` fields. |\n | FULL | Includes all fields. |", "schema": { "example": "VIEW_UNSPECIFIED", "enum": ["VIEW_UNSPECIFIED", "BASIC", "FULL"], "type": "string", "format": "enum" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Subscription" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe:write" }, { "name": "universe.subscription-product.subscription:read" } ], "x-roblox-docs": { "category": "Monetization", "methodProperties": { "scopes": [ "universe:write", "universe.subscription-product.subscription:read" ] }, "resource": { "$ref": "#/components/schemas/Subscription", "name": "Subscription" } } } }, "/cloud/v2/universes/{universe_id}/user-restrictions": { "get": { "tags": ["Cloud"], "summary": "List User Restrictions", "description": "List user restrictions for users that have ever been banned in either a\nuniverse or a specific place.", "operationId": "Cloud_ListUserRestrictions", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of user restrictions to return. The service might return\nfewer than this value. If unspecified, at most 10 user restrictions are\nreturned. The maximum value is 100 and higher values are set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListUserRestrictionsResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "User Restrictions are subject to the additional rate limits, applied per universe\n\n* Get User Restriction: 50 req/s\n* List User Restrictions: 50 req/s\n* Update User Restrictions: 10 req/s\n* List User Restriction Logs: 50 req/s\n\nAdditionally, we impose the following rate limit for the same user within a universe:\n\n* Update User Restriction: 2 req/min\n\nFor example, Update User Restriction may not be called for user 123 more than twice every minute." }, "x-roblox-scopes": [ { "name": "universe.user-restriction:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["universe.user-restriction:read"] }, "resource": { "$ref": "#/components/schemas/UserRestriction", "name": "UserRestriction" } } } }, "/cloud/v2/universes/{universe_id}/user-restrictions/{user_restriction_id}": { "get": { "tags": ["Cloud"], "summary": "Get User Restriction", "description": "Get the user restriction.", "operationId": "Cloud_GetUserRestriction__Using_Universes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "user_restriction_id", "in": "path", "description": "The user-restriction ID.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserRestriction" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "User Restrictions are subject to the additional rate limits, applied per universe\n\n* Get User Restriction: 50 req/s\n* List User Restrictions: 50 req/s\n* Update User Restrictions: 10 req/s\n* List User Restriction Logs: 50 req/s\n\nAdditionally, we impose the following rate limit for the same user within a universe:\n\n* Update User Restriction: 2 req/min\n\nFor example, Update User Restriction may not be called for user 123 more than twice every minute." }, "x-roblox-scopes": [ { "name": "universe.user-restriction:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["universe.user-restriction:read"] }, "resource": { "$ref": "#/components/schemas/UserRestriction", "name": "UserRestriction" } } }, "patch": { "tags": ["Cloud"], "summary": "Update User Restriction", "description": "Update the user restriction.", "operationId": "Cloud_UpdateUserRestriction__Using_Universes", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "user_restriction_id", "in": "path", "description": "The user-restriction ID.", "required": true, "schema": { "type": "string" } }, { "name": "updateMask", "in": "query", "description": "The list of fields to update.\n\nThe `game_join_restriction` field must be updated atomically; field masks\nthat index into `game_join_restriction` (such as\n`\"game_join_restriction.active\"`) are not supported.", "schema": { "type": "string", "format": "field-mask" } }, { "name": "idempotencyKey.key", "in": "query", "description": "The unique key to use for idempotency.", "schema": { "type": "string" } }, { "name": "idempotencyKey.firstSent", "in": "query", "description": "The timestamp at which the first request was sent.\n\nIf this is further in the past than the lifetime of the idempotency key\n(which *may* exceed the annotated minimum lifetime), the server *must*\nreturn an error.", "schema": { "example": "2023-07-05T12:34:56Z", "type": "string", "format": "date-time" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserRestriction" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserRestriction" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "User Restrictions are subject to the additional rate limits, applied per universe\n\n* Get User Restriction: 50 req/s\n* List User Restrictions: 50 req/s\n* Update User Restrictions: 10 req/s\n* List User Restriction Logs: 50 req/s\n\nAdditionally, we impose the following rate limit for the same user within a universe:\n\n* Update User Restriction: 2 req/min\n\nFor example, Update User Restriction may not be called for user 123 more than twice every minute." }, "x-roblox-scopes": [ { "name": "universe.user-restriction:write" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["universe.user-restriction:write"] }, "resource": { "$ref": "#/components/schemas/UserRestriction", "name": "UserRestriction" } } } }, "/cloud/v2/universes/{universe_id}/user-restrictions:listLogs": { "get": { "tags": ["Cloud"], "summary": "List User Restriction Logs", "description": "List changes to UserRestriction resources within a given universe.\nThis includes both universe-level and place-level restrictions.\n\nFor universe-level restriction logs, the `place` field will be empty.", "operationId": "Cloud_ListUserRestrictionLogs", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of UserRestrictionLogs to return. The service may return\nfewer than this value. If unspecified, at most 10 UserRestrictionLogs are\nreturned. The maximum value is 100 and higher values are set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set to filter the logs returned.\n\nThe `filter` field supports a very small number of CEL:\n\n* `user`\n* `place`\n* The `==` comparison operator is available.\n* The `&&` logical operator is also supported.\n\nAs an example, filtering for a user and a place takes the form\n`filter=\"user == 'users/123'\" && \"place == 'places/456'\"`", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListUserRestrictionLogsResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "User Restrictions are subject to the additional rate limits, applied per universe\n\n* Get User Restriction: 50 req/s\n* List User Restrictions: 50 req/s\n* Update User Restrictions: 10 req/s\n* List User Restriction Logs: 50 req/s\n\nAdditionally, we impose the following rate limit for the same user within a universe:\n\n* Update User Restriction: 2 req/min\n\nFor example, Update User Restriction may not be called for user 123 more than twice every minute." }, "x-roblox-scopes": [ { "name": "universe.user-restriction:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["universe.user-restriction:read"] }, "resource": { "$ref": "#/components/schemas/UserRestriction", "name": "UserRestriction" } } } }, "/cloud/v2/universes/{universe_id}:generateSpeechAsset": { "post": { "tags": ["Cloud"], "summary": "Generate Speech Asset", "description": "Generates an English speech audio asset from the specified text.\n\nThis endpoint requires the `asset:read` and `asset:write` scopes in\naddition to the `universe:write` scope.\n\nThe response returns an `Operation` object that must be prefixed with\n`/assets/v1`. For example, the URL to discover the result of the operation\ncould be\n`https://apis.roblox.com/assets/v1/operations/8b42ef30-9c17-4526-b8cf-2ff0136ca94d`.", "operationId": "Cloud_GenerateSpeechAsset", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateSpeechAssetRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Operation" } } } } }, "x-long-running-operation-parameters": { "metadata": { "$ref": "#/components/schemas/GenerateSpeechAssetMetadata" }, "response": { "$ref": "#/components/schemas/GenerateSpeechAssetResponse" } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe:write" }, { "name": "asset:read" }, { "name": "asset:write" } ], "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": ["universe:write", "asset:read", "asset:write"] }, "resource": { "$ref": "#/components/schemas/Universe", "name": "Universe" } } } }, "/cloud/v2/universes/{universe_id}:publishMessage": { "post": { "tags": ["Cloud"], "summary": "Publish Universe Message", "description": "Publishes a message to the universe's live servers.\n\nServers can consume messages via\n[MessagingService](https://create.roblox.com/docs/reference/engine/classes/MessagingService).", "operationId": "Cloud_PublishUniverseMessage", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublishUniverseMessageRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": {} } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Messaging Service requests are subject to additional throttling limits described in the [Open Cloud guide for Messaging Service](https://create.roblox.com/docs/cloud/guides/usage-messaging#limits)." }, "x-roblox-scopes": [ { "name": "universe-messaging-service:publish" } ], "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": ["universe-messaging-service:publish"] }, "resource": { "$ref": "#/components/schemas/Universe", "name": "Universe" } } } }, "/cloud/v2/universes/{universe_id}:restartServers": { "post": { "tags": ["Cloud"], "summary": "Restart Universe Servers", "description": "Restarts active servers for a specific universe. Defaults to only\nrestarting servers running older versions, but can be configured to restart\nall servers regardless of version. Used for releasing experience updates.", "operationId": "Cloud_RestartUniverseServers", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestartUniverseServersRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestartUniverseServersResponse" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "universe:write" } ], "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": ["universe:write"] }, "resource": { "$ref": "#/components/schemas/Universe", "name": "Universe" } } } }, "/cloud/v2/universes/{universe_id}:translateText": { "post": { "tags": ["Cloud"], "summary": "Translate Text", "description": "Translates the provided text from one language to another.", "operationId": "Cloud_TranslateText", "parameters": [ { "name": "universe_id", "in": "path", "description": "The universe ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TranslateTextRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TranslateTextResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-rate-limits": { "description": "Text translation requests are subject to additional rate limits [documented here](https://create.roblox.com/docs/production/localization/auto-translate-dynamic-content#limits)." }, "x-roblox-scopes": [ { "name": "universe:write" } ], "x-roblox-docs": { "category": "Universes and places", "methodProperties": { "scopes": ["universe:write"] }, "resource": { "$ref": "#/components/schemas/Universe", "name": "Universe" } } } }, "/cloud/v2/users/{user_id}/asset-quotas": { "get": { "tags": ["Cloud"], "summary": "List Asset Quotas", "description": "Returns a list of asset quotas.", "operationId": "Cloud_ListAssetQuotas", "parameters": [ { "name": "user_id", "in": "path", "description": "The user ID.", "required": true, "schema": { "type": "string" } }, { "name": "maxPageSize", "in": "query", "description": "The maximum number of asset quotas to return. The service might return\nfewer than this value. If unspecified, at most 10 asset quotas are\nreturned. The maximum value is 100 and higher values are set to 100.", "schema": { "type": "integer", "format": "int32" }, "examples": { "maxPageSize": { "description": "An integer between 1 and 100, inclusive", "value": 10 } } }, { "name": "pageToken", "in": "query", "description": "A page token, received from a previous call, to retrieve a subsequent page.\n\nWhen paginating, all other parameters provided to the subsequent call must\nmatch the call that provided the page token.", "schema": { "type": "string" } }, { "name": "filter", "in": "query", "description": "This field may be set in order to filter the resources returned.\n\nSupports the following subset of CEL:\n* Only the `quotaType` and `assetType` fields are supported.\n* Only the `==` and `&&` operator are supported.\n\nFor example:\n `quotaType == RateLimitUpload && assetType == Audio`", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListAssetQuotasResponse" } } } } }, "x-visibility": "BETA", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "asset:read" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["asset:read"] }, "resource": { "$ref": "#/components/schemas/AssetQuota", "name": "AssetQuota" } } } }, "/cloud/v2/users/{user_id}/notifications": { "post": { "tags": ["Cloud"], "summary": "Create User Notification", "description": "Sends a notification to a user.", "operationId": "Cloud_CreateUserNotification", "parameters": [ { "name": "user_id", "in": "path", "description": "The user ID.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserNotification" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserNotification" } } } } }, "x-visibility": "STABLE", "x-roblox-engine-usability": { "apiKeyWithHttpService": false }, "x-roblox-scopes": [ { "name": "user.user-notification:write" } ], "x-roblox-docs": { "category": "Users and groups", "methodProperties": { "scopes": ["user.user-notification:write"] }, "resource": { "$ref": "#/components/schemas/UserNotification", "name": "UserNotification" } } } } }, "components": { "schemas": { "AcceptGroupJoinRequestRequest": { "type": "object", "properties": {}, "description": "A join request ID." }, "AssetQuota": { "type": "object", "properties": { "path": { "example": "users/123/asset-quotas/some-asset-quota", "type": "string", "description": "The resource path of the asset quota.\n\nFormat: `users/{user_id}/asset-quotas/{asset_quota_id}`" }, "quotaType": { "example": "QUOTA_TYPE_UNSPECIFIED", "enum": [ "QUOTA_TYPE_UNSPECIFIED", "RATE_LIMIT_UPLOAD", "RATE_LIMIT_CREATOR_STORE_DISTRIBUTE" ], "type": "string", "description": "Type of quota.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | QUOTA_TYPE_UNSPECIFIED | The default quota type. |\n | RATE_LIMIT_UPLOAD | Rate limit on how often one can upload an asset. |\n | RATE_LIMIT_CREATOR_STORE_DISTRIBUTE | Rate limit on how often one can distribute an asset on the Creator Store. |", "format": "enum" }, "assetType": { "example": "ASSET_TYPE_UNSPECIFIED", "enum": [ "ASSET_TYPE_UNSPECIFIED", "IMAGE", "TSHIRT", "AUDIO", "MESH", "LUA", "HAT", "PLACE", "MODEL", "SHIRT", "PANTS", "DECAL", "HEAD", "FACE", "GEAR", "ANIMATION", "TORSO", "RIGHT_ARM", "LEFT_ARM", "LEFT_LEG", "RIGHT_LEG", "YOUTUBE_VIDEO", "APP", "CODE", "PLUGIN", "SOLID_MODEL", "MESH_PART", "HAIR_ACCESSORY", "FACE_ACCESSORY", "NECK_ACCESSORY", "SHOULDER_ACCESSORY", "FRONT_ACCESSORY", "BACK_ACCESSORY", "WAIST_ACCESSORY", "CLIMB_ANIMATION", "DEATH_ANIMATION", "FALL_ANIMATION", "IDLE_ANIMATION", "JUMP_ANIMATION", "RUN_ANIMATION", "SWIM_ANIMATION", "WALK_ANIMATION", "POSE_ANIMATION", "LOCALIZATION_TABLE_MANIFEST", "LOCALIZATION_TABLE_TRANSLATION", "EMOTE_ANIMATION", "VIDEO", "TEXTURE_PACK", "TSHIRT_ACCESSORY", "SHIRT_ACCESSORY", "PANTS_ACCESSORY", "JACKET_ACCESSORY", "SWEATER_ACCESSORY", "SHORTS_ACCESSORY", "LEFT_SHOE_ACCESSORY", "RIGHT_SHOE_ACCESSORY", "DRESS_SKIRT_ACCESSORY", "FONT_FAMILY", "FONT_FACE", "MESH_HIDDEN_SURFACE_REMOVAL", "EYEBROW_ACCESSORY", "EYELASH_ACCESSORY", "MOOD_ANIMATION", "DYNAMIC_HEAD", "CODE_SNIPPET", "ADS_VIDEO" ], "type": "string", "description": "The asset type the quota is for.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | ASSET_TYPE_UNSPECIFIED | The default asset type. |\n | IMAGE | Image |\n | TSHIRT | Tshirt |\n | AUDIO | Audio |\n | MESH | Mesh |\n | LUA | Lua |\n | HAT | Hat |\n | PLACE | Place |\n | MODEL | Model |\n | SHIRT | Classic Shirt |\n | PANTS | Classic Pants |\n | DECAL | Decal |\n | HEAD | Head |\n | FACE | Face |\n | GEAR | Gear |\n | ANIMATION | Animation |\n | TORSO | Torso |\n | RIGHT_ARM | Right Arm |\n | LEFT_ARM | Left Arm |\n | LEFT_LEG | Left Leg |\n | RIGHT_LEG | Right Leg |\n | YOUTUBE_VIDEO | YouTube Video |\n | APP | App |\n | CODE | Code |\n | PLUGIN | Plugin |\n | SOLID_MODEL | Solid Model |\n | MESH_PART | Mesh Part |\n | HAIR_ACCESSORY | Hair Accessory |\n | FACE_ACCESSORY | Face Accessory |\n | NECK_ACCESSORY | Neck Accessory |\n | SHOULDER_ACCESSORY | Shoulder Accessory |\n | FRONT_ACCESSORY | Front Accessory |\n | BACK_ACCESSORY | Back Accessory |\n | WAIST_ACCESSORY | Waist Accessory |\n | CLIMB_ANIMATION | Climb Animation |\n | DEATH_ANIMATION | Death Animation |\n | FALL_ANIMATION | Fall Animation |\n | IDLE_ANIMATION | Idle Animation |\n | JUMP_ANIMATION | Jump Animation |\n | RUN_ANIMATION | Run Animation |\n | SWIM_ANIMATION | Swim Animation |\n | WALK_ANIMATION | Walk Animation |\n | POSE_ANIMATION | Pose Animation |\n | LOCALIZATION_TABLE_MANIFEST | Localization Table Manifest |\n | LOCALIZATION_TABLE_TRANSLATION | Localization Table Translation |\n | EMOTE_ANIMATION | Emote Animation |\n | VIDEO | Video |\n | TEXTURE_PACK | Texture Pack |\n | TSHIRT_ACCESSORY | Tshirt Accessory |\n | SHIRT_ACCESSORY | Shirt Accessory |\n | PANTS_ACCESSORY | Pants Accessory |\n | JACKET_ACCESSORY | Jacket Accessory |\n | SWEATER_ACCESSORY | Sweater Accessory |\n | SHORTS_ACCESSORY | Shorts Accessory |\n | LEFT_SHOE_ACCESSORY | Left Shoe Accessory |\n | RIGHT_SHOE_ACCESSORY | Right Shoe Accessory |\n | DRESS_SKIRT_ACCESSORY | Dress Skirt Accessory |\n | FONT_FAMILY | Font Family |\n | FONT_FACE | Font Face |\n | MESH_HIDDEN_SURFACE_REMOVAL | Mesh Hidden Surface Removal |\n | EYEBROW_ACCESSORY | Eyebrow Accessory |\n | EYELASH_ACCESSORY | Eyelash Accessory |\n | MOOD_ANIMATION | Mood Animation |\n | DYNAMIC_HEAD | Dynamic Head |\n | CODE_SNIPPET | Code Snippet |\n | ADS_VIDEO | Ads Video |", "format": "enum" }, "usage": { "type": "integer", "description": "The current usage of the quota.", "format": "int64" }, "capacity": { "type": "integer", "description": "The capacity of the quota.", "format": "int64" }, "period": { "example": "PERIOD_UNSPECIFIED", "enum": ["PERIOD_UNSPECIFIED", "MONTH", "DAY"], "type": "string", "description": "The period of time the quota is for.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | PERIOD_UNSPECIFIED | The default period, which is invalid. Specify another value. |\n | MONTH | Month |\n | DAY | Day |", "format": "enum" }, "usageResetTime": { "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The time the usage will reset for this quota.", "format": "date-time" } }, "description": "Represents a quota for an asset-related action.\n\nFor example, a user might be able to upload 100 audio files per month and\nhave uploaded 15 already. In this example:\n- `quotaType` is `RATE_LIMIT_UPLOAD`\n- `assetType` is `AUDIO`\n- `usage` is `15`\n- `capacity` is `100`\n- `period` is `MONTH`\n`usageResetTime` indicates when a new period begins and usage resets to 0.\nThis value **doesn't** necessarily correlate with the first day of a\ncalendar month or midnight on a given day. For more information on the\nupload process, see the\n[usage\nguide](https://create.roblox.com/docs/en-us/cloud/open-cloud/usage-assets).", "x-aep-resource": { "patterns": ["users/{user_id}/asset-quotas/{asset_quota_id}"], "plural": "asset-quotas", "singular": "asset-quota" }, "x-resource": true }, "AssignRoleGroupMembershipRequest": { "required": ["role"], "type": "object", "properties": { "role": { "example": "groups/123/roles/456", "type": "string", "description": "The resource path of the role to assign.\n\nFormat: `groups/{group_id}/roles/{group_role_id}`" } }, "description": "Assigns a role to the specified group membership." }, "ContentMessage": { "type": "object", "properties": { "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the message was created.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the message was last updated.", "format": "date-time" }, "plainText": { "type": "string", "description": "The plain text content of the message." }, "author": { "readOnly": true, "example": "users/156", "type": "string", "description": "The resource path of the user who created the message." }, "messageReaction": { "readOnly": true, "type": "array", "items": { "$ref": "#/components/schemas/MessageReaction" }, "description": "The reactions to the message, if this feature is enabled for this message." } }, "description": "Represents the content of a message.", "x-oneOf": { "Author": ["author"], "content": ["plainText"] } }, "CreatorStoreProduct": { "type": "object", "properties": { "path": { "example": "creator-store-products/123", "type": "string", "description": "The resource path of the creator store product.\n\nFormat: `creator-store-products/{creator_store_product_id}`" }, "basePrice": { "$ref": "#/components/schemas/Money", "description": "The base price of the product. For more information, see\n[Money](/cloud/reference/types.md#money). Each product type (such as\n`pluginAssetId`) supports a set of specific prices. Currently, only setting\na base price in USD is supported.\n\nDepending on type, each Creator Store product has a fixed set of supported\nprices; see the `productType` attribute for the full list. For example, to\nset the price of a plugin to $4.99, use the following base price:\n```\n\"basePrice\": {\n \"currencyCode\": \"USD\",\n \"quantity\": {\n \"significand\": 4990000000,\n \"exponent\": -9\n }\n}\n```\n\nNote: The exponent **must** be -9, and the significand must be in this\nformat. The corresponding [Decimal](/cloud/reference/types.md#decimal)\nformat is `significand * 10^exponent`.\n\nIf you want to set the price of a plugin to $0 (i.e. free), use the\nfollowing `base_price`\n\n```\n\"basePrice\": {\n \"currencyCode\": \"USD\",\n \"quantity\": {\n \"significand\": 0,\n \"exponent\": 0\n }\n}\n```\n\nNote: You must still set the `currencyCode` to USD, even for\nfree products.\n\nThe actual purchase price is based on this base price, but often differs\nslightly due to locale-specific considerations.\n\nSet this to zero to make the product free." }, "purchasePrice": { "$ref": "#/components/schemas/Money", "description": "The effective purchase price for the user, after factoring in\nlocale-specific considerations." }, "published": { "example": true, "type": "boolean", "description": "Whether the seller intends to distribute the Creator Store product on\nthe Creator Store. A seller might intend to distribute a product, but due\nto some restrictions on the seller or underlying Creator Store product, the\nproduct may not be available for purchase. See\n`restrictions` and `purchasable` for more details." }, "restrictions": { "readOnly": true, "type": "array", "items": { "example": "RESTRICTION_UNSPECIFIED", "enum": [ "RESTRICTION_UNSPECIFIED", "SOLD_ITEM_RESTRICTED", "SELLER_TEMPORARILY_RESTRICTED", "SELLER_PERMANENTLY_RESTRICTED", "SELLER_NO_LONGER_ACTIVE" ], "type": "string", "format": "enum" }, "description": "Restrictions applied to the product. A product can have multiple\nrestrictions active at one time.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | RESTRICTION_UNSPECIFIED | Unspecified restriction. |\n | SOLD_ITEM_RESTRICTED | The item being sold has been restricted by Roblox Details may be available by looking up that item directly. |\n | SELLER_TEMPORARILY_RESTRICTED | The product is restricted because the seller's account is temporarily restricted by Roblox. |\n | SELLER_PERMANENTLY_RESTRICTED | The product is restricted because the seller's account is permanently restricted by Roblox. |\n | SELLER_NO_LONGER_ACTIVE | The product is restricted because the seller's account was deleted or is otherwise no longer active. |" }, "purchasable": { "readOnly": true, "example": true, "type": "boolean", "description": "Whether the product is purchasable.\n\nFor this value to be true, `published` must be true and `restrictions` must\nbe empty. If this value is false, the product may not be acquired by any\nuser." }, "userSeller": { "readOnly": true, "type": "string", "description": "The Roblox user selling the product." }, "groupSeller": { "readOnly": true, "type": "string", "description": "The Roblox group selling the product." }, "modelAssetId": { "type": "string", "description": "The Creator Store product is a model with this asset ID.", "x-immutable": true }, "pluginAssetId": { "type": "string", "description": "The Creator Store product is a plugin with this asset ID.\n\nSupported base prices in USD: $0, $4.99, $5.99, $6.99, $7.99, $8.99,\n$9.99, $10.99, $11.99, $12.99, $13.99, $14.99, $15.99, $16.99, $17.99,\n$18.99, $19.99, $24.99, $29.99, $34.99, $39.99, $44.99, $49.99, $59.99,\n$69.99, $79.99, $89.99, $99.99, $149.99, $199.99, $249.99", "x-immutable": true }, "audioAssetId": { "type": "string", "description": "The Creator Store product is an audio file with this asset ID.", "x-immutable": true }, "decalAssetId": { "type": "string", "description": "The Creator Store product is a decal with this asset ID.", "x-immutable": true }, "meshPartAssetId": { "type": "string", "description": "The Creator Store product is a mesh part with this asset ID.", "x-immutable": true }, "videoAssetId": { "type": "string", "description": "The Creator Store product is a video with this asset ID.", "x-immutable": true }, "fontFamilyAssetId": { "type": "string", "description": "The Creator Store product is a font family with this asset ID.", "x-immutable": true } }, "description": "Represents a product in the Creator Store. This resource is used to manage\ndistribution and pricing of assets on the Creator Store.", "x-aep-resource": { "patterns": ["creator-store-products/{creator_store_product_id}"], "plural": "creator-store-products", "singular": "creator-store-product" }, "x-resource": true, "x-oneOf": { "productType": [ "modelAssetId", "pluginAssetId", "audioAssetId", "decalAssetId", "meshPartAssetId", "videoAssetId", "fontFamilyAssetId" ], "seller": ["userSeller", "groupSeller"] } }, "DataStore": { "type": "object", "properties": { "path": { "example": "universes/123/data-stores/some-data-store", "type": "string", "description": "The resource path of the data store.\n\nFormat: `universes/{universe_id}/data-stores/{data_store_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the data store was created.", "format": "date-time" }, "expireTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the data store will expire (or did expire).\n\nThis field is set when the data store is soft-deleted and indicates\nwhen it will be permanently removed.", "format": "date-time" }, "state": { "readOnly": true, "example": "STATE_UNSPECIFIED", "enum": ["STATE_UNSPECIFIED", "ACTIVE", "DELETED"], "type": "string", "description": "The state of the data store.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | STATE_UNSPECIFIED | The default value. This value is used if the state is omitted. |\n | ACTIVE | The data store is active. |\n | DELETED | The data store is deleted. After the expiration time passes, it will be permanently deleted. |", "format": "enum" }, "id": { "readOnly": true, "type": "string", "description": "The ID of the data store. Matches the last segment of the path." } }, "description": "Represents a data store.", "x-aep-resource": { "patterns": ["universes/{universe_id}/data-stores/{data_store_id}"], "plural": "data-stores", "singular": "data-store" }, "x-resource": true }, "DataStoreEntry": { "type": "object", "properties": { "path": { "example": "universes/123/data-stores/some-data-store/entries/some-data-store-entry", "type": "string", "description": "The resource path of the data store entry.\n\nFormats:\n* `universes/{universe_id}/data-stores/{data_store_id}/entries/{data_store_entry_id}`\n* `universes/{universe_id}/data-stores/{data_store_id}/scopes/{data_store_scope_id}/entries/{data_store_entry_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the data store entry was created.", "format": "date-time" }, "revisionId": { "readOnly": true, "type": "string", "description": "The revision ID of the data store entry.\n\nA new revision is committed whenever the data store entry is changed in any\nway.\n\nThe format is an arbitrary string.\nExample: \"foo\"", "x-immutable": true }, "revisionCreateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the revision was created.", "format": "date-time" }, "state": { "readOnly": true, "example": "STATE_UNSPECIFIED", "enum": ["STATE_UNSPECIFIED", "ACTIVE", "DELETED"], "type": "string", "description": "The state of the data store entry.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | STATE_UNSPECIFIED | The default value. This value is used if the state is omitted. |\n | ACTIVE | The data store entry is active. The default state of a newly created data store entry. |\n | DELETED | The data store entry is deleted. At some point in the future, it will be permanently deleted. |", "format": "enum" }, "etag": { "type": "string", "description": "This checksum is computed by the server based on the value of other\nfields, and may be sent on update and delete requests (and potentially\non certain custom methods) to ensure the client has an up-to-date\nvalue before proceeding." }, "value": { "$ref": "#/components/schemas/GoogleProtobufValue", "description": "The value of the entry.\n\nWhen a stored value contains a non-finite Luau number that JSON can't\nrepresent, Open Cloud responses replace the number with a tagged JSON\nobject:\n\n* Positive infinity: `{\"m\": null, \"t\": \"numeric\", \"v\": \"inf\"}`\n* Negative infinity: `{\"m\": null, \"t\": \"numeric\", \"v\": \"-inf\"}`\n* NaN: `{\"m\": null, \"t\": \"numeric\", \"v\": \"nan\"}`" }, "id": { "readOnly": true, "type": "string", "description": "The resource ID of the entry.\n\nThis matches the last segment of the resource path, and is provided\nonly for convenience." }, "users": { "example": "users/123", "type": "array", "items": { "type": "string" }, "description": "Users associated with the entry.\n\nEach value must be a user resource path in the format `users/{user_id}`,\nnot a bare user ID." }, "attributes": { "type": "object", "description": "An arbitrary set of attributes associated with the entry." } }, "description": "A key-value entry in a data store.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/data-stores/{data_store_id}/entries/{data_store_entry_id}", "universes/{universe_id}/data-stores/{data_store_id}/scopes/{data_store_scope_id}/entries/{data_store_entry_id}" ], "plural": "data-store-entries", "singular": "data-store-entry" }, "x-resource": true }, "Decimal": { "type": "object", "properties": { "significand": { "type": "integer", "description": "The significant digits of the number.", "format": "int64" }, "exponent": { "type": "integer", "description": "Represents the position of the decimal point within the significand.\n\nWhen the exponent is 0, the value of the Decimal is simply the value of\n`significand`.\n\nWhen the exponent is greater than 0, represents the number of trailing\nzeroes after the significant digits.\n\nWhen the exponent is less than 0, represents how many of the significant\ndigits (and implicit leading zeroes, as needed) come after the decmial\npoint.", "format": "int32" } }, "description": "Represents a decimal number in a form similar to scientific notation.\n\nExamples:\n - 17 === `{significand: 17 exponent: 0} (or just {significand:\n 17})`\n - -0.005 === `{significand: -5 exponent: -3}`\n - 33.5 million === `{significand: 335 exponent: 5}`\n - 11/8 (1.375) === `{significand: 1375 exponent: -3}`\n\nNote that the range of a Decimal exceeds that of a JSON `number` (double), as\nwell as that of a `decimal64`." }, "DeclineGroupJoinRequestRequest": { "type": "object", "properties": {}, "description": "A join request ID." }, "DiscardMemoryStoreQueueItemsRequest": { "type": "object", "properties": { "readId": { "type": "string", "description": "The `readId` of the previous read operation for which to discard read\nitems." } }, "description": "Discards read items from the front of the queue." }, "FlushMemoryStoreMetadata": { "type": "object", "properties": {}, "description": "Represents metadata about the long-running operation corresponding to a\nFlushMemoryStore request.\n\nThis is the type of the `Operation.metadata` field in the response to\n`GetOperation` requests for FlushMemoryStore operations." }, "FlushMemoryStoreResponse": { "type": "object", "properties": {}, "description": "Returns a FlushMemoryStoreResponse object." }, "GenerateSpeechAssetMetadata": { "type": "object", "properties": {}, "description": "Represents metadata about the long-running operation corresponding to a\nGenerateSpeechAsset request.\n\nThis is the type of the `Operation.metadata` field in the response to\n`GetOperation` requests for GenerateSpeechAsset operations." }, "GenerateSpeechAssetRequest": { "required": ["text"], "type": "object", "properties": { "text": { "example": "Hello", "type": "string", "description": "The text to be translated." }, "speechStyle": { "$ref": "#/components/schemas/GenerateSpeechAssetRequest_GeneratedSpeechStyle", "description": "The style of the generated speech." } }, "description": "Specifies the text from which to generate speech and the voice style." }, "GenerateSpeechAssetRequest_GeneratedSpeechStyle": { "type": "object", "properties": { "voiceId": { "example": "1", "type": "string", "description": "An ID corresponding to the voice type specified. A mapping of voice type\nto\nID number is available in the documentation." }, "pitch": { "type": "number", "description": "The pitch of the generated speech.", "format": "double" }, "speed": { "type": "number", "description": "The speed of the generated speech.", "format": "double" } }, "description": "Information about the style of generated speech." }, "GenerateSpeechAssetResponse": { "type": "object", "properties": { "assetId": { "type": "string", "description": "The generated audio asset ID." }, "remainingQuota": { "type": "integer", "description": "The remaining quota (the remaining number of requests available\nto the user this calendar month).", "format": "int32" } }, "description": "Contains a generated audio asset in MPEG-2 Audio Layer III (MP3) format." }, "GetInstanceMetadata": { "type": "object", "properties": {}, "description": "Represents metadata about the long-running operation corresponding to a\nGetInstance request.\n\nThis is the type of the `Operation.metadata` field in the response to\n`GetOperation` requests for GetInstance operations." }, "GoogleProtobufAny": { "type": "object", "properties": { "@type": { "type": "string", "description": "The type of the serialized message." } }, "additionalProperties": true, "description": "Contains an arbitrary serialized message along with a @type that describes the type of the serialized message." }, "GoogleProtobufValue": { "description": "Represents a dynamically typed value which can be either null, a number, a string, a boolean, a recursive struct value, or a list of values." }, "Group": { "type": "object", "properties": { "path": { "example": "groups/123", "type": "string", "description": "The resource path of the group.\n\nFormat: `groups/{group_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group was created.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group was last updated.", "format": "date-time" }, "id": { "readOnly": true, "example": "7", "type": "string", "description": "A unique ID that identifies the group." }, "displayName": { "example": "Roblox", "type": "string", "description": "The name of the group.\n\nMust be non-empty. Has a maximum limit of 50 characters." }, "description": { "example": "Official fan club of Roblox!", "type": "string", "description": "The description of the group.\n\nHas a maximum limit of 1000 characters." }, "owner": { "readOnly": true, "example": "users/21557", "type": "string", "description": "The resource path of the owner.\n\nIf the group is abandoned and has no owner, this field is not returned." }, "memberCount": { "readOnly": true, "example": 10196297, "type": "integer", "description": "The total number of members within a group.", "format": "int32" }, "publicEntryAllowed": { "example": true, "type": "boolean", "description": "Whether the group allows public entry." }, "locked": { "readOnly": true, "example": true, "type": "boolean", "description": "Whether the group is locked.\n\nA locked group is a group that has been\nmoderated/banned by Roblox." }, "verified": { "readOnly": true, "example": true, "type": "boolean", "description": "Whether the group has the verified badge." } }, "description": "A mini-community within Roblox for communication, discussions, and more.", "x-aep-resource": { "patterns": ["groups/{group_id}"], "plural": "groups", "singular": "group" }, "x-resource": true, "x-oneOf": { "Owner": ["owner"] } }, "GroupForumCategory": { "type": "object", "properties": { "path": { "example": "groups/123/forum-categories/01234567-89ab-cdef-0123-456789abcdef", "type": "string", "description": "The resource path of the group forum category.\n\nFormat: `groups/{group_id}/forum-categories/{group_forum_category_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group forum category was created.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group forum category was last updated.", "format": "date-time" }, "groupForumCategoryId": { "readOnly": true, "type": "string", "description": "The id of the group forum category." }, "displayName": { "type": "string", "description": "The display name of the group forum category." }, "creator": { "readOnly": true, "example": "users/156", "type": "string", "description": "The resource path of the user who created the group forum category." }, "archiveTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group forum category was archived.", "format": "date-time" }, "archiver": { "readOnly": true, "example": "users/156", "type": "string", "description": "The resource path of the user who archived the group forum category." } }, "description": "Represents a forum category within a group for user discussions.", "x-aep-resource": { "patterns": [ "groups/{group_id}/forum-categories/{group_forum_category_id}" ], "plural": "group-forum-categories", "singular": "group-forum-category" }, "x-resource": true }, "GroupForumComment": { "type": "object", "properties": { "path": { "example": "groups/123/forum-categories/01234567-89ab-cdef-0123-456789abcdef/posts/01234567-89ab-cdef-0123-456789abcdef/comments/01234567-89ab-cdef-0123-456789abcdef", "type": "string", "description": "The resource path of the group forum comment.\n\nFormat:\n`groups/{group_id}/forum-categories/{group_forum_category_id}/posts/{group_forum_post_id}/comments/{group_forum_comment_id}`" }, "groupForumCommentId": { "readOnly": true, "type": "string", "description": "The id of the group forum comment." }, "message": { "$ref": "#/components/schemas/ContentMessage", "description": "The message content of the group forum comment." } }, "description": "Represents a forum comment on a group's forum post.", "x-aep-resource": { "patterns": [ "groups/{group_id}/forum-categories/{group_forum_category_id}/posts/{group_forum_post_id}/comments/{group_forum_comment_id}" ], "plural": "group-forum-comments", "singular": "group-forum-comment" }, "x-resource": true }, "GroupForumPost": { "type": "object", "properties": { "path": { "example": "groups/123/forum-categories/01234567-89ab-cdef-0123-456789abcdef/posts/01234567-89ab-cdef-0123-456789abcdef", "type": "string", "description": "The resource path of the group forum post.\n\nFormat:\n`groups/{group_id}/forum-categories/{group_forum_category_id}/posts/{group_forum_post_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group forum post was created.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group forum post was last updated.", "format": "date-time" }, "pinned": { "example": true, "type": "boolean", "description": "Whether the group forum post is pinned." }, "locked": { "example": true, "type": "boolean", "description": "Whether the group forum post is locked." }, "groupForumPostId": { "readOnly": true, "type": "string", "description": "The id of the group forum post." }, "title": { "type": "string", "description": "The title of the group forum post." }, "firstComment": { "$ref": "#/components/schemas/GroupForumComment", "description": "The resource path of the group forum post's first comment, which holds the\npost content.\n\nBy default, the `first_comment` field is fully populated. This **will not**\ndereference resource references within the first comment, such as\n`GroupForumComment.author`; only the `path` subfield of these fields will\nbe populated. However, if only the `path` field of the first comment is\nneeded, you can specify the FULL view." }, "author": { "readOnly": true, "example": "users/156", "type": "string", "description": "The resource path of the user who created the group forum post." }, "archiveTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group forum post was archived.", "format": "date-time" }, "archiver": { "readOnly": true, "example": "users/156", "type": "string", "description": "The resource path of the user who archived the group forum post." }, "commentCount": { "type": "integer", "description": "The number of comments on the group forum post. This includes the first\ncomment (post content).", "format": "int64" } }, "description": "Represents a forum post within a group's forum category.", "x-aep-resource": { "patterns": [ "groups/{group_id}/forum-categories/{group_forum_category_id}/posts/{group_forum_post_id}" ], "plural": "group-forum-posts", "singular": "group-forum-post" }, "x-resource": true }, "GroupJoinRequest": { "type": "object", "properties": { "path": { "example": "groups/123/join-requests/123", "type": "string", "description": "The resource path of the group join request.\n\nFormat: `groups/{group_id}/join-requests/{group_join_request_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group join request was created.", "format": "date-time" }, "user": { "readOnly": true, "example": "users/156", "type": "string", "description": "The resource path of the user." } }, "description": "A request to join a group.\n\nThe `acceptRequests` permission is required.", "x-aep-resource": { "patterns": [ "groups/{group_id}/join-requests/{group_join_request_id}" ], "plural": "group-join-requests", "singular": "group-join-request" }, "x-resource": true }, "GroupMembership": { "type": "object", "properties": { "path": { "example": "groups/123/memberships/123", "type": "string", "description": "The resource path of the group membership.\n\nFormat: `groups/{group_id}/memberships/{group_membership_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group membership was created.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group membership was last updated.", "format": "date-time" }, "user": { "example": "users/21557", "type": "string", "description": "The resource path of a member of the group.", "x-immutable": true }, "role": { "example": "groups/7/roles/99513316", "type": "string", "description": "The resource path of the member's highest-ranked role.\nWhen the member holds multiple roles, this reflects only the\nhighest-ranked one. Prefer using the `roles` field, which always\ncontains the complete set of assigned roles." }, "roles": { "readOnly": true, "example": "groups/7/roles/99513316", "type": "array", "items": { "type": "string" }, "description": "The resource paths of all roles assigned to the group member.\nThis is the recommended field for reading a member's roles, as it\nalways contains the complete set of roles held by the member." } }, "description": "A membership to a group. A user ID can be used in place of a membership ID.", "x-aep-resource": { "patterns": ["groups/{group_id}/memberships/{group_membership_id}"], "plural": "group-memberships", "singular": "group-membership" }, "x-resource": true }, "GroupRole": { "type": "object", "properties": { "path": { "example": "groups/123/roles/123", "type": "string", "description": "The resource path of the group role.\n\nFormat: `groups/{group_id}/roles/{group_role_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp for when the group role was last updated.\n\nVisible only to owners of the group.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the group role was last updated.\n\nVisible only to owners of the group.", "format": "date-time" }, "id": { "readOnly": true, "example": "200", "type": "string", "description": "A unique ID that identifies a role.\n\nDistinct from a role's rank, which is only unique within the group." }, "displayName": { "example": "Member", "type": "string", "description": "The name of the role.\n\nHas a maximum limit of 100 characters. Names above the limit are\nrejected." }, "description": { "example": "This is a description for the role", "type": "string", "description": "The description of the role.\n\nHas a maximum limit of 1000 characters. Strings above the limit are\nrejected. Visible only to owners of the group." }, "rank": { "example": 1, "type": "integer", "description": "The rank of the role.\n\nThe minimum value is 0. The maximum value is 255.", "format": "int32" }, "memberCount": { "readOnly": true, "example": 10223136, "type": "integer", "description": "Total number of members within a role.\n\nThis field is not returned for guest roles.", "format": "int32" }, "permissions": { "$ref": "#/components/schemas/GroupRole_RolePermissions", "description": "The permissions granted for this role.\n\nThis value is populated based on the read scope and role of the authorized\nuser or API key creator. If the user or creator is the owner of the parent\ngroup, they are able to view all role permissions in the group. If the user\nor creator is a member of the parent group, they are able to view their\nrole's permissions in the group. Anyone can view guest permissions. In\nthe case that someone can't view the permissions, this field is not\nreturned." } }, "description": "A configurable property to grant specific privileges for members within a\ngroup.", "x-aep-resource": { "patterns": ["groups/{group_id}/roles/{group_role_id}"], "plural": "group-roles", "singular": "group-role" }, "x-resource": true, "x-oneOf": { "Description": ["description"], "MemberCount": ["memberCount"] } }, "GroupRole_RolePermissions": { "type": "object", "properties": { "viewWallPosts": { "example": true, "type": "boolean", "description": "View group wall." }, "createWallPosts": { "example": true, "type": "boolean", "description": "Post on group wall." }, "deleteWallPosts": { "example": true, "type": "boolean", "description": "Delete group wall posts." }, "viewGroupShout": { "example": true, "type": "boolean", "description": "View group shout." }, "createGroupShout": { "example": true, "type": "boolean", "description": "Post group shout." }, "changeRank": { "example": true, "type": "boolean", "description": "Manage lower-ranked member ranks." }, "acceptRequests": { "example": true, "type": "boolean", "description": "Accept join requests." }, "exileMembers": { "example": true, "type": "boolean", "description": "Kick lower-ranked members." }, "manageRelationships": { "example": true, "type": "boolean", "description": "Manage allies and enemies." }, "viewAuditLog": { "example": true, "type": "boolean", "description": "View audit log." }, "spendGroupFunds": { "example": true, "type": "boolean", "description": "Spend group funds." }, "advertiseGroup": { "example": true, "type": "boolean", "description": "Advertise group." }, "createAvatarItems": { "example": true, "type": "boolean", "description": "Create avatar items." }, "manageAvatarItems": { "example": true, "type": "boolean", "description": "Manage avatar items." }, "manageGroupUniverses": { "example": true, "type": "boolean", "description": "Manage group universes." }, "viewUniverseAnalytics": { "example": true, "type": "boolean", "description": "View universe analytics." }, "createApiKeys": { "example": true, "type": "boolean", "description": "Create group API Keys." }, "manageApiKeys": { "example": true, "type": "boolean", "description": "Manage all group API keys." }, "banMembers": { "example": true, "type": "boolean", "description": "Ban lower-ranked members." }, "viewForums": { "example": true, "type": "boolean", "description": "Can view forums" }, "manageCategories": { "example": true, "type": "boolean", "description": "Can change forum categories" }, "createPosts": { "example": true, "type": "boolean", "description": "Can create forum post" }, "lockPosts": { "example": true, "type": "boolean", "description": "Can lock forum post" }, "pinPosts": { "example": true, "type": "boolean", "description": "Can pin forum post" }, "removePosts": { "example": true, "type": "boolean", "description": "Can remove forum post" }, "createComments": { "example": true, "type": "boolean", "description": "Can create forum comment" }, "removeComments": { "example": true, "type": "boolean", "description": "Can remove forum comment" }, "manageBlockedWords": { "example": true, "type": "boolean", "description": "Can manage blocked words" }, "viewBlockedWords": { "example": true, "type": "boolean", "description": "Can view blocked words" }, "bypassSlowMode": { "example": true, "type": "boolean", "description": "can bypass slow mode" } }, "description": "Represents the permissions on a role." }, "IncrementDataStoreEntryRequest": { "type": "object", "properties": { "amount": { "type": "number", "description": "The amount by which to increment the entry value. Both the existing value\nand the increment amount must be integers.", "format": "double" }, "users": { "example": "users/123", "type": "array", "items": { "type": "string" }, "description": "Users associated with the entry.\n\nEach value must be a user resource path in the format `users/{user_id}`,\nnot a bare user ID.\n\nIf this is not provided, existing user IDs are cleared." }, "attributes": { "type": "object", "description": "An arbitrary set of attributes associated with the entry.\n\nIf this is not provided, existing attributes are cleared." } }, "description": "Increments the entry value.\n\nIf the value is not numeric, this request fails.", "x-oneOf": { "Amount": ["amount"] } }, "IncrementOrderedDataStoreEntryRequest": { "type": "object", "properties": { "amount": { "type": "number", "description": "The amount by which to increment the entry value. Both the existing value\nand the increment amount must be integers.", "format": "double" } }, "description": "Increments the entry value.", "x-oneOf": { "Amount": ["amount"] } }, "Instance": { "type": "object", "properties": { "path": { "example": "universes/123/places/123/instances/0123456789abcdef0123456789abcdef", "type": "string", "description": "The resource path of the instance.\n\nFormat: `universes/{universe_id}/places/{place_id}/instances/{instance_id}`" }, "hasChildren": { "readOnly": true, "example": true, "type": "boolean", "description": "whether the instance has any children instance" }, "engineInstance": { "$ref": "#/components/schemas/roblox.engine.Instance", "description": "the property details of the instance" } }, "description": "Represents a data model instance.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/places/{place_id}/instances/{instance_id}" ], "plural": "instances", "singular": "instance" }, "x-resource": true }, "ListAssetQuotasResponse": { "type": "object", "properties": { "assetQuotas": { "type": "array", "items": { "$ref": "#/components/schemas/AssetQuota" }, "description": "The AssetQuotas from the specified User." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of AssetQuotas in the parent collection." }, "ListDataStoreEntriesResponse": { "type": "object", "properties": { "dataStoreEntries": { "type": "array", "items": { "$ref": "#/components/schemas/DataStoreEntry" }, "description": "The DataStoreEntries from the specified DataStore or DataStoreScope." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of DataStoreEntries in the parent collection." }, "ListDataStoreEntryRevisionsResponse": { "type": "object", "properties": { "dataStoreEntries": { "type": "array", "items": { "$ref": "#/components/schemas/DataStoreEntry" }, "description": "The revisions of the data_store_entry." }, "nextPageToken": { "type": "string", "description": "A token that you send as a `pageToken` parameter to retrieve the next page.\nIf this field is omitted, there are no subsequent pages." } }, "description": "A list of revisions of a data store entry." }, "ListDataStoresResponse": { "type": "object", "properties": { "dataStores": { "type": "array", "items": { "$ref": "#/components/schemas/DataStore" }, "description": "The DataStores from the specified Universe." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of DataStores in the parent collection." }, "ListGroupForumCategoriesResponse": { "type": "object", "properties": { "groupForumCategories": { "type": "array", "items": { "$ref": "#/components/schemas/GroupForumCategory" }, "description": "The GroupForumCategories from the specified Group." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of GroupForumCategories in the parent collection." }, "ListGroupForumCommentsResponse": { "type": "object", "properties": { "groupForumComments": { "type": "array", "items": { "$ref": "#/components/schemas/GroupForumComment" }, "description": "The GroupForumComments from the specified GroupForumPost." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of GroupForumComments in the parent collection." }, "ListGroupForumPostsResponse": { "type": "object", "properties": { "groupForumPosts": { "type": "array", "items": { "$ref": "#/components/schemas/GroupForumPost" }, "description": "The GroupForumPosts from the specified GroupForumCategory." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of GroupForumPosts in the parent collection." }, "ListGroupJoinRequestsResponse": { "type": "object", "properties": { "groupJoinRequests": { "type": "array", "items": { "$ref": "#/components/schemas/GroupJoinRequest" }, "description": "The GroupJoinRequests from the specified Group." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of GroupJoinRequests in the parent collection." }, "ListGroupMembershipsResponse": { "type": "object", "properties": { "groupMemberships": { "type": "array", "items": { "$ref": "#/components/schemas/GroupMembership" }, "description": "The GroupMemberships from the specified Group." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of GroupMemberships in the parent collection." }, "ListGroupRolesResponse": { "type": "object", "properties": { "groupRoles": { "type": "array", "items": { "$ref": "#/components/schemas/GroupRole" }, "description": "The GroupRoles from the specified Group." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of GroupRoles in the parent collection." }, "ListInstanceChildrenMetadata": { "type": "object", "properties": {}, "description": "Represents metadata about the long-running operation corresponding to a\nListInstanceChildren request.\n\nThis is the type of the `Operation.metadata` field in the response to\n`GetOperation` requests for ListInstanceChildren operations." }, "ListInstanceChildrenResponse": { "type": "object", "properties": { "instances": { "type": "array", "items": { "$ref": "#/components/schemas/Instance" }, "description": "A list of children instances.\n\n" }, "nextPageToken": { "type": "string", "description": "A token, which can be sent as `page_token` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages." } }, "description": "Returns a list of the instance's children." }, "ListLuauExecutionSessionTaskLogsResponse": { "type": "object", "properties": { "luauExecutionSessionTaskLogs": { "type": "array", "items": { "$ref": "#/components/schemas/LuauExecutionSessionTaskLog" }, "description": "The LuauExecutionSessionTaskLogs from the specified\nLuauExecutionSessionTask." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of LuauExecutionSessionTaskLogs in the parent collection." }, "ListMemoryStoreSortedMapItemsResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/MemoryStoreSortedMapItem" }, "description": "The MemoryStoreSortedMapItems from the specified MemoryStoreSortedMap.\n" }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of MemoryStoreSortedMapItems in the parent collection." }, "ListOrderedDataStoreEntriesResponse": { "type": "object", "properties": { "orderedDataStoreEntries": { "type": "array", "items": { "$ref": "#/components/schemas/OrderedDataStoreEntry" }, "description": "The OrderedDataStoreEntries from the specified OrderedDataStoreScope." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of OrderedDataStoreEntries in the parent collection." }, "ListUserRestrictionLogsResponse": { "type": "object", "properties": { "logs": { "type": "array", "items": { "$ref": "#/components/schemas/UserRestrictionLog" }, "description": "The UserRestrictionLogs from the specified Universe." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "Returns a list of change logs applied to UserRestriction resources." }, "ListUserRestrictionsResponse": { "type": "object", "properties": { "userRestrictions": { "type": "array", "items": { "$ref": "#/components/schemas/UserRestriction" }, "description": "The UserRestrictions from the specified Universe or Place." }, "nextPageToken": { "type": "string", "description": "A token that you can send as a `pageToken` parameter to retrieve the next\npage. If this field is omitted, there are no subsequent pages." } }, "description": "A list of UserRestrictions in the parent collection." }, "LuauExecutionSessionTask": { "type": "object", "properties": { "path": { "example": "universes/123/places/123/luau-execution-session-tasks/123e4567-e89b-12d3-a456-426655440000", "type": "string", "description": "The resource path of the luau execution session task.\n\nFormats:\n* `universes/{universe_id}/places/{place_id}/luau-execution-session-tasks/{luau_execution_session_task_id}`\n* `universes/{universe_id}/places/{place_id}/versions/{place_version_id}/luau-execution-session-tasks/{luau_execution_session_task_id}`\n* `universes/{universe_id}/places/{place_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{luau_execution_session_task_id}`\n* `universes/{universe_id}/places/{place_id}/versions/{place_version_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{luau_execution_session_task_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "Time when this task was created.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "Time when this task's state last changed.", "format": "date-time" }, "user": { "readOnly": true, "type": "string", "description": "The user that created the API key that was used to create this task." }, "state": { "readOnly": true, "example": "STATE_UNSPECIFIED", "enum": [ "STATE_UNSPECIFIED", "QUEUED", "PROCESSING", "CANCELLED", "COMPLETE", "FAILED" ], "type": "string", "description": "The task's state. See the State enum for information about each possible\nvalue.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | STATE_UNSPECIFIED | UNSPECIFIED |\n | QUEUED | The Task is waiting to be processed. |\n | PROCESSING | The Task has been picked up for processing. |\n | CANCELLED | The Task has been stopped by the user. |\n | COMPLETE | The Task has finished processing. The output field contains the output. |\n | FAILED | The Task failed. The error field contains details about the error. |", "format": "enum" }, "script": { "type": "string", "description": "The script to be run as part of this task.\n\nFor example:\n\n```luau\nlocal x = 3\nlocal y = 4\nreturn x + y\n```", "x-immutable": true }, "timeout": { "example": "3s", "type": "string", "description": "Limit for how long the script can run.\n\nThe task fails if the script does not complete within the\nspecified duration.\n\nDefaults to 5 minutes.", "format": "duration", "x-immutable": true }, "error": { "$ref": "#/components/schemas/LuauExecutionSessionTask_Error", "description": "Present when the task execution fails. Contains details about the error\nthat caused the failure." }, "output": { "$ref": "#/components/schemas/LuauExecutionSessionTask_Output", "description": "Present when the task execution succeeds. Contains the output of the\nexecution." }, "binaryInput": { "type": "string", "description": "Resource path of the binary input to this task. See the documentation for\nthe\n`LuauExecutionSessionTaskBinaryInput` resource for usage details." }, "enableBinaryOutput": { "example": true, "type": "boolean", "description": "If set to true, allows the task to output a large binary object in addition\nto standard return values.\n\nIf `enable_binary_output` is set to true, the task script must return a\n`LuauExecutionTaskOutput` (or equivalent table) and no other return values.\n\nBelow is example code for doing so:\n\n```luau\nlocal buf: buffer = buffer.create(10)\nlocal result: LuauExecutionTaskOutput = {\n BinaryOutput = buf,\n ReturnValues = { \"hello world\", 123 }\n}\nreturn result\n```\n\nThe `BinaryOutput` buffer must be no larger than 256 MiB in size.\n\nThe `ReturnValues` array, if given, will be serialized to JSON and made\navailable in the `output` field of the `LuauExecutionSessionTask` resource,\nsimilar to regular return values when not using `enable_binary_output`.\n\nThe binary output can be fetched from the URI in the `binaryOutputUri`\nfield after the task completes. The `binaryOutputUri` is valid for 15\nminutes after task completion.", "x-immutable": true }, "binaryOutputUri": { "readOnly": true, "type": "string", "description": "URI for the binary output of this task. See the `enableBinaryOutput` field\nfor usage details." } }, "description": "A `LuauExecutionSessionTask` (\"task\" for short) executes a given Luau script\nin the context of a specific version of a place.\n\nIn a task, physics simulation does not run. Server and local scripts within\nthe place also do not automatically run.\n\nThe script may access and update the data model of the place, including\ninvoking any module scripts. However, data model changes are local to the\ntask and cannot be persisted.\n\nThe script can also invoke engine APIs that read and/or modify data stored in\nthe cloud, such as those for DataStores. Exercise caution when using these\nAPIs.\n\nScripts can be up to 4 MB in size and run for up to 5 minutes. Scripts that\nrun for longer than the time limit terminate with an error.\n\nScripts are executed as-is and do not need to be wrapped in a function.\n\nScripts can return values (using the Luau `return` keyword). Return values\nare serialized to JSON and can be retrieved with the `Get\nLuauExecutionSessionTask` API after the task completes. The total size of the\nreturn values after JSON serialization must not exceed 4 MB. If the limit is\nexceeded, the task terminates with an error.\n\nIf the script raises an unhandled error, the task terminates. The error\ninformation can be retrieved with the `GetLuauExecutionSessionTask` API.\n\nStandard output (generated by the Luau `print` function) can be retrieved\nwith the `ListLuauExecutionSessionTaskLogs` method after the task completes.\nA maximum of 450 KB of logs are retained. If the amount of logs exceeds the\nlimit, older logs are discarded.\n\nInformation about a task is retained for 24 hours after task completion.\n\nAt most ten incomplete tasks are allowed per place. Attempting to create more\ntasks while the first ten are incomplete results in a HTTP 429 response.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/places/{place_id}/luau-execution-session-tasks/{luau_execution_session_task_id}", "universes/{universe_id}/places/{place_id}/versions/{place_version_id}/luau-execution-session-tasks/{luau_execution_session_task_id}", "universes/{universe_id}/places/{place_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{luau_execution_session_task_id}", "universes/{universe_id}/places/{place_id}/versions/{place_version_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{luau_execution_session_task_id}" ], "plural": "luau-execution-session-tasks", "singular": "luau-execution-session-task" }, "x-resource": true, "x-oneOf": { "result": ["error", "output"] } }, "LuauExecutionSessionTaskBinaryInput": { "type": "object", "properties": { "path": { "example": "universes/123/luau-execution-session-task-binary-inputs/123e4567-e89b-12d3-a456-426655440000", "type": "string", "description": "The resource path of the luau execution session task binary input.\n\nFormat:\n`universes/{universe_id}/luau-execution-session-task-binary-inputs/{luau_execution_session_task_binary_input_id}`" }, "size": { "type": "integer", "description": "The size of the binary input object to be uploaded.\n\nThe maximum allowed size is 100 MiB.", "format": "int64", "x-immutable": true }, "uploadUri": { "readOnly": true, "type": "string", "description": "Upload the binary input object using this URI." } }, "description": "Represents a large binary input that can be given to a\n`LuauExecutionSessionTask`.\n\nEach `LuauExecutionSessionTaskBinaryInput` is associated with a presigned URL\nwhich can be used to upload an arbitrary object. After uploading the object,\nthe path of the `LuauExecutionSessionTaskBinaryInput` can be passed when\ncreating a `LuauExecutionSessionTask` to make the object available to the\ntask.\n\nWithin the task, the contents of the object are made available within a table\npassed as the first argument to the script, with the key `BinaryInput`. The\nfollowing example demonstrates how to retrieve the data:\n\n```\nlocal taskInput: LuauExecutionTaskInput = ({...})[1]\nlocal buf: buffer = taskInput.BinaryInput\n```\n\nEach `LuauExecutionSessionTaskBinaryInput` is valid for 15 minutes from the\ntime of creation. Within that time, in desired, you can use it to create\nmultiple tasks for the same universe.\n\nThe uploaded binary object must be no larger than 100 MiB.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/luau-execution-session-task-binary-inputs/{luau_execution_session_task_binary_input_id}" ], "plural": "luau-execution-session-task-binary-inputs", "singular": "luau-execution-session-task-binary-input" }, "x-resource": true }, "LuauExecutionSessionTaskLog": { "type": "object", "properties": { "path": { "example": "universes/123/places/123/luau-execution-session-tasks/123e4567-e89b-12d3-a456-426655440000/logs/123", "type": "string", "description": "The resource path of the luau execution session task log.\n\nFormats:\n* `universes/{universe_id}/places/{place_id}/luau-execution-session-tasks/{luau_execution_session_task_id}/logs/{luau_execution_session_task_log_id}`\n* `universes/{universe_id}/places/{place_id}/versions/{place_version_id}/luau-execution-session-tasks/{luau_execution_session_task_id}/logs/{luau_execution_session_task_log_id}`\n* `universes/{universe_id}/places/{place_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{luau_execution_session_task_id}/logs/{luau_execution_session_task_log_id}`\n* `universes/{universe_id}/places/{place_id}/versions/{place_version_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{luau_execution_session_task_id}/logs/{luau_execution_session_task_log_id}`" }, "messages": { "readOnly": true, "type": "array", "items": { "type": "string" }, "description": "A list of log messages generated by the task execution.\nEach call to the Luau `print()` function from the task's script's code\nresults in a single list item here, even if the message itself contains\nnewlines. This field is populated when the View is FLAT (which is the\ndefault)." }, "structuredMessages": { "readOnly": true, "type": "array", "items": { "$ref": "#/components/schemas/LuauExecutionSessionTaskLog_LogMessage" }, "description": "A list of log messages generated by the task execution and associated\nmetadata.\nEach call to the Luau `print()` function from the task's script's code\nresults in a single list item here, even if the message itself contains\nnewlines. This field is populated when the View is STRUCTURED." } }, "description": "Represents a chunk of log messages generated by a\n`LuauExecutionSessionTask`.\n\nThe amount of logs that is retained is limited. See the documentation of the\n`LuauExecutionSessionTask` resource for more details.\n\nLogs have the same retention time as the parent task.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/places/{place_id}/luau-execution-session-tasks/{luau_execution_session_task_id}/logs/{luau_execution_session_task_log_id}", "universes/{universe_id}/places/{place_id}/versions/{place_version_id}/luau-execution-session-tasks/{luau_execution_session_task_id}/logs/{luau_execution_session_task_log_id}", "universes/{universe_id}/places/{place_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{luau_execution_session_task_id}/logs/{luau_execution_session_task_log_id}", "universes/{universe_id}/places/{place_id}/versions/{place_version_id}/luau-execution-sessions/{luau_execution_session_id}/tasks/{luau_execution_session_task_id}/logs/{luau_execution_session_task_log_id}" ], "plural": "luau-execution-session-task-logs", "singular": "luau-execution-session-task-log" }, "x-resource": true }, "LuauExecutionSessionTaskLog_LogMessage": { "type": "object", "properties": { "message": { "type": "string", "description": "The log message" }, "createTime": { "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The time at which the log message was produced", "format": "date-time" }, "messageType": { "example": "MESSAGE_TYPE_UNSPECIFIED", "enum": [ "MESSAGE_TYPE_UNSPECIFIED", "OUTPUT", "INFO", "WARNING", "ERROR" ], "type": "string", "description": "The `MessageType` of the log message.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | MESSAGE_TYPE_UNSPECIFIED | UNSPECIFIED |\n | OUTPUT | Corresponds to the `MessageOutput` enum value of the engine API. |\n | INFO | Corresponds to the `MessageInfo` enum value of the engine API. |\n | WARNING | Corresponds to the `MessageWarning` enum value of the engine API. |\n | ERROR | Corresponds to the `MessageError` enum value of the engine API. |", "format": "enum" } }, "description": "A single log message along with its associated metadata" }, "LuauExecutionSessionTask_Error": { "type": "object", "properties": { "code": { "readOnly": true, "example": "ERROR_CODE_UNSPECIFIED", "enum": [ "ERROR_CODE_UNSPECIFIED", "SCRIPT_ERROR", "DEADLINE_EXCEEDED", "OUTPUT_SIZE_LIMIT_EXCEEDED", "INTERNAL_ERROR" ], "type": "string", "description": "An error code indicating the category of the error.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | ERROR_CODE_UNSPECIFIED | UNSPECIFIED |\n | SCRIPT_ERROR | The task's script raised an unhandled error. |\n | DEADLINE_EXCEEDED | The task exceeded the maximum allowed execution duration. |\n | OUTPUT_SIZE_LIMIT_EXCEEDED | The task's outputs were too large. |\n | INTERNAL_ERROR | The Task failed due to an internal system error. |", "format": "enum" }, "message": { "readOnly": true, "type": "string", "description": "An error message containing more details about the error." } }, "description": "Contains error details in case of failed execution." }, "LuauExecutionSessionTask_Output": { "type": "object", "properties": { "results": { "readOnly": true, "type": "array", "items": { "$ref": "#/components/schemas/GoogleProtobufValue" }, "description": "Return values from the script that was run. Return values that are not\nJSON serializable (such as Data Model Instances) will be returned as\nnulls." } }, "description": "Contains the output of a task's execution." }, "MemoryStore": { "type": "object", "properties": { "path": { "example": "universes/123/memory-store", "type": "string", "description": "The resource path of the memory store.\n\nFormat: `universes/{universe_id}/memory-store`" } }, "description": "Represents the memory store of the universe.", "x-aep-resource": { "patterns": ["universes/{universe_id}/memory-store"], "plural": "memory-stores", "singular": "memory-store" }, "x-resource": true }, "MemoryStoreQueueItem": { "type": "object", "properties": { "path": { "example": "cloud/v2/universes/123/memory-store/queues/some-memory-store-queue-id/items/some-memory-store-queue-item-id", "type": "string", "description": "The resource path of the memory store queue item.\n\nFormat:\n`cloud/v2/universes/{universe_id}/memory-store/queues/{memory_store_queue_id}/items/{memory_store_queue_item_id}`" }, "data": { "$ref": "#/components/schemas/GoogleProtobufValue", "description": "The value of the queue item." }, "priority": { "type": "number", "description": "The priority of the queue item.", "format": "double" }, "ttl": { "writeOnly": true, "example": "3s", "type": "string", "description": "The TTL for the item.", "format": "duration" }, "expireTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The expiration time of the item.", "format": "date-time" }, "id": { "readOnly": true, "type": "string", "description": "The name of the item." } }, "description": "Represents an item within a queue structure.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/memory-store/queues/{memory_store_queue_id}/items/{memory_store_queue_item_id}" ], "plural": "memory-store-queue-items", "singular": "memory-store-queue-item" }, "x-resource": true, "x-oneOf": { "expiration": ["ttl", "expireTime"] } }, "MemoryStoreSortedMapItem": { "type": "object", "properties": { "path": { "example": "cloud/v2/universes/123/memory-store/sorted-maps/some-memory-store-sorted-map-id/items/some-memory-store-sorted-map-item-id", "type": "string", "description": "The resource path of the memory store sorted map item.\n\nFormat:\n`cloud/v2/universes/{universe_id}/memory-store/sorted-maps/{memory_store_sorted_map_id}/items/{memory_store_sorted_map_item_id}`" }, "value": { "$ref": "#/components/schemas/GoogleProtobufValue", "description": "The value of the item." }, "etag": { "readOnly": true, "type": "string", "description": "The server generated tag of an item." }, "ttl": { "writeOnly": true, "example": "3s", "type": "string", "description": "The TTL for the item.", "format": "duration" }, "expireTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The expiration time of the item.", "format": "date-time" }, "id": { "type": "string", "description": "The name of the item." }, "stringSortKey": { "type": "string", "description": "The item will be sorted lexicographically according to this string." }, "numericSortKey": { "type": "number", "description": "The item will be sorted according to this number.", "format": "double" } }, "description": "Represents an item within a sorted map structure.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/memory-store/sorted-maps/{memory_store_sorted_map_id}/items/{memory_store_sorted_map_item_id}" ], "plural": "memory-store-sorted-map-items", "singular": "memory-store-sorted-map-item" }, "x-resource": true, "x-oneOf": { "expiration": ["ttl", "expireTime"], "sortKey": ["stringSortKey", "numericSortKey"] } }, "MessageReaction": { "type": "object", "properties": { "emoteId": { "readOnly": true, "type": "string", "description": "The id of the emote." }, "count": { "readOnly": true, "type": "integer", "description": "The count of reactions for this emote.", "format": "int64" } }, "description": "Represents the reaction to a message." }, "Money": { "type": "object", "properties": { "currencyCode": { "type": "string", "description": "A currency code.\n\nThis may be a three-letter currency code defined in ISO 4217.\n\nAPIs may define additional currency codes that are not included in the ISO\n4217 standard (for example, virtual currencies or cryptocurrencies). These\nmust start with `X-`, in order to distinguish them from potential future\nISO 4217 codes. For example, `\"USD\"` is the ISO 4217 code for United States\ndollar." }, "quantity": { "$ref": "#/components/schemas/Decimal", "description": "The quantity of currency." } }, "description": "Represents an amount of money with its currency type.\n\nExamples:\n - Five US dollars === `{currency_code: \"USD\" quantity: {significand: 5}}`" }, "Operation": { "type": "object", "properties": { "path": { "type": "string", "description": "The server-assigned path, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`path` should be a resource path ending with `operations/{unique_id}`." }, "metadata": { "$ref": "#/components/schemas/GoogleProtobufAny", "description": "Service-specific metadata associated with the operation. It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata. Any method that returns a\nlong-running operation should document the metadata type, if any." }, "done": { "example": true, "type": "boolean", "description": "If the value is `false`, it means the operation is still in progress.\nIf `true`, the operation is completed, and either `error` or `response` is\navailable." }, "error": { "$ref": "#/components/schemas/Status", "description": "The error result of the operation in case of failure or cancellation." }, "response": { "$ref": "#/components/schemas/GoogleProtobufAny", "description": "The normal response of the operation in case of success. If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`. If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource. For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name. For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`." } }, "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.", "x-resource": true, "x-oneOf": { "result": ["error", "response"] } }, "OrderedDataStoreEntry": { "type": "object", "properties": { "path": { "example": "universes/123/ordered-data-stores/some-ordered-data-store-id/scopes/some-ordered-data-store-scope-id/entries/some-ordered-data-store-entry-id", "type": "string", "description": "The resource path of the ordered data store entry.\n\nFormat:\n`universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{ordered_data_store_scope_id}/entries/{ordered_data_store_entry_id}`" }, "value": { "type": "number", "description": "The value of the entry.\n\nAlways rounded to the nearest integer.", "format": "double" }, "id": { "readOnly": true, "type": "string", "description": "The name of the entry." } }, "description": "A key-value entry in an ordered data store.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{ordered_data_store_scope_id}/entries/{ordered_data_store_entry_id}" ], "plural": "ordered-data-store-entries", "singular": "ordered-data-store-entry" }, "x-resource": true, "x-oneOf": { "Value": ["value"] } }, "Place": { "required": ["templatePlace"], "type": "object", "properties": { "path": { "example": "universes/123/places/123", "type": "string", "description": "The resource path of the place.\n\nFormat: `universes/{universe_id}/places/{place_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp at which the place was created.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp at which the place was updated.", "format": "date-time" }, "displayName": { "example": "ROBLOX Battle [OPEN]", "type": "string", "description": "The name of the place." }, "description": { "example": "OPEN SOURCE! \n Feel free to check out how we made this game and ask us about it!", "type": "string", "description": "The description of the place." }, "serverSize": { "type": "integer", "description": "The maximum number of allowed users in a single server.", "format": "int32" }, "root": { "readOnly": true, "example": true, "type": "boolean", "description": "Whether this place is its parent universe's root place or not.\nEach universe has exactly one root place." }, "universeRuntimeCreation": { "readOnly": true, "example": true, "type": "boolean", "description": "Whether this place was created through in-experience creation.\nIf true, the place was created by calling AssetService::CreatePlaceAsync()\nfrom a script." }, "templatePlace": { "writeOnly": true, "example": "universes/{universe_id}/places/{place_id}", "type": "string", "description": "The resource path of the template place used to initialize the place on\ncreation.\nThe newly created place will be a clone of this template.\nA list of the valid template places can be obtained from\nListTemplatePlaces. Format: universes/{universe_id}/places/{place_id}", "x-immutable": true } }, "description": "Represents a Roblox place.", "x-aep-resource": { "patterns": ["universes/{universe_id}/places/{place_id}"], "plural": "places", "singular": "place" }, "x-resource": true, "x-oneOf": { "Description": ["description"], "DisplayName": ["displayName"], "ServerSize": ["serverSize"] } }, "PublishUniverseMessageRequest": { "required": ["topic", "message"], "type": "object", "properties": { "topic": { "example": "my-topic", "type": "string", "description": "The topic on which to publish the message." }, "message": { "example": "Hello, world!", "type": "string", "description": "The message to publish." } }, "description": "Publish a message on the specified topic." }, "ReadMemoryStoreQueueItemsResponse": { "type": "object", "properties": { "readId": { "type": "string", "description": "An identifier of the read operation\n\nThis can be passed to `:discard` in order to mark the items as processed." }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/MemoryStoreQueueItem" }, "description": "The items read from the queue" } }, "description": "Returns the specified number of items at the front of the queue." }, "RestartUniverseServersRequest": { "type": "object", "properties": { "placeIds": { "type": "array", "items": { "type": "integer", "format": "int64" }, "description": "The place IDs to update. If none are specified, all active places in the\nuniverse will be updated." }, "closeAllVersions": { "example": true, "type": "boolean", "description": "If true, players from servers running both old and new place versions will\nbe restarted. If false, restarts all active servers for a specific universe\nif and only if a new version of the experience has been published." }, "bleedOffServers": { "example": true, "type": "boolean", "description": "If true, matchmaking to servers will stop, but servers will stay up for\nbleed_off_duration_minutes before shutting down.\nThis setting gives players time to naturally migrate to the newer version.\nIf false, servers will immediately start shutting down." }, "bleedOffDurationMinutes": { "example": 10, "type": "integer", "description": "If bleed_off_servers is true, how long (in minutes) old servers are allowed\nto stay up before shutting them down. Valid values: 1-60 minutes.", "format": "int32" } }, "description": "Restarts all of the universe's servers." }, "RestartUniverseServersResponse": { "type": "object", "properties": {}, "description": "Empty response. May later contain a status." }, "SnapshotDataStoresRequest": { "type": "object", "properties": {}, "description": "Takes a new snapshot for the given experience." }, "SnapshotDataStoresResponse": { "type": "object", "properties": { "newSnapshotTaken": { "example": true, "type": "boolean", "description": "Whether a new snapshot was taken by this operation.\n(Only one snapshot can be taken per experience per UTC day.)" }, "latestSnapshotTime": { "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The time of the latest snapshot after the operation (regardless of\nwhether a new snapshot was created). This time is always returned in UTC.", "format": "date-time" } }, "description": "Returns whether a new snapshot was taken and the time of the latest snapshot\nafter the operation (regardless of whether a new snapshot was taken).", "x-oneOf": { "NewSnapshotTaken": ["newSnapshotTaken"] } }, "Status": { "type": "object", "properties": { "code": { "type": "integer", "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].", "format": "int32" }, "message": { "type": "string", "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." }, "details": { "type": "array", "items": { "$ref": "#/components/schemas/GoogleProtobufAny" }, "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use." } }, "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors)." }, "Subscription": { "type": "object", "properties": { "path": { "example": "universes/123/subscription-products/some-subscription-product-id/subscriptions/some-subscription-id", "type": "string", "description": "The resource path of the subscription.\n\nFormat:\n`universes/{universe_id}/subscription-products/{subscription_product_id}/subscriptions/{subscription_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the subscription was created.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the subscription was last updated.", "format": "date-time" }, "active": { "readOnly": true, "example": true, "type": "boolean", "description": "Whether the subscription is active.\n\nThis is equivalent to whether `state` is equal to SUBSCRIBED_WILL_RENEW,\nSUBSCRIBED_WILL_NOT_RENEW, or SUBSCRIBED_RENEWAL_PAYMENT_PENDING." }, "willRenew": { "readOnly": true, "example": true, "type": "boolean", "description": "Whether the subscription will renew.\n\nThis is equivalent to whether `state` is equal to SUBSCRIBED_WILL_RENEW or\nSUBSCRIBED_RENEWAL_PAYMENT_PENDING." }, "lastBillingTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the subscription was last billed.", "format": "date-time" }, "nextRenewTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the subscription will next be automatically renewed.", "format": "date-time" }, "expireTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the subscription will, or did, expire.", "format": "date-time" }, "state": { "readOnly": true, "example": "STATE_UNSPECIFIED", "enum": [ "STATE_UNSPECIFIED", "SUBSCRIBED_WILL_RENEW", "SUBSCRIBED_WILL_NOT_RENEW", "SUBSCRIBED_RENEWAL_PAYMENT_PENDING", "EXPIRED" ], "type": "string", "description": "The state of the subscription.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | STATE_UNSPECIFIED | The subscription state is unspecified. |\n | SUBSCRIBED_WILL_RENEW | The subscription is active and will be automatically renewed at `next_renew_time`. |\n | SUBSCRIBED_WILL_NOT_RENEW | The subscription is active but will not be automatically renewed. |\n | SUBSCRIBED_RENEWAL_PAYMENT_PENDING | The subscription is active and within the renewal grace period pending payment confirmation. |\n | EXPIRED | The subscription has expired. See `expiration_details` for more information. |", "format": "enum" }, "expirationDetails": { "$ref": "#/components/schemas/Subscription_ExpirationDetails", "description": "Information about the expiration of the subscription." }, "purchasePlatform": { "readOnly": true, "example": "PURCHASE_PLATFORM_UNSPECIFIED", "enum": ["PURCHASE_PLATFORM_UNSPECIFIED", "DESKTOP", "MOBILE"], "type": "string", "description": "The platform on which the subscription was purchased.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | PURCHASE_PLATFORM_UNSPECIFIED | The purchase platform is unspecified. |\n | DESKTOP | The subscription was purchased on the Roblox website. |\n | MOBILE | The subscription was purchased on the Roblox mobile app. |", "format": "enum" }, "paymentProvider": { "readOnly": true, "example": "PAYMENT_PROVIDER_UNSPECIFIED", "enum": [ "PAYMENT_PROVIDER_UNSPECIFIED", "STRIPE", "APPLE", "GOOGLE", "ROBLOX_CREDIT", "ROBUX" ], "type": "string", "description": "The payment provider used to purchase the subscription.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | PAYMENT_PROVIDER_UNSPECIFIED | The payment provider is unspecified. |\n | STRIPE | The subscription was purchased using Stripe. |\n | APPLE | The subscription was purchased using Apple. |\n | GOOGLE | The subscription was purchased using Google. |\n | ROBLOX_CREDIT | The subscription was purchased using Roblox Credit. |\n | ROBUX | The subscription was purchased using Robux. |", "format": "enum" }, "user": { "example": "users/123", "type": "string", "description": "The user who subscribed to the subscription.", "x-immutable": true } }, "description": "Represents a user's subscription to a subscription product. The\nsubscription ID is the same as the user ID of the user who subscribed.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/subscription-products/{subscription_product_id}/subscriptions/{subscription_id}" ], "plural": "subscriptions", "singular": "subscription" }, "x-resource": true, "x-oneOf": { "subscriber": ["user"] } }, "Subscription_ExpirationDetails": { "type": "object", "properties": { "reason": { "example": "EXPIRATION_REASON_UNSPECIFIED", "enum": [ "EXPIRATION_REASON_UNSPECIFIED", "PRODUCT_INACTIVE", "PRODUCT_DELETED", "SUBSCRIBER_CANCELLED", "SUBSCRIBER_REFUNDED", "LAPSED" ], "type": "string", "description": "The reason the subscription expired.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | EXPIRATION_REASON_UNSPECIFIED | The expiration reason is unspecified. |\n | PRODUCT_INACTIVE | The subscription product is inactive. |\n | PRODUCT_DELETED | The subscription product is deleted. |\n | SUBSCRIBER_CANCELLED | The subscriber cancelled the subscription. |\n | SUBSCRIBER_REFUNDED | The subscriber requested a refund. |\n | LAPSED | The subscriber’s payment was not received. |", "format": "enum" } }, "description": "Information about the expiration of a subscription." }, "TranslateTextRequest": { "required": ["text"], "type": "object", "properties": { "text": { "example": "Hello", "type": "string", "description": "The text to be translated." }, "sourceLanguageCode": { "example": "en-us", "type": "string", "description": "The IETF BCP-47 language code representing the language of the\ninput text.\n\nIf not provided, the system automatically detects the\nsource language.\n\nSupported language codes include:\n\n- English (en-us)\n- French (fr-fr)\n- Vietnamese (vi-vn)\n- Thai (th-th)\n- Turkish (tr-tr)\n- Russian (ru-ru)\n- Spanish (es-es)\n- Portuguese (pt-br)\n- Korean (ko-kr)\n- Japanese (ja-jp)\n- Chinese Simplified (zh-cn)\n- Chinese Traditional (zh-tw)\n- German (de-de)\n- Polish (pl-pl)\n- Italian (it-it)\n- Indonesian (id-id)" }, "targetLanguageCodes": { "example": "fr-fr, vi-vn, ja-jp", "type": "array", "items": { "type": "string" }, "description": "A list of target language codes in IETF BCP-47 format for translation.\n\nSupported language codes include:\n\n- English (en-us)\n- French (fr-fr)\n- Vietnamese (vi-vn)\n- Thai (th-th)\n- Turkish (tr-tr)\n- Russian (ru-ru)\n- Spanish (es-es)\n- Portuguese (pt-br)\n- Korean (ko-kr)\n- Japanese (ja-jp)\n- Chinese Simplified (zh-cn)\n- Chinese Traditional (zh-tw)\n- German (de-de)\n- Polish (pl-pl)\n- Italian (it-it)\n- Indonesian (id-id)" } }, "description": "Contains the text to be translated, the source language (optional), and a\nlist of target languages for translation." }, "TranslateTextResponse": { "type": "object", "properties": { "sourceLanguageCode": { "type": "string", "description": "The IETF BCP-47 language code representing the detected or user-specified\nlanguage of the source text." }, "translations": { "type": "object", "additionalProperties": { "type": "string" }, "description": "A map containing the requested translations. The key is the IETF BCP-47\nlanguage code, and the value is the translated text for that language.\nThe map contains all requested translations." } }, "description": "Contains the detected or specified source language code and a map of\nrequested translations, where each key is a language code and the value is\nthe translated text." }, "UnassignRoleGroupMembershipRequest": { "required": ["role"], "type": "object", "properties": { "role": { "example": "groups/123/roles/456", "type": "string", "description": "The resource path of the role to unassign.\n\nFormat: `groups/{group_id}/roles/{group_role_id}`" } }, "description": "Unassigns a role from the specified group membership." }, "UndeleteDataStoreRequest": { "type": "object", "properties": {}, "description": "Restore the data store" }, "Universe": { "required": ["templateRootPlace"], "type": "object", "properties": { "path": { "example": "universes/123", "type": "string", "description": "The resource path of the universe.\n\nFormat: `universes/{universe_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the universe was created.", "format": "date-time" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the universe was last updated.", "format": "date-time" }, "displayName": { "readOnly": true, "example": "ROBLOX Battle [OPEN]", "type": "string", "description": "The name of the universe.\n\nThis field can be updated by updating the root place's name." }, "description": { "readOnly": true, "example": "OPEN SOURCE! \n Feel free to check out how we made this game and ask us about it!", "type": "string", "description": "The description of the universe.\n\nThis field can be updated by updating the root place's description." }, "user": { "readOnly": true, "type": "string", "description": "The universe is user-owned." }, "group": { "type": "string", "description": "The universe is group-owned.", "x-immutable": true }, "visibility": { "readOnly": true, "example": "VISIBILITY_UNSPECIFIED", "enum": ["VISIBILITY_UNSPECIFIED", "PUBLIC", "PRIVATE"], "type": "string", "description": "Whether or not the universe is publicly accessible.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | VISIBILITY_UNSPECIFIED | Updates using this value will throw an error on the backend. |\n | PUBLIC | The universe is public. |\n | PRIVATE | The universe is private. If a universe's visibility is set to PRIVATE, all active players will immediately be removed from all running servers. |", "format": "enum" }, "facebookSocialLink": { "$ref": "#/components/schemas/Universe_SocialLink", "description": "The Facebook social link." }, "twitterSocialLink": { "$ref": "#/components/schemas/Universe_SocialLink", "description": "The Twitter social link." }, "youtubeSocialLink": { "$ref": "#/components/schemas/Universe_SocialLink", "description": "The Youtube social link." }, "twitchSocialLink": { "$ref": "#/components/schemas/Universe_SocialLink", "description": "The Twitch social link." }, "discordSocialLink": { "$ref": "#/components/schemas/Universe_SocialLink", "description": "The Discord social link." }, "robloxGroupSocialLink": { "$ref": "#/components/schemas/Universe_SocialLink", "description": "The Roblox group social link." }, "guildedSocialLink": { "$ref": "#/components/schemas/Universe_SocialLink", "description": "The Guilded social link." }, "voiceChatEnabled": { "example": true, "type": "boolean", "description": "Whether or not voice chat is enabled for users in the Experience.\n\nUpdating this value will not affect active servers." }, "ageRating": { "readOnly": true, "example": "AGE_RATING_UNSPECIFIED", "enum": [ "AGE_RATING_UNSPECIFIED", "AGE_RATING_ALL", "AGE_RATING_9_PLUS", "AGE_RATING_13_PLUS", "AGE_RATING_17_PLUS" ], "type": "string", "description": "The age rating of this universe.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | AGE_RATING_UNSPECIFIED | The age rating is not set. |\n | AGE_RATING_ALL | Supported for all users. |\n | AGE_RATING_9_PLUS | Supported for users aged 9 and up. |\n | AGE_RATING_13_PLUS | Supported for users aged 13 and up. |\n | AGE_RATING_17_PLUS | Supported for users aged 17 and up. |", "format": "enum" }, "privateServerPriceRobux": { "type": "integer", "description": "Represents the price in Robux of private servers.\n\nIf unset, private servers are not supported for this universe.\n\nCan only be disabled when using a field mask.\n\nSetting to null will disable all active private servers.\n\nChanging the price will cancel all private server subscriptions.", "format": "int32" }, "desktopEnabled": { "example": true, "type": "boolean", "description": "Whether or not players can join the Experience via Desktop." }, "mobileEnabled": { "example": true, "type": "boolean", "description": "Whether or not players can join the Experience via Mobile." }, "tabletEnabled": { "example": true, "type": "boolean", "description": "Whether or not players can join the Experience via Tablet." }, "consoleEnabled": { "example": true, "type": "boolean", "description": "Whether or not players can join the Experience via Console." }, "vrEnabled": { "example": true, "type": "boolean", "description": "Whether or not players can join the Experience via VR." }, "rootPlace": { "readOnly": true, "type": "string", "description": "The resource path of the root place of this universe\nFormat: universes/{universe_id}/places/{place_id}" }, "templateRootPlace": { "writeOnly": true, "example": "universes/{universe_id}/places/{place_id}", "type": "string", "description": "The resource path of the template place, used for CreateUniverse.\nThe root place of the newly-created universe will be a clone of this\ntemplate. A list of the valid template places can be obtained from\nListTemplatePlaces. Format: universes/{universe_id}/places/{place_id}", "x-immutable": true } }, "description": "Represents a Roblox experience.", "x-aep-resource": { "patterns": ["universes/{universe_id}"], "plural": "universes", "singular": "universe" }, "x-resource": true, "x-oneOf": { "ConsoleEnabled": ["consoleEnabled"], "DesktopEnabled": ["desktopEnabled"], "MobileEnabled": ["mobileEnabled"], "PrivateServerPriceRobux": ["privateServerPriceRobux"], "TabletEnabled": ["tabletEnabled"], "VoiceChatEnabled": ["voiceChatEnabled"], "VrEnabled": ["vrEnabled"], "owner": ["user", "group"] } }, "Universe_SocialLink": { "type": "object", "properties": { "title": { "type": "string", "description": "The title of the social link." }, "uri": { "type": "string", "description": "The uri of the social link." } }, "description": "A social link that may be associated with the universe.\n\nCan only be removed when using a field mask." }, "UpdateInstanceMetadata": { "type": "object", "properties": {}, "description": "Represents metadata about the long-running operation corresponding to a\nUpdateInstance request.\n\nThis is the type of the `Operation.metadata` field in the response to\n`GetOperation` requests for UpdateInstance operations." }, "User": { "type": "object", "properties": { "path": { "example": "users/123", "type": "string", "description": "The resource path of the user.\n\nFormat: `users/{user_id}`" }, "createTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp at which the user was created.", "format": "date-time" }, "id": { "readOnly": true, "example": "123456", "type": "string", "description": "Unique ID that identifies a user in Roblox." }, "name": { "example": "exampleUser", "type": "string", "description": "Unique username for a user in Roblox." }, "displayName": { "example": "userDefinedName", "type": "string", "description": "Display name for the user." }, "about": { "example": "Example User's bio", "type": "string", "description": "User-defined information about themselves." }, "locale": { "example": "en-US", "type": "string", "description": "Current locale selected by the user. Returns IETF language code." }, "premium": { "readOnly": true, "example": true, "type": "boolean", "description": "Whether the user is a premium user." }, "idVerified": { "readOnly": true, "example": true, "type": "boolean", "description": "Specifies if the user is identity-verified. Verification includes, but\nisn't limited to, non-VoIP phone numbers or government IDs.\n\nTo access this data, you need an API key / OAuth token with the following\nscope: user.advanced:read" }, "socialNetworkProfiles": { "$ref": "#/components/schemas/User_SocialNetworkProfiles", "description": "User's social network profiles and visibility." } }, "description": "Represents any registered user of Roblox.", "x-aep-resource": { "patterns": ["users/{user_id}"], "plural": "users", "singular": "user" }, "x-resource": true }, "UserNotification": { "type": "object", "properties": { "path": { "example": "users/123/notifications/01234567-ABCD-1234-ABCD-0123456789AB", "type": "string", "description": "The resource path of the user notification.\n\nFormat: `users/{user_id}/notifications/{user_notification_id}`" }, "id": { "readOnly": true, "example": "a6746f2e-2cc6-11ee-be56-0242ac120002", "type": "string", "description": "A unique UUID of the user notification." }, "source": { "$ref": "#/components/schemas/UserNotification_Source", "description": "The source of the notification." }, "payload": { "$ref": "#/components/schemas/UserNotification_Payload", "description": "The notification payload." } }, "description": "Represents a notification sent to a user.", "x-aep-resource": { "patterns": ["users/{user_id}/notifications/{user_notification_id}"], "plural": "user-notifications", "singular": "user-notification" }, "x-resource": true }, "UserNotification_Payload": { "type": "object", "properties": { "type": { "writeOnly": true, "example": "TYPE_UNSPECIFIED", "enum": ["TYPE_UNSPECIFIED", "MOMENT"], "type": "string", "description": "The type of notification.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | TYPE_UNSPECIFIED | The default value. This value is unused. |\n | MOMENT | A notification type representing a moment. |", "format": "enum" }, "messageId": { "writeOnly": true, "example": "5dd7024b-68e3-ac4d-8232-4217f86ca244", "type": "string", "description": "An ID that represents a customizable notification message template\nthat you create in Creator Dashboard.\n\nThe message can contain customizable parameters that you can specify\nvalues for. For example, `Your {egg_name} just hatched` has an\n`egg_name` parameter. See the `parameters` field for more\ninformation." }, "parameters": { "writeOnly": true, "type": "object", "additionalProperties": { "$ref": "#/components/schemas/UserNotification_Payload_ParameterValue" }, "description": "A map of parameters used to render a notification message template.\n\nFor example, given a template of `Your {egg_name} just hatched.` with\nparameters of `[{\"egg_name\": {\"string_value\": \"royal egg\"}}]`, the\nrendered notification message is: `Your royal egg just hatched.`" }, "joinExperience": { "$ref": "#/components/schemas/UserNotification_Payload_JoinExperience", "description": "Call-to-action that represents joining an experience." }, "analyticsData": { "$ref": "#/components/schemas/UserNotification_Payload_AnalyticsData", "description": "Data for how analytics are reported." } }, "description": "Details about the notification.", "x-oneOf": { "callToAction": ["joinExperience"] } }, "UserNotification_Payload_AnalyticsData": { "type": "object", "properties": { "category": { "writeOnly": true, "example": "Bronze egg hatched", "type": "string", "description": "Category of the notification, used to group analytics data.\n\nFor example, \"Golden egg hatched\", \"Bronze egg hatched\", \"Volcano\neruptions\"." } }, "description": "Data for how analytics are reported." }, "UserNotification_Payload_JoinExperience": { "type": "object", "properties": { "launchData": { "writeOnly": true, "example": "Launch Data", "type": "string", "description": "Arbitrary data that is available to an experience\nwhen a user joins the experience with the notification.\n\nThis value is limited to a maximum of 200 bytes." } }, "description": "A call-to-action that represents joining an experience." }, "UserNotification_Payload_ParameterValue": { "type": "object", "properties": { "stringValue": { "example": "bronze egg", "type": "string", "description": "A string value." }, "int64Value": { "example": 10101010, "type": "integer", "description": "An int64 value.", "format": "int64" } }, "description": "A parameter value that a template uses to render a notification message.", "x-oneOf": { "value": ["stringValue", "int64Value"] } }, "UserNotification_Source": { "type": "object", "properties": { "universe": { "writeOnly": true, "example": "universes/96623001", "type": "string", "description": "The universe from which the user notification is sent." } }, "description": "The source of the notification.", "x-oneOf": { "source": ["universe"] } }, "UserRestriction": { "type": "object", "properties": { "path": { "example": "universes/123/user-restrictions/123", "type": "string", "description": "The resource path of the user restriction.\n\nFormats:\n* `universes/{universe_id}/user-restrictions/{user_restriction_id}`\n* `universes/{universe_id}/places/{place_id}/user-restrictions/{user_restriction_id}`" }, "updateTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The timestamp when the user restriction was last updated.", "format": "date-time" }, "user": { "readOnly": true, "example": "users/156", "type": "string", "description": "The affected user." }, "gameJoinRestriction": { "$ref": "#/components/schemas/UserRestriction_GameJoinRestriction", "description": "The user is banned from the parent universe or place." } }, "description": "Represents a restriction on a user.", "x-aep-resource": { "patterns": [ "universes/{universe_id}/user-restrictions/{user_restriction_id}", "universes/{universe_id}/places/{place_id}/user-restrictions/{user_restriction_id}" ], "plural": "user-restrictions", "singular": "user-restriction" }, "x-resource": true }, "UserRestrictionLog": { "type": "object", "properties": { "user": { "example": "users/156", "type": "string", "description": "The user to which this restriction update is applied." }, "place": { "example": "places/456", "type": "string", "description": "The place in which a user restriction was explicitly updated.\nThis field is empty if the log captures a state change applied on the\nuniverse level." }, "moderator": { "$ref": "#/components/schemas/UserRestrictionLog_Moderator", "description": "The moderator who issued the state change." }, "createTime": { "example": "2023-07-05T12:34:56Z", "type": "string", "description": "When the change happened.", "format": "date-time" }, "active": { "example": true, "type": "boolean", "description": "Whether the restriction was active after the action\nrepresented by this log." }, "startTime": { "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The start time of the restriction.", "format": "date-time" }, "duration": { "example": "3s", "type": "string", "description": "The duration of the restriction.\n\nIf not specified, the restriction is permanent.", "format": "duration" }, "privateReason": { "example": "some private reason", "type": "string", "description": "The reason the restriction was created.\n\nThis field *is not* displayed to the user." }, "displayReason": { "example": "some display reason", "type": "string", "description": "The user-facing reason the restriction was created.\n\nThis field *is* displayed to the user." }, "restrictionType": { "$ref": "#/components/schemas/UserRestrictionLog_RestrictionType", "description": "The type of restriction for this log." }, "excludeAltAccounts": { "example": true, "type": "boolean", "description": "When true, the restriction will not be be propagated to alt accounts.\n\nDefaults to false." } }, "description": "An entity capturing a state change on a type of restriction." }, "UserRestrictionLog_Moderator": { "type": "object", "properties": { "robloxUser": { "example": "users/156", "type": "string", "description": "A moderator identified by the User resource." }, "gameServerScript": { "$ref": "#/components/schemas/UserRestrictionLog_Moderator_GameServerScript", "description": "A moderator identified as a Lua script on game server." } }, "description": "An entity capturing the author of a state change.", "x-oneOf": { "kind": ["robloxUser", "gameServerScript"] } }, "UserRestrictionLog_Moderator_GameServerScript": { "type": "object", "properties": {}, "description": "Represents a user-written Lua script executed on game server." }, "UserRestrictionLog_RestrictionType": { "type": "object", "properties": { "gameJoinRestriction": { "$ref": "#/components/schemas/UserRestrictionLog_RestrictionType_GameJoinRestriction", "description": "Represents game join restriction as one of the restriction type." } }, "description": "The type of restriction.", "x-oneOf": { "kind": ["gameJoinRestriction"] } }, "UserRestrictionLog_RestrictionType_GameJoinRestriction": { "type": "object", "properties": {}, "description": "Represents game join restriction." }, "UserRestriction_GameJoinRestriction": { "type": "object", "properties": { "active": { "example": true, "type": "boolean", "description": "By default, this is false since a user's access to an experience\nis not restricted to begin with.\n\nIf this is set to true at the experience level, this becomes true\nautomatically at the place level for all places in the experience." }, "startTime": { "readOnly": true, "example": "2023-07-05T12:34:56Z", "type": "string", "description": "The start time of the restriction.", "format": "date-time" }, "duration": { "example": "3s", "type": "string", "description": "The duration of the restriction.\n\nIf not specified, the restriction is permanent. If specified, the range\nmust be from 1 second to 315,576,000,000 seconds, inclusive. Durations\nwith sub-second precision are not permitted.", "format": "duration" }, "privateReason": { "example": "some private reason", "type": "string", "description": "The reason the restriction was created.\n\nThis field *is not* displayed to the user. 1,000 character maximum." }, "displayReason": { "example": "some display reason", "type": "string", "description": "The user-facing reason the restriction was created.\n\nThis field *is* displayed to the user. 400 character maximum." }, "excludeAltAccounts": { "example": true, "type": "boolean", "description": "When true, the restriction will not be be propagated to alt accounts.\n\nDefaults to false." }, "inherited": { "readOnly": true, "example": true, "type": "boolean", "description": "This is true when the restriction doesn't directly apply to the parent\nresource, but to some other ancestor resource.\n\nFor example, if a user restriction exists on universes/123, then any\nplaces within that universe from which the user was not explicitly\nrestricted will have an inherited restriction and this field will be\n`true`." } }, "description": "A restriction means the affected user will not be able to join the parent\nuniverse or place, and will be kicked if currently joined." }, "User_SocialNetworkProfiles": { "type": "object", "properties": { "facebook": { "type": "string", "description": "Facebook profile URI." }, "twitter": { "type": "string", "description": "Twitter profile URI." }, "youtube": { "type": "string", "description": "YouTube profile URI." }, "twitch": { "type": "string", "description": "Twitch profile URI." }, "guilded": { "type": "string", "description": "Guilded profile URI." }, "visibility": { "example": "SOCIAL_NETWORK_VISIBILITY_UNSPECIFIED", "enum": [ "SOCIAL_NETWORK_VISIBILITY_UNSPECIFIED", "NO_ONE", "FRIENDS", "FRIENDS_AND_FOLLOWING", "FRIENDS_FOLLOWING_AND_FOLLOWERS", "EVERYONE" ], "type": "string", "description": "Visibility of the social network profiles.\n\nTo access this data, you need an API key / OAuth token with the following\nscope: user.social:read\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | SOCIAL_NETWORK_VISIBILITY_UNSPECIFIED | Default SocialNetworkVisibility. |\n | NO_ONE | No one |\n | FRIENDS | Friends only |\n | FRIENDS_AND_FOLLOWING | Friends and other users the user follows |\n | FRIENDS_FOLLOWING_AND_FOLLOWERS | Friends, other users the user follows, and other users who follow the user |\n | EVERYONE | Everyone |", "format": "enum" } }, "description": "Social network profiles of a user." }, "roblox.engine.Folder": { "type": "object", "properties": {}, "description": "A simple container used to hold and organize Roblox instances." }, "roblox.engine.Instance": { "type": "object", "properties": { "Id": { "type": "string", "description": "The unique identifier for an instance. \nFormat: lower-case hexadecimal characters\nExample: 44b188da-ce63-2b47-02e9-c68d004b5664" }, "Parent": { "type": "string", "description": "The parent of the Instance.\nFormat: lower-case hexadecimal characters\nExample: 44b188da-ce63-2b47-02e9-c68d004b5664" }, "Name": { "type": "string", "description": "A non-unique identifier of the Instance." }, "Details": { "$ref": "#/components/schemas/roblox.engine.InstanceDetails", "description": "Properties specific to the type of the instance." } }, "description": "Instance is the base class for all classes in the Roblox class hierarchy.", "x-oneOf": { "Details": ["Details"], "Name": ["Name"] } }, "roblox.engine.InstanceDetails": { "type": "object", "properties": { "Folder": { "$ref": "#/components/schemas/roblox.engine.Folder", "description": "A simple container used to hold and organize Roblox instances." }, "LocalScript": { "$ref": "#/components/schemas/roblox.engine.LocalScript", "description": "A LocalScript is a Lua code container that runs its contents on the client (player's device) instead of the server." }, "ModuleScript": { "$ref": "#/components/schemas/roblox.engine.ModuleScript", "description": "A ModuleScript is a type of Lua source container that runs once and must return exactly one value." }, "Script": { "$ref": "#/components/schemas/roblox.engine.Script", "description": "A Script is a Lua code container that can access server-side objects, properties, and events, such as to award badges to players using BadgeService, while LocalScripts on the client cannot." } }, "description": "Contains instance type-specific details about a data model instance.", "x-oneOf": { "kind": ["Folder", "LocalScript", "ModuleScript", "Script"] } }, "roblox.engine.LocalScript": { "type": "object", "properties": { "Enabled": { "example": true, "type": "boolean", "description": "Determines whether a BaseScript will run or not." }, "RunContext": { "example": "Legacy", "enum": ["Legacy", "Server", "Client", "Plugin"], "type": "string", "description": "Determines the context under which the script will run.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | Legacy | Runs in legacy script containers dependent on the type of script used, such as LocalScript or Script. |\n | Server | Runs on the server. |\n | Client | Runs on the client. |\n | Plugin | Runs as a descendant of Plugin instances. |", "format": "enum" }, "Source": { "type": "string", "description": "The code to be executed." } }, "description": "A LocalScript is a Lua code container that runs its contents on the client (player's device) instead of the server.", "x-oneOf": { "Enabled": ["Enabled"], "RunContext": ["RunContext"], "Source": ["Source"] } }, "roblox.engine.ModuleScript": { "type": "object", "properties": { "Source": { "type": "string", "description": "The code to be executed." } }, "description": "A ModuleScript is a type of Lua source container that runs once and must return exactly one value.", "x-oneOf": { "Source": ["Source"] } }, "roblox.engine.Script": { "type": "object", "properties": { "Enabled": { "example": true, "type": "boolean", "description": "Determines whether the BaseScript will run or not." }, "RunContext": { "example": "Legacy", "enum": ["Legacy", "Server", "Client", "Plugin"], "type": "string", "description": "Determines the context in which the script will run.\n\nPossible values:\n\n | Value | Description |\n | --- | --- |\n | Legacy | Runs in legacy script containers dependent on the type of script used, such as LocalScript or Script. |\n | Server | Runs on the server. |\n | Client | Runs on the client. |\n | Plugin | Runs as a descendant of Plugin instances. |", "format": "enum" }, "Source": { "type": "string", "description": "The code to be executed." } }, "description": "A Script is a Lua code container that can access server-side objects, properties, and events, such as to award badges to players using BadgeService, while LocalScripts on the client cannot.", "x-oneOf": { "Enabled": ["Enabled"], "RunContext": ["RunContext"], "Source": ["Source"] } } } }, "tags": [ { "name": "Cloud" } ], "x-categories": [ "Data and memory stores", "Luau execution", "Monetization", "Universes and places", "Users and groups" ] }