5 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 /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:

Parameters

NameLocationRequiredDescription
universeIdpathtrueUniverse 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

StatusDescription
200The newly-created game event resource.
400Validation failure or server-side reject (moderation, age requirement, ...).
401Caller is not authenticated.
403Caller 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": {}
        }
      }
    }
  }
}

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