Skip to content
On this page

Admin Room API

EndpointMethodDescription
/files/parseRoomBoothsSpreadsheetwebRequestParse room booths spreadsheet
/files/parseBoothsMembersSpreadsheet/{roomId}webRequestParse booths members spreadsheet
/files/generateRoomBoothsSpreadsheet/{roomId}webRequestGenerate room booths spreadsheet
/files/updateRoomBoothsFromSpreadsheetwebRequestUpdate room booths from spreadsheet
/files/updateBoothsMembersFromSpreadsheet/{roomId}webRequestUpdate booths members from spreadsheet
/jsonRpc/room.getRoomModeljsonRpcGet room model
/jsonRpc/room.updateRoomMetadatajsonRpcUpdate room metadata
/jsonRpc/room.updateRoomPricejsonRpcUpdate room price
/jsonRpc/room.deleteRoomjsonRpcDelete room
/jsonRpc/room.updateRoomExplorerStatusjsonRpcUpdate room explorer status
/jsonRpc/room.updateRoomFeaturingScorejsonRpcUpdate room featuring score
/jsonRpc/room.updateRoomFeaturingBoostjsonRpcUpdate room featuring boost
/jsonRpc/room.setRoomAliasjsonRpcSet room alias
/jsonRpc/room.deleteRoomAliasjsonRpcDelete room alias
/jsonRpc/room.expireRoomSubscriptionjsonRpcExpire room subscription
/jsonRpc/room.createNewRoomSubscriptionjsonRpcCreate new room subscription
/jsonRpc/room.listRoomsjsonRpcList rooms
/jsonRpc/room.searchRoomsjsonRpcSearch rooms
/jsonRpc/room.listUserRoomsjsonRpcList user rooms
/jsonRpc/room.listUserAvailableRoomsjsonRpcList user available rooms
/jsonRpc/room.searchUserAvailableRoomsjsonRpcSearch user available rooms
/jsonRpc/room.listUserPropsjsonRpcList user props
/jsonRpc/room.listPropsjsonRpcList props
/jsonRpc/room.listRoomPropsjsonRpcList room props
/jsonRpc/room.listRoomBoothsjsonRpcList room booths
/jsonRpc/room.addRoomOwnerjsonRpcAdd room owner
/jsonRpc/room.getPropInvitationsjsonRpcGet prop invitations
/jsonRpc/room.inviteToPropjsonRpcInvite to prop
/jsonRpc/room.deletePropInvitationjsonRpcDelete prop invitation
/jsonRpc/room.setPropTeamMemberByEmailjsonRpcSet prop team member by email
/jsonRpc/room.setPropTitlejsonRpcSet prop title
/jsonRpc/room.copyRoomjsonRpcCopy room
/jsonRpc/room.getSortingTablejsonRpcGet sorting table
/jsonRpc/room.deleteResourcesFromSortingTablejsonRpcDelete resources from sorting table
/jsonRpc/room.getTemplateStylesjsonRpcGet template styles
/jsonRpc/room.getTemplateRoomsjsonRpcGet template rooms
/jsonRpc/room.setRoomAsTemplatejsonRpcSet room as template
/jsonRpc/room.unsetRoomTemplatejsonRpcUnset room template

Parse room booths spreadsheet

HTTP Method: POST

Path: /files/parseRoomBoothsSpreadsheet

Permissions:

network.manage /networkId

Request:

multipart form with xslx spreadsheet file

Response:

{
    "roomId": string
    "booths": [{
        "id": string
        "title": string
        "members": [ string ]
    }]
}

Parse booths members spreadsheet

HTTP Method: POST

Path: /files/parseBoothsMembersSpreadsheet/

Permissions:

network.manage /networkId

Request:

multipart form with xslx spreadsheet file

Response:

{
    "roomId": string
    "booths": [{
        "id": string
        "title": string
        "members": [ string ]
    }]
}

Generate room booths spreadsheet

HTTP Method: GET

Path: /files/generateRoomBoothsSpreadsheet/

Permissions:

network.manage /networkId

Request:

{ empty }

Response:

xlsx spreadsheet file

Update room booths from spreadsheet

HTTP Method: POST

Path: /files/updateRoomBoothsFromSpreadsheet

Permissions:

network.manage /networkId

Request:

