Skip to content
On this page

Notifications API

EndpointMethodDescription
user:notificationswebsocketGet notifications
user:notificationsLastViewwebsocketUpdate last view
user:deleteNotificationwebsocketDelete notification
user:notificationwebsocketEventNotification event
user:deleteNotificationwebsocketEventNotification deleted event

Notification types

TypeDescription
invitationInvitation notification
invitationAcceptedInvitation accepted notification
invitationDeclinedInvitation declined notification
friendRequestFriend request notification
friendRequestAcceptedFriend request accepted notification
friendRequestDeclinedFriend request declined notification
commentCreatedComment created notification
commentUpdatedComment updated notification
thoughtRequestThought request notification
roomAccessRequestRoom access request notification
welcomeWelcome notification
requestNewRequest new notification
requestAcceptedRequest accepted notification
requestDeclinedRequest declined notification
donateTokenDonate token notification
sessionInvitationSession invitation notification

Get notifications

Method: websocket

Endpoint: user:notifications

Request:

{
    "data": {
        "offset": int
        "size": int
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "notifications": [{
            "id": string
            "created": timestamp
            "updated": timestamp
            "userId": string
            "type": string
            "data": map[string]{ custom structure }
        }]
        "new": int
        "lastView": timestamp
    }
    "error": { "status": bool, "code": int, "message": string }
}

Update last view

Method: websocket

Endpoint: user:notificationsLastView

Request:

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

Response:

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

Delete notification

Method: websocket

Endpoint: user:deleteNotification

Request:

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

Response:

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

Notification event

Event: user:notification

Description: See notification types for notification inner data structure.

Data:

{
    "data": {
        "notification": {
            "id": string
            "created": timestamp
            "updated": timestamp
            "userId": string
            "type": string
            "data": map[string]{ custom structure }
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Notification deleted event

Event: user:deleteNotification

Data:

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

Invitation notification

Notification Type: invitation

Notification Data:

{
    "invitation": { invitation info structure }
}

Invitation accepted notification

Notification Type: invitationAccepted

Notification Data:

{
    "invitation": { invitation info structure }
}

Invitation declined notification

Notification Type: invitationDeclined

Notification Data:

{
    "invitation": { invitation info structure }
}

Friend request notification

Notification Type: friendRequest

Notification Data:

{
    "userInfo": { user simple structure }
}

Friend request accepted notification

Notification Type: friendRequestAccepted

Notification Data:

{
    "userInfo": { user simple structure }
}

Friend request declined notification

Notification Type: friendRequestDeclined

Notification Data:

{
    "userInfo": { user simple structure }
}

Comment created notification

Notification Type: commentCreated

Notification Data:

{
    "comment": string
    "resource": { resource structure }
    "permissions": {
        "view": bool
        "comment": bool
        "contribute": bool
        "edit": bool
        "manage": bool
    }
    "room": string
}

Comment updated notification

Notification Type: commentUpdated

Notification Data:

{
    "comment": string
    "resource": { resource structure }
    "permissions": {
        "view": bool
        "comment": bool
        "contribute": bool
        "edit": bool
        "manage": bool
    }
    "room": string
}

Thought request notification

Notification Type: thoughtRequest

Notification Data:

{
    "room": string
    "resource": { resource structure }
    "permissions": {
        "view": bool
        "comment": bool
        "contribute": bool
        "edit": bool
        "manage": bool
    }
    "userInfo": { user simple structure }
}

Room access request notification

Notification Type: roomAccessRequest

Notification Data:

{
    "userInfo": { user simple structure }
    "room": string
}

Welcome notification

Notification Type: welcome

Notification Data:

{
    "userInfo": { user simple structure }
}

Request new notification

Notification Type: requestNew

Notification Data:

{
    "request": { user request structure }
}

Request accepted notification

Notification Type: requestAccepted

Notification Data:

{
    "request": { user request structure }
}

Request declined notification

Notification Type: requestDeclined

Notification Data:

{
    "request": { user request structure }
}

Notification Type: donateToken

Notification Data:

{
    "userInfo": { user simple structure }
    "token": float
}

Session invitation notification

Notification Type: sessionInvitation

Notification Data:

{
    "userInfo": { user simple structure }
    "session": {
        "id": string
        "created": timestamp
        "updated": timestamp
        "eventId": string
        "ownerId": string
        "roomId": string
        "propId": string
        "sessionType": int  // Public - 0, Private - 1, OpenSlot - 2
        "title": string
        "description": string
        "startDate": timestamp
        "duration": int  // duration in seconds
        "isRecurring": bool
        "color": { rgba structure }
        "isValid": bool  // not valid if room or prop were deleted
    }
    "role": int
}

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

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 Request

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "initiatorUserId": string
    "recipientUserId": string
    "type": string  // Connection/Invitation/Matchmaking/Supporter/Recommendation/Meeting
    "status": string  // pending/accepted/declined
    "message": string
    "data": {
        "roomId": string  // parameter is used for Invitation and Recommendation requests
        "invitationId": string  // parameter is used for Invitation request
        "meetingId": string  // parameter is used for Meeting request
        "groupId": string  // parameter is used for Group request
        "communityId": string  // parameter is used for Community request
        "messageId": string  // parameter is used for AttestationClaim request
    }
    "fromUser": { user simple structure }
    "toUser": { user simple structure }
}

RGBA

{
    "r": float
    "g": float
    "b": float
    "a": float
}