Skip to content
On this page

Invitations API ​

EndpointMethodDescription
social:inviteUserswebsocketInvite users to room
social:deleteInvitationwebsocketDelete invitation
social:editInvitationwebsocketEdit invitation
social:acceptInvitationwebsocketAccept invitation
social:archiveInvitationwebsocketArchive invitation
social:unarchiveInvitationwebsocketUnarchive invitation
room:getRoomInvitationswebsocketGet room invitations
room:getUserRoomAccessInfowebsocketGet user room access info
social:getUserInvitationswebsocketGet user invitations
social:getArchivedInvitationswebsocketGet archived user invitations
social:requestThoughtsOfUserswebsocketRequest thoughts of users
social:onInvitationCreatedwebsocketEventOn invitation created event
social:onInvitationEditedwebsocketEventOn invitation edited event
social:onInvitationDeletedwebsocketEventOn invitation deleted event
room:permissionsChangedwebsocketEventOn user room permissions changed event

Invite users to room ​

Method: websocket

Endpoint: social:inviteUsers

Description: Invite multiple users to the room.

Function creates user request of "Invitation" type. See requests API for further steps.

Request:

{
    "data": {
        "roomId": string
        "permissions": {
            "view": bool
            "comment": bool
            "contribute": bool
            "edit": bool
            "manage": bool
        }
        "description": string
        "inviteToVideochat": bool
        "inviteSilently": bool  // do not send invitation notification and email
        "userIds": [ string ]
        "facebookIds": [ string(fbAppId:fbUserId) ]
        "emails": [ string ]
        "phones": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Delete invitation ​

Method: websocket

Endpoint: social:deleteInvitation

Request:

{
    "data": {
        "invitation": string
        "room": string
        "invitedUser": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Edit invitation ​

Method: websocket

Endpoint: social:editInvitation

Description: Function creates user request of "Invitation" type, if owner permission granted. See requests API for further steps.

Request:

{
    "data": {
        "invitation": string
        "room": string
        "invitedUser": string
        "permissions": {
            "view": bool
            "comment": bool
            "contribute": bool
            "edit": bool
            "manage": bool
        }
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Accept invitation ​

Method: websocket

Endpoint: social:acceptInvitation

Request:

{
    "data": {
        "invitation": string
        "room": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Archive invitation ​

Method: websocket

Endpoint: social:archiveInvitation

DEPRECATED

Description: Endpoint is deprecated, not used and is going to be removed.

Request:

{
    "data": {
        "invitation": string
        "room": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Unarchive invitation ​

Method: websocket

Endpoint: social:unarchiveInvitation

DEPRECATED

Description: Endpoint is deprecated, not used and is going to be removed.

Request:

{
    "data": {
        "invitation": string
        "room": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Get room invitations ​

Method: websocket

Endpoint: room:getRoomInvitations

Request:

{
    "data": {
        "room": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "invitations": [{
            "id": string
            "created": timestamp
            "updated": timestamp
            "status": string
            "description": string
            "permissions": {
                "view": bool
                "comment": bool
                "contribute": bool
                "edit": bool
                "manage": bool
            }
            "invitedById": string
            "userId": string
            "roomId": string
            "roomPrivacy": string
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get user room access info ​

Method: websocket

Endpoint: room:getUserRoomAccessInfo

Description: Returns whether the target user has access to the room (via an explicit invitation, or implicitly, e.g. the room is public) along with that invitation, if one exists. The calling user must have view access to the room.

Request:

{
    "data": {
        "roomId": string
        "userId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "hasAccess": bool  // whether the target user can view the room, via an invitation or otherwise (e.g. public room)
        "permissions": {  // the target user's permissions in the room, if they have access
            "view": bool
            "comment": bool
            "contribute": bool
            "edit": bool
            "manage": bool
        }
        "invitation": {  // present only if the target user has an explicit invitation
            "id": string
            "created": timestamp
            "updated": timestamp
            "status": string
            "description": string
            "permissions": {
                "view": bool
                "comment": bool
                "contribute": bool
                "edit": bool
                "manage": bool
            }
            "invitedById": string
            "userId": string
            "roomId": string
            "roomPrivacy": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get user invitations ​

Method: websocket

Endpoint: social:getUserInvitations

Request:

{
    "data": {
        "query": string
        "exclude": [ string ]
        "offset": int
        "size": int
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "invitations": [{
            "invitation": {
                "id": string
                "created": timestamp
                "updated": timestamp
                "status": string
                "description": string
                "permissions": {
                    "view": bool
                    "comment": bool
                    "contribute": bool
                    "edit": bool
                    "manage": bool
                }
                "invitedById": string
                "userId": string
                "roomId": string
                "roomPrivacy": string
            }
            "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 archived user invitations ​

Method: websocket

Endpoint: social:getArchivedInvitations

DEPRECATED

Description: Endpoint is deprecated, not used and is going to be removed.

Request:

{
    "data": {
        "query": string
        "exclude": [ string ]
        "offset": int
        "size": int
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Request thoughts of users ​

Method: websocket

Endpoint: social:requestThoughtsOfUsers

Description: Function works the same way as user invitation. Additionally, function creates request though notification and email.

Request:

{
    "data": {
        "roomId": string
        "permissions": {
            "view": bool
            "comment": bool
            "contribute": bool
            "edit": bool
            "manage": bool
        }
        "description": string
        "inviteToVideochat": bool
        "inviteSilently": bool  // do not send invitation notification and email
        "userIds": [ string ]
        "facebookIds": [ string(fbAppId:fbUserId) ]
        "emails": [ string ]
        "phones": [ string ]
        "resourceId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

On invitation created event ​

Event: social:onInvitationCreated

Data:

{
    "data": {
        "invitation": {
            "id": string
            "created": timestamp
            "updated": timestamp
            "status": string
            "description": string
            "permissions": {
                "view": bool
                "comment": bool
                "contribute": bool
                "edit": bool
                "manage": bool
            }
            "invitedById": string
            "userId": string
            "roomId": string
            "roomPrivacy": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

On invitation edited event ​

Event: social:onInvitationEdited

Data:

{
    "data": {
        "invitation": {
            "id": string
            "created": timestamp
            "updated": timestamp
            "status": string
            "description": string
            "permissions": {
                "view": bool
                "comment": bool
                "contribute": bool
                "edit": bool
                "manage": bool
            }
            "invitedById": string
            "userId": string
            "roomId": string
            "roomPrivacy": string
        }
        "oldInvitationStatus": string
    }
    "error": { "status": bool, "code": int, "message": string }
}

On invitation deleted event ​

Event: social:onInvitationDeleted

Data:

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

On user room permissions changed event ​

Event: room:permissionsChanged

Data:

{
    "data": {
        "roomId": string
        "permissions": {
            "view": bool
            "comment": bool
            "contribute": bool
            "edit": bool
            "manage": bool
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Models ​


Invitation Info ​

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string
    "description": string
    "permissions": {
        "view": bool
        "comment": bool
        "contribute": bool
        "edit": bool
        "manage": bool
    }
    "invitedById": string
    "invitedUser": { user simple structure }
    "invitedBy": { user simple structure }
    "room": { room structure }
}

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
}

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
}

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
}