multipart form with xslx spreadsheet file

Response:

{ empty }

Update booths members from spreadsheet

HTTP Method: POST

Path: /files/updateBoothsMembersFromSpreadsheet/

Permissions:

network.manage /networkId

Request:

multipart form with xslx spreadsheet file

Response:

{ empty }

Get room model

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.getRoomModel

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "roomId": string
}

Response:

{
    "data": {
        "room": { room structure }
        "featuring": { featuring structure }  // empty in case if user doesn't have permissions to manage network
    }
    "error": { "status": bool, "code": int, "message": string }
}

Update room metadata

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.updateRoomMetadata

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "roomId": string
    "metadata": {
        "name": string
        "description": string
        "location": string
        "privacy": string  // private/public/openForAttendees
        "tags": [ string ]
        "firstStyle": string
    }
}

Response:

{ empty }

Update room price

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.updateRoomPrice

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "roomId": string
    "price": float
}

Response:

{ empty }

Delete room

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.deleteRoom

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "roomId": string
}

Response:

{ empty }

Update room explorer status

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.updateRoomExplorerStatus

Permissions:

network.manage /networkId

Request:

{
    "roomId": string
    "explorerStatus": string  // show/hide - allows to show/hide room in explorer
}

Response:

{ empty }

Update room featuring score

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.updateRoomFeaturingScore

Permissions:

network.manage /networkId

Request:

{
    "roomId": string
    "score": int
}

Response:

{ empty }

Update room featuring boost

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.updateRoomFeaturingBoost

Permissions:

network.manage /networkId

Request:

{
    "roomId": string
    "boost": int
}

Response:

{ empty }

Set room alias

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.setRoomAlias

Permissions:

network.manage /networkId

Request:

{
    "roomId": string
    "alias": string
}

Response:

{ empty }

Delete room alias

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.deleteRoomAlias

Permissions:

network.manage /networkId

Request:

{
    "roomId": string
    "alias": string
}

Response:

{ empty }

Expire room subscription

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.expireRoomSubscription

Permissions:

network.manage /networkId

Request:

{
    "roomId": string
}

Response:

{ empty }

Create new room subscription

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.createNewRoomSubscription

Permissions:

network.manage /networkId

Request:

{
    "roomId": string
}

Response:

{ empty }

List rooms

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.listRooms

Permissions:

network.manage /networkId

Request:

{
    "offset": int
    "size": int
}

Response:

{
    "data": {
        "rooms": [{ room structure }]
        "total": int  // total rooms in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

Search rooms

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.searchRooms

Permissions:

network.manage /networkId

Request:

{
    "text": string
    "onlyPublic": bool
    "offset": int
    "size": int
}

Response:

{
    "data": {
        "rooms": [{ room structure }]
        "total": int  // total rooms in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

List user rooms

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.listUserRooms

Request:

{ empty }

Response:

{
    "data": {
        "rooms": [{ room structure }]
        "total": int  // total rooms in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

List user available rooms

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.listUserAvailableRooms

Request:

{
    "offset": int
    "size": int
}

Response:

{
    "data": {
        "rooms": [{ room structure }]
        "total": int  // total rooms in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

Search user available rooms

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.searchUserAvailableRooms

Request:

{
    "text": string
    "onlyPublic": bool
    "offset": int
    "size": int
}

Response:

{
    "data": {
        "rooms": [{ room structure }]
        "total": int  // total rooms in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

List user props

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.listUserProps

Description: Api returns list of user props (according to filter parameters).

Request:

{
    "roomId": string  // optional, filter results by room
    "propTypes": [ string ]  // optional, filter results by prop type
    "asPropManager": bool  // if true, returns props where user is assigned as admin or team member
    "offset": int
    "size": int
}

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
        }]
        "total": int  // total props in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

List props

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.listProps

Description: Api returns list of all network props (according to filter parameters).

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "roomId": string  // optional, filter results by room
    "propTypes": [ string ]  // optional, filter results by prop type
    "asPropManager": bool  // if true, returns props where user is assigned as admin or team member
    "offset": int
    "size": int
}

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
        }]
        "total": int  // total props in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

List room props

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.listRoomProps

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "roomId": string
    "offset": int
    "size": int
}

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
        }]
        "total": int  // total props in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

List room booths

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.listRoomBooths

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "roomId": string
    "offset": int
    "size": int
}

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
        }]
        "total": int  // total props in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

