Files
2026-07-13 12:20:06 +08:00

10 KiB

WebSockets - Event Types

Complete reference for events available via Zoom WebSockets.

Event Structure

All WebSocket events follow this structure:

{
  "event": "event.type",
  "event_ts": 1706123456789,
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      // Event-specific data
    }
  }
}
Field Type Description
event string Event type identifier
event_ts number Unix timestamp (milliseconds)
payload.account_id string Zoom account ID
payload.object object Event-specific payload

Meeting Events

meeting.created

Triggered when a meeting is scheduled.

{
  "event": "meeting.created",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "host_id": "xyz789",
      "topic": "Weekly Team Sync",
      "type": 2,
      "start_time": "2024-01-25T10:00:00Z",
      "duration": 60,
      "timezone": "America/Los_Angeles"
    }
  }
}

meeting.updated

Triggered when meeting settings are changed.

{
  "event": "meeting.updated",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "topic": "Updated: Weekly Team Sync"
    },
    "old_object": {
      "topic": "Weekly Team Sync"
    }
  }
}

meeting.deleted

Triggered when a meeting is deleted.

{
  "event": "meeting.deleted",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "host_id": "xyz789"
    }
  }
}

meeting.started

Triggered when a meeting begins.

{
  "event": "meeting.started",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "host_id": "xyz789",
      "topic": "Weekly Team Sync",
      "type": 2,
      "start_time": "2024-01-25T10:00:00Z",
      "timezone": "America/Los_Angeles"
    }
  }
}

meeting.ended

Triggered when a meeting ends.

{
  "event": "meeting.ended",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "host_id": "xyz789",
      "topic": "Weekly Team Sync",
      "start_time": "2024-01-25T10:00:00Z",
      "end_time": "2024-01-25T11:05:00Z",
      "duration": 65
    }
  }
}

meeting.participant_joined

Triggered when a participant joins the meeting.

{
  "event": "meeting.participant_joined",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "host_id": "xyz789",
      "participant": {
        "id": "participant123",
        "user_id": "user456",
        "user_name": "John Doe",
        "email": "john@example.com",
        "join_time": "2024-01-25T10:02:00Z"
      }
    }
  }
}

meeting.participant_left

Triggered when a participant leaves the meeting.

{
  "event": "meeting.participant_left",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "participant": {
        "id": "participant123",
        "user_name": "John Doe",
        "leave_time": "2024-01-25T10:45:00Z",
        "leave_reason": "left the meeting"
      }
    }
  }
}

meeting.sharing_started

Triggered when screen sharing begins.

{
  "event": "meeting.sharing_started",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "participant": {
        "id": "participant123",
        "user_name": "John Doe"
      },
      "sharing_details": {
        "content": "screen",
        "date_time": "2024-01-25T10:15:00Z"
      }
    }
  }
}

meeting.sharing_ended

Triggered when screen sharing ends.

{
  "event": "meeting.sharing_ended",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "participant": {
        "id": "participant123",
        "user_name": "John Doe"
      }
    }
  }
}

Recording Events

recording.started

Triggered when cloud recording starts.

{
  "event": "recording.started",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "host_id": "xyz789",
      "topic": "Weekly Team Sync",
      "start_time": "2024-01-25T10:00:00Z",
      "recording_start": "2024-01-25T10:01:00Z"
    }
  }
}

recording.stopped

Triggered when cloud recording stops (paused or ended).

{
  "event": "recording.stopped",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "recording_start": "2024-01-25T10:01:00Z",
      "recording_end": "2024-01-25T11:00:00Z"
    }
  }
}

recording.completed

Triggered when cloud recording is processed and ready for download.

{
  "event": "recording.completed",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 1234567890,
      "uuid": "abcdefgh-1234-5678-abcd-1234567890ab",
      "host_id": "xyz789",
      "topic": "Weekly Team Sync",
      "start_time": "2024-01-25T10:00:00Z",
      "duration": 60,
      "total_size": 157286400,
      "recording_count": 2,
      "recording_files": [
        {
          "id": "file123",
          "meeting_id": "abcdefgh-1234-5678-abcd-1234567890ab",
          "recording_start": "2024-01-25T10:01:00Z",
          "recording_end": "2024-01-25T11:00:00Z",
          "file_type": "MP4",
          "file_size": 104857600,
          "download_url": "https://zoom.us/rec/download/...",
          "status": "completed"
        },
        {
          "id": "file124",
          "file_type": "TRANSCRIPT",
          "file_size": 52428800,
          "download_url": "https://zoom.us/rec/download/..."
        }
      ]
    }
  }
}

