Skip to content
On this page

Meeting API ​

EndpointMethodDescription
/api/v0/resource/meetingInvitation/{meetingId}webRequestGet ICS file for meeting invitation
/api/v0/resource/meetingSeriesInvitation/{seriesId}webRequestGet ICS file for meeting series invitation
/api/v0/resource/meetingSeriesOccurrenceInvitation/{seriesId}/{originalStartDate}webRequestGet ICS file for meeting series occurrence invitation
meeting:createwebsocketCreate meeting: deprecated
meeting:updatewebsocketUpdate meeting: deprecated
meeting:deletewebsocketDelete meeting: deprecated
meeting:getwebsocketGet meeting: deprecated
meeting:checkPropHasMeetingsOrSocialSessionswebsocketCheck prop has meetings or social sessions
meeting:listUserMeetingCountswebsocketList user meeting counts
meeting:listUserMeetingsInDateRangewebsocketList user meetings in date range
meeting:getMeetingSeriesOccurrencewebsocketGet meeting series occurrence
meeting:updateMeetingSeriesOccurrencewebsocketUpdate meeting series occurrence
meeting:cancelMeetingSeriesOccurrencewebsocketCancel meeting series occurrence
meeting:deleteMeetingSeriesOccurrencewebsocketDelete meeting series occurrence
meeting:acceptMeetingRequestwebsocketAccept meeting request
meeting:declineMeetingRequestwebsocketDecline meeting request
meeting:createMeetingwebsocketCreate meeting
meeting:createMeetingSerieswebsocketCreate meeting series
meeting:updateMeetingwebsocketUpdate meeting
meeting:updateMeetingSerieswebsocketUpdate meeting series
meeting:deleteMeetingwebsocketDelete meeting
meeting:deleteMeetingSerieswebsocketDelete meeting series
meeting:getMeetingwebsocketGet meeting
meeting:listUserMeetingswebsocketList user meetings
meeting:listMeetingOccurrenceswebsocketList meeting occurrences
meeting:getTimeSlotsForMeetingwebsocketGet time slots for meeting
meeting:getMeetingTimeSlotsForMonthwebsocketGet meeting time slots for month
meeting:setUserAvailabilitywebsocketSet user availability
meeting:getUserAvailabilityPatternwebsocketGet user availability pattern
meeting:getUserAvailabilityForDaywebsocketGet user availability for day
meeting:getUserAvailabilityForWeekwebsocketGet user availability for week
meeting:getUserAvailabilityForMonthwebsocketGet user availability for month
meeting:meetingUpdatedwebsocketEventOn meeting updated event
meeting:meetingDeletedwebsocketEventOn meeting deleted event
meeting:onMeetingCreatedwebsocketEventOn meeting created event
meeting:onMeetingSeriesCreatedwebsocketEventOn meeting series created event
meeting:onMeetingDeletedwebsocketEventOn meeting deleted event
meeting:onMeetingSeriesDeletedwebsocketEventOn meeting series deleted event
meeting:onMeetingUpdatedwebsocketEventOn meeting updated event
meeting:onMeetingSeriesUpdatedwebsocketEventOn meeting series updated event
meeting:onMeetingSeriesOccurrenceUpdatedwebsocketEventOn meeting series occurrence updated event

Get ICS file for meeting invitation ​

HTTP Method: GET

Path: /api/v0/resource/meetingInvitation/

Request:

{ empty }

Response:

ICS file

Get ICS file for meeting series invitation ​

HTTP Method: GET

Path: /api/v0/resource/meetingSeriesInvitation/

Request:

{ empty }

Response:

ICS file

Get ICS file for meeting series occurrence invitation ​

HTTP Method: GET

Path: /api/v0/resource/meetingSeriesOccurrenceInvitation/{seriesId}/

Parameters:

originalStartDate: Unix timestamp of the occurrence start date

Request:

{ empty }

Response:

ICS file

Create meeting: deprecated ​

