Room API
| Endpoint | Method | Description |
|---|---|---|
| explorer:searchRooms | websocket | Search public rooms |
| websocket | Get public rooms: deprecated | |
| websocket | Search public rooms: deprecated | |
| websocket | Get featured rooms: deprecated | |
| explorer:searchStorylines | websocket | Search storylines |
| websocket | Get user rooms | |
| room:searchRoomsOfUser | websocket | Search rooms of user |
| room:searchRoomsForCMS | websocket | Search rooms of user for CMS |
| room:discoverRoomsByCbac | websocket | Discover rooms by CBAC |
| websocket | Get template rooms | |
| room:getTemplateRoom | websocket | Get template room |
| room:getTemplateRoomForPreview | websocket | Get template room for preview |
| room:listTemplateRooms | websocket | List template rooms |
| room:createRoomFromTemplate | websocket | Create room from template |
| room:create | websocket | Create room |
| room:copy | websocket | Copy room |
| websocket | Get room: no asset mesh | |
| websocket | Get room: cached: old | |
| room:getRoom | websocket | Get room: cached |
| websocket | Get room metadata | |
| room:getRoomBasicModel | websocket | Get room basic model |
| room:getRoomSettings | websocket | Get room settings |
| room:getRoomForAvatarSetup | websocket | Get room for avatar setup |
| room:permissions | websocket | Get room permissions |
| room:requestAccess | websocket | Request room access |
| room:delete | websocket | Delete room |
| room:update | websocket | Update room |
| room:updateMetadata | websocket | Update room metadata |
| room:setEnvironment | websocket | Set room environment |
| room:setAllowEmbed | websocket | Set room allow embed |
| room:deleteThumbnail | websocket | Delete room thumbnail |
| room:setPreview | websocket | Set room preview |
| room:deletePreview | websocket | Delete room preview |
| room:setRoomBehaviourSettings | websocket | Set room behaviour settings |
| room:setAvatarsLocationSettings | websocket | Set avatars location settings |
| room:setBotSettings | websocket | Set bot settings |
| room:setAmbientMusicSettings | websocket | Set ambient music settings |
| room:setSocialCircleSettings | websocket | Set social circle settings |
| room:setEnvironmentSettings | websocket | Set environment settings |
| room:setCustomSettings | websocket | Set custom room settings |
| room:setAIBotSettings | websocket | Set room aI bot settings |
| room:getAIBotSettings | websocket | Get room aI bot settings |
| room:getLightData | websocket | Get room light data |
| room:getTemplateLightData | websocket | Get template room light data |
| room:setLightData | websocket | Set room light data |
| room:deleteLightData | websocket | Delete room light data |
| room:createAlias | websocket | Create room alias |
| room:deleteAlias | websocket | Delete room alias |
| room:addStyle | websocket | Add room style |
| room:deleteStyle | websocket | Delete room style |
| room:addPanel | websocket | Add room panel |
| room:deletePanel | websocket | Delete room panel |
| room:addProp | websocket | Add room prop |
| room:getProp | websocket | Get room prop |
| room:getPropWithResource | websocket | Get room prop with resource |
| room:listProps | websocket | List room props |
| room:deleteProp_outOfBound | websocket | Delete room prop: out of bound |
| room:deleteProp | websocket | Delete room prop |
| room:restoreProp | websocket | Restore room prop |
| room:updateProp | websocket | Update prop |
| room:setUserCustomParamsForProp | websocket | Set user custom params for prop |
| room:deleteUserCustomParamsForProp | websocket | Delete user custom params for prop |
| room:getUserCustomParamsForPropsInRoom | websocket | Get user custom params for props in room |
| room:getSortingTable | websocket | Get room sorting table content |
| room:getRoomContent | websocket | Get room content |
| room:visitors | websocket | Get visitors |
| room:sendUserLocation | websocket | Send user location |
| room:join | websocket | Join room |
| room:leave | websocket | Leave room |
| room:addCameraPosition | websocket | Add camera position |
| room:updateCameraPosition | websocket | Update camera position |
| room:deleteCameraPosition | websocket | Delete camera position |
| room:getCameraPositions | websocket | Get camera positions |
| room:listUserPublicRoomsWithStaticSocialCircles | websocket | List user public rooms with static social circles |
| room:import | websocket | Import room |
| room:createStoryline | websocket | Create storyline |
| room:updateStoryline | websocket | Update storyline |
| room:deleteStoryline | websocket | Delete storyline |
| room:createJourneyPath | websocket | Create journey path |
| room:updateJourneyPath | websocket | Update journey path |
| room:deleteJourneyPath | websocket | Delete journey path |
| room:getJourneyPaths | websocket | Get journey paths |
| websocketEvent | On resources added to room sorting table event | |
| websocketEvent | On resources deleted from room sorting table event | |
| websocketEvent | On room resource updated event | |
| websocketEvent | On room sorting table resource updated event | |
| room:subscriptionStatusUpdated | websocketEvent | On room subscription status updated event |
| room:created | websocketEvent | On room created event |
| room:delete | websocketEvent | On room deleted event |
| room:metadataUpdated | websocketEvent | On room metadata updated event |
| room:settingsUpdated | websocketEvent | On room settings updated event |
| room:environmentUpdated | websocketEvent | On room environment updated event |
| room:storylineCreated | websocketEvent | On storyline created event |
| room:storylineUpdated | websocketEvent | On storyline updated event |
| room:storylineDeleted | websocketEvent | On storyline deleted event |
| room:cameraPositionAdded | websocketEvent | On camera position added event |
| room:cameraPositionUpdated | websocketEvent | On camera position updated event |
| room:cameraPositionDeleted | websocketEvent | On camera position deleted event |
| room:journeyPathCreated | websocketEvent | Handle journey path created event |
| room:journeyPathUpdated | websocketEvent | Handle journey path updated event |
| room:journeyPathDeleted | websocketEvent | Handle journey path deleted event |
| room:propAdded | websocketEvent | On room prop added event |
| room:propDeleted | websocketEvent | On room prop deleted event |
| room:propRestored | websocketEvent | On room prop restored event |
| room:propUpdated | websocketEvent | On room prop updated event |
| room:userConnectedToSocialCircleVideochat | websocketEvent | User connected to social circle videochat |
| room:userDisconnectedFromSocialCircleVideochat | websocketEvent | User disconnected from social circle videochat |
| room:videochatPresenterChanged | websocketEvent | Room videochat presenter changed event |
| room:videochatCoPresenterChanged | websocketEvent | Room videochat co presenter changed event |
| room:userJoined | websocketEvent | User joined room event |
| room:userLeft | websocketEvent | User left room event |
| room:userLocationChanged | websocketEvent | User room location changed event |
| room:hasLightData | websocketEvent | Room has light data event |
Search public rooms
Method: websocket
Endpoint: explorer:searchRooms
Description: API returns public rooms (according to search query) from all users in network.
Request:
{
"data": {
"query": string
"tags": [ string ]
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"rooms": [{
"id": string
"name": string
"tags": [ string ]
"thumbnailId": string
"subscriptionStatus": string
"ownerIds": [ string ]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Get public rooms: deprecated
Method: websocket
Endpoint: explorer:rooms
DEPRECATED
Description: API returns public rooms from all users in network. Rooms are sorted by popularity, most watched come first.
Request:
{
"data": {
"tags": [ string ]
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"query": string
"tags": [ string ]
"offset": int
"size": int
"rooms": [{ room structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
Search public rooms: deprecated
Method: websocket
Endpoint: explorer:search
DEPRECATED
Description: API returns public rooms (according to search query) from all users in network.
Request:
{
"data": {
"query": string
"tags": [ string ]
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"query": string
"tags": [ string ]
"offset": int
"size": int
"rooms": [{ room structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
Get featured rooms: deprecated
Method: websocket
Endpoint: explorer:featuredRooms
DEPRECATED
Description: API returns public rooms that were featured by admins.
Request:
{
"data": {
"tags": [ string ]
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"query": string
"tags": [ string ]
"offset": int
"size": int
"rooms": [{ room structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
Search storylines
Method: websocket
Endpoint: explorer:searchStorylines
Description: API returns public storylines from all users in network.
Request:
{
"data": {
"query": string
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"query": string
"tags": [ string ]
"offset": int
"size": int
"storylines": [{
"id": string
"title": string
"roomId": string
"roomName": string
"roomThumbnailId": string
"owners": [ string ]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Get user rooms
Method: websocket
Endpoint: rooms
DEPRECATED
Request:
{
"data": {
"networkId": string // if provided, api searches for rooms in a specific network
"userId": string // if provided, api searches for available (public/invitation) rooms of other user
"query": string // search query
"filter": string // public/private/shared/favourite
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"userId": string
"rooms": [{ room structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
Search rooms of user
Method: websocket
Endpoint: room:searchRoomsOfUser
Request:
{
"data": {
"networkId": string // if provided, api searches for rooms in a specific network
"userId": string // if provided, api searches for available (public/invitation) rooms of other user
"query": string // search query
"filter": string // public/private/shared/favourite
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"rooms": [{
"id": string
"name": string
"tags": [ string ]
"thumbnailId": string
"subscriptionStatus": string
"ownerIds": [ string ]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Search rooms of user for CMS
Method: websocket
Endpoint: room:searchRoomsForCMS
Description: Same as room:searchRoomsOfUser, but additionally returns indexation state (filled by RAG) of each returned room's room:{roomId} belonging, keyed by roomId.
Request:
{
"data": {
"networkId": string // if provided, api searches for rooms in a specific network
"userId": string // if provided, api searches for available (public/invitation) rooms of other user
"query": string // search query
"filter": string // public/private/shared/favourite
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"rooms": [{
"id": string
"name": string
"tags": [ string ]
"thumbnailId": string
"subscriptionStatus": string
"ownerIds": [ string ]
}]
"indexStates": map[string]{ // maps roomId to indexation state of its room:{roomId} belonging
"belongingKey": string
"state": map[string]{ custom structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Discover rooms by CBAC
Method: websocket
Endpoint: room:discoverRoomsByCbac
Description: Returns rooms that the calling user can access via CBAC badge policies, regardless of room privacy — this is how badge holders discover private rooms unlockable by their badges, without needing an existing invitation. Lists the caller's badges, resolves them to CBAC room targets, and returns the matching rooms.
Request:
{
"data": {
"query": string
"tags": [ string ]
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"rooms": [{
"id": string
"name": string
"tags": [ string ]
"thumbnailId": string
"subscriptionStatus": string
"ownerIds": [ string ]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Get template rooms
Method: websocket
Endpoint: room:getTemplateRooms
DEPRECATED
Description: API returns list of template rooms. User can create a new room based on template room.
Request:
{
"data": {
"style": string
"query": string
"tags": [ string ]
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"rooms": [{ room structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
Get template room
Method: websocket
Endpoint: room:getTemplateRoom
Description: API returns template room model by its id. User can create a new room based on template room.
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"template": {
"id": string
"name": string
"tags": [ string ]
"ownerIds": [ string ]
"privacy": string // private/public/openForAttendees
"subscriptionStatus": string // free/active/expired
"price": float
"templateStyles": [ string ]
}
}
"error": { "status": bool, "code": int, "message": string }
}
Get template room for preview
Method: websocket
Endpoint: room:getTemplateRoomForPreview
Description: Api returns template room with content. User can create a new room based on template room.
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": {
"id": string
"created": timestamp
"updated": timestamp
"explorerStatus": string // show/hide room in explorer
"subscriptionStatus": string // free/active/expired
"environmentId": string // id of environment asset
"price": float // price for room template
"allowEmbed": bool // allow embedding room to non valuverse web pages
"roomIdentity": string // verus identity of room
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"alias": string
"group": string
"domains": [ string ]
"thumbnail": { resource structure }
"preview": { resource structure }
"content": [{ room style structure }]
"owners": [{ user simple structure }]
"invitedUsers": [{ user simple structure }]
"stories": [{ storyline structure }]
"cameraPositions": [{ camera position structure }]
"hasJourneyPath": bool
"hasPlacementAreas": bool
"templateStyles": [ string ]
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
"settings": {
"roomBehaviour": int
"videochat": {
"videochatMode": string // videochat/conference
"videochatType": string // twilio only (peer-to-peer/group/group-small)
"videochatEngine": string // twilio/agora/livekit
"videochatInitUser": string // who can start the videochat (any/manager)
"excludeListeners": bool // don't show non-promoted videochat users
"usePresentationBoard": bool // use presentation board as share screen media
"enableStreaming": bool // enable videochat streaming to non participants
"notificationMode": int // notification mode for videochat events
"autoPromotion": {
"useCustomSettings": bool // if false, videochat will use server default settings
"autoPromotionLimit": int // limit of participants with automatic voice permissions
"autoDemoteOnLimit": bool // demote participants that were automatically promoted
}
"limitSettings": {
"useCustomSettings": bool // if false, videochat will use server default settings
"videochatLimit": int // amount of identities allowed in videochat (0 means unlimited)
}
}
"avatarsLocation": {
"showAvatars": bool
"showMode": string
}
"bots": {
"botsCount": int
}
"ambientMusic": {
"resourceId": string
"volume": float
}
"socialCircle": {
"isSocialCircleAvailableForAll": bool
}
"environment": {
"environmentId": string
"resourceId": string
"isVideo": bool
"useFlatColor": bool
"rotation": int
"altitude": int
"scale": int
"posX": int
"posZ": int
"title": string
}
"params": map[string]{ custom structure } // custom params set by client application
}
"userReactions": { user reactions structure }
}
"assets": map[string]{ asset bundle prop structure }
"styles": map[string]{ asset bundle style structure }
"environments": map[string]{ asset bundle environment structure }
"propSkins": map[string]{ asset bundle skin structure }
}
"error": { "status": bool, "code": int, "message": string }
}
List template rooms
Method: websocket
Endpoint: room:listTemplateRooms
Description: API returns list of template rooms. User can create a new room based on template room.
Request:
{
"data": {
"style": string
"query": string
"tags": [ string ]
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"templates": [{
"id": string
"name": string
"tags": [ string ]
"ownerIds": [ string ]
"privacy": string // private/public/openForAttendees
"subscriptionStatus": string // free/active/expired
"price": float
"templateStyles": [ string ]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Create room from template
Method: websocket
Endpoint: room:createRoomFromTemplate
Request:
{
"data": {
"room": string // template room id
"roomName": string // name of new room
"subscriptionPlan": string // free/one_time_payment/subscription_week/subscription_month/subscription_6_months/subscription_year
"walletAddress": string // wallet address (in case of crypto currency payment)
"currency": string // rents (default) / roomi (Roomful crypto currency) / Valu (ValuVerse crypto currency)
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Create room
Method: websocket
Endpoint: room:create
Request:
{
"data": {
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"environmentId": string
"content": [{ room style structure }]
"subscriptionPlan": string // free/one_time_payment/subscription_week/subscription_month/subscription_6_months/subscription_year
"walletAddress": string // wallet address (in case of crypto currency payment)
"currency": string // rents (default) / roomi (Roomful crypto currency) / Valu (ValuVerse crypto currency)
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Copy room
Method: websocket
Endpoint: room:copy
Description: Endpoint creates copy of room. Endpoint requires network manager permissions.
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Get room: no asset mesh
Method: websocket
Endpoint: room:get_noAssetMesh
DEPRECATED
Description: Api returns room with content. Doesn't return assetmesh.
Deprecated, use room:getRoom instead.
Request:
{
"data": {
"roomId": string
"subscribe": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": {
"id": string
"created": timestamp
"updated": timestamp
"explorerStatus": string // show/hide room in explorer
"subscriptionStatus": string // free/active/expired
"environmentId": string // id of environment asset
"price": float // price for room template
"allowEmbed": bool // allow embedding room to non valuverse web pages
"roomIdentity": string // verus identity of room
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"alias": string
"group": string
"domains": [ string ]
"thumbnail": { resource structure }
"preview": { resource structure }
"content": [{ room style structure }]
"owners": [{ user simple structure }]
"invitedUsers": [{ user simple structure }]
"stories": [{ storyline structure }]
"cameraPositions": [{ camera position structure }]
"hasJourneyPath": bool
"hasPlacementAreas": bool
"templateStyles": [ string ]
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
"settings": {
"roomBehaviour": int
"videochat": {
"videochatMode": string // videochat/conference
"videochatType": string // twilio only (peer-to-peer/group/group-small)
"videochatEngine": string // twilio/agora/livekit
"videochatInitUser": string // who can start the videochat (any/manager)
"excludeListeners": bool // don't show non-promoted videochat users
"usePresentationBoard": bool // use presentation board as share screen media
"enableStreaming": bool // enable videochat streaming to non participants
"notificationMode": int // notification mode for videochat events
"autoPromotion": {
"useCustomSettings": bool // if false, videochat will use server default settings
"autoPromotionLimit": int // limit of participants with automatic voice permissions
"autoDemoteOnLimit": bool // demote participants that were automatically promoted
}
"limitSettings": {
"useCustomSettings": bool // if false, videochat will use server default settings
"videochatLimit": int // amount of identities allowed in videochat (0 means unlimited)
}
}
"avatarsLocation": {
"showAvatars": bool
"showMode": string
}
"bots": {
"botsCount": int
}
"ambientMusic": {
"resourceId": string
"volume": float
}
"socialCircle": {
"isSocialCircleAvailableForAll": bool
}
"environment": {
"environmentId": string
"resourceId": string
"isVideo": bool
"useFlatColor": bool
"rotation": int
"altitude": int
"scale": int
"posX": int
"posZ": int
"title": string
}
"params": map[string]{ custom structure } // custom params set by client application
}
"userReactions": { user reactions structure }
}
"assets": map[string]{ asset bundle prop structure }
"styles": map[string]{ asset bundle style structure }
"environments": map[string]{ asset bundle environment structure }
"propSkins": map[string]{ asset bundle skin structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Get room: cached: old
Method: websocket
Endpoint: room:get_cached
DEPRECATED
Description: ~~Api returns room with content. ~~ ~~* Api doesn't return assetmesh. ~~ ~~* Api returns "Room is private" (error code 803) in case if room user doesn't have permissions to view room. ~~ * Api returns "Subscription expired" (error code 2008) in case if room subscription is expired.
Deprecated, use room:getRoom instead.
Request:
{
"data": {
"roomId": string
"subscribe": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": {
"id": string
"created": timestamp
"updated": timestamp
"explorerStatus": string // show/hide room in explorer
"subscriptionStatus": string // free/active/expired
"environmentId": string // id of environment asset
"price": float // price for room template
"allowEmbed": bool // allow embedding room to non valuverse web pages
"roomIdentity": string // verus identity of room
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"alias": string
"group": string
"domains": [ string ]
"thumbnail": { resource structure }
"preview": { resource structure }
"content": [{ room style structure }]
"owners": [{ user simple structure }]
"invitedUsers": [{ user simple structure }]
"stories": [{ storyline structure }]
"cameraPositions": [{ camera position structure }]
"hasJourneyPath": bool
"hasPlacementAreas": bool
"templateStyles": [ string ]
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
"settings": {
"roomBehaviour": int
"videochat": {
"videochatMode": string // videochat/conference
"videochatType": string // twilio only (peer-to-peer/group/group-small)
"videochatEngine": string // twilio/agora/livekit
"videochatInitUser": string // who can start the videochat (any/manager)
"excludeListeners": bool // don't show non-promoted videochat users
"usePresentationBoard": bool // use presentation board as share screen media
"enableStreaming": bool // enable videochat streaming to non participants
"notificationMode": int // notification mode for videochat events
"autoPromotion": {
"useCustomSettings": bool // if false, videochat will use server default settings
"autoPromotionLimit": int // limit of participants with automatic voice permissions
"autoDemoteOnLimit": bool // demote participants that were automatically promoted
}
"limitSettings": {
"useCustomSettings": bool // if false, videochat will use server default settings
"videochatLimit": int // amount of identities allowed in videochat (0 means unlimited)
}
}
"avatarsLocation": {
"showAvatars": bool
"showMode": string
}
"bots": {
"botsCount": int
}
"ambientMusic": {
"resourceId": string
"volume": float
}
"socialCircle": {
"isSocialCircleAvailableForAll": bool
}
"environment": {
"environmentId": string
"resourceId": string
"isVideo": bool
"useFlatColor": bool
"rotation": int
"altitude": int
"scale": int
"posX": int
"posZ": int
"title": string
}
"params": map[string]{ custom structure } // custom params set by client application
}
"userReactions": { user reactions structure }
}
"assets": map[string]{ asset bundle prop structure }
"styles": map[string]{ asset bundle style structure }
"environments": map[string]{ asset bundle environment structure }
"propSkins": map[string]{ asset bundle skin structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Get room: cached
Method: websocket
Endpoint: room:getRoom
Description: Api returns room with content.
- Api doesn't return assetmesh.
- Api returns only resources with visible viewpoint in the room.
- Api returns "Room is private" (error code 803) in case if room user doesn't have permissions to view room.
- Api returns "Subscription expired" (error code 2008) in case if room subscription is expired.
Request:
{
"data": {
"roomId": string
"subscribe": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": {
"id": string
"created": timestamp
"updated": timestamp
"explorerStatus": string // show/hide room in explorer
"subscriptionStatus": string // free/active/expired
"environmentId": string // id of environment asset
"price": float // price for room template
"allowEmbed": bool // allow embedding room to non valuverse web pages
"roomIdentity": string // verus identity of room
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"alias": string
"group": string
"domains": [ string ]
"thumbnail": { resource structure }
"preview": { resource structure }
"content": [{ room style structure }]
"owners": [{ user simple structure }]
"invitedUsers": [{ user simple structure }]
"stories": [{ storyline structure }]
"cameraPositions": [{ camera position structure }]
"hasJourneyPath": bool
"hasPlacementAreas": bool
"templateStyles": [ string ]
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
"settings": {
"roomBehaviour": int
"videochat": {
"videochatMode": string // videochat/conference
"videochatType": string // twilio only (peer-to-peer/group/group-small)
"videochatEngine": string // twilio/agora/livekit
"videochatInitUser": string // who can start the videochat (any/manager)
"excludeListeners": bool // don't show non-promoted videochat users
"usePresentationBoard": bool // use presentation board as share screen media
"enableStreaming": bool // enable videochat streaming to non participants
"notificationMode": int // notification mode for videochat events
"autoPromotion": {
"useCustomSettings": bool // if false, videochat will use server default settings
"autoPromotionLimit": int // limit of participants with automatic voice permissions
"autoDemoteOnLimit": bool // demote participants that were automatically promoted
}
"limitSettings": {
"useCustomSettings": bool // if false, videochat will use server default settings
"videochatLimit": int // amount of identities allowed in videochat (0 means unlimited)
}
}
"avatarsLocation": {
"showAvatars": bool
"showMode": string
}
"bots": {
"botsCount": int
}
"ambientMusic": {
"resourceId": string
"volume": float
}
"socialCircle": {
"isSocialCircleAvailableForAll": bool
}
"environment": {
"environmentId": string
"resourceId": string
"isVideo": bool
"useFlatColor": bool
"rotation": int
"altitude": int
"scale": int
"posX": int
"posZ": int
"title": string
}
"params": map[string]{ custom structure } // custom params set by client application
}
"userReactions": { user reactions structure }
}
"assets": map[string]{ asset bundle prop structure }
"styles": map[string]{ asset bundle style structure }
"environments": map[string]{ asset bundle environment structure }
"propSkins": map[string]{ asset bundle skin structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Get room metadata
Method: websocket
Endpoint: room:getMetadata
DEPRECATED
Request:
{
"data": {
"roomId": string
"subscribe": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": { room structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Get room basic model
Method: websocket
Endpoint: room:getRoomBasicModel
Request:
{
"data": {
"networkId": string
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": {
"id": string
"name": string
"tags": [ string ]
"ownerIds": [ string ]
"privacy": string // private/public/openForAttendees
"subscriptionStatus": string // free/active/expired
}
}
"error": { "status": bool, "code": int, "message": string }
}
Get room settings
Method: websocket
Endpoint: room:getRoomSettings
Request:
{
"data": {
"networkId": string
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"settings": {
"roomBehaviour": int
"videochat": {
"videochatMode": string // videochat/conference
"videochatType": string // twilio only (peer-to-peer/group/group-small)
"videochatEngine": string // twilio/agora/livekit
"videochatInitUser": string // who can start the videochat (any/manager)
"excludeListeners": bool // don't show non-promoted videochat users
"usePresentationBoard": bool // use presentation board as share screen media
"enableStreaming": bool // enable videochat streaming to non participants
"notificationMode": int // notification mode for videochat events
"autoPromotion": {
"useCustomSettings": bool // if false, videochat will use server default settings
"autoPromotionLimit": int // limit of participants with automatic voice permissions
"autoDemoteOnLimit": bool // demote participants that were automatically promoted
}
"limitSettings": {
"useCustomSettings": bool // if false, videochat will use server default settings
"videochatLimit": int // amount of identities allowed in videochat (0 means unlimited)
}
}
"avatarsLocation": {
"showAvatars": bool
"showMode": string
}
"bots": {
"botsCount": int
}
"ambientMusic": {
"resourceId": string
"volume": float
}
"socialCircle": {
"isSocialCircleAvailableForAll": bool
}
"environment": {
"environmentId": string
"resourceId": string
"isVideo": bool
"useFlatColor": bool
"rotation": int
"altitude": int
"scale": int
"posX": int
"posZ": int
"title": string
}
"params": map[string]{ custom structure } // custom params set by client application
}
}
"error": { "status": bool, "code": int, "message": string }
}
Get room for avatar setup
Method: websocket
Endpoint: room:getRoomForAvatarSetup
Request:
{ empty }
Response:
{
"data": {
"room": {
"id": string
"created": timestamp
"updated": timestamp
"explorerStatus": string // show/hide room in explorer
"subscriptionStatus": string // free/active/expired
"environmentId": string // id of environment asset
"price": float // price for room template
"allowEmbed": bool // allow embedding room to non valuverse web pages
"roomIdentity": string // verus identity of room
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"alias": string
"group": string
"domains": [ string ]
"thumbnail": { resource structure }
"preview": { resource structure }
"content": [{ room style structure }]
"owners": [{ user simple structure }]
"invitedUsers": [{ user simple structure }]
"stories": [{ storyline structure }]
"cameraPositions": [{ camera position structure }]
"hasJourneyPath": bool
"hasPlacementAreas": bool
"templateStyles": [ string ]
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
"settings": {
"roomBehaviour": int
"videochat": {
"videochatMode": string // videochat/conference
"videochatType": string // twilio only (peer-to-peer/group/group-small)
"videochatEngine": string // twilio/agora/livekit
"videochatInitUser": string // who can start the videochat (any/manager)
"excludeListeners": bool // don't show non-promoted videochat users
"usePresentationBoard": bool // use presentation board as share screen media
"enableStreaming": bool // enable videochat streaming to non participants
"notificationMode": int // notification mode for videochat events
"autoPromotion": {
"useCustomSettings": bool // if false, videochat will use server default settings
"autoPromotionLimit": int // limit of participants with automatic voice permissions
"autoDemoteOnLimit": bool // demote participants that were automatically promoted
}
"limitSettings": {
"useCustomSettings": bool // if false, videochat will use server default settings
"videochatLimit": int // amount of identities allowed in videochat (0 means unlimited)
}
}
"avatarsLocation": {
"showAvatars": bool
"showMode": string
}
"bots": {
"botsCount": int
}
"ambientMusic": {
"resourceId": string
"volume": float
}
"socialCircle": {
"isSocialCircleAvailableForAll": bool
}
"environment": {
"environmentId": string
"resourceId": string
"isVideo": bool
"useFlatColor": bool
"rotation": int
"altitude": int
"scale": int
"posX": int
"posZ": int
"title": string
}
"params": map[string]{ custom structure } // custom params set by client application
}
"userReactions": { user reactions structure }
}
"assets": map[string]{ asset bundle prop structure }
"styles": map[string]{ asset bundle style structure }
"environments": map[string]{ asset bundle environment structure }
"propSkins": map[string]{ asset bundle skin structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Get room permissions
Method: websocket
Endpoint: room:permissions
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
}
"error": { "status": bool, "code": int, "message": string }
}
Request room access
Method: websocket
Endpoint: room:requestAccess
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Delete room
Method: websocket
Endpoint: room:delete
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Update room
Method: websocket
Endpoint: room:update
Description: Does the same as room:updateRoomMetadata but ignores current socket for event broadcasting.
Request:
{
"data": {
"roomId": string
"updated": timestamp
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"thumbnail": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": { room structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Update room metadata
Method: websocket
Endpoint: room:updateMetadata
Description: Api updates room metadata and thumbnail.
Request:
{
"data": {
"roomId": string
"updated": timestamp
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"thumbnail": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": { room structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Set room environment
Method: websocket
Endpoint: room:setEnvironment
Request:
{
"data": {
"roomId": string
"assetId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"environment": { asset bundle environment structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Set room allow embed
Method: websocket
Endpoint: room:setAllowEmbed
Request:
{
"data": {
"roomId": string
"allowEmbed": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Delete room thumbnail
Method: websocket
Endpoint: room:deleteThumbnail
Request:
{
"data": {
"roomId": string
"updated": timestamp
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"thumbnail": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": { room structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Set room preview
Method: websocket
Endpoint: room:setPreview
Request:
{
"data": {
"roomId": string
"preview": string
"updated": timestamp
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Delete room preview
Method: websocket
Endpoint: room:deletePreview
Request:
{
"data": {
"roomId": string
"preview": string
"updated": timestamp
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Set room behaviour settings
Method: websocket
Endpoint: room:setRoomBehaviourSettings
Description: Api sets room behaviour settings in room.
Request:
{
"data": {
"roomId": string
"roomBehaviour": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Set avatars location settings
Method: websocket
Endpoint: room:setAvatarsLocationSettings
Description: Api sets avatar location settings in room.
showMode could be on of the following:
- Parking
- TableConversation
- AnyProps
- Always
Request:
{
"data": {
"roomId": string
"settings": {
"showAvatars": bool
"showMode": string
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Set bot settings
Method: websocket
Endpoint: room:setBotSettings
Description: Api sets bot settings in room.
Request:
{
"data": {
"roomId": string
"settings": {
"botsCount": int
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Set ambient music settings
Method: websocket
Endpoint: room:setAmbientMusicSettings
Description: Api sets ambient music settings in room.
Request:
{
"data": {
"roomId": string
"settings": {
"resourceId": string
"volume": float
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Set social circle settings
Method: websocket
Endpoint: room:setSocialCircleSettings
Description: Api sets social circle settings in room.
Request:
{
"data": {
"roomId": string
"settings": {
"isSocialCircleAvailableForAll": bool
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Set environment settings
Method: websocket
Endpoint: room:setEnvironmentSettings
Description: Api sets environment settings in room.
Request:
{
"data": {
"roomId": string
"settings": {
"environmentId": string
"resourceId": string
"isVideo": bool
"useFlatColor": bool
"rotation": int
"altitude": int
"scale": int
"posX": int
"posZ": int
"title": string
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Set custom room settings
Method: websocket
Endpoint: room:setCustomSettings
Description: Api sets custom settings in room. These settings are handled only by client application. Server stores them, but cannot work with them.
Request:
{
"data": {
"roomId": string
"params": map[string]{ custom structure }
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Set room aI bot settings
Method: websocket
Endpoint: room:setAIBotSettings
Description: Api sets AI bot settings for room.
Request:
{
"data": {
"roomId": string
"aiBot": {
"promptEngineering": string
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Get room aI bot settings
Method: websocket
Endpoint: room:getAIBotSettings
Description: Api gets room AI bot settings.
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"promptEngineering": string
}
"error": { "status": bool, "code": int, "message": string }
}
Get room light data
Method: websocket
Endpoint: room:getLightData
Description: API returns predefined light data in room. Light data is used to create beautiful, cinematic rooms.
Request:
{
"data": {
"roomId": string
"platform": string // WebGL/iOS/Android/StandaloneWindows64
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"platform": string // WebGL/iOS/Android/StandaloneWindows64
"lightData": {
"roomId": string
"platform": string // WebGL/iOS/Android/StandaloneWindows64
"lightmapsMode": int
"rendererLightingData": [{
"source": int // 0 - None, 1 - Prop, 2 - Panel, 3 - Other
"sourceId": string
"rendererName": string
"lightmapIndex": int
"lightmapOffsetScale": { xyzw structure }
}]
"lightmapInfos": [{
"resourceId": string
"lightmapSize": int
}]
"lightmapDirInfos": [{
"resourceId": string
"lightmapSize": int
}]
"shadowmaskInfos": [{
"resourceId": string
"lightmapSize": int
}]
}
}
"error": { "status": bool, "code": int, "message": string }
}
Get template room light data
Method: websocket
Endpoint: room:getTemplateLightData
Request:
{
"data": {
"roomId": string
"platform": string // WebGL/iOS/Android/StandaloneWindows64
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"platform": string // WebGL/iOS/Android/StandaloneWindows64
"lightData": {
"roomId": string
"platform": string // WebGL/iOS/Android/StandaloneWindows64
"lightmapsMode": int
"rendererLightingData": [{
"source": int // 0 - None, 1 - Prop, 2 - Panel, 3 - Other
"sourceId": string
"rendererName": string
"lightmapIndex": int
"lightmapOffsetScale": { xyzw structure }
}]
"lightmapInfos": [{
"resourceId": string
"lightmapSize": int
}]
"lightmapDirInfos": [{
"resourceId": string
"lightmapSize": int
}]
"shadowmaskInfos": [{
"resourceId": string
"lightmapSize": int
}]
}
}
"error": { "status": bool, "code": int, "message": string }
}
Set room light data
Method: websocket
Endpoint: room:setLightData
Request:
{
"data": {
"roomId": string
"platform": string // WebGL/iOS/Android/StandaloneWindows64
"lightData": {
"lightmapsMode": int
"rendererLightingData": [{
"source": int // 0 - None, 1 - Prop, 2 - Panel, 3 - Other
"sourceId": string
"rendererName": string
"lightmapIndex": int
"lightmapOffsetScale": { xyzw structure }
}]
"lightmapInfos": [{
"resourceId": string
"lightmapSize": int
}]
"lightmapDirInfos": [{
"resourceId": string
"lightmapSize": int
}]
"shadowmaskInfos": [{
"resourceId": string
"lightmapSize": int
}]
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Delete room light data
Method: websocket
Endpoint: room:deleteLightData
Request:
{
"data": {
"roomId": string
"platform": string // WebGL/iOS/Android/StandaloneWindows64
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Create room alias
Method: websocket
Endpoint: room:createAlias
Description: API creates an alias for the room. The alias could be used for room retrieving instead of room id (e.g. for room:get).
If alias group is not provided:
Alias is unique across the system;
Room could be fetched by alias.
If alias group is provided:
Alias is unique within the group;
Combination of group and Alias is unique across the system;
Room could be fetched by combination of group and alias like "{group}/{alias}".
Request:
{
"data": {
"roomId": string
"alias": string
"group": string
"domains": [ string ]
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Delete room alias
Method: websocket
Endpoint: room:deleteAlias
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Add room style
Method: websocket
Endpoint: room:addStyle
Request:
{
"data": {
"roomId": string
"previousStyleId": string
"style": {
"id": string
"created": timestamp
"updated": timestamp
"assetId": string
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"styleId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Delete room style
Method: websocket
Endpoint: room:deleteStyle
Request:
{
"data": {
"roomId": string
"styleId": string
"moveResourcesToRoomSortingTable": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"styleId": string
"moveResourcesToRoomSortingTable": bool
}
"error": { "status": bool, "code": int, "message": string }
}
Add room panel
Method: websocket
Endpoint: room:addPanel
Request:
{
"data": {
"roomId": string
"styleId": string
"previousPanelId": string
"panel": {
"id": string
"created": timestamp
"updated": timestamp
"type": string
"mobileGeometry": { geometry structure }
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"styleId": string
"panelId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Delete room panel
Method: websocket
Endpoint: room:deletePanel
Request:
{
"data": {
"roomId": string
"styleId": string
"panelId": string
"moveResourcesToRoomSortingTable": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"styleId": string
"panelId": string
"moveResourcesToRoomSortingTable": bool
}
"error": { "status": bool, "code": int, "message": string }
}
Add room prop
Method: websocket
Endpoint: room:addProp
Description: Add room prop to room. If propTypes contains socialCircleDynamic, server checks if user has permission to edit target room or room has isSocialCircleAvailableForAll setting.
Request:
{
"data": {
"roomId": string
"styleId": string
"panelId": string
"prop": {
"id": string
"created": timestamp
"updated": timestamp
"mobileGeometry": { geometry structure }
"title": string
"description": string
"tags": [ string ]
"propTypes": [ string ] // booth/fileCabinet/socialCircleStatic/socialCircleDynamic/entireRoomChat
"parentId": string // prop id of parent where current prop is standing
"actionType": string
"webLink": string
"webTitle": string
"isInteractive": bool // show prop when clicking next/previous in room prop list
"showType": int // 0 - None, 1 - GoldPanel, 2 - BoothPanel
"contentPickerType": int // 0 - Default, 1 - AudioContainer, 2 - VideoContainer
"contentSorting": {
"type": string // default/name/date/type/size
"direction": string // asc/desc
}
"contentAppend": string // default direction for content appending (start/end)
"isAllowTextchat": bool // if true - allow prop textchat
"allowUserParams": bool // if true - allow custom params per user
"customParams": map[string]{ custom structure } // client defined params
"actions": [{ programmatic action with children structure }] // custom programmatic actions from users
"dataBound": { // bound prop data to some action
"isEnabled": bool
"dataBoundAction": string
}
"assetId": string
"assetTitle": string
"assetSkins": map[string]string // map of selected skins per variants
"roomId": string
"roomTitle": string
"styleId": string
"panelId": string
"placementAreaId": string // in case if prop is a part of placement area
"params": string // DEPRECATED, remove after backwards compatibility is no longer required.
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Get room prop
Method: websocket
Endpoint: room:getProp
Request:
{
"data": {
"roomId": string
"propId": string
"subscribe": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"prop": {
"id": string
"created": timestamp
"updated": timestamp
"mobileGeometry": { geometry structure }
"title": string
"description": string
"tags": [ string ]
"propTypes": [ string ] // booth/fileCabinet/socialCircleStatic/socialCircleDynamic/entireRoomChat
"parentId": string // prop id of parent where current prop is standing
"actionType": string
"webLink": string
"webTitle": string
"isInteractive": bool // show prop when clicking next/previous in room prop list
"showType": int // 0 - None, 1 - GoldPanel, 2 - BoothPanel
"contentPickerType": int // 0 - Default, 1 - AudioContainer, 2 - VideoContainer
"contentSorting": {
"type": string // default/name/date/type/size
"direction": string // asc/desc
}
"contentAppend": string // default direction for content appending (start/end)
"isAllowTextchat": bool // if true - allow prop textchat
"allowUserParams": bool // if true - allow custom params per user
"customParams": map[string]{ custom structure } // client defined params
"actions": [{ programmatic action with children structure }] // custom programmatic actions from users
"dataBound": { // bound prop data to some action
"isEnabled": bool
"dataBoundAction": string
}
"assetId": string
"assetTitle": string
"assetSkins": map[string]string // map of selected skins per variants
"roomId": string
"roomTitle": string
"styleId": string
"panelId": string
"placementAreaId": string // in case if prop is a part of placement area
"contentSource": { // if present, current prop will fetch content from source prop
"roomId": string
"propId": string
}
"contentCount": int // amount of resources in prop
"content": [{ resource structure }] // prop resources
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
}
"assets": map[string]{ asset bundle prop structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Get room prop with resource
Method: websocket
Endpoint: room:getPropWithResource
Request:
{
"data": {
"networkId": string
"roomId": string
"propId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"prop": { room prop structure }
}
"error": { "status": bool, "code": int, "message": string }
}
List room props
Method: websocket
Endpoint: room:listProps
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"props": [{
"id": string
"created": timestamp
"updated": timestamp
"mobileGeometry": { geometry structure }
"title": string
"description": string
"tags": [ string ]
"propTypes": [ string ] // booth/fileCabinet/socialCircleStatic/socialCircleDynamic/entireRoomChat
"parentId": string // prop id of parent where current prop is standing
"actionType": string
"webLink": string
"webTitle": string
"isInteractive": bool // show prop when clicking next/previous in room prop list
"showType": int // 0 - None, 1 - GoldPanel, 2 - BoothPanel
"contentPickerType": int // 0 - Default, 1 - AudioContainer, 2 - VideoContainer
"contentSorting": {
"type": string // default/name/date/type/size
"direction": string // asc/desc
}
"contentAppend": string // default direction for content appending (start/end)
"isAllowTextchat": bool // if true - allow prop textchat
"allowUserParams": bool // if true - allow custom params per user
"customParams": map[string]{ custom structure } // client defined params
"actions": [{ programmatic action with children structure }] // custom programmatic actions from users
"dataBound": { // bound prop data to some action
"isEnabled": bool
"dataBoundAction": string
}
"assetId": string
"assetTitle": string
"assetSkins": map[string]string // map of selected skins per variants
"roomId": string
"roomTitle": string
"styleId": string
"panelId": string
"placementAreaId": string // in case if prop is a part of placement area
"contentSource": { // if present, current prop will fetch content from source prop
"roomId": string
"propId": string
}
"contentCount": int // amount of resources in prop
"content": [{ resource structure }] // prop resources
"assetAttributes": {
"logoCount": int // show amount of logos in content management system
"thumbnailCount": int // show amount of thumbnails in content management system
"placing": string
"invokeType": string
"minScale": float
"maxScale": float
"canStack": bool
"pedestalInZoomView": bool
"alternativeZoom": bool
"size": { xyz structure }
"contentType": [ string ] // supported content types for asset template
}
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Delete room prop: out of bound
Method: websocket
Endpoint: room:deleteProp_outOfBound
Request:
{
"data": {
"roomId": string
"propId": string
"moveResourcesToRoomSortingTable": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Delete room prop
Method: websocket
Endpoint: room:deleteProp
Request:
{
"data": {
"roomId": string
"propId": string
"moveResourcesToRoomSortingTable": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Restore room prop
Method: websocket
Endpoint: room:restoreProp
Request:
{
"data": {
"roomId": string
"propId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Update prop
Method: websocket
Endpoint: room:updateProp
Request:
{
"data": {
"roomId": string
"styleId": string
"panelId": string
"prop": {
"id": string
"mobileGeometry": { geometry structure }
"title": string
"description": string
"tags": [ string ]
"propTypes": [ string ] // booth/fileCabinet/socialCircleStatic/socialCircleDynamic/entireRoomChat
"parentId": string // prop id of parent where current prop is standing
"actionType": string
"webLink": string
"webTitle": string
"isInteractive": bool // show prop when clicking next/previous in room prop list
"showType": int // 0 - None, 1 - GoldPanel, 2 - BoothPanel
"contentPickerType": int // 0 - Default, 1 - AudioContainer, 2 - VideoContainer
"contentSorting": {
"type": string // default/name/date/type/size
"direction": string // asc/desc
}
"contentAppend": string // default direction for content appending (start/end)
"isAllowTextchat": bool // if true - allow prop textchat
"allowUserParams": bool // if true - allow custom params per user
"params": string // DEPRECATED, remove after backwards compatibility is no longer required.
"customParams": map[string]{ custom structure }
"actions": [{ programmatic action with children structure }]
"dataBound": {
"isEnabled": bool
"dataBoundAction": string
}
"assetId": string
"assetSkins": map[string]string
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Set user custom params for prop
Method: websocket
Endpoint: room:setUserCustomParamsForProp
Request:
{
"data": {
"roomId": string
"propId": string
"customParams": map[string]{ custom structure }
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Delete user custom params for prop
Method: websocket
Endpoint: room:deleteUserCustomParamsForProp
Request:
{
"data": {
"roomId": string
"propId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Get user custom params for props in room
Method: websocket
Endpoint: room:getUserCustomParamsForPropsInRoom
Request:
{
"data": {
"userId": string
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"props": [{
"propId": string
"customParams": map[string]{ custom structure }
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Get room sorting table content
Method: websocket
Endpoint: room:getSortingTable
Description: API returns list of resources that user uploaded to room contribution.
Request:
{
"data": {
"offset": int
"size": int
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"content": [{
"resource": { resource structure }
"userId": string
"owner": { user simple structure } // DEPRECATED
}]
"totalCount": int
}
"error": { "status": bool, "code": int, "message": string }
}
Get room content
Method: websocket
Endpoint: room:getRoomContent
Description: API returns list of resources from all around the room (props content + room contribution content).
Request:
{
"data": {
"offset": int
"size": int
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"resources": [{ resource structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
Get visitors
Method: websocket
Endpoint: room:visitors
Request:
{
"data": {
"room": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"visitors": [{
"id": string
"firstName": string
"lastName": string
"privacyMode": int // 0 - Default, 1 - Incognito
"avatar": string
"avatar3D": { // field is not returned if empty
"assetId": string
"assetSkins": map[string]string // map of selected skins per variants
"avatarResourceId": string // resource id (in case of avatar uploaded to user3DAvatar belonging)
"avatarUrl": string // url to gbl file (Ready Player Me)
"avatarUserId": string // user id for session recovery (Ready Player Me)
}
"companyName": string // name of company that user represents
"companyTitle": string // user title in the company
"counter": int
"roomPosition": {
"roomId": string
"propId": string
"propTypes": [ string ] // booth/fileCabinet/socialCircleDynamic
"position": { xyz structure }
}
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Send user location
Method: websocket
Endpoint: room:sendUserLocation
Request:
{
"data": {
"roomId": string
"propId": string
"propTypes": [ string ] // booth/fileCabinet/socialCircleDynamic
"position": { xyz structure }
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Join room
Method: websocket
Endpoint: room:join
Description: API subscribes user socket to room channel, so it will receive room events.
Request:
{
"data": {
"room": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
}
"error": { "status": bool, "code": int, "message": string }
}
Leave room
Method: websocket
Endpoint: room:leave
Description: API removes user socket subscription from room channel, so it will no longer receive room events.
Request:
{
"data": {
"room": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Add camera position
Method: websocket
Endpoint: room:addCameraPosition
Request:
{
"data": {
"roomId": string
"cameraPosition": { camera position structure }
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"cameraPosition": { camera position structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Update camera position
Method: websocket
Endpoint: room:updateCameraPosition
Request:
{
"data": {
"roomId": string
"cameraPosition": { camera position structure }
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"cameraPosition": { camera position structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Delete camera position
Method: websocket
Endpoint: room:deleteCameraPosition
Request:
{
"data": {
"roomId": string
"cameraPositionId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Get camera positions
Method: websocket
Endpoint: room:getCameraPositions
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"cameraPositions": [{ camera position structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
List user public rooms with static social circles
Method: websocket
Endpoint: room:listUserPublicRoomsWithStaticSocialCircles
Request:
{ empty }
Response:
{
"data": {
"rooms": [{
"roomId": string
"roomTitle": string
"circles": [{
"propId": string
"propTitle": string
}]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Import room
Method: websocket
Endpoint: room:import
Request:
{
"data": {
"srcRoomId": string // source room id
"dstRoomId": string // destination room id
"importSettings": bool
"importProps": bool
"importStorylines": bool
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Create storyline
Method: websocket
Endpoint: room:createStoryline
Request:
{
"data": {
"room": string
"storyline": string
"title": string
"published": bool
"data": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"storyline": { storyline structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Update storyline
Method: websocket
Endpoint: room:updateStoryline
Request:
{
"data": {
"room": string
"storyline": string
"title": string
"published": bool
"data": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"storyline": { storyline structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Delete storyline
Method: websocket
Endpoint: room:deleteStoryline
Request:
{
"data": {
"room": string
"storyline": string
"title": string
"published": bool
"data": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Create journey path
Method: websocket
Endpoint: room:createJourneyPath
Request:
{
"data": {
"roomId": string
"journeyPath": {
"id": string
"created": timestamp
"updated": timestamp
"roomId": string
"name": string
"points": [{
"name": string
"propId": string
"position": { xyz structure }
"rotation": { xyz structure }
}]
"published": bool
"looped": bool
"color": { rgba structure }
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"journeyPath": {
"id": string
"created": timestamp
"updated": timestamp
"roomId": string
"name": string
"points": [{
"name": string
"propId": string
"position": { xyz structure }
"rotation": { xyz structure }
}]
"published": bool
"looped": bool
"color": { rgba structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Update journey path
Method: websocket
Endpoint: room:updateJourneyPath
Request:
{
"data": {
"roomId": string
"journeyPath": {
"id": string
"created": timestamp
"updated": timestamp
"roomId": string
"name": string
"points": [{
"name": string
"propId": string
"position": { xyz structure }
"rotation": { xyz structure }
}]
"published": bool
"looped": bool
"color": { rgba structure }
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"journeyPath": {
"id": string
"created": timestamp
"updated": timestamp
"roomId": string
"name": string
"points": [{
"name": string
"propId": string
"position": { xyz structure }
"rotation": { xyz structure }
}]
"published": bool
"looped": bool
"color": { rgba structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Delete journey path
Method: websocket
Endpoint: room:deleteJourneyPath
Request:
{
"data": {
"roomId": string
"journeyPathId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"journeyPathId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Get journey paths
Method: websocket
Endpoint: room:getJourneyPaths
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"roomId": string
"journeyPaths": [{
"id": string
"created": timestamp
"updated": timestamp
"roomId": string
"name": string
"points": [{
"name": string
"propId": string
"position": { xyz structure }
"rotation": { xyz structure }
}]
"published": bool
"looped": bool
"color": { rgba structure }
}]
}
"error": { "status": bool, "code": int, "message": string }
}
On resources added to room sorting table event
Event: room:addResourcesToSortingTable
DEPRECATED
Data:
{
"data": {
"resources": [{
"resource": { resource structure }
"userId": string
"user": { user simple structure } // DEPRECATED
}]
"room": string
}
"error": { "status": bool, "code": int, "message": string }
}
On resources deleted from room sorting table event
Event: room:deleteResourcesFromSortingTable
DEPRECATED
Data:
{
"data": {
"resources": [ string ]
"room": string
}
"error": { "status": bool, "code": int, "message": string }
}
On room resource updated event
Event: room:resourceUpdated
DEPRECATED
Data:
{
"data": {
"prop": string
"room": string
"resource": { resource structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On room sorting table resource updated event
Event: room:sortingTableResourceUpdated
DEPRECATED
Data:
{
"data": {
"room": string
"resource": { resource structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On room subscription status updated event
Event: room:subscriptionStatusUpdated
Data:
{
"data": {
"roomId": string
"subscriptionStatus": string
}
"error": { "status": bool, "code": int, "message": string }
}
On room created event
Event: room:created
Description: Event is sent to room owners.
Data:
{
"data": {
"roomId": string
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"thumbnailId": string
}
"error": { "status": bool, "code": int, "message": string }
}
On room deleted event
Event: room:delete
Description: Event is sent to room owners, invited users and everyone who is currently in the room.
Data:
{
"data": {
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
On room metadata updated event
Event: room:metadataUpdated
Data:
{
"data": {
"roomId": string
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"thumbnailId": string
}
"error": { "status": bool, "code": int, "message": string }
}
On room settings updated event
Event: room:settingsUpdated
Description: In event data, updatedFields only contain fields that were updated during settings update.
Data:
{
"data": {
"roomId": string
"updatedFields": map[string]{ custom structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On room environment updated event
Event: room:environmentUpdated
Data:
{
"data": {
"roomId": string
"environment": { asset bundle environment structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On storyline created event
Event: room:storylineCreated
Data:
{
"data": {
"Storyline": { storyline structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On storyline updated event
Event: room:storylineUpdated
Data:
{
"data": {
"Storyline": { storyline structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On storyline deleted event
Event: room:storylineDeleted
Data:
{
"data": {
"roomId": string
"storylineId": string
}
"error": { "status": bool, "code": int, "message": string }
}
On camera position added event
Event: room:cameraPositionAdded
Data:
{
"data": {
"roomId": string
"cameraPosition": { camera position structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On camera position updated event
Event: room:cameraPositionUpdated
Data:
{
"data": {
"roomId": string
"cameraPosition": { camera position structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On camera position deleted event
Event: room:cameraPositionDeleted
Data:
{
"data": {
"roomId": string
"cameraPositionId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Handle journey path created event
Event: room:journeyPathCreated
Data:
{
"data": {
"roomId": string
"journeyPath": {
"id": string
"created": timestamp
"updated": timestamp
"roomId": string
"name": string
"points": [{
"name": string
"propId": string
"position": { xyz structure }
"rotation": { xyz structure }
}]
"published": bool
"looped": bool
"color": { rgba structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Handle journey path updated event
Event: room:journeyPathUpdated
Data:
{
"data": {
"roomId": string
"journeyPath": {
"id": string
"created": timestamp
"updated": timestamp
"roomId": string
"name": string
"points": [{
"name": string
"propId": string
"position": { xyz structure }
"rotation": { xyz structure }
}]
"published": bool
"looped": bool
"color": { rgba structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Handle journey path deleted event
Event: room:journeyPathDeleted
Data:
{
"data": {
"roomId": string
"journeyPathId": string
}
"error": { "status": bool, "code": int, "message": string }
}
On room prop added event
Event: room:propAdded
Data:
{
"data": {
"roomId": string
"styleId": string
"panelId": string
"prop": { room prop structure }
"assets": map[string]{ asset bundle prop structure }
"propSkins": map[string]{ asset bundle skin structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On room prop deleted event
Event: room:propDeleted
Data:
{
"data": {
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
On room prop restored event
Event: room:propRestored
Data:
{
"data": {
"roomId": string
"styleId": string
"panelId": string
"prop": { room prop structure }
"assets": map[string]{ asset bundle prop structure }
"propSkins": map[string]{ asset bundle skin structure }
}
"error": { "status": bool, "code": int, "message": string }
}
On room prop updated event
Event: room:propUpdated
Description: In event data, updatedFields only contain fields that were updated during prop update.
Data:
{
"data": {
"roomId": string
"styleId": string
"panelId": string
"propId": string
"updatedFields": map[string]{ custom structure }
}
"error": { "status": bool, "code": int, "message": string }
}
User connected to social circle videochat
Event: room:userConnectedToSocialCircleVideochat
Data:
{
"data": {
"user": { user simple structure }
"seqNumber": int // sequential number, unique for each user within videochat
"videochatId": string
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
User disconnected from social circle videochat
Event: room:userDisconnectedFromSocialCircleVideochat
Data:
{
"data": {
"user": { user simple structure }
"seqNumber": int // sequential number, unique for each user within videochat
"videochatId": string
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Room videochat presenter changed event
Event: room:videochatPresenterChanged
Description: Event is sent when presenter is changed in videochat in room. If userId is empty - videochat has no presenter.
Data:
{
"data": {
"userId": string
"videochatId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Room videochat co presenter changed event
Event: room:videochatCoPresenterChanged
Description: Event is sent when co-presenter is changed in videochat in room. If userId is empty - videochat has no co-presenter.
Data:
{
"data": {
"userId": string
"videochatId": string
}
"error": { "status": bool, "code": int, "message": string }
}
User joined room event
Event: room:userJoined
Data:
{
"data": {
"room": string
"user": { user simple structure }
"counter": int // total users in room
}
"error": { "status": bool, "code": int, "message": string }
}
User left room event
Event: room:userLeft
Data:
{
"data": {
"room": string
"user": { user simple structure }
"counter": int // total users in room
}
"error": { "status": bool, "code": int, "message": string }
}
User room location changed event
Event: room:userLocationChanged
Data:
{
"data": {
"userId": string
"roomId": string
"propId": string
"propTypes": [ string ] // booth/fileCabinet/socialCircleDynamic
"position": { xyz structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Room has light data event
Event: room:hasLightData
Data:
{
"data": {
"roomId": string
"platforms": [ string ]
}
"error": { "status": bool, "code": int, "message": string }
}
Models
Room
{
"id": string
"created": timestamp
"updated": timestamp
"explorerStatus": string // show/hide room in explorer
"subscriptionStatus": string // free/active/expired
"environmentId": string // id of environment asset
"price": float // price for room template
"allowEmbed": bool // allow embedding room to non valuverse web pages
"roomIdentity": string // verus identity of room
"metadata": {
"name": string
"description": string
"location": string
"privacy": string // private/public/openForAttendees
"tags": [ string ]
"firstStyle": string
}
"alias": string
"group": string
"domains": [ string ]
"thumbnail": { resource structure }
"preview": { resource structure }
"content": [{ room style structure }]
"owners": [{ user simple structure }]
"invitedUsers": [{ user simple structure }]
"stories": [{ storyline structure }]
"cameraPositions": [{ camera position structure }]
"hasJourneyPath": bool
"hasPlacementAreas": bool
"templateStyles": [ string ]
}
Resource
{
"id": string
"created": timestamp
"updated": timestamp
"title": string
"description": string
"location": string
"date": string
"category": string
"linkId": string // id of resource link is pointing to
"linkType": string // global/local
"encryptionVersion": string // encryption version, like 'verus.v1'
"encryptionEpoch": int // epoch defines key bundle that was used for encryption
"encryptionEpk": string // ephemeral public key that should be used to decrypt cypher data
"userId": string // user id of resource author
"belonging": string // determines resource location in the system in a way 'belongingType:belongingPath(networkId)'
"status": string // pending/processing/ready/failed
"metadata": {
"fileName": string
"fileSize": int
"fileDate": timestamp
"behaviourType": string
"contentType": string
"convertedFrom": string
"link": string
"origin": { resource origin structure }
"geolocation": { geolocation structure }
"dimensions": { dimensions structure }
}
"thumbnail": string
"fromTemplate": bool
"totalReactions": int // amount of users who reacted to the resource
"data": {
"audio": { resource data audio structure }
"video": { resource data video structure }
"amazon": { resource data amazon structure }
"imdb": { resource data imdb structure }
"youtube": { resource data youtube structure }
"vimeo": { resource data vimeo structure }
"pinterest": { resource data pinterest structure }
"pixabay": { resource data pixabay structure }
"facebook": { resource data facebook structure }
"remoteUrl": { resource data remote url structure }
"liveStream": { live stream data structure }
"aiGeneration": { ai generation data structure }
"thumbnailUrl": string
"downloadUrl": string
"directory": { resource data directory structure }
"googleDrive": { google drive structure }
"channel": { channel data structure }
"enrichment": { enrichment data structure }
}
"customParams": map[string]{ custom structure } // client defined parameters
"actions": [{ programmatic action with children structure }] // custom programmatic actions from users
}
Resource Origin
{
"type": string
"device": string
"deviceName": string
"path": string
}
Geolocation
{
"latitude": float
"longitude": float
}
Dimensions
{
"width": int
"height": int
"orientation": int
}
Resource Data Audio
{
"title": string
"artist": string
"album": string
"genre": string
"duration": int
"durationFloat": float
}
Resource Data Video
{
"duration": int
"durationFloat": float
"hasAlphaChannel": bool // true, if video generated from gif with transparent pixels
"alphaChannel": string // alpha channel video resource (if generated from gif)
}
Resource Data Amazon
{
"asin": string
"summary": string
"author": [ string ]
"manufacturer": string
"title": string
"publicationDate": string
"url": string
}
Resource Data Imdb
{
"Actors": string
"Genre": string
"Ratings": [{
"Source": string
"Value": string
}]
"Released": string
"Runtime": string
"Website": string
"Year": string
"Trailers": [ string ]
"imdbID": string
}
Resource Data Youtube
{
"videoId": string
"formatId": string
}
Resource Data Vimeo
{
"videoUrl": string
"formatId": string
}
Resource Data Pinterest
{
"pin": string
"url": string
}
Resource Data Pixabay
{
"id": string
"pageUrl": string
}
Resource Data Facebook
{
"id": string
}
Resource Data Remote Url
{
"url": string
"urlType": string
"favicon": string
"title": string
}
Live Stream Data
{
"streamId": string
"assetId": string
"playbackUrl": string
"masterUrl": string
"createdAt": int
}
AI Generation Data
{
"generationModel": string // the model used for image generation [gpt-image-2, gpt-image-1.5, gpt-image-1, gpt-image-1-mini]; defaults to gpt-image-2
"prompt": string // a text description of the desired image
"revisedPrompt": string // the prompt that was used to generate the image, if there was any revision to the prompt
"url": string // the URL of the generated image
}
Resource Data Directory
{
"innerContentType": string
"innerContentCount": int
}
Google Drive
{
"fileId": string
"name": string
"mimeType": string
}
Channel Data
{
"communityId": string
"channelId": string
"subChannelId": string
"messageId": string
}
Enrichment Data
{
"categories": [ string ]
"enrichedAt": timestamp
"enrichmentStatus": string
"language": string
"qualityScore": int
"tags": [ string ]
}
Programmatic Action with children
{
"localId": string // local action id, operated by client side only
"eventName": string
"actionName": string
"actionData": {
"usedPropId": string
"usedRoomId": string
"usedNetworkId": string
"usedStorylineId": string
"usedQuestionId": int
"usedQuestionnaireId": int
"usedSegmentId": string
"usedPlacementAreaId": string
"usedRoomPoint": string
"animationData": map[string]{ custom structure }
}
"childActions": [{ programmatic action structure }]
}
Programmatic Action
{
"localId": string // local action id, operated by client side only
"eventName": string
"actionName": string
"actionData": {
"usedPropId": string
"usedRoomId": string
"usedNetworkId": string
"usedStorylineId": string
"usedQuestionId": int
"usedQuestionnaireId": int
"usedSegmentId": string
"usedPlacementAreaId": string
"usedRoomPoint": string
"animationData": map[string]{ custom structure }
}
}
Room Style
{
"id": string
"created": timestamp
"updated": timestamp
"assetId": string
"panels": [{ room panel structure }]
}
Room Panel
{
"id": string
"created": timestamp
"updated": timestamp
"type": string
"mobileGeometry": { geometry structure }
"props": [{ room prop structure }]
}
Geometry
{
"scale": float
"size": { xyz structure }
"position": { xyz structure }
"rotation": { xyz structure }
}
XYZ
{
"x": float
"y": float
"z": float
}
Room Prop
{
"id": string
"created": timestamp
"updated": timestamp
"mobileGeometry": { geometry structure }
"title": string
"description": string
"tags": [ string ]
"propTypes": [ string ] // booth/fileCabinet/socialCircleStatic/socialCircleDynamic/entireRoomChat
"parentId": string // prop id of parent where current prop is standing
"actionType": string
"webLink": string
"webTitle": string
"isInteractive": bool // show prop when clicking next/previous in room prop list
"showType": int // 0 - None, 1 - GoldPanel, 2 - BoothPanel
"contentPickerType": int // 0 - Default, 1 - AudioContainer, 2 - VideoContainer
"contentSorting": {
"type": string // default/name/date/type/size
"direction": string // asc/desc
}
"contentAppend": string // default direction for content appending (start/end)
"isAllowTextchat": bool // if true - allow prop textchat
"allowUserParams": bool // if true - allow custom params per user
"customParams": map[string]{ custom structure } // client defined params
"actions": [{ programmatic action with children structure }] // custom programmatic actions from users
"dataBound": { // bound prop data to some action
"isEnabled": bool
"dataBoundAction": string
}
"assetId": string
"assetTitle": string
"assetSkins": map[string]string // map of selected skins per variants
"roomId": string
"roomTitle": string
"styleId": string
"panelId": string
"placementAreaId": string // in case if prop is a part of placement area
"contentSource": { // if present, current prop will fetch content from source prop
"roomId": string
"propId": string
}
"contentCount": int // amount of resources in prop
"content": [{ resource structure }] // prop resources
}
User Simple
{
"id": string
"firstName": string
"lastName": string
"privacyMode": int // 0 - Default, 1 - Incognito
"avatar": string
"avatar3D": { // field is not returned if empty
"assetId": string
"assetSkins": map[string]string // map of selected skins per variants
"avatarResourceId": string // resource id (in case of avatar uploaded to user3DAvatar belonging)
"avatarUrl": string // url to gbl file (Ready Player Me)
"avatarUserId": string // user id for session recovery (Ready Player Me)
}
"companyName": string // name of company that user represents
"companyTitle": string // user title in the company
}
Storyline
{
"id": string
"created": timestamp
"updated": timestamp
"title": string
"data": string
"published": bool
"roomId": string
"propId": string
}
Camera Position
{
"id": string
"created": timestamp
"updated": timestamp
"position": { xyz structure }
"rotation": { xyzw structure }
"name": string
"cameraMode": int
}
XYZW
{
"x": float
"y": float
"z": float
"w": float
}
User Reactions
{
"reactions": [ [ userId, reaction ] ] // list of tuples [userId, reaction]
"total": int // total reactions for item
"ownReaction": string // current user own reaction
}
Asset Bundle Prop
{
"id": string
"created": timestamp
"updated": timestamp
"status": string // workInProgress/published
"ownership": string // empty - public asset; network:{networkId} - belongs to network
"hasVariants": bool // asset has skin variants
"title": string
"tags": [ string ]
"price": float // price per month (when creating room with the asset)
"score": int // featuring score for ordering assets
"displaySkins": bool // display all skins in sorting table
"params": map[string]{ custom structure } // client defined custom data
"editorParams": map[string]{ custom structure } // editor defined custom data / not used in runtime
"urls": map[string]string // asset data urls per platform
"thumbnail": { resource structure }
"placing": string
"invokeType": string
"minScale": float
"maxScale": float
"canStack": bool
"pedestalInZoomView": bool
"alternativeZoom": bool
"size": { xyz structure }
"contentType": [ string ] // supported content types for asset template
"assetBundleMeta": {
"logoCount": int // show amount of logos in content management system
"thumbnailCount": int // show amount of thumbnails in content management system
}
}
Asset Bundle Style
{
"id": string
"created": timestamp
"updated": timestamp
"status": string // workInProgress/published
"ownership": string // empty - public asset; network:{networkId} - belongs to network
"hasVariants": bool // asset has skin variants
"title": string
"tags": [ string ]
"price": float // price per month (when creating room with the asset)
"score": int // featuring score for ordering assets
"displaySkins": bool // display all skins in sorting table
"params": map[string]{ custom structure } // client defined custom data
"editorParams": map[string]{ custom structure } // editor defined custom data / not used in runtime
"urls": map[string]string // asset data urls per platform
"thumbnail": { resource structure }
"styleType": string // Default/NoMirror
"doorsType": string // Glass/None
"homePosition": { xyz structure } // home position for camera
}
Asset Bundle Environment
{
"id": string
"created": timestamp
"updated": timestamp
"status": string // workInProgress/published
"ownership": string // empty - public asset; network:{networkId} - belongs to network
"hasVariants": bool // asset has skin variants
"title": string
"tags": [ string ]
"price": float // price per month (when creating room with the asset)
"score": int // featuring score for ordering assets
"displaySkins": bool // display all skins in sorting table
"params": map[string]{ custom structure } // client defined custom data
"editorParams": map[string]{ custom structure } // editor defined custom data / not used in runtime
"urls": map[string]string // asset data urls per platform
"thumbnail": { resource structure }
}
Asset Bundle Skin
{
"id": string
"created": timestamp
"updated": timestamp
"assetId": string
"variantId": string
"name": string
"isDefault": bool // is default among other variant skins
"overrideColor": { rgba structure } // override default color
"colorOnly": bool // doesn't have textures, only color'
"simplifiedSkin": bool // applying the skins does not require prop hierarchy rebuild
"sortOrder": int
"isHidden": bool // hides skin from client
"thumbnail": { resource structure }
"urls": map[string]string // asset skin data urls per platform
"defaultColor": { rgba structure } // applied by parent variant model
}
RGBA
{
"r": float
"g": float
"b": float
"a": float
}