mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-23 14:01:37 +00:00
update rules
This commit is contained in:
parent
4c390fdd37
commit
d5522b2fef
8549 changed files with 11783 additions and 1888 deletions
7
.cursor/rules/roblox/en-us/reference/cloud/README.md
Normal file
7
.cursor/rules/roblox/en-us/reference/cloud/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# Open Cloud reference
|
||||
|
||||
The Open Cloud reference documentation at [https://create.roblox.com/docs/cloud/reference](https://create.roblox.com/docs/cloud/reference) is rendered from the JSON files in this directory, which use various versions of the OpenAPI specification (generally 3.0.4).
|
||||
|
||||
- Because these JSON files are generated from source files, we don't accept pull requests on them.
|
||||
|
||||
- Download [openapi.json](openapi.json) in this folder for a full OpenAPI document of the Roblox Cloud APIs.
|
||||
|
|
@ -0,0 +1,285 @@
|
|||
{
|
||||
"openapi": "3.0.4",
|
||||
"info": {
|
||||
"title": "Roblox.AssetPermissionsApi",
|
||||
"version": "1.0",
|
||||
"x-roblox-extensions-version": "1.0.0"
|
||||
},
|
||||
"paths": {
|
||||
"/asset-permissions-api/v1/assets/permissions": {
|
||||
"patch": {
|
||||
"tags": ["AssetPermissions"],
|
||||
"summary": "Grant a subject permission to multiple assets.\n \nAuthorization is required to grant permissions to the subject and asset IDs in the request.",
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json-patch+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/BatchGrantPermissionsRequest"
|
||||
}
|
||||
},
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/BatchGrantPermissionsRequest"
|
||||
}
|
||||
},
|
||||
"text/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/BatchGrantPermissionsRequest"
|
||||
}
|
||||
},
|
||||
"application/*+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/BatchGrantPermissionsRequest"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/BatchGrantPermissionsResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"500": {
|
||||
"description": "Internal Server Error",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 100
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "asset-permissions:write"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {
|
||||
"AssetAction": {
|
||||
"enum": [
|
||||
"Invalid",
|
||||
"Edit",
|
||||
"Use",
|
||||
"Download",
|
||||
"CopyFromRcc",
|
||||
"UpdateFromRcc"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "Asset permission actions that can be granted.\n \nActions:\n* Invalid - default value, not a valid action.\n* Edit - grants the ability to edit and manage the asset.\n* Use - grants the ability to use the asset.\n* Download - grants the ability to download the asset.\n* CopyFromRcc - grants the ability to copy the asset from RCC, used to enable AssetService:CreatePlaceAsync().\n* UpdateFromRcc - grants the ability to update the asset from RCC, used to enable AssetService:UpdatePlaceAsync().\n \nValid AssetType - SubjectType - Action combinations:\n* Animation - Group/User/Universe - Use\n* Audio - Group/User/Universe - Use\n* Decal - All/Group/User/Universe - Use\n* Image - All/Group/User/Universe - Use\n* Mesh - All/Group/User/Universe - Use\n* MeshPart - Group/User/Universe - Use\n* Model - User - Edit\n * Group/User/Universe - Use\n* Place - All - Download\n * Universe - CopyFromRcc/UpdateFromRcc\n* Video - Group/User/Universe - Use."
|
||||
},
|
||||
"AssetGrantRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"assetId": {
|
||||
"type": "integer",
|
||||
"description": "The asset ID to grant permission to.",
|
||||
"format": "int64"
|
||||
},
|
||||
"grantToDependencies": {
|
||||
"type": "boolean",
|
||||
"description": "Whether to extend the permission grant to dependencies of the asset. This will be done asynchronously after the main grant."
|
||||
},
|
||||
"parentVersionNumber": {
|
||||
"type": "integer",
|
||||
"description": "The version number of 'assetId' to use for determining asset dependencies.",
|
||||
"format": "int32"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Asset grant requests with additional options to grant to dependencies."
|
||||
},
|
||||
"BatchGrantPermissionsRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subjectType": {
|
||||
"$ref": "#/components/schemas/SubjectType"
|
||||
},
|
||||
"subjectId": {
|
||||
"type": "string",
|
||||
"description": "The subject ID to grant to. Must be empty for SubjectType 'All'.",
|
||||
"nullable": true
|
||||
},
|
||||
"action": {
|
||||
"$ref": "#/components/schemas/AssetAction"
|
||||
},
|
||||
"requests": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/AssetGrantRequest"
|
||||
},
|
||||
"description": "Array of asset grant requests. If populated, 'requests' will override 'assetIds'.",
|
||||
"nullable": true
|
||||
},
|
||||
"assetIds": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"description": "[Deprecated] The list of asset IDs to grant this permission to. 'requests' will be prioritized over this list.",
|
||||
"nullable": true,
|
||||
"deprecated": true
|
||||
},
|
||||
"enableDeepAccessCheck": {
|
||||
"type": "boolean",
|
||||
"description": "[Do not use] An optional boolean to indicate if a deep access check should be done. This is not intended for public use."
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Request object to grant one permission to multiple assets."
|
||||
},
|
||||
"BatchGrantPermissionsResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"successAssetIds": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"description": "The list of asset IDs that granted successfully.",
|
||||
"nullable": true
|
||||
},
|
||||
"errors": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/GrantPermissionError"
|
||||
},
|
||||
"description": "The list of grants that had errors.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Response object to grant one permission to multiple assets."
|
||||
},
|
||||
"Error": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {
|
||||
"$ref": "#/components/schemas/ErrorCode"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "The human readable error message.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "The error object for results."
|
||||
},
|
||||
"ErrorCode": {
|
||||
"enum": [
|
||||
"UnknownError",
|
||||
"InvalidRequest",
|
||||
"AssetNotFound",
|
||||
"CannotManageAsset",
|
||||
"PublicAssetCannotBeGrantedTo",
|
||||
"CannotManageSubject",
|
||||
"SubjectNotFound",
|
||||
"AssetTypeNotEnabled",
|
||||
"PermissionLimitReached",
|
||||
"DependenciesLimitReached"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "Enums for customized error code in error responses."
|
||||
},
|
||||
"ErrorResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"error": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "The error object for responses."
|
||||
},
|
||||
"GrantPermissionError": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"assetId": {
|
||||
"type": "integer",
|
||||
"description": "Failed asset ID.",
|
||||
"format": "int64"
|
||||
},
|
||||
"code": {
|
||||
"$ref": "#/components/schemas/ErrorCode"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Single error for BatchGrantPermissionsResponse."
|
||||
},
|
||||
"SubjectType": {
|
||||
"enum": ["Invalid", "User", "Group", "GroupRoleset", "All", "Universe"],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"securitySchemes": {
|
||||
"roblox-legacy-cookie": {
|
||||
"type": "apiKey",
|
||||
"description": "A browser cookie that represents the identity of a Roblox user. DO NOT SHARE THIS. Sharing this will allow someone to log in as you and to steal your Robux and items. When possible, use API keys with the x-api-key header or OAuth 2.0 instead for authentication.",
|
||||
"in": "cookie",
|
||||
"name": ".ROBLOSECURITY"
|
||||
},
|
||||
"roblox-api-key": {
|
||||
"type": "apiKey",
|
||||
"description": "A configurable key that allows granular access to Roblox resources. See https://create.roblox.com/docs/cloud/auth/api-keys for more information.",
|
||||
"in": "header",
|
||||
"name": "x-api-key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://apis.roblox.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
1065
.cursor/rules/roblox/en-us/reference/cloud/assets/v1.json
Normal file
1065
.cursor/rules/roblox/en-us/reference/cloud/assets/v1.json
Normal file
File diff suppressed because it is too large
Load diff
9823
.cursor/rules/roblox/en-us/reference/cloud/cloud.docs.json
Normal file
9823
.cursor/rules/roblox/en-us/reference/cloud/cloud.docs.json
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,718 @@
|
|||
{
|
||||
"openapi": "3.0.1",
|
||||
"info": {
|
||||
"title": "Ordered data stores (beta)",
|
||||
"description": "This page includes reference documentation for working with the Open Cloud v1 API for ordered data stores. For information on using the v2 API, see the [usage guide](/cloud/guides/data-stores/index.md).",
|
||||
"version": "0.0.1",
|
||||
"x-roblox-extensions-version": "1.0.0"
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://apis.roblox.com/ordered-data-stores"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"/v1/universes/{universeId}/orderedDataStores/{orderedDataStore}/scopes/{scope}/entries": {
|
||||
"get": {
|
||||
"tags": ["OrderedDataStores"],
|
||||
"description": "Returns a list of entries from an ordered data store.",
|
||||
"operationId": "OrderedDataStores_ListEntries",
|
||||
"x-roblox-cloud-api-operation-name": "List",
|
||||
"x-roblox-stability": "BETA",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The identifier of the experience with ordered data stores that you want to access. You can find your experience's universe ID on Creator Hub.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "orderedDataStore",
|
||||
"in": "path",
|
||||
"description": "The name of the target ordered data store.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "scope",
|
||||
"in": "path",
|
||||
"description": "The name of the data store scope. See [Scopes](/cloud/guides/data-stores/request-handling.md#scopes).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "max_page_size",
|
||||
"in": "query",
|
||||
"description": "The maximum number of entries to return. The service may return fewer than this value. The default value is `10`. The maximum value is `100`, and any input above 100 is coerced to `100`.",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int32"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "page_token",
|
||||
"in": "query",
|
||||
"description": "A page token received from a previous `List` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `List` must match the call providing the page token.",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "order_by",
|
||||
"in": "query",
|
||||
"description": "The enumeration direction. The order by default is ascending. Input a `desc` suffix for descending.",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "filter",
|
||||
"in": "query",
|
||||
"description": "The range of qualifying values of entries to return. See [Filters](/cloud/guides/data-stores/request-handling.md#filters).",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ListEntriesResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request: invalid orderedDataStore, scope or entry name or encoding."
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden: studio access to APIs is not allowed, incorrect API key or scope."
|
||||
},
|
||||
"429": {
|
||||
"description": "Too Many Requests."
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": ["universe.ordered-data-store.scope.entry:read"]
|
||||
}
|
||||
],
|
||||
"x-roblox-scopes": [
|
||||
{ "name": "universe.ordered-data-store.scope.entry:read" }
|
||||
],
|
||||
"x-roblox-cloud-api-operation-code-samples": [
|
||||
{
|
||||
"language": "curl",
|
||||
"script": "curl --location 'https://apis.roblox.com/ordered-data-stores/v1/universes/<universeId>/orderedDataStores/<orderedDataStore>/scopes/<scope>/entries' \\\n --header 'x-api-key: <insert-api-key>' \n"
|
||||
}
|
||||
],
|
||||
"x-roblox-rate-limits": {
|
||||
"description": "See [Throttling](/cloud/guides/data-stores/throttling.md)."
|
||||
},
|
||||
"x-roblox-recommended-alternatives": [
|
||||
{
|
||||
"url": "https://apis.roblox.com/cloud/v2/universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{scope_id}/entries",
|
||||
"httpMethod": "GET"
|
||||
}
|
||||
]
|
||||
},
|
||||
"post": {
|
||||
"tags": ["OrderedDataStores"],
|
||||
"description": "Creates a new entry with the content value provided.",
|
||||
"operationId": "OrderedDataStores_CreateEntry",
|
||||
"x-roblox-cloud-api-operation-name": "Create",
|
||||
"x-roblox-stability": "BETA",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The identifier of the experience with ordered data stores that you want to access. You can find your experience's universe ID on Creator Hub.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "orderedDataStore",
|
||||
"in": "path",
|
||||
"description": "The name of the ordered data store.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "scope",
|
||||
"in": "path",
|
||||
"description": "The name of the data store scope. See [Scopes](/cloud/guides/data-stores/request-handling.md#scopes).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "id",
|
||||
"in": "query",
|
||||
"description": "The name of the entry.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/CreateEntryRequest"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": true
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Entry"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request: invalid orderedDataStore, scope or entry name or encoding."
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden: studio access to APIs is not allowed, incorrect API key or scope."
|
||||
},
|
||||
"404": {
|
||||
"description": "Not found."
|
||||
},
|
||||
"429": {
|
||||
"description": "Too Many Requests."
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": ["universe.ordered-data-store.scope.entry:write"]
|
||||
}
|
||||
],
|
||||
"x-roblox-scopes": [
|
||||
{ "name": "universe.ordered-data-store.scope.entry:write" }
|
||||
],
|
||||
"x-roblox-cloud-api-operation-code-samples": [
|
||||
{
|
||||
"language": "curl",
|
||||
"script": "curl --location 'https://apis.roblox.com/ordered-data-stores/v1/universes/<universeId>/orderedDataStores/<orderedDataStore>/scopes/<scope>/entries?id=<id>' \\\n--header 'x-api-key: <insert-api-key>' \\\n--header 'Content-Type: application/json' \\\n--data '{ \n \"value\": <long> \n}'\n"
|
||||
}
|
||||
],
|
||||
"x-roblox-rate-limits": {
|
||||
"description": "See [Throttling](/cloud/guides/data-stores/throttling.md)."
|
||||
},
|
||||
"x-roblox-recommended-alternatives": [
|
||||
{
|
||||
"url": "https://apis.roblox.com/cloud/v2/universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{scope_id}/entries",
|
||||
"httpMethod": "POST"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/v1/universes/{universeId}/orderedDataStores/{orderedDataStore}/scopes/{scope}/entries/{entry}": {
|
||||
"get": {
|
||||
"tags": ["OrderedDataStores"],
|
||||
"description": "Gets and returns the specified entry.",
|
||||
"operationId": "OrderedDataStores_GetEntry",
|
||||
"x-roblox-cloud-api-operation-name": "Get",
|
||||
"x-roblox-stability": "BETA",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The identifier of the experience with ordered data stores that you want to access. You can find your experience's universe ID on Creator Hub.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "orderedDataStore",
|
||||
"in": "path",
|
||||
"description": "The name of the ordered data store.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "scope",
|
||||
"in": "path",
|
||||
"description": "The name of the data store scope. See [Scopes](/cloud/guides/data-stores/request-handling.md#scopes).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "entry",
|
||||
"in": "path",
|
||||
"description": "The entry ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Entry"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request: invalid orderedDataStore, scope or entry name or encoding."
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden: studio access to APIs is not allowed, incorrect API key or scope."
|
||||
},
|
||||
"404": {
|
||||
"description": "Not found."
|
||||
},
|
||||
"429": {
|
||||
"description": "Too Many Requests."
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": ["universe.ordered-data-store.scope.entry:read"]
|
||||
}
|
||||
],
|
||||
"x-roblox-scopes": [
|
||||
{ "name": "universe.ordered-data-store.scope.entry:read" }
|
||||
],
|
||||
"x-roblox-cloud-api-operation-code-samples": [
|
||||
{
|
||||
"language": "curl",
|
||||
"script": "curl --location 'https://apis.roblox.com/ordered-data-stores/v1/universes/<universeId>/orderedDataStores/<orderedDataStore>/scopes/<scope>/entries/<entry>' \\\n --header 'x-api-key: <insert-api-key>' \n"
|
||||
}
|
||||
],
|
||||
"x-roblox-rate-limits": {
|
||||
"description": "See [Throttling](/cloud/guides/data-stores/throttling.md)."
|
||||
},
|
||||
"x-roblox-recommended-alternatives": [
|
||||
{
|
||||
"url": "https://apis.roblox.com/cloud/v2/universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{scope_id}/entries/{entry_id}",
|
||||
"httpMethod": "GET"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delete": {
|
||||
"tags": ["OrderedDataStores"],
|
||||
"description": "Deletes the specified entry. Unlike standard data stores, which mark entries for deletion, ordered data store entries are deleted immediately.",
|
||||
"operationId": "OrderedDataStores_DeleteEntry",
|
||||
"x-roblox-cloud-api-operation-name": "Delete",
|
||||
"x-roblox-stability": "BETA",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The identifier of the experience with ordered data stores that you want to access. You can find your experience's universe ID on Creator Hub.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "orderedDataStore",
|
||||
"in": "path",
|
||||
"description": "The name of the ordered data store.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "scope",
|
||||
"in": "path",
|
||||
"description": "The name of the data store scope. See [Scopes](/cloud/guides/data-stores/request-handling.md#scopes).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "entry",
|
||||
"in": "path",
|
||||
"description": "The entry ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Success: the entry was successfully deleted or didn't exist."
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request: invalid orderedDataStore, scope or entry name or encoding."
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden: Studio access to APIs is not allowed, incorrect API key or scope."
|
||||
},
|
||||
"404": {
|
||||
"description": "Not found."
|
||||
},
|
||||
"429": {
|
||||
"description": "Too Many Requests."
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": ["universe.ordered-data-store.scope.entry:write"]
|
||||
}
|
||||
],
|
||||
"x-roblox-scopes": [
|
||||
{ "name": "universe.ordered-data-store.scope.entry:write" }
|
||||
],
|
||||
"x-roblox-cloud-api-operation-code-samples": [
|
||||
{
|
||||
"language": "curl",
|
||||
"script": "curl --location --request DELETE 'https://apis.roblox.com/ordered-data-stores/v1/universes/<universeId>/orderedDataStores/<orderedDataStore>/scopes/<scope>/entries/<entry>' \\\n --header 'x-api-key: <insert-api-key>' \n"
|
||||
}
|
||||
],
|
||||
"x-roblox-rate-limits": {
|
||||
"description": "See [Throttling](/cloud/guides/data-stores/throttling.md)."
|
||||
},
|
||||
"x-roblox-recommended-alternatives": [
|
||||
{
|
||||
"url": "https://apis.roblox.com/cloud/v2/universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{scope_id}/entries/{entry_id}",
|
||||
"httpMethod": "DELETE"
|
||||
}
|
||||
]
|
||||
},
|
||||
"patch": {
|
||||
"tags": ["OrderedDataStores"],
|
||||
"description": "Updates an entry value and returns the updated entry.",
|
||||
"operationId": "OrderedDataStores_UpdateEntry",
|
||||
"x-roblox-cloud-api-operation-name": "Update",
|
||||
"x-roblox-stability": "BETA",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The identifier of the experience with ordered data stores that you want to access. You can find your experience's universe ID on Creator Hub.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "orderedDataStore",
|
||||
"in": "path",
|
||||
"description": "The name of the ordered data store.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "scope",
|
||||
"in": "path",
|
||||
"description": "The name of the data store scope. See [Scopes](/cloud/guides/data-stores/request-handling.md#scopes).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "entry",
|
||||
"in": "path",
|
||||
"description": "The entry ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "allow_missing",
|
||||
"in": "query",
|
||||
"description": "The flag to allow the creation of an entry if the entry doesn't exist. See [Allow missing flags](/cloud/guides/data-stores/request-handling.md.md#allow-missing-flags).",
|
||||
"schema": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/UpdateEntryRequest"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": true
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Entry"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request: invalid orderedDataStore, scope or entry name or encoding."
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden: studio access to APIs is not allowed, incorrect API key or scope."
|
||||
},
|
||||
"404": {
|
||||
"description": "Not found."
|
||||
},
|
||||
"409": {
|
||||
"description": "Aborted."
|
||||
},
|
||||
"429": {
|
||||
"description": "Too Many Requests."
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": ["universe.ordered-data-store.scope.entry:write"]
|
||||
}
|
||||
],
|
||||
"x-roblox-scopes": [
|
||||
{ "name": "universe.ordered-data-store.scope.entry:write" }
|
||||
],
|
||||
"x-roblox-cloud-api-operation-code-samples": [
|
||||
{
|
||||
"language": "curl",
|
||||
"script": "curl --location --request PATCH 'https://apis.roblox.com/ordered-data-stores/v1/universes/<universeId>/orderedDataStores/<orderedDataStore>/scopes/<scope>/entries/<entry>' \\\n--header 'x-api-key: <insert-api-key>' \\\n--header 'Content-Type: application/json' \\\n--data '{ \n \"value\": <long> \n}'\n"
|
||||
}
|
||||
],
|
||||
"x-roblox-rate-limits": {
|
||||
"description": "See [Throttling](/cloud/guides/data-stores/throttling.md)."
|
||||
},
|
||||
"x-roblox-recommended-alternatives": [
|
||||
{
|
||||
"url": "https://apis.roblox.com/cloud/v2/universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{scope_id}/entries/{entry_id}",
|
||||
"httpMethod": "PATCH"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/v1/universes/{universeId}/orderedDataStores/{orderedDataStore}/scopes/{scope}/entries/{entry}:increment": {
|
||||
"post": {
|
||||
"tags": ["OrderedDataStores"],
|
||||
"description": "Increments the value of the key by the provided amount and returns the updated entry.\n\nKnown issue: Entry values can increment past the valid range and this may persist in the backend. Returned values will clamp to the valid range.",
|
||||
"operationId": "OrderedDataStores_IncrementEntry",
|
||||
"x-roblox-cloud-api-operation-name": "Increment",
|
||||
"x-roblox-stability": "BETA",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The identifier of the experience with ordered data stores that you want to access. You can find your experience's universe ID on Creator Hub.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "orderedDataStore",
|
||||
"in": "path",
|
||||
"description": "The name of the ordered data store.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "scope",
|
||||
"in": "path",
|
||||
"description": "The name of the data store scope. See [Scopes](/cloud/guides/data-stores/request-handling.md#scopes).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "entry",
|
||||
"in": "path",
|
||||
"description": "The entry ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/IncrementEntryRequest"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": true
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Entry"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request: invalid orderedDataStore, scope or entry name or encoding."
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden: studio access to APIs is not allowed, incorrect API key or scope."
|
||||
},
|
||||
"404": {
|
||||
"description": "Not found."
|
||||
},
|
||||
"429": {
|
||||
"description": "Too Many Requests."
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": ["universe.ordered-data-store.scope.entry:write"]
|
||||
}
|
||||
],
|
||||
"x-roblox-scopes": [
|
||||
{ "name": "universe.ordered-data-store.scope.entry:write" }
|
||||
],
|
||||
"x-roblox-cloud-api-operation-code-samples": [
|
||||
{
|
||||
"language": "curl",
|
||||
"script": "curl --location 'https://apis.roblox.com/ordered-data-stores/v1/universes/<universeId>/orderedDataStores/<orderedDataStore>/scopes/<scope>/entries/<entry>:increment' \\\n--header 'x-api-key: <insert-api-key>' \\\n--header 'Content-Type: application/json' \\\n--data '{ \n \"amount\": <long> \n}'\n"
|
||||
}
|
||||
],
|
||||
"x-roblox-rate-limits": {
|
||||
"description": "See [Throttling](/cloud/guides/data-stores/throttling.md)."
|
||||
},
|
||||
"x-roblox-recommended-alternatives": [
|
||||
{
|
||||
"url": "https://apis.roblox.com/cloud/v2/universes/{universe_id}/ordered-data-stores/{ordered_data_store_id}/scopes/{scope_id}/entries/{entry_id}:increment",
|
||||
"httpMethod": "POST"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {
|
||||
"Entry": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"path": {
|
||||
"type": "string",
|
||||
"description": "The resource path of the request."
|
||||
},
|
||||
"id": {
|
||||
"type": "string",
|
||||
"description": "The name of the entry"
|
||||
},
|
||||
"value": {
|
||||
"type": "integer",
|
||||
"description": "The value of the entry.",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
"description": "Represents an entry."
|
||||
},
|
||||
"IncrementEntryRequest": {
|
||||
"required": ["amount"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"amount": {
|
||||
"type": "integer",
|
||||
"description": "The amount to increment by the entry value. If the input value exceeds the maximum value supported by int64, which is 9,223,372,036,854,775,807, the request fails with a 400 Bad Request error.",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
"description": "Increments entry value."
|
||||
},
|
||||
"UpdateEntryRequest": {
|
||||
"required": ["value"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"value": {
|
||||
"type": "integer",
|
||||
"description": "The value to update the entry. If the input value exceeds the maximum value supported by int64, which is 9,223,372,036,854,775,807, the request fails with a 400 Bad Request error.",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
"description": "Updates the entry provided with a new value."
|
||||
},
|
||||
"CreateEntryRequest": {
|
||||
"required": ["value"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"value": {
|
||||
"type": "integer",
|
||||
"description": "The value to set the new entry. If the input value exceeds the maximum value supported by int64, which is 9,223,372,036,854,775,807, the request fails with a 400 Bad Request error.",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
"description": "Creates a new entry with the value provided."
|
||||
},
|
||||
"ListEntriesResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"entries": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/Entry"
|
||||
},
|
||||
"description": "The Entries from the specified Scope."
|
||||
},
|
||||
"nextPageToken": {
|
||||
"type": "string",
|
||||
"description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages."
|
||||
}
|
||||
},
|
||||
"description": "A list of Entries in the parent collection."
|
||||
}
|
||||
},
|
||||
"securitySchemes": {
|
||||
"roblox-api-key": {
|
||||
"type": "apiKey",
|
||||
"description": "A configurable key that allows granular access to Roblox resources. See https://create.roblox.com/docs/cloud/auth/api-keys for more information.",
|
||||
"in": "header",
|
||||
"name": "x-api-key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"name": "OrderedDataStores"
|
||||
}
|
||||
]
|
||||
}
|
||||
1187
.cursor/rules/roblox/en-us/reference/cloud/datastores-api/v1.json
Normal file
1187
.cursor/rules/roblox/en-us/reference/cloud/datastores-api/v1.json
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,768 @@
|
|||
{
|
||||
"openapi": "3.0.1",
|
||||
"info": {
|
||||
"title": "developer-products-api",
|
||||
"version": "v1",
|
||||
"x-roblox-extensions-version": "1.0.0"
|
||||
},
|
||||
"paths": {
|
||||
"/developer-products/v2/universes/{universeId}/developer-products": {
|
||||
"post": {
|
||||
"tags": ["DeveloperProducts"],
|
||||
"summary": "Create developer product",
|
||||
"description": "Creates a new developer product with the provided configuration details.",
|
||||
"operationId": "DeveloperProducts_CreateDeveloperProductV2",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"multipart/form-data": {
|
||||
"schema": {
|
||||
"required": ["name"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the developer product."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "The description of the developer product.",
|
||||
"nullable": true
|
||||
},
|
||||
"isForSale": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the developer product should be on sale.",
|
||||
"nullable": true
|
||||
},
|
||||
"price": {
|
||||
"type": "integer",
|
||||
"description": "The default price of the developer product.",
|
||||
"format": "int64",
|
||||
"nullable": true
|
||||
},
|
||||
"imageFile": {
|
||||
"type": "string",
|
||||
"description": "The thumbnail image file to be uploaded.",
|
||||
"format": "binary",
|
||||
"nullable": true
|
||||
},
|
||||
"isRegionalPricingEnabled": {
|
||||
"type": "boolean",
|
||||
"description": "Whether regional pricing should be enabled for the developer product.",
|
||||
"nullable": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"encoding": {
|
||||
"name": {
|
||||
"style": "form"
|
||||
},
|
||||
"description": {
|
||||
"style": "form"
|
||||
},
|
||||
"isForSale": {
|
||||
"style": "form"
|
||||
},
|
||||
"price": {
|
||||
"style": "form"
|
||||
},
|
||||
"imageFile": {
|
||||
"style": "form"
|
||||
},
|
||||
"isRegionalPricingEnabled": {
|
||||
"style": "form"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Success",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/DeveloperProductConfigV2"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "SECOND",
|
||||
"maxInPeriod": 3
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "developer-product:write"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/developer-products/v2/universes/{universeId}/developer-products/{productId}": {
|
||||
"patch": {
|
||||
"tags": ["DeveloperProducts"],
|
||||
"summary": "Update developer product",
|
||||
"description": "Updates a developer product with the provided configuration details. \r\nNote that only fields provided in the request will be updated.",
|
||||
"operationId": "DeveloperProducts_UpdateDeveloperProductV2",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "productId",
|
||||
"in": "path",
|
||||
"description": "The product ID of the developer product.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"multipart/form-data": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the developer product.",
|
||||
"nullable": true
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "The description of the developer product.",
|
||||
"nullable": true
|
||||
},
|
||||
"isForSale": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the developer product should be on sale.",
|
||||
"nullable": true
|
||||
},
|
||||
"price": {
|
||||
"type": "integer",
|
||||
"description": "The default price of the developer product.",
|
||||
"format": "int64",
|
||||
"nullable": true
|
||||
},
|
||||
"imageFile": {
|
||||
"type": "string",
|
||||
"description": "The thumbnail image file to be uploaded.",
|
||||
"format": "binary",
|
||||
"nullable": true
|
||||
},
|
||||
"isRegionalPricingEnabled": {
|
||||
"type": "boolean",
|
||||
"description": "Whether regional pricing should be enabled for the developer product.",
|
||||
"nullable": true
|
||||
},
|
||||
"storePageEnabled": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the developer product should be available for purchase on the external store page.",
|
||||
"nullable": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"encoding": {
|
||||
"name": {
|
||||
"style": "form"
|
||||
},
|
||||
"description": {
|
||||
"style": "form"
|
||||
},
|
||||
"isForSale": {
|
||||
"style": "form"
|
||||
},
|
||||
"price": {
|
||||
"style": "form"
|
||||
},
|
||||
"imageFile": {
|
||||
"style": "form"
|
||||
},
|
||||
"isRegionalPricingEnabled": {
|
||||
"style": "form"
|
||||
},
|
||||
"storePageEnabled": {
|
||||
"style": "form"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"204": {
|
||||
"description": "No Content"
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"409": {
|
||||
"description": "Conflict",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "SECOND",
|
||||
"maxInPeriod": 3
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "developer-product:write"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/developer-products/v2/universes/{universeId}/developer-products/{productId}/creator": {
|
||||
"get": {
|
||||
"tags": ["DeveloperProducts"],
|
||||
"summary": "Get developer product with configuration details",
|
||||
"operationId": "DeveloperProducts_GetDeveloperProductConfigV2",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "productId",
|
||||
"in": "path",
|
||||
"description": "The product ID of the developer product.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Success",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/DeveloperProductConfigV2"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "SECOND",
|
||||
"maxInPeriod": 10
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "developer-product:read"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/developer-products/v2/universes/{universeId}/developer-products/creator": {
|
||||
"get": {
|
||||
"tags": ["DeveloperProducts"],
|
||||
"summary": "List developer products by universe with configuration details",
|
||||
"operationId": "DeveloperProducts_ListDeveloperProductConfigsByUniverseV2",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pageSize",
|
||||
"in": "query",
|
||||
"description": "The number of results to return. Defaults to 50.",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int32"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pageToken",
|
||||
"in": "query",
|
||||
"description": "The cursor token for pagination.",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Success",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ListDeveloperProductConfigsV2Response"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "SECOND",
|
||||
"maxInPeriod": 10
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "developer-product:read"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {
|
||||
"DeveloperProductConfigV2": {
|
||||
"required": [
|
||||
"createdTimestamp",
|
||||
"description",
|
||||
"iconImageAssetId",
|
||||
"isForSale",
|
||||
"isImmutable",
|
||||
"name",
|
||||
"priceInformation",
|
||||
"productId",
|
||||
"storePageEnabled",
|
||||
"universeId",
|
||||
"updatedTimestamp"
|
||||
],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"productId": {
|
||||
"type": "integer",
|
||||
"description": "The product ID of the developer product.",
|
||||
"format": "int64"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the developer product."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "The description of the developer product."
|
||||
},
|
||||
"iconImageAssetId": {
|
||||
"type": "integer",
|
||||
"description": "The icon image (thumbnail) asset ID of the developer product.",
|
||||
"format": "int64",
|
||||
"nullable": true
|
||||
},
|
||||
"universeId": {
|
||||
"type": "integer",
|
||||
"description": "The universe ID that the developer product belongs to.",
|
||||
"format": "int64"
|
||||
},
|
||||
"isForSale": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the developer product is currently on sale."
|
||||
},
|
||||
"storePageEnabled": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the developer product is currently available for purchase on the external store page."
|
||||
},
|
||||
"priceInformation": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/components/schemas/PriceInformationStruct"
|
||||
}
|
||||
],
|
||||
"description": "The pricing configuration associated with the product.",
|
||||
"nullable": true
|
||||
},
|
||||
"isImmutable": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the developer product cannot be modified, such as when created as a commerce product."
|
||||
},
|
||||
"createdTimestamp": {
|
||||
"type": "string",
|
||||
"description": "The timestamp when the developer product was created.",
|
||||
"format": "date-time"
|
||||
},
|
||||
"updatedTimestamp": {
|
||||
"type": "string",
|
||||
"description": "The timestamp when the developer product was last updated.",
|
||||
"format": "date-time"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Creator-facing representation of a developer product configuration."
|
||||
},
|
||||
"ErrorCode": {
|
||||
"enum": [
|
||||
"InvalidImageFile",
|
||||
"UnauthorizedAccess",
|
||||
"NotAuthenticated",
|
||||
"NotFound",
|
||||
"Internal",
|
||||
"BadRequest",
|
||||
"InvalidProductId",
|
||||
"UnauthorizedProductAccess",
|
||||
"InvalidDeveloperProductId",
|
||||
"DuplicateProductName",
|
||||
"InvalidUniverseId",
|
||||
"UnauthorizedUniverseAccess",
|
||||
"InvalidShopId",
|
||||
"UnknownError",
|
||||
"InvalidPriceInRobux",
|
||||
"InvalidPostBody",
|
||||
"InvalidPageNumber",
|
||||
"InvalidPageSize",
|
||||
"UnsupportedDeveloperProductUpdate",
|
||||
"PendingProductsLimitExceeded",
|
||||
"InvalidCursor",
|
||||
"InvalidRegionalPricing",
|
||||
"ProductRetrievalLimitExceeded",
|
||||
"InvalidProductIds",
|
||||
"InvalidName",
|
||||
"InvalidDescription",
|
||||
"InvalidIsForSale",
|
||||
"InvalidStorePageEnabled",
|
||||
"Unavailable",
|
||||
"InvalidPrice",
|
||||
"Blocked",
|
||||
"Conflict"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "Code representing various error conditions."
|
||||
},
|
||||
"ErrorResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"errorCode": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/components/schemas/ErrorCode"
|
||||
}
|
||||
],
|
||||
"description": "The ErrorCode for the exception."
|
||||
},
|
||||
"errorMessage": {
|
||||
"type": "string",
|
||||
"description": "The human readable error message.",
|
||||
"nullable": true
|
||||
},
|
||||
"field": {
|
||||
"type": "string",
|
||||
"description": "The relevant field that caused the error.",
|
||||
"nullable": true
|
||||
},
|
||||
"hint": {
|
||||
"type": "string",
|
||||
"description": "A hint as to what caused the error, if applicable.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "This is the base class for all custom Exceptions that are thrown in this API."
|
||||
},
|
||||
"ListDeveloperProductConfigsV2Response": {
|
||||
"required": ["developerProducts", "nextPageToken"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"developerProducts": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/DeveloperProductConfigV2"
|
||||
},
|
||||
"description": "The list of developer products with their corresponding configuration details."
|
||||
},
|
||||
"nextPageToken": {
|
||||
"type": "string",
|
||||
"description": "The next page token.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Response that contains the list of developer products with their corresponding configuration details and pagination information."
|
||||
},
|
||||
"PriceInformationStruct": {
|
||||
"required": ["defaultPriceInRobux", "enabledFeatures"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"defaultPriceInRobux": {
|
||||
"type": "integer",
|
||||
"description": "The configured default price in Robux.",
|
||||
"format": "int64",
|
||||
"nullable": true
|
||||
},
|
||||
"enabledFeatures": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/PricingFeature"
|
||||
},
|
||||
"description": "The enabled pricing features for the developer product."
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "The pricing configuration information."
|
||||
},
|
||||
"PricingFeature": {
|
||||
"enum": [
|
||||
"Invalid",
|
||||
"PriceOptimization",
|
||||
"UserFixedPrice",
|
||||
"RegionalPricing"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"securitySchemes": {
|
||||
"roblox-legacy-cookie": {
|
||||
"type": "apiKey",
|
||||
"description": "A browser cookie that represents the identity of a Roblox user. DO NOT SHARE THIS. Sharing this will allow someone to log in as you and to steal your Robux and items. When possible, use API keys with the x-api-key header or OAuth 2.0 instead for authentication.",
|
||||
"in": "cookie",
|
||||
"name": ".ROBLOSECURITY"
|
||||
},
|
||||
"roblox-api-key": {
|
||||
"type": "apiKey",
|
||||
"description": "A configurable key that allows granular access to Roblox resources. See https://create.roblox.com/docs/cloud/auth/api-keys for more information.",
|
||||
"in": "header",
|
||||
"name": "x-api-key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://apis.roblox.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,735 @@
|
|||
{
|
||||
"openapi": "3.0.1",
|
||||
"info": {
|
||||
"title": "game-passes-http-service",
|
||||
"version": "v1",
|
||||
"x-roblox-extensions-version": "1.0.0"
|
||||
},
|
||||
"paths": {
|
||||
"/game-passes/v1/universes/{universeId}/game-passes": {
|
||||
"post": {
|
||||
"tags": ["GamePasses"],
|
||||
"summary": "Create game pass",
|
||||
"description": "Creates a new game pass with the provided configuration details.",
|
||||
"operationId": "GamePasses_CreateGamePass",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"multipart/form-data": {
|
||||
"schema": {
|
||||
"required": ["name"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the game pass."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "The description of the game pass.",
|
||||
"nullable": true
|
||||
},
|
||||
"imageFile": {
|
||||
"type": "string",
|
||||
"description": "The thumbnail image file to be uploaded.",
|
||||
"format": "binary",
|
||||
"nullable": true
|
||||
},
|
||||
"isForSale": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the game pass should be on sale.",
|
||||
"nullable": true
|
||||
},
|
||||
"price": {
|
||||
"type": "integer",
|
||||
"description": "The default price of the game pass.",
|
||||
"format": "int64",
|
||||
"nullable": true
|
||||
},
|
||||
"isRegionalPricingEnabled": {
|
||||
"type": "boolean",
|
||||
"description": "Whether regional pricing should be enabled for the game pass.",
|
||||
"nullable": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"encoding": {
|
||||
"name": {
|
||||
"style": "form"
|
||||
},
|
||||
"description": {
|
||||
"style": "form"
|
||||
},
|
||||
"imageFile": {
|
||||
"style": "form"
|
||||
},
|
||||
"isForSale": {
|
||||
"style": "form"
|
||||
},
|
||||
"price": {
|
||||
"style": "form"
|
||||
},
|
||||
"isRegionalPricingEnabled": {
|
||||
"style": "form"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Success",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/GamePassConfigV2"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "SECOND",
|
||||
"maxInPeriod": 5
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "game-pass:write"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/game-passes/v1/universes/{universeId}/game-passes/{gamePassId}": {
|
||||
"patch": {
|
||||
"tags": ["GamePasses"],
|
||||
"summary": "Update game pass",
|
||||
"description": "Updates a game pass with the provided configuration details.\r\nNote that only fields provided in the request will be updated.",
|
||||
"operationId": "GamePasses_UpdateGamePass",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "gamePassId",
|
||||
"in": "path",
|
||||
"description": "The game pass ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"multipart/form-data": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the game pass.",
|
||||
"nullable": true
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "The description of the game pass.",
|
||||
"nullable": true
|
||||
},
|
||||
"file": {
|
||||
"type": "string",
|
||||
"description": "The thumbnail image file to be uploaded.",
|
||||
"format": "binary",
|
||||
"nullable": true
|
||||
},
|
||||
"isForSale": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the game pass should be on sale.",
|
||||
"nullable": true
|
||||
},
|
||||
"price": {
|
||||
"type": "integer",
|
||||
"description": "The default price of the game pass.",
|
||||
"format": "int64",
|
||||
"nullable": true
|
||||
},
|
||||
"isRegionalPricingEnabled": {
|
||||
"type": "boolean",
|
||||
"description": "Whether regional pricing should be enabled for the game pass.",
|
||||
"nullable": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"encoding": {
|
||||
"name": {
|
||||
"style": "form"
|
||||
},
|
||||
"description": {
|
||||
"style": "form"
|
||||
},
|
||||
"file": {
|
||||
"style": "form"
|
||||
},
|
||||
"isForSale": {
|
||||
"style": "form"
|
||||
},
|
||||
"price": {
|
||||
"style": "form"
|
||||
},
|
||||
"isRegionalPricingEnabled": {
|
||||
"style": "form"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"204": {
|
||||
"description": "No Content"
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"409": {
|
||||
"description": "Conflict",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "SECOND",
|
||||
"maxInPeriod": 5
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "game-pass:write"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/game-passes/v1/universes/{universeId}/game-passes/{gamePassId}/creator": {
|
||||
"get": {
|
||||
"tags": ["GamePasses"],
|
||||
"summary": "Get game pass with configuration details",
|
||||
"operationId": "GamePasses_GetGamePassConfig",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "gamePassId",
|
||||
"in": "path",
|
||||
"description": "The game pass ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Success",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/GamePassConfigV2"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "SECOND",
|
||||
"maxInPeriod": 10
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "game-pass:read"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/game-passes/v1/universes/{universeId}/game-passes/creator": {
|
||||
"get": {
|
||||
"tags": ["GamePasses"],
|
||||
"summary": "List game passes by universe with configuration details",
|
||||
"operationId": "GamePasses_ListGamePassConfigsByUniverse",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pageSize",
|
||||
"in": "query",
|
||||
"description": "The number of results to return. Defaults to 50 if not provided.",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int32"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pageToken",
|
||||
"in": "query",
|
||||
"description": "The cursor token for pagination.",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Success",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ListGamePassConfigsByUniverseResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "SECOND",
|
||||
"maxInPeriod": 10
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "game-pass:read"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {
|
||||
"ErrorCode": {
|
||||
"enum": [
|
||||
"InternalError",
|
||||
"BadRequest",
|
||||
"NotFound",
|
||||
"UnauthorizedAccess",
|
||||
"NotAuthenticated",
|
||||
"PassNotFound",
|
||||
"TargetUnauthorizedAccess",
|
||||
"UniverseNotFound",
|
||||
"MissingArgument",
|
||||
"AssetCreationFailure",
|
||||
"PassRevokeFailure",
|
||||
"PassAlreadyRevoked",
|
||||
"SalesNotFound",
|
||||
"CommissionRateNotFound",
|
||||
"AssetNotFound",
|
||||
"FileTooLarge",
|
||||
"ActiveInPO",
|
||||
"NotForSale",
|
||||
"NotSameUniverse",
|
||||
"PricingConfigError",
|
||||
"InvalidCount",
|
||||
"Blocked",
|
||||
"InvalidPageSize"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "Code representing various error conditions."
|
||||
},
|
||||
"ErrorResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"errorCode": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/components/schemas/ErrorCode"
|
||||
}
|
||||
],
|
||||
"description": "The ErrorCode for the exception."
|
||||
},
|
||||
"errorMessage": {
|
||||
"type": "string",
|
||||
"description": "The human readable error message.",
|
||||
"nullable": true
|
||||
},
|
||||
"field": {
|
||||
"type": "string",
|
||||
"description": "The relevant field that caused the error.",
|
||||
"nullable": true
|
||||
},
|
||||
"hint": {
|
||||
"type": "string",
|
||||
"description": "A hint as to what caused the error, if applicable.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "This is the base class for all custom Exceptions that are thrown in this API."
|
||||
},
|
||||
"GamePassConfigV2": {
|
||||
"required": [
|
||||
"createdTimestamp",
|
||||
"description",
|
||||
"gamePassId",
|
||||
"iconAssetId",
|
||||
"isForSale",
|
||||
"name",
|
||||
"priceInformation",
|
||||
"updatedTimestamp"
|
||||
],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"gamePassId": {
|
||||
"type": "integer",
|
||||
"description": "The game pass ID.",
|
||||
"format": "int64"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the game pass."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "The description of the game pass."
|
||||
},
|
||||
"isForSale": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the game pass is currently on sale."
|
||||
},
|
||||
"iconAssetId": {
|
||||
"type": "integer",
|
||||
"description": "The icon image (thumbnail) asset ID of the game pass.",
|
||||
"format": "int64"
|
||||
},
|
||||
"createdTimestamp": {
|
||||
"type": "string",
|
||||
"description": "The timestamp when the game pass was created.",
|
||||
"format": "date-time"
|
||||
},
|
||||
"updatedTimestamp": {
|
||||
"type": "string",
|
||||
"description": "The timestamp when the game pass was last updated.",
|
||||
"format": "date-time"
|
||||
},
|
||||
"priceInformation": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/components/schemas/PriceInformationStruct"
|
||||
}
|
||||
],
|
||||
"description": "The pricing configuration associated with the game pass.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Creator-facing representation of a game pass configuration."
|
||||
},
|
||||
"ListGamePassConfigsByUniverseResponse": {
|
||||
"required": ["gamePasses", "nextPageToken"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"gamePasses": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/GamePassConfigV2"
|
||||
},
|
||||
"description": "The list of game passes with their corresponding configuration details."
|
||||
},
|
||||
"nextPageToken": {
|
||||
"type": "string",
|
||||
"description": "The next page token.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Response for listing game pass configuration details by universe"
|
||||
},
|
||||
"PriceInformationStruct": {
|
||||
"required": ["defaultPriceInRobux", "enabledFeatures"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"defaultPriceInRobux": {
|
||||
"type": "integer",
|
||||
"description": "The configured default price in Robux.",
|
||||
"format": "int64",
|
||||
"nullable": true
|
||||
},
|
||||
"enabledFeatures": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/PricingFeature"
|
||||
},
|
||||
"description": "The enabled pricing features for the game pass."
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "The pricing configuration information."
|
||||
},
|
||||
"PricingFeature": {
|
||||
"enum": [
|
||||
"Invalid",
|
||||
"PriceOptimization",
|
||||
"UserFixedPrice",
|
||||
"RegionalPricing"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "Enum representing enabled features for this particular game pass."
|
||||
}
|
||||
},
|
||||
"securitySchemes": {
|
||||
"roblox-legacy-cookie": {
|
||||
"type": "apiKey",
|
||||
"description": "A browser cookie that represents the identity of a Roblox user. DO NOT SHARE THIS. Sharing this will allow someone to log in as you and to steal your Robux and items. When possible, use API keys with the x-api-key header or OAuth 2.0 instead for authentication.",
|
||||
"in": "cookie",
|
||||
"name": ".ROBLOSECURITY"
|
||||
},
|
||||
"roblox-api-key": {
|
||||
"type": "apiKey",
|
||||
"description": "A configurable key that allows granular access to Roblox resources. See https://create.roblox.com/docs/cloud/auth/api-keys for more information.",
|
||||
"in": "header",
|
||||
"name": "x-api-key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://apis.roblox.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,150 @@
|
|||
{
|
||||
"openapi": "3.0.1",
|
||||
"info": {
|
||||
"title": "Messaging Service",
|
||||
"description": "This page contains reference documentation for the Open Cloud v1 Messaging Service API, which can broadcast messages across all servers in your experience.\n\nThe v2 API has its own version of the [Publish Message](/cloud/reference/Universe#Cloud_PublishUniverseMessage) method. For information on using the v2 method, see the [Messaging usage guide](/cloud/guides/usage-messaging.md).",
|
||||
"version": "v1",
|
||||
"x-roblox-extensions-version": "1.0.0"
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://apis.roblox.com/messaging-service/"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"/v1/universes/{universeId}/topics/{topic}": {
|
||||
"post": {
|
||||
"tags": ["CrossServerMessaging"],
|
||||
"operationId": "CrossServerMessaging_Publish",
|
||||
"x-roblox-cloud-api-operation-name": "Publish a Message",
|
||||
"x-roblox-stability": "BETA",
|
||||
"description": "Publish a message to a pre-defined topic of an experience, with the size of the message up to 1,024 characters (1 KB). Requires the **Publish** permission for API keys and the **universe-messaging-service:publish** scope for OAuth 2.0 apps. See [Cross-server messaging](/cloud-services/cross-server-messaging.md#subscribe-users-to-receive-messages) for defining and subscribing users to a topic.",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"description": "The identifier of the experience in which you want to send your messages to. You can [copy your experience's Universe ID](/cloud/guides/usage-messaging.md#publishing-messages-to-live-servers) on **Creator Dashboard**.",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "topic",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"description": "The topic that you want to publish your message to, with up to 80 characters.",
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json-patch+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/PublishRequest"
|
||||
}
|
||||
},
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/PublishRequest"
|
||||
}
|
||||
},
|
||||
"text/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/PublishRequest"
|
||||
}
|
||||
},
|
||||
"application/*+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/PublishRequest"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Returns an empty response body."
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid request."
|
||||
},
|
||||
"401": {
|
||||
"description": "The API key is not valid for this operation / You don't have the authorization."
|
||||
},
|
||||
"403": {
|
||||
"description": "Publishing is not allowed on this experience."
|
||||
},
|
||||
"500": {
|
||||
"description": "Server internal error / Unknown error."
|
||||
}
|
||||
},
|
||||
"x-roblox-rate-limits": {
|
||||
"perIp": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 10000
|
||||
},
|
||||
"perApiKeyOwner": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 5000
|
||||
},
|
||||
"perOauth2Authorization": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 5000
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": ["universe-messaging-service:publish"]
|
||||
},
|
||||
{
|
||||
"roblox-oauth2": ["universe-messaging-service:publish"]
|
||||
}
|
||||
],
|
||||
"x-roblox-scopes": [{ "name": "universe-messaging-service:publish" }],
|
||||
"x-roblox-cloud-api-operation": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {
|
||||
"PublishRequest": {
|
||||
"type": "object",
|
||||
"description": "The request body object with the message string that you want to publish to the live server.",
|
||||
"properties": {
|
||||
"message": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "The message content that you want to publish to the live server."
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"securitySchemes": {
|
||||
"roblox-api-key": {
|
||||
"type": "apiKey",
|
||||
"description": "A configurable key that allows granular access to Roblox resources. See https://create.roblox.com/docs/cloud/auth/api-keys for more information.",
|
||||
"in": "header",
|
||||
"name": "x-api-key"
|
||||
},
|
||||
"roblox-oauth2": {
|
||||
"type": "oauth2",
|
||||
"description": "Build or authorize apps to access Roblox resources. See https://create.roblox.com/docs/cloud/auth/oauth2-overview for more information.",
|
||||
"flows": {
|
||||
"authorizationCode": {
|
||||
"authorizationUrl": "https://apis.roblox.com/oauth/v1/authorize",
|
||||
"tokenUrl": "https://apis.roblox.com/oauth/v1/token",
|
||||
"refreshUrl": "https://apis.roblox.com/oauth/v1/token",
|
||||
"scopes": {
|
||||
"universe-messaging-service:publish": "This grants the ability to publish messages on behalf of users."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
355
.cursor/rules/roblox/en-us/reference/cloud/open-eval-api/v1.json
Normal file
355
.cursor/rules/roblox/en-us/reference/cloud/open-eval-api/v1.json
Normal file
|
|
@ -0,0 +1,355 @@
|
|||
{
|
||||
"openapi": "3.0.4",
|
||||
"info": {
|
||||
"title": "OpenEvalApi",
|
||||
"version": "1.0",
|
||||
"x-roblox-extensions-version": "1.0.0"
|
||||
},
|
||||
"paths": {
|
||||
"/open-eval-api/v1/eval": {
|
||||
"post": {
|
||||
"tags": ["Eval"],
|
||||
"summary": "Performs the evaluation of the Lua script.",
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json-patch+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/EvalRequest"
|
||||
}
|
||||
},
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/EvalRequest"
|
||||
}
|
||||
},
|
||||
"text/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/EvalRequest"
|
||||
}
|
||||
},
|
||||
"application/*+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/EvalRequest"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/EvalResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "DAY",
|
||||
"maxInPeriod": 100
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "studio-evaluations:create"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/open-eval-api/v1/eval-records/{jobId}": {
|
||||
"get": {
|
||||
"tags": ["Eval"],
|
||||
"summary": "Gets the evaluation record by job ID.",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "jobId",
|
||||
"in": "path",
|
||||
"description": "The job ID of the evaluation record.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/EvalRecord"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 60
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "studio-evaluations:create"
|
||||
}
|
||||
],
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-legacy-cookie": []
|
||||
},
|
||||
{
|
||||
"roblox-api-key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {
|
||||
"CustomLlmInfo": {
|
||||
"required": ["name", "url"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"minLength": 1,
|
||||
"type": "string",
|
||||
"description": "The name of the custom LLM provider (claude, gemini, openai)."
|
||||
},
|
||||
"model_version": {
|
||||
"type": "string",
|
||||
"description": "The specific model version to use (e.g., \"gemini-2.5-pro-preview-03-25\").\nIf not provided, falls back to the provider name.",
|
||||
"nullable": true
|
||||
},
|
||||
"url": {
|
||||
"minLength": 1,
|
||||
"type": "string",
|
||||
"description": "The custom LLM endpoint URL."
|
||||
},
|
||||
"api_key": {
|
||||
"type": "string",
|
||||
"description": "The API key to access the custom LLM.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Contains information to override the default LLM endpoint and credentials."
|
||||
},
|
||||
"EvalJsonRecord": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"passes": {
|
||||
"type": "integer",
|
||||
"format": "int32"
|
||||
},
|
||||
"fails": {
|
||||
"type": "integer",
|
||||
"format": "int32"
|
||||
},
|
||||
"checks": {
|
||||
"type": "integer",
|
||||
"format": "int32"
|
||||
},
|
||||
"warning": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"error": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"interruptions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/InterruptionRecord"
|
||||
},
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"EvalRecord": {
|
||||
"required": ["inputScript", "jobId", "name"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"user": {
|
||||
"$ref": "#/components/schemas/User"
|
||||
},
|
||||
"useReferenceMode": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"jobId": {
|
||||
"type": "string",
|
||||
"format": "uuid"
|
||||
},
|
||||
"inputScript": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"jobStatus": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"results": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/EvalResultRecord"
|
||||
},
|
||||
"nullable": true
|
||||
},
|
||||
"fullLogs": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"evalSucceeded": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"createUtc": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"EvalRequest": {
|
||||
"required": ["input_script", "name"],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"use_reference_mode": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"input_script": {
|
||||
"minLength": 10,
|
||||
"type": "string"
|
||||
},
|
||||
"custom_llm_info": {
|
||||
"$ref": "#/components/schemas/CustomLlmInfo"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "The request model for the evaluation."
|
||||
},
|
||||
"EvalResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"job_id": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"status_code": {
|
||||
"type": "integer",
|
||||
"description": "Gets or sets the status code of the response.",
|
||||
"format": "int32"
|
||||
},
|
||||
"error": {
|
||||
"type": "string",
|
||||
"description": "Gets or sets the error message associated with the response.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "The response model for the evaluation."
|
||||
},
|
||||
"EvalResultRecord": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"mode": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/EvalJsonRecord"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"InterruptionRecord": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"check": {
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
"readOnly": true
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"readOnly": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"User": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"readOnly": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"securitySchemes": {
|
||||
"roblox-legacy-cookie": {
|
||||
"type": "apiKey",
|
||||
"description": "A browser cookie that represents the identity of a Roblox user. DO NOT SHARE THIS. Sharing this will allow someone to log in as you and to steal your Robux and items. When possible, use API keys with the x-api-key header or OAuth 2.0 instead for authentication.",
|
||||
"in": "cookie",
|
||||
"name": ".ROBLOSECURITY"
|
||||
},
|
||||
"roblox-api-key": {
|
||||
"type": "apiKey",
|
||||
"description": "A configurable key that allows granular access to Roblox resources. See https://create.roblox.com/docs/cloud/auth/api-keys for more information.",
|
||||
"in": "header",
|
||||
"name": "x-api-key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://apis.roblox.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
91150
.cursor/rules/roblox/en-us/reference/cloud/openapi.json
Normal file
91150
.cursor/rules/roblox/en-us/reference/cloud/openapi.json
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,601 @@
|
|||
{
|
||||
"openapi": "3.0.4",
|
||||
"info": {
|
||||
"title": "SecretsStoreService",
|
||||
"version": "1.0",
|
||||
"x-roblox-extensions-version": "1.0.0"
|
||||
},
|
||||
"paths": {
|
||||
"/cloud/v2/universes/{universeId}/secrets": {
|
||||
"post": {
|
||||
"tags": ["SecretsStoreApiService"],
|
||||
"summary": "Create Secret",
|
||||
"description": "Creates a new secret. A maximum of 500 secrets per universe is allowed.\n \nOnly the owner of the universe can create secrets. For group-owned universes, only the group owner or authorized\nmembers can create secrets.\n \nTo encrypt the secret:\n1. Get the public key using the Get Public Key endpoint\n2. Encrypt your secret using LibSodium sealed box\n3. Base64 encode the encrypted content\n\nInclude the key_id from the public key response in the request.\n\nFor an example, see the [Secrets store guide](https://create.roblox.com/docs/cloud/guides/secrets-store).",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "The secret to create with encrypted content",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Secret"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Created",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Secret"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"409": {
|
||||
"description": "Conflict",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "universe.secret:write",
|
||||
"description": "Required"
|
||||
}
|
||||
],
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
},
|
||||
"perOauth2Authorization": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
}
|
||||
},
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": []
|
||||
},
|
||||
{
|
||||
"roblox-oauth2": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"get": {
|
||||
"tags": ["SecretsStoreApiService"],
|
||||
"summary": "List Secrets",
|
||||
"description": "Lists all secrets defined for a universe.\nSecret content is not returned for security reasons - only metadata such as ID, domain, creation and update timestamps are included.\n\nOnly the owner of the universe can list secrets. For group-owned universes, only the group owner or authorized\nmembers can list secrets.",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "limit",
|
||||
"in": "query",
|
||||
"description": "Number of secrets to return per page (1-500, default 10)",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
"default": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cursor",
|
||||
"in": "query",
|
||||
"description": "Pagination cursor from previous response",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/SecretPaginatedList"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "universe.secret:read",
|
||||
"description": "Required"
|
||||
}
|
||||
],
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
},
|
||||
"perOauth2Authorization": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
}
|
||||
},
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": []
|
||||
},
|
||||
{
|
||||
"roblox-oauth2": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/cloud/v2/universes/{universeId}/secrets/{secretId}": {
|
||||
"patch": {
|
||||
"tags": ["SecretsStoreApiService"],
|
||||
"summary": "Update Secret",
|
||||
"description": "Updates an existing secret.\n\nOnly the owner of the universe can update secrets. For group-owned universes, only the group owner or authorized\nmembers can update secrets.\n\nOnly the secret content, key_id, and domain can be updated - the secret ID cannot be changed.\n\nTo encrypt the updated secret:\n1. Get the current public key using the GetPublicKey endpoint\n2. Encrypt your new secret content using LibSodium sealed box\n3. Base64 encode the encrypted content\n\nInclude the key_id from the public key response in the request.\n\nFor an example, see the [Secrets store guide](https://create.roblox.com/docs/cloud/guides/secrets-store).",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "secretId",
|
||||
"in": "path",
|
||||
"description": "The ID of the secret to update",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "The updated secret data with encrypted content",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Secret"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Secret"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "universe.secret:write",
|
||||
"description": "Required"
|
||||
}
|
||||
],
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
},
|
||||
"perOauth2Authorization": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
}
|
||||
},
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": []
|
||||
},
|
||||
{
|
||||
"roblox-oauth2": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"delete": {
|
||||
"tags": ["SecretsStoreApiService"],
|
||||
"summary": "Delete Secret",
|
||||
"description": "Permanently deletes a secret from a universe.\n\nOnly the owner of the universe can delete secrets. For group-owned universes, only the group owner or authorized\nmembers can delete secrets.\n\nThis operation is irreversible. Make sure you no longer need the secret before deleting it.",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "secretId",
|
||||
"in": "path",
|
||||
"description": "The ID of the secret to delete",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK"
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not Found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "universe.secret:write",
|
||||
"description": "Required"
|
||||
}
|
||||
],
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
},
|
||||
"perOauth2Authorization": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
}
|
||||
},
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": []
|
||||
},
|
||||
{
|
||||
"roblox-oauth2": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/cloud/v2/universes/{universeId}/secrets/public-key": {
|
||||
"get": {
|
||||
"tags": ["SecretsStoreApiService"],
|
||||
"summary": "Get Public Key",
|
||||
"description": "Retrieves the public key for a universe. You need this key to encrypt secret content \nbefore sending it to Roblox.\n\nOnly the owner of the universe can retrieve the public key. For group-owned universes, only the group owner or\nauthorized members can retrieve the public key.\n\nThe secret id field is static and always returns \"public-key\".\n\nThe returned public key in the secret field is universe-specific and derived from a master key using the universe ID.\nUse this key with LibSodium sealed box encryption to encrypt your secret content before \ncreating or updating secrets.\n\nInclude the key_id from the public key response in the request to create or update a secret.",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"description": "The universe ID",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Secret"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ProblemDetails"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x-roblox-scopes": [
|
||||
{
|
||||
"name": "universe.secret:read",
|
||||
"description": "Required"
|
||||
}
|
||||
],
|
||||
"x-roblox-stability": "BETA",
|
||||
"x-roblox-rate-limits": {
|
||||
"perApiKeyOwner": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
},
|
||||
"perOauth2Authorization": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 120
|
||||
}
|
||||
},
|
||||
"x-roblox-engine-usability": {
|
||||
"apiKeyWithHttpService": false
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": []
|
||||
},
|
||||
{
|
||||
"roblox-oauth2": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {
|
||||
"ProblemDetails": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"detail": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"instance": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": {}
|
||||
},
|
||||
"Secret": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"description": "The user-specified secret name. Examples: \"aws\", \"gcp\", \"discord\".\n\nStatic when getting the public key for a universe.\n\nMust be alphanumeric or underscore, 1-64 characters, not starting with a number.",
|
||||
"nullable": true
|
||||
},
|
||||
"secret": {
|
||||
"type": "string",
|
||||
"description": "The binary secret content. Examples: API key content (text), private keys.\n\nWhen created, the secret must be encrypted using LibSodium sealed box and encoded in base64 with the universe's public key.\n\nContains the public key when getting the public key for a universe.",
|
||||
"format": "byte",
|
||||
"nullable": true
|
||||
},
|
||||
"key_id": {
|
||||
"type": "string",
|
||||
"description": "Encryption key identifier. Identifies the key that was used to encrypt the secret content.",
|
||||
"nullable": true
|
||||
},
|
||||
"domain": {
|
||||
"type": "string",
|
||||
"description": "The domain wildcard that restricts the purpose of the key. \n\nYou can restrict the URLs callable via HttpService to a specific domain, e.g. \"api.example.com\" or \"*.myservice.org\".\n\nAn empty or null domain means that the secret is a private key and cannot be transformed with addPrefix/addSuffix or sent as a header or URL.\n\nIn order to make the secret accessible for all domains, use \"*\"",
|
||||
"nullable": true
|
||||
},
|
||||
"create_time": {
|
||||
"type": "string",
|
||||
"description": "Date and time when the secret was originally created.",
|
||||
"nullable": true
|
||||
},
|
||||
"update_time": {
|
||||
"type": "string",
|
||||
"description": "Date and time when the secret was last updated",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Universe-specific secret, identified by `id`, and belonging to a specific `environment`."
|
||||
},
|
||||
"SecretPaginatedList": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"secrets": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/Secret"
|
||||
},
|
||||
"description": "Gets the actual list of items to return",
|
||||
"nullable": true
|
||||
},
|
||||
"nextPageCursor": {
|
||||
"type": "string",
|
||||
"description": "Gets the cursor where the pagination stopped after fetching `data`.\n`null` if there is no more data available.",
|
||||
"nullable": true
|
||||
},
|
||||
"previousPageCursor": {
|
||||
"type": "string",
|
||||
"description": "Gets the cursor pointing at the previous page. `null` when it's\nthe first page.",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"description": "Wrapper for the paginated collection output.\nComplies with the REST conventions, containing\nnext/previous page, and a data field containing the actual list.\n \nNeeded only to simplify JSON serialization, and can technically\nbe AutoMapper-ed from the EaaS or any other data provider."
|
||||
}
|
||||
},
|
||||
"securitySchemes": {
|
||||
"roblox-api-key": {
|
||||
"type": "apiKey",
|
||||
"description": "A configurable key that allows granular access to Roblox resources. See https://create.roblox.com/docs/cloud/auth/api-keys for more information.",
|
||||
"in": "header",
|
||||
"name": "x-api-key"
|
||||
},
|
||||
"roblox-oauth2": {
|
||||
"type": "oauth2",
|
||||
"description": "OAuth 2.0 authentication for Roblox APIs. See https://create.roblox.com/docs/cloud/auth/oauth2-overview for more information.",
|
||||
"flows": {
|
||||
"authorizationCode": {
|
||||
"authorizationUrl": "https://apis.roblox.com/oauth/v1/authorize",
|
||||
"tokenUrl": "https://apis.roblox.com/oauth/v1/token",
|
||||
"refreshUrl": "https://apis.roblox.com/oauth/v1/token",
|
||||
"scopes": {
|
||||
"universe.secret:write": "universe.secret:write",
|
||||
"universe.secret:read": "universe.secret:read"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://apis.roblox.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
2469
.cursor/rules/roblox/en-us/reference/cloud/toolbox-service/v1.json
Normal file
2469
.cursor/rules/roblox/en-us/reference/cloud/toolbox-service/v1.json
Normal file
File diff suppressed because it is too large
Load diff
127
.cursor/rules/roblox/en-us/reference/cloud/universes-api/v1.json
Normal file
127
.cursor/rules/roblox/en-us/reference/cloud/universes-api/v1.json
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
{
|
||||
"openapi": "3.0.1",
|
||||
"info": {
|
||||
"title": "Place publishing",
|
||||
"description": "You can send and receive the following request and response payloads to publish and update your places on Roblox. For information on the usage of the API, see the [usage guide](/cloud/guides/usage-place-publishing.md).",
|
||||
"version": "v1",
|
||||
"x-roblox-extensions-version": "1.0.0"
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://apis.roblox.com/universes/"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"/v1/{universeId}/places/{placeId}/versions": {
|
||||
"post": {
|
||||
"tags": ["Places"],
|
||||
"operationId": "Places_CreatePlaceVersionApiKey",
|
||||
"x-roblox-cloud-api-operation-name": "Publish a Place",
|
||||
"x-roblox-stability": "BETA",
|
||||
"description": "Publish a new place or update an existing place with a new version. Provide a RBXL or RBXLX file in the data-binary.",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "universeId",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"description": "The identifier of the experience in which you want to publish your place to. You can [copy your experience's Universe ID](/cloud/guides/usage-place-publishing.md#publishing-a-place) on **Creator Dashboard**.",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "placeId",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"description": "The identifier of your place. See [Publishing places with API keys](/cloud/guides/usage-place-publishing.md) on obtaining a Place ID.",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "versionType",
|
||||
"in": "query",
|
||||
"description": "Can only be either: \n- `Saved`: the place file should be saved, but not published. \n - `Published`: the place file should be saved and published.",
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Returns the published place's version number.",
|
||||
"content": {
|
||||
"text/plain": {
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"example": "{\"versionNumber\":7}"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid request / Invalid file content."
|
||||
},
|
||||
"401": {
|
||||
"description": "API key not valid for operation, user does not have authorization."
|
||||
},
|
||||
"403": {
|
||||
"description": "Publish not allowed on place."
|
||||
},
|
||||
"404": {
|
||||
"description": "Place or universe does not exist."
|
||||
},
|
||||
"409": {
|
||||
"description": "Place not part of the universe."
|
||||
},
|
||||
"500": {
|
||||
"description": "Server internal error / Unknown error."
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"roblox-api-key": ["universe-places:write"]
|
||||
}
|
||||
],
|
||||
"x-roblox-scopes": [{ "name": "universe-places:write" }],
|
||||
"x-roblox-cloud-api-operation": true,
|
||||
"x-roblox-code-samples": [
|
||||
{
|
||||
"language": "curl",
|
||||
"script": "curl --location --request POST 'https://apis.roblox.com/universes/v1/{universeId}/places/{placeId}/versions?versionType=Published' \n--header 'x-api-key: abc...' \n--header 'Content-Type: application/xml' \n--data-raw '<roblox></roblox>'\n"
|
||||
}
|
||||
],
|
||||
"x-roblox-rate-limits": {
|
||||
"perIp": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 30
|
||||
},
|
||||
"perApiKeyOwner": {
|
||||
"period": "MINUTE",
|
||||
"maxInPeriod": 30
|
||||
}
|
||||
},
|
||||
"x-roblox-throttling-limit": {
|
||||
"perApiKey": {
|
||||
"periodInSeconds": "60",
|
||||
"maxInPeriod": 30
|
||||
}
|
||||
},
|
||||
"x-roblox-size-limit": 10485760
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"securitySchemes": {
|
||||
"roblox-api-key": {
|
||||
"type": "apiKey",
|
||||
"description": "A configurable key that allows granular access to Roblox resources. See https://create.roblox.com/docs/cloud/auth/api-keys for more information.",
|
||||
"in": "header",
|
||||
"name": "x-api-key"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue