Refactor OpenAPI documentation for clarity and consistency

This commit is contained in:
juancarmore 2025-07-21 18:34:50 +02:00
parent 83b468b8cb
commit 4ca7f82d15
63 changed files with 212 additions and 213 deletions

View File

@ -1,4 +1,5 @@
description: Indicates that the server supports range requests for content retrieval description: >
Specifies that the server allows clients to request specific ranges of content, enabling partial retrieval of resources.
schema: schema:
type: string type: string
example: bytes example: bytes

View File

@ -3,4 +3,4 @@ description: >
This cookie is used to authenticate the user in subsequent requests. This cookie is used to authenticate the user in subsequent requests.
schema: schema:
type: string type: string
example: 'OvMeetAccessToken=token_123456; Path=/; HttpOnly; SameSite=Strict' example: 'OvMeetAccessToken=token_123456; Path=/; HttpOnly; SameSite=Strict'

View File

@ -3,4 +3,4 @@ description: >
This cookie is used to authenticate the participant in the room. This cookie is used to authenticate the participant in the room.
schema: schema:
type: string type: string
example: 'OvMeetParticipantToken=token_123456; Path=/; HttpOnly; SameSite=Strict' example: 'OvMeetParticipantToken=token_123456; Path=/; HttpOnly; SameSite=Strict'

View File

@ -3,4 +3,4 @@ description: >
This cookie is used to access the recordings in a room. This cookie is used to access the recordings in a room.
schema: schema:
type: string type: string
example: 'OvMeetRecordingToken=token_123456; Path=/; HttpOnly; SameSite=Strict' example: 'OvMeetRecordingToken=token_123456; Path=/; HttpOnly; SameSite=Strict'

View File

@ -3,4 +3,4 @@ description: >
This cookie is used to refresh the access token when it expires. This cookie is used to refresh the access token when it expires.
schema: schema:
type: string type: string
example: 'OvMeetRefreshToken=token_123456; Path=/meet/internal-api/v1/auth; HttpOnly; SameSite=Strict' example: 'OvMeetRefreshToken=token_123456; Path=/meet/internal-api/v1/auth; HttpOnly; SameSite=Strict'

View File

@ -5,5 +5,4 @@ description: >
This will immediately disconnect all participants and remove the room. This will immediately disconnect all participants and remove the room.
required: false required: false
schema: schema:
type: string type: boolean
example: 'true'

View File

@ -4,4 +4,4 @@ required: true
description: The name of the participant. description: The name of the participant.
schema: schema:
type: string type: string
example: 'Alice' example: 'Alice'

View File

@ -1,7 +1,7 @@
name: maxItems name: maxItems
in: query in: query
required: false required: false
description: The number of rooms per page (default is 10). Maximum is 100. description: Specifies the maximum number of items to return per page. The default value is 10, and the maximum allowed is 100.
schema: schema:
type: integer type: integer
default: 10 default: 10

View File

@ -1,6 +1,6 @@
name: nextPageToken name: nextPageToken
in: query in: query
required: false required: false
description: The token to retrieve the next page of elements. description: A token used for pagination to fetch the next set of items in a multi-page response.
schema: schema:
type: string type: string

View File

@ -1,8 +1,8 @@
name: privateAcess name: privateAcess
in: query in: query
description: > description: >
Indicates whether the retrieved recording URL should be configured for private access, i.e., the URL will be accessible only to authenticated users. Specifies if the recording URL should be restricted to private access,
meaning only authenticated users can view or download the recording.
required: false required: false
schema: schema:
type: string type: boolean
example: 'true'

View File

@ -1,9 +1,9 @@
name: fields name: fields
in: query in: query
description: > description: >
The fields to retrieve from the recording. Specifies which fields to include in the response for the recording resource.
Comma-separated list of fields to include in the response. Provide a comma-separated list of field names.
required: false required: false
schema: schema:
type: string type: string
example: 'recordingId,roomId' example: 'recordingId,roomId'

View File

@ -4,4 +4,4 @@ required: true
description: The unique identifier of the recording. description: The unique identifier of the recording.
schema: schema:
type: string type: string
example: 'room-123--EG_XYZ--XX445' example: 'room-123--EG_XYZ--XX445'

View File

@ -3,9 +3,8 @@ in: query
required: true required: true
description: > description: >
A comma-separated list of recording IDs. A comma-separated list of recording IDs.
<br> Each recording ID must follow the format: `{roomId}--{egressId}--{uid}`.
Each recording ID should be in the format 'roomId--egressId--uid'
schema: schema:
type: string type: string
example: 'room-123--EG_XYZ--XX445,room-123--EG_ZYX--XX446' example: 'room-123--EG_XYZ--XX445,room-123--EG_ZYX--XX446'

View File

@ -1,11 +1,14 @@
name: Range name: Range
in: header in: header
required: false required: false
description: > description: |
This endpoint accepts a `Range` header to specify the byte range of the recording file to be streamed. This endpoint supports the `Range` header to request a specific byte range of the recording file.
The format of the `Range` header should be `bytes=start-end`, where `start` is required and `end` is optional. Use the format `bytes=start-end`, where `start` is the starting byte (required) and `end` is the ending byte (optional).
For example,
- `bytes=0-1023` to request the first 1024 bytes of the file. Examples:
- `bytes=1000-` to request from byte 1000 to the end of the file. - `bytes=0-1023`: Requests bytes 0 through 1023 (first 1024 bytes).
- `bytes=1000-`: Requests from byte 1000 to the end of the file.
This allows efficient partial downloads and resume capabilities for large files.
schema: schema:
type: string type: string

