# Sessions ## Fetch all sessions of an App `realtime_kit.sessions.get_sessions(strapp_id, SessionGetSessionsParams**kwargs) -> SessionGetSessionsResponse` **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions` Returns details of all sessions of an App. ### Parameters - `account_id: str` The account identifier tag. - `app_id: str` The app identifier tag. - `associated_id: Optional[str]` ID of the meeting that sessions should be associated with - `end_time: Optional[Union[str, datetime]]` The end time range for which you want to retrieve the meetings. The time must be specified in ISO format. - `page_no: Optional[float]` The page number from which you want your page search results to be displayed. - `participants: Optional[str]` - `per_page: Optional[float]` Number of results per page - `search: Optional[str]` Search string that matches sessions based on meeting title, meeting ID, and session ID - `sort_by: Optional[Literal["minutesConsumed", "createdAt"]]` - `"minutesConsumed"` - `"createdAt"` - `sort_order: Optional[Literal["ASC", "DESC"]]` - `"ASC"` - `"DESC"` - `start_time: Optional[Union[str, datetime]]` The start time range for which you want to retrieve the meetings. The time must be specified in ISO format. - `status: Optional[Literal["LIVE", "ENDED"]]` - `"LIVE"` - `"ENDED"` ### Returns - `class SessionGetSessionsResponse: …` - `data: Optional[Data]` - `sessions: Optional[List[DataSession]]` - `id: str` ID of the session - `associated_id: str` ID of the meeting this session is associated with. In the case of V2 meetings, it is always a UUID. In V1 meetings, it is a room name of the form `abcdef-ghijkl` - `created_at: str` timestamp when session created - `live_participants: float` number of participants currently in the session - `max_concurrent_participants: float` number of maximum participants that were in the session - `meeting_display_name: str` Title of the meeting this session belongs to - `minutes_consumed: float` number of minutes consumed since the session started - `organization_id: str` App id that hosted this session - `started_at: str` timestamp when session started - `status: Literal["LIVE", "ENDED"]` current status of session - `"LIVE"` - `"ENDED"` - `type: Literal["meeting", "livestream", "participant"]` type of session - `"meeting"` - `"livestream"` - `"participant"` - `updated_at: str` timestamp when session was last updated - `breakout_rooms: Optional[List[object]]` - `ended_at: Optional[str]` timestamp when session ended - `paging: Optional[Paging]` - `end_offset: Optional[float]` - `start_offset: Optional[float]` - `total_count: Optional[float]` - `success: Optional[bool]` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.realtime_kit.sessions.get_sessions( app_id="app_id", account_id="023e105f4ecef8ad9ca31a8372d0c353", ) print(response.data) ``` #### Response ```json { "data": { "sessions": [ { "id": "id", "associated_id": "associated_id", "created_at": "created_at", "live_participants": 0, "max_concurrent_participants": 0, "meeting_display_name": "meeting_display_name", "minutes_consumed": 0, "organization_id": "organization_id", "started_at": "started_at", "status": "LIVE", "type": "meeting", "updated_at": "updated_at", "breakout_rooms": [ {} ], "ended_at": "ended_at" } ] }, "paging": { "end_offset": 0, "start_offset": 0, "total_count": 0 }, "success": true } ``` ## Fetch details of a session `realtime_kit.sessions.get_session_details(strsession_id, SessionGetSessionDetailsParams**kwargs) -> SessionGetSessionDetailsResponse` **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}` Returns data of the given session ID including recording details. ### Parameters - `account_id: str` The account identifier tag. - `app_id: str` The app identifier tag. - `session_id: str` - `include_breakout_rooms: Optional[bool]` List all breakout rooms ### Returns - `class SessionGetSessionDetailsResponse: …` - `data: Optional[Data]` - `id: str` ID of the session - `associated_id: str` ID of the meeting this session is associated with. In the case of V2 meetings, it is always a UUID. In V1 meetings, it is a room name of the form `abcdef-ghijkl` - `created_at: str` timestamp when session created - `live_participants: float` number of participants currently in the session - `max_concurrent_participants: float` number of maximum participants that were in the session - `meeting_display_name: str` Title of the meeting this session belongs to - `minutes_consumed: float` number of minutes consumed since the session started - `organization_id: str` App id that hosted this session - `started_at: str` timestamp when session started - `status: Literal["LIVE", "ENDED"]` current status of session - `"LIVE"` - `"ENDED"` - `type: Literal["meeting", "livestream", "participant"]` type of session - `"meeting"` - `"livestream"` - `"participant"` - `updated_at: str` timestamp when session was last updated - `breakout_rooms: Optional[List[object]]` - `ended_at: Optional[str]` timestamp when session ended - `success: Optional[bool]` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.realtime_kit.sessions.get_session_details( session_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", account_id="023e105f4ecef8ad9ca31a8372d0c353", app_id="app_id", ) print(response.data) ``` #### Response ```json { "data": { "id": "id", "associated_id": "associated_id", "created_at": "created_at", "live_participants": 0, "max_concurrent_participants": 0, "meeting_display_name": "meeting_display_name", "minutes_consumed": 0, "organization_id": "organization_id", "started_at": "started_at", "status": "LIVE", "type": "meeting", "updated_at": "updated_at", "breakout_rooms": [ {} ], "ended_at": "ended_at" }, "success": true } ``` ## Fetch participants list of a session `realtime_kit.sessions.get_session_participants(strsession_id, SessionGetSessionParticipantsParams**kwargs) -> SessionGetSessionParticipantsResponse` **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/participants` Returns a list of participants for the given session ID. ### Parameters - `account_id: str` The account identifier tag. - `app_id: str` The app identifier tag. - `session_id: str` - `include_peer_events: Optional[bool]` if true, response includes all the peer events of participants. - `page_no: Optional[float]` The page number from which you want your page search results to be displayed. - `per_page: Optional[float]` Number of results per page - `search: Optional[str]` The search query string. You can search using participant ID, custom participant ID, or display name. - `sort_by: Optional[Literal["joinedAt", "duration"]]` - `"joinedAt"` - `"duration"` - `sort_order: Optional[Literal["ASC", "DESC"]]` - `"ASC"` - `"DESC"` - `view: Optional[Literal["raw", "consolidated"]]` In breakout room sessions, the view parameter can be set to `raw` for session specific duration for participants or `consolidated` to accumulate breakout room durations. - `"raw"` - `"consolidated"` ### Returns - `class SessionGetSessionParticipantsResponse: …` - `data: Optional[Data]` - `participants: Optional[List[DataParticipant]]` - `id: Optional[str]` Participant ID. This maps to the corresponding peerId. - `created_at: Optional[str]` timestamp when this participant was created. - `custom_participant_id: Optional[str]` ID passed by client to create this participant. - `display_name: Optional[str]` Display name of participant when joining the session. - `duration: Optional[float]` number of minutes for which the participant was in the session. - `joined_at: Optional[str]` timestamp at which participant joined the session. - `left_at: Optional[str]` timestamp at which participant left the session. - `peer_events: Optional[List[DataParticipantPeerEvent]]` Connection lifecycle events for the participant's peer. Only included when `include_peer_events` is true. - `id: Optional[str]` ID of the peer event. - `created_at: Optional[str]` Timestamp when this peer event was created. - `event_name: Optional[Literal["PEER_CREATED", "PEER_JOINING", "PEER_LEAVING"]]` Name of the peer event. - `"PEER_CREATED"` - `"PEER_JOINING"` - `"PEER_LEAVING"` - `minutes_consumed: Optional[float]` Minutes consumed attributed to this event. - `participant_id: Optional[str]` ID of the participant this event belongs to. - `peer_id: Optional[str]` Peer ID this event belongs to. - `preset_view_type: Optional[Literal["GROUP_CALL", "WEBINAR", "AUDIO_ROOM", 2 more]]` View type of the preset associated with the peer. - `"GROUP_CALL"` - `"WEBINAR"` - `"AUDIO_ROOM"` - `"LIVESTREAM"` - `"CHAT"` - `session_id: Optional[str]` ID of the session this event belongs to. - `socket_session_id: Optional[str]` ID of the socket session associated with this event. - `updated_at: Optional[str]` Timestamp when this peer event was last updated. - `preset_name: Optional[str]` Name of the preset associated with the participant. - `updated_at: Optional[str]` timestamp when this participant's data was last updated. - `user_id: Optional[str]` User id for this participant. - `success: Optional[bool]` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.realtime_kit.sessions.get_session_participants( session_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", account_id="023e105f4ecef8ad9ca31a8372d0c353", app_id="app_id", ) print(response.data) ``` #### Response ```json { "data": { "paging": { "end_offset": 2, "start_offset": 1, "total_count": 123 }, "participants": [ { "created_at": "2023-02-01T10:51:08.039Z", "custom_participant_id": "83qi0i", "display_name": "Mark", "duration": 5.8097, "id": "005f4e0c-4d08-4d4e-a391-a76be75cd296", "joined_at": "2023-02-01T10:51:08.030Z", "left_at": "2023-02-01T10:56:56.612Z", "preset_name": "webinar_participant", "updated_at": "2023-02-01T10:56:56.618Z", "user_id": "0a08343d-a9dc-45f0-9feb-6a64afcc4f81" }, { "created_at": "2023-02-01T10:50:36.853Z", "custom_participant_id": "3uggr", "display_name": "Henry", "duration": 6.9263, "id": "51fdf95f-d893-471a-922b-7db7adb14453", "joined_at": "2023-02-01T10:50:36.846Z\"", "left_at": "2023-02-01T10:57:32.424Z", "preset_name": "webinar_participant", "updated_at": "2023-02-01T10:57:32.431Z", "user_id": "85e7f0fd-7c16-45e9-9d68-f17ef007c4eb" } ] }, "success": true } ``` ## Fetch details of a participant `realtime_kit.sessions.get_session_participant_details(strparticipant_id, SessionGetSessionParticipantDetailsParams**kwargs) -> SessionGetSessionParticipantDetailsResponse` **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/participants/{participant_id}` Returns details of the given participant ID along with call statistics for the given session ID. ### Parameters - `account_id: str` The account identifier tag. - `app_id: str` The app identifier tag. - `session_id: str` - `participant_id: str` - `include_peer_events: Optional[bool]` if true, response includes all the peer events of participant. ### Returns - `class SessionGetSessionParticipantDetailsResponse: …` - `data: Optional[Data]` - `participant: Optional[DataParticipant]` - `id: Optional[str]` Participant ID. This maps to the corresponding peerId. - `created_at: Optional[str]` timestamp when this participant was created. - `custom_participant_id: Optional[str]` ID passed by client to create this participant. - `display_name: Optional[str]` Display name of participant when joining the session. - `duration: Optional[float]` number of minutes for which the participant was in the session. - `joined_at: Optional[str]` timestamp at which participant joined the session. - `left_at: Optional[str]` timestamp at which participant left the session. - `peer_events: Optional[List[DataParticipantPeerEvent]]` Connection lifecycle events for the participant's peer. Only included when `include_peer_events` is true. - `id: Optional[str]` ID of the peer event. - `created_at: Optional[str]` Timestamp when this peer event was created. - `event_name: Optional[Literal["PEER_CREATED", "PEER_JOINING", "PEER_LEAVING"]]` Name of the peer event. - `"PEER_CREATED"` - `"PEER_JOINING"` - `"PEER_LEAVING"` - `minutes_consumed: Optional[float]` Minutes consumed attributed to this event. - `participant_id: Optional[str]` ID of the participant this event belongs to. - `peer_id: Optional[str]` Peer ID this event belongs to. - `preset_view_type: Optional[Literal["GROUP_CALL", "WEBINAR", "AUDIO_ROOM", 2 more]]` View type of the preset associated with the peer. - `"GROUP_CALL"` - `"WEBINAR"` - `"AUDIO_ROOM"` - `"LIVESTREAM"` - `"CHAT"` - `session_id: Optional[str]` ID of the session this event belongs to. - `socket_session_id: Optional[str]` ID of the socket session associated with this event. - `updated_at: Optional[str]` Timestamp when this peer event was last updated. - `preset_name: Optional[str]` Name of the preset associated with the participant. - `updated_at: Optional[str]` timestamp when this participant's data was last updated. - `user_id: Optional[str]` User id for this participant. - `success: Optional[bool]` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.realtime_kit.sessions.get_session_participant_details( participant_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", account_id="023e105f4ecef8ad9ca31a8372d0c353", app_id="app_id", session_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response.data) ``` #### Response ```json { "data": { "participant": { "id": "id", "created_at": "created_at", "custom_participant_id": "custom_participant_id", "display_name": "display_name", "duration": 0, "joined_at": "joined_at", "left_at": "left_at", "peer_events": [ { "id": "id", "created_at": "created_at", "event_name": "PEER_CREATED", "minutes_consumed": 0, "participant_id": "participant_id", "peer_id": "peer_id", "preset_view_type": "GROUP_CALL", "session_id": "session_id", "socket_session_id": "socket_session_id", "updated_at": "updated_at" } ], "preset_name": "preset_name", "updated_at": "updated_at", "user_id": "user_id" } }, "success": true } ``` ## Fetch all chat messages of a session `realtime_kit.sessions.get_session_chat(strsession_id, SessionGetSessionChatParams**kwargs) -> SessionGetSessionChatResponse` **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/chat` Returns a URL to download all chat messages of the session ID in CSV format. ### Parameters - `account_id: str` The account identifier tag. - `app_id: str` The app identifier tag. - `session_id: str` ### Returns - `class SessionGetSessionChatResponse: …` - `data: Optional[Data]` - `chat_download_url: str` URL where the chat logs can be downloaded - `chat_download_url_expiry: str` Time when the download URL will expire - `success: Optional[bool]` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.realtime_kit.sessions.get_session_chat( session_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", account_id="023e105f4ecef8ad9ca31a8372d0c353", app_id="app_id", ) print(response.data) ``` #### Response ```json { "data": { "chat_download_url": "chat_download_url", "chat_download_url_expiry": "chat_download_url_expiry" }, "success": true } ``` ## Fetch the complete transcript for a session `realtime_kit.sessions.get_session_transcripts(strsession_id, SessionGetSessionTranscriptsParams**kwargs) -> SessionGetSessionTranscriptsResponse` **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/transcript` Returns a URL to download the transcript for the session ID in CSV format. ### Parameters - `account_id: str` The account identifier tag. - `app_id: str` The app identifier tag. - `session_id: str` - `format: Optional[Literal["SRT", "VTT", "JSON", "CSV"]]` Transcript file format to fetch. - `"SRT"` - `"VTT"` - `"JSON"` - `"CSV"` ### Returns - `class SessionGetSessionTranscriptsResponse: …` - `data: Optional[Data]` - `session_id: str` - `transcript_download_url: str` URL where the transcript can be downloaded - `transcript_download_url_expiry: str` Time when the download URL will expire - `success: Optional[bool]` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.realtime_kit.sessions.get_session_transcripts( session_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", account_id="023e105f4ecef8ad9ca31a8372d0c353", app_id="app_id", ) print(response.data) ``` #### Response ```json { "data": { "sessionId": "sessionId", "transcript_download_url": "transcript_download_url", "transcript_download_url_expiry": "transcript_download_url_expiry" }, "success": true } ``` ## Fetch summary of transcripts for a session `realtime_kit.sessions.get_session_summary(strsession_id, SessionGetSessionSummaryParams**kwargs) -> SessionGetSessionSummaryResponse` **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/summary` Returns a Summary URL to download the Summary of Transcripts for the session ID as plain text. ### Parameters - `account_id: str` The account identifier tag. - `app_id: str` The app identifier tag. - `session_id: str` ### Returns - `class SessionGetSessionSummaryResponse: …` - `data: Optional[Data]` - `session_id: str` - `summary_download_url: str` URL where the summary of transcripts can be downloaded - `summary_download_url_expiry: str` Time of Expiry before when you need to download the csv file. - `success: Optional[bool]` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.realtime_kit.sessions.get_session_summary( session_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", account_id="023e105f4ecef8ad9ca31a8372d0c353", app_id="app_id", ) print(response.data) ``` #### Response ```json { "data": { "sessionId": "sessionId", "summaryDownloadUrl": "summaryDownloadUrl", "summaryDownloadUrlExpiry": "summaryDownloadUrlExpiry" }, "success": true } ``` ## Generate summary of Transcripts for the session `realtime_kit.sessions.generate_summary_of_transcripts(strsession_id, SessionGenerateSummaryOfTranscriptsParams**kwargs) -> SessionGenerateSummaryOfTranscriptsResponse` **post** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/summary` Trigger Summary generation of Transcripts for the session ID. ### Parameters - `account_id: str` The account identifier tag. - `app_id: str` The app identifier tag. - `session_id: str` ### Returns - `class SessionGenerateSummaryOfTranscriptsResponse: …` - `data: Optional[Data]` - `session_id: Optional[str]` - `status: Optional[str]` - `success: Optional[bool]` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.realtime_kit.sessions.generate_summary_of_transcripts( session_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", account_id="023e105f4ecef8ad9ca31a8372d0c353", app_id="app_id", ) print(response.data) ``` #### Response ```json { "data": { "session_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "status": "status" }, "success": true } ``` ## Fetch details of peer `realtime_kit.sessions.get_participant_data_from_peer_id(strpeer_id, SessionGetParticipantDataFromPeerIDParams**kwargs) -> SessionGetParticipantDataFromPeerIDResponse` **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/peer-report/{peer_id}` Returns participant details for the given peer ID along with call statistics. ### Parameters - `account_id: str` The account identifier tag. - `app_id: str` The app identifier tag. - `peer_id: str` - `filters: Optional[Literal["device_info", "ip_information", "precall_network_information", 2 more]]` Filter to apply to the peer report. - `"device_info"` - `"ip_information"` - `"precall_network_information"` - `"events"` - `"quality_stats"` - `include_peer_events: Optional[bool]` if true, response includes all the peer events of participant. ### Returns - `class SessionGetParticipantDataFromPeerIDResponse: …` - `data: Optional[Data]` - `participant: Optional[DataParticipant]` - `id: Optional[str]` ID of the participant. - `created_at: Optional[str]` timestamp when this participant was created. - `custom_participant_id: Optional[str]` ID passed by client to create this participant. - `display_name: Optional[str]` Display name of participant when joining the session. - `duration: Optional[float]` number of minutes for which the participant was in the session. - `joined_at: Optional[str]` timestamp at which participant joined the session. - `left_at: Optional[str]` timestamp at which participant left the session. - `peer_events: Optional[List[DataParticipantPeerEvent]]` Connection lifecycle events for the participant's peer. - `id: Optional[str]` ID of the peer event. - `created_at: Optional[str]` Timestamp when this peer event was created. - `event_name: Optional[Literal["PEER_CREATED", "PEER_JOINING", "PEER_LEAVING"]]` Name of the peer event. - `"PEER_CREATED"` - `"PEER_JOINING"` - `"PEER_LEAVING"` - `minutes_consumed: Optional[float]` Minutes consumed attributed to this event. - `participant_id: Optional[str]` ID of the participant this event belongs to. - `peer_id: Optional[str]` Peer ID this event belongs to. - `preset_view_type: Optional[Literal["GROUP_CALL", "WEBINAR", "AUDIO_ROOM", 2 more]]` View type of the preset associated with the peer. - `"GROUP_CALL"` - `"WEBINAR"` - `"AUDIO_ROOM"` - `"LIVESTREAM"` - `"CHAT"` - `session_id: Optional[str]` ID of the session this event belongs to. - `socket_session_id: Optional[str]` ID of the socket session associated with this event. - `updated_at: Optional[str]` Timestamp when this peer event was last updated. - `peer_report: Optional[DataParticipantPeerReport]` Peer call statistics report. - `metadata: Optional[DataParticipantPeerReportMetadata]` Connection and device metadata for the participant. - `audio_devices_updates: Optional[List[DataParticipantPeerReportMetadataAudioDevicesUpdate]]` - `added: Optional[List[DataParticipantPeerReportMetadataAudioDevicesUpdateAdded]]` Devices that became available. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `removed: Optional[List[DataParticipantPeerReportMetadataAudioDevicesUpdateRemoved]]` Devices that became unavailable. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `timestamp: Optional[str]` Timestamp of the device update. - `browser_metadata: Optional[DataParticipantPeerReportMetadataBrowserMetadata]` - `browser: Optional[str]` - `browser_version: Optional[str]` - `engine: Optional[str]` - `user_agent: Optional[str]` - `webgl_support: Optional[bool]` - `candidate_pairs: Optional[DataParticipantPeerReportMetadataCandidatePairs]` - `consuming_transport: Optional[List[DataParticipantPeerReportMetadataCandidatePairsConsumingTransport]]` - `available_incoming_bitrate: Optional[float]` - `available_outgoing_bitrate: Optional[float]` - `bytes_discarded_on_send: Optional[float]` - `bytes_received: Optional[float]` - `bytes_sent: Optional[float]` - `current_round_trip_time: Optional[float]` - `last_packet_received_timestamp: Optional[float]` Epoch milliseconds when the last packet was received. - `last_packet_sent_timestamp: Optional[float]` Epoch milliseconds when the last packet was sent. - `local_candidate_address: Optional[str]` - `local_candidate_id: Optional[str]` - `local_candidate_network_type: Optional[str]` - `local_candidate_port: Optional[float]` - `local_candidate_protocol: Optional[str]` - `local_candidate_related_address: Optional[str]` - `local_candidate_related_port: Optional[float]` - `local_candidate_type: Optional[str]` - `local_candidate_url: Optional[str]` - `nominated: Optional[bool]` - `packets_discarded_on_send: Optional[float]` - `packets_received: Optional[float]` - `packets_sent: Optional[float]` - `remote_candidate_address: Optional[str]` - `remote_candidate_id: Optional[str]` - `remote_candidate_port: Optional[float]` - `remote_candidate_protocol: Optional[str]` - `remote_candidate_type: Optional[str]` - `remote_candidate_url: Optional[str]` - `total_round_trip_time: Optional[float]` - `producing_transport: Optional[List[DataParticipantPeerReportMetadataCandidatePairsProducingTransport]]` - `available_incoming_bitrate: Optional[float]` - `available_outgoing_bitrate: Optional[float]` - `bytes_discarded_on_send: Optional[float]` - `bytes_received: Optional[float]` - `bytes_sent: Optional[float]` - `current_round_trip_time: Optional[float]` - `last_packet_received_timestamp: Optional[float]` Epoch milliseconds when the last packet was received. - `last_packet_sent_timestamp: Optional[float]` Epoch milliseconds when the last packet was sent. - `local_candidate_address: Optional[str]` - `local_candidate_id: Optional[str]` - `local_candidate_network_type: Optional[str]` - `local_candidate_port: Optional[float]` - `local_candidate_protocol: Optional[str]` - `local_candidate_related_address: Optional[str]` - `local_candidate_related_port: Optional[float]` - `local_candidate_type: Optional[str]` - `local_candidate_url: Optional[str]` - `nominated: Optional[bool]` - `packets_discarded_on_send: Optional[float]` - `packets_received: Optional[float]` - `packets_sent: Optional[float]` - `remote_candidate_address: Optional[str]` - `remote_candidate_id: Optional[str]` - `remote_candidate_port: Optional[float]` - `remote_candidate_protocol: Optional[str]` - `remote_candidate_type: Optional[str]` - `remote_candidate_url: Optional[str]` - `total_round_trip_time: Optional[float]` - `device_info: Optional[DataParticipantPeerReportMetadataDeviceInfo]` - `cpus: Optional[float]` - `is_mobile: Optional[bool]` - `os: Optional[str]` - `os_version: Optional[str]` - `events: Optional[List[DataParticipantPeerReportMetadataEvent]]` - `metadata: Optional[Dict[str, Union[str, float, bool, null]]]` Event-specific metadata. Keys vary per event; values are primitive scalars (string, number, boolean, or null). - `str` - `float` - `bool` - `name: Optional[str]` Name of the event. - `timestamp: Optional[str]` Timestamp when the event occurred. - `ip_information: Optional[DataParticipantPeerReportMetadataIPInformation]` - `asn: Optional[DataParticipantPeerReportMetadataIPInformationASN]` - `asn: Optional[str]` - `domain: Optional[str]` - `name: Optional[str]` - `route: Optional[str]` - `type: Optional[str]` - `city: Optional[str]` - `country: Optional[str]` - `ipv4: Optional[str]` - `org: Optional[str]` - `region: Optional[str]` - `timezone: Optional[str]` - `native_metadata: Optional[DataParticipantPeerReportMetadataNativeMetadata]` - `audio_encoder: Optional[str]` - `video_encoder: Optional[str]` - `pc_metadata: Optional[List[DataParticipantPeerReportMetadataPcMetadata]]` - `effective_network_type: Optional[str]` - `reflexive_connectivity: Optional[bool]` - `relay_connectivity: Optional[bool]` - `sdp: Optional[List[str]]` - `timestamp: Optional[str]` - `turn_connectivity: Optional[bool]` - `room_view_type: Optional[str]` - `sdk_name: Optional[str]` - `sdk_type: Optional[str]` - `sdk_version: Optional[str]` - `selected_device_updates: Optional[List[DataParticipantPeerReportMetadataSelectedDeviceUpdate]]` - `device: Optional[DataParticipantPeerReportMetadataSelectedDeviceUpdateDevice]` A media device (camera, microphone, or speaker). - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `timestamp: Optional[str]` - `speaker_devices_updates: Optional[List[DataParticipantPeerReportMetadataSpeakerDevicesUpdate]]` - `added: Optional[List[DataParticipantPeerReportMetadataSpeakerDevicesUpdateAdded]]` Devices that became available. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `removed: Optional[List[DataParticipantPeerReportMetadataSpeakerDevicesUpdateRemoved]]` Devices that became unavailable. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `timestamp: Optional[str]` Timestamp of the device update. - `video_devices_updates: Optional[List[DataParticipantPeerReportMetadataVideoDevicesUpdate]]` - `added: Optional[List[DataParticipantPeerReportMetadataVideoDevicesUpdateAdded]]` Devices that became available. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `removed: Optional[List[DataParticipantPeerReportMetadataVideoDevicesUpdateRemoved]]` Devices that became unavailable. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `timestamp: Optional[str]` Timestamp of the device update. - `quality: Optional[DataParticipantPeerReportQuality]` Media quality statistics for the participant. - `audio_consumer: Optional[List[DataParticipantPeerReportQualityAudioConsumer]]` - `bytes_received: Optional[float]` - `concealment_events: Optional[float]` - `consumer_id: Optional[str]` - `jitter: Optional[float]` - `jitter_buffer_delay: Optional[float]` - `jitter_buffer_emitted_count: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_received: Optional[float]` - `peer_id: Optional[str]` - `producer_id: Optional[str]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `audio_consumer_cumulative: Optional[DataParticipantPeerReportQualityAudioConsumerCumulative]` Aggregated inbound (consumer) audio statistics for the session. - `jitter_buffer_delay: Optional[DataParticipantPeerReportQualityAudioConsumerCumulativeJitterBufferDelay]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityAudioConsumerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityAudioConsumerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `audio_producer: Optional[List[DataParticipantPeerReportQualityAudioProducer]]` - `bytes_sent: Optional[float]` - `jitter: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_sent: Optional[float]` - `producer_id: Optional[str]` - `rtt: Optional[float]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `audio_producer_cumulative: Optional[DataParticipantPeerReportQualityAudioProducerCumulative]` Aggregated outbound (producer) audio statistics for the session. - `packet_loss: Optional[DataParticipantPeerReportQualityAudioProducerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityAudioProducerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `rtt: Optional[DataParticipantPeerReportQualityAudioProducerCumulativeRTT]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `screenshare_audio_consumer: Optional[List[DataParticipantPeerReportQualityScreenshareAudioConsumer]]` - `bytes_received: Optional[float]` - `concealment_events: Optional[float]` - `consumer_id: Optional[str]` - `jitter: Optional[float]` - `jitter_buffer_delay: Optional[float]` - `jitter_buffer_emitted_count: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_received: Optional[float]` - `peer_id: Optional[str]` - `producer_id: Optional[str]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `screenshare_audio_consumer_cumulative: Optional[DataParticipantPeerReportQualityScreenshareAudioConsumerCumulative]` Aggregated inbound (consumer) audio statistics for the session. - `jitter_buffer_delay: Optional[DataParticipantPeerReportQualityScreenshareAudioConsumerCumulativeJitterBufferDelay]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityScreenshareAudioConsumerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityScreenshareAudioConsumerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `screenshare_audio_producer: Optional[List[DataParticipantPeerReportQualityScreenshareAudioProducer]]` - `bytes_sent: Optional[float]` - `jitter: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_sent: Optional[float]` - `producer_id: Optional[str]` - `rtt: Optional[float]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `screenshare_audio_producer_cumulative: Optional[DataParticipantPeerReportQualityScreenshareAudioProducerCumulative]` Aggregated outbound (producer) audio statistics for the session. - `packet_loss: Optional[DataParticipantPeerReportQualityScreenshareAudioProducerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityScreenshareAudioProducerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `rtt: Optional[DataParticipantPeerReportQualityScreenshareAudioProducerCumulativeRTT]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `screenshare_video_consumer: Optional[List[DataParticipantPeerReportQualityScreenshareVideoConsumer]]` - `bytes_received: Optional[float]` - `consumer_id: Optional[str]` - `fir_count: Optional[float]` - `frame_height: Optional[float]` - `frame_width: Optional[float]` - `frames_decoded: Optional[float]` - `frames_dropped: Optional[float]` - `frames_per_second: Optional[float]` - `jitter: Optional[float]` - `jitter_buffer_delay: Optional[float]` - `jitter_buffer_emitted_count: Optional[float]` - `key_frames_decoded: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_received: Optional[float]` - `peer_id: Optional[str]` - `producer_id: Optional[str]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `screenshare_video_consumer_cumulative: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulative]` Aggregated inbound (consumer) video statistics for the session. - `frame_per_second: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeFramePerSecond]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `frame_width: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeFrameWidth]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `issues: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeIssues]` - `lag_fraction: Optional[float]` - `no_video_fraction: Optional[float]` - `poor_resolution_fraction: Optional[float]` - `jitter_buffer_delay: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeJitterBufferDelay]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `key_frames_decoded_fraction: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `screenshare_video_producer: Optional[List[DataParticipantPeerReportQualityScreenshareVideoProducer]]` - `bytes_sent: Optional[float]` - `fir_count: Optional[float]` - `frame_height: Optional[float]` - `frame_width: Optional[float]` - `frames_encoded: Optional[float]` - `frames_per_second: Optional[float]` - `jitter: Optional[float]` - `key_frames_encoded: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_sent: Optional[float]` - `pli_count: Optional[float]` - `producer_id: Optional[str]` - `quality_limitation_durations: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerQualityLimitationDurations]` - `bandwidth: Optional[float]` - `cpu: Optional[float]` - `none: Optional[float]` - `other: Optional[float]` - `quality_limitation_reason: Optional[Literal["cpu", "bandwidth", "none", "other"]]` - `"cpu"` - `"bandwidth"` - `"none"` - `"other"` - `quality_limitation_resolution_changes: Optional[float]` - `rtt: Optional[float]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `screenshare_video_producer_cumulative: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulative]` Aggregated outbound (producer) video statistics for the session. - `frame_per_second: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeFramePerSecond]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `frame_width: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeFrameWidth]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `high_negative_feedback_fraction: Optional[float]` - `issues: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeIssues]` - `bandwidth_quality_limitation_fraction: Optional[float]` - `cpu_quality_limitation_fraction: Optional[float]` - `no_video_fraction: Optional[float]` - `poor_resolution_fraction: Optional[float]` - `quality_limitation_fraction: Optional[float]` - `key_frames_encoded_fraction: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `rtt: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeRTT]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `video_consumer: Optional[List[DataParticipantPeerReportQualityVideoConsumer]]` - `bytes_received: Optional[float]` - `consumer_id: Optional[str]` - `fir_count: Optional[float]` - `frame_height: Optional[float]` - `frame_width: Optional[float]` - `frames_decoded: Optional[float]` - `frames_dropped: Optional[float]` - `frames_per_second: Optional[float]` - `jitter: Optional[float]` - `jitter_buffer_delay: Optional[float]` - `jitter_buffer_emitted_count: Optional[float]` - `key_frames_decoded: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_received: Optional[float]` - `peer_id: Optional[str]` - `producer_id: Optional[str]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `video_consumer_cumulative: Optional[DataParticipantPeerReportQualityVideoConsumerCumulative]` Aggregated inbound (consumer) video statistics for the session. - `frame_per_second: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeFramePerSecond]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `frame_width: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeFrameWidth]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `issues: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeIssues]` - `lag_fraction: Optional[float]` - `no_video_fraction: Optional[float]` - `poor_resolution_fraction: Optional[float]` - `jitter_buffer_delay: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeJitterBufferDelay]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `key_frames_decoded_fraction: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `video_producer: Optional[List[DataParticipantPeerReportQualityVideoProducer]]` - `bytes_sent: Optional[float]` - `fir_count: Optional[float]` - `frame_height: Optional[float]` - `frame_width: Optional[float]` - `frames_encoded: Optional[float]` - `frames_per_second: Optional[float]` - `jitter: Optional[float]` - `key_frames_encoded: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_sent: Optional[float]` - `pli_count: Optional[float]` - `producer_id: Optional[str]` - `quality_limitation_durations: Optional[DataParticipantPeerReportQualityVideoProducerQualityLimitationDurations]` - `bandwidth: Optional[float]` - `cpu: Optional[float]` - `none: Optional[float]` - `other: Optional[float]` - `quality_limitation_reason: Optional[Literal["cpu", "bandwidth", "none", "other"]]` - `"cpu"` - `"bandwidth"` - `"none"` - `"other"` - `quality_limitation_resolution_changes: Optional[float]` - `rtt: Optional[float]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `video_producer_cumulative: Optional[DataParticipantPeerReportQualityVideoProducerCumulative]` Aggregated outbound (producer) video statistics for the session. - `frame_per_second: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeFramePerSecond]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `frame_width: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeFrameWidth]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `high_negative_feedback_fraction: Optional[float]` - `issues: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeIssues]` - `bandwidth_quality_limitation_fraction: Optional[float]` - `cpu_quality_limitation_fraction: Optional[float]` - `no_video_fraction: Optional[float]` - `poor_resolution_fraction: Optional[float]` - `quality_limitation_fraction: Optional[float]` - `key_frames_encoded_fraction: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityVideoProducerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `rtt: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeRTT]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `role: Optional[str]` Name of the preset associated with the participant. - `session_id: Optional[str]` - `updated_at: Optional[str]` timestamp when this participant's data was last updated. - `user_id: Optional[str]` User id for this participant. - `success: Optional[bool]` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.realtime_kit.sessions.get_participant_data_from_peer_id( peer_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", account_id="023e105f4ecef8ad9ca31a8372d0c353", app_id="app_id", ) print(response.data) ``` #### Response ```json { "data": { "participant": { "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "created_at": "created_at", "custom_participant_id": "custom_participant_id", "display_name": "display_name", "duration": 0, "joined_at": "joined_at", "left_at": "left_at", "peer_events": [ { "id": "id", "created_at": "created_at", "event_name": "PEER_CREATED", "minutes_consumed": 0, "participant_id": "participant_id", "peer_id": "peer_id", "preset_view_type": "GROUP_CALL", "session_id": "session_id", "socket_session_id": "socket_session_id", "updated_at": "updated_at" } ], "peer_report": { "metadata": { "audio_devices_updates": [ { "added": [ { "device_id": "device_id", "kind": "kind", "label": "label" } ], "removed": [ { "device_id": "device_id", "kind": "kind", "label": "label" } ], "timestamp": "timestamp" } ], "browser_metadata": { "browser": "browser", "browser_version": "browser_version", "engine": "engine", "user_agent": "user_agent", "webgl_support": true }, "candidate_pairs": { "consuming_transport": [ { "available_incoming_bitrate": 0, "available_outgoing_bitrate": 0, "bytes_discarded_on_send": 0, "bytes_received": 0, "bytes_sent": 0, "current_round_trip_time": 0, "last_packet_received_timestamp": 0, "last_packet_sent_timestamp": 0, "local_candidate_address": "local_candidate_address", "local_candidate_id": "local_candidate_id", "local_candidate_network_type": "local_candidate_network_type", "local_candidate_port": 0, "local_candidate_protocol": "local_candidate_protocol", "local_candidate_related_address": "local_candidate_related_address", "local_candidate_related_port": 0, "local_candidate_type": "local_candidate_type", "local_candidate_url": "local_candidate_url", "nominated": true, "packets_discarded_on_send": 0, "packets_received": 0, "packets_sent": 0, "remote_candidate_address": "remote_candidate_address", "remote_candidate_id": "remote_candidate_id", "remote_candidate_port": 0, "remote_candidate_protocol": "remote_candidate_protocol", "remote_candidate_type": "remote_candidate_type", "remote_candidate_url": "remote_candidate_url", "total_round_trip_time": 0 } ], "producing_transport": [ { "available_incoming_bitrate": 0, "available_outgoing_bitrate": 0, "bytes_discarded_on_send": 0, "bytes_received": 0, "bytes_sent": 0, "current_round_trip_time": 0, "last_packet_received_timestamp": 0, "last_packet_sent_timestamp": 0, "local_candidate_address": "local_candidate_address", "local_candidate_id": "local_candidate_id", "local_candidate_network_type": "local_candidate_network_type", "local_candidate_port": 0, "local_candidate_protocol": "local_candidate_protocol", "local_candidate_related_address": "local_candidate_related_address", "local_candidate_related_port": 0, "local_candidate_type": "local_candidate_type", "local_candidate_url": "local_candidate_url", "nominated": true, "packets_discarded_on_send": 0, "packets_received": 0, "packets_sent": 0, "remote_candidate_address": "remote_candidate_address", "remote_candidate_id": "remote_candidate_id", "remote_candidate_port": 0, "remote_candidate_protocol": "remote_candidate_protocol", "remote_candidate_type": "remote_candidate_type", "remote_candidate_url": "remote_candidate_url", "total_round_trip_time": 0 } ] }, "device_info": { "cpus": 0, "is_mobile": true, "os": "os", "os_version": "os_version" }, "events": [ { "metadata": { "foo": "string" }, "name": "name", "timestamp": "timestamp" } ], "ip_information": { "asn": { "asn": "asn", "domain": "domain", "name": "name", "route": "route", "type": "type" }, "city": "city", "country": "country", "ipv4": "ipv4", "org": "org", "region": "region", "timezone": "timezone" }, "native_metadata": { "audio_encoder": "audio_encoder", "video_encoder": "video_encoder" }, "pc_metadata": [ { "effective_network_type": "effective_network_type", "reflexive_connectivity": true, "relay_connectivity": true, "sdp": [ "string" ], "timestamp": "timestamp", "turn_connectivity": true } ], "room_view_type": "room_view_type", "sdk_name": "sdk_name", "sdk_type": "sdk_type", "sdk_version": "sdk_version", "selected_device_updates": [ { "device": { "device_id": "device_id", "kind": "kind", "label": "label" }, "timestamp": "timestamp" } ], "speaker_devices_updates": [ { "added": [ { "device_id": "device_id", "kind": "kind", "label": "label" } ], "removed": [ { "device_id": "device_id", "kind": "kind", "label": "label" } ], "timestamp": "timestamp" } ], "video_devices_updates": [ { "added": [ { "device_id": "device_id", "kind": "kind", "label": "label" } ], "removed": [ { "device_id": "device_id", "kind": "kind", "label": "label" } ], "timestamp": "timestamp" } ] }, "quality": { "audio_consumer": [ { "bytes_received": 0, "concealment_events": 0, "consumer_id": "consumer_id", "jitter": 0, "jitter_buffer_delay": 0, "jitter_buffer_emitted_count": 0, "mid": "mid", "mos_quality": 0, "packets_lost": 0, "packets_received": 0, "peer_id": "peer_id", "producer_id": "producer_id", "ssrc": 0, "timestamp": "timestamp" } ], "audio_consumer_cumulative": { "jitter_buffer_delay": { "100ms_or_greater_event_fraction": 0, "250ms_or_greater_event_fraction": 0, "500ms_or_greater_event_fraction": 0, "avg": 0 }, "packet_loss": { "10_or_greater_event_fraction": 0, "25_or_greater_event_fraction": 0, "5_or_greater_event_fraction": 0, "50_or_greater_event_fraction": 0, "avg": 0 }, "quality_mos": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 } }, "audio_producer": [ { "bytes_sent": 0, "jitter": 0, "mid": "mid", "mos_quality": 0, "packets_lost": 0, "packets_sent": 0, "producer_id": "producer_id", "rtt": 0, "ssrc": 0, "timestamp": "timestamp" } ], "audio_producer_cumulative": { "packet_loss": { "10_or_greater_event_fraction": 0, "25_or_greater_event_fraction": 0, "5_or_greater_event_fraction": 0, "50_or_greater_event_fraction": 0, "avg": 0 }, "quality_mos": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "rtt": { "100ms_or_greater_event_fraction": 0, "250ms_or_greater_event_fraction": 0, "500ms_or_greater_event_fraction": 0, "avg": 0 } }, "screenshare_audio_consumer": [ { "bytes_received": 0, "concealment_events": 0, "consumer_id": "consumer_id", "jitter": 0, "jitter_buffer_delay": 0, "jitter_buffer_emitted_count": 0, "mid": "mid", "mos_quality": 0, "packets_lost": 0, "packets_received": 0, "peer_id": "peer_id", "producer_id": "producer_id", "ssrc": 0, "timestamp": "timestamp" } ], "screenshare_audio_consumer_cumulative": { "jitter_buffer_delay": { "100ms_or_greater_event_fraction": 0, "250ms_or_greater_event_fraction": 0, "500ms_or_greater_event_fraction": 0, "avg": 0 }, "packet_loss": { "10_or_greater_event_fraction": 0, "25_or_greater_event_fraction": 0, "5_or_greater_event_fraction": 0, "50_or_greater_event_fraction": 0, "avg": 0 }, "quality_mos": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 } }, "screenshare_audio_producer": [ { "bytes_sent": 0, "jitter": 0, "mid": "mid", "mos_quality": 0, "packets_lost": 0, "packets_sent": 0, "producer_id": "producer_id", "rtt": 0, "ssrc": 0, "timestamp": "timestamp" } ], "screenshare_audio_producer_cumulative": { "packet_loss": { "10_or_greater_event_fraction": 0, "25_or_greater_event_fraction": 0, "5_or_greater_event_fraction": 0, "50_or_greater_event_fraction": 0, "avg": 0 }, "quality_mos": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "rtt": { "100ms_or_greater_event_fraction": 0, "250ms_or_greater_event_fraction": 0, "500ms_or_greater_event_fraction": 0, "avg": 0 } }, "screenshare_video_consumer": [ { "bytes_received": 0, "consumer_id": "consumer_id", "fir_count": 0, "frame_height": 0, "frame_width": 0, "frames_decoded": 0, "frames_dropped": 0, "frames_per_second": 0, "jitter": 0, "jitter_buffer_delay": 0, "jitter_buffer_emitted_count": 0, "key_frames_decoded": 0, "mid": "mid", "mos_quality": 0, "packets_lost": 0, "packets_received": 0, "peer_id": "peer_id", "producer_id": "producer_id", "ssrc": 0, "timestamp": "timestamp" } ], "screenshare_video_consumer_cumulative": { "frame_per_second": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "frame_width": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "issues": { "lag_fraction": 0, "no_video_fraction": 0, "poor_resolution_fraction": 0 }, "jitter_buffer_delay": { "100ms_or_greater_event_fraction": 0, "250ms_or_greater_event_fraction": 0, "500ms_or_greater_event_fraction": 0, "avg": 0 }, "key_frames_decoded_fraction": 0, "packet_loss": { "10_or_greater_event_fraction": 0, "25_or_greater_event_fraction": 0, "5_or_greater_event_fraction": 0, "50_or_greater_event_fraction": 0, "avg": 0 }, "quality_mos": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 } }, "screenshare_video_producer": [ { "bytes_sent": 0, "fir_count": 0, "frame_height": 0, "frame_width": 0, "frames_encoded": 0, "frames_per_second": 0, "jitter": 0, "key_frames_encoded": 0, "mid": "mid", "mos_quality": 0, "packets_lost": 0, "packets_sent": 0, "pli_count": 0, "producer_id": "producer_id", "quality_limitation_durations": { "bandwidth": 0, "cpu": 0, "none": 0, "other": 0 }, "quality_limitation_reason": "cpu", "quality_limitation_resolution_changes": 0, "rtt": 0, "ssrc": 0, "timestamp": "timestamp" } ], "screenshare_video_producer_cumulative": { "frame_per_second": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "frame_width": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "high_negative_feedback_fraction": 0, "issues": { "bandwidth_quality_limitation_fraction": 0, "cpu_quality_limitation_fraction": 0, "no_video_fraction": 0, "poor_resolution_fraction": 0, "quality_limitation_fraction": 0 }, "key_frames_encoded_fraction": 0, "packet_loss": { "10_or_greater_event_fraction": 0, "25_or_greater_event_fraction": 0, "5_or_greater_event_fraction": 0, "50_or_greater_event_fraction": 0, "avg": 0 }, "quality_mos": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "rtt": { "100ms_or_greater_event_fraction": 0, "250ms_or_greater_event_fraction": 0, "500ms_or_greater_event_fraction": 0, "avg": 0 } }, "video_consumer": [ { "bytes_received": 0, "consumer_id": "consumer_id", "fir_count": 0, "frame_height": 0, "frame_width": 0, "frames_decoded": 0, "frames_dropped": 0, "frames_per_second": 0, "jitter": 0, "jitter_buffer_delay": 0, "jitter_buffer_emitted_count": 0, "key_frames_decoded": 0, "mid": "mid", "mos_quality": 0, "packets_lost": 0, "packets_received": 0, "peer_id": "peer_id", "producer_id": "producer_id", "ssrc": 0, "timestamp": "timestamp" } ], "video_consumer_cumulative": { "frame_per_second": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "frame_width": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "issues": { "lag_fraction": 0, "no_video_fraction": 0, "poor_resolution_fraction": 0 }, "jitter_buffer_delay": { "100ms_or_greater_event_fraction": 0, "250ms_or_greater_event_fraction": 0, "500ms_or_greater_event_fraction": 0, "avg": 0 }, "key_frames_decoded_fraction": 0, "packet_loss": { "10_or_greater_event_fraction": 0, "25_or_greater_event_fraction": 0, "5_or_greater_event_fraction": 0, "50_or_greater_event_fraction": 0, "avg": 0 }, "quality_mos": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 } }, "video_producer": [ { "bytes_sent": 0, "fir_count": 0, "frame_height": 0, "frame_width": 0, "frames_encoded": 0, "frames_per_second": 0, "jitter": 0, "key_frames_encoded": 0, "mid": "mid", "mos_quality": 0, "packets_lost": 0, "packets_sent": 0, "pli_count": 0, "producer_id": "producer_id", "quality_limitation_durations": { "bandwidth": 0, "cpu": 0, "none": 0, "other": 0 }, "quality_limitation_reason": "cpu", "quality_limitation_resolution_changes": 0, "rtt": 0, "ssrc": 0, "timestamp": "timestamp" } ], "video_producer_cumulative": { "frame_per_second": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "frame_width": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "high_negative_feedback_fraction": 0, "issues": { "bandwidth_quality_limitation_fraction": 0, "cpu_quality_limitation_fraction": 0, "no_video_fraction": 0, "poor_resolution_fraction": 0, "quality_limitation_fraction": 0 }, "key_frames_encoded_fraction": 0, "packet_loss": { "10_or_greater_event_fraction": 0, "25_or_greater_event_fraction": 0, "5_or_greater_event_fraction": 0, "50_or_greater_event_fraction": 0, "avg": 0 }, "quality_mos": { "avg": 0, "p50": 0, "p75": 0, "p90": 0 }, "rtt": { "100ms_or_greater_event_fraction": 0, "250ms_or_greater_event_fraction": 0, "500ms_or_greater_event_fraction": 0, "avg": 0 } } } }, "role": "role", "session_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "updated_at": "updated_at", "user_id": "user_id" } }, "success": true } ``` ## Domain Types ### Session Get Sessions Response - `class SessionGetSessionsResponse: …` - `data: Optional[Data]` - `sessions: Optional[List[DataSession]]` - `id: str` ID of the session - `associated_id: str` ID of the meeting this session is associated with. In the case of V2 meetings, it is always a UUID. In V1 meetings, it is a room name of the form `abcdef-ghijkl` - `created_at: str` timestamp when session created - `live_participants: float` number of participants currently in the session - `max_concurrent_participants: float` number of maximum participants that were in the session - `meeting_display_name: str` Title of the meeting this session belongs to - `minutes_consumed: float` number of minutes consumed since the session started - `organization_id: str` App id that hosted this session - `started_at: str` timestamp when session started - `status: Literal["LIVE", "ENDED"]` current status of session - `"LIVE"` - `"ENDED"` - `type: Literal["meeting", "livestream", "participant"]` type of session - `"meeting"` - `"livestream"` - `"participant"` - `updated_at: str` timestamp when session was last updated - `breakout_rooms: Optional[List[object]]` - `ended_at: Optional[str]` timestamp when session ended - `paging: Optional[Paging]` - `end_offset: Optional[float]` - `start_offset: Optional[float]` - `total_count: Optional[float]` - `success: Optional[bool]` ### Session Get Session Details Response - `class SessionGetSessionDetailsResponse: …` - `data: Optional[Data]` - `id: str` ID of the session - `associated_id: str` ID of the meeting this session is associated with. In the case of V2 meetings, it is always a UUID. In V1 meetings, it is a room name of the form `abcdef-ghijkl` - `created_at: str` timestamp when session created - `live_participants: float` number of participants currently in the session - `max_concurrent_participants: float` number of maximum participants that were in the session - `meeting_display_name: str` Title of the meeting this session belongs to - `minutes_consumed: float` number of minutes consumed since the session started - `organization_id: str` App id that hosted this session - `started_at: str` timestamp when session started - `status: Literal["LIVE", "ENDED"]` current status of session - `"LIVE"` - `"ENDED"` - `type: Literal["meeting", "livestream", "participant"]` type of session - `"meeting"` - `"livestream"` - `"participant"` - `updated_at: str` timestamp when session was last updated - `breakout_rooms: Optional[List[object]]` - `ended_at: Optional[str]` timestamp when session ended - `success: Optional[bool]` ### Session Get Session Participants Response - `class SessionGetSessionParticipantsResponse: …` - `data: Optional[Data]` - `participants: Optional[List[DataParticipant]]` - `id: Optional[str]` Participant ID. This maps to the corresponding peerId. - `created_at: Optional[str]` timestamp when this participant was created. - `custom_participant_id: Optional[str]` ID passed by client to create this participant. - `display_name: Optional[str]` Display name of participant when joining the session. - `duration: Optional[float]` number of minutes for which the participant was in the session. - `joined_at: Optional[str]` timestamp at which participant joined the session. - `left_at: Optional[str]` timestamp at which participant left the session. - `peer_events: Optional[List[DataParticipantPeerEvent]]` Connection lifecycle events for the participant's peer. Only included when `include_peer_events` is true. - `id: Optional[str]` ID of the peer event. - `created_at: Optional[str]` Timestamp when this peer event was created. - `event_name: Optional[Literal["PEER_CREATED", "PEER_JOINING", "PEER_LEAVING"]]` Name of the peer event. - `"PEER_CREATED"` - `"PEER_JOINING"` - `"PEER_LEAVING"` - `minutes_consumed: Optional[float]` Minutes consumed attributed to this event. - `participant_id: Optional[str]` ID of the participant this event belongs to. - `peer_id: Optional[str]` Peer ID this event belongs to. - `preset_view_type: Optional[Literal["GROUP_CALL", "WEBINAR", "AUDIO_ROOM", 2 more]]` View type of the preset associated with the peer. - `"GROUP_CALL"` - `"WEBINAR"` - `"AUDIO_ROOM"` - `"LIVESTREAM"` - `"CHAT"` - `session_id: Optional[str]` ID of the session this event belongs to. - `socket_session_id: Optional[str]` ID of the socket session associated with this event. - `updated_at: Optional[str]` Timestamp when this peer event was last updated. - `preset_name: Optional[str]` Name of the preset associated with the participant. - `updated_at: Optional[str]` timestamp when this participant's data was last updated. - `user_id: Optional[str]` User id for this participant. - `success: Optional[bool]` ### Session Get Session Participant Details Response - `class SessionGetSessionParticipantDetailsResponse: …` - `data: Optional[Data]` - `participant: Optional[DataParticipant]` - `id: Optional[str]` Participant ID. This maps to the corresponding peerId. - `created_at: Optional[str]` timestamp when this participant was created. - `custom_participant_id: Optional[str]` ID passed by client to create this participant. - `display_name: Optional[str]` Display name of participant when joining the session. - `duration: Optional[float]` number of minutes for which the participant was in the session. - `joined_at: Optional[str]` timestamp at which participant joined the session. - `left_at: Optional[str]` timestamp at which participant left the session. - `peer_events: Optional[List[DataParticipantPeerEvent]]` Connection lifecycle events for the participant's peer. Only included when `include_peer_events` is true. - `id: Optional[str]` ID of the peer event. - `created_at: Optional[str]` Timestamp when this peer event was created. - `event_name: Optional[Literal["PEER_CREATED", "PEER_JOINING", "PEER_LEAVING"]]` Name of the peer event. - `"PEER_CREATED"` - `"PEER_JOINING"` - `"PEER_LEAVING"` - `minutes_consumed: Optional[float]` Minutes consumed attributed to this event. - `participant_id: Optional[str]` ID of the participant this event belongs to. - `peer_id: Optional[str]` Peer ID this event belongs to. - `preset_view_type: Optional[Literal["GROUP_CALL", "WEBINAR", "AUDIO_ROOM", 2 more]]` View type of the preset associated with the peer. - `"GROUP_CALL"` - `"WEBINAR"` - `"AUDIO_ROOM"` - `"LIVESTREAM"` - `"CHAT"` - `session_id: Optional[str]` ID of the session this event belongs to. - `socket_session_id: Optional[str]` ID of the socket session associated with this event. - `updated_at: Optional[str]` Timestamp when this peer event was last updated. - `preset_name: Optional[str]` Name of the preset associated with the participant. - `updated_at: Optional[str]` timestamp when this participant's data was last updated. - `user_id: Optional[str]` User id for this participant. - `success: Optional[bool]` ### Session Get Session Chat Response - `class SessionGetSessionChatResponse: …` - `data: Optional[Data]` - `chat_download_url: str` URL where the chat logs can be downloaded - `chat_download_url_expiry: str` Time when the download URL will expire - `success: Optional[bool]` ### Session Get Session Transcripts Response - `class SessionGetSessionTranscriptsResponse: …` - `data: Optional[Data]` - `session_id: str` - `transcript_download_url: str` URL where the transcript can be downloaded - `transcript_download_url_expiry: str` Time when the download URL will expire - `success: Optional[bool]` ### Session Get Session Summary Response - `class SessionGetSessionSummaryResponse: …` - `data: Optional[Data]` - `session_id: str` - `summary_download_url: str` URL where the summary of transcripts can be downloaded - `summary_download_url_expiry: str` Time of Expiry before when you need to download the csv file. - `success: Optional[bool]` ### Session Generate Summary Of Transcripts Response - `class SessionGenerateSummaryOfTranscriptsResponse: …` - `data: Optional[Data]` - `session_id: Optional[str]` - `status: Optional[str]` - `success: Optional[bool]` ### Session Get Participant Data From Peer ID Response - `class SessionGetParticipantDataFromPeerIDResponse: …` - `data: Optional[Data]` - `participant: Optional[DataParticipant]` - `id: Optional[str]` ID of the participant. - `created_at: Optional[str]` timestamp when this participant was created. - `custom_participant_id: Optional[str]` ID passed by client to create this participant. - `display_name: Optional[str]` Display name of participant when joining the session. - `duration: Optional[float]` number of minutes for which the participant was in the session. - `joined_at: Optional[str]` timestamp at which participant joined the session. - `left_at: Optional[str]` timestamp at which participant left the session. - `peer_events: Optional[List[DataParticipantPeerEvent]]` Connection lifecycle events for the participant's peer. - `id: Optional[str]` ID of the peer event. - `created_at: Optional[str]` Timestamp when this peer event was created. - `event_name: Optional[Literal["PEER_CREATED", "PEER_JOINING", "PEER_LEAVING"]]` Name of the peer event. - `"PEER_CREATED"` - `"PEER_JOINING"` - `"PEER_LEAVING"` - `minutes_consumed: Optional[float]` Minutes consumed attributed to this event. - `participant_id: Optional[str]` ID of the participant this event belongs to. - `peer_id: Optional[str]` Peer ID this event belongs to. - `preset_view_type: Optional[Literal["GROUP_CALL", "WEBINAR", "AUDIO_ROOM", 2 more]]` View type of the preset associated with the peer. - `"GROUP_CALL"` - `"WEBINAR"` - `"AUDIO_ROOM"` - `"LIVESTREAM"` - `"CHAT"` - `session_id: Optional[str]` ID of the session this event belongs to. - `socket_session_id: Optional[str]` ID of the socket session associated with this event. - `updated_at: Optional[str]` Timestamp when this peer event was last updated. - `peer_report: Optional[DataParticipantPeerReport]` Peer call statistics report. - `metadata: Optional[DataParticipantPeerReportMetadata]` Connection and device metadata for the participant. - `audio_devices_updates: Optional[List[DataParticipantPeerReportMetadataAudioDevicesUpdate]]` - `added: Optional[List[DataParticipantPeerReportMetadataAudioDevicesUpdateAdded]]` Devices that became available. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `removed: Optional[List[DataParticipantPeerReportMetadataAudioDevicesUpdateRemoved]]` Devices that became unavailable. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `timestamp: Optional[str]` Timestamp of the device update. - `browser_metadata: Optional[DataParticipantPeerReportMetadataBrowserMetadata]` - `browser: Optional[str]` - `browser_version: Optional[str]` - `engine: Optional[str]` - `user_agent: Optional[str]` - `webgl_support: Optional[bool]` - `candidate_pairs: Optional[DataParticipantPeerReportMetadataCandidatePairs]` - `consuming_transport: Optional[List[DataParticipantPeerReportMetadataCandidatePairsConsumingTransport]]` - `available_incoming_bitrate: Optional[float]` - `available_outgoing_bitrate: Optional[float]` - `bytes_discarded_on_send: Optional[float]` - `bytes_received: Optional[float]` - `bytes_sent: Optional[float]` - `current_round_trip_time: Optional[float]` - `last_packet_received_timestamp: Optional[float]` Epoch milliseconds when the last packet was received. - `last_packet_sent_timestamp: Optional[float]` Epoch milliseconds when the last packet was sent. - `local_candidate_address: Optional[str]` - `local_candidate_id: Optional[str]` - `local_candidate_network_type: Optional[str]` - `local_candidate_port: Optional[float]` - `local_candidate_protocol: Optional[str]` - `local_candidate_related_address: Optional[str]` - `local_candidate_related_port: Optional[float]` - `local_candidate_type: Optional[str]` - `local_candidate_url: Optional[str]` - `nominated: Optional[bool]` - `packets_discarded_on_send: Optional[float]` - `packets_received: Optional[float]` - `packets_sent: Optional[float]` - `remote_candidate_address: Optional[str]` - `remote_candidate_id: Optional[str]` - `remote_candidate_port: Optional[float]` - `remote_candidate_protocol: Optional[str]` - `remote_candidate_type: Optional[str]` - `remote_candidate_url: Optional[str]` - `total_round_trip_time: Optional[float]` - `producing_transport: Optional[List[DataParticipantPeerReportMetadataCandidatePairsProducingTransport]]` - `available_incoming_bitrate: Optional[float]` - `available_outgoing_bitrate: Optional[float]` - `bytes_discarded_on_send: Optional[float]` - `bytes_received: Optional[float]` - `bytes_sent: Optional[float]` - `current_round_trip_time: Optional[float]` - `last_packet_received_timestamp: Optional[float]` Epoch milliseconds when the last packet was received. - `last_packet_sent_timestamp: Optional[float]` Epoch milliseconds when the last packet was sent. - `local_candidate_address: Optional[str]` - `local_candidate_id: Optional[str]` - `local_candidate_network_type: Optional[str]` - `local_candidate_port: Optional[float]` - `local_candidate_protocol: Optional[str]` - `local_candidate_related_address: Optional[str]` - `local_candidate_related_port: Optional[float]` - `local_candidate_type: Optional[str]` - `local_candidate_url: Optional[str]` - `nominated: Optional[bool]` - `packets_discarded_on_send: Optional[float]` - `packets_received: Optional[float]` - `packets_sent: Optional[float]` - `remote_candidate_address: Optional[str]` - `remote_candidate_id: Optional[str]` - `remote_candidate_port: Optional[float]` - `remote_candidate_protocol: Optional[str]` - `remote_candidate_type: Optional[str]` - `remote_candidate_url: Optional[str]` - `total_round_trip_time: Optional[float]` - `device_info: Optional[DataParticipantPeerReportMetadataDeviceInfo]` - `cpus: Optional[float]` - `is_mobile: Optional[bool]` - `os: Optional[str]` - `os_version: Optional[str]` - `events: Optional[List[DataParticipantPeerReportMetadataEvent]]` - `metadata: Optional[Dict[str, Union[str, float, bool, null]]]` Event-specific metadata. Keys vary per event; values are primitive scalars (string, number, boolean, or null). - `str` - `float` - `bool` - `name: Optional[str]` Name of the event. - `timestamp: Optional[str]` Timestamp when the event occurred. - `ip_information: Optional[DataParticipantPeerReportMetadataIPInformation]` - `asn: Optional[DataParticipantPeerReportMetadataIPInformationASN]` - `asn: Optional[str]` - `domain: Optional[str]` - `name: Optional[str]` - `route: Optional[str]` - `type: Optional[str]` - `city: Optional[str]` - `country: Optional[str]` - `ipv4: Optional[str]` - `org: Optional[str]` - `region: Optional[str]` - `timezone: Optional[str]` - `native_metadata: Optional[DataParticipantPeerReportMetadataNativeMetadata]` - `audio_encoder: Optional[str]` - `video_encoder: Optional[str]` - `pc_metadata: Optional[List[DataParticipantPeerReportMetadataPcMetadata]]` - `effective_network_type: Optional[str]` - `reflexive_connectivity: Optional[bool]` - `relay_connectivity: Optional[bool]` - `sdp: Optional[List[str]]` - `timestamp: Optional[str]` - `turn_connectivity: Optional[bool]` - `room_view_type: Optional[str]` - `sdk_name: Optional[str]` - `sdk_type: Optional[str]` - `sdk_version: Optional[str]` - `selected_device_updates: Optional[List[DataParticipantPeerReportMetadataSelectedDeviceUpdate]]` - `device: Optional[DataParticipantPeerReportMetadataSelectedDeviceUpdateDevice]` A media device (camera, microphone, or speaker). - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `timestamp: Optional[str]` - `speaker_devices_updates: Optional[List[DataParticipantPeerReportMetadataSpeakerDevicesUpdate]]` - `added: Optional[List[DataParticipantPeerReportMetadataSpeakerDevicesUpdateAdded]]` Devices that became available. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `removed: Optional[List[DataParticipantPeerReportMetadataSpeakerDevicesUpdateRemoved]]` Devices that became unavailable. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `timestamp: Optional[str]` Timestamp of the device update. - `video_devices_updates: Optional[List[DataParticipantPeerReportMetadataVideoDevicesUpdate]]` - `added: Optional[List[DataParticipantPeerReportMetadataVideoDevicesUpdateAdded]]` Devices that became available. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `removed: Optional[List[DataParticipantPeerReportMetadataVideoDevicesUpdateRemoved]]` Devices that became unavailable. - `device_id: Optional[str]` ID of the device. - `kind: Optional[str]` Kind of device, for example audioinput or videoinput. - `label: Optional[str]` Human-readable label of the device. - `timestamp: Optional[str]` Timestamp of the device update. - `quality: Optional[DataParticipantPeerReportQuality]` Media quality statistics for the participant. - `audio_consumer: Optional[List[DataParticipantPeerReportQualityAudioConsumer]]` - `bytes_received: Optional[float]` - `concealment_events: Optional[float]` - `consumer_id: Optional[str]` - `jitter: Optional[float]` - `jitter_buffer_delay: Optional[float]` - `jitter_buffer_emitted_count: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_received: Optional[float]` - `peer_id: Optional[str]` - `producer_id: Optional[str]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `audio_consumer_cumulative: Optional[DataParticipantPeerReportQualityAudioConsumerCumulative]` Aggregated inbound (consumer) audio statistics for the session. - `jitter_buffer_delay: Optional[DataParticipantPeerReportQualityAudioConsumerCumulativeJitterBufferDelay]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityAudioConsumerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityAudioConsumerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `audio_producer: Optional[List[DataParticipantPeerReportQualityAudioProducer]]` - `bytes_sent: Optional[float]` - `jitter: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_sent: Optional[float]` - `producer_id: Optional[str]` - `rtt: Optional[float]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `audio_producer_cumulative: Optional[DataParticipantPeerReportQualityAudioProducerCumulative]` Aggregated outbound (producer) audio statistics for the session. - `packet_loss: Optional[DataParticipantPeerReportQualityAudioProducerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityAudioProducerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `rtt: Optional[DataParticipantPeerReportQualityAudioProducerCumulativeRTT]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `screenshare_audio_consumer: Optional[List[DataParticipantPeerReportQualityScreenshareAudioConsumer]]` - `bytes_received: Optional[float]` - `concealment_events: Optional[float]` - `consumer_id: Optional[str]` - `jitter: Optional[float]` - `jitter_buffer_delay: Optional[float]` - `jitter_buffer_emitted_count: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_received: Optional[float]` - `peer_id: Optional[str]` - `producer_id: Optional[str]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `screenshare_audio_consumer_cumulative: Optional[DataParticipantPeerReportQualityScreenshareAudioConsumerCumulative]` Aggregated inbound (consumer) audio statistics for the session. - `jitter_buffer_delay: Optional[DataParticipantPeerReportQualityScreenshareAudioConsumerCumulativeJitterBufferDelay]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityScreenshareAudioConsumerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityScreenshareAudioConsumerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `screenshare_audio_producer: Optional[List[DataParticipantPeerReportQualityScreenshareAudioProducer]]` - `bytes_sent: Optional[float]` - `jitter: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_sent: Optional[float]` - `producer_id: Optional[str]` - `rtt: Optional[float]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `screenshare_audio_producer_cumulative: Optional[DataParticipantPeerReportQualityScreenshareAudioProducerCumulative]` Aggregated outbound (producer) audio statistics for the session. - `packet_loss: Optional[DataParticipantPeerReportQualityScreenshareAudioProducerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityScreenshareAudioProducerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `rtt: Optional[DataParticipantPeerReportQualityScreenshareAudioProducerCumulativeRTT]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `screenshare_video_consumer: Optional[List[DataParticipantPeerReportQualityScreenshareVideoConsumer]]` - `bytes_received: Optional[float]` - `consumer_id: Optional[str]` - `fir_count: Optional[float]` - `frame_height: Optional[float]` - `frame_width: Optional[float]` - `frames_decoded: Optional[float]` - `frames_dropped: Optional[float]` - `frames_per_second: Optional[float]` - `jitter: Optional[float]` - `jitter_buffer_delay: Optional[float]` - `jitter_buffer_emitted_count: Optional[float]` - `key_frames_decoded: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_received: Optional[float]` - `peer_id: Optional[str]` - `producer_id: Optional[str]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `screenshare_video_consumer_cumulative: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulative]` Aggregated inbound (consumer) video statistics for the session. - `frame_per_second: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeFramePerSecond]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `frame_width: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeFrameWidth]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `issues: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeIssues]` - `lag_fraction: Optional[float]` - `no_video_fraction: Optional[float]` - `poor_resolution_fraction: Optional[float]` - `jitter_buffer_delay: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeJitterBufferDelay]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `key_frames_decoded_fraction: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityScreenshareVideoConsumerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `screenshare_video_producer: Optional[List[DataParticipantPeerReportQualityScreenshareVideoProducer]]` - `bytes_sent: Optional[float]` - `fir_count: Optional[float]` - `frame_height: Optional[float]` - `frame_width: Optional[float]` - `frames_encoded: Optional[float]` - `frames_per_second: Optional[float]` - `jitter: Optional[float]` - `key_frames_encoded: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_sent: Optional[float]` - `pli_count: Optional[float]` - `producer_id: Optional[str]` - `quality_limitation_durations: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerQualityLimitationDurations]` - `bandwidth: Optional[float]` - `cpu: Optional[float]` - `none: Optional[float]` - `other: Optional[float]` - `quality_limitation_reason: Optional[Literal["cpu", "bandwidth", "none", "other"]]` - `"cpu"` - `"bandwidth"` - `"none"` - `"other"` - `quality_limitation_resolution_changes: Optional[float]` - `rtt: Optional[float]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `screenshare_video_producer_cumulative: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulative]` Aggregated outbound (producer) video statistics for the session. - `frame_per_second: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeFramePerSecond]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `frame_width: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeFrameWidth]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `high_negative_feedback_fraction: Optional[float]` - `issues: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeIssues]` - `bandwidth_quality_limitation_fraction: Optional[float]` - `cpu_quality_limitation_fraction: Optional[float]` - `no_video_fraction: Optional[float]` - `poor_resolution_fraction: Optional[float]` - `quality_limitation_fraction: Optional[float]` - `key_frames_encoded_fraction: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `rtt: Optional[DataParticipantPeerReportQualityScreenshareVideoProducerCumulativeRTT]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `video_consumer: Optional[List[DataParticipantPeerReportQualityVideoConsumer]]` - `bytes_received: Optional[float]` - `consumer_id: Optional[str]` - `fir_count: Optional[float]` - `frame_height: Optional[float]` - `frame_width: Optional[float]` - `frames_decoded: Optional[float]` - `frames_dropped: Optional[float]` - `frames_per_second: Optional[float]` - `jitter: Optional[float]` - `jitter_buffer_delay: Optional[float]` - `jitter_buffer_emitted_count: Optional[float]` - `key_frames_decoded: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_received: Optional[float]` - `peer_id: Optional[str]` - `producer_id: Optional[str]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `video_consumer_cumulative: Optional[DataParticipantPeerReportQualityVideoConsumerCumulative]` Aggregated inbound (consumer) video statistics for the session. - `frame_per_second: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeFramePerSecond]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `frame_width: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeFrameWidth]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `issues: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeIssues]` - `lag_fraction: Optional[float]` - `no_video_fraction: Optional[float]` - `poor_resolution_fraction: Optional[float]` - `jitter_buffer_delay: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeJitterBufferDelay]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `key_frames_decoded_fraction: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityVideoConsumerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `video_producer: Optional[List[DataParticipantPeerReportQualityVideoProducer]]` - `bytes_sent: Optional[float]` - `fir_count: Optional[float]` - `frame_height: Optional[float]` - `frame_width: Optional[float]` - `frames_encoded: Optional[float]` - `frames_per_second: Optional[float]` - `jitter: Optional[float]` - `key_frames_encoded: Optional[float]` - `mid: Optional[str]` - `mos_quality: Optional[float]` - `packets_lost: Optional[float]` - `packets_sent: Optional[float]` - `pli_count: Optional[float]` - `producer_id: Optional[str]` - `quality_limitation_durations: Optional[DataParticipantPeerReportQualityVideoProducerQualityLimitationDurations]` - `bandwidth: Optional[float]` - `cpu: Optional[float]` - `none: Optional[float]` - `other: Optional[float]` - `quality_limitation_reason: Optional[Literal["cpu", "bandwidth", "none", "other"]]` - `"cpu"` - `"bandwidth"` - `"none"` - `"other"` - `quality_limitation_resolution_changes: Optional[float]` - `rtt: Optional[float]` - `ssrc: Optional[float]` - `timestamp: Optional[str]` - `video_producer_cumulative: Optional[DataParticipantPeerReportQualityVideoProducerCumulative]` Aggregated outbound (producer) video statistics for the session. - `frame_per_second: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeFramePerSecond]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `frame_width: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeFrameWidth]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `high_negative_feedback_fraction: Optional[float]` - `issues: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeIssues]` - `bandwidth_quality_limitation_fraction: Optional[float]` - `cpu_quality_limitation_fraction: Optional[float]` - `no_video_fraction: Optional[float]` - `poor_resolution_fraction: Optional[float]` - `quality_limitation_fraction: Optional[float]` - `key_frames_encoded_fraction: Optional[float]` - `packet_loss: Optional[DataParticipantPeerReportQualityVideoProducerCumulativePacketLoss]` Cumulative packet loss distribution. - `_10_or_greater_event_fraction: Optional[float]` - `_25_or_greater_event_fraction: Optional[float]` - `_5_or_greater_event_fraction: Optional[float]` - `_50_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `quality_mos: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeQualityMos]` Distribution summary with average and percentiles. - `avg: Optional[float]` - `p50: Optional[float]` - `p75: Optional[float]` - `p90: Optional[float]` - `rtt: Optional[DataParticipantPeerReportQualityVideoProducerCumulativeRTT]` Cumulative latency distribution (milliseconds-based thresholds). - `_100ms_or_greater_event_fraction: Optional[float]` - `_250ms_or_greater_event_fraction: Optional[float]` - `_500ms_or_greater_event_fraction: Optional[float]` - `avg: Optional[float]` - `role: Optional[str]` Name of the preset associated with the participant. - `session_id: Optional[str]` - `updated_at: Optional[str]` timestamp when this participant's data was last updated. - `user_id: Optional[str]` User id for this participant. - `success: Optional[bool]`