Method: websocket

Endpoint: meeting:create

DEPRECATED

Description: API will create "Meeting" requests to all invited users.

  • All invited users will have "received" status for meeting;

  • By accepting request invited user will receive "accepted" status for meeting;

  • By declining request invited user will receive "declined" status for meeting;

Request:

{
    "data": {
        "meeting": {
            "startDate": timestamp
            "endDate": timestamp
            "subject": string
            "roomId": string
            "propId": string
            "color": { rgba structure }
            "invitedUserIds": [ string ]
        }
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "meeting": {
            "id": string
            "created": timestamp
            "updated": timestamp
            "startDate": timestamp
            "endDate": timestamp
            "subject": string
            "roomId": string
            "propId": string
            "color": { rgba structure }
            "isValid": bool  // not valid if room or prop were deleted
            "room": {
                "id": string
                "title": string
                "thumbnail": { resource structure }
            }
            "prop": {
                "id": string
                "title": string
            }
            "organizer": { user simple structure }
            "invitedUsers": [{
                "user": { user simple structure }
                "status": string
            }]
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Update meeting: deprecated ​

Method: websocket

Endpoint: meeting:update

DEPRECATED

Request:

{
    "data": {
        "meetingId": string
        "meeting": {
            "subject": string
            "roomId": string
            "propId": string
            "color": { rgba structure }
        }
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "meeting": {
            "id": string
            "created": timestamp
            "updated": timestamp
            "startDate": timestamp
            "endDate": timestamp
            "subject": string
            "roomId": string
            "propId": string
            "color": { rgba structure }
            "isValid": bool  // not valid if room or prop were deleted
            "room": {
                "id": string
                "title": string
                "thumbnail": { resource structure }
            }
            "prop": {
                "id": string
                "title": string
            }
            "organizer": { user simple structure }
            "invitedUsers": [{
                "user": { user simple structure }
                "status": string
            }]
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Delete meeting: deprecated ​

Method: websocket

Endpoint: meeting:delete

DEPRECATED

Request:

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

Response:

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

Get meeting: deprecated ​

Method: websocket

Endpoint: meeting:get

DEPRECATED

Request:

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

Response:

{
    "data": {
        "meeting": {
            "id": string
            "created": timestamp
            "updated": timestamp
            "startDate": timestamp
            "endDate": timestamp
            "subject": string
            "roomId": string
            "propId": string
            "color": { rgba structure }
            "isValid": bool  // not valid if room or prop were deleted
            "room": {
                "id": string
                "title": string
                "thumbnail": { resource structure }
            }
            "prop": {
                "id": string
                "title": string
            }
            "organizer": { user simple structure }
            "invitedUsers": [{
                "user": { user simple structure }
                "status": string
            }]
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Check prop has meetings or social sessions ​

Method: websocket

Endpoint: meeting:checkPropHasMeetingsOrSocialSessions

DEPRECATED

Description: API returns true if prop has at least one meeting or social session in the future.

Request:

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

Response:

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

List user meeting counts ​

Method: websocket

Endpoint: meeting:listUserMeetingCounts

DEPRECATED

Description: API lists counts of meetings per day.

Request:

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

Response:

{
    "data": {
        "meetingCounts": [{
            "count": int
            "startDate": timestamp
            "endDate": timestamp
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

List user meetings in date range ​

Method: websocket

Endpoint: meeting:listUserMeetingsInDateRange

DEPRECATED

Description: API lists user meetings in provided date range.

Request:

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

Response:

{
    "data": {
        "meetings": [{
            "id": string
            "created": timestamp
            "updated": timestamp
            "startDate": timestamp
            "endDate": timestamp
            "subject": string
            "roomId": string
            "propId": string
            "color": { rgba structure }
            "isValid": bool  // not valid if room or prop were deleted
            "room": {
                "id": string
                "title": string
                "thumbnail": { resource structure }
            }
            "prop": {
                "id": string
                "title": string
            }
            "organizer": { user simple structure }
            "invitedUsers": [{
                "user": { user simple structure }
                "status": string
            }]
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get meeting series occurrence ​

Method: websocket

Endpoint: meeting:getMeetingSeriesOccurrence

Description: API returns a single occurrence of a recurring meeting series. The occurrence is identified by seriesId + originalStartDate (the rrule-generated start date). If the occurrence was overridden, the returned data reflects the override (or its cancelled state).

Request:

{
    "data": {
        "seriesId": string
        "originalStartDate": timestamp  // rrule-generated start date that identifies the occurrence
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "meeting": {
            "userId": string
            "status": string
            "meetingId": string
            "startDate": timestamp
            "endDate": timestamp
            "seriesId": string  // id of recurring meeting series
            "rrule": string  // recurrence rule in RFC 5545 format
            "dtstart": string  // start date of the first occurrence in RFC 5545 format
            "duration": int  // duration of each meeting occurrence in seconds
            "seriesStartDate": timestamp  // start date of the first meeting in the series (UTC)
            "seriesEndDate": timestamp  // date when series should end, max value, if not set (UTC)
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
            "originalStartDate": timestamp  // original rrule-generated start date; identifies the occurrence within the series for override operations
            "isCancelled": bool  // true when this occurrence was individually cancelled; the occurrence is still returned so the client can display and restore it
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Update meeting series occurrence ​

Method: websocket

Endpoint: meeting:updateMeetingSeriesOccurrence

Description: API updates a single occurrence of a recurring meeting series without affecting other occurrences. The occurrence is identified by seriesId + originalStartDate (the rrule-generated start date). Provide updated subject, description, color, and optionally new start/end dates.

Request:

{
    "data": {
        "seriesId": string
        "originalStartDate": timestamp  // rrule-generated start date that identifies the occurrence
        "subject": string
        "description": string
        "color": { rgba structure }
        "startDate": timestamp
        "endDate": timestamp
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "seriesId": string
        "originalStartDate": timestamp
        "override": {  // null means the override was removed and the occurrence reverts to series defaults
            "seriesId": string
            "originalStartDate": timestamp  // rrule-generated start date that identifies this occurrence
            "isCancelled": bool  // if true, this occurrence is cancelled
            "subject": string
            "description": string
            "color": { rgba structure }
            "startDate": timestamp  // overridden start date; zero means use series-generated date
            "endDate": timestamp  // overridden end date; zero means use series-generated date
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Cancel meeting series occurrence ​

Method: websocket

Endpoint: meeting:cancelMeetingSeriesOccurrence

Description: API cancels a single occurrence of a recurring meeting series without affecting other occurrences. The occurrence is identified by seriesId + originalStartDate (the rrule-generated start date).

Request:

{
    "data": {
        "seriesId": string
        "originalStartDate": timestamp  // rrule-generated start date that identifies the occurrence
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Delete meeting series occurrence ​

Method: websocket

Endpoint: meeting:deleteMeetingSeriesOccurrence

Description: API removes the override for a single occurrence, restoring it to default series behavior.

Request:

{
    "data": {
        "seriesId": string
        "originalStartDate": timestamp  // rrule-generated start date that identifies the occurrence
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Accept meeting request ​

Method: websocket

Endpoint: meeting:acceptMeetingRequest

Description: API accepts user request for meeting and changes participant status to "accepted".

Request:

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

Response:

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

Decline meeting request ​

Method: websocket

Endpoint: meeting:declineMeetingRequest

Description: API declines user request for meeting and changes participant status to "declined".

Request:

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

Response:

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

Create meeting ​

Method: websocket

Endpoint: meeting:createMeeting

Description: API creates meeting in a provided location.

API will create "Meeting" requests to all invited users.

  • All invited users will have "received" status for meeting;

  • By accepting request invited user will receive "accepted" status for meeting;

  • By declining request invited user will receive "declined" status for meeting;

Request:

{
    "data": {
        "sourceType": string  // room/prop/group/direct
        "sourceIds": [ string ]  // roomId/roomId+propId/groupId/userId
        "subject": string
        "description": string
        "color": { rgba structure }
        "invitedUserIds": [ string ]
        "startDate": timestamp
        "endDate": timestamp
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "meeting": {
            "meetingId": string
            "startDate": timestamp
            "endDate": timestamp
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Create meeting series ​

Method: websocket

Endpoint: meeting:createMeetingSeries

Description: API creates meeting series in a provided location.

API will create "MeetingSeries" requests to all invited users.

  • All invited users will have "received" status for meeting;

  • By accepting request invited user will receive "accepted" status for meeting;

  • By declining request invited user will receive "declined" status for meeting;

Request:

{
    "data": {
        "sourceType": string  // room/prop/group/direct
        "sourceIds": [ string ]  // roomId/roomId+propId/groupId/userId
        "subject": string
        "description": string
        "color": { rgba structure }
        "invitedUserIds": [ string ]
        "rrule": string  // recurrence rule in RFC 5545 format
        "dtstart": string  // start date of the first occurrence in RFC 5545 format
        "duration": int  // duration of each meeting occurrence in seconds
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "meeting": {
            "seriesId": string  // id of recurring meeting series
            "rrule": string  // recurrence rule in RFC 5545 format
            "dtstart": string  // start date of the first occurrence in RFC 5545 format
            "duration": int  // duration of each meeting occurrence in seconds
            "seriesStartDate": timestamp  // start date of the first meeting in the series (UTC)
            "seriesEndDate": timestamp  // date when series should end, max value, if not set (UTC)
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Update meeting ​

Method: websocket

Endpoint: meeting:updateMeeting

Request:

{
    "data": {
        "meetingId": string
        "subject": string
        "description": string
        "color": { rgba structure }
        "startDate": timestamp
        "endDate": timestamp
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "meeting": {
            "meetingId": string
            "startDate": timestamp
            "endDate": timestamp
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Update meeting series ​

Method: websocket

Endpoint: meeting:updateMeetingSeries

Request:

{
    "data": {
        "seriesId": string
        "subject": string
        "description": string
        "color": { rgba structure }
        "rrule": string  // recurrence rule in RFC 5545 format
        "dtstart": string  // start date of the first occurrence in RFC 5545 format
        "duration": int  // duration of each meeting occurrence in seconds
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "meeting": {
            "seriesId": string  // id of recurring meeting series
            "rrule": string  // recurrence rule in RFC 5545 format
            "dtstart": string  // start date of the first occurrence in RFC 5545 format
            "duration": int  // duration of each meeting occurrence in seconds
            "seriesStartDate": timestamp  // start date of the first meeting in the series (UTC)
            "seriesEndDate": timestamp  // date when series should end, max value, if not set (UTC)
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Delete meeting ​

Method: websocket

Endpoint: meeting:deleteMeeting

Request:

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

Response:

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

Delete meeting series ​

Method: websocket

Endpoint: meeting:deleteMeetingSeries

Request:

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

Response:

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

Get meeting ​

Method: websocket

Endpoint: meeting:getMeeting

Request:

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

Response:

{
    "data": {
        "meeting": {
            "meetingId": string
            "startDate": timestamp
            "endDate": timestamp
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

List user meetings ​

Method: websocket

Endpoint: meeting:listUserMeetings

Description: API lists user meetings in provided date range.

Request:

{
    "data": {
        "startDate": timestamp
        "endDate": timestamp
        "sourceType": string  // filter meetings by source: network/room/prop/group/direct
        "sourceIds": [ string ]  // networkId/roomId/roomId+propId/groupId/userId
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "meetings": [{
            "userId": string
            "status": string
            "meetingId": string
            "startDate": timestamp
            "endDate": timestamp
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

List meeting occurrences ​

Method: websocket

Endpoint: meeting:listMeetingOccurrences

Description: API lists meeting occurrences (single meetings and meeting series occurrences) in provided date range.

Request:

{
    "data": {
        "startDate": timestamp
        "endDate": timestamp
        "sourceType": string  // filter meetings by source: network/room/prop/group/direct
        "sourceIds": [ string ]  // networkId/roomId/roomId+propId/groupId/userId
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "meetings": [{
            "userId": string
            "status": string
            "meetingId": string
            "startDate": timestamp
            "endDate": timestamp
            "seriesId": string  // id of recurring meeting series
            "rrule": string  // recurrence rule in RFC 5545 format
            "dtstart": string  // start date of the first occurrence in RFC 5545 format
            "duration": int  // duration of each meeting occurrence in seconds
            "seriesStartDate": timestamp  // start date of the first meeting in the series (UTC)
            "seriesEndDate": timestamp  // date when series should end, max value, if not set (UTC)
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
            "originalStartDate": timestamp  // original rrule-generated start date; identifies the occurrence within the series for override operations
            "isCancelled": bool  // true when this occurrence was individually cancelled; the occurrence is still returned so the client can display and restore it
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get time slots for meeting ​

Method: websocket

Endpoint: meeting:getTimeSlotsForMeeting

Description: API returns time intervals that are available for all requested users. Each requested user/email should be provided as separate element in array. API will ignore provided user if it is not found in the system.

Request:

{
    "data": {
        "users": [{
            "roomful": string
            "email": string
        }]
        "localDate": timestamp
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "availableTimeSlots": [{
            "startDate": timestamp
            "endDate": timestamp
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get meeting time slots for month ​

Method: websocket

Endpoint: meeting:getMeetingTimeSlotsForMonth

Description: API returns time intervals that are available for all requested users. Each requested user/email should be provided as separate element in array. API will ignore provided user if it is not found in the system.

Request:

{
    "data": {
        "users": [{
            "roomful": string
            "email": string
        }]
        "localDate": timestamp
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "availableTimeSlots": [{
            "startDate": timestamp
            "endDate": timestamp
        }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Set user availability ​

Method: websocket

Endpoint: meeting:setUserAvailability

Description: API allows user to set times when he is available / not available to participate in meetings.

  • If repetition parameter is provided, availability will be set as pattern for provided week days.

  • If repetition parameter is not provided, availability will be set for mentioned day explicitly.

Status parameter is represented by one of: "Available" / "NotAvailable".

Repetition parameter is represented by a byte, meaning each bit (starting from right) is a day of the week, starting from Sunday (i.e. 00000101 translates to Sunday and Tuesday).

LocalDate parameter indicates with what date server should work.

Request:

{
    "data": {
        "availability": {
            "status": string
            "dates": [{
                "startDate": timestamp
                "endDate": timestamp
            }]
            "repetition": byte
        }
        "localDate": timestamp
    }
    "event": { "id": string, "date": timestamp }
}

Response:

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

Get user availability pattern ​

Method: websocket

Endpoint: meeting:getUserAvailabilityPattern

Request:

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

Response:

{
    "data": {
        "pattern": {
            "availabilities": [{  // list of availabilities for each day of the week
                "status": string
                "dates": [{
                    "startDate": timestamp
                    "endDate": timestamp
                }]
            }]
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get user availability for day ​

Method: websocket

Endpoint: meeting:getUserAvailabilityForDay

Request:

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

Response:

{
    "data": {
        "availability": {
            "status": string
            "dates": [{
                "startDate": timestamp
                "endDate": timestamp
            }]
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get user availability for week ​

Method: websocket

Endpoint: meeting:getUserAvailabilityForWeek

Request:

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

Response:

{
    "data": {
        "availability": {
            "status": string
            "dates": [{
                "startDate": timestamp
                "endDate": timestamp
            }]
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get user availability for month ​

Method: websocket

Endpoint: meeting:getUserAvailabilityForMonth

Request:

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

Response:

{
    "data": {
        "availability": {
            "status": string
            "dates": [{
                "startDate": timestamp
                "endDate": timestamp
            }]
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

On meeting updated event ​

Event: meeting:meetingUpdated

DEPRECATED

Data:

{
    "data": {
        "meeting": {
            "id": string
            "created": timestamp
            "updated": timestamp
            "startDate": timestamp
            "endDate": timestamp
            "subject": string
            "roomId": string
            "propId": string
            "color": { rgba structure }
            "isValid": bool  // not valid if room or prop were deleted
            "room": {
                "id": string
                "title": string
                "thumbnail": { resource structure }
            }
            "prop": {
                "id": string
                "title": string
            }
            "organizer": { user simple structure }
            "invitedUsers": [{
                "user": { user simple structure }
                "status": string
            }]
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

On meeting deleted event ​

Event: meeting:meetingDeleted

DEPRECATED

Data:

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

On meeting created event ​

Event: meeting:onMeetingCreated

Data:

{
    "data": {
        "meeting": {
            "meetingId": string
            "startDate": timestamp
            "endDate": timestamp
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

On meeting series created event ​

Event: meeting:onMeetingSeriesCreated

Data:

{
    "data": {
        "meeting": {
            "seriesId": string  // id of recurring meeting series
            "rrule": string  // recurrence rule in RFC 5545 format
            "dtstart": string  // start date of the first occurrence in RFC 5545 format
            "duration": int  // duration of each meeting occurrence in seconds
            "seriesStartDate": timestamp  // start date of the first meeting in the series (UTC)
            "seriesEndDate": timestamp  // date when series should end, max value, if not set (UTC)
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

On meeting deleted event ​

Event: meeting:onMeetingDeleted

Data:

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

On meeting series deleted event ​

Event: meeting:onMeetingSeriesDeleted

Data:

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

On meeting updated event ​

Event: meeting:onMeetingUpdated

Data:

{
    "data": {
        "meeting": {
            "meetingId": string
            "startDate": timestamp
            "endDate": timestamp
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

On meeting series updated event ​

Event: meeting:onMeetingSeriesUpdated

Data:

{
    "data": {
        "meeting": {
            "seriesId": string  // id of recurring meeting series
            "rrule": string  // recurrence rule in RFC 5545 format
            "dtstart": string  // start date of the first occurrence in RFC 5545 format
            "duration": int  // duration of each meeting occurrence in seconds
            "seriesStartDate": timestamp  // start date of the first meeting in the series (UTC)
            "seriesEndDate": timestamp  // date when series should end, max value, if not set (UTC)
            "created": timestamp
            "subject": string
            "description": string
            "color": { rgba structure }
            "isValid": bool  // not valid if source was deleted
            "organizerId": string  // user id of the organizer
            "participantIds": [ string ]  // list of user ids of participants, including organizer
            "sourceString": string
            "sourceType": string
            "sourcePk": string
            "networkId": string
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

On meeting series occurrence updated event ​

Event: meeting:onMeetingSeriesOccurrenceUpdated

Description: override.isCancelled=true when the occurrence is cancelled. override.isCancelled=false when the occurrence details were modified. override is null when the occurrence override was deleted (occurrence reverts to series defaults).

Data:

{
    "data": {
        "seriesId": string
        "originalStartDate": timestamp
        "override": {  // null means the override was removed and the occurrence reverts to series defaults
            "seriesId": string
            "originalStartDate": timestamp  // rrule-generated start date that identifies this occurrence
            "isCancelled": bool  // if true, this occurrence is cancelled
            "subject": string
            "description": string
            "color": { rgba structure }
            "startDate": timestamp  // overridden start date; zero means use series-generated date
            "endDate": timestamp  // overridden end date; zero means use series-generated date
        }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Models ​


RGBA ​

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

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

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
}