View File

@ -1,6 +1,7 @@
name: secret name: secret
in: query in: query
required: false required: false
description: The secret value used to access the recording when sharing a recording link. description: >
Optional secret value that must be provided to access the recording via a shared link, enhancing security for shared recordings.
schema: schema:
type: string type: string

View File

@ -0,0 +1,19 @@
name: status
in: query
required: false
description: |
Filter recordings by their status.
You can provide multiple statuses as a comma-separated list (e.g., `status=ACTIVE,FAILED`).
> ⚠️ **Note:** Using this filter may impact performance for large datasets.
schema:
type: string
enum:
- STARTING
- ACTIVE
- ENDING
- COMPLETE
- FAILED
- ABORTED
- LIMIT_REACHED

View File

@ -1,9 +1,9 @@
name: fields name: fields
in: query in: query
description: > description: >
The fields to retrieve from the room. Specifies which fields to include in the response for the room resource.
Comma-separated list of fields to include in the response. Provide a comma-separated list of field names.
required: false required: false
schema: schema:
type: string type: string
example: 'roomId,moderatorRoomUrl' example: 'roomId,moderatorRoomUrl'

View File

@ -4,4 +4,4 @@ required: true
description: The unique identifier of the room. description: The unique identifier of the room.
schema: schema:
type: string type: string
example: 'room-123' example: 'room-123'

View File

@ -1,7 +1,9 @@
name: roomId name: roomId
in: query in: query
required: false required: false
description: The unique identifier of the room. Specify the room ID to filter recordings by their associated room. description: >
The unique identifier for the room.
Use this parameter to filter recordings and retrieve only those associated with the specified room ID.
schema: schema:
type: string type: string
example: 'room-123' example: 'room-123'

View File

@ -1,7 +1,9 @@
name: roomIds name: roomIds
in: query in: query
required: true required: true
description: A comma-separated list of room IDs to delete. description: >
Comma-separated list of room IDs to delete.
Each ID should correspond to an existing room.
schema: schema:
type: string type: string
example: 'room-123,room-456' example: 'room-123,room-456'

View File

@ -2,7 +2,6 @@ name: x-signature
in: header in: header
description: > description: >
HMAC-SHA256 signature of the request body, created using your webhook secret. HMAC-SHA256 signature of the request body, created using your webhook secret.
Use this to verify the webhook came from OpenVidu Meet and wasn't tampered with. Use this to verify the webhook came from OpenVidu Meet and wasn't tampered with.
required: true required: true
schema: schema:

View File

@ -2,9 +2,7 @@ name: x-timestamp
in: header in: header
description: > description: >
Unix timestamp (in seconds) when the webhook was sent. Unix timestamp (in seconds) when the webhook was sent.
Can be used to validate webhook age and prevent replay attacks. Can be used to validate webhook age and prevent replay attacks.
required: true required: true
schema: schema:
type: string type: string
example: '1697030400000'

View File

@ -1,4 +1,4 @@
description: Room creation details description: Room creation options
required: true required: true
content: content:
application/json: application/json:

View File

@ -1,4 +1,4 @@
description: Recording details description: Room to record
required: true required: true
content: content:
application/json: application/json:

View File

@ -1,4 +1,4 @@
description: Room update details description: New room preferences
content: content:
application/json: application/json:
schema: schema:

View File

@ -1,4 +1,4 @@
description: Security preferences description: New security preferences
required: true required: true
content: content:
application/json: application/json:

View File

@ -1,4 +1,4 @@
description: Webhooks preferences description: New webhooks preferences
required: true required: true
content: content:
application/json: application/json:

View File

@ -1,4 +1,4 @@
description: Conflict — The recording is in `STARTING` state or already stopped description: Conflict — The recording is starting or already stopped
content: content:
application/json: application/json:
schema: schema:

View File

@ -1,4 +1,4 @@
description: Successfully disconnect the participant description: Successfully disconnected the participant
content: content:
application/json: application/json:
schema: schema:

View File

@ -15,4 +15,4 @@ headers:
schema: schema:
type: string type: string
format: uri format: uri
example: https://your-api.com/meet/internal-api/v1/recordings/room-123--EG_XYZ--XX445 example: https://your-api.com/internal-api/v1/recordings/room-123--EG_XYZ--XX445

View File

@ -4,7 +4,7 @@ headers:
description: The URL to retrieve the recording details description: The URL to retrieve the recording details
schema: schema:
type: string type: string
example: 'https://openvidu.example.com/meet/api/v1/recordings/room-123--EG_XYZ--XX445' example: 'https://openvidu.example.com/api/v1/recordings/room-123--EG_XYZ--XX445'
content: content:
application/json: application/json:
schema: schema:

View File

