* Base endpoint for API v1 is: `/ocs/v2.php/apps/spreed/api/v1`
* Base endpoint for API v2 is: `/ocs/v2.php/apps/spreed/api/v2`
* Base endpoint for API v3 is: `/ocs/v2.php/apps/spreed/api/v3`
* API v1: 🏁 Removed with API v4
* API v2: 🏁 Removed with API v4
* API v3: 🏁 Removed with API v4
* API v4: Base endpoint `/ocs/v2.php/apps/spreed/api/v4`
## Get user´s conversations
@ -29,37 +30,37 @@
`type` | int | * | See list of conversation types in the [constants list](constants.md#conversation-types)
`name` | string | * | Name of the conversation (can also be empty)
`displayName` | string | * | `name` if non empty, otherwise it falls back to a list of participants
`description` | string | v3 | Description of the conversation (can also be empty) (only available with `room-description` capability)
`description` | string | * | Description of the conversation (can also be empty) (only available with `room-description` capability)
`participantType` | int | * | Permissions level of the current user
`attendeeId` | int | v3 | Unique attendee id
`attendeePin` | string | v3 | Unique dial-in authentication code for this user, when the conversation has SIP enabled (see `sipEnabled` attribute)
`actorType` | string | v3 | Currently known `users|guests|emails|groups`
`actorId` | string | v3 | The unique identifier for the given actor type
`participantInCall` | bool | 🏴 v1 | **Deprecated:** ~~Flag if a **random** active session of the current user (might be from a different device) is in the call (deprecated, use `participantFlags` instead)~~
`participantFlags` | int | * | **Deprecated:** ~~Flags of a **random** active session of the current user (might be from a different device) (only available with `in-call-flags` capability)~~
`attendeeId` | int | * | Unique attendee id
`attendeePin` | string | * | Unique dial-in authentication code for this user, when the conversation has SIP enabled (see `sipEnabled` attribute)
`actorType` | string | * | Currently known `users|guests|emails|groups`
`actorId` | string | * | The unique identifier for the given actor type
`participantInCall` | 🏁 | 🏁 | **Removed:** use `participantFlags` instead
`participantFlags` | int | * | "In call" flags of the user's session making the request (only available with `in-call-flags` capability)
`readOnly` | int | * | Read-only state for the current user (only available with `read-only-rooms` capability)
`listable` | int | * | Listable scope for the room (only available with `listable-rooms` capability)
`count` | int | 🏴 v1 | **Deprecated:**~~Number of active users~~ - always returns `0`
`numGuests` | int | 🏴 v1 | Number of active guests
`lastPing` | int | * | **Deprecated:** ~~Timestamp of the last ping of a **random** active session of the current user (might be from a different device)~~
`sessionId` | string | * | `'0'` if not connected, otherwise an up to 512 character long string that is the identifier of a **random** active session of the current user (might be from a different device), should only be used to pre-check if the user joined in another device, but this might be outdated by the time of usage, so better check via [Get list of participants in a conversation](participant.md#get-list-of-participants-in-a-conversation)
`count` | 🏁 | 🏁 | **Removed:** Count the users on the [Get list of participants in a conversation](participant.md#get-list-of-participants-in-a-conversation) endpoint
`numGuests` | 🏁 | 🏁 | **Removed:** Count the guests on the [Get list of participants in a conversation](participant.md#get-list-of-participants-in-a-conversation) endpoin
`lastPing` | int | * | Timestamp of the user's session making the request
`sessionId` | string | * | `'0'` if not connected, otherwise an up to 512 character long string that is the identifier of the user's session making the request. Should only be used to pre-check if the user joined already with this session, but this might be outdated by the time of usage, so better check via [Get list of participants in a conversation](participant.md#get-list-of-participants-in-a-conversation)
`hasPassword` | bool | * | Flag if the conversation has a password
`hasCall` | bool | * | Flag if the conversation has an active call
`callFlag` | int | v3 | Combined flag of all participants in the current call (see [constants list](constants.md#participant-in-call-flag), only available with `conversation-call-flags` capability)
`callFlag` | int | * | Combined flag of all participants in the current call (see [constants list](constants.md#participant-in-call-flag), only available with `conversation-call-flags` capability)
`canStartCall` | bool | * | Flag if the user can start a new call in this conversation (joining is always possible) (only available with `start-call-flag` capability)
`canDeleteConversation` | bool | v2 | Flag if the user can delete the conversation for everyone (not possible without moderator permissions or in one-to-one conversations)
`canLeaveConversation` | bool | v2 | Flag if the user can leave the conversation (not possible for the last user with moderator permissions)
`canDeleteConversation` | bool | * | Flag if the user can delete the conversation for everyone (not possible without moderator permissions or in one-to-one conversations)
`canLeaveConversation` | bool | * | Flag if the user can leave the conversation (not possible for the last user with moderator permissions)
`lastActivity` | int | * | Timestamp of the last activity in the conversation, in seconds and UTC time zone
`isFavorite` | bool | * | Flag if the conversation is favorited by the user
`notificationLevel` | int | * | The notification level for the user (one of `Participant::NOTIFY_*` (1-3))
`lobbyState` | int | * | Webinary lobby restriction (0-1), if the participant is a moderator they can always join the conversation (only available with `webinary-lobby` capability)
`notificationLevel` | int | * | The notification level for the user (See [Participant notification levels](constants.md#Participant-notification-levels))
`lobbyState` | int | * | Webinar lobby restriction (0-1), if the participant is a moderator they can always join the conversation (only available with `webinary-lobby` capability) (See [Webinar lobby states](constants.md#webinar-lobby-states))
`lobbyTimer` | int | * | Timestamp when the lobby will be automatically disabled (only available with `webinary-lobby` capability)
`sipEnabled` | int | v3 | SIP enable status (0-1)
`canEnableSIP` | int | v3 | Whether the given user can enable SIP for this conversation. Note that when the token is not-numeric only, SIP can not be enabled even if the user is permitted and a moderator of the conversation
`sipEnabled` | int | * | SIP enable status (0-1)
`canEnableSIP` | int | * | Whether the given user can enable SIP for this conversation. Note that when the token is not-numeric only, SIP can not be enabled even if the user is permitted and a moderator of the conversation
`unreadMessages` | int | * | Number of unread chat messages in the conversation (only available with `chat-v2` capability)
`unreadMention` | bool | * | Flag if the user was mentioned since their last visit
`lastReadMessage` | int | * | ID of the last read message in a room (only available with `chat-read-marker` capability)
`lastCommonReadMessage` | int | v3 | ID of the last message read by every user that has read privacy set to public in a room. When the user themself has it set to private the value is `0` (only available with `chat-read-status` capability)
`lastCommonReadMessage` | int | * | ID of the last message read by every user that has read privacy set to public in a room. When the user themself has it set to private the value is `0` (only available with `chat-read-status` capability)
`lastMessage` | message | * | Last message in a conversation if available, otherwise empty
`objectType` | string | * | The type of object that the conversation is associated with; "share:password" if the conversation is used to request a password for a share, otherwise empty
`objectId` | string | * | Share token if "objectType" is "share:password", otherwise empty
@ -207,7 +208,7 @@
field | type | Description
------|------|------------
`state` | int | New state for the conversation
`state` | int | New state for the conversation, see [constants list](constants.md#read-only-states)
* Response:
- Status code:
@ -233,25 +234,9 @@
+ `403 Forbidden` When the conversation is not a public conversation
+ `404 Not Found` When the conversation could not be found for the participant
## Set conversation password
* Method: `PUT`
* Endpoint: `/room/{token}/password`
* Data:
field | type | Description
------|------|------------
`password` | string | Set a new password for the conversation
* Response:
- Status code:
+ `200 OK`
+ `403 Forbidden` When the current user is not a moderator/owner
+ `403 Forbidden` When the conversation is not a public conversation
+ `404 Not Found` When the conversation could not be found for the participant
* Base endpoint for API v1 is: `/ocs/v2.php/apps/spreed/api/v1`
* Base endpoint for API v2 is: `/ocs/v2.php/apps/spreed/api/v2`
* Base endpoint for API v3 is: `/ocs/v2.php/apps/spreed/api/v3`
* API v1: 🏁 Removed with API v4
* API v2: 🏁 Removed with API v4
* API v3: 🏁 Removed with API v4
* API v4: Base endpoint `/ocs/v2.php/apps/spreed/api/v4`
## Get list of participants in a conversation
@ -26,10 +27,9 @@
field | type | API | Description
------|------|-----|------------
`userId` | string | v1 + v2 only | Is empty for guests
`attendeeId` | int | v3 | Unique attendee id
`actorType` | string | v3 | Currently known `users|guests|emails|groups`
`actorId` | string | v3 | The unique identifier for the given actor type
`attendeeId` | int | * | Unique attendee id
`actorType` | string | * | Currently known `users|guests|emails|groups`
`actorId` | string | * | The unique identifier for the given actor type
`displayName` | string | * | Can be empty for guests
`participantType` | int | * | Permissions level of the participant (see [constants list](constants.md#participant-types))
`lastPing` | int | * | Timestamp of the last ping of the user (should be used for sorting)
@ -67,7 +67,6 @@
## Delete an attendee by id from a conversation
* API: Only `v3` or later
* Method: `DELETE`
* Endpoint: `/room/{token}/attendees`
* Data:
@ -86,27 +85,6 @@
+ `404 Not Found` When the conversation could not be found for the participant
+ `404 Not Found` When the participant to remove could not be found
## Delete a participant from a conversation
* API: Only `v1` and `v2` (Use [Delete an attendee by id from a conversation](#delete-an-attendee-by-id-from-a-conversation) in later version)
* Method: `DELETE`
* Endpoint: `/room/{token}/participants`
* Data:
field | type | Description
------|------|------------
`participant` | string | User to remove
* Response:
- Status code:
+ `200 OK`
+ `400 Bad Request` When the participant is a moderator or owner
+ `400 Bad Request` When there are no other moderators or owners left
+ `403 Forbidden` When the current user is not a moderator or owner
+ `403 Forbidden` When the participant to remove is an owner
+ `404 Not Found` When the conversation could not be found for the participant
+ `404 Not Found` When the participant to remove could not be found
## Remove yourself from a conversation
* Method: `DELETE`
@ -118,25 +96,6 @@
+ `400 Bad Request` When the participant is a moderator or owner and there are no other moderators or owners left.
+ `404 Not Found` When the conversation could not be found for the participant
## Remove a guest from a conversation
* API: Only `v1` and `v2` (Use [Delete an attendee by id from a conversation](#delete-an-attendee-by-id-from-a-conversation) in later versions)
* Method: `DELETE`
* Endpoint: `/room/{token}/participants/guests`
* Data:
field | type | Description
------|------|------------
`participant` | string | Session ID of the guest to remove
* Response:
- Status code:
+ `200 OK`
+ `400 Bad Request` When the target participant is not a guest
+ `403 Forbidden` When the current user is not a moderator or owner
+ `404 Not Found` When the conversation could not be found for the participant
+ `404 Not Found` When the target participant could not be found
## Join a conversation (available for call and chat)
* Method: `POST`
@ -145,7 +104,7 @@
field | type | Description
------|------|------------
`password` | string | Optional: Password is only required for users which are of type `4` or `5` and only when the conversation has `hasPassword` set to true.
`password` | string | Optional: Password is only required for users which are self joined or guests and only when the conversation has `hasPassword` set to true.
`force` | bool | If set to `false` and the user has an active session already a `409 Conflict` will be returned (Default: true - to keep the old behaviour)
* Response:
@ -153,7 +112,7 @@
+ `200 OK`
+ `403 Forbidden` When the password is required and didn't match
+ `404 Not Found` When the conversation could not be found for the participant
+ `409 Conflict` When the user already has an active session in the conversation. The suggested behaviour is to ask the user whether they want to kill the old session and force join unless the last ping is older than 60 seconds or older than 40 seconds when the conflicting session is not marked as in a call.
+ `409 Conflict` When the user already has an active Talk session in the conversation with this Nextcloud session. The suggested behaviour is to ask the user whether they want to kill the old session and force join unless the last ping is older than 60 seconds or older than 40 seconds when the conflicting session is not marked as in a call.
- Data in case of `200 OK`: See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations)
@ -174,7 +133,7 @@
field | type | Description
------|------|------------
`attendeeId` | int or null | Attendee id can be used for guests and users
`attendeeId` | int or null | Attendee id can be used for guests and users, not setting it will resend all invitations
* Response:
- Status code:
@ -198,11 +157,9 @@
* Endpoint: `/room/{token}/moderators`
* Data:
field | type | API | Description
------|------|-----|------------
`participant` | string or null | v1 + v2 | User to demote
`sessionId` | string or null | v1 + v2 | Guest session to demote
`attendeeId` | int or null | v3 | Attendee id can be used for guests and users
field | type | Description
------|------|------------
`attendeeId` | int | Attendee id can be used for guests and users
* Response:
- Status code:
@ -219,11 +176,9 @@
* Endpoint: `/room/{token}/moderators`
* Data:
field | type | API | Description
------|------|-----|------------
`participant` | string or null | v1 + v2 | User to demote
`sessionId` | string or null | v1 + v2 | Guest session to demote
`attendeeId` | int or null | v3 | Attendee id can be used for guests and users
field | type | Description
------|------|------------
`attendeeId` | int | Attendee id can be used for guests and users
* Response:
- Status code:
@ -238,7 +193,6 @@
Note: This is only allowed with validate SIP bridge requests