openapi.json•77.1 kB
{
"openapi": "3.1.0",
"info": {
"title": "Meeting BaaS API",
"summary": "API for recording and transcribing video meetings across Zoom, Google Meet, and Microsoft Teams. Features include bot management, calendar integration, and transcription services.",
"description": "Meeting BaaS API",
"termsOfService": "https://meetingbaas.com/terms-and-conditions",
"version": "1.1"
},
"servers": [{ "url": "https://api.meetingbaas.com", "description": "Production server" }],
"paths": {
"/bots/": {
"post": {
"summary": "Join",
"description": "Have a bot join a meeting, now or in the future",
"operationId": "join",
"requestBody": {
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/JoinRequest" } }
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/JoinResponse" } }
}
}
},
"security": [{ "ApiKeyAuth": [] }, { "LegacyApiKeyAuth": [] }]
}
},
"/bots/{uuid}": {
"delete": {
"summary": "Leave",
"description": "Leave",
"operationId": "leave",
"responses": {
"200": {
"description": "",
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/LeaveResponse" } }
}
}
}
}
},
"/bots/meeting_data": {
"get": {
"summary": "Get Meeting Data",
"description": "Get meeting recording and metadata",
"operationId": "get_meeting_data",
"parameters": [
{
"in": "query",
"name": "bot_id",
"required": true,
"schema": { "type": "string" },
"style": "form"
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/Metadata" } }
}
}
}
}
},
"/bots/{uuid}/delete_data": {
"post": {
"summary": "Delete Data",
"description": "Deletes a bot's data including recording, transcription, and logs. Only metadata is retained. Rate limited to 5 requests per minute per API key.",
"operationId": "delete_data",
"responses": {
"200": {
"description": "",
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/DeleteResponse" } }
}
},
"401": { "description": "no content" },
"403": { "description": "no content" },
"404": { "description": "no content" },
"429": { "description": "no content" }
}
}
},
"/bots/bots_with_metadata": {
"get": {
"summary": "List Bots with Metadata",
"description": "Preview endpoint. Retrieves a paginated list of the user's bots with essential metadata, including IDs, names, and meeting details. Supports filtering, sorting, and advanced querying options.",
"operationId": "bots_with_metadata",
"parameters": [
{
"in": "query",
"name": "bot_name",
"description": "Filter bots by name containing this string.\n\nPerforms a case-insensitive partial match on the bot's name. Useful for finding bots with specific naming conventions or to locate a particular bot when you don't have its ID.\n\nExample: \"Sales\" would match \"Sales Meeting\", \"Quarterly Sales\", etc.",
"schema": {
"description": "Filter bots by name containing this string.\n\nPerforms a case-insensitive partial match on the bot's name. Useful for finding bots with specific naming conventions or to locate a particular bot when you don't have its ID.\n\nExample: \"Sales\" would match \"Sales Meeting\", \"Quarterly Sales\", etc.",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "created_after",
"description": "Filter bots created after this date (ISO format).\n\nLimits results to bots created at or after the specified timestamp. Used for time-based filtering to find recent additions.\n\nFormat: ISO-8601 date-time string (YYYY-MM-DDThh:mm:ss) Example: \"2023-05-01T00:00:00\"",
"schema": {
"description": "Filter bots created after this date (ISO format).\n\nLimits results to bots created at or after the specified timestamp. Used for time-based filtering to find recent additions.\n\nFormat: ISO-8601 date-time string (YYYY-MM-DDThh:mm:ss) Example: \"2023-05-01T00:00:00\"",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "created_before",
"description": "Filter bots created before this date (ISO format).\n\nLimits results to bots created at or before the specified timestamp. Used for time-based filtering to exclude recent additions.\n\nFormat: ISO-8601 date-time string (YYYY-MM-DDThh:mm:ss) Example: \"2023-05-31T23:59:59\"",
"schema": {
"description": "Filter bots created before this date (ISO format).\n\nLimits results to bots created at or before the specified timestamp. Used for time-based filtering to exclude recent additions.\n\nFormat: ISO-8601 date-time string (YYYY-MM-DDThh:mm:ss) Example: \"2023-05-31T23:59:59\"",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "cursor",
"description": "Cursor for pagination, obtained from previous response.\n\nUsed for retrieving the next set of results after a previous call. The cursor value is returned in the `nextCursor` field of responses that have additional results available.\n\nFormat: Base64-encoded string containing pagination metadata",
"schema": {
"description": "Cursor for pagination, obtained from previous response.\n\nUsed for retrieving the next set of results after a previous call. The cursor value is returned in the `nextCursor` field of responses that have additional results available.\n\nFormat: Base64-encoded string containing pagination metadata",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "filter_by_extra",
"description": "Filter bots by matching values in the extra JSON payload.\n\nThis parameter performs in-memory filtering on the `extra` JSON field, similar to a SQL WHERE clause. It reduces the result set to only include bots that match all specified conditions.\n\nFormat specifications: - Single condition: \"field:value\" - Multiple conditions: \"field1:value1,field2:value2\"\n\nExamples: - \"customer_id:12345\" - Only bots with this customer ID - \"status:active,project:sales\" - Only active bots from sales projects\n\nNotes: - All conditions must match for a bot to be included - Values are matched exactly (case-sensitive) - Bots without the specified field are excluded",
"schema": {
"description": "Filter bots by matching values in the extra JSON payload.\n\nThis parameter performs in-memory filtering on the `extra` JSON field, similar to a SQL WHERE clause. It reduces the result set to only include bots that match all specified conditions.\n\nFormat specifications: - Single condition: \"field:value\" - Multiple conditions: \"field1:value1,field2:value2\"\n\nExamples: - \"customer_id:12345\" - Only bots with this customer ID - \"status:active,project:sales\" - Only active bots from sales projects\n\nNotes: - All conditions must match for a bot to be included - Values are matched exactly (case-sensitive) - Bots without the specified field are excluded",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "limit",
"description": "Maximum number of bots to return in a single request.\n\nLimits the number of results returned in a single API call. This parameter helps control response size and page length.\n\nDefault: 10 Minimum: 1 Maximum: 50",
"schema": {
"description": "Maximum number of bots to return in a single request.\n\nLimits the number of results returned in a single API call. This parameter helps control response size and page length.\n\nDefault: 10 Minimum: 1 Maximum: 50",
"default": 10,
"type": "integer",
"format": "int32"
},
"style": "form"
},
{
"in": "query",
"name": "meeting_url",
"description": "Filter bots by meeting URL containing this string.\n\nPerforms a case-insensitive partial match on the bot's meeting URL. Use this to find bots associated with specific meeting platforms or particular meeting IDs.\n\nExample: \"zoom.us\" would match all Zoom meetings",
"schema": {
"description": "Filter bots by meeting URL containing this string.\n\nPerforms a case-insensitive partial match on the bot's meeting URL. Use this to find bots associated with specific meeting platforms or particular meeting IDs.\n\nExample: \"zoom.us\" would match all Zoom meetings",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "sort_by_extra",
"description": "Sort the results by a field in the extra JSON payload.\n\nThis parameter performs in-memory sorting on the `extra` JSON field, similar to a SQL ORDER BY clause. It changes the order of results but not which results are included.\n\nFormat specifications: - Default (ascending): \"field\" - Explicit direction: \"field:asc\" or \"field:desc\"\n\nExamples: - \"customer_id\" - Sort by customer_id (ascending) - \"priority:desc\" - Sort by priority (descending)\n\nNotes: - Applied after all filtering - String comparison is used for sorting - Bots with the field come before bots without it - Can be combined with filter_by_extra",
"schema": {
"description": "Sort the results by a field in the extra JSON payload.\n\nThis parameter performs in-memory sorting on the `extra` JSON field, similar to a SQL ORDER BY clause. It changes the order of results but not which results are included.\n\nFormat specifications: - Default (ascending): \"field\" - Explicit direction: \"field:asc\" or \"field:desc\"\n\nExamples: - \"customer_id\" - Sort by customer_id (ascending) - \"priority:desc\" - Sort by priority (descending)\n\nNotes: - Applied after all filtering - String comparison is used for sorting - Bots with the field come before bots without it - Can be combined with filter_by_extra",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "speaker_name",
"description": "NOTE: this is a preview feature and not yet available\n\nFilter bots by speaker name containing this string.\n\nPerforms a case-insensitive partial match on the speakers in the meeting. Useful for finding meetings that included a specific person.\n\nExample: \"John\" would match meetings with speakers like \"John Smith\" or \"John Doe\"",
"schema": {
"description": "NOTE: this is a preview feature and not yet available\n\nFilter bots by speaker name containing this string.\n\nPerforms a case-insensitive partial match on the speakers in the meeting. Useful for finding meetings that included a specific person.\n\nExample: \"John\" would match meetings with speakers like \"John Smith\" or \"John Doe\"",
"type": ["string", "null"]
},
"style": "form"
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/ListRecentBotsResponse" }
}
}
}
}
}
},
"/bots/retranscribe": {
"post": {
"summary": "Retranscribe Bot",
"description": "Transcribe or retranscribe a bot's audio using the Default or your provided Speech to Text Provider",
"operationId": "retranscribe_bot",
"requestBody": {
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/RetranscribeBody" } }
},
"required": true
},
"responses": {
"200": { "description": "description" },
"202": { "description": "no content" }
}
}
},
"/calendars/raw": {
"post": {
"tags": ["Calendars"],
"summary": "List Raw Calendars",
"description": "Retrieves unprocessed calendar data directly from the provider (Google, Microsoft) using provided OAuth credentials. This endpoint is typically used during the initial setup process to allow users to select which calendars to integrate. Returns a list of available calendars with their unique IDs, email addresses, and primary status. This data is not persisted until a calendar is formally created using the create_calendar endpoint.",
"operationId": "list_raw_calendars",
"requestBody": {
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/ListRawCalendarsParams" }
}
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/ListRawCalendarsResponse" }
}
}
}
}
}
},
"/calendars/": {
"get": {
"tags": ["Calendars"],
"summary": "List Calendars",
"description": "Retrieves all calendars that have been integrated with the system for the authenticated user. Returns a list of calendars with their names, email addresses, provider information, and sync status. This endpoint shows only calendars that have been formally connected through the create_calendar endpoint, not all available calendars from the provider.",
"operationId": "list_calendars",
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "type": "array", "items": { "$ref": "#/components/schemas/Calendar" } }
}
}
}
}
},
"post": {
"tags": ["Calendars"],
"summary": "Create Calendar",
"description": "Integrates a new calendar with the system using OAuth credentials. This endpoint establishes a connection with the calendar provider (Google, Microsoft), sets up webhook notifications for real-time updates, and performs an initial sync of all calendar events. It requires OAuth credentials (client ID, client secret, and refresh token) and the platform type. Once created, the calendar is assigned a unique UUID that should be used for all subsequent operations. Returns the newly created calendar object with all integration details.",
"operationId": "create_calendar",
"requestBody": {
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/CreateCalendarParams" }
}
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/CreateCalendarResponse" }
}
}
}
}
}
},
"/calendars/resync_all": {
"post": {
"tags": ["Calendars"],
"summary": "Resync All Calendars",
"description": "Initiates a complete refresh of data for all connected calendars. This operation performs a deep sync with each calendar provider (Google, Microsoft) to ensure all events are up-to-date. Each calendar is processed individually, with success or failure tracked separately. Returns a comprehensive result object containing successfully synced calendar UUIDs and detailed error messages for any failures. This endpoint is useful for ensuring the system has the latest calendar data when inconsistencies are suspected.",
"operationId": "resync_all_calendars",
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/ResyncAllCalendarsResponse" }
}
}
}
}
}
},
"/calendars/{uuid}": {
"get": {
"tags": ["Calendars"],
"summary": "Get Calendar",
"description": "Retrieves detailed information about a specific calendar integration by its UUID. Returns comprehensive calendar data including the calendar name, email address, provider details (Google, Microsoft), sync status, and other metadata. This endpoint is useful for displaying calendar information to users or verifying the status of a calendar integration before performing operations on its events.",
"operationId": "get_calendar",
"responses": {
"200": {
"description": "",
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/Calendar" } }
}
}
}
},
"delete": {
"tags": ["Calendars"],
"summary": "Delete Calendar",
"description": "Permanently removes a calendar integration by its UUID, including all associated events and bot configurations. This operation cancels any active subscriptions with the calendar provider, stops all webhook notifications, and unschedules any pending recordings. All related resources are cleaned up in the database. This action cannot be undone, and subsequent requests to this calendar's UUID will return 404 Not Found errors.",
"operationId": "delete_calendar",
"responses": { "200": { "description": "no content" } }
},
"patch": {
"tags": ["Calendars"],
"summary": "Update Calendar",
"description": "Updates a calendar integration with new credentials or platform while maintaining the same UUID. This operation is performed as an atomic transaction to ensure data integrity. The system automatically unschedules existing bots to prevent duplicates, updates the calendar credentials, and triggers a full resync of all events. Useful when OAuth tokens need to be refreshed or when migrating a calendar between providers. Returns the updated calendar object with its new configuration.",
"operationId": "update_calendar",
"requestBody": {
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/UpdateCalendarParams" }
}
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/CreateCalendarResponse" }
}
}
}
}
}
},
"/calendar_events/{uuid}": {
"get": {
"tags": ["Calendars"],
"summary": "Get Event",
"description": "Retrieves comprehensive details about a specific calendar event by its UUID. Returns complete event information including title, meeting link, start and end times, organizer status, recurrence information, and the full list of attendees with their names and email addresses. Also includes any associated bot parameters if recording is scheduled for this event. The raw calendar data from the provider is also included for advanced use cases.",
"operationId": "get_event",
"responses": {
"200": {
"description": "",
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/Event" } }
}
}
}
}
},
"/calendar_events/{uuid}/bot": {
"post": {
"tags": ["Calendars"],
"summary": "Schedule Record Event",
"description": "Configures a bot to automatically join and record a specific calendar event at its scheduled time. The request body contains detailed bot configuration, including recording options, streaming settings, and webhook notification URLs. For recurring events, the 'all_occurrences' parameter can be set to true to schedule recording for all instances of the recurring series, or false (default) to schedule only the specific instance. Returns the updated event(s) with the bot parameters attached.",
"operationId": "schedule_record_event",
"parameters": [
{
"in": "query",
"name": "all_occurrences",
"description": "schedule a bot to all occurences of a recurring event",
"schema": {
"description": "schedule a bot to all occurences of a recurring event",
"type": ["boolean", "null"]
},
"style": "form"
}
],
"requestBody": {
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/BotParam2" } }
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "type": "array", "items": { "$ref": "#/components/schemas/Event" } }
}
}
}
}
},
"delete": {
"tags": ["Calendars"],
"summary": "Unschedule Record Event",
"description": "Cancels a previously scheduled recording for a calendar event and releases associated bot resources. For recurring events, the 'all_occurrences' parameter controls whether to unschedule from all instances of the recurring series or just the specific occurrence. This operation is idempotent and will not error if no bot was scheduled. Returns the updated event(s) with the bot parameters removed.",
"operationId": "unschedule_record_event",
"parameters": [
{
"in": "query",
"name": "all_occurrences",
"description": "unschedule a bot from all occurences of a recurring event",
"schema": {
"description": "unschedule a bot from all occurences of a recurring event",
"type": ["boolean", "null"]
},
"style": "form"
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "type": "array", "items": { "$ref": "#/components/schemas/Event" } }
}
}
}
}
},
"patch": {
"tags": ["Calendars"],
"summary": "Patch Bot",
"description": "Updates the configuration of a bot already scheduled to record an event. Allows modification of recording settings, webhook URLs, and other bot parameters without canceling and recreating the scheduled recording. For recurring events, the 'all_occurrences' parameter determines whether changes apply to all instances or just the specific occurrence. Returns the updated event(s) with the modified bot parameters.",
"operationId": "patch_bot",
"parameters": [
{
"in": "query",
"name": "all_occurrences",
"description": "schedule a bot to all occurences of a recurring event",
"schema": {
"description": "schedule a bot to all occurences of a recurring event",
"type": ["boolean", "null"]
},
"style": "form"
}
],
"requestBody": {
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/BotParam3" } }
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "type": "array", "items": { "$ref": "#/components/schemas/Event" } }
}
}
}
}
}
},
"/calendar_events/": {
"get": {
"tags": ["Calendars"],
"summary": "List Events",
"description": "Retrieves a paginated list of calendar events with comprehensive filtering options. Supports filtering by organizer email, attendee email, date ranges (start_date_gte, start_date_lte), and event status. Results can be limited to upcoming events (default), past events, or all events. Each event includes full details such as meeting links, participants, and recording status. The response includes a 'next' pagination cursor for retrieving additional results.",
"operationId": "list_events",
"parameters": [
{
"in": "query",
"name": "attendee_email",
"description": "If provided, filters events to include only those with this attendee's email address Example: \"jane.smith@example.com\"",
"schema": {
"description": "If provided, filters events to include only those with this attendee's email address Example: \"jane.smith@example.com\"",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "calendar_id",
"description": "Calendar ID to filter events by This is required to specify which calendar's events to retrieve",
"required": true,
"schema": {
"description": "Calendar ID to filter events by This is required to specify which calendar's events to retrieve",
"type": "string"
},
"style": "form"
},
{
"in": "query",
"name": "cursor",
"description": "Optional cursor for pagination This value is included in the `next` field of the previous response",
"schema": {
"description": "Optional cursor for pagination This value is included in the `next` field of the previous response",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "organizer_email",
"description": "If provided, filters events to include only those with this organizer's email address Example: \"john.doe@example.com\"",
"schema": {
"description": "If provided, filters events to include only those with this organizer's email address Example: \"john.doe@example.com\"",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "start_date_gte",
"description": "If provided, filters events to include only those with a start date greater than or equal to this timestamp Format: ISO-8601 string, e.g., \"2023-01-01T00:00:00Z\"",
"schema": {
"description": "If provided, filters events to include only those with a start date greater than or equal to this timestamp Format: ISO-8601 string, e.g., \"2023-01-01T00:00:00Z\"",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "start_date_lte",
"description": "If provided, filters events to include only those with a start date less than or equal to this timestamp Format: ISO-8601 string, e.g., \"2023-12-31T23:59:59Z\"",
"schema": {
"description": "If provided, filters events to include only those with a start date less than or equal to this timestamp Format: ISO-8601 string, e.g., \"2023-12-31T23:59:59Z\"",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "status",
"description": "Filter events by meeting status Valid values: \"upcoming\" (default) returns events after current time, \"past\" returns previous events, \"all\" returns both",
"schema": {
"description": "Filter events by meeting status Valid values: \"upcoming\" (default) returns events after current time, \"past\" returns previous events, \"all\" returns both",
"type": ["string", "null"]
},
"style": "form"
},
{
"in": "query",
"name": "updated_at_gte",
"description": "If provided, fetches only events updated at or after this timestamp Format: ISO-8601 string, e.g., \"2023-01-01T00:00:00Z\"",
"schema": {
"description": "If provided, fetches only events updated at or after this timestamp Format: ISO-8601 string, e.g., \"2023-01-01T00:00:00Z\"",
"type": ["string", "null"]
},
"style": "form"
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": { "schema": { "$ref": "#/components/schemas/ListEventResponse" } }
}
}
}
}
}
},
"components": {
"securitySchemes": {
"ApiKeyAuth": {
"type": "apiKey",
"in": "header",
"name": "x-meeting-baas-api-key",
"description": "API key for authentication"
}
},
"schemas": {
"Account": {
"description": "This structure represents the user's account information.",
"type": "object",
"required": ["created_at", "email", "id", "status"],
"properties": {
"company_name": { "type": ["string", "null"] },
"created_at": { "$ref": "#/components/schemas/SystemTime" },
"email": { "type": "string" },
"firstname": { "type": ["string", "null"] },
"id": { "type": "integer", "format": "int32" },
"lastname": { "type": ["string", "null"] },
"phone": { "type": ["string", "null"] },
"status": { "type": "integer", "format": "int32" }
}
},
"AccountInfos": {
"description": "Structure consisting account information.",
"type": "object",
"required": ["account"],
"properties": { "account": { "$ref": "#/components/schemas/Account" } }
},
"ApiKeyResponse": {
"type": "object",
"required": ["api_key"],
"properties": { "api_key": { "type": "string" } }
},
"Attendee": {
"type": "object",
"required": ["email"],
"properties": {
"email": { "description": "The email address of the meeting attendee", "type": "string" },
"name": {
"description": "The display name of the attendee if available from the calendar provider (Google, Microsoft)",
"type": ["string", "null"]
}
}
},
"AudioFrequency": { "type": "string", "enum": ["16khz", "24khz"] },
"AutomaticLeaveRequest": {
"type": "object",
"properties": {
"noone_joined_timeout": {
"description": "The timeout in seconds for the bot to wait for participants to join before leaving the meeting, defaults to 600 seconds",
"type": ["integer", "null"],
"format": "uint32",
"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",
"type": ["integer", "null"],
"format": "uint32",
"minimum": 0.0
}
}
},
"Bot": {
"type": "object",
"required": ["bot", "duration", "params"],
"properties": {
"bot": { "$ref": "#/components/schemas/Bot2" },
"duration": { "type": "integer", "format": "int64" },
"params": { "$ref": "#/components/schemas/BotParam" }
}
},
"Bot2": {
"type": "object",
"required": [
"account_id",
"bot_param_id",
"created_at",
"diarization_v2",
"ended_at",
"id",
"meeting_url",
"mp4_s3_path",
"reserved",
"uuid"
],
"properties": {
"account_id": { "type": "integer", "format": "int32" },
"bot_param_id": { "type": "integer", "format": "int32" },
"created_at": { "$ref": "#/components/schemas/DateTime" },
"diarization_v2": { "type": "boolean" },
"ended_at": { "$ref": "#/components/schemas/OptionalDateTime" },
"errors": { "type": ["string", "null"] },
"event_id": { "type": ["integer", "null"], "format": "int32" },
"id": { "type": "integer", "format": "int32" },
"meeting_url": { "type": "string" },
"mp4_s3_path": { "type": "string" },
"reserved": { "type": "boolean" },
"scheduled_bot_id": { "type": ["integer", "null"], "format": "int32" },
"session_id": { "type": ["string", "null"] },
"uuid": { "type": "string", "format": "uuid" }
}
},
"BotData": {
"type": "object",
"required": ["bot", "transcripts"],
"properties": {
"bot": { "$ref": "#/components/schemas/BotWithParams" },
"transcripts": { "type": "array", "items": { "$ref": "#/components/schemas/Transcript" } }
}
},
"BotPagined": {
"type": "object",
"required": ["bots", "has_more"],
"properties": {
"bots": { "type": "array", "items": { "$ref": "#/components/schemas/Bot" } },
"has_more": { "type": "boolean" }
}
},
"BotParam": {
"type": "object",
"required": ["bot_name", "extra", "webhook_url"],
"properties": {
"bot_image": { "type": ["string", "null"] },
"bot_name": { "type": "string" },
"deduplication_key": { "type": ["string", "null"] },
"enter_message": { "type": ["string", "null"] },
"extra": { "$ref": "#/components/schemas/Extra" },
"noone_joined_timeout": { "type": ["integer", "null"], "format": "int32" },
"recording_mode": {
"anyOf": [{ "$ref": "#/components/schemas/RecordingMode" }, { "type": "null" }]
},
"speech_to_text": {
"anyOf": [{ "$ref": "#/components/schemas/SpeechToText2" }, { "type": "null" }]
},
"streaming_audio_frequency": {
"anyOf": [{ "$ref": "#/components/schemas/AudioFrequency" }, { "type": "null" }]
},
"streaming_input": { "type": ["string", "null"] },
"streaming_output": { "type": ["string", "null"] },
"waiting_room_timeout": { "type": ["integer", "null"], "format": "int32" },
"webhook_url": { "type": "string" }
}
},
"BotParam2": {
"type": "object",
"required": ["bot_name", "extra"],
"properties": {
"bot_image": { "type": ["string", "null"] },
"bot_name": { "type": "string" },
"deduplication_key": { "type": ["string", "null"] },
"enter_message": { "type": ["string", "null"] },
"extra": { "$ref": "#/components/schemas/Extra" },
"noone_joined_timeout": { "type": ["integer", "null"], "format": "int32" },
"recording_mode": {
"anyOf": [{ "$ref": "#/components/schemas/RecordingMode" }, { "type": "null" }]
},
"speech_to_text": {
"anyOf": [{ "$ref": "#/components/schemas/SpeechToText" }, { "type": "null" }]
},
"streaming_audio_frequency": {
"anyOf": [{ "$ref": "#/components/schemas/AudioFrequency" }, { "type": "null" }]
},
"streaming_input": { "type": ["string", "null"] },
"streaming_output": { "type": ["string", "null"] },
"waiting_room_timeout": { "type": ["integer", "null"], "format": "int32" },
"webhook_url": { "type": ["string", "null"] }
}
},
"BotParam3": {
"type": "object",
"properties": {
"bot_image": { "default": null, "type": ["string", "null"] },
"bot_name": { "type": ["string", "null"] },
"deduplication_key": { "default": null, "type": ["string", "null"] },
"enter_message": { "default": null, "type": ["string", "null"] },
"extra": { "default": null },
"noone_joined_timeout": {
"default": null,
"type": ["integer", "null"],
"format": "int32"
},
"recording_mode": {
"anyOf": [
{ "anyOf": [{ "$ref": "#/components/schemas/RecordingMode" }, { "type": "null" }] },
{ "type": "null" }
]
},
"speech_to_text": {
"default": null,
"anyOf": [
{ "anyOf": [{ "$ref": "#/components/schemas/SpeechToText" }, { "type": "null" }] },
{ "type": "null" }
]
},
"streaming_audio_frequency": {
"default": null,
"anyOf": [
{ "anyOf": [{ "$ref": "#/components/schemas/AudioFrequency" }, { "type": "null" }] },
{ "type": "null" }
]
},
"streaming_input": { "default": null, "type": ["string", "null"] },
"streaming_output": { "default": null, "type": ["string", "null"] },
"waiting_room_timeout": {
"default": null,
"type": ["integer", "null"],
"format": "int32"
},
"webhook_url": { "type": ["string", "null"] }
}
},
"BotWithParams": {
"type": "object",
"required": [
"account_id",
"bot_name",
"bot_param_id",
"created_at",
"diarization_v2",
"ended_at",
"extra",
"id",
"meeting_url",
"mp4_s3_path",
"reserved",
"uuid",
"webhook_url"
],
"properties": {
"account_id": { "type": "integer", "format": "int32" },
"bot_image": { "type": ["string", "null"] },
"bot_name": { "type": "string" },
"bot_param_id": { "type": "integer", "format": "int32" },
"created_at": { "$ref": "#/components/schemas/DateTime" },
"deduplication_key": { "type": ["string", "null"] },
"diarization_v2": { "type": "boolean" },
"ended_at": { "$ref": "#/components/schemas/OptionalDateTime" },
"enter_message": { "type": ["string", "null"] },
"errors": { "type": ["string", "null"] },
"event_id": { "type": ["integer", "null"], "format": "int32" },
"extra": { "$ref": "#/components/schemas/Extra" },
"id": { "type": "integer", "format": "int32" },
"meeting_url": { "type": "string" },
"mp4_s3_path": { "type": "string" },
"noone_joined_timeout": { "type": ["integer", "null"], "format": "int32" },
"recording_mode": {
"anyOf": [{ "$ref": "#/components/schemas/RecordingMode" }, { "type": "null" }]
},
"reserved": { "type": "boolean" },
"scheduled_bot_id": { "type": ["integer", "null"], "format": "int32" },
"session_id": { "type": ["string", "null"] },
"speech_to_text_api_key": { "type": ["string", "null"] },
"speech_to_text_provider": {
"anyOf": [{ "$ref": "#/components/schemas/SpeechToTextProvider" }, { "type": "null" }]
},
"streaming_audio_frequency": {
"anyOf": [{ "$ref": "#/components/schemas/AudioFrequency" }, { "type": "null" }]
},
"streaming_input": { "type": ["string", "null"] },
"streaming_output": { "type": ["string", "null"] },
"uuid": { "type": "string", "format": "uuid" },
"waiting_room_timeout": { "type": ["integer", "null"], "format": "int32" },
"webhook_url": { "type": "string" }
}
},
"Calendar": {
"type": "object",
"required": ["email", "google_id", "name", "uuid"],
"properties": {
"email": { "type": "string" },
"google_id": { "type": "string" },
"name": { "type": "string" },
"resource_id": { "type": ["string", "null"] },
"uuid": { "type": "string", "format": "uuid" }
}
},
"CalendarListEntry": {
"type": "object",
"required": ["email", "id", "is_primary"],
"properties": {
"email": { "type": "string" },
"id": { "type": "string" },
"is_primary": { "type": "boolean" }
}
},
"CreateCalendarParams": {
"type": "object",
"required": ["oauth_client_id", "oauth_client_secret", "oauth_refresh_token", "platform"],
"properties": {
"oauth_client_id": { "type": "string" },
"oauth_client_secret": { "type": "string" },
"oauth_refresh_token": { "type": "string" },
"platform": { "$ref": "#/components/schemas/Provider" },
"raw_calendar_id": { "type": ["string", "null"] }
}
},
"CreateCalendarResponse": {
"type": "object",
"required": ["calendar"],
"properties": { "calendar": { "$ref": "#/components/schemas/Calendar" } }
},
"DailyTokenConsumption": {
"type": "object",
"required": ["consumption_by_service", "date"],
"properties": {
"consumption_by_service": { "$ref": "#/components/schemas/TokenConsumptionByService" },
"date": { "type": "string" }
}
},
"DateTime": { "type": "string", "format": "date-time" },
"DeleteResponse": {
"type": "object",
"required": ["ok", "status"],
"properties": {
"ok": {
"description": "Whether the request was processed successfully",
"type": "boolean"
},
"status": {
"description": "The detailed status of the deletion operation",
"$ref": "#/components/schemas/DeleteStatus"
}
}
},
"DeleteStatus": {
"oneOf": [
{
"description": "All data was successfully deleted",
"type": "string",
"enum": ["deleted"]
},
{
"description": "Some data was deleted, but other parts couldn't be removed",
"type": "string",
"enum": ["partiallyDeleted"]
},
{
"description": "No data needed to be deleted as it was already removed",
"type": "string",
"enum": ["alreadyDeleted"]
},
{
"description": "No data was found for the specified bot",
"type": "string",
"enum": ["noDataFound"]
}
]
},
"EndMeetingQuery": {
"type": "object",
"required": ["bot_uuid"],
"properties": { "bot_uuid": { "type": "string" } }
},
"EndMeetingTrampolineQuery": {
"type": "object",
"required": ["bot_uuid"],
"properties": { "bot_uuid": { "type": "string" } }
},
"EndMeetingTrampolineRequest": {
"type": "object",
"required": ["diarization_v2"],
"properties": { "diarization_v2": { "type": "boolean" } }
},
"Event": {
"type": "object",
"required": [
"attendees",
"calendar_uuid",
"deleted",
"end_time",
"google_id",
"is_organizer",
"is_recurring",
"last_updated_at",
"meeting_url",
"name",
"raw",
"start_time",
"uuid"
],
"properties": {
"attendees": { "type": "array", "items": { "$ref": "#/components/schemas/Attendee" } },
"bot_param": {
"description": "Associated bot parameters if a bot is scheduled for this event",
"anyOf": [{ "$ref": "#/components/schemas/BotParam" }, { "type": "null" }]
},
"calendar_uuid": { "type": "string", "format": "uuid" },
"deleted": {
"description": "Indicates whether this event has been deleted",
"type": "boolean"
},
"end_time": {
"description": "The end time of the event in UTC timezone",
"type": "string",
"format": "date-time"
},
"google_id": {
"description": "The unique identifier of the event from the calendar provider (Google, Microsoft)",
"type": "string"
},
"is_organizer": {
"description": "Indicates whether the current user is the organizer of this event",
"type": "boolean"
},
"is_recurring": {
"description": "Indicates whether this event is part of a recurring series",
"type": "boolean"
},
"last_updated_at": {
"description": "The timestamp when this event was last updated",
"type": "string",
"format": "date-time"
},
"meeting_url": {
"description": "The URL that can be used to join the meeting (if available)",
"type": "string"
},
"name": { "description": "The title/name of the calendar event", "type": "string" },
"raw": {
"description": "The raw calendar data from the provider in JSON format",
"$ref": "#/components/schemas/Extra"
},
"recurring_event_id": {
"description": "For recurring events, the ID of the parent recurring event series (if applicable)",
"type": ["string", "null"]
},
"start_time": {
"description": "The start time of the event in UTC timezone",
"type": "string",
"format": "date-time"
},
"uuid": { "type": "string", "format": "uuid" }
}
},
"Extra": { "description": "Custom data object", "additionalProperties": true },
"FailedRecordRequest": {
"type": "object",
"required": ["meeting_url", "message"],
"properties": { "meeting_url": { "type": "string" }, "message": { "type": "string" } }
},
"GetAllBotsQuery": {
"type": "object",
"required": ["limit", "offset"],
"properties": {
"bot_id": { "type": ["string", "null"] },
"end_date": { "type": ["string", "null"], "format": "partial-date-time" },
"limit": { "type": "integer", "format": "int32" },
"offset": { "type": "integer", "format": "int32" },
"start_date": { "type": ["string", "null"], "format": "partial-date-time" }
}
},
"GetMeetingDataQuery": {
"type": "object",
"required": ["bot_id"],
"properties": { "bot_id": { "type": "string" } }
},
"GetStartedAccount": {
"type": "object",
"required": ["email"],
"properties": {
"email": { "type": "string" },
"firstname": { "type": ["string", "null"] },
"google_token_id": { "type": ["string", "null"] },
"lastname": { "type": ["string", "null"] },
"microsoft_token_id": { "type": ["string", "null"] }
}
},
"GetWebhookUrlResponse": {
"type": "object",
"properties": { "webhook_url": { "type": ["string", "null"] } }
},
"GetstartedQuery": {
"type": "object",
"properties": { "redirect_url": { "type": ["string", "null"] } }
},
"JoinRequest": {
"type": "object",
"required": ["bot_name", "meeting_url", "reserved"],
"properties": {
"automatic_leave": {
"description": "The bot will leave the meeting automatically after the timeout, defaults to 600 seconds.",
"anyOf": [{ "$ref": "#/components/schemas/AutomaticLeaveRequest" }, { "type": "null" }]
},
"bot_image": {
"description": "The image to use for the bot, must be a URL. Recommended ratio is 4:3.",
"type": ["string", "null"],
"format": "uri"
},
"bot_name": { "type": "string" },
"deduplication_key": {
"description": "We prevent multiple bots with same API key joining a meeting within 5 mins, unless overridden by deduplication_key.",
"type": ["string", "null"]
},
"entry_message": {
"description": "There are no entry messages on Microsoft Teams as guests outside of an organization do not have access to the chat.",
"type": ["string", "null"]
},
"extra": {
"description": "A Json object that allows you to add custom data to a bot for your convenience, e.g. your end user's ID.",
"default": null,
"$ref": "#/components/schemas/Extra"
},
"meeting_url": { "type": "string" },
"recording_mode": {
"description": "The recording mode for the bot, defaults to 'speaker_view'.",
"anyOf": [{ "$ref": "#/components/schemas/RecordingMode" }, { "type": "null" }]
},
"reserved": {
"description": "Whether or not the bot should come from the available pool of bots or be a dedicated bot. Reserved bots come in exactly 4 minutes after the request.",
"type": "boolean"
},
"speech_to_text": {
"description": "The default speech to text provider is Gladia.",
"anyOf": [{ "$ref": "#/components/schemas/SpeechToText" }, { "type": "null" }]
},
"start_time": {
"description": "Unix timestamp (in milliseconds) for when the bot should join the meeting. The bot joins 4 minutes before the start time.",
"type": ["integer", "null"],
"format": "uint64",
"minimum": 0.0
},
"streaming": {
"description": "WebSocket streams for 16kHz audio. Input stream receives audio sent to the bot. Output stream receives audio from the bot.",
"anyOf": [{ "$ref": "#/components/schemas/StreamingApiParameter" }, { "type": "null" }]
},
"webhook_url": {
"description": "A webhook URL to send events to, overrides the webhook URL set in your account settings.",
"type": ["string", "null"]
}
},
"additionalProperties": false
},
"JoinRequestScheduled": {
"type": "object",
"required": ["bot_param_id", "meeting_url", "schedule_origin"],
"properties": {
"bot_param_id": { "type": "integer", "format": "int32" },
"meeting_url": { "type": "string" },
"schedule_origin": { "$ref": "#/components/schemas/ScheduleOrigin" }
},
"additionalProperties": false
},
"JoinResponse": {
"type": "object",
"required": ["bot_id"],
"properties": { "bot_id": { "type": "string", "format": "uuid" } }
},
"JoinResponse2": {
"type": "object",
"required": ["bot_id"],
"properties": { "bot_id": { "type": "string", "format": "uuid" } }
},
"LeaveResponse": {
"type": "object",
"required": ["ok"],
"properties": { "ok": { "type": "boolean" } }
},
"ListEventResponse": {
"type": "object",
"required": ["data"],
"properties": {
"data": {
"description": "Vector of calendar events matching the list criteria",
"type": "array",
"items": { "$ref": "#/components/schemas/Event" }
},
"next": {
"description": "Optional url for fetching the next page of results if there are more results to fetch. The limit of events returned is 100. When None, there are no more results to fetch.",
"type": ["string", "null"]
}
}
},
"ListRawCalendarsParams": {
"type": "object",
"required": ["oauth_client_id", "oauth_client_secret", "oauth_refresh_token", "platform"],
"properties": {
"oauth_client_id": { "type": "string" },
"oauth_client_secret": { "type": "string" },
"oauth_refresh_token": { "type": "string" },
"platform": { "$ref": "#/components/schemas/Provider" }
}
},
"ListRawCalendarsResponse": {
"type": "object",
"required": ["calendars"],
"properties": {
"calendars": {
"type": "array",
"items": { "$ref": "#/components/schemas/CalendarListEntry" }
}
}
},
"ListRecentBotsQuery": {
"type": "object",
"properties": {
"bot_name": {
"description": "Filter bots by name containing this string.\n\nPerforms a case-insensitive partial match on the bot's name. Useful for finding bots with specific naming conventions or to locate a particular bot when you don't have its ID.\n\nExample: \"Sales\" would match \"Sales Meeting\", \"Quarterly Sales\", etc.",
"type": ["string", "null"]
},
"created_after": {
"description": "Filter bots created after this date (ISO format).\n\nLimits results to bots created at or after the specified timestamp. Used for time-based filtering to find recent additions.\n\nFormat: ISO-8601 date-time string (YYYY-MM-DDThh:mm:ss) Example: \"2023-05-01T00:00:00\"",
"type": ["string", "null"]
},
"created_before": {
"description": "Filter bots created before this date (ISO format).\n\nLimits results to bots created at or before the specified timestamp. Used for time-based filtering to exclude recent additions.\n\nFormat: ISO-8601 date-time string (YYYY-MM-DDThh:mm:ss) Example: \"2023-05-31T23:59:59\"",
"type": ["string", "null"]
},
"cursor": {
"description": "Cursor for pagination, obtained from previous response.\n\nUsed for retrieving the next set of results after a previous call. The cursor value is returned in the `nextCursor` field of responses that have additional results available.\n\nFormat: Base64-encoded string containing pagination metadata",
"type": ["string", "null"]
},
"filter_by_extra": {
"description": "Filter bots by matching values in the extra JSON payload.\n\nThis parameter performs in-memory filtering on the `extra` JSON field, similar to a SQL WHERE clause. It reduces the result set to only include bots that match all specified conditions.\n\nFormat specifications: - Single condition: \"field:value\" - Multiple conditions: \"field1:value1,field2:value2\"\n\nExamples: - \"customer_id:12345\" - Only bots with this customer ID - \"status:active,project:sales\" - Only active bots from sales projects\n\nNotes: - All conditions must match for a bot to be included - Values are matched exactly (case-sensitive) - Bots without the specified field are excluded",
"type": ["string", "null"]
},
"limit": {
"description": "Maximum number of bots to return in a single request.\n\nLimits the number of results returned in a single API call. This parameter helps control response size and page length.\n\nDefault: 10 Minimum: 1 Maximum: 50",
"default": 10,
"type": "integer",
"format": "int32"
},
"meeting_url": {
"description": "Filter bots by meeting URL containing this string.\n\nPerforms a case-insensitive partial match on the bot's meeting URL. Use this to find bots associated with specific meeting platforms or particular meeting IDs.\n\nExample: \"zoom.us\" would match all Zoom meetings",
"type": ["string", "null"]
},
"sort_by_extra": {
"description": "Sort the results by a field in the extra JSON payload.\n\nThis parameter performs in-memory sorting on the `extra` JSON field, similar to a SQL ORDER BY clause. It changes the order of results but not which results are included.\n\nFormat specifications: - Default (ascending): \"field\" - Explicit direction: \"field:asc\" or \"field:desc\"\n\nExamples: - \"customer_id\" - Sort by customer_id (ascending) - \"priority:desc\" - Sort by priority (descending)\n\nNotes: - Applied after all filtering - String comparison is used for sorting - Bots with the field come before bots without it - Can be combined with filter_by_extra",
"type": ["string", "null"]
},
"speaker_name": {
"description": "NOTE: this is a preview feature and not yet available\n\nFilter bots by speaker name containing this string.\n\nPerforms a case-insensitive partial match on the speakers in the meeting. Useful for finding meetings that included a specific person.\n\nExample: \"John\" would match meetings with speakers like \"John Smith\" or \"John Doe\"",
"type": ["string", "null"]
}
}
},
"ListRecentBotsResponse": {
"type": "object",
"required": ["lastUpdated", "recentBots"],
"properties": {
"lastUpdated": {
"description": "Timestamp of when this data was generated",
"type": "string"
},
"nextCursor": {
"description": "Cursor for fetching the next page, null if no more results",
"type": ["string", "null"]
},
"recentBots": {
"description": "List of recent bots with metadata",
"type": "array",
"items": { "$ref": "#/components/schemas/RecentBotEntry" }
}
}
},
"LoginAccount": {
"type": "object",
"required": ["password", "pseudo"],
"properties": {
"app_signin_token": { "type": ["string", "null"] },
"google_chrome_token_id": { "type": ["string", "null"] },
"google_token_id": { "type": ["string", "null"] },
"microsoft_token_id": { "type": ["string", "null"] },
"password": { "type": "string" },
"pseudo": { "type": "string" }
}
},
"LoginQuery": {
"type": "object",
"properties": { "redirect_url": { "type": ["string", "null"] } }
},
"Metadata": {
"type": "object",
"required": ["bot_data", "content_deleted", "duration", "mp4"],
"properties": {
"bot_data": { "$ref": "#/components/schemas/BotData" },
"content_deleted": {
"description": "Indicates whether the recording has been deleted",
"type": "boolean"
},
"duration": {
"description": "Duration of the recording in seconds",
"type": "integer",
"format": "int64"
},
"mp4": {
"description": "URL to access the recording MP4 file. Will be null if content has been deleted.",
"type": "string"
}
}
},
"OptionalDateTime": { "type": ["string", "null"], "format": "date-time" },
"PostWebhookUrlRequest": {
"type": "object",
"required": ["webhook_url"],
"properties": { "webhook_url": { "type": "string" } }
},
"Provider": {
"description": "Fields with value `\"simple\"` parse as `Kind::Simple`. Fields with value `\"fancy\"` parse as `Kind::SoFancy`.",
"type": "string",
"enum": ["Google", "Microsoft"]
},
"QueryListEvent": {
"type": "object",
"required": ["calendar_id"],
"properties": {
"attendee_email": {
"description": "If provided, filters events to include only those with this attendee's email address Example: \"jane.smith@example.com\"",
"type": ["string", "null"]
},
"calendar_id": {
"description": "Calendar ID to filter events by This is required to specify which calendar's events to retrieve",
"type": "string"
},
"cursor": {
"description": "Optional cursor for pagination This value is included in the `next` field of the previous response",
"type": ["string", "null"]
},
"organizer_email": {
"description": "If provided, filters events to include only those with this organizer's email address Example: \"john.doe@example.com\"",
"type": ["string", "null"]
},
"start_date_gte": {
"description": "If provided, filters events to include only those with a start date greater than or equal to this timestamp Format: ISO-8601 string, e.g., \"2023-01-01T00:00:00Z\"",
"type": ["string", "null"]
},
"start_date_lte": {
"description": "If provided, filters events to include only those with a start date less than or equal to this timestamp Format: ISO-8601 string, e.g., \"2023-12-31T23:59:59Z\"",
"type": ["string", "null"]
},
"status": {
"description": "Filter events by meeting status Valid values: \"upcoming\" (default) returns events after current time, \"past\" returns previous events, \"all\" returns both",
"type": ["string", "null"]
},
"updated_at_gte": {
"description": "If provided, fetches only events updated at or after this timestamp Format: ISO-8601 string, e.g., \"2023-01-01T00:00:00Z\"",
"type": ["string", "null"]
}
}
},
"QueryPatchRecordEvent": {
"type": "object",
"properties": {
"all_occurrences": {
"description": "schedule a bot to all occurences of a recurring event",
"type": ["boolean", "null"]
}
}
},
"QueryScheduleRecordEvent": {
"type": "object",
"properties": {
"all_occurrences": {
"description": "schedule a bot to all occurences of a recurring event",
"type": ["boolean", "null"]
}
}
},
"QueryUnScheduleRecordEvent": {
"type": "object",
"properties": {
"all_occurrences": {
"description": "unschedule a bot from all occurences of a recurring event",
"type": ["boolean", "null"]
}
}
},
"ReceivedMessageQuery": {
"type": "object",
"required": ["session_id"],
"properties": { "session_id": { "type": "string" } }
},
"RecentBotEntry": {
"type": "object",
"required": [
"content_deleted",
"createdAt",
"extra",
"id",
"meetingUrl",
"name",
"speakers"
],
"properties": {
"accessCount": {
"description": "Number of times this bot data has been accessed (if tracked)",
"type": ["integer", "null"],
"format": "int32"
},
"content_deleted": {
"description": "Indicates whether the recording content has been deleted",
"type": "boolean"
},
"createdAt": { "description": "Creation timestamp of the bot", "type": "string" },
"duration": {
"description": "Duration of the bot session in seconds (if completed)",
"type": ["integer", "null"],
"format": "int64"
},
"endedAt": {
"description": "End time of the bot session (if completed)",
"type": ["string", "null"]
},
"extra": {
"description": "Extra custom data provided during bot creation",
"$ref": "#/components/schemas/Extra"
},
"id": {
"description": "Unique identifier of the bot",
"type": "string",
"format": "uuid"
},
"lastAccessedAt": {
"description": "Last time this bot data was accessed (if available)",
"type": ["string", "null"]
},
"meetingUrl": { "description": "URL of the meeting the bot joined", "type": "string" },
"name": { "description": "Name of the bot", "type": "string" },
"sessionId": {
"description": "Session ID if the bot is active",
"type": ["string", "null"]
},
"speakers": {
"description": "List of unique speaker names from the bot's transcripts",
"type": "array",
"items": { "type": "string" }
}
}
},
"RecognizerWord": {
"type": "object",
"required": ["end_time", "start_time", "text"],
"properties": {
"end_time": { "type": "number", "format": "double" },
"start_time": { "type": "number", "format": "double" },
"text": { "type": "string" },
"user_id": { "type": ["integer", "null"], "format": "int32" }
}
},
"RecordingMode": {
"description": "Recording mode for the bot",
"oneOf": [
{
"description": "Records the active speaker view",
"type": "string",
"enum": ["speaker_view"]
},
{
"description": "Records the gallery view showing multiple participants",
"type": "string",
"enum": ["gallery_view"]
},
{
"description": "Records only the audio from the meeting",
"type": "string",
"enum": ["audio_only"]
}
]
},
"ResyncAllCalendarsResponse": {
"type": "object",
"required": ["errors", "synced_calendars"],
"properties": {
"errors": {
"description": "List of calendar UUIDs that failed to resync, with detailed error messages explaining the failure reason",
"type": "array",
"items": {
"type": "array",
"items": [{ "type": "string", "format": "uuid" }, { "type": "string" }],
"maxItems": 2,
"minItems": 2
}
},
"synced_calendars": {
"description": "List of calendar UUIDs that were successfully resynced with their calendar provider (Google, Microsoft)",
"type": "array",
"items": { "type": "string", "format": "uuid" }
}
}
},
"ResyncAllResponse": {
"type": "object",
"required": ["errors", "synced_calendars"],
"properties": {
"errors": {
"description": "List of calendar UUIDs that failed to resync, with error messages",
"type": "array",
"items": {
"type": "array",
"items": [{ "type": "string", "format": "uuid" }, { "type": "string" }],
"maxItems": 2,
"minItems": 2
}
},
"synced_calendars": {
"description": "List of calendar UUIDs that were successfully resynced",
"type": "array",
"items": { "type": "string", "format": "uuid" }
}
}
},
"RetranscribeBody": {
"type": "object",
"required": ["bot_uuid"],
"properties": {
"bot_uuid": { "type": "string" },
"speech_to_text": {
"anyOf": [{ "$ref": "#/components/schemas/SpeechToText" }, { "type": "null" }]
},
"webhook_url": { "type": ["string", "null"] }
}
},
"RetryWebhookQuery": {
"type": "object",
"required": ["bot_uuid"],
"properties": { "bot_uuid": { "type": "string" } }
},
"ScheduleOrigin": {
"oneOf": [
{
"type": "object",
"required": ["Event"],
"properties": {
"Event": {
"type": "object",
"required": ["id"],
"properties": { "id": { "type": "integer", "format": "int32" } }
}
},
"additionalProperties": false
},
{
"type": "object",
"required": ["ScheduledBot"],
"properties": {
"ScheduledBot": {
"type": "object",
"required": ["id"],
"properties": { "id": { "type": "integer", "format": "int32" } }
}
},
"additionalProperties": false
}
]
},
"SpeechToText": {
"anyOf": [
{ "$ref": "#/components/schemas/SpeechToTextApiParameter" },
{ "$ref": "#/components/schemas/SpeechToTextProvider" }
]
},
"SpeechToText2": {
"type": "object",
"required": ["provider"],
"properties": {
"api_key": { "type": ["string", "null"] },
"provider": { "$ref": "#/components/schemas/SpeechToTextProvider" }
}
},
"SpeechToTextApiParameter": {
"type": "object",
"required": ["provider"],
"properties": {
"api_key": { "type": ["string", "null"] },
"provider": { "$ref": "#/components/schemas/SpeechToTextProvider" }
}
},
"SpeechToTextProvider": { "type": "string", "enum": ["Gladia", "Runpod", "Default"] },
"StartRecordFailedQuery": {
"type": "object",
"properties": { "bot_uuid": { "type": ["string", "null"] } }
},
"StreamingApiParameter": {
"type": "object",
"properties": {
"audio_frequency": {
"anyOf": [{ "$ref": "#/components/schemas/AudioFrequency" }, { "type": "null" }]
},
"input": { "type": ["string", "null"] },
"output": { "type": ["string", "null"] }
}
},
"SyncResponse": {
"type": "object",
"properties": {
"affected_event_uuids": {
"description": "UUIDs of affected events",
"type": ["array", "null"],
"items": { "type": "string", "format": "uuid" }
},
"has_updates": {
"description": "timestamp of last updated event if some events has been updated.",
"type": ["string", "null"],
"format": "date-time"
}
}
},
"SystemTime": {
"type": "object",
"required": ["nanos_since_epoch", "secs_since_epoch"],
"properties": {
"nanos_since_epoch": { "type": "integer", "format": "uint32", "minimum": 0.0 },
"secs_since_epoch": { "type": "integer", "format": "uint64", "minimum": 0.0 }
}
},
"TokenConsumptionByService": {
"type": "object",
"required": [
"duration",
"recording_tokens",
"streaming_input_hour",
"streaming_input_tokens",
"streaming_output_hour",
"streaming_output_tokens",
"transcription_byok_hour",
"transcription_byok_tokens",
"transcription_hour",
"transcription_tokens"
],
"properties": {
"duration": { "type": "string" },
"recording_tokens": { "type": "string" },
"streaming_input_hour": { "type": "string" },
"streaming_input_tokens": { "type": "string" },
"streaming_output_hour": { "type": "string" },
"streaming_output_tokens": { "type": "string" },
"transcription_byok_hour": { "type": "string" },
"transcription_byok_tokens": { "type": "string" },
"transcription_hour": { "type": "string" },
"transcription_tokens": { "type": "string" }
}
},
"TokenConsumptionQuery": {
"type": "object",
"required": ["end_date", "start_date"],
"properties": {
"end_date": { "type": "string", "format": "partial-date-time" },
"start_date": { "type": "string", "format": "partial-date-time" }
}
},
"Transcript": {
"type": "object",
"required": ["bot_id", "id", "speaker", "start_time", "words"],
"properties": {
"bot_id": { "type": "integer", "format": "int32" },
"end_time": { "type": ["number", "null"], "format": "double" },
"id": { "type": "integer", "format": "int32" },
"lang": { "type": ["string", "null"] },
"speaker": { "type": "string" },
"start_time": { "type": "number", "format": "double" },
"user_id": { "type": ["integer", "null"], "format": "int32" },
"words": { "type": "array", "items": { "$ref": "#/components/schemas/Word" } }
}
},
"Transcript2": {
"type": "object",
"required": ["bot_id", "speaker", "start_time"],
"properties": {
"bot_id": { "type": "integer", "format": "int32" },
"end_time": { "type": ["number", "null"], "format": "double" },
"lang": { "type": ["string", "null"] },
"speaker": { "type": "string" },
"start_time": { "type": "number", "format": "double" },
"user_id": { "type": ["integer", "null"], "format": "int32" }
}
},
"Transcript3": {
"type": "object",
"required": ["bot_id", "id", "speaker", "start_time"],
"properties": {
"bot_id": { "type": "integer", "format": "int32" },
"end_time": { "type": ["number", "null"], "format": "double" },
"id": { "type": "integer", "format": "int32" },
"lang": { "type": ["string", "null"] },
"speaker": { "type": "string" },
"start_time": { "type": "number", "format": "double" },
"user_id": { "type": ["integer", "null"], "format": "int32" }
}
},
"Transcript4": {
"type": "object",
"required": ["id"],
"properties": {
"bot_id": { "type": ["integer", "null"], "format": "int32" },
"end_time": { "type": ["number", "null"], "format": "double" },
"id": { "type": "integer", "format": "int32" },
"lang": { "type": ["string", "null"] },
"speaker": { "type": ["string", "null"] },
"start_time": { "type": ["number", "null"], "format": "double" },
"user_id": { "type": ["integer", "null"], "format": "int32" }
}
},
"UpdateCalendarParams": {
"type": "object",
"required": ["oauth_client_id", "oauth_client_secret", "oauth_refresh_token", "platform"],
"properties": {
"oauth_client_id": { "type": "string" },
"oauth_client_secret": { "type": "string" },
"oauth_refresh_token": { "type": "string" },
"platform": { "$ref": "#/components/schemas/Provider" }
}
},
"UserTokensResponse": {
"type": "object",
"required": ["available_tokens", "total_tokens_purchased"],
"properties": {
"available_tokens": { "type": "string" },
"last_purchase_date": { "type": ["string", "null"], "format": "partial-date-time" },
"total_tokens_purchased": { "type": "string" }
}
},
"Version": {
"type": "object",
"required": ["build_date", "location"],
"properties": { "build_date": { "type": "string" }, "location": { "type": "string" } }
},
"Word": {
"type": "object",
"required": ["bot_id", "end_time", "id", "start_time", "text"],
"properties": {
"bot_id": { "type": "integer", "format": "int32" },
"end_time": { "type": "number", "format": "double" },
"id": { "type": "integer", "format": "int32" },
"start_time": { "type": "number", "format": "double" },
"text": { "type": "string" },
"user_id": { "type": ["integer", "null"], "format": "int32" }
}
}
}
},
"security": [{ "ApiKeyAuth": [] }, { "LegacyApiKeyAuth": [] }]
}