@ -2,7 +2,7 @@ description: Successfully logged in
headers: headers:
Set-Cookie: Set-Cookie:
$ref: '../../headers/set-cookie-access-token.yaml' $ref: '../../headers/set-cookie-access-token.yaml'
Set-Cookie-Refresh: Set-Cookie*:
$ref: '../../headers/set-cookie-refresh-token.yaml' $ref: '../../headers/set-cookie-refresh-token.yaml'
content: content:
application/json: application/json:

View File

@ -1,13 +1,11 @@
description: Successfully logged out description: Successfully logged out
headers: headers:
Set-Cookie: Set-Cookie:
description: >
Clears the access and refresh token cookie.
schema: schema:
type: string type: string
example: 'OvMeetAccessToken=; Path=/; HttpOnly; SameSite=Strict' example: 'OvMeetAccessToken=; Path=/; HttpOnly; SameSite=Strict'
Set-Cookie-Refresh:
schema:
type: string
example: 'OvMeetRefreshToken=; Path=/meet/internal-api/v1/auth; HttpOnly; SameSite=Strict'
content: content:
application/json: application/json:
schema: schema:

View File

@ -1,4 +1,4 @@
description: PRO Feature Error description: PRO feature
content: content:
application/json: application/json:
schema: schema:

View File

@ -36,14 +36,14 @@ content:
- recordingId: 'room-123--EG_XYZ--XX447' - recordingId: 'room-123--EG_XYZ--XX447'
error: 'Recording not found' error: 'Recording not found'
- recordingId: 'room-123--EG_XYZ--XX448' - recordingId: 'room-123--EG_XYZ--XX448'
error: 'Access denied for deletion' error: 'Recording in progress'
no_deletion_performed: no_deletion_performed:
summary: No recordings were deleted summary: No recordings were deleted
value: value:
deleted: [] deleted: []
notDeleted: notDeleted:
- recordingId: 'room-123--EG_XYZ--XX445' - recordingId: 'room-123--EG_XYZ--XX447'
error: 'Recording not found'
- recordingId: 'room-123--EG_ZYX--XX446'
error: 'Recording not found' error: 'Recording not found'
- recordingId: 'room-123--EG_ZYX--XX448'
error: 'Recording in progress'

View File

@ -15,7 +15,9 @@ content:
type: array type: array
items: items:
type: string type: string
description: List of rooms that were marked for deletion but not actually deleted. The rooms will be deleted when all participants leave the room. description: >-
List of rooms that were marked for deletion but not actually deleted.
These rooms will be deleted when all participants leave.
example: example:
deleted: deleted:
- 'room-123' - 'room-123'

View File

@ -9,4 +9,4 @@ headers:
schema: schema:
type: string type: string
format: uri format: uri
example: https://your-api.com/meet/api/v1/rooms/room-id-123 example: https://your-api.com/api/v1/rooms/room-123

View File

@ -1,4 +1,4 @@
description: Successfully retrieved the recording URL. description: Successfully retrieved the recording URL
content: content:
application/json: application/json:
schema: schema:
@ -7,5 +7,5 @@ content:
url: url:
type: string type: string
format: uri format: uri
description: URL to access the recording media. description: URL to access the recording.
example: https://example.com/meet/api/v1/recordings/room-123--EG_XYZ--XX445/media?secret=abc123 example: https://example.com/recording/room-123--EG_XYZ--XX445?secret=abc123

View File

@ -1,4 +1,4 @@
description: Successfully retrieved the recording. description: Successfully retrieved the recording
content: content:
application/json: application/json:
schema: schema:

View File

@ -18,8 +18,8 @@ content:
enabled: false enabled: false
virtualBackgroundPreferences: virtualBackgroundPreferences:
enabled: true enabled: true
moderatorURL: 'http://localhost:6080/room/room-123/?secret=123456' moderatorURL: 'http://localhost:6080/room/room-123?secret=123456'
publisherURL: 'http://localhost:6080/room/room-123/?secret=654321' publisherURL: 'http://localhost:6080/room/room-123?secret=654321'
fields=roomId: fields=roomId:
summary: Response with only the roomId summary: Response with only the roomId
@ -44,5 +44,5 @@ content:
fields=moderatorURL,publisherURL: fields=moderatorURL,publisherURL:
summary: Response containing only moderator and publisher URLs summary: Response containing only moderator and publisher URLs
value: value:
moderatorURL: 'http://localhost:6080/room/room-123/?secret=123456' moderatorURL: 'http://localhost:6080/room/room-123?secret=123456'
publisherURL: 'http://localhost:6080/room/room-123/?secret=654321' publisherURL: 'http://localhost:6080/room/room-123?secret=654321'

View File