Add room owner

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.addRoomOwner

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "userId": string
    "roomId": string
}

Response:

{ empty }

Get prop invitations

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.getPropInvitations

Permissions:

network.manage /networkId

room.manage /networkId/roomId

prop.manage /networkId/roomId/propId

Request:

{
    "roomId": string
    "propId": string
}

Response:

{
    "data": {
        "invitations": [{ prop invitation info structure }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Invite to prop

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.inviteToProp

Permissions:

network.manage /networkId

room.manage /networkId/roomId

prop.manage /networkId/roomId/propId

Request:

{
    "roomId": string
    "propId": string
    "invitedUser": string
    "permissions": {
        "view": bool
        "comment": bool
        "contribute": bool
        "edit": bool
        "manage": bool
    }
}

Response:

{
    "data": {
        "invitation": { prop invitation info structure }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Delete prop invitation

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.deletePropInvitation

Permissions:

network.manage /networkId

room.manage /networkId/roomId

prop.manage /networkId/roomId/propId

Request:

{
    "roomId": string
    "propId": string
    "invitedUser": string
    "permissions": {
        "view": bool
        "comment": bool
        "contribute": bool
        "edit": bool
        "manage": bool
    }
}

Response:

{ empty }

Set prop team member by email

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.setPropTeamMemberByEmail

Permissions:

network.manage /networkId

room.manage /networkId/roomId

prop.manage /networkId/roomId/propId

Request:

{
    "roomId": string
    "propId": string
    "email": string
}

Response:

{ empty }

Set prop title

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.setPropTitle

Permissions:

network.manage /networkId

room.manage /networkId/roomId

prop.manage /networkId/roomId/propId

Request:

{
    "roomId": string
    "propId": string
    "title": string
}

Response:

{ empty }

Copy room

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.copyRoom

Permissions:

room.copy

Request:

{
    "roomId": string
    "targetNetworkId": string
    "targetOwnerId": string
    "roomName": string
    "roomPrivacy": string
    "copyRoomLinks": bool
}

Response:

{
    "data": {
        "roomId": string
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get sorting table

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.getSortingTable

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "roomId": string
    "offset": int
    "size": int
}

Response:

{
    "data": {
        "content": [{ resource structure }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Delete resources from sorting table

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.deleteResourcesFromSortingTable

Permissions:

network.manage /networkId

room.manage /networkId/roomId

Request:

{
    "roomId": string
    "resourceIds": [ string ]
}

Response:

{ empty }

Get template styles

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.getTemplateStyles

Permissions:

network.manage /networkId

Request:

{ empty }

Response:

{
    "data": {
        "styles": [ string ]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get template rooms

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.getTemplateRooms

Permissions:

network.manage /networkId

Request:

{
    "offset": int
    "size": int
}

Response:

{
    "data": {
        "rooms": [{ room structure }]
        "total": int  // total rooms in network (matching the query)
    }
    "error": { "status": bool, "code": int, "message": string }
}

Set room as template

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.setRoomAsTemplate

Permissions:

network.manage /networkId

Request:

{
    "roomId": string
    "styles": [ string ]
}

Response:

{ empty }

Unset room template

Method: jsonRpc

HTTP Method: POST

Path: /jsonRpc/room.unsetRoomTemplate

Permissions:

network.manage /networkId

Request:

{
    "roomId": string
}

Response:

{ empty }

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
    "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 }
        "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 }
        "channel": { channel data structure }
        "googleDrive": { google drive 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 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
}

AI Generation Data

{
    "generationModel": string  // the model used for image generation [dall-e-3]
    "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
}

Channel Data

{
    "communityId": string
    "channelId": string
    "subChannelId": string
    "messageId": string
}

Google Drive

{
    "fileId": string
    "name": string
    "mimeType": 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
        "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
}

Featuring

{
    "views": int
    "multiplier": float
    "boost": int
    "total": int
    "score": int
    "lastCalculated": timestamp
}

Prop Invitation Info

{
    "permissions": {
        "view": bool
        "comment": bool
        "contribute": bool
        "edit": bool
        "manage": bool
    }
    "invitedById": string
    "invitedUser": { user simple structure }
}