recording.trashed

Triggered when recording is moved to trash.

recording.deleted

Triggered when recording is permanently deleted.

recording.recovered

Triggered when recording is restored from trash.

User Events

user.created

Triggered when a new user is added to the account.

{
  "event": "user.created",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": "user789",
      "first_name": "Jane",
      "last_name": "Smith",
      "email": "jane.smith@example.com",
      "type": 2,
      "created_at": "2024-01-25T09:00:00Z"
    }
  }
}

user.updated

Triggered when user details are changed.

{
  "event": "user.updated",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": "user789",
      "first_name": "Jane",
      "last_name": "Smith-Jones"
    },
    "old_object": {
      "last_name": "Smith"
    }
  }
}

user.deleted

Triggered when a user is removed from the account.

{
  "event": "user.deleted",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": "user789",
      "email": "jane.smith@example.com"
    }
  }
}

user.deactivated

Triggered when a user is deactivated.

user.activated

Triggered when a user is activated.

Webinar Events

webinar.created

webinar.updated

webinar.deleted

webinar.started

webinar.ended

webinar.registration_created

Triggered when someone registers for a webinar.

{
  "event": "webinar.registration_created",
  "payload": {
    "account_id": "abcD3ojkdbjfg",
    "object": {
      "id": 9876543210,
      "uuid": "webinar-uuid-here",
      "registrant": {
        "id": "registrant123",
        "email": "attendee@example.com",
        "first_name": "Attendee",
        "last_name": "User",
        "join_url": "https://zoom.us/w/..."
      }
    }
  }
}

Event Handling Example

const eventHandlers = {
  // Meeting events
  'meeting.created': (payload) => {
    console.log(`New meeting: ${payload.object.topic}`);
    notifyCalendarService(payload.object);
  },
  
  'meeting.started': (payload) => {
    console.log(`Meeting started: ${payload.object.topic}`);
    updateMeetingStatus(payload.object.id, 'in_progress');
  },
  
  'meeting.ended': (payload) => {
    console.log(`Meeting ended: ${payload.object.uuid}`);
    updateMeetingStatus(payload.object.id, 'completed');
    calculateAttendance(payload.object);
  },
  
  'meeting.participant_joined': (payload) => {
    const { participant } = payload.object;
    console.log(`${participant.user_name} joined`);
    trackAttendance(payload.object.id, participant);
  },
  
  // Recording events
  'recording.completed': (payload) => {
    console.log(`Recording ready: ${payload.object.topic}`);
    downloadRecordings(payload.object.recording_files);
  },
  
  // User events
  'user.created': (payload) => {
    console.log(`New user: ${payload.object.email}`);
    sendWelcomeEmail(payload.object);
  }
};

ws.on('message', (data) => {
  const event = JSON.parse(data);
  const handler = eventHandlers[event.event];
  
  if (handler) {
    handler(event.payload);
  } else {
    console.log(`Unhandled event: ${event.event}`);
  }
});

Subscribing to Events

Configure which events to receive in your Zoom Marketplace app:

  1. Go to FeatureEvent Subscriptions
  2. Select WebSockets as method type
  3. Check the events you want to receive
  4. Save the subscription

Note: You can modify subscriptions at any time. Changes take effect immediately.

Event Filtering

If you're receiving too many events, consider:

  1. Subscribe selectively - Only subscribe to events you need
  2. Filter in handler - Drop events that don't match your criteria
  3. Use multiple subscriptions - Route different events to different handlers
// Filter example: Only process events for specific hosts
ws.on('message', (data) => {
  const event = JSON.parse(data);
  
  // Only process meetings from specific hosts
  const allowedHosts = ['host1@example.com', 'host2@example.com'];
  
  if (event.event.startsWith('meeting.') && 
      event.payload.object.host_id &&
      !allowedHosts.includes(getHostEmail(event.payload.object.host_id))) {
    return; // Skip this event
  }
  
  processEvent(event);
});

Resources