@ -27,8 +27,8 @@ content:
enabled: false enabled: false
virtualBackgroundPreferences: virtualBackgroundPreferences:
enabled: true enabled: true
moderatorURL: 'http://localhost:6080/room/room-123/?secret=123456' moderatorURL: 'http://localhost:6080/room/room-123?secret=123456'
publisherURL: 'http://localhost:6080/room/room-123/?secret=654321' publisherURL: 'http://localhost:6080/room/room-123?secret=654321'
- roomId: 'room-456' - roomId: 'room-456'
roomIdPrefix: 'room' roomIdPrefix: 'room'
creationDate: 1620001000000 creationDate: 1620001000000
@ -40,8 +40,8 @@ content:
enabled: true enabled: true
virtualBackgroundPreferences: virtualBackgroundPreferences:
enabled: false enabled: false
moderatorURL: 'http://localhost:6080/room/room-456/?secret=789012' moderatorURL: 'http://localhost:6080/room/room-456?secret=789012'
publisherURL: 'http://localhost:6080/room/room-456/?secret=210987' publisherURL: 'http://localhost:6080/room/room-456?secret=210987'
pagination: pagination:
isTruncated: false isTruncated: false
maxItems: 10 maxItems: 10
@ -90,10 +90,10 @@ content:
summary: Response containing only moderator and publisher URLs summary: Response containing only moderator and publisher URLs
value: value:
rooms: rooms:
- moderatorURL: 'http://localhost:6080/room/room-123/?secret=123456' - moderatorURL: 'http://localhost:6080/room/room-123?secret=123456'
publisherURL: 'http://localhost:6080/room/room-123/?secret=654321' publisherURL: 'http://localhost:6080/room/room-123?secret=654321'
- moderatorURL: 'http://localhost:6080/room/room-456/?secret=789012' - moderatorURL: 'http://localhost:6080/room/room-456?secret=789012'
publisherURL: 'http://localhost:6080/room/room-456/?secret=210987' publisherURL: 'http://localhost:6080/room/room-456?secret=210987'
pagination: pagination:
isTruncated: false isTruncated: false
maxItems: 10 maxItems: 10

View File

@ -1,5 +1,5 @@
description: > description: >
All specified rooms were marked error for deletion (due to active participants) All specified rooms were marked for deletion (due to active participants)
and will be removed once all participants leave. and will be removed once all participants leave.
content: content:
application/json: application/json:

View File

@ -1,4 +1,4 @@
description: Unprocessable Entity — Invalid request body description: Unprocessable Entity — Invalid request
content: content:
application/json: application/json:
schema: schema:

View File

@ -1,7 +1,7 @@
description: > description: |
Webhook received and processed successfully. Webhook received and processed successfully.
Important: Webhook endpoints must return HTTP 200 OK promptly to acknowledge receipt. > **Important:** Webhook endpoints must return HTTP 200 OK promptly to acknowledge receipt.
Any processing should be done asynchronously after responding. > Any processing should be done asynchronously after responding.
>
Non-200 responses or timeouts will trigger retries according to the webhook delivery policy. > Non-200 responses or timeouts will trigger retries according to the webhook delivery policy.

View File

@ -23,8 +23,7 @@ properties:
room: room:
type: string type: string
description: > description: >
The ID of the room associated with the participant. Unique identifier of the room to which the participant is assigned.
example: roomId
canPublish: canPublish:
type: boolean type: boolean
description: > description: >
@ -61,5 +60,5 @@ properties:
canChangeVirtualBackground: canChangeVirtualBackground:
type: boolean type: boolean
description: > description: >
Indicates whether the participant can change virtual background in the room. Indicates whether the participant can change their own virtual background.
example: true example: true

View File

@ -16,7 +16,9 @@ AuthenticationPreferences:
- single-user - single-user
default: single-user default: single-user
example: single-user example: single-user
description: The authentication method to use. description: |
Specifies the authentication method used to access the application.
- `single-user`: Only one user account exists, which has administrative privileges and is used for all access.
authModeToAccessRoom: authModeToAccessRoom:
type: string type: string
enum: enum:
@ -25,4 +27,8 @@ AuthenticationPreferences:
- all_users - all_users
default: none default: none
example: none example: none
description: The authentication mode to access a room. description: |
Specifies who is required to authenticate before accessing a room:
- `none`: No authentication required.
- `moderators_only`: Only moderators need to authenticate.
- `all_users`: All users must authenticate.

View File

@ -8,5 +8,6 @@ properties:
type: array type: array
items: items:
type: string type: string
enum: ['admin', 'user']
example: ['admin', 'user'] example: ['admin', 'user']
description: A list of roles assigned to the authenticated user. description: A list of roles assigned to the authenticated user.

View File

@ -6,5 +6,6 @@ properties:
description: Indicates whether webhooks are enabled or disabled. description: Indicates whether webhooks are enabled or disabled.
url: url:
type: string type: string
format: uri
example: 'https://example.com/webhook' example: 'https://example.com/webhook'
description: The URL to which webhooks will be sent. This is only mandatory if webhooks are enabled. description: The URL to which webhooks will be sent. This is only mandatory if webhooks are enabled.

View File

@ -3,13 +3,13 @@ properties:
isTruncated: isTruncated:
type: boolean type: boolean
description: > description: >
Indicates if there are more elements to retrieve. Indicates if there are more items to retrieve.
If true, use the `nextPageToken` to fetch the next set of elements. If true, use the `nextPageToken` to fetch the next set of items.
nextPageToken: nextPageToken:
type: [string, 'null'] type: [string, 'null']
description: The token to retrieve the next page of elements. description: The token to retrieve the next page of items.
maxItems: maxItems:
type: integer type: integer
description: > description: >
Maximum number of elements returned in a single response page. Maximum number of items returned in a single response page.
Corresponds to the `maxItems` query parameter in the request. Corresponds to the `maxItems` query parameter in the request.

