# Sessions ## Fetch all sessions of an App **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions` Returns details of all sessions of an App. ### Path Parameters - `account_id: string` The account identifier tag. - `app_id: string` The app identifier tag. ### Query Parameters - `associated_id: optional string` ID of the meeting that sessions should be associated with - `end_time: optional string` The end time range for which you want to retrieve the meetings. The time must be specified in ISO format. - `page_no: optional number` The page number from which you want your page search results to be displayed. - `participants: optional string` - `per_page: optional number` Number of results per page - `search: optional string` Search string that matches sessions based on meeting title, meeting ID, and session ID - `sort_by: optional "minutesConsumed" or "createdAt"` - `"minutesConsumed"` - `"createdAt"` - `sort_order: optional "ASC" or "DESC"` - `"ASC"` - `"DESC"` - `start_time: optional string` The start time range for which you want to retrieve the meetings. The time must be specified in ISO format. - `status: optional "LIVE" or "ENDED"` - `"LIVE"` - `"ENDED"` ### Returns - `data: optional object { sessions }` - `sessions: optional array of object { id, associated_id, created_at, 12 more }` - `id: string` ID of the session - `associated_id: string` 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: string` timestamp when session created - `live_participants: number` number of participants currently in the session - `max_concurrent_participants: number` number of maximum participants that were in the session - `meeting_display_name: string` Title of the meeting this session belongs to - `minutes_consumed: number` number of minutes consumed since the session started - `organization_id: string` App id that hosted this session - `started_at: string` timestamp when session started - `status: "LIVE" or "ENDED"` current status of session - `"LIVE"` - `"ENDED"` - `type: "meeting" or "livestream" or "participant"` type of session - `"meeting"` - `"livestream"` - `"participant"` - `updated_at: string` timestamp when session was last updated - `breakout_rooms: optional array of unknown` - `ended_at: optional string` timestamp when session ended - `meta: optional unknown` Any meta data about session. - `success: optional boolean` ### Example ```http curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" ``` #### 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", "meta": {} } ] }, "success": true } ``` ## Fetch details of a session **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}` Returns data of the given session ID including recording details. ### Path Parameters - `account_id: string` The account identifier tag. - `app_id: string` The app identifier tag. - `session_id: string` ### Query Parameters - `include_breakout_rooms: optional boolean` List all breakout rooms ### Returns - `data: optional object { session }` - `session: optional object { id, associated_id, created_at, 12 more }` - `id: string` ID of the session - `associated_id: string` 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: string` timestamp when session created - `live_participants: number` number of participants currently in the session - `max_concurrent_participants: number` number of maximum participants that were in the session - `meeting_display_name: string` Title of the meeting this session belongs to - `minutes_consumed: number` number of minutes consumed since the session started - `organization_id: string` App id that hosted this session - `started_at: string` timestamp when session started - `status: "LIVE" or "ENDED"` current status of session - `"LIVE"` - `"ENDED"` - `type: "meeting" or "livestream" or "participant"` type of session - `"meeting"` - `"livestream"` - `"participant"` - `updated_at: string` timestamp when session was last updated - `breakout_rooms: optional array of unknown` - `ended_at: optional string` timestamp when session ended - `meta: optional unknown` Any meta data about session. - `success: optional boolean` ### Example ```http curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" ``` #### Response ```json { "data": { "session": { "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", "meta": {} } }, "success": true } ``` ## Fetch participants list of a session **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/participants` Returns a list of participants for the given session ID. ### Path Parameters - `account_id: string` The account identifier tag. - `app_id: string` The app identifier tag. - `session_id: string` ### Query Parameters - `include_peer_events: optional boolean` if true, response includes all the peer events of participants. - `page_no: optional number` The page number from which you want your page search results to be displayed. - `per_page: optional number` Number of results per page - `search: optional string` The search query string. You can search using the meeting ID or title. - `sort_by: optional "joinedAt" or "duration"` - `"joinedAt"` - `"duration"` - `sort_order: optional "ASC" or "DESC"` - `"ASC"` - `"DESC"` - `view: optional "raw" or "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 - `data: optional object { participants }` - `participants: optional array of object { id, created_at, custom_participant_id, 7 more }` - `id: optional string` Participant ID. This maps to the corresponding peerId. - `created_at: optional string` timestamp when this participant was created. - `custom_participant_id: optional string` ID passed by client to create this participant. - `display_name: optional string` Display name of participant when joining the session. - `duration: optional number` number of minutes for which the participant was in the session. - `joined_at: optional string` timestamp at which participant joined the session. - `left_at: optional string` timestamp at which participant left the session. - `preset_name: optional string` Name of the preset associated with the participant. - `updated_at: optional string` timestamp when this participant's data was last updated. - `user_id: optional string` User id for this participant. - `success: optional boolean` ### Example ```http curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID/participants \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" ``` #### 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 **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. ### Path Parameters - `account_id: string` The account identifier tag. - `app_id: string` The app identifier tag. - `session_id: string` - `participant_id: string` ### Query Parameters - `filters: optional "device_info" or "ip_information" or "precall_network_information" or 2 more` Comma separated list of filters to apply. Note that there must be no spaces between the filters. - `"device_info"` - `"ip_information"` - `"precall_network_information"` - `"events"` - `"quality_stats"` - `include_peer_events: optional boolean` if true, response includes all the peer events of participant. ### Returns - `data: optional object { participant }` - `participant: optional object { id, created_at, custom_participant_id, 9 more }` - `id: optional string` Participant ID. This maps to the corresponding peerId. - `created_at: optional string` timestamp when this participant was created. - `custom_participant_id: optional string` ID passed by client to create this participant. - `display_name: optional string` Display name of participant when joining the session. - `duration: optional number` number of minutes for which the participant was in the session. - `joined_at: optional string` timestamp at which participant joined the session. - `left_at: optional string` timestamp at which participant left the session. - `peer_stats: optional object { config, device_info, events, 3 more }` - `config: optional string` - `device_info: optional object { browser, browser_version, cpus, 9 more }` - `browser: optional string` - `browser_version: optional string` - `cpus: optional number` - `engine: optional string` - `is_mobile: optional boolean` - `memory: optional number` - `os: optional string` - `os_version: optional string` - `sdk_name: optional string` - `sdk_version: optional string` - `user_agent: optional string` - `webgl_support: optional string` - `events: optional array of object { timestamp, type }` - `timestamp: optional string` - `type: optional string` - `ip_information: optional object { city, country, ip_location, 5 more }` - `city: optional string` - `country: optional string` - `ip_location: optional string` - `ipv4: optional string` - `org: optional string` - `portal: optional string` - `region: optional string` - `timezone: optional string` - `precall_network_information: optional object { backend_rtt, effective_networktype, fractional_loss, 6 more }` - `backend_rtt: optional number` - `effective_networktype: optional string` - `fractional_loss: optional number` - `jitter: optional number` - `reflexive_connectivity: optional boolean` - `relay_connectivity: optional boolean` - `rtt: optional number` - `throughtput: optional number` - `turn_connectivity: optional boolean` - `status: optional string` - `preset_name: optional string` Name of the preset associated with the participant. - `quality_stats: optional array of object { audio_bandwidth, audio_packet_loss, audio_stats, 7 more }` - `audio_bandwidth: optional number` - `audio_packet_loss: optional number` - `audio_stats: optional array of object { concealment_events, jitter, packets_lost, 2 more }` - `concealment_events: optional number` - `jitter: optional number` - `packets_lost: optional number` - `quality: optional number` - `timestamp: optional string` - `average_quality: optional number` - `end: optional string` - `peer_id: optional string` - `start: optional string` - `video_bandwidth: optional number` - `video_packet_loss: optional number` - `video_stats: optional array of object { frame_height, frame_width, frames_dropped, 5 more }` - `frame_height: optional number` - `frame_width: optional number` - `frames_dropped: optional number` - `frames_per_second: optional number` - `jitter: optional number` - `packets_lost: optional number` - `quality: optional number` - `timestamp: optional string` - `updated_at: optional string` timestamp when this participant's data was last updated. - `user_id: optional string` User id for this participant. - `success: optional boolean` ### Example ```http curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID/participants/$PARTICIPANT_ID \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" ``` #### 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_stats": { "config": "config", "device_info": { "browser": "browser", "browser_version": "browser_version", "cpus": 0, "engine": "engine", "is_mobile": true, "memory": 0, "os": "os", "os_version": "os_version", "sdk_name": "sdk_name", "sdk_version": "sdk_version", "user_agent": "user_agent", "webgl_support": "webgl_support" }, "events": [ { "timestamp": "timestamp", "type": "type" } ], "ip_information": { "city": "city", "country": "country", "ip_location": "ip_location", "ipv4": "ipv4", "org": "org", "portal": "portal", "region": "region", "timezone": "timezone" }, "precall_network_information": { "backend_rtt": 0, "effective_networktype": "effective_networktype", "fractional_loss": 0, "jitter": 0, "reflexive_connectivity": true, "relay_connectivity": true, "rtt": 0, "throughtput": 0, "turn_connectivity": true }, "status": "status" }, "preset_name": "preset_name", "quality_stats": [ { "audio_bandwidth": 0, "audio_packet_loss": 0, "audio_stats": [ { "concealment_events": 0, "jitter": 0, "packets_lost": 0, "quality": 0, "timestamp": "timestamp" } ], "average_quality": 0, "end": "end", "peer_id": "peer_id", "start": "start", "video_bandwidth": 0, "video_packet_loss": 0, "video_stats": [ { "frame_height": 0, "frame_width": 0, "frames_dropped": 0, "frames_per_second": 0, "jitter": 0, "packets_lost": 0, "quality": 0, "timestamp": "timestamp" } ] } ], "updated_at": "updated_at", "user_id": "user_id" } }, "success": true } ``` ## Fetch all chat messages of a session **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. ### Path Parameters - `account_id: string` The account identifier tag. - `app_id: string` The app identifier tag. - `session_id: string` ### Returns - `data: optional object { chat_download_url, chat_download_url_expiry }` - `chat_download_url: string` URL where the chat logs can be downloaded - `chat_download_url_expiry: string` Time when the download URL will expire - `success: optional boolean` ### Example ```http curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID/chat \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" ``` #### 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 **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. ### Path Parameters - `account_id: string` The account identifier tag. - `app_id: string` The app identifier tag. - `session_id: string` ### Returns - `data: optional object { sessionId, transcript_download_url, transcript_download_url_expiry }` - `sessionId: string` - `transcript_download_url: string` URL where the transcript can be downloaded - `transcript_download_url_expiry: string` Time when the download URL will expire - `success: optional boolean` ### Example ```http curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID/transcript \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" ``` #### 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 **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. ### Path Parameters - `account_id: string` The account identifier tag. - `app_id: string` The app identifier tag. - `session_id: string` ### Returns - `data: optional object { sessionId, summaryDownloadUrl, summaryDownloadUrlExpiry }` - `sessionId: string` - `summaryDownloadUrl: string` URL where the summary of transcripts can be downloaded - `summaryDownloadUrlExpiry: string` Time of Expiry before when you need to download the csv file. - `success: optional boolean` ### Example ```http curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID/summary \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" ``` #### Response ```json { "data": { "sessionId": "sessionId", "summaryDownloadUrl": "summaryDownloadUrl", "summaryDownloadUrlExpiry": "summaryDownloadUrlExpiry" }, "success": true } ``` ## Generate summary of Transcripts for the session **post** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/summary` Trigger Summary generation of Transcripts for the session ID. ### Path Parameters - `account_id: string` The account identifier tag. - `app_id: string` The app identifier tag. - `session_id: string` ### Example ```http curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID/summary \ -X POST \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" ``` ## Fetch details of peer **get** `/accounts/{account_id}/realtime/kit/{app_id}/sessions/peer-report/{peer_id}` Returns details of the given peer ID along with call statistics for the given session ID. ### Path Parameters - `account_id: string` The account identifier tag. - `app_id: string` The app identifier tag. - `peer_id: string` ### Query Parameters - `filters: optional "device_info" or "ip_information" or "precall_network_information" or 2 more` Comma separated list of filters to apply. Note that there must be no spaces between the filters. - `"device_info"` - `"ip_information"` - `"precall_network_information"` - `"events"` - `"quality_stats"` ### Returns - `data: optional object { participant }` - `participant: optional object { id, created_at, custom_participant_id, 10 more }` - `id: optional string` - `created_at: optional string` - `custom_participant_id: optional string` - `display_name: optional string` - `duration: optional number` - `joined_at: optional string` - `left_at: optional string` - `peer_report: optional object { metadata, quality }` - `metadata: optional object { audio_devices_updates, browser_metadata, candidate_pairs, 10 more }` - `audio_devices_updates: optional array of unknown` - `browser_metadata: optional object { browser, browser_version, engine, 2 more }` - `browser: optional string` - `browser_version: optional string` - `engine: optional string` - `user_agent: optional string` - `webgl_support: optional string` - `candidate_pairs: optional object { consuming_transport, producing_transport }` - `consuming_transport: optional array of unknown` - `producing_transport: optional array of object { available_outgoing_bitrate, bytes_discarded_on_send, bytes_received, 22 more }` - `available_outgoing_bitrate: optional number` - `bytes_discarded_on_send: optional number` - `bytes_received: optional number` - `bytes_sent: optional number` - `current_round_trip_time: optional number` - `last_packet_received_timestamp: optional number` - `last_packet_sent_timestamp: optional number` - `local_candidate_address: optional string` - `local_candidate_id: optional string` - `local_candidate_network_type: optional string` - `local_candidate_port: optional number` - `local_candidate_protocol: optional string` - `local_candidate_related_address: optional string` - `local_candidate_related_port: optional number` - `local_candidate_type: optional string` - `nominated: optional boolean` - `packets_discarded_on_send: optional number` - `packets_received: optional number` - `packets_sent: optional number` - `remote_candidate_address: optional string` - `remote_candidate_id: optional string` - `remote_candidate_port: optional number` - `remote_candidate_protocol: optional string` - `remote_candidate_type: optional string` - `total_round_trip_time: optional number` - `device_info: optional object { cpus, is_mobile, os, os_version }` - `cpus: optional number` - `is_mobile: optional boolean` - `os: optional string` - `os_version: optional string` - `events: optional array of object { name, timestamp }` - `name: optional string` - `timestamp: optional string` - `ip_information: optional object { asn, city, country, 3 more }` - `asn: optional object { asn }` - `asn: optional string` - `city: optional string` - `country: optional string` - `ipv4: optional string` - `region: optional string` - `timezone: optional string` - `pc_metadata: optional array of object { effective_network_type, reflexive_connectivity, relay_connectivity, 2 more }` - `effective_network_type: optional string` - `reflexive_connectivity: optional boolean` - `relay_connectivity: optional boolean` - `timestamp: optional string` - `turn_connectivity: optional boolean` - `room_view_type: optional string` - `sdk_name: optional string` - `sdk_version: optional string` - `selected_device_updates: optional array of unknown` - `speaker_devices_updates: optional array of unknown` - `video_devices_updates: optional array of unknown` - `quality: optional object { audio_consumer, audio_consumer_cumulative, audio_producer, 13 more }` - `audio_consumer: optional array of unknown` - `audio_consumer_cumulative: optional unknown` - `audio_producer: optional array of object { bytes_sent, jitter, mid, 7 more }` - `bytes_sent: optional number` - `jitter: optional number` - `mid: optional string` - `mos_quality: optional number` - `packets_lost: optional number` - `packets_sent: optional number` - `producer_id: optional string` - `rtt: optional number` - `ssrc: optional number` - `timestamp: optional string` - `audio_producer_cumulative: optional object { packet_loss, quality_mos, rtt }` - `packet_loss: optional object { "10_or_greater_event_fraction", "25_or_greater_event_fraction", "5_or_greater_event_fraction", 2 more }` - `"10_or_greater_event_fraction": optional number` - `"25_or_greater_event_fraction": optional number` - `"5_or_greater_event_fraction": optional number` - `"50_or_greater_event_fraction": optional number` - `avg: optional number` - `quality_mos: optional object { avg, p50, p75, p90 }` - `avg: optional number` - `p50: optional number` - `p75: optional number` - `p90: optional number` - `rtt: optional object { "100ms_or_greater_event_fraction", "250ms_or_greater_event_fraction", "500ms_or_greater_event_fraction", avg }` - `"100ms_or_greater_event_fraction": optional number` - `"250ms_or_greater_event_fraction": optional number` - `"500ms_or_greater_event_fraction": optional number` - `avg: optional number` - `screenshare_audio_consumer: optional array of unknown` - `screenshare_audio_consumer_cumulative: optional unknown` - `screenshare_audio_producer: optional array of unknown` - `screenshare_audio_producer_cumulative: optional unknown` - `screenshare_video_consumer: optional array of unknown` - `screenshare_video_consumer_cumulative: optional unknown` - `screenshare_video_producer: optional array of unknown` - `screenshare_video_producer_cumulative: optional unknown` - `video_consumer: optional array of unknown` - `video_consumer_cumulative: optional unknown` - `video_producer: optional array of unknown` - `video_producer_cumulative: optional unknown` - `peer_stats: optional object { device_info, events, ip_information, precall_network_information }` - `device_info: optional object { browser, browser_version, cpus, 8 more }` - `browser: optional string` - `browser_version: optional string` - `cpus: optional number` - `engine: optional string` - `is_mobile: optional boolean` - `os: optional string` - `os_version: optional string` - `sdk_name: optional string` - `sdk_version: optional string` - `user_agent: optional string` - `webgl_support: optional string` - `events: optional array of object { metadata, timestamp, type }` - `metadata: optional object { connection_info }` - `connection_info: optional object { backend_r_t_t, connectivity, effective_network_type, 7 more }` - `backend_r_t_t: optional number` - `connectivity: optional object { host, reflexive, relay }` - `host: optional boolean` - `reflexive: optional boolean` - `relay: optional boolean` - `effective_network_type: optional string` - `fractional_loss: optional number` - `ip_details: optional object { asn, city, country, 5 more }` - `asn: optional object { asn }` - `asn: optional string` - `city: optional string` - `country: optional string` - `ip: optional string` - `loc: optional string` - `postal: optional string` - `region: optional string` - `timezone: optional string` - `jitter: optional number` - `location: optional object { coords }` - `coords: optional object { latitude, longitude }` - `latitude: optional number` - `longitude: optional number` - `r_t_t: optional number` - `throughput: optional number` - `turn_connectivity: optional boolean` - `timestamp: optional string` - `type: optional string` - `ip_information: optional object { asn, city, country, 5 more }` - `asn: optional object { asn }` - `asn: optional string` - `city: optional string` - `country: optional string` - `ip_location: optional string` - `ipv4: optional string` - `org: optional string` - `region: optional string` - `timezone: optional string` - `precall_network_information: optional object { backend_rtt, effective_networktype, fractional_loss, 6 more }` - `backend_rtt: optional number` - `effective_networktype: optional string` - `fractional_loss: optional number` - `jitter: optional number` - `reflexive_connectivity: optional boolean` - `relay_connectivity: optional boolean` - `rtt: optional number` - `throughput: optional number` - `turn_connectivity: optional boolean` - `quality_stats: optional object { audio_bandwidth, audio_stats, average_quality, 13 more }` - `audio_bandwidth: optional number` - `audio_stats: optional array of unknown` - `average_quality: optional number` - `end: optional string` - `first_audio_packet_received: optional string` - `first_video_packet_received: optional string` - `last_audio_packet_received: optional string` - `last_video_packet_received: optional string` - `peer_ids: optional array of string` - `start: optional string` - `total_audio_packets: optional number` - `total_audio_packets_lost: optional number` - `total_video_packets: optional number` - `total_video_packets_lost: optional number` - `video_bandwidth: optional number` - `video_stats: optional array of unknown` - `role: optional string` - `updated_at: optional string` - `user_id: optional string` - `success: optional boolean` ### Example ```http curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/peer-report/$PEER_ID \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" ``` #### 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_report": { "metadata": { "audio_devices_updates": [ {} ], "browser_metadata": { "browser": "browser", "browser_version": "browser_version", "engine": "engine", "user_agent": "user_agent", "webgl_support": "webgl_support" }, "candidate_pairs": { "consuming_transport": [ {} ], "producing_transport": [ { "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", "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", "total_round_trip_time": 0 } ] }, "device_info": { "cpus": 0, "is_mobile": true, "os": "os", "os_version": "os_version" }, "events": [ { "name": "name", "timestamp": "timestamp" } ], "ip_information": { "asn": { "asn": "asn" }, "city": "city", "country": "country", "ipv4": "ipv4", "region": "region", "timezone": "timezone" }, "pc_metadata": [ { "effective_network_type": "effective_network_type", "reflexive_connectivity": true, "relay_connectivity": true, "timestamp": "timestamp", "turn_connectivity": true } ], "room_view_type": "room_view_type", "sdk_name": "sdk_name", "sdk_version": "sdk_version", "selected_device_updates": [ {} ], "speaker_devices_updates": [ {} ], "video_devices_updates": [ {} ] }, "quality": { "audio_consumer": [ {} ], "audio_consumer_cumulative": {}, "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": [ {} ], "screenshare_audio_consumer_cumulative": {}, "screenshare_audio_producer": [ {} ], "screenshare_audio_producer_cumulative": {}, "screenshare_video_consumer": [ {} ], "screenshare_video_consumer_cumulative": {}, "screenshare_video_producer": [ {} ], "screenshare_video_producer_cumulative": {}, "video_consumer": [ {} ], "video_consumer_cumulative": {}, "video_producer": [ {} ], "video_producer_cumulative": {} } }, "peer_stats": { "device_info": { "browser": "browser", "browser_version": "browser_version", "cpus": 0, "engine": "engine", "is_mobile": true, "os": "os", "os_version": "os_version", "sdk_name": "sdk_name", "sdk_version": "sdk_version", "user_agent": "user_agent", "webgl_support": "webgl_support" }, "events": [ { "metadata": { "connection_info": { "backend_r_t_t": 0, "connectivity": { "host": true, "reflexive": true, "relay": true }, "effective_network_type": "effective_network_type", "fractional_loss": 0, "ip_details": { "asn": { "asn": "asn" }, "city": "city", "country": "country", "ip": "ip", "loc": "loc", "postal": "postal", "region": "region", "timezone": "timezone" }, "jitter": 0, "location": { "coords": { "latitude": 0, "longitude": 0 } }, "r_t_t": 0, "throughput": 0, "turn_connectivity": true } }, "timestamp": "timestamp", "type": "type" } ], "ip_information": { "asn": { "asn": "asn" }, "city": "city", "country": "country", "ip_location": "ip_location", "ipv4": "ipv4", "org": "org", "region": "region", "timezone": "timezone" }, "precall_network_information": { "backend_rtt": 0, "effective_networktype": "effective_networktype", "fractional_loss": 0, "jitter": 0, "reflexive_connectivity": true, "relay_connectivity": true, "rtt": 0, "throughput": 0, "turn_connectivity": true } }, "quality_stats": { "audio_bandwidth": 0, "audio_stats": [ {} ], "average_quality": 0, "end": "end", "first_audio_packet_received": "first_audio_packet_received", "first_video_packet_received": "first_video_packet_received", "last_audio_packet_received": "last_audio_packet_received", "last_video_packet_received": "last_video_packet_received", "peer_ids": [ "string" ], "start": "start", "total_audio_packets": 0, "total_audio_packets_lost": 0, "total_video_packets": 0, "total_video_packets_lost": 0, "video_bandwidth": 0, "video_stats": [ {} ] }, "role": "role", "updated_at": "updated_at", "user_id": "user_id" } }, "success": true } ``` ## Domain Types ### Session Get Sessions Response - `SessionGetSessionsResponse = object { data, success }` - `data: optional object { sessions }` - `sessions: optional array of object { id, associated_id, created_at, 12 more }` - `id: string` ID of the session - `associated_id: string` 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: string` timestamp when session created - `live_participants: number` number of participants currently in the session - `max_concurrent_participants: number` number of maximum participants that were in the session - `meeting_display_name: string` Title of the meeting this session belongs to - `minutes_consumed: number` number of minutes consumed since the session started - `organization_id: string` App id that hosted this session - `started_at: string` timestamp when session started - `status: "LIVE" or "ENDED"` current status of session - `"LIVE"` - `"ENDED"` - `type: "meeting" or "livestream" or "participant"` type of session - `"meeting"` - `"livestream"` - `"participant"` - `updated_at: string` timestamp when session was last updated - `breakout_rooms: optional array of unknown` - `ended_at: optional string` timestamp when session ended - `meta: optional unknown` Any meta data about session. - `success: optional boolean` ### Session Get Session Details Response - `SessionGetSessionDetailsResponse = object { data, success }` - `data: optional object { session }` - `session: optional object { id, associated_id, created_at, 12 more }` - `id: string` ID of the session - `associated_id: string` 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: string` timestamp when session created - `live_participants: number` number of participants currently in the session - `max_concurrent_participants: number` number of maximum participants that were in the session - `meeting_display_name: string` Title of the meeting this session belongs to - `minutes_consumed: number` number of minutes consumed since the session started - `organization_id: string` App id that hosted this session - `started_at: string` timestamp when session started - `status: "LIVE" or "ENDED"` current status of session - `"LIVE"` - `"ENDED"` - `type: "meeting" or "livestream" or "participant"` type of session - `"meeting"` - `"livestream"` - `"participant"` - `updated_at: string` timestamp when session was last updated - `breakout_rooms: optional array of unknown` - `ended_at: optional string` timestamp when session ended - `meta: optional unknown` Any meta data about session. - `success: optional boolean` ### Session Get Session Participants Response - `SessionGetSessionParticipantsResponse = object { data, success }` - `data: optional object { participants }` - `participants: optional array of object { id, created_at, custom_participant_id, 7 more }` - `id: optional string` Participant ID. This maps to the corresponding peerId. - `created_at: optional string` timestamp when this participant was created. - `custom_participant_id: optional string` ID passed by client to create this participant. - `display_name: optional string` Display name of participant when joining the session. - `duration: optional number` number of minutes for which the participant was in the session. - `joined_at: optional string` timestamp at which participant joined the session. - `left_at: optional string` timestamp at which participant left the session. - `preset_name: optional string` Name of the preset associated with the participant. - `updated_at: optional string` timestamp when this participant's data was last updated. - `user_id: optional string` User id for this participant. - `success: optional boolean` ### Session Get Session Participant Details Response - `SessionGetSessionParticipantDetailsResponse = object { data, success }` - `data: optional object { participant }` - `participant: optional object { id, created_at, custom_participant_id, 9 more }` - `id: optional string` Participant ID. This maps to the corresponding peerId. - `created_at: optional string` timestamp when this participant was created. - `custom_participant_id: optional string` ID passed by client to create this participant. - `display_name: optional string` Display name of participant when joining the session. - `duration: optional number` number of minutes for which the participant was in the session. - `joined_at: optional string` timestamp at which participant joined the session. - `left_at: optional string` timestamp at which participant left the session. - `peer_stats: optional object { config, device_info, events, 3 more }` - `config: optional string` - `device_info: optional object { browser, browser_version, cpus, 9 more }` - `browser: optional string` - `browser_version: optional string` - `cpus: optional number` - `engine: optional string` - `is_mobile: optional boolean` - `memory: optional number` - `os: optional string` - `os_version: optional string` - `sdk_name: optional string` - `sdk_version: optional string` - `user_agent: optional string` - `webgl_support: optional string` - `events: optional array of object { timestamp, type }` - `timestamp: optional string` - `type: optional string` - `ip_information: optional object { city, country, ip_location, 5 more }` - `city: optional string` - `country: optional string` - `ip_location: optional string` - `ipv4: optional string` - `org: optional string` - `portal: optional string` - `region: optional string` - `timezone: optional string` - `precall_network_information: optional object { backend_rtt, effective_networktype, fractional_loss, 6 more }` - `backend_rtt: optional number` - `effective_networktype: optional string` - `fractional_loss: optional number` - `jitter: optional number` - `reflexive_connectivity: optional boolean` - `relay_connectivity: optional boolean` - `rtt: optional number` - `throughtput: optional number` - `turn_connectivity: optional boolean` - `status: optional string` - `preset_name: optional string` Name of the preset associated with the participant. - `quality_stats: optional array of object { audio_bandwidth, audio_packet_loss, audio_stats, 7 more }` - `audio_bandwidth: optional number` - `audio_packet_loss: optional number` - `audio_stats: optional array of object { concealment_events, jitter, packets_lost, 2 more }` - `concealment_events: optional number` - `jitter: optional number` - `packets_lost: optional number` - `quality: optional number` - `timestamp: optional string` - `average_quality: optional number` - `end: optional string` - `peer_id: optional string` - `start: optional string` - `video_bandwidth: optional number` - `video_packet_loss: optional number` - `video_stats: optional array of object { frame_height, frame_width, frames_dropped, 5 more }` - `frame_height: optional number` - `frame_width: optional number` - `frames_dropped: optional number` - `frames_per_second: optional number` - `jitter: optional number` - `packets_lost: optional number` - `quality: optional number` - `timestamp: optional string` - `updated_at: optional string` timestamp when this participant's data was last updated. - `user_id: optional string` User id for this participant. - `success: optional boolean` ### Session Get Session Chat Response - `SessionGetSessionChatResponse = object { data, success }` - `data: optional object { chat_download_url, chat_download_url_expiry }` - `chat_download_url: string` URL where the chat logs can be downloaded - `chat_download_url_expiry: string` Time when the download URL will expire - `success: optional boolean` ### Session Get Session Transcripts Response - `SessionGetSessionTranscriptsResponse = object { data, success }` - `data: optional object { sessionId, transcript_download_url, transcript_download_url_expiry }` - `sessionId: string` - `transcript_download_url: string` URL where the transcript can be downloaded - `transcript_download_url_expiry: string` Time when the download URL will expire - `success: optional boolean` ### Session Get Session Summary Response - `SessionGetSessionSummaryResponse = object { data, success }` - `data: optional object { sessionId, summaryDownloadUrl, summaryDownloadUrlExpiry }` - `sessionId: string` - `summaryDownloadUrl: string` URL where the summary of transcripts can be downloaded - `summaryDownloadUrlExpiry: string` Time of Expiry before when you need to download the csv file. - `success: optional boolean` ### Session Get Participant Data From Peer ID Response - `SessionGetParticipantDataFromPeerIDResponse = object { data, success }` - `data: optional object { participant }` - `participant: optional object { id, created_at, custom_participant_id, 10 more }` - `id: optional string` - `created_at: optional string` - `custom_participant_id: optional string` - `display_name: optional string` - `duration: optional number` - `joined_at: optional string` - `left_at: optional string` - `peer_report: optional object { metadata, quality }` - `metadata: optional object { audio_devices_updates, browser_metadata, candidate_pairs, 10 more }` - `audio_devices_updates: optional array of unknown` - `browser_metadata: optional object { browser, browser_version, engine, 2 more }` - `browser: optional string` - `browser_version: optional string` - `engine: optional string` - `user_agent: optional string` - `webgl_support: optional string` - `candidate_pairs: optional object { consuming_transport, producing_transport }` - `consuming_transport: optional array of unknown` - `producing_transport: optional array of object { available_outgoing_bitrate, bytes_discarded_on_send, bytes_received, 22 more }` - `available_outgoing_bitrate: optional number` - `bytes_discarded_on_send: optional number` - `bytes_received: optional number` - `bytes_sent: optional number` - `current_round_trip_time: optional number` - `last_packet_received_timestamp: optional number` - `last_packet_sent_timestamp: optional number` - `local_candidate_address: optional string` - `local_candidate_id: optional string` - `local_candidate_network_type: optional string` - `local_candidate_port: optional number` - `local_candidate_protocol: optional string` - `local_candidate_related_address: optional string` - `local_candidate_related_port: optional number` - `local_candidate_type: optional string` - `nominated: optional boolean` - `packets_discarded_on_send: optional number` - `packets_received: optional number` - `packets_sent: optional number` - `remote_candidate_address: optional string` - `remote_candidate_id: optional string` - `remote_candidate_port: optional number` - `remote_candidate_protocol: optional string` - `remote_candidate_type: optional string` - `total_round_trip_time: optional number` - `device_info: optional object { cpus, is_mobile, os, os_version }` - `cpus: optional number` - `is_mobile: optional boolean` - `os: optional string` - `os_version: optional string` - `events: optional array of object { name, timestamp }` - `name: optional string` - `timestamp: optional string` - `ip_information: optional object { asn, city, country, 3 more }` - `asn: optional object { asn }` - `asn: optional string` - `city: optional string` - `country: optional string` - `ipv4: optional string` - `region: optional string` - `timezone: optional string` - `pc_metadata: optional array of object { effective_network_type, reflexive_connectivity, relay_connectivity, 2 more }` - `effective_network_type: optional string` - `reflexive_connectivity: optional boolean` - `relay_connectivity: optional boolean` - `timestamp: optional string` - `turn_connectivity: optional boolean` - `room_view_type: optional string` - `sdk_name: optional string` - `sdk_version: optional string` - `selected_device_updates: optional array of unknown` - `speaker_devices_updates: optional array of unknown` - `video_devices_updates: optional array of unknown` - `quality: optional object { audio_consumer, audio_consumer_cumulative, audio_producer, 13 more }` - `audio_consumer: optional array of unknown` - `audio_consumer_cumulative: optional unknown` - `audio_producer: optional array of object { bytes_sent, jitter, mid, 7 more }` - `bytes_sent: optional number` - `jitter: optional number` - `mid: optional string` - `mos_quality: optional number` - `packets_lost: optional number` - `packets_sent: optional number` - `producer_id: optional string` - `rtt: optional number` - `ssrc: optional number` - `timestamp: optional string` - `audio_producer_cumulative: optional object { packet_loss, quality_mos, rtt }` - `packet_loss: optional object { "10_or_greater_event_fraction", "25_or_greater_event_fraction", "5_or_greater_event_fraction", 2 more }` - `"10_or_greater_event_fraction": optional number` - `"25_or_greater_event_fraction": optional number` - `"5_or_greater_event_fraction": optional number` - `"50_or_greater_event_fraction": optional number` - `avg: optional number` - `quality_mos: optional object { avg, p50, p75, p90 }` - `avg: optional number` - `p50: optional number` - `p75: optional number` - `p90: optional number` - `rtt: optional object { "100ms_or_greater_event_fraction", "250ms_or_greater_event_fraction", "500ms_or_greater_event_fraction", avg }` - `"100ms_or_greater_event_fraction": optional number` - `"250ms_or_greater_event_fraction": optional number` - `"500ms_or_greater_event_fraction": optional number` - `avg: optional number` - `screenshare_audio_consumer: optional array of unknown` - `screenshare_audio_consumer_cumulative: optional unknown` - `screenshare_audio_producer: optional array of unknown` - `screenshare_audio_producer_cumulative: optional unknown` - `screenshare_video_consumer: optional array of unknown` - `screenshare_video_consumer_cumulative: optional unknown` - `screenshare_video_producer: optional array of unknown` - `screenshare_video_producer_cumulative: optional unknown` - `video_consumer: optional array of unknown` - `video_consumer_cumulative: optional unknown` - `video_producer: optional array of unknown` - `video_producer_cumulative: optional unknown` - `peer_stats: optional object { device_info, events, ip_information, precall_network_information }` - `device_info: optional object { browser, browser_version, cpus, 8 more }` - `browser: optional string` - `browser_version: optional string` - `cpus: optional number` - `engine: optional string` - `is_mobile: optional boolean` - `os: optional string` - `os_version: optional string` - `sdk_name: optional string` - `sdk_version: optional string` - `user_agent: optional string` - `webgl_support: optional string` - `events: optional array of object { metadata, timestamp, type }` - `metadata: optional object { connection_info }` - `connection_info: optional object { backend_r_t_t, connectivity, effective_network_type, 7 more }` - `backend_r_t_t: optional number` - `connectivity: optional object { host, reflexive, relay }` - `host: optional boolean` - `reflexive: optional boolean` - `relay: optional boolean` - `effective_network_type: optional string` - `fractional_loss: optional number` - `ip_details: optional object { asn, city, country, 5 more }` - `asn: optional object { asn }` - `asn: optional string` - `city: optional string` - `country: optional string` - `ip: optional string` - `loc: optional string` - `postal: optional string` - `region: optional string` - `timezone: optional string` - `jitter: optional number` - `location: optional object { coords }` - `coords: optional object { latitude, longitude }` - `latitude: optional number` - `longitude: optional number` - `r_t_t: optional number` - `throughput: optional number` - `turn_connectivity: optional boolean` - `timestamp: optional string` - `type: optional string` - `ip_information: optional object { asn, city, country, 5 more }` - `asn: optional object { asn }` - `asn: optional string` - `city: optional string` - `country: optional string` - `ip_location: optional string` - `ipv4: optional string` - `org: optional string` - `region: optional string` - `timezone: optional string` - `precall_network_information: optional object { backend_rtt, effective_networktype, fractional_loss, 6 more }` - `backend_rtt: optional number` - `effective_networktype: optional string` - `fractional_loss: optional number` - `jitter: optional number` - `reflexive_connectivity: optional boolean` - `relay_connectivity: optional boolean` - `rtt: optional number` - `throughput: optional number` - `turn_connectivity: optional boolean` - `quality_stats: optional object { audio_bandwidth, audio_stats, average_quality, 13 more }` - `audio_bandwidth: optional number` - `audio_stats: optional array of unknown` - `average_quality: optional number` - `end: optional string` - `first_audio_packet_received: optional string` - `first_video_packet_received: optional string` - `last_audio_packet_received: optional string` - `last_video_packet_received: optional string` - `peer_ids: optional array of string` - `start: optional string` - `total_audio_packets: optional number` - `total_audio_packets_lost: optional number` - `total_video_packets: optional number` - `total_video_packets_lost: optional number` - `video_bandwidth: optional number` - `video_stats: optional array of unknown` - `role: optional string` - `updated_at: optional string` - `user_id: optional string` - `success: optional boolean`