Notifications API
| Endpoint | Method | Description |
|---|---|---|
| user:notifications | websocket | Get notifications |
| user:notificationsLastView | websocket | Update last view |
| user:deleteNotification | websocket | Delete notification |
| user:notification | websocketEvent | Notification event |
| user:deleteNotification | websocketEvent | Notification deleted event |
Notification types
| Type | Description |
|---|---|
| invitation | Invitation notification |
| invitationAccepted | Invitation accepted notification |
| invitationDeclined | Invitation declined notification |
| friendRequest | Friend request notification |
| friendRequestAccepted | Friend request accepted notification |
| friendRequestDeclined | Friend request declined notification |
| commentCreated | Comment created notification |
| commentUpdated | Comment updated notification |
| thoughtRequest | Thought request notification |
| roomAccessRequest | Room access request notification |
| welcome | Welcome notification |
| requestNew | Request new notification |
| requestAccepted | Request accepted notification |
| requestDeclined | Request declined notification |
| donateToken | Donate token notification |
| sessionInvitation | Session 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 }
}
Donate token notification
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
}