View File

@ -3,15 +3,14 @@ properties:
autoDeletionDate: autoDeletionDate:
type: [number, 'null'] type: [number, 'null']
example: 1900000000000 example: 1900000000000
description: > description: |
The date and time when the room will be deleted (must be one hour in the future or more) represented in milliseconds since the Unix epoch. The timestamp (in milliseconds since the Unix epoch) specifying when the room will be automatically deleted.
This must be at least one hour in the future.
After this date, the room will be automatically deleted and no new participants can join. After this time, the room is closed to new participants and scheduled for deletion.
It will be removed after the last participant leaves (graceful deletion).
If this value is set and the date has already passed, the room is marked for deletion but will only be removed after the last If not set, the room remains active until manually deleted.
participant leaves ("graceful deletion").
If this value is not defined, the room will exist indefinitely until manually deleted.
roomIdPrefix: roomIdPrefix:
type: string type: string
example: 'room' example: 'room'

View File

@ -18,15 +18,14 @@ properties:
autoDeletionDate: autoDeletionDate:
type: [number, 'null'] type: [number, 'null']
example: 1900000000000 example: 1900000000000
description: > description: |
The date and time when the room will be deleted (must be one hour in the future or more) represented in milliseconds since the Unix epoch. The timestamp (in milliseconds since the Unix epoch) specifying when the room will be automatically deleted.
This must be at least one hour in the future.
After this date, the room will be automatically deleted and no new participants can join. After this time, the room is closed to new participants and scheduled for deletion.
It will be removed after the last participant leaves (graceful deletion).
If this value is set and the date has already passed, the room is marked for deletion but will only be removed after the last If not set, the room remains active until manually deleted.
participant leaves ("graceful deletion").
If this value is not defined, the room will exist indefinitely until manually deleted.
preferences: preferences:
$ref: meet-room-preferences.yaml#/MeetRoomPreferences $ref: meet-room-preferences.yaml#/MeetRoomPreferences
description: The preferences for the room. description: The preferences for the room.
@ -38,13 +37,13 @@ properties:
# this limit, new participants will not be allowed to join. # this limit, new participants will not be allowed to join.
moderatorURL: moderatorURL:
type: string type: string
example: 'http://localhost:6080/room/room-123/?secret=123456' example: 'http://localhost:6080/room/room-123?secret=123456'
description: > description: >
The URL for the moderator to join the room. The moderator has special permissions to manage the The URL for the moderator participants to join the room. The moderator role has special permissions to manage the
room and participants. room and participants.
publisherURL: publisherURL:
type: string type: string
example: 'http://localhost:6080/room/room-123/?secret=654321' example: 'http://localhost:6080/room/room-123?secret=654321'
description: > description: >
The URL for the publisher to join the room. The publisher has permissions to publish audio and The URL for the publisher participants to join the room. The publisher role has permissions to publish audio and
video streams to the room. video streams to the room.

View File

@ -1,17 +1,17 @@
type: object type: object
required: required:
- creationDate - creationDate
- event - event
- data - data
properties: properties:
creationDate: creationDate:
type: number type: number
description: The date when the event was created (milliseconds since the Unix epoch). description: The date when the event was created (milliseconds since the Unix epoch).
example: 1620000000000 example: 1620000000000
event: event:
type: string type: string
description: Event type identifier. description: Event type identifier.
example: webhookEvent example: webhookEvent
data: data:
type: object type: object
description: The data associated with the event. description: The data associated with the event.

View File

@ -15,7 +15,7 @@ refreshTokenCookie:
name: OvMeetRefreshToken name: OvMeetRefreshToken
in: cookie in: cookie
description: > description: >
The JWT token to refresh the access token when it expires. This token is used to obtain a new access token. The JWT token to refresh the access token when it expires..
participantTokenCookie: participantTokenCookie:
type: apiKey type: apiKey
name: OvMeetParticipantToken name: OvMeetParticipantToken

View File

@ -26,8 +26,6 @@ paths:
components: components:
securitySchemes: securitySchemes:
$ref: './components/security.yaml' $ref: './components/security.yaml'
# responses:
# $ref: './components/responses.yaml'
schemas: schemas:
MeetRoom: MeetRoom:
$ref: components/schemas/meet-room.yaml $ref: components/schemas/meet-room.yaml

View File

