Cast 2.0
Generates LiveKit credentials for a streamer to broadcast in a scene. This endpoint validates a streaming token and provides the necessary credentials for a streamer to connect to the LiveKit room and start streaming. No authentication required - uses streaming token for validation.
Streaming token for authentication
Display name for the streamer
Streamer token generated successfully
LiveKit connection URL
LiveKit JWT token for authentication
LiveKit room ID
Unique internal identity for the streamer
Invalid request - Missing required fields
Unauthorized - Invalid or expired streaming token
Internal server error
POST /cast/streamer-token HTTP/1.1
Host: comms-gatekeeper.decentraland.org
Content-Type: application/json
Accept: */*
Content-Length: 34
{
"token": "text",
"identity": "text"
}{
"url": "text",
"token": "text",
"roomId": "text",
"identity": "text"
}Generates LiveKit credentials for a watcher to view streams in a location. This endpoint allows users to join as viewers in a specific location (parcel or world) and watch active streams.
Requires Signed Fetch authentication from a wallet (a decentraland-kernel-scene signer is rejected: viewers are end users, not scenes). A verified wallet is required because watchers join the scene's real comms room, so both scene bans and platform bans are enforced against it — either one is rejected with 403.
Signed Fetch authentication for scene-based requests. Requires a chain of identity headers:
- x-identity-auth-chain-0: Signer information
- x-identity-auth-chain-1: Ephemeral key information
- x-identity-auth-chain-2: Signed entity information
- x-identity-timestamp: Request timestamp
- x-identity-metadata: Request metadata Used for authentication from decentraland-kernel-scene.
Location (parcel coordinates or world name)
20,-4Display name for the watcher
Watcher token generated successfully
LiveKit connection URL
LiveKit JWT token for authentication
LiveKit room ID
Unique internal identity for the watcher
Name of the place being watched
Invalid request - Missing required fields
Unauthorized - No active stream found for location
Forbidden - The watcher has an active platform ban (or last connected from a banned device), or is banned from the scene
Internal server error
POST /cast/watcher-token HTTP/1.1
Host: comms-gatekeeper.decentraland.org
x-identity: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 38
{
"location": "20,-4",
"identity": "text"
}{
"url": "text",
"token": "text",
"roomId": "text",
"identity": "text",
"placeName": "text"
}Generates a unique stream link for a scene that allows streamers to broadcast and watchers to view the stream. Only scene administrators can generate stream links. The generated link expires after 4 days. Requires Signed Fetch authentication from decentraland-kernel-scene. Must include the complete identity header chain: x-identity-auth-chain-0, x-identity-auth-chain-1, x-identity-auth-chain-2, x-identity-timestamp, and x-identity-metadata.
Rejected with 403 when the caller has an active platform ban, checked before the scene admin lookup so the response never doubles as an admin-status oracle. The local-preview branch (ALLOW_LOCAL_PREVIEW with a preview realm name) is gated too, even though it skips the admin check.
This is the only wallet-scoped gate on the streaming path: POST /cast/streamer-token authenticates a streaming key rather than a wallet, so a key minted before the ban keeps working until it expires.
Signed Fetch authentication for scene-based requests. Requires a chain of identity headers:
- x-identity-auth-chain-0: Signer information
- x-identity-auth-chain-1: Ephemeral key information
- x-identity-auth-chain-2: Signed entity information
- x-identity-timestamp: Request timestamp
- x-identity-metadata: Request metadata Used for authentication from decentraland-kernel-scene.
Stream link generated successfully
URL for streamers to access the stream
URL for watchers to access the stream
Unique streaming key for authentication
ID of the place
Name of the place
Expiration timestamp in ISO format
Number of days until expiration
Invalid request - Missing required fields or invalid scene data
Unauthorized - Authentication required or insufficient permissions
Forbidden - The caller has an active platform ban, or last connected from a banned device
Internal server error
GET /cast/generate-stream-link HTTP/1.1
Host: comms-gatekeeper.decentraland.org
x-identity: YOUR_API_KEY
Accept: */*
{
"streamLink": "text",
"watcherLink": "text",
"streamingKey": "text",
"placeId": "text",
"placeName": "text",
"expiresAt": "2026-01-01T00:00:00.000Z",
"expiresInDays": 1
}Retrieves information about a stream using its streaming key. This endpoint provides details about the place, location, and stream status. No authentication required.
Streaming key for the stream
Stream information retrieved successfully
Name of the place
ID of the place
Location identifier (world name or parcel coordinates)
Whether this is a world or a parcel
Invalid request - Invalid streaming key
Stream not found or expired
Internal server error
GET /cast/stream-info/{streamingKey} HTTP/1.1
Host: comms-gatekeeper.decentraland.org
Accept: */*
{
"placeName": "text",
"placeId": "text",
"location": "text",
"isWorld": true
}Generates a LiveKit token for a presentation bot to join a cast room. The bot uses this token to connect to the room and manage presentations. No authentication required - uses streaming key for validation.
Streaming key to generate presentation bot token for
Presentation bot token generated successfully
LiveKit JWT token for the presentation bot
LiveKit room ID the bot can join
Invalid request - Missing or invalid streaming key
Unauthorized - Invalid or expired streaming key
Internal server error
POST /cast/presentation-bot-token HTTP/1.1
Host: comms-gatekeeper.decentraland.org
Content-Type: application/json
Accept: */*
Content-Length: 23
{
"streamingKey": "text"
}{
"token": "text",
"roomId": "text"
}Returns the list of participants with the presenter role in a cast room. The roomId is derived server-side from the Signed Fetch auth metadata (sceneId + realm). Only scene administrators can list presenters. Requires Signed Fetch authentication.
Signed Fetch authentication for scene-based requests. Requires a chain of identity headers:
- x-identity-auth-chain-0: Signer information
- x-identity-auth-chain-1: Ephemeral key information
- x-identity-auth-chain-2: Signed entity information
- x-identity-timestamp: Request timestamp
- x-identity-metadata: Request metadata Used for authentication from decentraland-kernel-scene.
Presenters listed successfully
List of participant identities with presenter role
Unauthorized - Not a scene administrator
Internal server error
GET /cast/presenters HTTP/1.1
Host: comms-gatekeeper.decentraland.org
x-identity: YOUR_API_KEY
Accept: */*
{
"presenters": [
"text"
]
}Promotes a participant in a cast room to the presenter role, allowing them to share content. The roomId is derived server-side from the Signed Fetch auth metadata (sceneId + realm). Only scene administrators can promote presenters. Requires Signed Fetch authentication.
Signed Fetch authentication for scene-based requests. Requires a chain of identity headers:
- x-identity-auth-chain-0: Signer information
- x-identity-auth-chain-1: Ephemeral key information
- x-identity-auth-chain-2: Signed entity information
- x-identity-timestamp: Request timestamp
- x-identity-metadata: Request metadata Used for authentication from decentraland-kernel-scene.
Ethereum address of the participant to promote (0x + 40 hex characters)
^0x[0-9a-fA-F]{40}$Participant promoted to presenter
Success message
Invalid participantIdentity format
Unauthorized - Not a scene administrator or no active stream
Internal server error
PUT /cast/presenters/{participantIdentity} HTTP/1.1
Host: comms-gatekeeper.decentraland.org
x-identity: YOUR_API_KEY
Accept: */*
{
"message": "text"
}Demotes a presenter back to the watcher role, revoking their ability to share content. The roomId is derived server-side from the Signed Fetch auth metadata (sceneId + realm). Only scene administrators can demote presenters. Requires Signed Fetch authentication.
Signed Fetch authentication for scene-based requests. Requires a chain of identity headers:
- x-identity-auth-chain-0: Signer information
- x-identity-auth-chain-1: Ephemeral key information
- x-identity-auth-chain-2: Signed entity information
- x-identity-timestamp: Request timestamp
- x-identity-metadata: Request metadata Used for authentication from decentraland-kernel-scene.
Ethereum address of the participant to demote (0x + 40 hex characters)
^0x[0-9a-fA-F]{40}$Participant demoted from presenter
Success message
Invalid participantIdentity format
Unauthorized - Not a scene administrator or no active stream
Internal server error
DELETE /cast/presenters/{participantIdentity} HTTP/1.1
Host: comms-gatekeeper.decentraland.org
x-identity: YOUR_API_KEY
Accept: */*
{
"message": "text"
}Last updated