Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ title: Create Zoom OAuth Connection
full: true
_openapi:
method: POST
route: /zoom_oauth_connections/
toc: []
structuredData:
headings: []
Expand All @@ -24,4 +23,4 @@ _openapi:

Exchanges a Zoom OAuth authorization code for access and refresh tokens, retrieves the Zoom user's profile, and stores the connection for managed OBF token generation. The authorization code is obtained by directing a Zoom user through the OAuth consent flow for your Zoom OAuth app. Once stored, you can reference this connection's `zoom_user_id` as the `zoom_obf_token_user_id` parameter when creating a bot, and the system will automatically fetch a fresh OBF token at join time. Note: the authorization code is single-use and expires in approximately 10 minutes.

<APIPage document={"./openapi.json"} operations={[{"path":"/zoom_oauth_connections/","method":"post"}]} webhooks={[]} hasHead={false} />
<APIPage document={"./openapi.json"} operations={[{"path":"/zoom_oauth_connections/","method":"post"}]} />
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ title: Delete Zoom OAuth Connection
full: true
_openapi:
method: DELETE
route: /zoom_oauth_connections/{uuid}
toc: []
structuredData:
headings: []
Expand All @@ -20,4 +19,4 @@ _openapi:

Permanently deletes a Zoom OAuth connection by its UUID, removing all stored tokens. After deletion, bots using this connection's `zoom_user_id` as `zoom_obf_token_user_id` will no longer be able to automatically fetch OBF tokens. The Zoom user would need to re-authorize to create a new connection.

<APIPage document={"./openapi.json"} operations={[{"path":"/zoom_oauth_connections/{uuid}","method":"delete"}]} webhooks={[]} hasHead={false} />
<APIPage document={"./openapi.json"} operations={[{"path":"/zoom_oauth_connections/{uuid}","method":"delete"}]} />
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ title: Get Zoom OAuth Connection
full: true
_openapi:
method: GET
route: /zoom_oauth_connections/{uuid}
toc: []
structuredData:
headings: []
Expand All @@ -19,4 +18,4 @@ _openapi:

Retrieves a specific Zoom OAuth connection by its UUID. Returns the connection details including the Zoom user ID, account ID, connection state, and granted scopes. Sensitive token data is never included in the response.

<APIPage document={"./openapi.json"} operations={[{"path":"/zoom_oauth_connections/{uuid}","method":"get"}]} webhooks={[]} hasHead={false} />
<APIPage document={"./openapi.json"} operations={[{"path":"/zoom_oauth_connections/{uuid}","method":"get"}]} />
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ title: List Zoom OAuth Connections
full: true
_openapi:
method: GET
route: /zoom_oauth_connections/
toc: []
structuredData:
headings: []
Expand All @@ -20,4 +19,4 @@ _openapi:

Retrieves all Zoom OAuth connections associated with the authenticated account. Each connection represents a Zoom user who has authorized your app via OAuth. Use this to display connected users or to find the `zoom_user_id` needed for the `zoom_obf_token_user_id` bot parameter. Sensitive token data is never included in the response.