@ -27,28 +27,11 @@
- Internal API - Authentication - Internal API - Authentication
responses: responses:
'200': '200':
description: Successfully logged out $ref: '../../components/responses/internal/success-user-logout.yaml'
headers:
Set-Cookie:
schema:
type: string
example: 'OvMeetAccessToken=; Path=/; HttpOnly; SameSite=Strict'
Set-Cookie-Refresh:
schema:
type: string
example: 'OvMeetRefreshToken=; Path=/meet/internal-api/v1/auth; HttpOnly; SameSite=Strict'
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: 'Logout successful'
/auth/refresh: /auth/refresh:
post: post:
operationId: refreshAccessToken operationId: refreshAccessToken
summary: Refresh the access token summary: Refresh access token
description: > description: >
Refreshes the access token using the refresh token. Refreshes the access token using the refresh token.
The new access token is returned in a cookie. The new access token is returned in a cookie.
@ -68,10 +51,11 @@
post: post:
operationId: createApiKey operationId: createApiKey
summary: Create a new API key summary: Create a new API key
description: > description: |
Creates a new API key. Only one API key can be created in the system. Creates a new API key, returning it in the response.
If an API key already exists, it will be replaced with the new one.
The API key is returned in the response. > **Note:** Only one API key can be created in the system.
> If an API key already exists, it will be replaced with the new one.
tags: tags:
- Internal API - Authentication - Internal API - Authentication
security: security:
@ -84,8 +68,11 @@
get: get:
operationId: getApiKeys operationId: getApiKeys
summary: Get API keys summary: Get API keys
description: > description: |
Retrieves the existing API keys. Retrieves the existing API keys.
> **Note:** Only one API key can exist in the system.
> If no API key exists, an empty array will be returned.
tags: tags:
- Internal API - Authentication - Internal API - Authentication
security: security:
@ -106,9 +93,6 @@
- accessTokenCookie: [] - accessTokenCookie: []
responses: responses:
'204': '204':
description: Successfully deleted the API key description: Successfully deleted the API key. No content is returned.
'500': '500':
$ref: '../../components/responses/internal-server-error.yaml' $ref: '../../components/responses/internal-server-error.yaml'

View File

@ -45,7 +45,7 @@
operationId: testWebhookUrl operationId: testWebhookUrl
summary: Test webhook URL summary: Test webhook URL
description: > description: >
Tests the provided webhook URL to ensure it is reachable and valid. Tests the provided webhook URL to ensure it is valid and reachable.
tags: tags:
- Internal API - Global Preferences - Internal API - Global Preferences
requestBody: requestBody:

View File

@ -2,8 +2,8 @@
delete: delete:
operationId: endMeeting operationId: endMeeting
summary: End a meeting summary: End a meeting
description: > description: |
Ends a meeting in an OpenVidu Meet room. This will stop all recordings and disconnect all participants. Ends the current meeting in an OpenVidu Meet room. This will stop all recordings and disconnect all participants.
This endpoint is idempotent. If the meeting is already ended, it will return a success response without any action. This endpoint is idempotent. If the meeting is already ended, it will return a success response without any action.
tags: tags:
@ -29,9 +29,9 @@
/meetings/{roomId}/participants/{participantName}: /meetings/{roomId}/participants/{participantName}:
delete: delete:
operationId: disconnectParticipant operationId: disconnectParticipant
summary: Delete a participant from a meeting summary: Kick a participant from a meeting
description: > description: >
Deletes a participant from an OpenVidu Meet room. This will disconnect the participant from the meeting. Kicks a participant from the current meeting in an OpenVidu Meet room.
tags: tags:
- Internal API - Meetings - Internal API - Meetings
security: security:

View File

@ -1,7 +1,7 @@
/participants/token: /participants/token:
post: post:
operationId: generateParticipantToken operationId: generateParticipantToken
summary: Generate a token for a participant summary: Generate token for participant
description: > description: >
Generates a token for a participant to join an OpenVidu Meet room. Generates a token for a participant to join an OpenVidu Meet room.
tags: tags:
@ -30,7 +30,7 @@
/participants/token/refresh: /participants/token/refresh:
post: post:
operationId: refreshParticipantToken operationId: refreshParticipantToken
summary: Refresh a token for a participant summary: Refresh token for participant
description: > description: >
Refresh a token for a participant in an OpenVidu Meet room. Refresh a token for a participant in an OpenVidu Meet room.
tags: tags:

View File

@ -35,9 +35,10 @@
post: post:
operationId: stopRecording operationId: stopRecording
summary: Stop a recording summary: Stop a recording
description: > description: |
Stops a recording with the specified recording ID. Stops a recording with the specified recording ID.
The recording must be in an `ACTIVE` state; otherwise, a 409 error is returned.
> **Note:** The recording must be in an `ACTIVE` state; otherwise, a 409 error is returned.
tags: tags:
- Internal API - Recordings - Internal API - Recordings
security: security:

View File

@ -106,9 +106,10 @@
get: get:
operationId: getRoomRoleAndPermissions operationId: getRoomRoleAndPermissions
summary: Get room role and permissions summary: Get room role and permissions
description: > description: |
Retrieves the role and associated permissions that a participant will have in a specified OpenVidu Meet room Retrieves the role and associated permissions that a participant will have in a specified OpenVidu Meet room
when using the URL thant contains the given secret value. when using the URL thant contains the given secret value.
This endpoint is useful for checking the participant's role and permissions before joining the room. This endpoint is useful for checking the participant's role and permissions before joining the room.
tags: tags:
- Internal API - Rooms - Internal API - Rooms

View File

