---
title: "Botevent data model"
url: "https://docs.unified.to/calendar/botevent/model"
description: "The Botevent data model object in Unified's Botevent API: 10 fields, including created_at, bot_id and type, with types and enum values."
---
# Botevent data model

 This object has no API endpoints of its own; it is delivered only through [webhooks](https://docs.unified.to/unified/webhook/model.md). 

 View field support, webhooks, and list parameters for each integration on the [Supported Integrations](https://docs.unified.to/calendar/integrations.md) page. 

| Field                                      | Type                                       | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                                                |
| ------------------------------------------ | ------------------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| id                                         | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| created\_at                                | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| bot\_id                                    | string                                     | No       | Reference to the calendar\_bot                                                                                                                                                                                                                                                                                                                                                                                                             |
| type                                       | enum                                       | No       | Values: BOT\_STATUS\_CHANGE, PARTICIPANT\_JOINED, PARTICIPANT\_LEFT, PARTICIPANT\_UPDATED, PARTICIPANT\_WEBCAM\_ON, PARTICIPANT\_WEBCAM\_OFF, PARTICIPANT\_SCREENSHARE\_ON, PARTICIPANT\_SCREENSHARE\_OFF, PARTICIPANT\_SPEECH\_ON, PARTICIPANT\_SPEECH\_OFF, CHAT\_MESSAGE\_RECEIVED, TRANSCRIPT\_RECEIVED, TRANSCRIPT\_PARTIAL, VIDEO\_FRAME\_RECEIVED, AUDIO\_FRAME\_RECEIVED, RECORDING\_STARTED, RECORDING\_STOPPED, RECORDING\_READY |
| status\_change                             | object                                     | No       | For BOT\_STATUS\_CHANGE                                                                                                                                                                                                                                                                                                                                                                                                                    |
| status\_change.status                      | enum                                       | No       | Values: READY, JOINING\_CALL, IN\_WAITING\_ROOM, IN\_CALL\_NOT\_RECORDING, RECORDING\_PERMISSION\_ALLOWED, RECORDING\_PERMISSION\_DENIED, IN\_CALL\_RECORDING, CALL\_ENDED, DONE, FATAL                                                                                                                                                                                                                                                    |
| status\_change.changed\_at                 | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| status\_change.sub\_code                   | string                                     | No       | Platform-specific status sub-code                                                                                                                                                                                                                                                                                                                                                                                                          |
| status\_change.message                     | string                                     | No       | Human-readable status message                                                                                                                                                                                                                                                                                                                                                                                                              |
| participant                                | object                                     | No       | For participant events                                                                                                                                                                                                                                                                                                                                                                                                                     |
| participant.id                             | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| participant.name                           | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| participant.email                          | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| participant.is\_host                       | boolean                                    | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| participant.is\_cohost                     | boolean                                    | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| participant.joined\_at                     | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| participant.left\_at                       | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| participant.platform                       | string                                     | No       | Platform-specific participant identifier                                                                                                                                                                                                                                                                                                                                                                                                   |
| participant.is\_bot                        | boolean                                    | No       | Whether this participant is a bot                                                                                                                                                                                                                                                                                                                                                                                                          |
| participant.is\_self                       | boolean                                    | No       | Whether this participant is the current bot                                                                                                                                                                                                                                                                                                                                                                                                |
| participant.speaking                       | boolean                                    | No       | Whether participant is currently speaking                                                                                                                                                                                                                                                                                                                                                                                                  |
| participant.webcam\_on                     | boolean                                    | No       | Whether participant's webcam is on                                                                                                                                                                                                                                                                                                                                                                                                         |
| participant.screenshare\_on                | boolean                                    | No       | Whether participant is sharing screen                                                                                                                                                                                                                                                                                                                                                                                                      |
| participant.platform\_metadata             | object                                     | No       | Platform-specific metadata                                                                                                                                                                                                                                                                                                                                                                                                                 |
| transcript                                 | object                                     | No       | For TRANSCRIPT\_RECEIVED, TRANSCRIPT\_PARTIAL                                                                                                                                                                                                                                                                                                                                                                                              |
| transcript.id                              | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| transcript.created\_at                     | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| transcript.start\_at                       | string (date-time)                         | No       | Relative timestamp from recording start (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                           |
| transcript.end\_at                         | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| transcript.text                            | string                                     | Yes      |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| transcript.participant                     | CalendarBotevent\_transcript\_participant  | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| transcript.participant.id                  | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| transcript.participant.name                | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| transcript.participant.email               | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| transcript.participant.is\_host            | boolean                                    | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| transcript.participant.is\_cohost          | boolean                                    | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| transcript.participant.joined\_at          | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| transcript.participant.left\_at            | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| transcript.participant.platform            | string                                     | No       | Platform-specific participant identifier                                                                                                                                                                                                                                                                                                                                                                                                   |
| transcript.participant.is\_bot             | boolean                                    | No       | Whether this participant is a bot                                                                                                                                                                                                                                                                                                                                                                                                          |
| transcript.participant.is\_self            | boolean                                    | No       | Whether this participant is the current bot                                                                                                                                                                                                                                                                                                                                                                                                |
| transcript.participant.speaking            | boolean                                    | No       | Whether participant is currently speaking                                                                                                                                                                                                                                                                                                                                                                                                  |
| transcript.participant.webcam\_on          | boolean                                    | No       | Whether participant's webcam is on                                                                                                                                                                                                                                                                                                                                                                                                         |
| transcript.participant.screenshare\_on     | boolean                                    | No       | Whether participant is sharing screen                                                                                                                                                                                                                                                                                                                                                                                                      |
| transcript.participant.platform\_metadata  | object                                     | No       | Platform-specific metadata                                                                                                                                                                                                                                                                                                                                                                                                                 |
| transcript.language                        | string                                     | No       | ISO language code                                                                                                                                                                                                                                                                                                                                                                                                                          |
| transcript.is\_final                       | boolean                                    | No       | Whether this is a final transcript (vs. partial)                                                                                                                                                                                                                                                                                                                                                                                           |
| transcript.words                           | CalendarBotTranscriptWord\[\]              | No       | Word-level breakdown with timestamps                                                                                                                                                                                                                                                                                                                                                                                                       |
| transcript.words\[\].text                  | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| transcript.words\[\].start\_at             | string (date-time)                         | No       | Relative timestamp from recording start (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                           |
| transcript.words\[\].end\_at               | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| transcript.words\[\].confidence            | number                                     | No       | 0-1 confidence score                                                                                                                                                                                                                                                                                                                                                                                                                       |
| transcript.confidence                      | number                                     | No       | 0-1 confidence score                                                                                                                                                                                                                                                                                                                                                                                                                       |
| chat\_message                              | object                                     | No       | For CHAT\_MESSAGE\_RECEIVED                                                                                                                                                                                                                                                                                                                                                                                                                |
| chat\_message.id                           | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.created\_at                  | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| chat\_message.sender                       | CalendarBotevent\_chat\_message\_sender    | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.sender.id                    | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.sender.name                  | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.sender.email                 | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.sender.is\_host              | boolean                                    | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.sender.is\_cohost            | boolean                                    | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.sender.joined\_at            | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| chat\_message.sender.left\_at              | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| chat\_message.sender.platform              | string                                     | No       | Platform-specific participant identifier                                                                                                                                                                                                                                                                                                                                                                                                   |
| chat\_message.sender.is\_bot               | boolean                                    | No       | Whether this participant is a bot                                                                                                                                                                                                                                                                                                                                                                                                          |
| chat\_message.sender.is\_self              | boolean                                    | No       | Whether this participant is the current bot                                                                                                                                                                                                                                                                                                                                                                                                |
| chat\_message.sender.speaking              | boolean                                    | No       | Whether participant is currently speaking                                                                                                                                                                                                                                                                                                                                                                                                  |
| chat\_message.sender.webcam\_on            | boolean                                    | No       | Whether participant's webcam is on                                                                                                                                                                                                                                                                                                                                                                                                         |
| chat\_message.sender.screenshare\_on       | boolean                                    | No       | Whether participant is sharing screen                                                                                                                                                                                                                                                                                                                                                                                                      |
| chat\_message.sender.platform\_metadata    | object                                     | No       | Platform-specific metadata                                                                                                                                                                                                                                                                                                                                                                                                                 |
| chat\_message.message                      | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.is\_private                  | boolean                                    | No       | Whether sent privately vs. to everyone                                                                                                                                                                                                                                                                                                                                                                                                     |
| chat\_message.recipient                    | CalendarBotevent\_chat\_message\_recipient | No       | If private message, who it was sent to                                                                                                                                                                                                                                                                                                                                                                                                     |
| chat\_message.recipient.id                 | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.recipient.name               | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.recipient.email              | string                                     | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.recipient.is\_host           | boolean                                    | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.recipient.is\_cohost         | boolean                                    | No       |                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| chat\_message.recipient.joined\_at         | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| chat\_message.recipient.left\_at           | string (date-time)                         | No       | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)                                                                                                                                                                                                                                                                                                                                                                                                   |
| chat\_message.recipient.platform           | string                                     | No       | Platform-specific participant identifier                                                                                                                                                                                                                                                                                                                                                                                                   |
| chat\_message.recipient.is\_bot            | boolean                                    | No       | Whether this participant is a bot                                                                                                                                                                                                                                                                                                                                                                                                          |
| chat\_message.recipient.is\_self           | boolean                                    | No       | Whether this participant is the current bot                                                                                                                                                                                                                                                                                                                                                                                                |
| chat\_message.recipient.speaking           | boolean                                    | No       | Whether participant is currently speaking                                                                                                                                                                                                                                                                                                                                                                                                  |
| chat\_message.recipient.webcam\_on         | boolean                                    | No       | Whether participant's webcam is on                                                                                                                                                                                                                                                                                                                                                                                                         |
| chat\_message.recipient.screenshare\_on    | boolean                                    | No       | Whether participant is sharing screen                                                                                                                                                                                                                                                                                                                                                                                                      |
| chat\_message.recipient.platform\_metadata | object                                     | No       | Platform-specific metadata                                                                                                                                                                                                                                                                                                                                                                                                                 |
| audio\_frame                               | object                                     | No       | For AUDIO\_FRAME\_RECEIVED                                                                                                                                                                                                                                                                                                                                                                                                                 |
| audio\_frame.data                          | string                                     | No       | Base64 encoded audio data                                                                                                                                                                                                                                                                                                                                                                                                                  |
| audio\_frame.size                          | number                                     | No       | Size in bytes                                                                                                                                                                                                                                                                                                                                                                                                                              |
| audio\_frame.timestamp                     | number                                     | No       | Timestamp in milliseconds                                                                                                                                                                                                                                                                                                                                                                                                                  |
| audio\_frame.sample\_rate                  | number                                     | No       | Audio sample rate (e.g., 16000 Hz)                                                                                                                                                                                                                                                                                                                                                                                                         |
| audio\_frame.channels                      | number                                     | No       | Number of audio channels (1 = mono, 2 = stereo)                                                                                                                                                                                                                                                                                                                                                                                            |
| audio\_frame.format                        | string                                     | No       | Audio format (e.g., 'PCM', 'OPUS')                                                                                                                                                                                                                                                                                                                                                                                                         |
| audio\_frame.participant\_identifier       | string                                     | No       | Platform participant identifier (not a unified object ref)                                                                                                                                                                                                                                                                                                                                                                                 |
| video\_frame                               | object                                     | No       | For VIDEO\_FRAME\_RECEIVED                                                                                                                                                                                                                                                                                                                                                                                                                 |
| video\_frame.data                          | string                                     | No       | Base64 encoded video data                                                                                                                                                                                                                                                                                                                                                                                                                  |
| video\_frame.size                          | number                                     | No       | Size in bytes                                                                                                                                                                                                                                                                                                                                                                                                                              |
| video\_frame.timestamp                     | number                                     | No       | Timestamp in milliseconds                                                                                                                                                                                                                                                                                                                                                                                                                  |
| video\_frame.width                         | number                                     | No       | Frame width in pixels                                                                                                                                                                                                                                                                                                                                                                                                                      |
| video\_frame.height                        | number                                     | No       | Frame height in pixels                                                                                                                                                                                                                                                                                                                                                                                                                     |
| video\_frame.format                        | string                                     | No       | Video format (e.g., 'H264', 'VP8')                                                                                                                                                                                                                                                                                                                                                                                                         |
| video\_frame.fps                           | number                                     | No       | Frames per second                                                                                                                                                                                                                                                                                                                                                                                                                          |
| video\_frame.participant\_identifier       | string                                     | No       | Platform participant identifier (not a unified object ref)                                                                                                                                                                                                                                                                                                                                                                                 |

## TypeScript

```typescript
export type CalendarBotevent = {
	id?: string;
	created_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	bot_id?: string; // Reference to the calendar_bot
	type?: 'BOT_STATUS_CHANGE' | 'PARTICIPANT_JOINED' | 'PARTICIPANT_LEFT' | 'PARTICIPANT_UPDATED' | 'PARTICIPANT_WEBCAM_ON' | 'PARTICIPANT_WEBCAM_OFF' | 'PARTICIPANT_SCREENSHARE_ON' | 'PARTICIPANT_SCREENSHARE_OFF' | 'PARTICIPANT_SPEECH_ON' | 'PARTICIPANT_SPEECH_OFF' | 'CHAT_MESSAGE_RECEIVED' | 'TRANSCRIPT_RECEIVED' | 'TRANSCRIPT_PARTIAL' | 'VIDEO_FRAME_RECEIVED' | 'AUDIO_FRAME_RECEIVED' | 'RECORDING_STARTED' | 'RECORDING_STOPPED' | 'RECORDING_READY';
	status_change?: {
		status?: 'READY' | 'JOINING_CALL' | 'IN_WAITING_ROOM' | 'IN_CALL_NOT_RECORDING' | 'RECORDING_PERMISSION_ALLOWED' | 'RECORDING_PERMISSION_DENIED' | 'IN_CALL_RECORDING' | 'CALL_ENDED' | 'DONE' | 'FATAL'; 
		changed_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		sub_code?: string; // Platform-specific status sub-code 
		message?: string; // Human-readable status message 
	}; // For BOT_STATUS_CHANGE
	participant?: {
		id?: string; 
		name?: string; 
		email?: string; 
		is_host?: boolean; 
		is_cohost?: boolean; 
		joined_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		left_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		platform?: string; // Platform-specific participant identifier 
		is_bot?: boolean; // Whether this participant is a bot 
		is_self?: boolean; // Whether this participant is the current bot 
		speaking?: boolean; // Whether participant is currently speaking 
		webcam_on?: boolean; // Whether participant's webcam is on 
		screenshare_on?: boolean; // Whether participant is sharing screen 
		platform_metadata?: any; // Platform-specific metadata 
	}; // For participant events
	transcript?: {
		id?: string; 
		created_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		start_at?: string-time; // Relative timestamp from recording start (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		end_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		text: string; 
		participant?: any; 
		language?: string; // ISO language code 
		is_final?: boolean; // Whether this is a final transcript (vs. partial) 
		words?: []; // Word-level breakdown with timestamps 
		confidence?: number; // 0-1 confidence score 
	}; // For TRANSCRIPT_RECEIVED, TRANSCRIPT_PARTIAL
	chat_message?: {
		id?: string; 
		created_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		sender?: any; 
		message?: string; 
		is_private?: boolean; // Whether sent privately vs. to everyone 
		recipient?: any; // If private message, who it was sent to 
	}; // For CHAT_MESSAGE_RECEIVED
	audio_frame?: {
		data?: string; // Base64 encoded audio data 
		size?: number; // Size in bytes 
		timestamp?: number; // Timestamp in milliseconds 
		sample_rate?: number; // Audio sample rate (e.g., 16000 Hz) 
		channels?: number; // Number of audio channels (1 = mono, 2 = stereo) 
		format?: string; // Audio format (e.g., 'PCM', 'OPUS') 
		participant_identifier?: string; // Platform participant identifier (not a unified object ref) 
	}; // For AUDIO_FRAME_RECEIVED
	video_frame?: {
		data?: string; // Base64 encoded video data 
		size?: number; // Size in bytes 
		timestamp?: number; // Timestamp in milliseconds 
		width?: number; // Frame width in pixels 
		height?: number; // Frame height in pixels 
		format?: string; // Video format (e.g., 'H264', 'VP8') 
		fps?: number; // Frames per second 
		participant_identifier?: string; // Platform participant identifier (not a unified object ref) 
	}; // For VIDEO_FRAME_RECEIVED
	raw?: any;
} 
```

## Zod

```typescript
import { z } from 'zod';

export const ZodCalendarBotevent = z.object({
	id: z.string().optional(),
	created_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	bot_id: z.string().optional().describe("Reference to the calendar_bot"),
	type: z.enum("BOT_STATUS_CHANGE", "PARTICIPANT_JOINED", "PARTICIPANT_LEFT", "PARTICIPANT_UPDATED", "PARTICIPANT_WEBCAM_ON", "PARTICIPANT_WEBCAM_OFF", "PARTICIPANT_SCREENSHARE_ON", "PARTICIPANT_SCREENSHARE_OFF", "PARTICIPANT_SPEECH_ON", "PARTICIPANT_SPEECH_OFF", "CHAT_MESSAGE_RECEIVED", "TRANSCRIPT_RECEIVED", "TRANSCRIPT_PARTIAL", "VIDEO_FRAME_RECEIVED", "AUDIO_FRAME_RECEIVED", "RECORDING_STARTED", "RECORDING_STOPPED", "RECORDING_READY").optional(),
	status_change: z.object({
			status: z.enum("READY", "JOINING_CALL", "IN_WAITING_ROOM", "IN_CALL_NOT_RECORDING", "RECORDING_PERMISSION_ALLOWED", "RECORDING_PERMISSION_DENIED", "IN_CALL_RECORDING", "CALL_ENDED", "DONE", "FATAL").optional(),
			changed_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			sub_code: z.string().optional().describe("Platform-specific status sub-code"),
			message: z.string().optional().describe("Human-readable status message")
}).optional().describe("For BOT_STATUS_CHANGE"),
	participant: z.object({
			id: z.string().optional(),
			name: z.string().optional(),
			email: z.string().optional(),
			is_host: z.boolean().optional(),
			is_cohost: z.boolean().optional(),
			joined_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			left_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			platform: z.string().optional().describe("Platform-specific participant identifier"),
			is_bot: z.boolean().optional().describe("Whether this participant is a bot"),
			is_self: z.boolean().optional().describe("Whether this participant is the current bot"),
			speaking: z.boolean().optional().describe("Whether participant is currently speaking"),
			webcam_on: z.boolean().optional().describe("Whether participant's webcam is on"),
			screenshare_on: z.boolean().optional().describe("Whether participant is sharing screen"),
			platform_metadata: z.unknown().optional().describe("Platform-specific metadata")
}).optional().describe("For participant events"),
	transcript: z.object({
			id: z.string().optional(),
			created_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			start_at: z.string-time().optional().describe("Relative timestamp from recording start (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			end_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			text: z.string(),
			participant: z.unknown().optional(),
			language: z.string().optional().describe("ISO language code"),
			is_final: z.boolean().optional().describe("Whether this is a final transcript (vs. partial)"),
			words: z.array().optional().describe("Word-level breakdown with timestamps"),
			confidence: z.number().optional().describe("0-1 confidence score")
}).optional().describe("For TRANSCRIPT_RECEIVED, TRANSCRIPT_PARTIAL"),
	chat_message: z.object({
			id: z.string().optional(),
			created_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			sender: z.unknown().optional(),
			message: z.string().optional(),
			is_private: z.boolean().optional().describe("Whether sent privately vs. to everyone"),
			recipient: z.unknown().optional().describe("If private message, who it was sent to")
}).optional().describe("For CHAT_MESSAGE_RECEIVED"),
	audio_frame: z.object({
			data: z.string().optional().describe("Base64 encoded audio data"),
			size: z.number().optional().describe("Size in bytes"),
			timestamp: z.number().optional().describe("Timestamp in milliseconds"),
			sample_rate: z.number().optional().describe("Audio sample rate (e.g., 16000 Hz)"),
			channels: z.number().optional().describe("Number of audio channels (1 = mono, 2 = stereo)"),
			format: z.string().optional().describe("Audio format (e.g., 'PCM', 'OPUS')"),
			participant_identifier: z.string().optional().describe("Platform participant identifier (not a unified object ref)")
}).optional().describe("For AUDIO_FRAME_RECEIVED"),
	video_frame: z.object({
			data: z.string().optional().describe("Base64 encoded video data"),
			size: z.number().optional().describe("Size in bytes"),
			timestamp: z.number().optional().describe("Timestamp in milliseconds"),
			width: z.number().optional().describe("Frame width in pixels"),
			height: z.number().optional().describe("Frame height in pixels"),
			format: z.string().optional().describe("Video format (e.g., 'H264', 'VP8')"),
			fps: z.number().optional().describe("Frames per second"),
			participant_identifier: z.string().optional().describe("Platform participant identifier (not a unified object ref)")
}).optional().describe("For VIDEO_FRAME_RECEIVED"),

});
```

## Python

```python
import dataclasses

@dataclasses.dataclass
class CalendarBoteventType(str, Enum):
	BOT_STATUS_CHANGE = 'BOT_STATUS_CHANGE'
	PARTICIPANT_JOINED = 'PARTICIPANT_JOINED'
	PARTICIPANT_LEFT = 'PARTICIPANT_LEFT'
	PARTICIPANT_UPDATED = 'PARTICIPANT_UPDATED'
	PARTICIPANT_WEBCAM_ON = 'PARTICIPANT_WEBCAM_ON'
	PARTICIPANT_WEBCAM_OFF = 'PARTICIPANT_WEBCAM_OFF'
	PARTICIPANT_SCREENSHARE_ON = 'PARTICIPANT_SCREENSHARE_ON'
	PARTICIPANT_SCREENSHARE_OFF = 'PARTICIPANT_SCREENSHARE_OFF'
	PARTICIPANT_SPEECH_ON = 'PARTICIPANT_SPEECH_ON'
	PARTICIPANT_SPEECH_OFF = 'PARTICIPANT_SPEECH_OFF'
	CHAT_MESSAGE_RECEIVED = 'CHAT_MESSAGE_RECEIVED'
	TRANSCRIPT_RECEIVED = 'TRANSCRIPT_RECEIVED'
	TRANSCRIPT_PARTIAL = 'TRANSCRIPT_PARTIAL'
	VIDEO_FRAME_RECEIVED = 'VIDEO_FRAME_RECEIVED'
	AUDIO_FRAME_RECEIVED = 'AUDIO_FRAME_RECEIVED'
	RECORDING_STARTED = 'RECORDING_STARTED'
	RECORDING_STOPPED = 'RECORDING_STOPPED'
	RECORDING_READY = 'RECORDING_READY'

@dataclasses.dataclass
class CalendarBoteventStatus_changeStatus(str, Enum):
	READY = 'READY'
	JOINING_CALL = 'JOINING_CALL'
	IN_WAITING_ROOM = 'IN_WAITING_ROOM'
	IN_CALL_NOT_RECORDING = 'IN_CALL_NOT_RECORDING'
	RECORDING_PERMISSION_ALLOWED = 'RECORDING_PERMISSION_ALLOWED'
	RECORDING_PERMISSION_DENIED = 'RECORDING_PERMISSION_DENIED'
	IN_CALL_RECORDING = 'IN_CALL_RECORDING'
	CALL_ENDED = 'CALL_ENDED'
	DONE = 'DONE'
	FATAL = 'FATAL'

@dataclasses.dataclass
class PropertyCalendarBoteventStatus_change:
	status: Optional[CalendarBoteventStatus_changeStatus]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	changed_at: Optional[str]
	"""Platform-specific status sub-code"""
	sub_code: Optional[str]
	"""Human-readable status message"""
	message: Optional[str]

@dataclasses.dataclass
class PropertyCalendarBoteventParticipant:
	id: Optional[str]
	name: Optional[str]
	email: Optional[str]
	is_host: Optional[bool]
	is_cohost: Optional[bool]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	joined_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	left_at: Optional[str]
	"""Platform-specific participant identifier"""
	platform: Optional[str]
	"""Whether this participant is a bot"""
	is_bot: Optional[bool]
	"""Whether this participant is the current bot"""
	is_self: Optional[bool]
	"""Whether participant is currently speaking"""
	speaking: Optional[bool]
	"""Whether participant's webcam is on"""
	webcam_on: Optional[bool]
	"""Whether participant is sharing screen"""
	screenshare_on: Optional[bool]
	"""Platform-specific metadata"""
	platform_metadata: Optional[PropertyCalendarBoteventPlatform_metadata]

@dataclasses.dataclass
class PropertyCalendarBoteventTranscript:
	id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	created_at: Optional[str]
	"""Relative timestamp from recording start (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	start_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	end_at: Optional[str]
	text: Optional[str]
	participant: Optional[PropertyCalendarBoteventParticipant]
	"""ISO language code"""
	language: Optional[str]
	"""Whether this is a final transcript (vs. partial)"""
	is_final: Optional[bool]
	"""Word-level breakdown with timestamps"""
	words: Optional[PropertyCalendarBoteventWords]
	"""0-1 confidence score"""
	confidence: Optional[int]

@dataclasses.dataclass
class PropertyCalendarBoteventChat_message:
	id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	created_at: Optional[str]
	sender: Optional[PropertyCalendarBoteventSender]
	message: Optional[str]
	"""Whether sent privately vs. to everyone"""
	is_private: Optional[bool]
	"""If private message, who it was sent to"""
	recipient: Optional[PropertyCalendarBoteventRecipient]

@dataclasses.dataclass
class PropertyCalendarBoteventAudio_frame:
	"""Base64 encoded audio data"""
	data: Optional[str]
	"""Size in bytes"""
	size: Optional[int]
	"""Timestamp in milliseconds"""
	timestamp: Optional[int]
	"""Audio sample rate (e.g., 16000 Hz)"""
	sample_rate: Optional[int]
	"""Number of audio channels (1 = mono, 2 = stereo)"""
	channels: Optional[int]
	"""Audio format (e.g., 'PCM', 'OPUS')"""
	format: Optional[str]
	"""Platform participant identifier (not a unified object ref)"""
	participant_identifier: Optional[str]

@dataclasses.dataclass
class PropertyCalendarBoteventVideo_frame:
	"""Base64 encoded video data"""
	data: Optional[str]
	"""Size in bytes"""
	size: Optional[int]
	"""Timestamp in milliseconds"""
	timestamp: Optional[int]
	"""Frame width in pixels"""
	width: Optional[int]
	"""Frame height in pixels"""
	height: Optional[int]
	"""Video format (e.g., 'H264', 'VP8')"""
	format: Optional[str]
	"""Frames per second"""
	fps: Optional[int]
	"""Platform participant identifier (not a unified object ref)"""
	participant_identifier: Optional[str]

@dataclasses.dataclass
class CalendarBotevent:
	id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	created_at: Optional[str]
	"""Reference to the calendar_bot"""
	bot_id: Optional[str]
	type: Optional[CalendarBoteventType]
	"""For BOT_STATUS_CHANGE"""
	status_change: Optional[PropertyCalendarBoteventStatus_change]
	"""For participant events"""
	participant: Optional[PropertyCalendarBoteventParticipant]
	"""For TRANSCRIPT_RECEIVED, TRANSCRIPT_PARTIAL"""
	transcript: Optional[PropertyCalendarBoteventTranscript]
	"""For CHAT_MESSAGE_RECEIVED"""
	chat_message: Optional[PropertyCalendarBoteventChat_message]
	"""For AUDIO_FRAME_RECEIVED"""
	audio_frame: Optional[PropertyCalendarBoteventAudio_frame]
	"""For VIDEO_FRAME_RECEIVED"""
	video_frame: Optional[PropertyCalendarBoteventVideo_frame]

```