<APIPage document={"./openapi.json"} operations={[{"path":"/zoom_oauth_connections/","method":"get"}]} webhooks={[]} hasHead={false} />
<APIPage document={"./openapi.json"} operations={[{"path":"/zoom_oauth_connections/","method":"get"}]} />
28 changes: 14 additions & 14 deletions openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@
"Webhooks"
],
"summary": "Bot Webhook Events Documentation",
"description": "Meeting BaaS sends the following webhook events related to bot recordings.\n\n## Bot Webhook Event Types\n\n### 1. `complete`\nSent when a bot successfully completes recording a meeting.\n\n**Payload Structure:**\n```json\n{\n \\\"event\\\": \\\"complete\\\",\n \\\"data\\\": {\n \\\"bot_id\\\": \\\"123e4567-e89b-12d3-a456-426614174000\\\",\n \\\"event_uuid\\\": \\\"123e4567-e89b-12d3-a456-426614174001\\\",\n \\\"transcript\\\": [\n {\n \\\"speaker\\\": \\\"John Doe\\\",\n \\\"offset\\\": 1.5,\n \\\"start_time\\\": 1.5,\n \\\"end_time\\\": 2.4,\n \\\"words\\\": [\n {\n \\\"start\\\": 1.5,\n \\\"end\\\": 1.9,\n \\\"word\\\": \\\"Hello\\\"\n },\n {\n \\\"start\\\": 2.0,\n \\\"end\\\": 2.4,\n \\\"word\\\": \\\"everyone\\\"\n }\n ]\n }\n ],\n \\\"speakers\\\": [\n \\\"Jane Smith\\\",\n \\\"John Doe\\\"\n ],\n \\\"mp4\\\": \\\"https://storage.example.com/recordings/video123.mp4?token=abc\\\",\n \\\"audio\\\": \\\"https://storage.example.com/recordings/audio123.wav?token=abc\\\",\n \\\"event\\\": \\\"complete\\\",\n \\\"extra\\\": {\n \\\"foo\\\": \\\"bar\\\"\n }\n }\n}\n```\n\n**When it's triggered:**\n- After a bot successfully records and processes a meeting\n- After the recording is uploaded and made available\n- When all processing of the meeting recording is complete\n\n**What to do with it:**\n- Download the MP4 recording for storage in your system\n- Store the transcript data in your database\n- Update meeting status in your application\n- Notify users that the recording is available\n- Use `event_uuid` to correlate with calendar events (if applicable)\n\n### 2. `failed`\nSent when a bot fails to join or record a meeting.\n\n**Payload Structure:**\n```json\n{\n \\\"event\\\": \\\"failed\\\",\n \\\"data\\\": {\n \\\"bot_id\\\": \\\"123e4567-e89b-12d3-a456-426614174000\\\",\n \\\"event_uuid\\\": \\\"123e4567-e89b-12d3-a456-426614174001\\\",\n \\\"error\\\": \\\"meeting_not_found\\\",\n \\\"message\\\": \\\"Could not join meeting: The meeting ID was not found or has expired\\\",\n \\\"extra\\\": {\n \\\"foo\\\": \\\"bar\\\"\n }\n }\n}\n```\n\n**Common error types:**\n- `meeting_not_found`: The meeting ID or link was invalid or expired\n- `access_denied`: The bot was denied access to the meeting\n- `authentication_error`: Failed to authenticate with the meeting platform\n- `network_error`: Network connectivity issues during recording\n- `internal_error`: Internal server error\n\n**What to do with it:**\n- Log the failure for troubleshooting\n- Notify administrators or users about the failed recording\n- Attempt to reschedule if appropriate\n- Update meeting status in your system\n- Use `event_uuid` to correlate with calendar events (if applicable)\n\n### 3. `transcription_complete`\nSent when transcription is completed separately from recording.\n\n**Payload Structure:**\n```json\n{\n \\\"event\\\": \\\"transcription_complete\\\",\n \\\"data\\\": {\n \\\"bot_id\\\": \\\"123e4567-e89b-12d3-a456-426614174000\\\"\n }\n}\n```\n\n**When it's triggered:**\n- After requesting retranscription via the API\n- When an asynchronous transcription job completes\n- When a higher quality or different language transcription becomes available\n\n**What to do with it:**\n- Update the transcript data in your system\n- Notify users that improved transcription is available\n- Run any post-processing on the new transcript data\n\n## Webhook Usage Tips\n\n- Each event includes the `bot_id` so you can correlate with your internal data\n- The `event_uuid` field is included when the bot was created from a calendar event (null for direct bots or scheduled bots)\n- The complete event includes speaker identification and full transcript data\n- For downloading recordings, the mp4 URL is valid for 24 hours\n- Handle the webhook asynchronously and return 200 OK quickly to prevent timeouts\n\nFor security, always validate the API key in the `x-meeting-baas-api-key` header matches your API key.",
"description": "Meeting BaaS sends the following webhook events related to bot recordings.\n\n## Bot Webhook Event Types\n\n### 1. `complete`\nSent when a bot successfully completes recording a meeting.\n\n**Payload Structure:**\n```json\n{\n \\\"event\\\": \\\"complete\\\",\n \\\"data\\\": {\n \\\"bot_id\\\": \\\"123e4567-e89b-12d3-a456-426614174000\\\",\n \\\"event_uuid\\\": \\\"123e4567-e89b-12d3-a456-426614174001\\\",\n \\\"transcript\\\": [\n {\n \\\"speaker\\\": \\\"John Doe\\\",\n \\\"offset\\\": 1.5,\n \\\"start_time\\\": 1.5,\n \\\"end_time\\\": 2.4,\n \\\"words\\\": [\n {\n \\\"start\\\": 1.5,\n \\\"end\\\": 1.9,\n \\\"word\\\": \\\"Hello\\\"\n },\n {\n \\\"start\\\": 2.0,\n \\\"end\\\": 2.4,\n \\\"word\\\": \\\"everyone\\\"\n }\n ]\n }\n ],\n \\\"speakers\\\": [\n \\\"John Doe\\\",\n \\\"Jane Smith\\\"\n ],\n \\\"mp4\\\": \\\"https://storage.example.com/recordings/video123.mp4?token=abc\\\",\n \\\"audio\\\": \\\"https://storage.example.com/recordings/audio123.wav?token=abc\\\",\n \\\"event\\\": \\\"complete\\\",\n \\\"extra\\\": {\n \\\"foo\\\": \\\"bar\\\"\n }\n }\n}\n```\n\n**When it's triggered:**\n- After a bot successfully records and processes a meeting\n- After the recording is uploaded and made available\n- When all processing of the meeting recording is complete\n\n**What to do with it:**\n- Download the MP4 recording for storage in your system\n- Store the transcript data in your database\n- Update meeting status in your application\n- Notify users that the recording is available\n- Use `event_uuid` to correlate with calendar events (if applicable)\n\n### 2. `failed`\nSent when a bot fails to join or record a meeting.\n\n**Payload Structure:**\n```json\n{\n \\\"event\\\": \\\"failed\\\",\n \\\"data\\\": {\n \\\"bot_id\\\": \\\"123e4567-e89b-12d3-a456-426614174000\\\",\n \\\"event_uuid\\\": \\\"123e4567-e89b-12d3-a456-426614174001\\\",\n \\\"error\\\": \\\"meeting_not_found\\\",\n \\\"message\\\": \\\"Could not join meeting: The meeting ID was not found or has expired\\\",\n \\\"extra\\\": {\n \\\"foo\\\": \\\"bar\\\"\n }\n }\n}\n```\n\n**Common error types:**\n- `meeting_not_found`: The meeting ID or link was invalid or expired\n- `access_denied`: The bot was denied access to the meeting\n- `authentication_error`: Failed to authenticate with the meeting platform\n- `network_error`: Network connectivity issues during recording\n- `internal_error`: Internal server error\n\n**What to do with it:**\n- Log the failure for troubleshooting\n- Notify administrators or users about the failed recording\n- Attempt to reschedule if appropriate\n- Update meeting status in your system\n- Use `event_uuid` to correlate with calendar events (if applicable)\n\n### 3. `transcription_complete`\nSent when transcription is completed separately from recording.\n\n**Payload Structure:**\n```json\n{\n \\\"event\\\": \\\"transcription_complete\\\",\n \\\"data\\\": {\n \\\"bot_id\\\": \\\"123e4567-e89b-12d3-a456-426614174000\\\"\n }\n}\n```\n\n**When it's triggered:**\n- After requesting retranscription via the API\n- When an asynchronous transcription job completes\n- When a higher quality or different language transcription becomes available\n\n**What to do with it:**\n- Update the transcript data in your system\n- Notify users that improved transcription is available\n- Run any post-processing on the new transcript data\n\n## Webhook Usage Tips\n\n- Each event includes the `bot_id` so you can correlate with your internal data\n- The `event_uuid` field is included when the bot was created from a calendar event (null for direct bots or scheduled bots)\n- The complete event includes speaker identification and full transcript data\n- For downloading recordings, the mp4 URL is valid for 24 hours\n- Handle the webhook asynchronously and return 200 OK quickly to prevent timeouts\n\nFor security, always validate the API key in the `x-meeting-baas-api-key` header matches your API key.",
"operationId": "bot_webhook_documentation",
"responses": {
"200": {
Expand Down Expand Up @@ -1276,7 +1276,7 @@
"null"
],
"format": "uint32",
"minimum": 0
"minimum": 0.0
},
"silence_timeout": {
"description": "The timeout in seconds for the bot to leave the meeting if no speaker activity is detected, defaults to 600 seconds (10 minutes). Minimum: 300 seconds (5 minutes). Maximum: 1800 seconds (30 minutes). This timeout becomes active after participants are detected. The bot monitors for audio activity, and if no sound is detected for the duration of this timeout, it will automatically leave the meeting. Important: Configure these timeouts carefully to ensure the bot doesn't leave too early - the noone_joined_timeout should be long enough to wait for late joiners, and the silence_timeout should account for intentional pauses. Applies to Google Meet and Microsoft Teams only.",
Expand All @@ -1285,7 +1285,7 @@
"null"
],
"format": "uint32",
"minimum": 0
"minimum": 0.0
},
"waiting_room_timeout": {
"description": "The timeout in seconds for the bot to wait in the waiting room before leaving the meeting, defaults to 600 seconds (10 minutes). Minimum: 120 seconds (2 minutes). Maximum: 1800 seconds (30 minutes). Note: Google Meet also has it's own waiting room timeout (about ~10 minutes). Setting a higher value for such meetings would have no effect because Google Meet will deny entry to the bot after its own timeout.",
Expand All @@ -1294,7 +1294,7 @@
"null"
],
"format": "uint32",
"minimum": 0
"minimum": 0.0
}
}
},
Expand Down Expand Up @@ -2568,20 +2568,20 @@
"bot_exited_at": {
"type": "integer",
"format": "uint64",
"minimum": 0
"minimum": 0.0
},
"bot_joined_at": {
"type": "integer",
"format": "uint64",
"minimum": 0
"minimum": 0.0
},
"diarization_fail_count": {
"type": [
"integer",
"null"
],
"format": "uint",
"minimum": 0
"minimum": 0.0
},
"diarization_v2": {
"type": "boolean"
Expand All @@ -2594,7 +2594,7 @@
"null"
],
"format": "uint64",
"minimum": 0
"minimum": 0.0
},
"files_generated": {
"anyOf": [
Expand All @@ -2612,7 +2612,7 @@
"null"
],
"format": "uint",
"minimum": 0
"minimum": 0.0
}
}
},
Expand Down Expand Up @@ -2730,7 +2730,7 @@
"null"
],
"format": "uint64",
"minimum": 0
"minimum": 0.0
},
"error_code": {
"default": null,
Expand Down Expand Up @@ -3135,7 +3135,7 @@
"null"
],
"format": "uint64",
"minimum": 0
"minimum": 0.0
},
"streaming": {
"description": "WebSocket streams for 16 kHz audio. Input stream receives audio sent to the bot. Output stream receives audio from the bot.",
Expand Down Expand Up @@ -3410,7 +3410,7 @@
},
"last_updated": {
"description": "Timestamp of when this data was generated (in ISO-8601 format)\n\nThis field is maintained for backwards compatibility. It is automatically set to the current time when the response is created.",
"default": "2026-02-15T12:57:58.007290999+00:00",
"default": "2026-02-15T12:57:57.408499675+00:00",
"type": "string",
"format": "date-time"
},
Expand Down Expand Up @@ -4196,12 +4196,12 @@
"nanos_since_epoch": {
"type": "integer",
"format": "uint32",
"minimum": 0
"minimum": 0.0
},
"secs_since_epoch": {
"type": "integer",
"format": "uint64",
"minimum": 0
"minimum": 0.0
}
}
},
Expand Down