@ -2,12 +2,12 @@
get: get:
operationId: getRecordings operationId: getRecordings
summary: Get all recordings summary: Get all recordings
description: > description: |
Retrieves a paginated list of all recordings available in the system. Retrieves a paginated list of all recordings available in the system.
You can apply filters to narrow down the results based on specific criteria. You can apply filters to narrow down the results based on specific criteria.
> **Note:** If this endpoint is called using the `recordingTokenCookie` authentication method, > **Note:** If this endpoint is called using the `recordingTokenCookie` authentication method,
the `roomId` filter will be ignored and only recordings associated with the room included in the token will be returned. > the `roomId` filter will be ignored and only recordings associated with the room included in the token will be returned.
tags: tags:
- OpenVidu Meet - Recordings - OpenVidu Meet - Recordings
security: security:
@ -15,27 +15,7 @@
- accessTokenCookie: [] - accessTokenCookie: []
- recordingTokenCookie: [] - recordingTokenCookie: []
parameters: parameters:
# - name: status # - $ref: '../components/parameters/recording-status.yaml'
# in: query
# required: false
# description: |
# Filter recordings by their status.
# Possible values:
# - `STARTING`
# - `ACTIVE`
# - `ENDING`
# - `COMPLETE`
# - `FAILED`
# - `ABORTED`
# - `LIMITED_REACHED`
# You can provide multiple statuses as a comma-separated list (e.g., `status=ACTIVE,FAILED`).
# If not specified, recordings with any status will be returned.
# > ⚠️ **Note:** Using this filter may impact performance for large datasets.
# schema:
# type: string
- $ref: '../components/parameters/recording-fields.yaml' - $ref: '../components/parameters/recording-fields.yaml'
- $ref: '../components/parameters/room-id-query.yaml' - $ref: '../components/parameters/room-id-query.yaml'
- $ref: '../components/parameters/max-items.yaml' - $ref: '../components/parameters/max-items.yaml'
@ -55,12 +35,12 @@
delete: delete:
operationId: bulkDeleteRecordings operationId: bulkDeleteRecordings
summary: Bulk delete recordings summary: Bulk delete recordings
description: > description: |
Deletes multiple recordings at once with the specified recording IDs. Deletes multiple recordings at once with the specified recording IDs.
> **Note:** If this endpoint is called using the `recordingTokenCookie` authentication method, > **Note:** If this endpoint is called using the `recordingTokenCookie` authentication method,
all specified recordings must belong to the same room included in the token. > all specified recordings must belong to the same room included in the token.
If a recording does not belong to that room, it will not be deleted. > If a recording does not belong to that room, it will not be deleted.
tags: tags:
- OpenVidu Meet - Recordings - OpenVidu Meet - Recordings
security: security:
@ -89,13 +69,13 @@
get: get:
operationId: downloadRecordings operationId: downloadRecordings
summary: Download recordings summary: Download recordings
description: > description: |
Downloads multiple recordings as a ZIP file with the specified recording IDs. Downloads multiple recordings as a ZIP file with the specified recording IDs.
The ZIP file will contain all recordings in MP4 format. The ZIP file will contain all recordings in MP4 format.
> **Note:** If this endpoint is called using the `recordingTokenCookie` authentication method, > **Note:** If this endpoint is called using the `recordingTokenCookie` authentication method,
all specified recordings must belong to the same room included in the token. > all specified recordings must belong to the same room included in the token.
If a recording does not belong to that room, it will not be included in the ZIP file. > If a recording does not belong to that room, it will not be included in the ZIP file.
tags: tags:
- OpenVidu Meet - Recordings - OpenVidu Meet - Recordings
security: security:
@ -145,6 +125,7 @@
- recordingTokenCookie: [] - recordingTokenCookie: []
parameters: parameters:
- $ref: '../components/parameters/recording-id.yaml' - $ref: '../components/parameters/recording-id.yaml'
- $ref: '../components/parameters/recording-secret.yaml'
responses: responses:
'200': '200':
$ref: '../components/responses/success-get-recording.yaml' $ref: '../components/responses/success-get-recording.yaml'
@ -163,9 +144,11 @@
delete: delete:
operationId: deleteRecording operationId: deleteRecording
summary: Delete a recording summary: Delete a recording
description: > description: |
Deletes a recording with the specified recording. Deletes a recording with the specified recording ID.
The recording will only be deleted if it exists and is not in progress (i.e., not in a state such as `ACTIVE`, `STARTING`, or `ENDING`).
> ⚠️ **Note:** The recording will only be deleted if it exists and is not in progress
> (i.e., not in a state such as `ACTIVE`, `STARTING`, or `ENDING`).
tags: tags:
- OpenVidu Meet - Recordings - OpenVidu Meet - Recordings
security: security:
@ -193,9 +176,10 @@
get: get:
operationId: getRecordingMedia operationId: getRecordingMedia
summary: Get recording media summary: Get recording media
description: > description: |
Retrieves the media of a recording with the specified recording ID. Retrieves the media of a recording with the specified recording ID.
The media is returned in a binary format suitable for video playback. The media is returned in a binary format suitable for video playback.
This endpoint supports range requests, allowing partial content retrieval This endpoint supports range requests, allowing partial content retrieval
for video playback without downloading the entire file. for video playback without downloading the entire file.
tags: tags:
@ -210,7 +194,7 @@
- $ref: '../components/parameters/recording-range.yaml' - $ref: '../components/parameters/recording-range.yaml'
responses: responses:
'200': '200':
description: Successfully streaming the full recording description: Successfully retrieved the full recording media
headers: headers:
Accept-Ranges: Accept-Ranges:
$ref: '../components/headers/accept-ranges.yaml' $ref: '../components/headers/accept-ranges.yaml'
@ -224,7 +208,7 @@
type: string type: string
format: binary format: binary
'206': '206':
description: Partial content streaming based on byte range description: Successfully retrieved a partial range of the recording media
headers: headers:
Accept-Ranges: Accept-Ranges:
$ref: '../components/headers/accept-ranges.yaml' $ref: '../components/headers/accept-ranges.yaml'
@ -256,8 +240,8 @@
schema: schema:
$ref: '../components/schemas/error.yaml' $ref: '../components/schemas/error.yaml'
example: example:
code: 416 error: Recording Error
message: 'Requested range not satisfiable' message: 'Recording "room-123--EG_XYZ--XX445" range not satisfiable. File size: 123456789'
'422': '422':
$ref: '../components/responses/validation-error.yaml' $ref: '../components/responses/validation-error.yaml'
'500': '500':
@ -266,9 +250,10 @@
get: get:
operationId: getRecordingUrl operationId: getRecordingUrl
summary: Get recording URL summary: Get recording URL
description: > description: |
Retrieves the URL of a recording with the specified recording ID. Retrieves the URL of a recording with the specified recording ID.
This URL is intended to be shared with people who do not have direct access to the recording. This URL is intended to be shared with people who do not have direct access to the recording.
It can be configured to be accessible by anyone (public access) or restricted to authenticated users only, It can be configured to be accessible by anyone (public access) or restricted to authenticated users only,
depending on the `privateAccess` query parameter. depending on the `privateAccess` query parameter.
tags: tags:

