Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.
POST /virtual-events/v3/universes/{universeId}/game-events — openapi
Create a new game event. Returns the full resource on success.
Endpoint
Method: POST
Path: /virtual-events/v3/universes/{universeId}/game-events
Servers:
https://apis.roblox.com
Parameters
| Name | Location | Required | Description |
|---|---|---|---|
| universeId | path | true | Universe that will own the new event (from path). |
[
{
"name": "universeId",
"in": "path",
"description": "Universe that will own the new event (from path).",
"required": true,
"schema": {
"type": "integer",
"format": "int64"
}
}
] Request Body
The create payload.
{
"description": "The create payload.",
"content": {
"application/json-patch+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateGameEventRequest"
}
],
"description": "Request body for `POST /v3/universes/{universeId}/game-events`.\r\n`universeId` comes from the URL path, not the body.\r\nVirtualEventsApi.Models.V3.Request.CreateGameEventRequest.Visibility is restricted to Public/Private — Moderated is server-side only.\r\nNullable CLR properties allow JSON binding to materialize incomplete requests; required\r\nfields are enforced by the virtual-events gRPC service when `CreateVirtualEvent` runs."
}
},
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateGameEventRequest"
}
],
"description": "Request body for `POST /v3/universes/{universeId}/game-events`.\r\n`universeId` comes from the URL path, not the body.\r\nVirtualEventsApi.Models.V3.Request.CreateGameEventRequest.Visibility is restricted to Public/Private — Moderated is server-side only.\r\nNullable CLR properties allow JSON binding to materialize incomplete requests; required\r\nfields are enforced by the virtual-events gRPC service when `CreateVirtualEvent` runs."
}
},
"text/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateGameEventRequest"
}
],
"description": "Request body for `POST /v3/universes/{universeId}/game-events`.\r\n`universeId` comes from the URL path, not the body.\r\nVirtualEventsApi.Models.V3.Request.CreateGameEventRequest.Visibility is restricted to Public/Private — Moderated is server-side only.\r\nNullable CLR properties allow JSON binding to materialize incomplete requests; required\r\nfields are enforced by the virtual-events gRPC service when `CreateVirtualEvent` runs."
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateGameEventRequest"
}
],
"description": "Request body for `POST /v3/universes/{universeId}/game-events`.\r\n`universeId` comes from the URL path, not the body.\r\nVirtualEventsApi.Models.V3.Request.CreateGameEventRequest.Visibility is restricted to Public/Private — Moderated is server-side only.\r\nNullable CLR properties allow JSON binding to materialize incomplete requests; required\r\nfields are enforced by the virtual-events gRPC service when `CreateVirtualEvent` runs."
}
}
}
} Responses
| Status | Description |
|---|---|
| 200 | The newly-created game event resource. |
| 400 | Validation failure or server-side reject (moderation, age requirement, ...). |
| 401 | Caller is not authenticated. |
| 403 | Caller lacks permission or quota is exhausted. |
{
"200": {
"description": "The newly-created game event resource.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GameEventResponse"
}
}
}
},
"400": {
"description": "Validation failure or server-side reject (moderation, age requirement, ...).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VirtualEventsApi.ProblemDetails"
}
}
}
},
"401": {
"description": "Caller is not authenticated.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VirtualEventsApi.ProblemDetails"
}
}
}
},
"403": {
"description": "Caller lacks permission or quota is exhausted.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VirtualEventsApi.ProblemDetails"
}
}
}
}
} Authentication
{
"security": [
{
"roblox-api-key": []
},
{
"roblox-oauth2": [
"universe.event: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": [
"Game Events"
],
"summary": "Create a new game event. Returns the full resource on success.",
"operationId": "GameEvents_Create",
"parameters": [
{
"name": "universeId",
"in": "path",
"description": "Universe that will own the new event (from path).",
"required": true,
"schema": {
"type": "integer",
"format": "int64"
}
}
],
"requestBody": {
"description": "The create payload.",
"content": {
"application/json-patch+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateGameEventRequest"
}
],
"description": "Request body for `POST /v3/universes/{universeId}/game-events`.\r\n`universeId` comes from the URL path, not the body.\r\nVirtualEventsApi.Models.V3.Request.CreateGameEventRequest.Visibility is restricted to Public/Private — Moderated is server-side only.\r\nNullable CLR properties allow JSON binding to materialize incomplete requests; required\r\nfields are enforced by the virtual-events gRPC service when `CreateVirtualEvent` runs."
}
},
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateGameEventRequest"
}
],
"description": "Request body for `POST /v3/universes/{universeId}/game-events`.\r\n`universeId` comes from the URL path, not the body.\r\nVirtualEventsApi.Models.V3.Request.CreateGameEventRequest.Visibility is restricted to Public/Private — Moderated is server-side only.\r\nNullable CLR properties allow JSON binding to materialize incomplete requests; required\r\nfields are enforced by the virtual-events gRPC service when `CreateVirtualEvent` runs."
}
},
"text/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateGameEventRequest"
}
],
"description": "Request body for `POST /v3/universes/{universeId}/game-events`.\r\n`universeId` comes from the URL path, not the body.\r\nVirtualEventsApi.Models.V3.Request.CreateGameEventRequest.Visibility is restricted to Public/Private — Moderated is server-side only.\r\nNullable CLR properties allow JSON binding to materialize incomplete requests; required\r\nfields are enforced by the virtual-events gRPC service when `CreateVirtualEvent` runs."
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateGameEventRequest"
}
],
"description": "Request body for `POST /v3/universes/{universeId}/game-events`.\r\n`universeId` comes from the URL path, not the body.\r\nVirtualEventsApi.Models.V3.Request.CreateGameEventRequest.Visibility is restricted to Public/Private — Moderated is server-side only.\r\nNullable CLR properties allow JSON binding to materialize incomplete requests; required\r\nfields are enforced by the virtual-events gRPC service when `CreateVirtualEvent` runs."
}
}
}
},
"responses": {
"200": {
"description": "The newly-created game event resource.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GameEventResponse"
}
}
}
},
"400": {
"description": "Validation failure or server-side reject (moderation, age requirement, ...).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VirtualEventsApi.ProblemDetails"
}
}
}
},
"401": {
"description": "Caller is not authenticated.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VirtualEventsApi.ProblemDetails"
}
}
}
},
"403": {
"description": "Caller lacks permission or quota is exhausted.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VirtualEventsApi.ProblemDetails"
}
}
}
}
},
"x-roblox-stability": "EXPERIMENTAL",
"x-roblox-rate-limits": {
"perApiKeyOwner": {
"period": "MINUTE",
"maxInPeriod": 20
},
"perOauth2Authorization": {
"period": "MINUTE",
"maxInPeriod": 20
}
},
"x-roblox-scopes": [
{
"name": "universe.event:write",
"targetResourceSpecifier": "universes"
}
],
"x-roblox-engine-usability": {
"apiKeyWithHttpService": false
},
"security": [
{
"roblox-api-key": []
},
{
"roblox-oauth2": [
"universe.event:write"
]
}
],
"externalDocs": {
"url": "https://create.roblox.com/docs/cloud/reference/features/virtual-events#GameEvents_Create"
}
}