Revert "Revert commits 6c7bfd4 5638025 da7759d ba374ce cf84de4 39a9b7d e990c19"

This reverts commit 0ab6a48e13ec15267de4373f2647745cc184bb87.
This commit is contained in:
juancarmore 2026-01-07 10:13:08 +01:00
parent 86af733b37
commit 450aa85b88
47 changed files with 1412 additions and 297 deletions

View File

@ -1,6 +0,0 @@
name: secret
in: path
required: true
description: The secret value from the room URL used to access the room.
schema:
type: string

View File

@ -0,0 +1,7 @@
name: userId
in: path
required: true
description: The unique identifier of the user.
schema:
type: string
example: 'alice_smith'

View File

@ -0,0 +1,7 @@
name: memberId
in: path
required: true
description: The unique identifier of the room member.
schema:
type: string
example: 'abc123'

View File

@ -0,0 +1,9 @@
name: fields
in: query
description: >
Specifies which fields to include in the response for the room member resource.
Provide a comma-separated list of field names.
required: false
schema:
type: string
example: 'accessUrl,baseRole'

View File

@ -0,0 +1,68 @@
description: Room member addition options
required: true
content:
application/json:
schema:
type: object
properties:
userId:
type: string
example: 'alice_smith'
description: |
The unique identifier for an internal OpenVidu Meet user. This field should be provided when adding an internal Meet user as a member.
If provided:
- The member will be associated with the Meet user account identified by this userId.
- The 'name' field should be left blank or an error will be fired. It will be automatically set based on the Meet user's profile name.
- The memberId will be set to this userId value.
If omitted, the member will be treated as an external user and 'name' must be provided.
Important: You must provide either 'userId' (for internal users) or 'name' (for external users), but NOT both.
If both are provided, a validation error will be returned.
name:
type: string
maxLength: 50
example: 'Alice Smith'
description: |
The display name for the participant when joining the meeting with this member access. It is recommended to be unique for the members of the room to easily identify them in the meeting.
This field is required only when adding an external user. The 'userId' field should be left blank or an error will be fired.
Important: You must provide either 'userId' (for internal users) or 'name' (for external users), but NOT both.
If both are provided, a validation error will be returned.
baseRole:
type: string
enum:
- moderator
- speaker
example: 'speaker'
description: |
The base role that defines the default permissions for this member. Options are:
- moderator: By default, has full permissions to manage the room and meeting.
- speaker: By default, has permissions to publish audio and video streams.
Individual permissions can be overridden through the customPermissions object.
customPermissions:
type: object
additionalProperties:
type: boolean
example:
canShareScreen: false
canRecord: true
description: |
An optional object containing custom permission overrides for the base role.
Only include the permissions you want to override from the base role defaults.
Each property should be a permission name (e.g., 'canRecord', 'canShareScreen') with a boolean value.
For the complete list of all available permissions, see the full permissions schema:
[MeetPermissions](#/schemas/MeetPermissions)
required:
- baseRole
description: |
Request body to add a new member to a room.
Important: You must provide either 'userId' (for internal Meet users) or 'name' (for external users), but NOT both.
- If 'userId' is provided, the member will be linked to an internal user account and 'name' will be set from that account.
- If 'name' is provided, the member will be treated as an external user without a linked account.
- If both 'userId' and 'name' are provided or neither is provided, the request will fail with a validation error.

View File

@ -0,0 +1,42 @@
description: User creation options
required: true
content:
application/json:
schema:
type: object
properties:
userId:
type: string
pattern: '^[a-z0-9_]+$'
example: 'alice_smith'
description: |
The unique identifier for the new user. This must be unique across all users.
Validation: Must contain only lowercase letters, numbers, and underscores.
name:
type: string
maxLength: 50
example: 'Alice Smith'
description: |
The display name (profile name) for the user.
role:
type: string
enum: ['admin', 'user', 'room_member']
example: 'user'
description: |
The role to assign to the user. Available roles:
- admin: Has full control over the entire application (configuration, users, rooms, recordings, etc).
- user: Can create and manage their own created rooms and associated recordings. Can also access rooms they are a member of, but without management permissions.
- room_member: Can only access rooms (and recordings) they are a member of, without ability to create or manage rooms.
password:
type: string
format: password
minLength: 5
example: 'SecureP@ssw0rd'
description: |
The password for the new user account.
required:
- userId
- name
- role
- password

View File

@ -3,4 +3,16 @@ required: true
content:
application/json:
schema:
$ref: '../../schemas/internal/user-credentials.yaml'
type: object
properties:
username:
type: string
description: The username of the user.
example: 'admin'
password:
type: string
description: The password of the user.
example: 'password123'
required:
- username
- password

View File

@ -1,10 +0,0 @@
description: Room secret
required: true
content:
application/json:
schema:
type: object
properties:
secret:
type: string
description: The secret value from the room URL used to connect to the room.

View File

@ -0,0 +1,6 @@
description: Room anonymous access configuration update options
required: true
content:
application/json:
schema:
$ref: '../schemas/meet-room-anonymous-config.yaml'

View File

@ -8,9 +8,9 @@ content:
$ref: '../schemas/meet-room-config.yaml#/MeetRoomConfig'
example:
config:
chat:
enabled: true
recording:
enabled: false
chat:
enabled: true
virtualBackground:
enabled: true

View File

@ -0,0 +1,33 @@
description: Room member update options
required: true
content:
application/json:
schema:
type: object
properties:
baseRole:
type: string
enum:
- moderator
- speaker
example: 'speaker'
description: |
The base role that defines the default permissions for this member. Options are:
- moderator: By default, has full permissions to manage the room and meeting.
- speaker: By default, has permissions to publish audio and video streams.
Individual permissions can be overridden through the 'customPermissions' object.
customPermissions:
type: object
additionalProperties:
type: boolean
example:
canShareScreen: false
canRecord: true
description: |
An optional object containing custom permission overrides for the base role.
Only include the permissions you want to override from the base role defaults.
Each property should be a permission name (e.g., 'canRecord', 'canShareScreen') with a boolean value.
For the complete list of all available permissions, see the full permissions schema:
[MeetPermissions](#/schemas/MeetPermissions)

View File

@ -0,0 +1,6 @@
description: Room roles permissions update options
required: true
content:
application/json:
schema:
$ref: '../schemas/meet-room-roles-config.yaml'

View File

@ -0,0 +1,16 @@
description: Room member or room not found
content:
application/json:
schema:
$ref: '../schemas/error.yaml'
examples:
member_not_found:
summary: Room member does not exist in the specified room
value:
error: 'Room Error'
message: 'Room member "abc123" does not exist in room "room_123"'
room_not_found:
summary: Room does not exist
value:
error: 'Room Error'
message: 'Room "room_123" does not exist'

View File

@ -0,0 +1,8 @@
description: User not found
content:
application/json:
schema:
$ref: '../../schemas/error.yaml'
example:
error: 'User Error'
message: 'User "alice_smith" not found'

View File

@ -0,0 +1,8 @@
description: UserId already exists
content:
application/json:
schema:
$ref: '../../schemas/error.yaml'
example:
error: 'User Error'
message: 'User "alice_smith" already exists'

View File

@ -0,0 +1,12 @@
description: User created successfully
content:
application/json:
schema:
$ref: '../../schemas/internal/meet-user.yaml'
headers:
Location:
description: URL of the newly created user
schema:
type: string
format: uri
example: https://your-api.com/internal-api/v1/users/alice_smith

View File

@ -0,0 +1,10 @@
description: User deleted successfully
content:
application/json:
schema:
type: object
properties:
message:
type: string
example:
message: User 'alice_smith' deleted successfully

View File

@ -0,0 +1,5 @@
description: Successfully retrieved authenticated user info
content:
application/json:
schema:
$ref: '../../schemas/internal/meet-user.yaml'

View File

@ -1,5 +0,0 @@
description: Successfully retrieved the room role and associated permissions
content:
application/json:
schema:
$ref: '../../schemas/internal/room-member-role-permissions.yaml'

View File

@ -1,38 +0,0 @@
description: Successfully retrieved all roles and associated permissions in a room
content:
application/json:
schema:
type: array
items:
$ref: '../../schemas/internal/room-member-role-permissions.yaml'
example:
- role: 'moderator'
permissions:
livekit:
roomJoin: true
room: 'room-123'
canPublish: true
canSubscribe: true
canPublishData: true
canUpdateOwnMetadata: true
openvidu:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: true
canChat: true
canChangeVirtualBackground: true
- role: 'speaker'
permissions:
livekit:
roomJoin: true
room: 'room-123'
canPublish: true
canSubscribe: true
canPublishData: true
canUpdateOwnMetadata: true
openvidu:
canRecord: false
canRetrieveRecordings: true
canDeleteRecordings: false
canChat: true
canChangeVirtualBackground: true

View File

@ -1,4 +1,4 @@
description: Successfully retrieved user profile
description: User retrieved successfully
content:
application/json:
schema:

View File

@ -0,0 +1,40 @@
description: Successfully retrieved the list of users
content:
application/json:
schema:
type: object
properties:
users:
type: array
items:
$ref: '../../schemas/internal/meet-user.yaml'
pagination:
$ref: '../../schemas/meet-pagination.yaml'
examples:
multiple_users:
summary: Response with multiple users
value:
users:
- userId: 'admin'
name: 'Admin'
role: 'admin'
- userId: 'alice_smith'
name: 'Alice Smith'
role: 'user'
- userId: 'bob_jones'
name: 'Bob Jones'
role: 'room_member'
pagination:
nextPageToken: 'eyJvZmZzZXQiOjEwfQ=='
isTruncated: true
maxItems: 3
single_page:
summary: Response with all users in a single page
value:
users:
- userId: 'admin'
name: 'Admin'
role: 'admin'
pagination:
isTruncated: false
maxItems: 10

View File

@ -0,0 +1,12 @@
description: Room member added successfully
content:
application/json:
schema:
$ref: '../schemas/meet-room-member.yaml'
headers:
Location:
description: URL of the newly added room member
schema:
type: string
format: uri
example: https://your-api.com/api/v1/rooms/room-123/members/abc123

View File

@ -0,0 +1,10 @@
description: Successfull deletion of the room member
content:
application/json:
schema:
type: object
properties:
message:
type: string
example:
message: Member 'abc123' deleted successfully from room 'room-123'

View File

@ -0,0 +1,5 @@
description: Success response for retrieving a room member info
content:
application/json:
schema:
$ref: '../schemas/meet-room-member.yaml'

View File

@ -0,0 +1,75 @@
description: Successfully retrieved the list of room members
content:
application/json:
schema:
type: object
properties:
members:
type: array
items:
$ref: '../schemas/meet-room-member.yaml'
pagination:
$ref: '../schemas/meet-pagination.yaml'
examples:
complete_member_details:
summary: Full room member details response with multiple members
value:
members:
- memberId: 'alice_smith'
name: 'Alice Smith'
accessUrl: 'http://localhost:6080/room/room-123'
baseRole: 'moderator'
customPermissions:
canEndMeeting: false
effectivePermissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: true
canJoinMeeting: true
canShareAccessLinks: true
canMakeModerator: true
canKickParticipants: true
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
- memberId: 'ext-abc123'
name: 'Bob'
accessUrl: 'http://localhost:6080/room/room-123?secret=ext-abc123'
baseRole: 'speaker'
customPermissions:
canShareScreen: false
canRecord: true
effectivePermissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: false
canMakeModerator: false
canKickParticipants: false
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: false
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
pagination:
isTruncated: false
maxItems: 10
fields=accessUrl,baseRole:
summary: Response with only accessUrl and baseRole for each member
value:
members:
- accessUrl: 'http://localhost:6080/room/room-123'
baseRole: 'moderator'
- accessUrl: 'http://localhost:6080/room/room-123?secret=ext-abc123'
baseRole: 'speaker'
pagination:
isTruncated: false
maxItems: 10

View File

@ -9,30 +9,65 @@ content:
value:
roomId: 'room-123'
roomName: 'room'
owner: 'admin'
creationDate: 1620000000000
autoDeletionDate: 1900000000000
autoDeletionPolicy:
withMeeting: when_meeting_ends
withRecordings: close
config:
chat:
enabled: true
recording:
enabled: false
chat:
enabled: true
virtualBackground:
enabled: true
e2ee:
enabled: false
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
roles:
moderator:
permissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: true
canJoinMeeting: true
canShareAccessLinks: true
canMakeModerator: true
canKickParticipants: true
canEndMeeting: true
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
speaker:
permissions:
canRecord: false
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: false
canMakeModerator: false
canKickParticipants: false
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
anonymous:
moderator:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=123456'
speaker:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=654321'
accessUrl: 'http://localhost:6080/room/room-123'
status: open
meetingEndAction: none
fields=roomId:
summary: Response with only the roomId
value:
roomId: 'room-123'
fields=roomId,roomName,creationDate,autoDeletionDate,config:
summary: Room details with roomId, roomName, creationDate, autoDeletionDate, and config
value:
@ -41,17 +76,22 @@ content:
creationDate: 1620000000000
autoDeletionDate: 1900000000000
config:
chat:
enabled: true
recording:
enabled: false
chat:
enabled: true
virtualBackground:
enabled: true
e2ee:
enabled: false
fields=moderatorUrl,speakerUrl:
summary: Response containing only moderator and speaker URLs
fields=anonymous:
summary: Response containing only anonymous access configuration
value:
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
anonymous:
moderator:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=123456'
speaker:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=654321'

View File

@ -18,42 +18,122 @@ content:
rooms:
- roomId: 'room-123'
roomName: 'room'
owner: 'admin'
creationDate: 1620000000000
autoDeletionDate: 1900000000000
autoDeletionPolicy:
withMeeting: when_meeting_ends
withRecordings: close
config:
chat:
enabled: true
recording:
enabled: false
chat:
enabled: true
virtualBackground:
enabled: true
e2ee:
enabled: false
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
roles:
moderator:
permissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: true
canJoinMeeting: true
canShareAccessLinks: true
canMakeModerator: true
canKickParticipants: true
canEndMeeting: true
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
speaker:
permissions:
canRecord: false
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: false
canMakeModerator: false
canKickParticipants: false
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
anonymous:
moderator:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=123456'
speaker:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=654321'
accessUrl: 'http://localhost:6080/room/room-123'
status: open
meetingEndAction: none
- roomId: 'room-456'
roomName: 'room'
owner: 'alice_smith'
creationDate: 1620001000000
autoDeletionDate: 1900000000000
autoDeletionPolicy:
withMeeting: when_meeting_ends
withRecordings: close
config:
chat:
enabled: false
recording:
enabled: true
chat:
enabled: false
virtualBackground:
enabled: false
e2ee:
enabled: false
moderatorUrl: 'http://localhost:6080/room/room-456?secret=789012'
speakerUrl: 'http://localhost:6080/room/room-456?secret=210987'
roles:
moderator:
permissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: true
canMakeModerator: false
canKickParticipants: true
canEndMeeting: true
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
speaker:
permissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: false
canMakeModerator: false
canKickParticipants: false
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: false
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
anonymous:
moderator:
enabled: false
accessUrl: 'http://localhost:6080/room/room-456?secret=789012'
speaker:
enabled: true
accessUrl: 'http://localhost:6080/room/room-456?secret=210987'
accessUrl: 'http://localhost:6080/room/room-456'
status: open
meetingEndAction: none
pagination:
@ -78,10 +158,10 @@ content:
creationDate: 1620000000000
autoDeletionDate: 1900000000000
config:
chat:
enabled: true
recording:
enabled: false
chat:
enabled: true
virtualBackground:
enabled: true
e2ee:
@ -91,10 +171,10 @@ content:
creationDate: 1620001000000
autoDeletionDate: 1900000000000
config:
chat:
enabled: false
recording:
enabled: true
chat:
enabled: false
virtualBackground:
enabled: false
e2ee:
@ -103,15 +183,3 @@ content:
isTruncated: true
nextPageToken: 'abc123'
maxItems: 10
fields=moderatorUrl,speakerUrl:
summary: Response containing only moderator and speaker URLs
value:
rooms:
- moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
- moderatorUrl: 'http://localhost:6080/room/room-456?secret=789012'
speakerUrl: 'http://localhost:6080/room/room-456?secret=210987'
pagination:
isTruncated: false
maxItems: 10

View File

@ -39,16 +39,58 @@ content:
room:
roomId: room-123
roomName: room
owner: 'admin'
creationDate: 1620000000000
config:
chat:
enabled: true
recording:
enabled: false
chat:
enabled: true
virtualBackground:
enabled: true
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
e2ee:
enabled: false
roles:
moderator:
permissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: true
canJoinMeeting: true
canShareAccessLinks: true
canMakeModerator: true
canKickParticipants: true
canEndMeeting: true
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
speaker:
permissions:
canRecord: false
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: false
canMakeModerator: false
canKickParticipants: false
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
anonymous:
moderator:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=123456'
speaker:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=654321'
accessUrl: 'http://localhost:6080/room/room-123'
status: closed
meetingEndAction: none
room_with_active_meeting_and_recordings_deleted:
@ -62,15 +104,57 @@ content:
room:
roomId: room-123
roomName: room
owner: 'admin'
creationDate: 1620000000000
config:
chat:
enabled: true
recording:
enabled: false
chat:
enabled: true
virtualBackground:
enabled: true
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
e2ee:
enabled: false
roles:
moderator:
permissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: true
canJoinMeeting: true
canShareAccessLinks: true
canMakeModerator: true
canKickParticipants: true
canEndMeeting: true
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
speaker:
permissions:
canRecord: false
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: false
canMakeModerator: false
canKickParticipants: false
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
anonymous:
moderator:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=123456'
speaker:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=654321'
accessUrl: 'http://localhost:6080/room/room-123'
status: active_meeting
meetingEndAction: close

View File

@ -24,16 +24,58 @@ content:
room:
roomId: room-123
roomName: room
owner: 'admin'
creationDate: 1620000000000
config:
chat:
enabled: true
recording:
enabled: false
chat:
enabled: true
virtualBackground:
enabled: true
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
e2ee:
enabled: false
roles:
moderator:
permissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: true
canJoinMeeting: true
canShareAccessLinks: true
canMakeModerator: true
canKickParticipants: true
canEndMeeting: true
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
speaker:
permissions:
canRecord: false
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: false
canMakeModerator: false
canKickParticipants: false
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
anonymous:
moderator:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=123456'
speaker:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=654321'
accessUrl: 'http://localhost:6080/room/room-123'
status: active_meeting
meetingEndAction: delete
room_with_active_meeting_and_recordings_scheduled_to_be_deleted:
@ -43,16 +85,58 @@ content:
room:
roomId: room-123
roomName: room
owner: 'admin'
creationDate: 1620000000000
config:
chat:
enabled: true
recording:
enabled: false
chat:
enabled: true
virtualBackground:
enabled: true
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
e2ee:
enabled: false
roles:
moderator:
permissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: true
canJoinMeeting: true
canShareAccessLinks: true
canMakeModerator: true
canKickParticipants: true
canEndMeeting: true
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
speaker:
permissions:
canRecord: false
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: false
canMakeModerator: false
canKickParticipants: false
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
anonymous:
moderator:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=123456'
speaker:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=654321'
accessUrl: 'http://localhost:6080/room/room-123'
status: active_meeting
meetingEndAction: delete
room_with_active_meeting_scheduled_to_be_closed:
@ -62,6 +146,7 @@ content:
room:
roomId: room-123
roomName: room
owner: 'admin'
creationDate: 1620000000000
config:
chat:
@ -70,7 +155,48 @@ content:
enabled: false
virtualBackground:
enabled: true
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
e2ee:
enabled: false
roles:
moderator:
permissions:
canRecord: true
canRetrieveRecordings: true
canDeleteRecordings: true
canJoinMeeting: true
canShareAccessLinks: true
canMakeModerator: true
canKickParticipants: true
canEndMeeting: true
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
speaker:
permissions:
canRecord: false
canRetrieveRecordings: true
canDeleteRecordings: false
canJoinMeeting: true
canShareAccessLinks: false
canMakeModerator: false
canKickParticipants: false
canEndMeeting: false
canPublishVideo: true
canPublishAudio: true
canShareScreen: true
canReadChat: true
canWriteChat: true
canChangeVirtualBackground: true
anonymous:
moderator:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=123456'
speaker:
enabled: true
accessUrl: 'http://localhost:6080/room/room-123?secret=654321'
accessUrl: 'http://localhost:6080/room/room-123'
status: active_meeting
meetingEndAction: close

View File

@ -0,0 +1,10 @@
description: Success response for updating room anonymous access configuration
content:
application/json:
schema:
type: object
properties:
message:
type: string
example:
message: Anonymous access config for room 'room-123' updated successfully

View File

@ -0,0 +1,5 @@
description: Room member updated successfully
content:
application/json:
schema:
$ref: '../schemas/meet-room-member.yaml'

View File

@ -0,0 +1,10 @@
description: Success response for updating room roles configuration
content:
application/json:
schema:
type: object
properties:
message:
type: string
example:
message: Roles permissions for room 'room-123' updated successfully

View File

@ -1,13 +1,21 @@
type: object
properties:
username:
userId:
type: string
example: 'admin'
description: The username of the authenticated user.
roles:
type: array
items:
type: string
enum: ['admin', 'user']
example: ['admin', 'user']
description: A list of roles assigned to the authenticated user.
example: 'alice_smith'
description: |
The unique identifier of the user.
name:
type: string
example: 'Alice Smith'
description: |
The display name (profile name) of the user.
role:
type: string
enum: ['admin', 'user', 'room_member']
example: 'user'
description: |
The role assigned to the user. Available roles:
- admin: Has full control over the entire application (configuration, users, rooms, recordings, etc).
- user: Can create and manage their own created rooms and associated recordings. Can also access rooms they are a member of, but without management permissions.
- room_member: Can only access rooms (and recordings) they are a member of, without ability to create or manage rooms.

View File

@ -1,74 +0,0 @@
type: object
properties:
role:
type: string
enum: ['moderator', 'speaker']
description: |
A role that a user can have as a member of a room.
The role determines the permissions of the user in the room.
- `moderator`: Can manage the room resources and meeting participants.
- `speaker`: Can publish media streams to the meeting.
example: 'moderator'
permissions:
type: object
properties:
livekit:
type: object
properties:
roomJoin:
type: boolean
description: >
Indicates whether the participant can join a room.
example: true
room:
type: string
description: >
Unique identifier of the room to which the participant is assigned.
canPublish:
type: boolean
description: >
Indicates whether the participant can publish media streams to the room.
example: true
canSubscribe:
type: boolean
description: >
Indicates whether the participant can subscribe to media streams in the room.
example: true
canPublishData:
type: boolean
description: >
Indicates whether the participant can publish data messages to the room.
example: true
canUpdateOwnMetadata:
type: boolean
description: >
Indicates whether the participant can update their own metadata.
example: true
openvidu:
type: object
properties:
canRecord:
type: boolean
description: >
Indicates whether the user can record a meeting in the room.
example: true
canRetrieveRecordings:
type: boolean
description: >
Indicates whether the user can retrieve and play recordings of meetings in the room.
example: true
canDeleteRecordings:
type: boolean
description: >
Indicates whether the user can delete recordings of meetings in the room.
example: true
canChat:
type: boolean
description: >
Indicates whether the user can send and receive chat messages in the room.
example: true
canChangeVirtualBackground:
type: boolean
description: >
Indicates whether the user can change their own virtual background.
example: true

View File

@ -1,13 +0,0 @@
type: object
required:
- username
- password
properties:
username:
type: string
description: The username of the user.
example: 'admin'
password:
type: string
description: The password of the user.
example: 'password123'

View File

@ -0,0 +1,58 @@
type: object
properties:
canRecord:
type: boolean
example: true
description: Can start/stop recording the meeting.
canRetrieveRecordings:
type: boolean
example: true
description: Can list and play recordings.
canDeleteRecordings:
type: boolean
example: false
description: Can delete recordings.
canJoinMeeting:
type: boolean
example: true
description: Can join the meeting.
canShareAccessLinks:
type: boolean
example: false
description: Can share access links to invite others.
canMakeModerator:
type: boolean
example: false
description: Can promote other participants to moderator role.
canKickParticipants:
type: boolean
example: false
description: Can remove other participants from the meeting.
canEndMeeting:
type: boolean
example: false
description: Can end the meeting for all participants.
canPublishVideo:
type: boolean
example: true
description: Can publish video in the meeting.
canPublishAudio:
type: boolean
example: true
description: Can publish audio in the meeting.
canShareScreen:
type: boolean
example: false
description: Can share screen in the meeting.
canReadChat:
type: boolean
example: true
description: Can read chat messages in the meeting.
canWriteChat:
type: boolean
example: true
description: Can send chat messages in the meeting.
canChangeVirtualBackground:
type: boolean
example: true
description: Can change the virtual background.

View File

@ -0,0 +1,24 @@
type: object
properties:
moderator:
type: object
properties:
enabled:
type: boolean
default: true
example: true
description: |
Enables or disables anonymous access for the moderator role.
speaker:
type: object
properties:
enabled:
type: boolean
default: true
example: true
description: |
Enables or disables anonymous access for the speaker role.
description: |
Configuration for anonymous access.
Both moderator and speaker fields are optional. If not specified, current configuration will be maintained.

View File

@ -0,0 +1,53 @@
type: object
properties:
memberId:
type: string
example: 'alice_smith'
description: |
The unique identifier of the room member.
- For internal users: This is set to the userId of the linked Meet user account.
- For external users: This is an automatically generated unique identifier starting from 'ext-'.
name:
type: string
example: 'Alice Smith'
description: |
The display name for the participant when joining the meeting with this member access.
- For OpenVidu Meet users, this is their profile name.
- For external users, this is the assigned name.
accessUrl:
type: string
format: uri
example: 'http://localhost:6080/room/room-123'
description: >
The unique URL for this member to access the room. This URL is different from the moderator and speaker URLs
and provides access with the specific permissions assigned to this member.
baseRole:
type: string
enum:
- moderator
- speaker
example: 'speaker'
description: |
The base role that defines the default permissions for this member. Options are:
- moderator: By default, has full permissions to manage the room and meeting.
- speaker: By default, has permissions to publish audio and video streams.
Individual permissions can be overridden through the customPermissions object.
customPermissions:
type: object
additionalProperties:
type: boolean
example:
canShareScreen: false
canRecord: true
description: |
Custom permission overrides for this member. This object contains only the permissions that differ from the base role defaults.
Each property is a permission name with a boolean value indicating whether the permission is granted or denied.
effectivePermissions:
$ref: meet-permissions.yaml
description: >
The complete set of effective permissions for this member. This object is calculated by applying the customPermissions
overrides to the base role defaults, resulting in the final permissions that will be enforced.

View File

@ -58,3 +58,22 @@ properties:
$ref: './meet-room-config.yaml#/MeetRoomConfig'
description: >
The config for the room. These config will be used to configure the room's settings.
roles:
$ref: meet-room-roles-config.yaml
description: |
Configuration for role permissions.
By default (if not specified), default permissions will be used for both moderator and speaker roles:
- Moderator: Full permissions to manage the room and meeting.
- Speaker: Permissions to publish audio and video streams.
You can customize this by providing partial permissions for each role (only specify the permissions you want to override).
anonymous:
$ref: meet-room-anonymous-config.yaml
description: |
Configuration for anonymous access to the room.
By default (if not specified), anonymous access is enabled for both moderators and speakers.
You can customize this behavior by disabling anonymous access for specific roles (moderator/speaker) with per-role `enabled: false`
Permissions for anonymous users are determined by the room's role permissions.

View File

@ -0,0 +1,40 @@
type: object
properties:
moderator:
type: object
properties:
permissions:
type: object
additionalProperties:
type: boolean
example:
canRecord: false
canKickParticipants: false
description: |
Partial permissions object for the moderator role.
Only specify the permissions you want to override from the default or previously configured moderator permissions.
Each property should be a permission name (e.g., 'canRecord', 'canShareScreen') with a boolean value.
For the complete list of all available permissions, see the full permissions schema:
[MeetPermissions](#/schemas/MeetPermissions)
speaker:
type: object
properties:
permissions:
type: object
additionalProperties:
type: boolean
example:
canShareScreen: false
description: |
Partial permissions object for the speaker role.
Only specify the permissions you want to override from the default or previously configured speaker permissions.
Each property should be a permission name (e.g., 'canRecord', 'canShareScreen') with a boolean value.
For the complete list of all available permissions, see the full permissions schema:
[MeetPermissions](#/schemas/MeetPermissions)
description: |
Configuration for role permissions.
Both moderator and speaker fields are optional. If not specified, current permissions will be maintained.
For permissions, only specify the ones you want to change.

View File

@ -6,14 +6,18 @@ properties:
description: >
The unique identifier of the room. This ID is generated by combining the room name with a unique identifier.
roomName:
type: [string, 'null']
maxLength: 50
type: string
example: 'room'
default: 'Room'
description: |
The display name of the room, used to identify it in a user-friendly way. This value does not need to be unique.
owner:
type: string
example: 'alice_smith'
description: |
The userId of the internal Meet user who owns this room.
Maximum length: 50 characters. If not provided, the default value "Room" will be used.
If the room was created by a registered Meet user, this will be their userId.
If the room was created via the REST API using an API key, this will be the userId of the global admin (root user).
creationDate:
type: number
example: 1620000000000
@ -31,10 +35,10 @@ properties:
If not set, the room remains active until manually deleted.
autoDeletionPolicy:
type: object
description: >
Policy for automatic deletion of the room and its contents. This includes
settings for how the room should be handled when certain conditions are met.
type: object
properties:
withMeeting:
type: string
@ -67,18 +71,68 @@ properties:
# description: >
# The maximum number of participants allowed in the room. If the number of participants exceeds
# this limit, new participants will not be allowed to join.
moderatorUrl:
type: string
example: 'http://localhost:6080/room/room-123?secret=123456'
roles:
description: >
The URL for moderator room members to access the room. The moderator role has special permissions to manage the
room resources and meeting participants.
speakerUrl:
type: string
example: 'http://localhost:6080/room/room-123?secret=654321'
Roles for the room. Defines the complete permissions for moderator and speaker roles.
type: object
properties:
moderator:
type: object
properties:
permissions:
$ref: meet-permissions.yaml
description: >
The complete set of permissions for the moderator role. These define what moderators can do in the meeting.
speaker:
type: object
properties:
permissions:
$ref: meet-permissions.yaml
description: >
The complete set of permissions for the speaker role. These define what speakers can do in the meeting.
anonymous:
description: >
The URL for speaker room members to access the room. The speaker role has permissions to publish audio and
video streams to the meeting.
Configuration for anonymous access to the room. Defines which roles have anonymous access enabled and their access URLs.
type: object
properties:
moderator:
type: object
properties:
enabled:
type: boolean
example: true
description: >
Whether anonymous access with moderator role is enabled.
accessUrl:
type: string
format: uri
example: 'http://localhost:6080/room/room-123?secret=123456'
description: >
The URL for anonymous moderators to access the room.
speaker:
type: object
properties:
enabled:
type: boolean
example: true
description: >
Whether anonymous access with speaker role is enabled.
accessUrl:
type: string
format: uri
example: 'http://localhost:6080/room/room-123?secret=654321'
description: >
The URL for anonymous speakers to access the room.
accessUrl:
type: string
format: uri
example: 'http://localhost:6080/room/room-123'
description: |
The general access URL for authenticated users to join the room.
This URL should be used by:
- The room owner (internal Meet user who created the room)
- Internal Meet users who are members of the room
status:
type: string
enum:

View File

@ -15,8 +15,16 @@ paths:
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}'
/rooms/{roomId}/config:
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1config'
/rooms/{roomId}/roles:
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1roles'
/rooms/{roomId}/anonymous:
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1anonymous'
/rooms/{roomId}/status:
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1status'
/rooms/{roomId}/members:
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1members'
/rooms/{roomId}/members/{memberId}:
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1members~1{memberId}'
/recordings:
$ref: './paths/recordings.yaml#/~1recordings'
/recordings/download:
@ -33,10 +41,12 @@ components:
schemas:
MeetRoom:
$ref: components/schemas/meet-room.yaml
MeetRoomOptions:
$ref: components/schemas/meet-room-options.yaml
MeetRoomConfig:
$ref: './components/schemas/meet-room-config.yaml#/MeetRoomConfig'
MeetRoomMember:
$ref: components/schemas/meet-room-member.yaml
MeetPermissions:
$ref: components/schemas/meet-permissions.yaml
MeetRecording:
$ref: components/schemas/meet-recording.yaml
MeetWebhookEvent:

View File

@ -16,10 +16,14 @@ paths:
$ref: './paths/internal/auth.yaml#/~1auth~1refresh'
/api-keys:
$ref: './paths/internal/api-keys.yaml#/~1auth~1api-keys'
/users/profile:
$ref: './paths/internal/users.yaml#/~1users~1profile'
/users:
$ref: './paths/internal/users.yaml#/~1users'
/users/me:
$ref: './paths/internal/users.yaml#/~1users~1me'
/users/change-password:
$ref: './paths/internal/users.yaml#/~1users~1change-password'
/users/{userId}:
$ref: './paths/internal/users.yaml#/~1users~1{userId}'
/config/webhooks:
$ref: './paths/internal/meet-global-config.yaml#/~1config~1webhooks'
/config/webhooks/test:
@ -30,10 +34,6 @@ paths:
$ref: './paths/internal/meet-global-config.yaml#/~1config~1rooms~1appearance'
/rooms/{roomId}/token:
$ref: './paths/internal/rooms.yaml#/~1rooms~1{roomId}~1token'
/rooms/{roomId}/roles:
$ref: './paths/internal/rooms.yaml#/~1rooms~1{roomId}~1roles'
/rooms/{roomId}/roles/{secret}:
$ref: './paths/internal/rooms.yaml#/~1rooms~1{roomId}~1roles~1{secret}'
/recordings:
$ref: './paths/internal/recordings.yaml#/~1recordings'
/recordings/{recordingId}/stop:
@ -59,17 +59,13 @@ components:
$ref: components/schemas/internal/webhooks-config.yaml
SecurityConfig:
$ref: components/schemas/internal/global-security-config.yaml
RoomsAppearanceConfig:
$ref: components/schemas/internal/rooms-appearance-config.yaml
MeetRoom:
$ref: components/schemas/meet-room.yaml
MeetRoomOptions:
$ref: components/schemas/meet-room-options.yaml
MeetRoomConfig:
$ref: components/schemas/meet-room-config.yaml#/MeetRoomConfig
MeetRoomMemberRoleAndPermissions:
$ref: components/schemas/internal/room-member-role-permissions.yaml
MeetAnalytics:
$ref: components/schemas/internal/meet-analytics.yaml
MeetRecording:
$ref: components/schemas/meet-recording.yaml
MeetAnalytics:
$ref: components/schemas/internal/meet-analytics.yaml
Error:
$ref: components/schemas/error.yaml

View File

@ -29,47 +29,3 @@
$ref: '../../components/responses/validation-error.yaml'
'500':
$ref: '../../components/responses/internal-server-error.yaml'
/rooms/{roomId}/roles:
get:
operationId: getRoomMemberRolesAndPermissions
summary: Get room member roles and permissions
description: >
Retrieves the roles and associated permissions that a user can have as a member of a specified OpenVidu Meet room.
tags:
- Internal API - Rooms
parameters:
- $ref: '../../components/parameters/room-id-path.yaml'
responses:
'200':
$ref: '../../components/responses/internal/success-get-room-member-roles.yaml'
'404':
$ref: '../../components/responses/error-room-not-found.yaml'
'422':
$ref: '../../components/responses/validation-error.yaml'
'500':
$ref: '../../components/responses/internal-server-error.yaml'
/rooms/{roomId}/roles/{secret}:
get:
operationId: getRoomRoleAndPermissions
summary: Get room role and permissions
description: |
Retrieves the role and associated permissions that a user will have as a member of a specified OpenVidu Meet room
when using the URL that contains the given secret value.
This endpoint is useful for checking the user's role and permissions before accessing the room.
tags:
- Internal API - Rooms
parameters:
- $ref: '../../components/parameters/room-id-path.yaml'
- $ref: '../../components/parameters/internal/secret.yaml'
responses:
'200':
$ref: '../../components/responses/internal/success-get-room-member-role.yaml'
'400':
$ref: '../../components/responses/internal/error-invalid-room-secret.yaml'
'404':
$ref: '../../components/responses/error-room-not-found.yaml'
'422':
$ref: '../../components/responses/validation-error.yaml'
'500':
$ref: '../../components/responses/internal-server-error.yaml'

View File

@ -1,16 +1,67 @@
/users/profile:
/users:
post:
operationId: createUser
summary: Create a new user
description: |
Creates a new user account in the system.
The userId must be unique. If a user with the specified userId already exists,
the request will fail with a conflict error.
tags:
- Internal API - Users
security:
- accessTokenHeader: []
requestBody:
$ref: '../../components/requestBodies/internal/create-user-request.yaml'
responses:
'201':
$ref: '../../components/responses/internal/success-create-user.yaml'
'401':
$ref: '../../components/responses/unauthorized-error.yaml'
'403':
$ref: '../../components/responses/forbidden-error.yaml'
'409':
$ref: '../../components/responses/internal/error-userId-already-exists.yaml'
'422':
$ref: '../../components/responses/validation-error.yaml'
'500':
$ref: '../../components/responses/internal-server-error.yaml'
get:
operationId: getUserProfile
summary: Get user profile
operationId: getUsers
summary: Get all users
description: >
Retrieves the profile information of the authenticated user.
Retrieves a paginated list of all users in the system.
tags:
- Internal API - Users
security:
- accessTokenHeader: []
parameters:
- $ref: '../../components/parameters/max-items.yaml'
- $ref: '../../components/parameters/next-page-token.yaml'
responses:
'200':
$ref: '../../components/responses/internal/success-get-users.yaml'
'401':
$ref: '../../components/responses/unauthorized-error.yaml'
'403':
$ref: '../../components/responses/forbidden-error.yaml'
'422':
$ref: '../../components/responses/validation-error.yaml'
'500':
$ref: '../../components/responses/internal-server-error.yaml'
/users/me:
get:
operationId: getMe
summary: Get authenticated user
description: >
Retrieves the details of the authenticated user.
tags:
- Internal API - Users
security:
- accessTokenHeader: []
responses:
'200':
$ref: '../../components/responses/internal/success-get-profile.yaml'
$ref: '../../components/responses/internal/success-get-me.yaml'
'401':
$ref: '../../components/responses/unauthorized-error.yaml'
/users/change-password:
@ -36,3 +87,55 @@
$ref: '../../components/responses/validation-error.yaml'
'500':
$ref: '../../components/responses/internal-server-error.yaml'
/users/{userId}:
get:
operationId: getUser
summary: Get a user
description: >
Retrieves the details of a specific user by their userId.
tags:
- Internal API - Users
security:
- accessTokenHeader: []
parameters:
- $ref: '../../components/parameters/internal/userId-path.yaml'
responses:
'200':
$ref: '../../components/responses/internal/success-get-user.yaml'
'401':
$ref: '../../components/responses/unauthorized-error.yaml'
'403':
$ref: '../../components/responses/forbidden-error.yaml'
'404':
$ref: '../../components/responses/internal/error-user-not-found.yaml'
'422':
$ref: '../../components/responses/validation-error.yaml'
'500':
$ref: '../../components/responses/internal-server-error.yaml'
delete:
operationId: deleteUser
summary: Delete a user
description: |
Deletes a user from the system.
This operation will remove the user account and may affect rooms and resources
associated with this user.
tags:
- Internal API - Users
security:
- accessTokenHeader: []
parameters:
- $ref: '../../components/parameters/internal/userId-path.yaml'
responses:
'200':
$ref: '../../components/responses/internal/success-delete-user.yaml'
'401':
$ref: '../../components/responses/unauthorized-error.yaml'
'403':
$ref: '../../components/responses/forbidden-error.yaml'
'404':
$ref: '../../components/responses/internal/error-user-not-found.yaml'
'422':
$ref: '../../components/responses/validation-error.yaml'
'500':
$ref: '../../components/responses/internal-server-error.yaml'

View File

@ -240,3 +240,209 @@
$ref: '../components/responses/validation-error.yaml'
'500':
$ref: '../components/responses/internal-server-error.yaml'
/rooms/{roomId}/roles:
put:
operationId: updateRoomRoles
summary: Update roles permissions for a room
description: |
Updates the permissions by role for the specified room.
You can customize permissions for moderator and/or speaker roles.
Only specify the permissions you want to change from the current configuration.
tags:
- OpenVidu Meet - Rooms
security:
- apiKeyHeader: []
- accessTokenHeader: []
parameters:
- $ref: '../components/parameters/room-id-path.yaml'
requestBody:
$ref: '../components/requestBodies/update-room-roles-request.yaml'
responses:
'200':
$ref: '../components/responses/success-update-room-roles.yaml'
'401':
$ref: '../components/responses/unauthorized-error.yaml'
'403':
$ref: '../components/responses/forbidden-error.yaml'
'404':
$ref: '../components/responses/error-room-not-found.yaml'
'422':
$ref: '../components/responses/validation-error.yaml'
'500':
$ref: '../components/responses/internal-server-error.yaml'
/rooms/{roomId}/anonymous:
put:
operationId: updateRoomAnonymous
summary: Update anonymous access config for a room
description: |
Updates the anonymous access configuration for the specified room.
This allows you to enable or disable anonymous access for specific roles (moderator/speaker).
tags:
- OpenVidu Meet - Rooms
security:
- apiKeyHeader: []
- accessTokenHeader: []
parameters:
- $ref: '../components/parameters/room-id-path.yaml'
requestBody:
$ref: '../components/requestBodies/update-room-anonymous-request.yaml'
responses:
'200':
$ref: '../components/responses/success-update-room-anonymous.yaml'
'401':
$ref: '../components/responses/unauthorized-error.yaml'
'403':
$ref: '../components/responses/forbidden-error.yaml'
'404':
$ref: '../components/responses/error-room-not-found.yaml'
'422':
$ref: '../components/responses/validation-error.yaml'
'500':
$ref: '../components/responses/internal-server-error.yaml'
/rooms/{roomId}/members:
post:
operationId: addRoomMember
summary: Add a member to a room
description: |
Adds a new member to the specified room with custom permissions.
Each member receives a unique access URL that is different from the moderator and speaker URLs.
The member's permissions are based on a base role (moderator or speaker) with optional overrides.
This allows fine-grained control over what each specific participant can do in the meeting.
tags:
- OpenVidu Meet - Rooms
security:
- apiKeyHeader: []
parameters:
- $ref: '../components/parameters/room-id-path.yaml'
requestBody:
$ref: '../components/requestBodies/add-room-member-request.yaml'
responses:
'201':
$ref: '../components/responses/success-add-room-member.yaml'
'401':
$ref: '../components/responses/unauthorized-error.yaml'
'403':
$ref: '../components/responses/forbidden-error.yaml'
'404':
$ref: '../components/responses/error-room-not-found.yaml'
'422':
$ref: '../components/responses/validation-error.yaml'
'500':
$ref: '../components/responses/internal-server-error.yaml'
get:
operationId: getRoomMembers
summary: Get all members of a room
description: >
Retrieves a paginated list of all members in the specified room.
Each member has custom access URLs and permissions that can differ from the default moderator and speaker roles.
tags:
- OpenVidu Meet - Rooms
security:
- apiKeyHeader: []
parameters:
- $ref: '../components/parameters/room-id-path.yaml'
- $ref: '../components/parameters/room-member-fields.yaml'
- $ref: '../components/parameters/max-items.yaml'
- $ref: '../components/parameters/next-page-token.yaml'
responses:
'200':
$ref: '../components/responses/success-get-room-members.yaml'
'401':
$ref: '../components/responses/unauthorized-error.yaml'
'403':
$ref: '../components/responses/forbidden-error.yaml'
'404':
$ref: '../components/responses/error-room-not-found.yaml'
'422':
$ref: '../components/responses/validation-error.yaml'
'500':
$ref: '../components/responses/internal-server-error.yaml'
/rooms/{roomId}/members/{memberId}:
get:
operationId: getRoomMember
summary: Get a room member
description: >
Retrieves the details of a specific room member by their member ID.
tags:
- OpenVidu Meet - Rooms
security:
- apiKeyHeader: []
- roomMemberTokenHeader: []
parameters:
- $ref: '../components/parameters/room-id-path.yaml'
- $ref: '../components/parameters/member-id-path.yaml'
responses:
'200':
$ref: '../components/responses/success-get-room-member.yaml'
'401':
$ref: '../components/responses/unauthorized-error.yaml'
'403':
$ref: '../components/responses/forbidden-error.yaml'
'404':
$ref: '../components/responses/error-room-member-not-found.yaml'
'422':
$ref: '../components/responses/validation-error.yaml'
'500':
$ref: '../components/responses/internal-server-error.yaml'
put:
operationId: updateRoomMember
summary: Update a room member
description: |
Updates the permissions and/or base role of a specific room member.
You can modify the member's base role and custom permission overrides.
The effective permissions will be recalculated based on the new base role and custom permissions.
tags:
- OpenVidu Meet - Rooms
security:
- apiKeyHeader: []
parameters:
- $ref: '../components/parameters/room-id-path.yaml'
- $ref: '../components/parameters/member-id-path.yaml'
requestBody:
$ref: '../components/requestBodies/update-room-member-request.yaml'
responses:
'200':
$ref: '../components/responses/success-update-room-member.yaml'
'401':
$ref: '../components/responses/unauthorized-error.yaml'
'403':
$ref: '../components/responses/forbidden-error.yaml'
'404':
$ref: '../components/responses/error-room-member-not-found.yaml'
'422':
$ref: '../components/responses/validation-error.yaml'
'500':
$ref: '../components/responses/internal-server-error.yaml'
delete:
operationId: deleteRoomMember
summary: Delete a room member
description: |
Removes a member from the specified room, revoking their access.
If the member is currently in an active meeting, they will be immediately kicked out.
The member's access URL will no longer be valid after deletion.
tags:
- OpenVidu Meet - Rooms
security:
- apiKeyHeader: []
parameters:
- $ref: '../components/parameters/room-id-path.yaml'
- $ref: '../components/parameters/member-id-path.yaml'
responses:
'200':
$ref: '../components/responses/success-delete-room-member.yaml'
'401':
$ref: '../components/responses/unauthorized-error.yaml'
'403':
$ref: '../components/responses/forbidden-error.yaml'
'404':
$ref: '../components/responses/error-room-member-not-found.yaml'
'422':
$ref: '../components/responses/validation-error.yaml'
'500':
$ref: '../components/responses/internal-server-error.yaml'