Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.
PATCH /creator-configs-public-api/v1/configs/universes/{universeId}/repositories/{repository}/draft — openapi
Partially updates the draft.
Updates the draft treating the payload as a partial changeset. If draftHash is provided, this call will fail if the hash doesn't match. A key not included will not be changed. To indicate deletion, set key to null. To discard a change, set key to its currently published value. When conditionalRules is omitted or empty ({}), the CMS update omits the conditional-rules field so existing published rules remain at publish time; send a non-empty conditionalRules object to merge rule changes. Entry count and per-value size limits are enforced here via CreatorConfigsPublicApi.Utils.DraftValidationHelper; further schema validation is performed by Config Management.
Endpoint
Method: PATCH
Path: /creator-configs-public-api/v1/configs/universes/{universeId}/repositories/{repository}/draft
Servers:
https://apis.roblox.com
Parameters
| Name | Location | Required | Description |
|---|---|---|---|
| universeId | path | true | |
| repository | path | true | InExperienceConfig RecommendationServicesConfig DataStoresConfig ExtendedServicesConfig LeaderboardsConfig ExperienceUserConfig JourneysConfig AntiCheatConfig |
[
{
"name": "universeId",
"in": "path",
"description": "",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "repository",
"in": "path",
"description": "\n\nInExperienceConfig\n\nRecommendationServicesConfig\n\nDataStoresConfig\n\nExtendedServicesConfig\n\nLeaderboardsConfig\n\nExperienceUserConfig\n\nJourneysConfig\n\nAntiCheatConfig",
"required": true,
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/Repository"
}
],
"description": "Public API repository identifier. Only values exposed by the public API are included;\r\ninternal repository types are not exposed to allow development and testing before enabling.",
"x-enum-varnames": [
"InExperienceConfig",
"RecommendationServicesConfig",
"DataStoresConfig",
"ExtendedServicesConfig",
"LeaderboardsConfig",
"ExperienceUserConfig",
"JourneysConfig",
"AntiCheatConfig"
]
},
"x-enum-varnames": [
"InExperienceConfig",
"RecommendationServicesConfig",
"DataStoresConfig",
"ExtendedServicesConfig",
"LeaderboardsConfig",
"ExperienceUserConfig",
"JourneysConfig",
"AntiCheatConfig"
]
}
] Request Body
{
"description": "",
"content": {
"application/json-patch+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/UpdateDraftRequest"
}
],
"description": "Request model for draft updates: PATCH uses a partial merge; PUT `draft:overwrite` treats the body as the full intended configuration after publish."
}
},
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/UpdateDraftRequest"
}
],
"description": "Request model for draft updates: PATCH uses a partial merge; PUT `draft:overwrite` treats the body as the full intended configuration after publish."
}
},
"text/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/UpdateDraftRequest"
}
],
"description": "Request model for draft updates: PATCH uses a partial merge; PUT `draft:overwrite` treats the body as the full intended configuration after publish."
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/UpdateDraftRequest"
}
],
"description": "Request model for draft updates: PATCH uses a partial merge; PUT `draft:overwrite` treats the body as the full intended configuration after publish."
}
}
}
} Responses
| Status | Description |
|---|---|
| 200 | OK |
| 400 | Bad Request |
| 401 | Unauthorized |
| 404 | Not Found |
{
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DraftHashResponse"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActionResult"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActionResult"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActionResult"
}
}
}
}
} Authentication
{
"security": [
{
"roblox-legacy-cookie": []
},
{
"roblox-api-key": []
},
{
"roblox-oauth2": [
"universe:write"
]
}
],
"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.",
"name": "x-api-key",
"in": "header"
},
"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. We do not recommend using cookies to call endpoints. When possible, use API keys with the x-api-key header or OAuth 2.0 instead for authentication.",
"in": "cookie",
"name": ".ROBLOSECURITY"
},
"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": {}
}
}
}
}
} Related Schemas
Complete Operation Definition
{
"tags": [
"Configs"
],
"summary": "Partially updates the draft.",
"description": "Updates the draft treating the payload as a partial changeset.\r\nIf draftHash is provided, this call will fail if the hash doesn't match.\r\nA key not included will not be changed. To indicate deletion, set key to null.\r\nTo discard a change, set key to its currently published value.\r\nWhen `conditionalRules` is omitted or empty (`{}`), the CMS update omits the conditional-rules field so existing published rules remain at publish time;\r\nsend a non-empty `conditionalRules` object to merge rule changes.\r\nEntry count and per-value size limits are enforced here via CreatorConfigsPublicApi.Utils.DraftValidationHelper; further schema validation is performed by Config Management.",
"operationId": "CreatorConfigsPublicApi_UpdateDraft",
"parameters": [
{
"name": "universeId",
"in": "path",
"description": "",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "repository",
"in": "path",
"description": "\n\nInExperienceConfig\n\nRecommendationServicesConfig\n\nDataStoresConfig\n\nExtendedServicesConfig\n\nLeaderboardsConfig\n\nExperienceUserConfig\n\nJourneysConfig\n\nAntiCheatConfig",
"required": true,
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/Repository"
}
],
"description": "Public API repository identifier. Only values exposed by the public API are included;\r\ninternal repository types are not exposed to allow development and testing before enabling.",
"x-enum-varnames": [
"InExperienceConfig",
"RecommendationServicesConfig",
"DataStoresConfig",
"ExtendedServicesConfig",
"LeaderboardsConfig",
"ExperienceUserConfig",
"JourneysConfig",
"AntiCheatConfig"
]
},
"x-enum-varnames": [
"InExperienceConfig",
"RecommendationServicesConfig",
"DataStoresConfig",
"ExtendedServicesConfig",
"LeaderboardsConfig",
"ExperienceUserConfig",
"JourneysConfig",
"AntiCheatConfig"
]
}
],
"requestBody": {
"description": "",
"content": {
"application/json-patch+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/UpdateDraftRequest"
}
],
"description": "Request model for draft updates: PATCH uses a partial merge; PUT `draft:overwrite` treats the body as the full intended configuration after publish."
}
},
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/UpdateDraftRequest"
}
],
"description": "Request model for draft updates: PATCH uses a partial merge; PUT `draft:overwrite` treats the body as the full intended configuration after publish."
}
},
"text/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/UpdateDraftRequest"
}
],
"description": "Request model for draft updates: PATCH uses a partial merge; PUT `draft:overwrite` treats the body as the full intended configuration after publish."
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/UpdateDraftRequest"
}
],
"description": "Request model for draft updates: PATCH uses a partial merge; PUT `draft:overwrite` treats the body as the full intended configuration after publish."
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DraftHashResponse"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActionResult"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActionResult"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ActionResult"
}
}
}
}
},
"x-roblox-stability": "BETA",
"x-roblox-rate-limits": {
"perApiKeyOwner": {
"period": "MINUTE",
"maxInPeriod": 50
},
"perOauth2Authorization": {
"period": "MINUTE",
"maxInPeriod": 50
}
},
"x-roblox-scopes": [
{
"name": "universe:write",
"targetResourceSpecifier": "universes"
}
],
"x-roblox-engine-usability": {
"apiKeyWithHttpService": true
},
"security": [
{
"roblox-legacy-cookie": []
},
{
"roblox-api-key": []
},
{
"roblox-oauth2": [
"universe:write"
]
}
],
"externalDocs": {
"url": "https://create.roblox.com/docs/cloud/reference/features/configs#CreatorConfigsPublicApi_UpdateDraft"
}
}