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

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
}