View File

@ -3,7 +3,7 @@
operationId: createRoom operationId: createRoom
summary: Create a room summary: Create a room
description: > description: >
Creates a new OpenVidu Meet room with the specified expiration date. Creates a new OpenVidu Meet room.
The room will be available for participants to join using the generated URLs. The room will be available for participants to join using the generated URLs.
tags: tags:
- OpenVidu Meet - Room - OpenVidu Meet - Room
@ -29,6 +29,7 @@
summary: Get all rooms summary: Get all rooms
description: > description: >
Retrieves a paginated list of all rooms available in the system. Retrieves a paginated list of all rooms available in the system.
You can apply filters to narrow down the results based on specific criteria.
tags: tags:
- OpenVidu Meet - Room - OpenVidu Meet - Room
security: security:
@ -53,7 +54,7 @@
delete: delete:
operationId: bulkDeleteRooms operationId: bulkDeleteRooms
summary: Bulk delete rooms summary: Bulk delete rooms
description: > description: |
Delete multiple OpenVidu Meet rooms at once with the specified room IDs. Delete multiple OpenVidu Meet rooms at once with the specified room IDs.
If a room has active participants, it will be marked for deletion If a room has active participants, it will be marked for deletion
@ -120,7 +121,7 @@
delete: delete:
operationId: deleteRoom operationId: deleteRoom
summary: Delete a room summary: Delete a room
description: > description: |
Deletes an OpenVidu Meet room with the specified room ID. Deletes an OpenVidu Meet room with the specified room ID.
If the room has active participants, it will be marked for deletion If the room has active participants, it will be marked for deletion

View File

@ -1,7 +1,7 @@
recordingStarted: recordingStarted:
post: post:
summary: Recording started summary: Recording started
description: > description: |
This webhook is triggered when a recording starts. This webhook is triggered when a recording starts.
> The recording can be in the `STARTING` status for a few seconds before it becomes `ACTIVE`. > The recording can be in the `STARTING` status for a few seconds before it becomes `ACTIVE`.
@ -31,7 +31,7 @@ recordingStarted:
- properties: - properties:
status: status:
type: string type: string
enum: [STARTING] enum: [STARTING, ACTIVE]
description: The status of the recording. description: The status of the recording.
example: STARTING example: STARTING
responses: responses:
@ -41,7 +41,7 @@ recordingStarted:
recordingUpdated: recordingUpdated:
post: post:
summary: Recording updated summary: Recording updated
description: > description: |
This webhook is triggered when a recording update occurs. This webhook is triggered when a recording update occurs.
> This update can be due to a change in the recording status (e.g., from `STARTING` to `ACTIVE`). > This update can be due to a change in the recording status (e.g., from `STARTING` to `ACTIVE`).
@ -81,10 +81,11 @@ recordingUpdated:
recordingEnded: recordingEnded:
post: post:
summary: Recording ended summary: Recording ended
description: > description: |
This webhook is triggered when a recording ends. This webhook is triggered when a recording ends.
> The recording can end due to various reasons, such as the user stopping the recording or the recording reaching its maximum duration. > The recording can end due to various reasons, such as the user stopping the recording
> or the recording reaching its maximum duration.
operationId: recordingEndedWebhook operationId: recordingEndedWebhook
parameters: parameters:
- $ref: ../components/parameters/x-timestamp.yaml - $ref: ../components/parameters/x-timestamp.yaml
@ -112,7 +113,7 @@ recordingEnded:
- properties: - properties:
status: status:
type: string type: string
enum: [COMPLETE, FAILED, ABORTED, LIMITED_REACHED] enum: [COMPLETE, FAILED, ABORTED, LIMIT_REACHED]
description: The status of the recording. description: The status of the recording.
example: COMPLETE example: COMPLETE
endDate: endDate: