Webhook Data Dictionary
Overview
This article defines the fields and event types ScreenMeet sends in webhook payloads. Use it to parse webhook events, track session state, and sync session data into an external system such as a CRM or ticketing platform.
To create a webhook and verify its signature, see Configuring Webhooks for Data Sync.
Payload Format
Every webhook request body is a JSON array containing one or more event objects. The body is an array even when it contains a single event, so always iterate over it.
Each event is a denormalized JSON object. Not every event contains every field, so treat the data as sparse and check for a field before reading it.
status reflects the session status when the batch was sent, not when each event occurred. Use ts to order events and use type to determine what happened.Event Fields
| Field | Type | Description |
|---|---|---|
type | string | The event name. See Event Types. |
ts | ISO date string or integer | When the event occurred. Most events use an ISO 8601 string, such as 2026-01-01T15:00:00.000Z. Some events, including session-activated, use Unix epoch milliseconds, such as 1767279600000. Accept both formats. |
message | string | A human-readable description of the event. |
id | string | The unique 6 or 12 character base62 session ID. This is the same ID that appears after the ? in a Live session URL. |
pin | integer | The session PIN. PINs are temporary and are only valid while the session is new or active. |
sessionType | string | The product type: live, support, cobrowse, or replay. |
label | string | The session subject or description entered by the agent or the integration. |
userDescription | string | The agent display name. Shown to the end user in Support and CoBrowse sessions when they are asked to share their screen. |
status | string enum | The session status. See Session Status Values. |
user | object | The agent who created the session. |
organization | object | The organization of the agent who created the session. |
settings | object | Name-value pairs of the settings used to create the session, mapped from AgentPrefs. |
createdByAgentSession | object | The authenticated agent session used to create the ScreenMeet session. |
crmSyncTarget | object | The related record in an external system, when the session was created through an integration. Empty for console and API sessions. |
device | object | Name-value pairs describing the device: the browser for CoBrowse sessions, or the native app environment for Remote Support sessions. |
stats | object | Session statistics. Populated once the session closes. See Stats Object. |
seconds | integer | How many seconds into the session the event occurred. |
servers | object | The ScreenMeet servers hosting the session, keyed by service, such as live, cobrowse, or recorder. |
metaData | object | Additional session metadata. May be empty or null. |
storedFile | object | Metadata for a file written to storage. Only present on file-uploaded-to-storage. |
Session Status Values
| Status | Meaning |
|---|---|
scheduled | The session is scheduled to start in the future. |
new | The session is created and ready to join. No participant has joined yet. |
active | At least one participant has joined. |
closed | The session has ended. |
Detecting Session Start and End
To track whether a session is in progress, act on two event types and ignore the rest.
| Event type | Status | Meaning |
|---|---|---|
session-activated | active | A participant has joined and the session is now in progress. |
session-closed | closed | The session has ended. stats.termination-reason and stats.time-ended describe how and when. |
Match events to your own records using id. If your application shares the session link, store the session ID from that link when it is sent.
active and session-closed is not sent.Event Types
Event types are grouped by the products that emit them. This list may not include every event ScreenMeet sends. Ignore any event type your application does not recognize.
All Products
| Event type | Description |
|---|---|
session-created | A session was created by an agent, an integration, or the API. |
session-activated | The session became active because a participant joined. |
session-closed | The session ended. |
session-server-selected | A server was selected to host the session. |
chat | A chat message was sent in the session. |
file-uploaded | A file was uploaded to the server. |
file-uploaded-to-storage | A file, such as a recording, was written to permanent storage. |
file-download | A stored recording or file was downloaded from the ScreenMeet console. |
session-rating | The agent submitted a rating after the session. |
session-feedback | The agent submitted session quality feedback after the session. |
session-data-expired | The data retention policy purged data for this session. |
Live
| Event type | Description |
|---|---|
live-server-selected | A Live media server was selected to host the session. |
server-region-selected | The Live session started in a specific server region. |
entered-lobby | A user entered the meeting lobby. |
room-entry-requested | A user requested entry into the room. |
room-entered | A user entered the meeting room. |
user-joined | A user joined the meeting. |
user-left | A user left the meeting. |
microphone-access-requested | Access to a user's microphone was requested. |
microphone-access-succeeded | A user's microphone audio stream was acquired. |
microphone-access-error | An error occurred while acquiring a user's microphone audio stream. |
camera-access-requested | Access to a user's camera was requested. |
camera-access-succeeded | A user's camera video stream was acquired. |
camera-access-error | An error occurred while acquiring a user's camera video stream. |
desktop-access-requested | Access to a user's desktop was requested for screen sharing. |
desktop-access-succeeded | A user's desktop video stream was acquired. |
desktop-access-error | An error occurred while acquiring a user's desktop video stream. |
audio-muted | A user muted their audio. |
audio-resumed | A user unmuted their audio. |
record-toggled | Recording was turned on or off. |
Remote Support
| Event type | Description |
|---|---|
user-connected | The end user connected to the session. Also sent for CoBrowse. |
user-disconnected | The end user disconnected from the session. Also sent for CoBrowse. |
agent-joined | An agent joined the session. |
agent-left | An agent disconnected from the session. |
video-stream-started | The end user started streaming their desktop. |
session-ending | Session shutdown started. The session will close shortly. |
client-event | The end user's client sent a log event. |
clipboard-link-on | The agent turned on clipboard linking. |
remote-control-requested | The agent requested remote control of the end user's device. |
remote-control-granted | The end user granted remote control to the agent. |
remote-control-stopped | Remote control of the end user's device stopped. |
uac-requested | Admin permission was requested on the end user's device. |
uac-permission-granted | Admin permission was granted on the end user's device. |
uac-permission-denied | Admin permission was denied on the end user's device. |
remote-execute | A remote macro or command ran on the end user's device. |
CoBrowse
| Event type | Description |
|---|---|
user-connected | The end user connected to the session. |
user-disconnected | The end user disconnected from the session. |
agent-connected | An agent connected to the session. |
agent-disconnected | An agent disconnected from the session. |
url-navigate | The end user navigated to a URL. |
page-focus | The end user's browser focused a page that is being cobrowsed. |
cb-dialog-pin-entered | The end user entered a PIN in the CoBrowse dialog. |
remote-control-permission-request | Remote control permission was requested from the end user. |
remote-control-permission-granted | The end user granted remote control permission. |
remote-control-permission-denied | The end user denied remote control permission. |
Stats Object
The stats object is populated when the session closes. Fields vary by product.
| Field | Products | Description |
|---|---|---|
termination-reason | All | Why the session closed, such as closed by agent. |
time-ended | All | ISO timestamp of when the session ended. |
duration | All | Total session length in seconds. |
duration-connected | All | Seconds during which participants were connected. |
max-concurrent-viewers | All | The highest number of viewers connected at once. |
metrics | All | Performance measurements, each with total, mdn, avg, std, min, and max. May be empty. |
streamtype | Live | The product type, such as live. Note the lowercase key. |
duration-idle | Live | Seconds the session was idle. |
sum-user-seconds | Live | Total connected seconds summed across participants. |
streamType | CoBrowse | The product type, such as cobrowse. Note the camel-case key. |
chat-message-count | CoBrowse | Number of chat messages sent. |
agents | CoBrowse | Array of agents who joined, including name, external ID, TURN server, and user agent details. |
Sample Payloads
The samples below are trimmed for readability. Values are placeholders.
Live Session Closed
[
{
"id": "AbCdEfGhIjKl",
"pin": 123456,
"label": "Case 00012345",
"userDescription": "Alex",
"status": "closed",
"sessionType": "live",
"settings": {
"audio": true,
"knock": false,
"recording": false,
"guest_video": false,
"startwithrc": false,
"startwithadmin": false
},
"stats": {
"streamtype": "live",
"duration": 15,
"duration-connected": 15,
"duration-idle": 0,
"time-ended": "2026-01-01T15:00:00.000Z",
"max-concurrent-viewers": 1,
"sum-user-seconds": 0,
"metrics": {},
"termination-reason": "closed by agent"
},
"servers": {
"live": {
"id": 470000,
"region": "us-east-1",
"endpoint": "https://live-prod-470000.screenmeet.com",
"serverInstanceId": "i-0123456789abcdef0"
}
},
"organization": { "id": 1000, "name": "Example Org" },
"user": { "id": 2000, "name": "Alex Agent", "email": "agent@example.com" },
"crmSyncTarget": {},
"ts": "2026-01-01T15:00:00.150Z",
"type": "session-closed",
"message": "Session AbCdEfGhIjKl has been closed."
}
]Live Session Activated
[
{
"id": "AbCdEfGhIjKl",
"pin": 123456,
"label": "Case 00012345",
"status": "active",
"sessionType": "live",
"stats": null,
"ts": 1767279585000,
"type": "session-activated",
"message": "live session state is now active"
}
]CoBrowse Event
[
{
"id": "kpkvgPbBYkxC",
"userDescription": "Joe",
"label": "test cb",
"status": "closed",
"settings": {
"audio": true,
"knock": false,
"recording": true,
"startwithrc": false,
"startwithadmin": false
},
"stats": {
"agents": [
{
"id": 9916,
"externalId": "0054T000000jyEhQAI",
"name": "Joe Smith",
"isActive": true,
"turn": "turn-11601.screenmeet.com",
"ua": {
"family": "Chrome",
"major": "92",
"os": { "family": "Mac OS X", "major": "10", "minor": "15", "patch": "7" }
},
"cid": "d2bf6dec-3ece-4af1-b002-d37df5be649c"
}
],
"streamType": "cobrowse",
"chat-message-count": 0,
"max-concurrent-viewers": 0,
"time-ended": "2021-08-17T20:38:00.313Z",
"duration": 22,
"duration-connected": 16,
"termination-reason": "closed by agent",
"metrics": {
"loading_time_end_user_ms": { "total": 1, "mdn": 2235, "avg": 2235, "std": 0, "min": 2235, "max": 2235 },
"from_pin_to_agent_connect_ms": { "total": 1, "mdn": 5497, "avg": 5497, "std": 0, "min": 5497, "max": 5497 }
}
},
"servers": {
"cobrowse": {
"id": 12327,
"endpoint": "https://cb-12327.screenmeet.com:443",
"use_proxy": true,
"proxy_endpoint": "https://rt-proxy.screenmeet.com"
},
"recorder": { "id": 11590 }
},
"pin": 218560,
"organization": { "id": 265, "provider": "sfdc", "name": "ScreenMeet Developer Org" },
"user": { "id": 9916, "email": "joe@example.com", "name": "Joe Smith" },
"crmSyncTarget": {},
"ts": "2021-08-17T20:37:40.019Z",
"type": "url-navigate",
"message": "End-user navigated to https://cbdemo.screenmeet.com/",
"device": {
"browser_name": "Chrome",
"browser_version": "92.0.4515.131",
"os_name": "Mac OS",
"os_version": "10.15.7"
},
"seconds": 1
}
]File Uploaded to Storage
[
{
"organization": { "id": 265, "provider": "sfdc", "name": "ScreenMeet Developer Org" },
"user": { "id": 9916, "email": "joe@example.com", "name": "Joe Smith" },
"ts": "2021-08-17T20:38:03.429Z",
"storedFile": {
"SupportSessionId": "kpkvgPbBYkxC",
"OrganizationId": 265,
"ExternalUserId": 9916,
"size": 574295,
"type": "recording",
"name": "kpkvgPbBYkxC-2021-08-17.20.37.webm",
"uploader": "ScreenMeet Session Recorder",
"externalObjectId": "v3/2021/8/17/kpkvgPbBYkxC/kpkvgPbBYkxC-2021-08-17.20.37.webm",
"provider": "screenmeet",
"location": "v3/2021/8/17/kpkvgPbBYkxC/kpkvgPbBYkxC-2021-08-17.20.37.webm",
"downloadable": true,
"linkable": false,
"usesRetentionPolicy": true
},
"type": "file-uploaded-to-storage",
"message": "File kpkvgPbBYkxC-2021-08-17.20.37.webm from session kpkvgPbBYkxC uploaded to [screenmeet]",
"crmSyncTarget": {}
}
]