4 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

POST /v1/{universeId}/places/{placeId}/versions — universes-api/v1

Publish a new place or update an existing place with a new version. Provide a RBXL or RBXLX file in the data-binary.

Endpoint

Method: POST

Path: /v1/{universeId}/places/{placeId}/versions

Servers:

Parameters

NameLocationRequiredDescription
universeIdpathtrueThe identifier of the experience in which you want to publish your place to. You can copy your experience's Universe ID on Creator Dashboard.
placeIdpathtrueThe identifier of your place. See Publishing places with API keys on obtaining a Place ID.
versionTypequeryfalseCan only be either: - Saved: the place file should be saved, but not published. - Published: the place file should be saved and published.
[
  {
    "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

StatusDescription
200Returns the published place's version number.
400Invalid request / Invalid file content.
401API key not valid for operation, user does not have authorization.
403Publish not allowed on place.
404Place or universe does not exist.
409Place not part of the universe.
500Server internal error / Unknown error.
{
  "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."
  }
}

Authentication

{
  "security": [
    {
      "roblox-api-key": [
        "universe-places: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.",
      "in": "header",
      "name": "x-api-key"
    }
  }
}

Complete Operation Definition

{
  "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-size-limit": 10485760
}