{ "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" } ] }